survex-1.4.4/0000755000175000017500000000000014367067016010067 500000000000000survex-1.4.4/COPYING0000644000175000017500000004310513346142325011036 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. survex-1.4.4/config.guess0000755000175000017500000014051214367066627012341 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: survex-1.4.4/acinclude.m40000644000175000017500000000223714141575516012203 00000000000000dnl @synopsis AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) dnl dnl This macro sets VARNAME to the expansion of the DIR variable, dnl taking care of fixing up ${prefix} and such. dnl dnl VARNAME is then offered as both an output variable and a C dnl preprocessor symbol. dnl dnl Example: dnl dnl AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) dnl dnl @category Misc dnl @author Stepan Kasal dnl @author Andreas Schwab dnl @author Guido Draheim dnl @author Alexandre Oliva dnl @version 2005-07-29 dnl @license AllPermissive AC_DEFUN([AC_DEFINE_DIR], [ prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn dnl refers to ${prefix}. Thus we have to use `eval' twice. eval ac_define_dir="\"[$]$2\"" eval ac_define_dir="\"$ac_define_dir\"" AC_SUBST($1, "$ac_define_dir") AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3]) test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE ]) survex-1.4.4/doc/0000755000175000017500000000000014367067015010633 500000000000000survex-1.4.4/doc/3dformat-old.htm0000644000175000017500000003202514141575516013562 00000000000000 Survex 3d Format Specification (v3-v7)

Survex 3d Format Specification (v3-v7)

If you're writing in C or C++ it's strongly recommended that you use the img routine provided with Survex to read and write 3d files. Doing so means that you can take advantage of any revisions to the 3d format by simply rebuilding your software with the updated img routines, rather than having to update your own code. It also allows you to read a sub-set of the data in the file, restricted by Survey prefix.

This document only describes 3d format revisions 3 to 7 (inclusive). Newer versions are described in a separate document. Older format versions are only documented by the code to read them in img.c - they had version strings "v0.01", "Bv0.01", "bv0.01", and "v2").

The following table document which Survex versions generate which 3d file format versions. A version is able to read the format it generates and any older versions, but in addition Survex 1.0.40 has support for reading all versions up to v7 (but writes v3).
Format Survex versions
v3 0.97 1.0.40
v4 1.1.0 1.1.3
v5 1.1.4 1.1.10
v6 1.1.11 1.1.14
v7 1.1.15 1.2.6

If you try to use this specification and find details which aren't spelled out clearly enough (or at all!) or any errors, please let us know. At least two people have successfully written code to read 3d files using this document, but that doesn't mean it can't be improved.

File Header

This consists of:

  • File ID: the string "Survex 3D Image File" followed by a linefeed (decimal 10, hex 0a). [Note: v0.01 files can have a carriage return before this and other linefeeds - this is a file format error in any other format version].
  • File format version: "v3", "v4", "v5", "v6", "v7" followed by a linefeed. Any future versions will be "v8", "v9", "v10", "v11", etc.
  • Survey title: A string followed by a linefeed. There's no length limit on this string.
  • Timestamp: A string followed by a linefeed. This is intended to be the time the file was generated, rather than the time the survey data was collected. The easiest way to generate this is with the strftime() format "%a,%Y.%m.%d %H:%M:%S %Z" if you have access to strftime(). An example timestamp is "Sun,2002.03.17 14:01:07 GMT".

Items

Following the header are a number of items. The last item must be a 0x00 byte when the current label is empty, which marks the end of the data. The first byte of an item is a code identifying what the item is:

Code Type Data Meaning Version
0x00 STOP   If the current label is empty, signifies the end of the data in the 3d file; if the current label isn't empty, make it empty. ≥3
0x01 - 0x0e TRIM   Trim the last 16 characters of the current label, then trim back N (i.e. 1-14) dots ("."), everything after that particular dot. It's incorrect if the label ends up empty, or you attempt to trim more label than there is. The rationale for removing 16 characters first is that removal of 1-16 characters can be encoded by 0x10-0x1f (see below) and we can make this encoding more powerful by not overlapping what can be encoded. ≥3
0x0f MOVE <x> <y> <z> Set current position to the coordinates given. Coordinates are 4 byte little-endian signed integers representing values in centimetres (0.01 metres). ≥3
0x10 - 0x1f TRIM   Remove N-15 (i.e. 1-16) characters from the current label. It's incorrect if the label ends up empty, or you attempt to trim more label than there is. ≥3
0x20 DATE (old version) <date> Set survey date of legs: date is 4 byte little-endian unsigned integer counting seconds since 1970. ≥4 and ≤6
0x20 DATE <date> Set survey date of legs: date is a 2 byte little-endian unsigned integer counting days from the start of 1900. ≥7
0x21 DATE (old version) <date1><date2> Set survey date of legs to a range: date1, date2 are 4 byte little-endian unsigned integer counting seconds since 1970. ≥4 and ≤6
0x21 DATE <date1><datespan> Set survey date of legs to a range: date1 is a 2 byte little-endian unsigned integer counting days since the start of 1900, and datespan is an unsigned byte counting days from date1. ≥7
0x22 ERROR <legs><length><E><H><V> Error information for the current traverse. <legs> is the number of legs. <length> is the total length of the traverse in cm (0.01m). E, H and V are the error and the horizontal and vertical components in cm. (All values are 4 byte little-endian signed integers) ≥6
0x23 DATE <date1><date2> Set survey date of legs to a range: date1, date2 are 2 byte little-endian unsigned integers counting days since the start of 1900. ≥7
0x24 DATE   No survey date information was specified. ≥7
0x25 - 0x2f     Reserved
0x30 - 0x31 XSECT <len> <label> <L> <R> <U> <D> Dimensions are 2 byte little-endian signed integers representing values in centimetres (0.01 metres). Omitted dimensions are encoded as 0xffff. Station flags are (N & 0x01): ≥5
Flag (N & 0x01) Meaning
0x01 Station is last one in this passage
0x32 - 0x33 XSECT <len> <label> <L> <R> <U> <D> Dimensions are 4 byte little-endian signed integers representing values in centimetres (0.01 metres). Omitted dimensions are encoded as 0xffffffff. ≥5
Flag (N & 0x01) Meaning
0x01 Station is last one in this passage
0x34 - 0x3f     Reserved
0x40 - 0x7f LABEL <len> <label> <x> <y> <z> Append label to the current label buffer. The updated contents of the label buffer give the survey stations full name. The length of label is given by length, which is encoded as follows: ≥3
Length Encoding
0 - 253 byte 0x00 - 0xfd
254-65789 byte 0xfe 2 byte little-endian unsigned integer len-254 0x0000-0xffff
65790 and greater byte 0xff 4 byte little-endian unsigned integer len 0x000100fd-0xffffffff
The station flags are encoded in the bottom 6 bits of the item code:
Flag (N & 0x3f) Meaning
0x01 Station is on leg above ground
0x02 Station is on an underground leg (both may be true at an entrance)
0x04 Station is marked as an entrance (with *entrance)
0x08 Station is exported (i.e. may be used as a connection point to other surveys)
0x10 Station is a fixed point (control point)
0x20 Reserved
0x80 - 0xbf LINE <len> <label> <x> <y> <z> Append label to the current label buffer. The length of the label is encoded as for a station label above. Return leg from current position to coordinates given, and update current position to coordinates given. The updated contents of the label buffer give the survey that the leg is in. ≥3
Flag (N & 0x3f) Meaning
0x01 Leg is above ground
0x02 Leg duplicates data in another leg (e.g. resurvey along a passage to tie into a known station)
0x04 Leg is a splay shot in a chamber (radial shots from a central point)
0x08 Reserved
0x10 Reserved
0x20 Reserved
0xc0 - 0xff     Reserved

Item order

  • A continuous section of centreline is defined by a <MOVE> item, followed by one or more <LINE> items.
  • <LABEL> items may appear anywhere in the file after the header, including within a <MOVE><LINE>... sequence.
  • Duplicate <LABEL> items are permitted provided they also have identical coordinate values. (The same coordinate values may also be shared by any number of different <LABEL> items).
  • Stations must be defined in a <LABEL> item before being referenced (e.g. in <XSECT> items)

Authors: Olly Betts and Mike McCombe, last updated: 2013-07-05

survex-1.4.4/doc/man_survexport.sgml0000644000175000017500000000156114141575516014536 00000000000000 %entities; ]> &man.survexport; See Also aven1, cavern1, diffpos1, dump3d1, extend1, sorterr1 survex-1.4.4/doc/TODO.htm0000644000175000017500000002231714141575516012037 00000000000000 Survex To-Do List

Survex To-Do List

3d format

  • sort out XSECT - I'm sure I meant there to be 1 and 2 byte forms, not 2 and 4 - 4 byte is only useful if a passage dimension is > 327.67m!
  • store equated stations in some way
  • store legs by end stations rather than repeating coordinates over and over?

Aven

  • Compare HPGL export with what printhpgl used to give.
  • loading a .3d file with no survey data (or which has a valid header but is broken later) with a survey already loaded doesn't work well.
  • After keyboard controlled movement, the measuring line/circle doesn't reappear until the mouse is moved (e.g. plan/elevation transition with P/L).
  • Fix depth clipping on grid
  • Does anyone use Controls->"Reverse Sense"? It made some sense with caverot but now seeing the mouse pointer makes people expect the default motions (for right button drag particularly).
  • Clean up export.cc and allow line width, etc to be specified
  • Better handling of missing LRUD values
  • Smooth wrinkles in presentation code (stop pres on Open or New, changing focus on listctrl as presentation plays doesn't really work properly)
  • Draw the measuring line directly onto the front buffer, so we can remove it with a copy from the back buffer and redraw it in the new position without a re-render.
  • Process all pending input before rerendering to improve responsiveness.
  • Check timing code - we need to glFinish to ensure it's all drawn, and that may be needed to get meaningful timing info.
  • Allow control of colours in "colour by survey"; allow controlling what level colours are applied at e.g. colour by cave (and more generally by sub-prefix)
  • Implement "Skip blank pages" in aven printing
  • different keyboard layouts mean that some key choices don't make much sense...
  • File->Extended Elevation - provide a way to specify a spec file? Or better a UI to control the extending.
  • Optional lazy label redraw during drags? Or turn on at some redraw time threshold...
  • Some way to view older/newer version of survey
  • Label lengths aren't considered when working out image size when printing so a long label can spill off the edge of the printout
  • print to an image file?
  • grid on printouts
    • grid crosses option (only draw cross at intersections, not a full grid).
    • [(x,y) of a point to go through (easting, northing)
    • x spacing, y spacing (default to x spacing)
    • orientation (bearing of y-axis?) (defaults to 0)]
  • Profile aven further (for both speed and memory usage)
  • by default put crosses on those points with no legs attached (unused fixed points)?
  • label junctions/dead ends?
  • section colouring/selective labelling
  • clipping - want to select a clip sphere (or maybe cube) centred on centre on rotation I think.
  • Some way to display all the names of an equated station (e.g. in pop-up window or the info panel).
  • check on monochrome, 16, and 256 colour displays - especially that depth colouring looks OK
  • Feed back redraw time to key based movement as in caverot? Or perhaps best not to? It depends on whether we expect people to hold down keys or not... Perhaps something smart where the first press is a fixed size, then after that it depends on the redraw?
  • improve .plt export to include less crude survey structure.
  • If multiple methods for drawing crosses and/or blobs pass the visual fidelity check, check which is fastest.
  • Lots of aven things need documenting.

Documentation

  • Platform specific versions of docs?
  • Put more terms in terminology in docs ? trip, instrument, ...
  • Finish off manual loose ends.
  • Look at rewording extend.sgml (AndyA comments)

Internationalisation and Localisation

  • Update translations.
  • length units in .err file?

Test Suite

  • test diving data with compass omitted (plumbed)
  • more tests for direction
  • improve 3d torture test and try to automate its use if possible.
  • Compass .mak and .plt and CMAP .xyz in test suite?
  • img.c: explicitly test routines in test suite?

Miscellaneous

  • resolve FIXMEs in code
  • diffpos: compare connectivity (i.e legs as well as stations) - e.g.
    foo.1 moved by (0.02, 0.10, -0.06)
    leg between foo.1 and bar.2 removed
    ...
    bar.2 moved by (-0.02, -0.05, 0.03)
    

Cavern

  • This gives "*** Singular!!!" warning with DEBUG_INVALID on:
    1 2 50000 0 -
    1 2 5 0 -30
    
  • Default variance for topofil counter? (currently same as that of tape)
  • Rather than forming a linked list of components, solve each as it is identified? Beware of issues like those that revcomplist test checks.
  • Don't split other traverses at articulating traverses when reporting error stats.
  • sort out title which goes in .3d file for this (if no *includes in ... it gets the title of the leafname of this .svx file, otherwise it's the leafnames of the *include-d files, comma-separated):
    *begin mycave
    *title "My Cave"
    ...
    *end mycave
    
  • look at solution by QR factorisation in matrix.c more
  • consider disabling the more expensive asserts - turning them all off speeds up cavern by about 10%.
  • Warn bearings not 3 digits, gradient not <sign><digit><digit>
  • Sort out gross error detection code
  • For warnings such as "Negative adjusted tape reading" report the value of the adjusted tape reading (currently we just highlight the reading as it appears in the Survex file).
  • legs: implied flags: inloop/plumb
  • legs: "dubious" for "tapeless" legs - bearing along continuation...
  • station flags: "important" - e.g. top camp "fixed" point / junction,deadend (implied by order) / articulation pt (know for nodes I think a station is if at least one of its nodes is)
  • Maybe station lists should know how long they are?
  • Articulation point code: ideally the articulation point code should allow further network reductions to happen after splitting at articulation points?

Survex file format

  • *data chamber ...
  • *data nsew ... for pitches (bearings rather than having to be NSEW)
  • Allow angles as deg/min/sec (for theodolite data) (060°10'15" as 060 10 15, or 060.1005 (crap notation))
  • should % after a clino reading work?
  • Fixing a point by triangulation?
  • multiple readings:

    average bearings specially - they don't average like normal numbers

    %age gradients should probably average the same as angle gradients

    Document - works like so:

    *set open {
    *set close }
    *calibrate compass {000.5 001.0 001.25}
    1 2 10.23 {000 001} -02
    2 3 {10.16 10.17} 127 {+06 +05}
    3 4 11.98 007 {+03 +03}
    
    Implement as extension to number format so any suitable numeric value to be repeated?
  • Theodolite + level:
    • delta(bearing (relative to 0 at start)
    • delta(horizontal)
    • delta(vertical) / maybe "clino" instead
  • Theodolite only:
    • delta(bearing (relative to 0 at start)
    • delta(horizontal)
    • infinite sd for z
  • Infinite sds so we can fix in x and y only (or z only)?
  • legs: "commented out" flag? syntax check data but otherwise ignore
  • legs: hydrology - fossil/active/not recorded/static water/underwater (sump) [diving underwater by default? except style can mean altimeter too...]
  • legs: floor type - mud/sand/breakdown/flowstone/etc and can then used LRUD to draw crude survey...
  • Allow valid range for an instrument to be specified. Tie in with *instrument. *units date - ranges for dates - e.g. "1990-" or "jun-aug"...
  • cope with any combination of readings which gives enough info ???
  • leg and station "comments":
    *data passage station left right up down comment
    
    1 1.0 - 50+ 0.5 "large cairn"
    
    2 ...
    
    *data normal station l r u d comment newline tape compass clino
    
    1 1.0 - 50+ 0.5 "large cairn"
    
      10.78 123 -03
    
    2 ...
    
    comment can be omitted "-" or not present if at end of line...? commentall?
  • Allow covariances to be specified in cartesian style?
  • flag legs as "skeletal" or something? (i.e. not in the cave passage) - e.g. a radiolocation leg from one passage to another isn't surface, but it isn't in the cave itself either (it's through rock). You could just call it surface but maybe later we want to use the surface flag to produce points for a surface triangulation...
  • ?outlaw prefixes on stations in data legs (as Todd has lobbied for) and then the prefix of a leg == prefix of each end...?
  • comma separated dates in *date?
  • Find a solution to Thilo's "." problem.
  • Units in *fix (currently metres)

img library

  • eliminate duplicate img_LABELs when reading .PLT files.
  • img should return img_XSECT from Compass PLT files.
  • make img more modular (convert to C++?)
  • add support for .KST? Gary says documentation is out of date, and recent releases of winkarst have broken .KST export/import...
  • resolve documentation/examples mismatch for station based XYZ files and implement reading of legs from them.
survex-1.4.4/doc/custom.dsl0000644000175000017500000000377311701006570012567 00000000000000 ]> ;; ;; Tweak a few options from the default HTML stylesheet ;; (define %html-ext% ".htm") (define %body-attr% '()) (define %shade-verbatim% #t) (define %use-id-as-filename% #t) (define %graphic-default-extension% ".png") (define %admon-graphics% #t) (define ($admon-graphic$ #!optional (nd (current-node))) ;; REFENTRY admon-graphic ;; PURP Admonition graphic file ;; DESC ;; Given an admonition node, returns the name of the graphic that should ;; be used for that admonition. ;; /DESC ;; AUTHOR N/A ;; /REFENTRY (cond ((equal? (gi nd) (normalize "tip")) (string-append %admon-graphics-path% "tip.png")) ((equal? (gi nd) (normalize "note")) (string-append %admon-graphics-path% "note.png")) ((equal? (gi nd) (normalize "important")) (string-append %admon-graphics-path% "important.png")) ((equal? (gi nd) (normalize "caution")) (string-append %admon-graphics-path% "caution.png")) ((equal? (gi nd) (normalize "warning")) (string-append %admon-graphics-path% "warning.png")) (else (error (string-append (gi nd) " is not an admonition."))))) (define %gentext-nav-tblwidth% "100%") ;; expect admon images in the same directory (define %admon-graphics-path% "") (define %generate-article-toc% #t) (define %generate-article-titlepage-on-separate-page% #t) (define %generate-article-toc-on-titlepage% #f) ;; ;; Same as above except all in one file ;; (define nochunks #t) survex-1.4.4/doc/survexport.sgml0000644000175000017500000001033614214237064013675 00000000000000 survexport 1 survexport convert a processed survey data file (such as a Survex .3d file) to another format. survexport options .3d file output file Options only load the sub-survey with this prefix scale (50, 0.02, 1:50 and 2:100 all mean 1:50) bearing (90, 90d, 100g all mean 90°) tilt (45, 45d, 50g, 100% all mean 45°) plan view (equivalent to --tilt=-90) elevation view (equivalent to --tilt=0) underground survey legs surface survey legs splay legs station markers station labels entrances fixed points exported stations cross-sections walls passages origin in centre full coordinates clamp to ground include items exported by default generate grid (default 100m) station labels text height (default 0.6) station marker size (default 0.8) produce CSV output produce DXF output produce EPS output produce GPX output produce HPGL output produce JSON output produce KML output produce Compass PLT output for Carto produce Skencil output produce Survex POS output produce SVG output display short help and exit output version information and exit Description The input formats supports are all those supported by Survex's "img" library - Survex .3d, Survex .pos, Compass PLT and CMAP XYZ files. Currently the output formats supported are CSV, DXF, EPS (Encapsulated PostScript), GPX, HPGL for plotters, JSON, KML, Survex POS files, Skencil, and SVG. Also survexport can produce Compass .plt files, which are primarily intended for importing into Carto, but can also be used with Compass itself. POS Format The POS format is a Survex-specific format containing a list of stations with coordinates (ordered x,y,z [East, North, Up]) and complete names. The stations are sorted by name such that numbers occur in the correct order (so ``2'' before ``10''). Numbers with a prefix and/or suffix are sorted by the number part first, so you'd get: 040.sv8 040.sv8a 040.sv8b 040.sv8c 040.sv9 040.sv10 040.sv11 40_entrance_tag 40b_entrance_tag DXF Export DXF export separates Splays, Surface legs, Surface points, survey legs, and survey stations onto separate layers. Splays will export dotted, and surface legs dashed. This is not configurable. survex-1.4.4/doc/extend.10000664000175000017500000000574214205545543012134 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "EXTEND" "1" "24 February 2022" "" "" .SH NAME extend \- produce an extended elevation from a .3d file .SH SYNOPSIS \fBextend\fR [ \fB--survey=SURVEY\fR ] [ \fB--specfile=ESPEC_FILE\fR ] [ \fB--show-breaks\fR ] \fBINPUT_3D_FILE\fR [ \fBOUTPUT_3D_FILE\fR ] .SH "DESCRIPTION" .sp .RS .B "Note:" The \fBextend\fR program can also work on \fBCompass\fR \fI\&.plt\fR (as can \fBaven\fR and any other \fBSurvex\fR program which reads \fI\&.3d\fR files). .RE .PP If no specfile is given, extend starts with the highest station marked as an entrance which has at least one underground survey leg attached to it. If there are no such stations, the highest deadend station in the survey (or the highest station if there are no deadends) is used. Extend puts the first station on the left, then folds each leg out individually to the right, breaking loops arbitrarily (usually at junctions). .PP If the output filename is not specified, extend bases the output filename on the input filename, but ending "_extend.3d". For example, \fBextend deep_pit.3d\fR produces an extended elevation called \fIdeep_pit_extend.3d\fR\&. .PP If you pass \fB--show-breaks\fR then a leg flagged as "surface survey" will be added between each point at which a loop has been broken - this can be very useful for visualising the result in aven. .PP This approach suffices for simple caves or sections of cave, but for more complicated situations human intervention is required. More complex sections of cave can be handled with a specfile giving directions to switch the direction of extension between left and right, to explicitly specify the start station, or to break the extension at particular stations or legs. .PP The specfile is in a format similar to cavern's data format: .nf ;This is a comment ; start the elevation at station entrance.a *start entrance.a ;this is a comment after a command ; start extending leftwards from station half-way-down.5 *eleft half-way-down.5 ; change direction of extension at further-down.8 *eswap further-down.8 ; extend right from further-down.junction, but only for ; the leg joining it to very-deep.1, other legs continuing ; as before *eright further-down.junction very-deep.1 ; break the survey at station side-loop.4 *break side-loop.4 ; break survey at station side-loop.junction but only ; for leg going to complex-loop.2 *break side-loop.junction complex-loop.2 .fi .PP This approach requires some trial and error, but gives useful results for many caves. The most complex systems would benefit from an interactive interface to select and view the breaks and switches of direction. .SH "SEE ALSO" .PP \fBaven\fR(1), \fBcavern\fR(1), \fBdiffpos\fR(1), \fBdump3d\fR(1), \fBsorterr\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/dump3d.10000664000175000017500000000200514270423131012014 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "DUMP3D" "1" "28 July 2022" "" "" .SH NAME dump3d \- dump .3d file contents in textual format .SH SYNOPSIS \fBdump3d\fR [ \fB--survey=SURVEY\fR ] [ \fB--rewind\fR ] [ \fB--show-dates\fR ] [ \fB--legs\fR ] \fBPROCESSED_SURVEY_DATA_FILE\fR .SH "DESCRIPTION" .PP Dump out the entries in a processed survey data file - useful for debugging, and also provides a textual format which is fairly easy to parse if you want to write a simple script to pull out information from a file. .PP Note that this tool can actually be used to dump any format the "img" library can read, not just Survex \fI\&.3d\fR files. .SH "SEE ALSO" .PP \fBaven\fR(1), \fBcavern\fR(1), \fBdiffpos\fR(1), \fBextend\fR(1), \fBsorterr\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/sorterr.sgml0000644000175000017500000000216411701006570013126 00000000000000 sorterr 1 sorterr re-sort .err file by various criteria sorterr options .err file how many Description Sorterr re-sorts a .err file by the specified criterion (or by the error ratio by default). Output is sent to stdout, or if --replace is specified the input file is replaced with the sorted version. By default all entries in the file are included - if a second parameter is given then only the top entries after sorting are returned. survex-1.4.4/doc/index.htm0000644000175000017500000000200714367066634012401 00000000000000 Survex 1.4.4 Documentation Access to mailing lists and downloads are available at the Survex web site.

Survex 1.4.4 Documentation

Documentation of use to Developers

survex-1.4.4/doc/diffpos.sgml0000644000175000017500000000172114141575516013072 00000000000000 diffpos 1 diffpos compare the contents of two .3d files diffpos .3d file .3d file threshold Description Diffpos reports stations which are in one file but not the other, and also stations which have moved by more than a specified threshold distance in X, Y, or Z. The threshold distance is given in metres and defaults to 0.01m if not specified. For backward compatibility diffpos will also read the .pos files produced by earlier versions of cavern, by the (now removed) 3dtopos tool, by survexport, or by aven's export feature (requires 1.2.19 or later). survex-1.4.4/doc/manual.pdf0000664000175000017500000147412614367056051012542 00000000000000%PDF-1.4 %Çì¢ %%Invocation: path/gs -P- -dSAFER -dCompatibilityLevel=1.4 -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=? -sOutputFile=? -P- -dSAFER -dCompatibilityLevel=1.4 ? 9 0 obj <> stream xœÍ[Érǽã+榧ٵWùdm¶¥,[‚-GH>`!AŠ Ò€(øü—ά5«:CR¶äÐAÍž®-+_¾—Y…W›e›ÿËÿ?{yÿ¹›G¯ŽDþÇ’Ü|t|ôøk!6RÏ.,bsüôHäï¥Xfí7nYf¹9~yôÝôÍv'æe ÚLw[xr^…éõvçæ ƒwÓÛÝ2[§­˜žl…š½Qvúi»“ÎÎÆ›I´ßç­œl®Çw2H|)½˜µ´Ó—[˜Ål˜NÚ—W[˜›³Ræy8-ÊÏÊJ3]æÞÿqüyZžp³FãòœŸ¥ ~³Sj"„Íñ9,í+q¶Ak¡#/pÈK\…‹›îqjÖAMá§A …«ƒX”ŸnñÑxiMyÔÐìŸõƒ61c$NeâTôf'¡Ç:—kl$½5ç¢æÅ,×dç4Œz¿U0¾“zú¬^Y- TÞݵְ5BÎFh [S~;¬—°3åÝ܆9‹/ƒôeÞ„éåv§g¥Œ6œE…M“ßièÄ£á*¾ÝZ3;)v$a•³åQ*=½h¶ƒ)ÉYœÐÌÙKúYÅ‘:{½Ù 3 cµy|1¬Ý/æW·!zŸCD7tu)G'—´éÍÖÏN2È´_GKZ€Éô<ެ}ÓE›ø³ÖRZð5c¦'4:h&j_yòõirVëIÖWK}¤ÁN-àJ!˜4„cUvà8·èÀ°ŒÁdܼ€/Ôü¤vuG\”$Ous²c¨M€V' ¹­åìѦєÇ8² Úy4…™½ÞçN‚ˆM©Ü¬Œßê0+‡®oIOðð·4­ó$:®5ÂBpŠßB<¼k­òïàÙh@Åì!Î=ŤFávçV¸³àò ,"Í¢sWA€›¾ŽLX"Û^`ã.–Ä‚ÒWsë³ö2ûêÒÍêtO{€­™Õ"ÁíÁB »¼­§÷kŒç Ì#ß;@({ÊåYE¬µù?¸}93ÄÒÿyî@kb 2>±åe€ŒuEÑV(áXžuÀÌ`_ÙB£Y¸Šb¡ ¼4·tÒO3˜­äÇìì“yÁ2a0P¶…] ݵËf– XXA,ˆ ó$sòÔw°Éºº{¢Ú…²@õL÷n'kÓ‡ ~­và¿§Û¸ç"ê¡úxaY*z’s³Òýç$¬¶–~äÒeù¢¸—@Ú4ÄOå‡Ú Ö/ŽŽóÝÊW#BÞÊUGŠ>aɘôOŒ¾‚x|ÜÕ Ü°­±!|Åç—ggþ Ó¬ð éËÌM!G` ˃é!nòÖ’}¹çÒP}Ódê0/'¬䢂U‚ª‹1T`{ôu%À×ýô7˜àV"´Õ‘™va½,9`QUß6jù›•“ kâbäË8PŠÛõ-Y QÄìd3® õ…ÌHø¿Âøyþ¬u÷wòúQ}vÅøt¯Š>ø?R ¤;EËkäfÏF³× MO+Än“ô ‹…ôPƒ‡HG¤û«Öˆ°ìõ|Zb~“²ØFC†Âõ@ê f?ÈW|è&,ò±S Xs>øvë=È¥¨Ã}°…_ƒ´+ujôl—û@J+{06ÄEy)×Ñ*¶¾ààÄÊ‘û  ®‡P“µy’Î@Ó²€õPÓzÆõ~ÅÆÄÆ~¡Üžº|òíiûö’…Ý-%^IïòJ{ÙÙy€´§Li¢Q‰²Ôs‰ê»¤R)‰:Ô %Îæ¨)±½ýó¹*ñq„žvšx 'šÞc·Hð5ï£ÄÅ﹞:u—èÈó:¶y*î1hì©­5+N\4£4”œ1­0°EÒò÷! ÇŠ áçJPpÞºJ$}(Y%Þ4Ñ9Dƒ˜ ʘ˜gptR´|J–ÒË„È.ÎþÜtrpãÛ‹T7°}xÍ XDíWJlÄk'6òúË _y>&¤fÃ#‰ðÎ5 KVòݶo•ª”5ÅÈ--¥±Ó,¥©ë" D¤©eéô'¡±•”Iš2ƒ˜ RnŸ4…èÉ­h²û¦ Xˆã5¿o:’÷µN@åHL5–"m΋±‡«5çÇ%“ªV­M,P9o ™ !Ç—­^°$Z=ìê‡DsY«ëÈœ‹Pc6é\T`­·NçØ¥Þ·H6GÒ4W!`=ã)†“U•‚áϸ.×A§Ü·­Û4,ˆtŸ±Í¡ZëQhW S—t€—ð â(—¶ô­éA’È=éh%`)öÔm ~ørÒժ߾ðCT"•‘§•DäÒ&¶„Ò:%”û²Ó]ûBìV“z)«¯>ØB¦™|¨Q„ÅéªÀ.C@SÉÛËdSeÕã5žo!¢,V^`<ʆ@qš' ‚S¼ª¦¡53hX=¼—_óïE[ZݳF¶³Üãú1&, N* ëÔ’ì 5ý¹†‡ø©[´¤àâ1]c¡§ñ‡ @†½i9%7﬉ãfôDËYÄ1àÂDZ¼–ŒšSX3)²dâå-s˜£»úê}‹$´º_*ˆ<€óœ9EOûUD°E]ª¶éôq:žÓ&yYü¢ñ÷.¥LQ¬*¿kBb‘—™þÌš2…~"Yˆ:–”v 3³1¨78#Óçu¼äæ³Vp}ÞqÕÞx¢Õ4½>Åû_”* .Võ1|IìÉyéyq5»#S~Å‘øºn–Á»ž|éJëC5¬°GEö¹tɨºÓH&ùªKôƒ§xÆç1”ðÚ‘Oô2«kÅZYÝ B™Q¤ÄëII|¬s%”¯<«é̼]½ÐìpˆN¡_çÉ¡Gö”tZšH?àY«gÅD54tå¡>F ol§z²èEì'€ìb|­„äÓ®˜Ä)¨G¥,/¦±nÝ’MË­\xÈõ3s±§ WìÂúƒÃL9B",;/ŒÚ|›™çI–·:½i’ª#^/è§Å‰L€xÑÀÄsNGóŽÇŽ|á YN¸¤Ù÷!†½Ù{Ï ¶WŽÉRLÒøßϳ;*^zë5ù„þðžô5f8jŠQ@Ýë0?à­$[ïî  ?Þâ LpèÑL{û1~éAïŠÃ>ÿ!éáëÚÃÈÛOÓ=e0ÅÃÜÚôáàçðÕú|‡ƒsF;Ì•©­7oÑq3ož*¸LºÐeeÀk_$“yÝÕÇŠEw<Pdó/’ËÝÊÊŠbp¡’CÒÍf3G²2²ƒ¤³“›ÑØ=~?U){æ×N*Ŧð»lx3í1Ÿ%j ¸¥½]êþ,¥fá ÷‹jˆÇ¾÷ÂÂNã¯ØáƒÌr¨: ÌȺ&…þœ#­]çaI·žÚ"Éå²rî/–wqgÏÞhZ8f)º/•·†~¶bÏ™_ÿ„J°°l·eV[Ð&É—gÉÛï·­÷R*÷“´ï»vÆúa‘5÷¾ÇŠ%üEO yYM*>#‡lÑmÝ£³¿÷瀧$ðð ê+Ah$ë#=¬ k…4UöUÉÌ©¯¨Óƒˆ‹2åæuä&Ÿo ÓgãÆCêlõ"2°‹gƒ?æƒ Zw.ý¶½}ܾ}ÜÞÒÐÒ?Ãå=½³ÅÞ#‘8ߪU"\ a‡kÆËúxЛn¯ÓUKùŸ“‰a£’QòmìZbÔžNEhf³ÈÅ™T ÅAƒéFêB þnGJãj¶Ò³:'²“¤'TÂaYõ}C‹Á;±@å¥td÷¦ŽXNÒ‹ÞOÛmqBº”*KðïŽ ¸û媈<"¥ É,W^?Xy9yŒhÓþ.†–‘’“cR77á½®¡õ•Ý´2 9õÅX¢]ŽôŠò¢×õqz*Æ'â°Ñ#<ø‡ÙW&~ÏT5)ÔðØ¢ÕY‚°Pø·ŽËªvQªSÞ>œèúþÌ÷÷Us|‚ŠTÍàûï¹8 ú@v ¹%ɺw°a—YCÇ-©%EÕ³&}»ü8ÉBå¦îþAù}u¿9v@ªNã%œ4y»¾àƒ1k8€L{Õ3õÿײ}`{BM~&ÎÊË»Ûq5•. ÐÆ?ñS¶ûû8‰ø~Æá_««ú~¤üðéñÑ_à¿ÿ3‡±endstream endobj 10 0 obj 3778 endobj 41 0 obj <> stream xœµ[KoÉ rÔ¯ö²=§]ïGnYl°H`’( ‚Ýd˲´–5Z¯”Dÿ>¬7«Š­‘ >¸ÕÓ]Å"ù‘YÕ¿œ²•Ÿ²ð/ÿÿöãIüó”Ÿ~8ùå„ç?Xþñô»³“—‘æÔ¯Þ£NÏ.Ox~^i½rsj¥XüðñäÇ寻½^ç\/íòÓN®Z;!–ïö|5ÆH·¼Û ±*fýòßÝ^(Oˆ…·—V¸»z˜Ã.jë®jµÂ/¯w~7V.çéQÃôrKÊrÞ.ov Óòý VÉ%^å^J½Â%ȶ*ëíéÙE\ _½äLå1÷Ö·W«0LÂúÌÊ-Ó–ÇÙ*]^^SÚåºÎ¸üíWi\õx¥–ûö;zô_î… \XGФæfyÛ.»„^™„G£PFÂÏïÚ“hÐÇ ŠY­UË›´(gË£ÁRH¤Ó÷yY övœ¯R¹êûY'\ËåÃ8¿]ä× G/Ýö†–`Uæ–¿ƒ*íj¹Àï£ñ£þ 3E¿’Ùaи<ï³{…›ÙØŒeIÀýÚBÎÛLÅR®j:Ü=4Q?î‚ÿ¥W¸ˆnrW'ºi"!éï»»B²UsÅBk·:aÐòº9aù^0pùw>†çGeÓT0ßmƒùû‹ð¾\4`~îVîÁib ©‚ÑÊÝ_i³Ï´À0(r/$õÝ´&¿öuØî;tî“z÷¬f˜HZFŽhh¼­ºŸà¤„7èwa„Œ`o€Žר+ØUp9ƒ ¾†îÒØ='wÓ¤)àóv˜"ÝåØÑßa§,NqÕŶò{sÀÞ©òÍ^­¦ˆ–#v˜T{æ6C˜cðû…qÎá„V+„Wl{2`THˆ£$™ …%Õ‘"¥\YäùöˆxôÃnÏV˘ƒë¿¡ë?î¢rkzϛϣèða2Jxà=†O½ÛRZrô$÷>dUÇxÿ;Á€Ë¤cÂ4Øg‘KN1*Þ%³rΦ½0De–Ëú š ]^ÔwÞ´Ñ‘¢ß¶5~(sÙ¬Œ|¬lAÖÔ ãÿZ ÄV€—,DnAÇ}äEÈ÷šI/¼ŸPÜ¢iòBX“]=^ö¸‡ ÇÉ&.z¡¢ãdÎ^™‰‹âå‡Á"ÍÁ^‡ôÐbÉ‹”t­9½9> 1(F!ó^ðôï=Íal»èÜq—l8Àæ8´èxAІ\ëÝ„Ïp‰rÚe{¶Kzu0:,¶qszŠvˆùI{—ÌqóKH—Š%c³ÍÖS²AÄ á$Ò%‡B{à‡™Ào]u©0ò å—oÂk:û:))™rر®nÆôGdœhI³¼Úíå*¼Ô?Ú¼Áå›$¬rØKg“ »ÕWâÃäð2….àŠÊž•±w ic*8P~¿ß¤€á¼€ixmàýÔ )²Iر*s½Àgnž|<†/„™^•…RÆ×,S›Ï# &º2¬1Ñ>ýAÆO¹Z¥2"VaYG{ÅVSÓ!‡·½ô&x;¬Î8¯îí…gqQ¿ß ¨á¬Ô6rŒçÐ.⥠\/Èi-ð“à Áí{kPz}à:Le™ÑÑ[p¢×Á—Ur„2ÿíÎAYÄ$Ç÷ŸoÊ8TÕY³þ«“³ßþ(GNÁ—Ù'úÄÔö@ü•¸¿ÝA¹¤ÓÖl)4&ewSï‡B!Ũ"–ÙŠªx¿~‡Ô]^*éojäCƒ^42z5Ž<EwÄ6›‹²&`?Á F4*âh´¡^”x.ºª2Å Å?fîÑÇ‚ø¹C£ÚB·*ÕA|ß\+Lu‘ü‡XIºw´_5À8â’û8Ág;¦|s,—£gx,àŸ!Vå)9G]ö ü »=‘éÆ ŒêT.K ^º±TðíëÌdàZ¨þ=ïhAÉs]vˆ%•´ŸãûˆÙöÙ)¤ÌŽŸ§ˆz§‹¿æ…wؘJ‡Ø‹Fp rçÛ•öÏtu†HÇÒëV ŠèÓf­àÛ XnkÝ#n༵žòÖowí]j g%."ÇßЃ¹M®hzEÜŽˆiaMp•™‰&à%YÃ!]Ï Lœ€ê•Ì#\–ø'=EBo´EßBì%¬IçÁé“N:g\5«Þ=÷ÑÐc©ØØqé9%LO“H–÷í²"ÌbÎK‡lÖèÙ&¥Å¯MŽÑZdÈ/ÂÍ⹑Œhú®Úx æáRH†*=ÝäÂ%Â#$î2~ÃÀÁîÖ8ášÝuN"C–O9ö¤ÈcïÙ=31íuŒð'[ï~3kN'Êd=`¡‘2ïŸUŒ¸GRš£yŸÊÖùPÃPÎÄÑ.›­^:Õ50?LJå'A”ñÎKe·ˆ¿!ߺÇÉxì­dÒœŠJylk¤¹çVÑŒÃ`Þy“@Ã$Ê:U~»åòå&éèGÄD—%vè®7[«“'¨y6Ô[2PÑòÕñËêA¹?ãfZ±X™âÈ}ñ›u2p×1‘9~Ïû^D=Ð#¦ìa¢qéçszs±êÝÈv2禧 []ûíŸXªß´ÑgzÞgâ7Ù#ØÉB¥7¬» ¹ÜµïYj)ë¨î”Ñ·¨˜FEVÌ¿}Û8º*ÄF²×è}‹I)M9©±ö4¹ü?5”èaû±b§Gâ¶ Þé@¾W»D¨„¤ƒ ‚0Šþy ’»™n–ذ‘]ºD±eÚM‹ë™cl7bß„Jh&áNÝ¼ÞÆ3$ µËéôo‚ޠ˰ûÁCÿÊ/ߣ•gYúû±Mëê«ÑŸ–êšt6BäôwíîËñ2‚#WªNñ®hM…»b¼`SI½Aª¸ß 3>Šêrt–gÿ´6*è|ÙLôÓ®Å;H Ür»ßn¢+Ÿ“.{?âzÜš¦7qèM˜Ù},õ˜Þ8Hp»ƒ²JSb—`¨‡·ö0#&„F˜ØÞŒÍ%î¸>ª`ê0— Ê<„yLP/ý@ê˜f˜…-1ûÊɾ¯œ»Mˆ—ð ßLf±¶áb£ŽB™þs9{—ôºûdºžú¶44ïý8[ºšac1ßúRj2÷¸¤Í‚Zú|D ?oCüL&½O%½RÝkaÂ9_Fa¬ «c­K¶Eÿ½&sC*it«iBäBþÒ’±qÙ”»Ù>½&!œ7œafi$¯§KølSœˆòñ ­fUêcòmÇùRó£ç¸jÛàs¶ñép¹;ЗÆÜk¡H㼛柢 $”XšåŸõôؼè°E4Gð®Å`6NmÔm-ú P„³dfUn€s;Uј&ÂWU9+Îåi×*.¿O' X—Ÿ‹?1I3ù(&­¡Ñ¨•îS9¤SˆI_Ñ(À5<¡¤þûd“h¼ï¼±L€òqàsC‡-žëåŽÉMp–4{ü˜UƒD¹›Ê†mûS³I¿„/;ˆÃ¼)-ÅÀÃÓïÑSªAgâI²bׂ‡‰*Fzë»ÉðÓ±·qõ+é‚êèÁò¾H*E^’h»I ^¤§.èxÔdŠ6óGc0{B‡äæËpNŸ›ñþ\€½§Æ%Yï]Ù³vø÷vNéi{·n·þRŸï ³|B%‰d{ on) ܱ ‚*”þLhlVú®›‰$E&¾ÃHL%|à Ó7OÆ=õï- ;L*ÙAÄY¥•‡àkÅ>µú!ÄaF/TaËÙ9àøò:¤LH]&ö›Âw_°öèÎ0# > M #DyM±²Ü8n¸³[‡ÇÍû¬ä4.ES Î´¡‘ÕW£‰ A&¼¢Û0ÓùÓñc“ù8º“ýw+G7#bwHŒt)lr÷¢éMyòh8}Äý™û^›NŠÂ:jè¡÷ÉϬèÓ>å`ÔæÆêñ6±:µ(x‹Mçør{†<Çw—Ï÷ððý_ÿÉüG ÈGÅ›xÍPIÑÆ >þ3ße…C+c’¦ÛíÏÚfV×gn/ck„¸ð+ ¡6–3VUÃW¨†ƒá c0??Í µSÿpvògø÷?xãxµendstream endobj 42 0 obj 3449 endobj 76 0 obj <> stream xœÅ\YoÇòÈ_Á·ìÞñô1}‚I²Ø4ìÀÎÉEBIÓ¢-æ×§ª§»«z¦fÉF /g{ú¨®¯ê«cýãiß©Óÿåÿ^¾=IžªÓ×'?ž¨üGŸ¿<ýËÙɧ_w»è´³§gW'*·ÃÐ)wêî|ñöäûÕ×ëÍÐ…¨Ô°z¤kÓ CÐzõóz£:çœ «—k­;Ûû¸z¿Þh«a„^)z©ƒ§]„5üÊ.=ÕÆv^ÇÕçkß;oVçãP׫[q/çôñͺ‡CÁ²ê?gŸÁ)•:U¶3Öi<åÆ˜¡ƒoôÐÁ.ýéÙ¨á(ÑD§`' Þq€MÓ³Ž}zµú&ïáÙЛÕ|6Á«Á®Þ¡@w‚¯ïV7iª`Ëuàä™30Ï+˜>Ø®ï5 Zƒð­sp¸:àf¡FíAÒeS èd:?Ëç5üVñaã§g/NÎþðýêl½1ŽÖ‡ÕuYˆÑÀ\ãU9.=”)Þê œ¯>}IOJ m:¿àduÁÁ |ÍF l§œ…Þ¹¡9ïh+·ùúÿþ'Ü_ì ìú<é, ©Ðé¾7e£^_2½Wù$é#p1.<ÿ¾œßÆÕÕ¸S5˜¼é!ö!o0©×[Ü  Ú,•4Ãu6Ïåt€Û‘ÕÛ5uÖ$*߸•TdD žßøÕ/ëMßù¾®JNæJÂt½óüÜó»B\>ÃyA/†ÈöúŽ¿…Úƒ'4˜„Šû:zF¯|J }JOièŽC[×Oʆ À­^Ò‘ïê÷oq¢¨gøòøVïÁfØÕsZ©(¥Ó¢.Ù¢(ž7|À(Ëjëî¯hZv–—ÜîIs=U t7Y¼ˆf°ez”2aƒfKˆ¸™l-®>¤÷ÙÈ‹¾ÜBšéˆí)"¬ŽŽëÛ'¨9`ˆá¼´~ Ð|Æ´ÃñcöiAþfW]VîAeúnP‘ëlÙDˆhC å"ŠÀyÎ áòb÷¨–àÍÒ¥YAAŽ1¤÷‹G˜«3sfõˆºR‚åÐw•´P1[°S.cÂw½%z¦õ ..`AÖu6vKxÊ– DÌžÞ%ETÚ5[¼•Ü5Ü| ôý/›§̇küÈ»Ö$€!1ÈKÜToˆ‚|^s…rÖ÷|€6+Õ㎡[²ÑЂª6p)ßg•€‡åú,6)Sžû F¯¤i+Ýn ÷¢)2~$[|ß(gÑÈ“ü\Ñq·ÌÓÀuÁgÓšÙm]ÓÂh|¬éÝLhÆ.†áú¼ÙB°e$¥eœ@ç@"1ØÝI"F->â{¿ÿ½gkÉ™ìâS±Ô«×#É€û8˜d ‘Œ(g<Ø”d$šŸnË÷>¶$cÔ­†&ÞqP?>k¸ù¦ˆb01Œ’¾æ`’°}O8Ϧldú‘†2—HÎsä%^›9p`¶'Ö EÑ¢s\O˜ÉÔ$)\qŽR ‹kø,CàH·˜Z`9ÊT,òb{ivñ û‡5ÝwWÄ?6Ÿü×½ùäQ;o õd5ϹsMøÁ÷¦†Ë¯g¹\KLÓ1«´—áLÒÿ*ú&uu3e€ƒ´åØ\+p ¢@'k, 4)t“ãacf›°ª’BÄpÑYí™Å‘ÍL#è–¨ÀX°M¸Û´f–¬ ‹Ü䜜èEkÄ`ó†óŠ1ýâNhê¡éaIE»y]”,Ú£d6ÙFНŒKö£Ny”Õ(‚èFû£ñŽ‹ùyN;®É]½7…¸•¾'Ù'õrAJg†&dDÛ93¶&G«Ì ûXÅ$IgÅH¨®qµOâ 5–ŒBvj5‹úøi™¢-y¥íl)8s€£ÁohI•*.ñ¼¡Â" jD”Öôé †Ç©b·Ô½Ü(D¦vmáúå|¨ß] F ÉY,:g†ƒHvµ&á³všdØÀ⬙G$PöNŒî@®*Æã£;-Ew_fFæûà+Ñ( é€Նò:²`RaïçúíAº×9ù‡ÏÆxqècRmœÒAhqKÞwXsbÐ ¸ØikVߠZ}‘a` ÏÇSWß%:=@Ìù÷µ‚­ùÁMãú1׸Œ/Ê8ÏHECÙcJ¼~Á>SÑê;ħéÜ`>¦çb1@\²•3[8ñ8£¡ŸÅl¬FnˆÓ“Á8¸ ;fâö¡M¬ÆÌp¸hÝt¾\$nR™%á4 …òÐ1è°‰*;¥½enr‹é´ªñ-Ù«}­(¼Eg°“N>qµ(ô€eϘùŸ$‘r6ñ¹àËÊŠç4ss¯)a°/÷˜cÕ$äÖ¯| á'š–Ó jP*&…Ø[…Tºý4úw5›ÔyÃajœ³lý´ÈS=gäÄè v?Zž­#XÁsý™}ÏÒ=/p2 攡ŽÁ‚Û‹Íð”…+]ÍRá¶Ä$X¶7qo6‹wĥ錪Áªœ•™±œ¨´}ÖVÆ F9°†Û…02ž¸Ê)¢–ñÚ4~)äSTnòü²=(A§Ì9ÛîŠ)™Øñn*­ &ËCH…‘HE22Ƹ”'*ß_ÖOŒs|¼wާÞû ºœ äi¢u?¤³KAnmŸjùr ¸w”íŽþXï“ÈÍ#Õyóº]k&­Û˜_Pj¹RpŽ »0äúÞÞ¤ó—ÍXš+¾™ßxÞ6÷DkU€+9 ½-ÿ`ÜÙ\ƲOgC (Æzbƒ³sO<2çá8xµÃ'¹µžx.æJÛÜÐ+1?3v Ø0šlE<¶u+g/·â€¥ø>e÷‡xí¬E›š o㬨 ó‹žf÷<ËΤkö˜["AUóëpáÊéÛôÙNRŸ³gd´Jc#e>̼5=dÕì“+e“NAdÁ°^ªö€£[Ø…Ô\Ó–kE‹¶Ä€NÛߪa²¶>æRõX±J䌮…YsþÜmÉTö´20_L0‰JßQ“KÍ­ž†aroº×'Ía“öøYsk`»Ö'¸Zð:yàÑMëiÉ#Ú¾ÜÜwi]fZ39å6Mß)…,”Mú'Úó}îJQ’ö¹d®Y:û›ê)¬hàð¸9¥lX*©^Ž¢íyñœ˜ê{òk˜ÖRNÚ戴&êoÜ/Í+sÿã „,\‰bØc:Œÿ\·î|…ÝÉ?tª#W×½9–«[‰«ŽŠ¬ÌÛôw\²ÄžòÑFURtØéA9¾;Ê^Õ"Zwáñê[8¹õÆû¡ÌŽI;–ÜÒûw©§ÄÚÔ‰S´®®t\„ ô4E!4ýÐ_<íl,mÏ%QKþá5•-1•ƒº´K ¯M2üñõ«ƒ€'t¦ ,všSÇêB½yÛXv œÈÒ?cb4’È©$ê’™Icgû; dp‡øu~Dñ«„cn²)È7ÑñÈÉËCJR%û˜[óÒ´áƼ›JHÇíýéRFÌrÄ¢+_¶®sdÚ‡ý„éÿ—ì¦Äz/dNhZ9ÎõìÑ”° ÇÖa«ñZá™*^à Õµ¾3µ,ô“b™ÖñN9yè1ÍÜþ¢âŽLØE °ü; ±Ç•ýÚQ‡ûâ]ì~ª´Ärö§IXN·ŒÄãóò*MÅÆ-Pš¢w&.GUMja¼¸ë¿fs{ë»õàÁÞ6ÁQ- „‰5™;jÖªOPfÅ8”N¦Ú<³ä úÏ‚ûyâlj£Ö#c Žº°ÝRF‚W$ÓTRÇÀaŒ€Å¶r·ÃÃì·®A ôø@]!rU/·í1/&þ6š·š´> stream xœµ[Y·ò¸¿bà—ô¦y“yS";ˆ!ÃI¼ ØyXí%ë]YZ]?$ÿ7Å«Y$«§Wkzw†G±Î¯Š5¿îfÆwsø—ÿ?yÿÜñÝ/'¿žðüÇœ¿ÜýõôäÏÿ–fç™7¨ÝéÕ Ïó•ÖŒ›•‚9øâåÉÓ÷ûƒfÎs®§·uøz/™ÖNˆéÝþÀ™1Fºér/S³õÓ‡ýA(3ÄÄë"Ÿ2gØI­}*¤bVøéÛ=‡ï•ÓYšjf=Ý’´œÕáÍ~†KÁ±ü¿§ßÀ-¹Ä·½ßff¼7R‡C/57a!%ãBN÷u"ð,Í•¾L³åÓ÷ A¯€˜7áÄÁ§Wi•³eQVº€ö³ƒõp𠨽[¦^…õ  âïA^òYµ°¬°³æˆAàŠ6_:—I’ÖLç•zDS_Æe—uîEØÁ0ë=,+ŒÇ LC3‘ª|IPhƒ™†&\diU Ãýßìƒ ……Þ€mDUAû—»x5}$hçÙÌêËz­Ûåÿ£©Ï©‚q%¯ /ïG X5É–X`¹" §•¹e˜&X.É+n±F¢e×Õâ²qÎÆn2;Á?‰+ÿXL¡èŒ–ÁЦÞÕáÛ¬³þ°(Õmý¾HBoh}°Ek {â„§áÏ´²ÈD‘]UY ̉rÍ‹ÂV™#@ÉÍšfGoa€aX”/î^h#ñYÈnÑYãÜ Õp‚Ðà§4­ïˆîÅô*)ÈšîöÜ11WÞ¢a=hÒOS]Ž6E®ùºuØÜƒsóÈ]Ü6Ürfš{w4"-™qňÞ,¡£%?º;)ðMЄjXw¤ºÇ¾uáÚEb…q6s ù“Î ®Í"óMrRä÷àÚß^ :ÔíºjÙåS$í3҆ϫá†#¼bï‘#yAq»q²Ü$ƒšY$QT A‘ívº¢ëJxlA×…eåžÝN;OÆ*, §çM¸kmUzÊlîÅkŠ •Ö¨ìmI]a {Û)p§Êë. {1tLÚ1'b˜‰g)ߨNnÜPRì`™°ÿûìÀÔ÷{Ι”¦‰÷ÅÛ83xÑÞý´/AÄ`wS™Õ†Ì\ï³ÝÂQì¶³•ƒ }§êxЙè7½„"‡‡­fGªøw“±æ‰×­b-_fúóœïl”\õ# ­açÀÒ«z,¢«¿»Õâ£ÁWZ² GyDÖÞ%±<¯–ñ±°Ê®DÏ˪—£ßi£#2㫽eÖ8 Í<Çx9«šíÅŸg)õHÓˆ‚Z/ßlZ¢Ä5uÒY/âzÒ3œ·æB«[A¥H >1|åØ-{]ïJNmj9kmWq ’äCø’,°{‰½kÐ! –¾”³rØõ“¼@ê1O–j £ˆÔ„e~~¬u|ÜÃE%PIÆ£ñv-ÝLè¯'Ô¸„iüœ`°QR¶ìjE¶ðá 11²é…űä±yXÎDI“¹ë,¾d%À÷âü¦Bþs¡”<êš$1y§lrÆj†h}¾ìz¨GÑxû6[Ä’Ï•t„S‰ïš‰^Rã²–iÐ0ÄLü¶¶‘òQMÙŠb÷5pœÕÀ šKšÑŒñb=Àf²Í™FVð‡R=Ú\röamS÷  òºª.š0ý`PÂ;þËX ²œ‡j˜™Ú>;9ýÓÓÿ`…ðn©²QÎ|Qš'{ËA ‘ˆµH•:ôP6;ð¿?å览gˆÕ(l¡°=ªY¤i7wß’"·1)ظŸen©±}Ê%ÿƒ.‰¨=â´ÒŒ~t@šM "ÍàH©ŠÞèG‘Xë5W*!(P¬‹^MZµ üjbEq2¿S´*¥4«hû­Ž;Ë ÖÁ>à‚М(xIb\†ˆ5§«åá»:ü° )ø±ÈÿË&Ä+æˆCe^=‰&|’çÞSW¼¬Ã×Ôð!W )¬tëÉÆÆZÂ`+¸Š ìUÞQ! Se£šLÒÕ×Z¹ ÐØ#ÕÖÒ¾1–¬óŠÂ Uým¯˜†ïqÝ y9„Q(¬ˆs±9›ð ì”ošb⎪ÙWøÄ”~ê%Þÿß2¨'Wј!åÆPꄤvS‡÷Ç¥&“ßɻѵ£‹¦4ÐsÖ3ÑóD—ž•ÌtÅáM^-Ã-5ÇŇRaœeù_yÏ<Îk—Õtnw[•ÎX‘ú¢Ê@¸Y­a’Ã&Åç\R u«´…!{NÚ •ýBe¸m.”¬µn ¶õ)¥E«­WáÕì3yzÅ8xÕ-—“*:]ášH’‘Ló˜ wµýÊÒމ Æ—“R%j¡ !u¦ò¹:;0ˆW aH¾—î¬!1ß·AóuÛ áÁ>LWHzEBcè©î•Ç8„¬<<øV£¢o‘uxqÔÍÀAfM‡ú\:+?c€…X†„V³¼\³pVµÄ¾–ôK.ëí§F´ %[UËÉú Â…_„õ:dÙ6:¨yP*{ÖÑi÷¯¢XL«çËT‹³Fm¦ÉkÙø˜ðªà…¶Lð•ZZ÷è– ‘ˆ¼í’ﳊqÊ"eË 2n²¦{[ŠÜ¼³¤RŽþœüÌ{ÄàŠ)7ÛÏä™Òϡ룅kÆ*=~ÅãòŽÛâ¿0ùÁ7uXn3!EŽg3ëÉO{Æé‡Ä“úr\«i¼@Ö¨núÒ?ˆ [¨×]ÁAd¿):â:{<Šë´Ó„mš÷›%¾>¼Zöˆ6’U õ^Èn „R˜Ðd¼Ö<3Yƒi>F²8S&ÑÖò†W¯Ñ µ~´ÅÀã~ –ž±BMžrypë@;/pVK»GËJ $_Þ”¨–¢*†èû.ÅÂâ zäj«Q$­—A\\Ggø·TˆmŸÆäÛ¦ä;WxyS‡ïêðÃqãc‘awæ8UØý°€®ÛÂceÜr—pb8A̲óæùñYoƆ•·ï6Ö•‡äí~.Â1-wÙ:y-èßöwm‘ívA¥ùïîv ãp;Î%ÚÛÔJͨ|íQe«‡åk¸ßàXÙ®(»ÃbFΰå,;}‡j ÈÓ °³rëxV‘{BîÕM·ôŸÎiõͯ \nµ3&']È›‰\X·ì±|ìp±¼e‚EÅìOÙmyÛÚì;ØâÙ; é£7ÐÏÁ§¯ªŒkYåa©µ¤æl2­÷B¥r%‰½s±x|{ ˆ\«÷m³ù}ÚXpu¾¥=îj8Gs¹z…é©x«|÷ —Z*ú-­¦ëK:®HÓ¼Œý€Æ_yÆNw G]¾›oh•XÔýû‰‰¶Ç‹ÿh·ð‹3áOµê IôµGÚÙ®¬g«v“r§MlZ =†²i£ipjµœW<º ÝKôà. »àU\“ý¿Þ§~*?ú¤l^©.X÷RЮ~º“…®¢Ü%³z»HIw £ZÄfìñ¦ÆÕ®ð#åÄĤ6eXk0+?–@FR]ÃdºO«B‘?`h«níËOüôšRùŠóãëDî&{¾x½j°èW©DåöoT7£zK—œÐf8([É~ýð¢’Ò´›æ~æ³ãq€î¬EÖÞ7Jô¾Ê96Ë‹´:VûCß·=ý%_ï1Qè‹vTÆÒÛò‹ÞcSí¨Ñõ¸»GûÒe´ïǾnŸ~¿ÔZc ²Ýl@W‹TnrÀuk]ÖgX“ss÷ŠÎ Hf)Ít%ï!ýüyj(ê‡!è¾g’¨´‚ùÒ Šfò`[mÚdƒæÅŒ¡dÕá7ºáœ/«rõÂáŠllŠÉöÕ9ý¢ý¦H·ÏV¸úÑýNPøøpä 1KªFC¿:=ùüû?ô¢ï»endstream endobj 105 0 obj 3083 endobj 160 0 obj <> stream xœí[[oÝÆò¨_q—E˽r·oޤi“ÔµÕ4EÛI–d!¶$Ûrbå×wf/ÜÙåðEQÀ ü`j¹ÜËÌ|s?¯7ã 6#þKÿŸ¼:nÄæûƒ×"ý1¦—›ÏþøTÙ¼•VoÏDš¯„ÝLJ^¼:øw÷¬ßšÁy!L÷®<¾éÕ`Œ“²û¡ßŠÁZ«\wÚK9èqòÝû~+µ„²å£F{L^•J“ôÝ×½€÷vRÝQœjGÓ]²g9*/û.ÛŠÿþn)½åV ‹oàlƒžü´9||ÜëÁHímwrÞ+ØIƒ4JÃý,D × 75ðø¦ßêAÚQu7pd9 nÒÝÙA@ pˆp]¯ÊãÛù‘ƒ•Ôy¡´^‰Q ¶€˜÷t´1 †¤²ÞO£i¹, à¼HËQa"Yö%n‡p–.ö¢î´h&v_²l{šøXñs~Ì0qš®@&<Ÿ/$„ÉÀj€!h>;ÊH½Å¾ê.*¨eµrR&½sÕ"dTáAhŠ® ²N„ŠHhAð§pÐÐ ËÇ9Âú‚× "ª‚Õ –H95 Jù¬@e©r¼“¬i$!<`BJr@¢¶š"o'ª¬ì%¬¨— 9öäðiB¶¿`õ™pÌiýÓFJ”ÕŒ3B¨È]ãGG%ó^D jÁé$¯Yö %ž/aw~ÔOæ •´‘‰$ãf°bU::Ë8˵4| µžGÇeÂÅ:‡O²îmk[G$FÊÖPä1uIä»5zÑþE¯À©Hë†ñ¢0G°ÈV謴@» š^¹èV¥ ® EH/$ë_bíÒTTùã4L¢²pµ¾Š¦DÜ Á §ìZ<µØ~ì… `+¸Ì*Õ’s³Ô&Ä(ŽAãc ‘Sƒ†l,EEpF W¶ƒè¡ªˆF- 3‘5º[連à~‚d(ï¨ñ5£ª>?¾á9ã‹ð~³kPýºë…-)ìÁQÖ/üªø…W ¡EXdùg¬µúZz[¬¾^ñ`x·å¢BX—\ášUò³¬tÏþ:…Û=›O\{êħG@êY%ãû¤M nè>/Ô)_±¢Yk2£nÅOÓÄ4µPÁš#woYZwä2é£nžˆ¥š©ây=‘?Ò~ÅÕ]#Ú/Ñâm‡¬Ô Ñ£Äé~ÁFÄVFS­$ß5ç‹–r´4l¢eá|/Z&ÈeW húéîVªò–gÛ”äX³äHëR”Ñß%¹ ²¢RûÓJ$Ȩ¶ÊS <ÂØëP“t댚oÁEBo¦ —8Á£ð!N1l/Ó^æAÐá~[À¸_^ƒv #ä|x <™¿g1@¤}o"p¡äŸÕ8ˆ~7÷ÃÇ"&Ã,¥$s¯oÎù}¹Ld6nÇÒ/™«†^#Œ¥FØ¿†[¶wlIƒÏdî«~ìªü¯š2T•ÍÐßUZZÖ/0ci¡ ‰,pÍ (äE–œÜ…”Û°¥ž!¦<…AÏ/Û†Ãbá˜ì½Õ+®.Mj={}š»“ÏÖ|Q4)#XþW8ÁKcµ*¥.R6 ®OU>š‹dÛ½•™€6B]7VÌ_-àÄ~ŸRÙcu¬uÆÄ¶PÞ09=LîN¼"©¥"A^Ÿ%ƒËTV³+„_P-+•™cN§M±lË» Òß¶¡ÇFÔcIØê}â“U•±+¨›}bÁ·%ÔΓœ®+øl¥"¿G›*¬®û,Ø q×mqjØv†³~/LNUU‡H¡ÛZ‰6Ö7ܳÈkùÐu£‚Â{B–ïQ¦Ám° lÑ}$g½Î`? U{늄<„ª)´¬j)Ü §i}cÅ$ÊÖÕF2¾XÃÂe¡ÂCÝ¥Ò°DÚzËÃ3Á¯"ÞpÄ3¯Yõ”Z¶ˆ6¿Öϳ‚Á\,úOWló‚íM€¹pü8¸¨è<Á’´&ƒsN*÷w Ì9Øgmj¥±áwiס—Tÿ8Ф^­J>NX”àÛf,²‡¾K5:AýIp'cW´Òi}ÿ;ëÆóɨüX%]]” ) «…íd°ú&Ó]vÿìõŬÕ‰ºLýÒV]Åœ§†•éŽ6:™Ç„ÙÀÚ„®Û@T3ÎÑ ê#RÓù†<ÑÇÖcj×·´Î _,X\·’<ïØP—x+G@×|› ¡ Ö‰[iSIŠÐ4nlè Ý?Wh‘÷˲Ûw‰`\¾¬”@p;Œ$w¸* s¡õNl6BV“ËžŸeWR¹YÛŸDÄ?Ð5@·„nNlH½ˆ¸~¦¸ô2f'6 Œît Üä"ÀÀ-t/_R“¥»gÎL9΄ÜñÖvµ=%·íêÈÁX˜kvXüÊðF^Ô†·@‰àïuRá2y_Ìo7ó-Œb.ßäÜÏ[j‚çsÖ@]&©SÒHÇw_Gü(êÏ\U|‹®¦ÚЕd€SïÑ´æ§—X¨ñgR‘vïN.+×t7Z ¯êVÓ¨U„õ`áuÒÜKb5Ä`×âû¢o ¶ýܬÊ*SÒÌšºf½ù¾Ýœœ”í•'µ*BëlK´¿wðL…¯=â¬ëZm;¹âθðK† ÖÒFÃ+|‰ÓðN|k#ßÙôW§Ð¦ÖšQB]ÂélC›tmðD“ªDê×îÎ%«žª“sÊ»&9—Òþ¬ ³À®Â?­Ø`‘•FŽx¾ï°ÁþÎ`†ø‹d·noöSr>kÌËGu`œfîèM®4—Ú#í¿\”vH‘»äOM ¢÷¸Q|‘´X¾Á©ébMˆå]f­øƒƒÚdmóõ¶ ˆ6û‡½Ã(@Ádc`hƒýì¡®D ­ vc‰ö¶Eô™Öì P² ®'u"žö®¢Àßû–Œâ;2LêœVüû/’Sb›îÓãÄŸ-Cs6Š-Rù«E8ùýƒI™t×Êì`XÌI\äןôÀæàêä@Cÿƒ1ï A‰ÂšršmC%¿îǪNƒ«zÁ(4ùmÐîŠ~Ä[Mò¸àLëÁ“P,T\$[í«y'¢U…-^ذÚWÏSÿÔTØëH‚O6¹Ùj4¤ë;Ÿùóÿÿÿqk(Òendstream endobj 161 0 obj 3036 endobj 207 0 obj <> stream xœ­[msG¾Ïû+ö;Wì0ý>Ô} 9.!— ¡êrUglŒ)°1ŽMâêW©g4Ø­T…¦wF­Vë‘©‡÷ë¡ë!ü—ÿ<:[Å¿®ÅúÍêýJä¿ ùÇõ7«{•]ûÞ[iõúàd%òóÚ˜^صS²ᇳÕ6Oº­éG/„Ù\ãð²S½1£”›ÝVôÖZ5n^vRözp~óW·•ZÂr#ð¥f{k¸^š•J÷NúÍO€ß­S›Ãô¨ÌæœÕå‡o»6ËŠÿü°zp°úuõ~­…‡íÄn5 „ð¦ƵÎ…?Á^ß<\Ý{øÓúêòúåêÞok±º÷}øß7¿| <üçúo«×{—UùÊQ½þr9Fº—»Ë©ú ã~ôÙQNÑÇz¿}v•ƒú {Òg79UŸQèÞîAŸåT}œÜ>;Ê©úXµ}v”Sõ1z?úì(§ê2À¸}v”SõQv?úì(§ê#Ý~ôÙQNÕGŒ;åªÏŽrª>ƒß>;ÊA}†=é³›œ¢ñb/úì*§ê3Ê1ÈÛYŸåT}œÚ>;Ê©úX½}v”Sõ1Æïƒoì*§ê£í~ôù9 \dŸ ÷'k¡àŠ+¸`ÞȵBÕ“ ®ï»-,é½U*ªX\a¡âŤT˜ŒÅ•ö¡ôáWCo„„¡z5¦Š,$ ½ô¥³ð’—Zo.ðw,¢èú€T¡z©Õæ>{t 5ãæ4MŽ~àëPý^q°?·¹Š2ÕàDx[jۻуL¨"í`]Y(T‘WA}0•¤/¡ô×8TR®WÊ—÷¨tÞÁæ¥I¥éü¥l'aê>à÷ó:Ê1VQð÷ Puç5ˆû†jѰ:O%¼¨¢ÞâïáÈ@˜vfÁR¯ºPÐJ"Fxðœƒcð”×'U.¨bá ‘4ßJXÿZ¹£õq§¯°˜&û/–ÖÅ”Ñ;Îs¹nôæ_P®{ضÎ0Z”CuBŽ´r?B±§Yàï›ôžFꀇÓ3ˆ"^-õÊrí.ä`{ ¶!+¿Ãޱ¿PÃT燿w¸»¯š^öœÍVºÞ?¦#ú)47”ôH wÄú ºc:#°l¡–|0¬2ØÍo†` MÎ¥¼tŒÃ K+.k„©K…M@0òÂõã8ˆ´8[Õ{g,Õæ²Ÿlñ è‡sÃ0Únpo 渨†a­uD;PÕ°dxŒ~zH;ðm1m+–À“8dRvpn¦lÀ‡4Å‘£°+|¼¶=® 7¸+%›$þHBÌ Quò5U¼*Pp þõg'žU –¡›œ…¶(÷*E¦p캦«YÉNáLPƒ“ÝÏ‚Šf­Îþ%Gpüâ_B|Ì¿(ªÃ0û—´¼™Äg‡Ù0Ä2{7(&úQ„Hr…‡äJ‚PÉ^J·FjcE²ÖVH˜d2‚þ”b£œê5› ‹kK_‹O¾–ém04 y„¦YŸ(†¬½A¡è€ÄÕHbyÍ‚¤Í‡Ò80“ Ïžcf{Çùí)†Ëäbpm¾cB)«ö4ÝÇóÂ'slï•"ì8ªÍÏÄg.8µˆ[/í Ðµ'!K*1hú$O®’«CD„AAã1÷7„g’ êÅOAÈËalÐ+?fj4 G$mRBFÑ$$ì«&´D x±ñŠ ŒL&ˆDá%»BºA?áý aYãTñS”—`ñ>ºÅ¼=£ES‚rÝ¢=ÝM$Üæ3ˆÀ­9ž «MpÅ-HÚ¼h@JN°îÛNaÖ¾I¶çŒhé)á§9+G·ù¥fíCÖUÈò$ÓõÅmÆÏr|tìZÄÛɲg‰BŒ˜iÒĵv c"ÂÐÝI)>*il©uŠ æˆÁQZ*µÍ=ÅAP—k.LñÁ')!›£”U("3tÛ,U21Ið$’ÎIcxàM¶¼³Ó´³ò·Âð>9\’*?ÔTÉï# q¯®fI <ð"–dŠÞõå<íÒæAD› ,0c–Y³ù_…Ńn õª×nÌ5¡„@ñ_gÓ ‹ºÛ‹B.š¿ÅRñÔá®»í¥Tœ—rwÐýsàwãðç>7Q†¬°œ‚µ¦`:'1¢¤™ÐÐ aXȾd©¯rèµhªëŸÕ XŽ$ ¦NM­O‰k?îÆ±„‚gd6;ƨíæ9™þ1M+€-…Ç#2þŽŒƒ¡Ã%‡w 6‘ ²(¾n1˜3(_bˆh£bBB¨ï?%"äj1*§Àú™”}ÿîø”»=}Í‚I嘙֜ÓÙpôZÔ“ç»$o¹^MãHê ákÊ…'7þ ÎB#nsÒA©;†0vÂú=ŸnR¿Å Ï÷[x†Ìwa°Úã¡Ï'b¶›v¥Œ˜†ÔZÂÃ9ÄA<ú§äè‘ñÃ÷žçó‚-me—¢Ú!õÿ&å è~oZáDbr4PmMÔ¼÷XJ¹2œ7öCÙÎC x‹A'wËÃ+vö‡!Æ{ч4ögŸâð1ŸáðŸÇ¡öPjüˆÃû8|„Cˆ ÆAp=£2yY‡i»m÷wϧÄVŽäl^Lã){ž·Mæ»;Ù4g6³pøÿÃ^£«Í×ÝÖº×ÞgwˆrÿÂáßq'*Ÿàœ|ŠÃÇ8|†Ã8üLwù$ÏŸ`9ï’ÉÑ ‘5Ф<Ò@&c”ŒhoRÃÕµ]¨â $’ßé\ ˜@#JKÃäúêÒyTŸôæÍ€ðÀbï;_WL:fŒiðfÂý&•ni (I¥Î¸OxtÖ7&˜OΛßa6$z8™nI†P±º c»Ä‚¥¾öML|HôJbß­\ ¥oðå…>jIeìu ›¨Úr\‚wYƒT°áŠ„Ùð%Vî|ÛÿŠ¥>mÙS†}á¾zs€©€¬]è.°=»4›šä’ámÍœ+E˹f–°-dà…fˆR¯¤ªPO[Ì¡Iâ–êÊ7$NÔÅ&ÝÀ,–ïù´d ƒ¶ŒY¦pù:cô´š8žâ3øÂïNÔÛ›¶õŽÍìwœ§¿©“_c›ä’ÂIãž©ñcìu–ïô5ü­®@mÀšzC¯Û¾@½ÿ‰ô—hŸÒᯢb›;à‹½å {špNÍ ¸üõoNB~r›×v§5þn1BXÎ.ÖÙ!°àý¤ËØÔôÙ¶M”gsk/œD ^‚-B„IŒgéÔ"8ËpV‘Œ ô féæV¿¬õe]OÂó¤3H^:nÃdHhà>©Ä % [Ÿó휣¹ŸkMT¹íf­dlþ΋_sÆ-ê°’šÛ…Ê‘ämÜáN¥6ð­Iû#õ™”—š=¹*!™n<ßH¹­:9,è€ Šµ€RO[ b^xkbß#WÄ{åm(ÚÈš&s[釨|ÚÒ´óÉa= Ã+>@5ÒDatLë£î‡!]êCÐ3¯ã |Ü&`E{ºe!ˆ@ì(€hæ9Žäjk¼Woîȹ+ðrb5E!~ÄBâÇ$/†S¿(™fV\ëÍ̇ƒ÷IóûœøùòEz8qÍ·"H8bq5oG+1f7í{4_Ä0}“ÉMxŒµ†Ï`ìý:Â…„ÚÓ$ÉÅ:Ç XU(þZ®\n€šõÖ;ý2;†°æ Ã}bJX¼.JzJþŽˆd„¨½²²LÆ`(ö¢<=%³wsOÛ…›¶”aåäNzy Y‡Å¾~“Ê’ÕÚK*rñÄ6»‰ï½äÑôÚINIGK?çà)+ñxbV+þƒžþ²µ¹ûœ}W?'™ðÑË)ù›B«Y)– ìù ¯‹ÌCEA Gâû×£UöÇítëW ÚoËmâñ/–›Ì.e˜»˜Ë*¾ÚFh²mýÏ©G1âL/¾ÀÞÛšƒÙïcCþ„зøê¼Ävú—d0šK9åš’íøÙָ̓”F‰eVú<Š(Ÿ,ž]}bZåRâÖ»]PçÔç‹£ÆÉ‡h’šÊý ¸ ½EšËµ4]ó*¾ÌY‰$L Î§˜duù#¶©±Ð ¹Á„:é2XÑëÈm>ŠŸ6 Óe1Grª;™y?aN»zÎgßC -TÛ@^/oÃIN­ó*ñÖû3Ä3›yë§nÓ=”æNý)x®Vö½pxÂ}–OßEŸ¦t…ý(›àî[üÝß[ê—ÁWF3ÿHo^ߑЀÿZšíHíú-å§Ukí¿«Öá‹y bÎô6y‹m*þ å_Wÿöìsendstream endobj 208 0 obj 3282 endobj 236 0 obj <> stream xœ½ZKo7rÔ¯ä’îE†i¾É½%»‹ ’MæìA‘dň2\GaÊÛ¿W‚ ,bwøÏÅáo?ôS #9oVF]סaFúáÞïöÜÂË…'Oú¶î IuOL‘w‘w¡ { niþˆ¸Q­hÖë¬B­ðÛ»f­Áôþ8sÇIJÈÞ5êHdâ¶Ã¶~–_r1íƒÙV¬¡];RžIJ¿}¨_‘þ±…"õõw´Ó)&´Tų•Çþ~6X°Ä‹(Ví~½™£Âáb£Ÿ¼n²¿G²¥iPÚ*¯³î !%6nˆö¸¦ ¯ØÅ‹w…ßé^—åÂa E>ó1ð*Ò¤… vP´0zD“5ÉC.P’¹Œ #•–²‹e[*¸Âi§<Uï³®÷²Šö.©< ,ap¸dZd¶WÐý›QînǬ“ÓY|™—’zçÞÚ¢E<¯¼EêxŸ€u˜zZÇÏEÁu7k~‰& V‚àVà±Ió‹é¢¹Ä:(4VØ#OÝȲhïQ-È04Åiÿ h’–Iÿu Nµ0Sbs•iKÀ)Áþjúr¶<„–Ì>…öYÌ=¥KmÍÃéÀ¹-Æ5CÂ# Õ§a1-<¼}•¨‹S&ë?Ž]ç†,Xo€Fh@s›FQ+1Šbî ÊyÕ¨Ò^$X†SZY&DÙ‰D>¸Êã§É5¥²$—.Y¢¡W£íUH–ëªí+Ù„ämÁhÿB„å¾ Ži v¹>2õ‹g çgSÈY"µæ-hrL 5£pHœa…ÅjÚ¸G1 1Ü/‰¦¿Ã_ƒ~¸Ó¦ÓO‰$¡ÔR$i”æt ѽØA¦äõÈØÜbBBpv|D+?DØM‰•'L‡¨~RÎ]K8(“ö ­¤D:¿¢/|½sûS£ÅŸÔê¸ç’­äM•ìfÓYµaftÖm÷´Ñ•rû½>m×õ­[qn…Š8HQE°%A*òÖ:R©a¶ˆJÙ $ÐRÍ2«|uL§Ñ¶jOK½AþŽ ÂïÁ`UŸ{r2B9f 9­Z0|v£–Õ <’ðwÝÁ ѨAhuµz”~@®¢‚ì2já#5 q ©û,ÆWå6kÍ|诩@3©\eö.µFÕàH+ȹ9—Ñt£ar³g`)ÍB‘N}âŒäIr¶t;ÏÒY”._N×s5û”¦IQVSiö£)’kgµ{K5 î‘•­[Cתˆ(#¦ý¾‘ÛÒ³’žÞ[îÇD}öý˜æÿW$¢ÙP¸w@[¾oèúÄA‹\Æ¢N5]/B+5Is¦×»îêŽQ_€z 3!{xõ‡øzËé—d^®N¿(%p‹ht@%2âQºÚ*›‹¾ÈI;lH½^Únð2ÛÛ b|™ÉM9Czq)ðÄF[·éÒæmä¥í®¶œ–ôW|†–§D‡[i É0©áL‰.¦KEaÔD6V<{lÆba Ö]>I`úZ7ûZëÓªÚÆµc*¢¢ñà)zê!SHœJ–Ä)4ꨗT¹¯íÙdbXö|Ëöˆ=­ð²»í|7ß M¥P;H†ÞtÑ…[¦ù€^–‡Å@ŒÉÒ-´j}t8ãÉþ’ÁÎÕÓGm5ñÐrd„ÜH•諆üÈsÛ÷)sܪ…‚2x»4€hl[§ÌyÒ"ø[ÏÚ÷Njg¢ëÌ ¯Jrç]IMCÅð•QlQ|hxlSN·YÈ4жàGƒæÒh]d¯ÛÅø[í‡â2蘚–1UWÚp\²Ñ°DR¤¡íBm9r™éÜQq%5¬"ÐiVŠ—Uß5¨:R>Þ÷4oWè3X46«?·ü¾øŽóTÜ‚ë|ñÒÁ“ÍÂ@ôìÎ2Š"ý’NM­`á¾Ï÷a*nL’+\(ø ;qLçÍޤ‹ÜÀ *Zy“•ñLóÛü}ì¸Cß&ìÌ3Ýv“òpØäKñ)­ø ~í½(a:ZNÛRð…a[Ê2*š=CVˆ•`G¨ˆLè£Ë³sôn/üKµ¼QOËC‘.)Csdö C0_}L¿»˜[x8ºÈ½«ƒR¦o`äâµð>`LøÊ-ñ¢.ð¦Juß~Okw&R ®P…‹añæTºJó%¤; óV‚…bb¼éC2Û}VW Â7În)‚Ž‘ºÕñ¢®“CôÎ(â†nDмë’©muð–s~¬ÊìæýªŽOÄîOê_<í¼±íæ!ƒ‘.Hô¬žz1Dk¦Û‡Ubm_¢=õíÿBBN›S‘I–&9-Žw"êý-pw§ÒmŒs·MÆ6ÀÓìˆü»”ƒJ­ Ý]ïQŠ¼Ì±J…Õ硬üeo’$¤©¶ˆÍhjgGâ޽¡núӮѡ±ÅaËËl>ÈŽ­šÍ¶HÎm›æƳl:Þ †i™ä“Un»ãÕáâ¿ðïwnˆhÃendstream endobj 237 0 obj 2647 endobj 276 0 obj <> stream xœ­[[o·ú¨_!ø¥{ŠœíòNæ­q Eâ ±‚¶pò ëH–`ëH–,%BÑßÑ¿ÛÞf¸Ë•ÔÔðƒi./3ß|s!ýñpÅá„òß'—ñŸ‡âðýÁÇ‘ÿ1å¿::øãʆ1XiõáÑÙÈãµ1£°‡NÉÑ×o†×›­} wÔ¼Ù¨Ñ/åp¿ÙŠÑZ«üpº‘rÔ“ ï›­ÔFÈAÐG#ôŽÖpƒ^ë•JN†á»€ß­SÃqj'3ì»{9¦æ‡Í‡‚eÅÏG…S q(ô¨´•xÊ­Rf„o¥a—îðhTp” ‚°_û`Éú¶2L£ŸJB‚t´µÃ9¬£¼FWÔ¼0Eñ šÎVjØ^™k‡Z5©a‡¿ãfÔð-õ¦¹üZ{ßÁX¯Çi’Ã÷Ð;#CÐÃ5 þ„:mX3\Ô3ô'»-»ÉR¨v8éáÑ·Gx«m§Ñ†`•ÕPÈ>«!ÃjµyEöÔ¼E:Ѐ™ÕÞã-<$ª„ì$ÄèÀçÿe#Ĩìäqz©íèœÎ6[=JåU§¼©—Ø ÒØtXc'ë†/qpR$užpòLÞ•‰„QQ‰ÒA·~¨ð&-@bW?;&3hÀMûÉ–Mã÷´V‚«šœ`È…ß…åäà¦ÉxNÓ*$ð€­7ÃÛ:×CPuƒÒ²½\ÐZûúÑ»žéT]€¬ÙÙ>m=R;˜x#šÑ§æû" 4 œrgßg“÷ Üy/Ä šÒ ŽM›u¹ší8Ê ŽÐÄöšv üÑú@já†mT† €«h/JLºka¬ þ´ÉGqš+›QÒ.kÀÛV›uû.3ÕZq7 èkgÆÞ¨Œ·Âz à"3DŸÎ©„Ä3n•pã$(@Úv’ét]›b§X‡g懼œSÞ•³tâ\žn…) 茛™µTj²±ë®µ2I²Sk#Éj+=…ÿžBƒŸy:3ו_3:•ŽðT'ÌðŒ[í!|´¤7óocžåû¨Ms žãº¬†gTàwaG›­ePÆÌ@elf !7Ì’@ úÔÇÔq™tŒ¶ÀH U£Ã¨F¤„Ó…áaXÐòM‘39ݤÁXòIù8¶kWôUê„LäfØ‚à†[ÇÍ^;ŒFߟñø¤çœ÷)¥8K ´"iOÈGÉwKÄL怋y›lSf´TÓh„œÑ[I˾bN°Xq‚gd)l,³ŸETîlÁÉî#ƒ‚žb¸ƒ$ˆö-ÄÙÅѽJJBE0¦• ²DÐ ˆŽe!ÈÂcÔ˜{ ç[¾¤Z“¾l§.“\Âv}Š·Žéç=6Dé::N‹‘:º^8S›AŠ46}všÇZÇ׺N“ D4ð÷¤ƒ©Ø£ü;›*š6‚ïë&]GôKü ÿd£Ñ;8™FÆ™nk_qiÓÙ[²üÌN×ßò=Ò¨g® ÂùH€eÍgº¢m¾À•À®¬GšñUJßœ ø»tQI×Ñì”)¢;ÕÛ:òE‰|EvËHyGÙ9Ïèôg çɳuõ1Û2ä·‘nµBkˆeËdzÞ]•oÑqˆ•}íh ¦ÀßcÓ•’ϸ°±Èέ†ÑMœÒ»É7vE½o€çfrrN‡>ªn~´dCƒvÖ9òp¤w€ˆ¢Îüyµ`ƒWÅj¦”â3ž@žÅ¯ ZwƤÇÔCf{‰œ.'t%:ÖH¢äõ0ÑGc<•3êe0^ËÊSü}âp÷î±ÓF¹„Ïj›8T…¦“ }ÈGL1wY€Hˆ ëm4î §>Ú_ô•8Vuô.B¥Ã€$MN€ÑÇœS³Ò£m™$ï<Ùk’k²ÇdHùô@! ÷æiëf~ójas ‹Q¥Õ£g¼/@ ÃÌf^±ö7´ô?Ȱ[»ËºUFÉ–ápk0%,G¯Ì¨zeƯ© ˜Šy˜Ü8_xˆ‰÷4Œ*Œ—9*c…ȱ5€ç‚Í%ÁXÜ—¤çÕÃséq±ÚùfµÚµ䥠“Z«¥Nýù³Rg<š›lSœ<}¬8‰ɯkœ"N-ƒ%2, ¦rc­M,s/ì-‘¸4MÞÄ2ŒYÔŠ®V,º^¬†{8¡%šrL]­©ðÔ6%&‚…Ь(GÉÆM/µfÙ“U)­Õs¾Îk+K5i¯-ÿóÏ,Øñ=—䚥›˰X¨ÇŠÉš’ìL׋ÂÖ,W*ieU˜E*õ7«ÂåM‘xèwêì§Z%q–%%,E½¦;@?ÁaC€@nö¹LÇçµ½ºñi,G@óG–š¾bíoh=¤6ð$6ì:{c¥:\.=€HË'yÇZ¢a,_PÏŒpG &³©µWP“« ¥wYôËsµõ¨ž°/…NÑFF)tëãód=c!)%˜65apÌß¡d”š´_©LÜtS\ÚÀJŠ‹(ú÷f’F÷Kù;fU¹âȯh^ÁÜÎ?7brup«»£;…}Ϩ;ü!ÃJ‰%gBN5cfâeLØ­,Òþk±Ê®[G¹|ü]¬”Z¡yÝ›mั)æ$Ê\-…”ßÇî•äþ§îÂÅÀ¼Ì}±%bËMFð-2}9»óFk« Iäm½ÿÑ*ͤÓuVnÞSó”š7ÔDy1 icæ›{_SóššÔÜ­Í[&{{5Âü˜š÷Ô<¥æ‹Ú\‹þ„Dá´r 1`ø@C®fõ=øi׃3å$X¿ð ë U.ê€u^Ye&ÀÔËÀȚNj@'Q@tg¢)Óõ]«äwé¬Y š­såú1Ë?o”6d ¯ÙFÏÞ3ЋÞ¦§x(Æý"p뢋Pù>!Iz"’z×ÝeŸ)Т¤–Æ7¼Û/¸À bìfÅþâ­] ²fäeÛÛÖÄ=RPÅØj ër?˜%ÔúôÏk'e‚1•ŽÀb¾©Î»ÀɨV¹I`õލJñŠÀóHƒY~¦b:Ö¿…¢¨³½ÇÍí@6çŒ[…ö¼êºäZþœ“8d‘“úw ]¯H­÷ÕHûAýÚ%\ µ;ˆ õ³žæ|)ê†<Ñ…bT쨌EXü„Õuf»b“ÎlâÁÉÃ$νÃò±FbóÛ>æÈ “ËÀmgq¬ùäXó~GŸ¡=Ä Ì$ªŒ‘ ™ïŠÏÒÿÜþ–zïºcû“=ÔfÏ=; šDÊJ¶ÝaJ/ž¶€ v²0† žÌÕ9Ÿ¸›.õÏ%î\Xß™ 5ÖÐ䎚7O…1†1 äTø‚‚ôÿ…~ËÉ”Çrïç;Yº KÍÛîg¿>*Seйéã%7i]ôY` æÑŠ›îUÜæõ­XT£RÚ3ê[Fx=üP'¢òÛÙ&> ²žõE5e¯Óíé½ÞIíL?C¢AÇÆ ßDñl5œ]ô'ª¯N¾X…xÙ ¤» ù™fìLxQø’ ^g(íd*ŒŽz’害•p]Ikf¾I-‡=®EIÕ¼”@ã¯eL~ªžd¤¸³4ï©yJÍjîk³kBžLè?hñøbÎóø…*,d`QxS!,ñO® æ›òº§$RZ¬«L¢±ÎÃÝì³K¸ËBìîãBæÆ¨·ÿØÏ¿…è‡jÐìëà wì-kDõ5õÖ'£T¾-ï?Õƒm3Õæ—PQ³ÝªL| ¥1{ìMÄØx›Ÿ5û¦§ÃßüXµèëç’þ…;Bm’Åç볦/ÏÐf©ï®ˆ³÷iøTŽ=Uc½ÿƱÀl®<ƒN"Übh‰|%ùçy¡=“êOæä¥µ%<0´<ò9þNp{Æ ä—‰Ñ›§,«%½RüËÏ_ú™ÂzŽâ†˜g©3®XKRŸoµŸ½Ž¿^ÝΛZÜ‹”Ëêý¢Ð×¾ˆLJkÿ÷€éZ@r)\ã›°õ/Gƒ?ÿ C{endstream endobj 277 0 obj 3284 endobj 318 0 obj <> stream xœµ\IsÝÆ®rnüïfÀåφ&U9XŽRe—³Ø¢.+š”D&ôã"’’~Hþoz0K÷ U:h„7˜¥»¿Þ¡›èäFø?ñïÓ?ަnäæ¿G7G2þCÄ7ÏŽ¾ùYÛëœUÖlŽ_É8ßô}'ífЪá‡?Ž~k^´Û¾”}sÃÛVw}?*Õ<´[ÙYkõؼj•êŒ\ó¾Ý*£`†j$¾ÔÁÓÎÁCc–ž*mºA¹æï­„ßí ›“0ÕŠ¾Ù±g9Ááe+àR°­ü÷ñpK©é-·Z÷ álܰ9>ƒ ~ßnM§¬ÐÍkj @¯›?üC§z«ãN£sš,ßÜáð‡×ìÜW‘£lÞNtsÆÐeoó ZÛIíFOK):=-?ÀÛ@ס9Ã7NÑ{iéAà©êMg¥l¾ò9-…‰çÐb˜ÎáßÒ°À[$×igÒZâ Îl]\õm–€»â¦IÎü¶F×\…ƒƒgàôйøÖ´êyþìzŠÇºB¾!¹Â.¯u…©7 7 ÒD(óµ?‚îF¸Â]ë¥È0!‚´Ð³Rùô°NÌëü>ù tJÑ䇃Tc µÕR‘QEj¿¿5ÕõT?v#¼Eëwí£<ÑûûÅnýbº“bðxHsÉk%7ü\¿ñ%+d…;?×y†Q¹ÂC’-È-Þànç8$+Dõ!ìà™µÜÚJxh… L{‘ÑðŠÎ ÌF9KDé "o¿"˜°ºx˜f¢ 2—iÃ’f OÏY¡½@OüKê"  2ú-‘Ô{NR€úKë¡ÓÀ»ßùU9é õTÑ¢ë!@TW^ìÇDíðH~ƒX$ïŸàªD¯œ|+`§Jø^Sœh­¢…‘i:m¬š,L\lkDgG!Úÿ„•„ƒ‹‚(\·“Ò •îüªpÛÃ]`Wë<ùòÏ»i×wVଚ@Y¹qsüãÑñW¿5Û,uW(µY© äwv&1Kw¬]ã'üÅ“EJm%Üv —w@º¾ù…ŒÛ­îWB6ÿÊDæ'økJ¸¢t<b‚ÌËE鸧øÚ Å^üûZ¶YI!VË€C!¾g5Õuí½ø©úÀAêvÝf'Ñ/…p›InÂ4˜è…ì½9XnX>_Ìt{Iú’] ŽDò‘½;Ö7ú©;¢ÏqêU+ÇNÂàŸ{g/GÙ¤ŒJj~Ú¨¢—P•܆l¿[AtU²öpΗ >Þ¢¶ÛâÓN&æ'LFÀc¬À–]ö†“Ÿ VTÒZCO¤ò6º·Vñ'¼AÕùÎómb´’î@øvé¹ò:RCsAMF"ó5k]N¢o¥;}«$ °æ»VÊNëE&ìXj–v ½bP=h–žÚ27»ª¶r„ö{?äiÜ¢pUwì½?àÓ—-.P!ZYЄã" )ϳÏ; ¤<Ä߉ Cðþ¾bhd8§'Yè·U­Ýju’†UþgÅE’>毗¼)é¨Êg½1Þ$nÈæÞèž¾†keL¹Gz«Jû]Û»®άéìcÏŒ«ÇÉÓ7™Û(V¬„°Ür ú¬!'µe#BL(4g´ÆÐ?)¢Î° S‰wœ"ÝW¬²b]òuå#eG¸†-ËÄe½*rÏ3Î>¿{¹”öP/sÙAâiNü’Jº,æ"AR~é‰ÑúдîåZuAÚ¹šœ2@fP xB,:«á®+.4qèÉ>„¯dù×T±G¤Í"Ò´T ~õ\„ܲ‹ë·J[-"…wΈ·3‘Ïji ˆP»àd—2)rAØ>ÒÇÏKy±Òà06ÏZ¸3œÊQøÓƒö`ût±+›`#8ɉ®¡wÉ»cq¼‹ œzÕQÉOY«™Ô&W‰I`¥€6 þ(Ÿ'šN;³˜Üa9AtŠ ¦ðH[ð3ÑPwíª`mÍWÌKØ,'¥àCÄ‘“"ý™Ï½Û¼ h·>GFûh11ˆá9‚錕^6±L¢•/AÝŒŽŠµP7eä”@ÅGN¸AY§XˆÂ|C¨¹§s§¢Ò%»|î•…ËLñaf+G ¥Ùšå…âÃ¹Õ ù“Hܽúó@«•hDìË?ˆÌàÜR«'[ÀÚŠÊÂF³RÔZ|µj´–Z0rBL h×µø¹h­¥èìãuÅ5(šÄÒú\kB%aÁAåµs]ÆäzÞ|.9.–Arˆ^Äߪå%ÊbffjÜ™=rÜ‹(‹kÔ׬6º­u$â3R»´šïHJq–ž(SS4?Hbz‚QBßÚ—˜ ‰i&¶l= »à.ÉîÙ‚)°¸B€/ÚO[„BÀw“iœÏrøº<ÐdÍÑØ!Œ÷¥K b¨ì‹CºŽªç¡B(™*e˜h¶œ­G­ùêðŽSsDa±º‰}ø&#›KrŒ’ˆÎ ›P&RýµärMµm¥÷ði¯q3Âð`ªýˆ±cÒG“,…D`J>àð}²…$‰‡ÏMN‰­Á–ž4ýèÂGQ^Œ Ú™›dƒn biƒˆ€Íˆ"~Ö¡I™Ñqd²Ù5¶Ïc­Õèuß#r±ï£×·Ç! ]Ô-ÃÁ¯P9ÖSýX–ËÄ’c¹ÆáÙ^>oP>ë^êU‚í2ýƒù„ùYlÐnÅaza‚ºÃ[n¸&fQže=6“«üÅ,P®Û\ l>¯»e)8¤XwxƒÍ5ŸÔP*¨Ð`W}¢!y½Ä‡<»òÞ´š/ñð œR¯‘qÚŠJšOšÅœXÊ¡òäÈ^*'W LŽ”\²b'çõѳÄúgg>…w©³¬ˆ" !åª6Ú±KUÛú¾ˆz¯ ;£Ù£&ë3’#DÖI›$0-Âx«ˆ’•£ ä·8|Àáûý@6KÝuàt¸—‘r6&æl”U9ãùÙÎÊíëd 4‹¦a xÍ€A3ÒÄž¿ç̪ƒb9?ê"(Œj~…@³IUšÚƬ¦<Êè§Éê|o øL¹ÇÚGç%ýàë:Éæ4×aÇ'"¾aí«7=``D¾§.ÊñIñ}_‹@”U=L±½·ó+z…SµXö5ˆŸ´Ñ'¶& ´D0£ŒYÈuT%ïúÂSbŽÛ2' »€bA¼É41‚õ=íFf Õw"þjœ²’z„I™»¤k‚!æ-Ç‚2o:ïL]‚ñJëzËĽÁ¼§§üê$ñ‘\Íïpx‹Ãvî)ÉbŸÀØ‚!!¹¤é’+Q¹ýŸ·9¾Ž  lhŒg?e øÀRí¶ pïdÜú\<âè>jŸƒR¥2_ÖYXfêu´upÀÇû7ºWÝX)F›ìpxÇF,'ìÜe¦§ÄkÒ8<Ûë*YY°ý ‚°Ùíž›¼ìÝðYeñ¼Cz°¬ØD-vºæ°­Î UO‹ý à!ÄÞæ„š?ñ§¥ÓcÉQÕ“¦&Òl~Ñ‚ÚÚüN)ófFZlÃýgul É0›¼Z×NΪ†Öz¹tyÊvþñæ™0Î_`êN¬ƒkؼ‹Í¦¦È½±ØäÝ)õV3 ÚÑC]@`ê‚$õ‹} 牴ÞWžŠý9_9ÃhðzOʰM[m•èLØîp–AXâÎ~¼rŒ.ãEØ~¡fL$r– )=–œ´öx±y¶hÒöUøÑ”á?›‚I]Î~¤xr¡V’[/’D­‰äŒBUMhöAKÕäôYBÖRŒè©^ AÙØØq†+"RI-ÕÒTt”Q5©=©Œ—mL TèêXJºVÙæAÒJš‹ñt¯¬ŠQ€|\m!ÆÊ´?}öáŽvzµ.›Ú9†¥lÆ »,ŸÉßL”iÕÿ ­gas…÷2Øæ’5yêË6Jy/ÐDs,˜GÉÑ}ñ©YÕ;ãÕD_0Ž­­“{eÊ £²t@°yÉÞ›o²È-çlÙu—ßüö©þ$T)×SyÞ©ºçc2òOÙ'ž™Zº´Þ›¥ê|KòÛ·‘'eEâû•ÐÏÙû[;ÀýçÆß¶ð¾‡ 4ÝÇJ¶ùë·IøAÒø•Ò÷HÃïr¯Þ·9GÄå9¿òäs7ì—x)vϰ¼7ð×VÆufŸœ• 3é¿Üåù¤Ú’(8’Â|OYb'>ð„o9Ó{þ©Ò…ËÀ)ÞÃ2;ÉvOòy@¡²ÈwL²®Õ¬ÿ=}`s?Ÿ¯&ù _å©ÏQ~ÊÕÏ_&á6,Éž‚@EU:á±ÍÏ.d.j×s^Åœt¥þ;‘?©»âR%R]bI­¤B.×*°”à{B×ZËø/ôÙ·øFºòËâÙ™`Â':½î„I©W$yžýþбӊendstream endobj 319 0 obj 3449 endobj 367 0 obj <> stream xœÕ\[oI–àÍ¿ÂoÌAœaú2}yä² vÅÅ+„X$Û‰CÛëÄ» ÿñw©êkuOÍ'+öa's¦{º««¾úê2þötÅé„ÿ¥ÿ_¼= ÿ<§oN¾=éSúñô—g'?ÿ“2§~ôF}zöòD¤çõ<œZ%G?¼=ùÛðçÝ~bëåÃNó줾ÛíÅhŒQn¸ÚI9êÉúáÃn/µ„'ä ê îŽÞa½vW*=Zé‡/w~7V çñQ3ÍÃ-»–ózy³›`SðZñ÷³ßÁ.…:µ£·“¸Ë½Ró†µÚz{zv ü7lÅNFÛ2„/'ÈŸ=ÛíÕ(½¶n¸ouÞ+ØwÜ­™‡/êçQ0³0û -¯õð¾,pØïöz”fRÃ_vÎNNgâÆìå,Fïg:çm}ÿ%¾ßŒÖ‰á«Ý~‚ÝLΈá.>á,œVx•˜UZ€š¬È;€ßãRf?98nx“t³'ÃËU;ZÂq/éôi Vu[F½ªtU4“±ÃÏðØá¸…[Ž£ÈÙõçÐþÓð/½œJãà êbÉx\·ð£5ĆÚ#µƒee¹ëµu)Áã^¯„¤ ”Äf½Ïjç´ÉD{dG}Ò»œPôÜ™¤ÎB©|ÚŸw-(è}’ô^H4PΚ1r÷u½¼«†DlªxÅ'S2Bì…ûð„¬è±^&aÁF_4£òFð´Ô(à’ìîeº+›g‰|.ªñ]Çãt“!’x]u÷_õQ\í¬G#¨Áá»4úIpà®Qb»jg€w2ÿ-NŠ h6-þ–ÞÌêFŽúû£šWààMr9Êß õö÷F®ûà®Éy ¥GÈŠ<ð7ãGe ÙÌcD3:k ±‘+k’RŒ`MDÒù$Ñ/ª|È·¬%²¼`ź° :Y´]XÍ<*AGÝ%˜ðÁ0ƒ,ä 8œ?ïµß첚Kúp²b<š¸5+àÅõnD• íTÊ2Í RdUþBî’gèzXZ9þf£ €²_õ ÷¬ ž× .9k!^÷²ÎJÐùjÕ-hœÚCtè ’8¢u(aV,¨š Yº­ÆäÓòúÉ«¢a›¢îÕ“†IŸ…;Äù—~,ÜGÝðÞg%S4%ª|ƒ¯/ yJq¤Ò‡S‡µ’ r2Ú”-;ss(d†Ë^\µ®€7¯ 1m²†ª['GOž¬ÐЩFuÉû|Ápgï†Ë›ÕC!àĪÈe%èK»†ó¿l T¸Q·b×D—Îv^\Uýgô؃¾Š¨Ñ•u­HíŠF&Kðç&µAm,¬cÇó›ß 5ÞŒª"’Óœ«Ô°ªS<¶¾ÊîÂnCã=w²dÚ‹Æ ·¼­ð] i[kÊ‚}UK¤yס ^eNaÄvÀ=æž Øð² Ó½¸¢¥7”]Th_¢³+Aã Rx&nAj¦óL¬I|:™ì¦%8™œyú¶%÷vˆI°>£C®[bÏq%Úo#ÙÀÕŒZY%Sª§…†–È­LŠx ñló€A½29W$:zøq9ãóH¿€K•øèÕbrn!,/©JŒxNâ ^c¦@ùL³H€†Ñ¨‘uëº;Ójå‰ 8oáhÃ^Á2¡E¯*Š>Ô»å. ¨y™d5ºNl(#æ]E¿ûˆsJè€H+*=VŒ ÈJÐð‹Ûí=Pž×úí¯Ý÷Ò~9‡ážûž-XÐ ð¯GåùN(„8ª‰>U] ³ñ2dßõ=wT.Ö º3´+ xœ÷R@u•ãÍIIyÓIÿß!ïÑù¾„¶-Zö¿_PÀØ£µhëEµÖ>Gnb¾^cö”'À§Ù>k Â3eŸ™Q«S5Ÿ²¨ï"ô‚ÞL.ãCtÎú€Ö‰'óY4^Öו4óñø}™€È’¬ê}Ь•ÞŽJ9ÍpyßrXL}Ã+~»|›œWÂÂÒÉۯׂ~ÈHõÆÊÂ[¿²a>þ#o(±sŒ’ãy}Ž”9;ŠüN콘P8ŠeTöÎÇ6¡÷zR:•iœöó%œX àí–‘¶LìžÞdΖhÏ"÷Ö•‘ÈÚB[HIØyEä²IŒ‡ÜiNnIb¨&NWNMë-8&¡‚“ú+ül È6³ÕW™_o,±§Ëªl™··L(“ pY½bè/ë©Ý±pIxܱé=Ì®ŠÆQÕ’Q‡j3_› ¯|6°)¯´~%üŽ;ñÔh#w÷Àªˆ7 òh5ß÷­ÐŸ=ÙƒåØ‚õ[ç¬|Èü좈%„\Žpst¥š4ì[NÅÉ È´‹˜"§¤óÂ[KN/ ¸u—ÊÔš˜õ¨t"j¯è›–@BC­x”J®@ÝÖýTÃ^”b!bÑ­‰lÜ×~žF£³‡ûÇ£MR5¡´ÆK°3…6‡pþ"F¾Dò«ç¬}Â'OštåCzO`>ü6ÈÃŽÞ©I.†ÀÇ» ÛþýÉÙO”‚—†Bêì!E%‰çÏUJn•þ9Î¥Í:ŠÎ ^¾¢vN=nÊW°Ðï‰ZRÃiySÎl,'øX]Õb-ÐS›Ž9\=NÙîÒE*ƒâÊηM4G¤¯/8Ó9$r7ûo°™/Ñ’”t…À…š1u»…ó|3ãÑ{«Ï~ü’*["ºiî`gJøØUƒ”HšÖy–A$Ýö=)¥,Òˆé2* k»‚˜¬^©Gnçò³ÖÔI3}ò+Ž–'ÊŠN¢ê›SéÒa©µ@úy›~Ó‚-6]jÙ¾&=¦‡S*Õ…­„ë.ü`¢¬Ã&¢ø˜å—7ÒªÕ3¾JKLâÿ12sv7ÇW!ßœä“"ªUÓ†@–U°€n†æ*F¥Í¤&¯(u4U§ICci|øJÑãÍË>ÿÒ6©ÄÖ”˜fÁ Çò$Á bôü6;¢šddÓ~ÔÕó—)"6›B’%l#_ÍþP€o³ÁQY…¥Ž£AFt-IŽ€lìYfÌÃë9T+L¸ÚÕû´bµziªdLÙs¶Ÿiª½<½c*˜^q•ç-ÛHÙ®M¹e¢Ÿµ/¬­ŒäaØ••WÖ²ø}:¯}.MÙ¿ Þî˜./ÙU`–&¿ÙmUÝ7Û\ðpÛlbf¥g™¬³Ï¿+ÒOÓÕÚˆj2Vpd݇·žè¦‘³¾'µ1.,2ö]Í„³R¡£…¦W_6áü2¯FTvF‡¬Œ¤z¹!ˆÕÊ ƒsÖv.3;Z’’æ“À¼‡é*•Ìùìl˜¨;fcרΖ:¯æÂ¥KNy­t˜5óÚxDÎxÛBÓÍìs§l—˜È~fž÷UŸúm—V¹Ä¿Ù~Ä Â/9R\Ýtk‹éæOê˜`ñ»„Ðm² ø]׈™*SÆV²‰îkhA6_YÉ’hå¤y"(‹ïÚ:à îk+ƒ·èý0—ß§zó¹ÈE?t b…6t-uápÄEzµÔR½JªÊ¦å*Ûy]:þjƒ9ïxúK*QOÈ 0I‘^vÒRÒ89øM,ovoh‰ùD‚ÿLc³Á„¯›µÉ6jOÁ·:*ãÇ¿mÑÎÒyÛˆqñðZ*žØtÎÑê™Xîýb¼jY ™*À©ôŽiXär‡~MP„,kÑË“3ÛacrÔ[ÁüFF¾ä‰ýZòŒo7ýŸ)ÔñÅR‘'£òWÕ¥ÇwKzç èy­ÈIwQ§^½‰Ò?¥Ržw+T2OR~|ÃÕXtžèq¹’¸ÅÏHro§ 7p¨“Ê\.V­}úã Ê—o Â%:šQO °\™][ì;v§{ ²) »¯v€{Úúܘë‚ïÃï L ,m!\¸æ¯OÌ)½+á5Ø¢l—ȗWõò¶\ruuiª¶üõ?,pmCÜ{R¡µ×'7ºñe ¦”6w¥¸Ð³æ]Kp²:Çåù¯ )Úî.Y‹ï£MÆßr¯úPiÕfb0Ö‡Õ¤ñ¯H‚5Mø×4à(øº-÷N¿*‹*Oºý«%ÊÉÐÑhJß2ù{#SqvòGøï¿¯å¡Hendstream endobj 368 0 obj 3716 endobj 397 0 obj <> stream xœÕ[Ks·®Ê‘¿bs›Myǃ7pÈAV|H"»™I*%û°âCd$‘´EÑ‘Sùïi¼˜ž%U•TJ gg€F£¿¯èùq3l3ùéÿ³÷'áÏ Û¼=ùñ„¥?¦ôãæ«Ó“/_ ½q£Ó\ËÍéå KÏK¥F¦7FðÑÂïO^ ßmwj´Ž15|¬—?mŨ”å|xØîبµv¸Ør>ÊɸáŸÛ—žà«/pwt0‡äÒ].äh¸¾Ù2ø]1ìã£zRà )˾^¾ÛN°(˜–ýpúX%c&G!5÷«Ü ¡FXðŽ«¤4›Óó¸@‹–ZŸ`UN8Í`¦iÖ0%‡Ûp©Å$†»z÷Cyô$uÚÙtËçæ–aÜvsúâäô7¯@bfG>Áˆ[ s ¦AyA .oüˆ‚M2-B4ãÈQÃ^Ñ_mwräÆÙõWL‰ Ò“6I[Ö9;—Ÿ s›I1˜›……9Ð@yð·A/LÀ¿óqgùð—ínµsZ¨áåÖÚÑr¥†¿ú»fš,<ûõv'FîÜþ;ºýŒ6¹q‚]~U%ŒÂ*7Y,÷]š,¬¿y]¶›Á}½ëgbœ¬þåui'ºDÖ%êkçÉÐÀ>••ŒGL†åÍ †—±H“ Û±“n|qW~·å`eÆù=MÌå¬\…Å1!¥®6„,ìÞO Ó*ýlJÆ~¯&J™‰Gp0ñhq϶Ó\-Y\Ô‡öšÉ€4,I9)ÑÞDuIëÜWu!úà5£P:¿ÕÚßm½yV@RÕY«%£É›”Zîî Ðe³Ò@GÒÍ0‘ج˜ax à®ç €5û%ãI;ÁZ¼ö”‡BÐDžégdýíÃi°óruøùÙï@@‰uzÓ®Ô£± ?€,]†Q™õcQüÀ\åÄ`]Þr¸’ E¦”Û†bƒ~¥L0K£& ÜðÞ«Íq¥Å‚´È‚îfÔí =Hk& ~$Ž`·q¶x×FÅ%†úUì¢zšrâè”8÷ZPÎÄ)xì’v3€ô¨ˆoÓ!K½Ç#—½žÉžÝWS¾÷& 6|áYdö!yõÅÜw@‰£dÙ!†n „+D/ªoF&þ¡øîÙ“¢bÑ¿„D½Þz§)¥é`ÕˆWÐ ™Íž*«í¡Ü¼ÆÜ6 ÜR»aRŒd:­þåŠÜpD;È@/0C”Þ4ÈNo‘R#¿°‘Àü6Hþ¼Õ€at7ÁNï"ïT¡òNÕ«ë Ž×$²~5Ãû—aëXgÂY5t‚Ë´Þ0­nd.Wq€¼ÇØ(„n´ý©þŽÌñvÆ Œ©žó94Xn܃4ë‰Ç­8«Hоì‡ẗ́ݱ´B*k@àÑE'áµ7õò ¿$ð¨?ùY}ÀÕœÈæŠ‚ï"ùe£ü)F?Lpä®h2ß7oåøÊ+xâ‡uX®8¶7i.a»E²Ð°$a·8>£.ëh“zul% %Â13ÂŽ üä;N JåÃ> N¡£4¶‹¼c¼¤ÒžöñøÜ¾lÆ„Q˜B>e.0dä…ýÞm HÈpz-p>>ߥq´àÂ[~Ï>fM˜fYùwdOdò^›þêHL41™§¿¡´¡:¼SÂy+[¦·”G§p^[ H—é1A‰ZõBÑEÀ©€‰&ËþH­{Ðè^ʹ…9¯‘caPœAÇù‰ù&gð"Ñ{’`V‰m5¤(+‹QBÒw»×ŠÏ< ­ë¾®å§ÆÃÆm=C}Æàˆüûþ¨Iæpç’ŠNÐeN“ GÞ6Þ$ø„š¦Ð#a ‰-Á ŸrˆSq)ä@ãm¹™êv Tè©ï÷EÀbŒM­Å9Wä(S,%8à¥Eæì1¥5(T[¬€dÍÓe_„ùª¨¼uŠGgªêÑϹå2˜Fª9Í¡8+òøz]ãséùœÚ^|½¡(±«ŒÂ´†"ï2Ë›T4£p…þÖBž,•Ï£'SË„—«v3ïÑÓ\-} ©“…Õ§ ^¿-áý=}ü€\TXz¢©£ 6‹ ¡ùÿÆèÉ” MJ'Äy€h’ ¿õ`̺ƪs ¼M6úã컋Ԏڵà¥MïRH€¼ð!²ë+9odDA³=*ÐÃ/dÒq[Ó‹yE&¹ÿ˜ñÊÇÖÒ¸¥HçµÜŽ×0:»¼«6 »QÁí¼ná1ØÌŒ5{"8ã@E­¥ŒöwŠ1ØÂ¡O¡èRò ™ükÍù9zᄅƒÍÏ…È“äÉÓ5ÏÃÑž!©5õ¨Oìi¾j­¬w\~’¢ò5bz ±>ÎF#aÛX”¨ø¡ô}5C¸©UôUçz†ÃúÀÉF´~Wî˜a¾í£ ÉŸVBkÒçx²ÂÕЖ\Œ*¡“fô@©`©Ç´ÍÏ‚ƒ¶T3°æ Ö=뇵 5qœšRæ8˺PŸÎ)ÇÏ‹]ó\½}´IÀò‚è#ͼ¯‚׊Rsä†ôP—T¯::Ilÿß â í#“_ÙrT!“u®Ïb/öH*ŸÆ¤‡¥9h~£“ÍåZÎQü‡~¿«ì´– 'qMkÈb†xìI1Ã:›¦ZDÐ[à=•”ÕcÄük>›Ö¾òÉ“´q“”ÏCÏâ!ap{”´…±æèšÁw^kËÛó¸j‰OËÍgé±ÖUäƒ1#´–9ˆu¹ÅbÏ›ºä`ΟÏè0¥3T¤ûȬqáÔ9âÊJ¶ÈØzÛÓÒ»-Dü«Yý⳦õ3™’˜‘^ꦮýõŒIŒœù”À‹ªñ.~CÍE¿Ôgg9‹5ì2K;Ü/)OAú”q›­ã«­ôý&.–ò}ÉPá<þrkÀZ¸qØ#¢LmX>yq‡jGà{îž¼×S)â(ðó³ùüs>èƒéiç]*ñëY9Uk"»Aû¢m’Ñ©&4oÀefœž”<á6Õ—õ=2§ UíRRȺ €{Z¥åiNzžS¡àºéû1fnS^˜§øÖÛòª\w=Ò„_uâTfP£ì|8íp+ˆè„e?c)žðýPˆ ‹Ú‹»Ã­tö]ÛfÈࡲ=ò04M̃rfKí/ÊÚ›ýµ ¥â¥o°O\rKëš5VvE»×w³uÁÉ5¦ÇY0):#¡hüÓ®ÖÃRn?ì÷Û2s9N¢àÕoœïí@èÙÌ,»%.¶QµñSçl«|ªwŒ7‘’Á|sß5òe'î–8£=̾™-²kA£[§÷X†Òm@ÃácÎC}a¾8‚;mS[š@]åR½=öþ¸ ݽR(ª½Að=—§ú?nA“R—2£Yž>ñ ¯k#ÂmítØÇ¸Î- À‡žS ä L>¥ç¡>©•L=jrŠtyå4$®àO¥ÿr]v«µ¥g±Vs¨>éºÚÃó"‡SÔtnäx:òäw¾kðøàV X\ûGÿaBf4)æKës4Ù‹¨3_éŒTîgx(q}(KV)2Ë٘틦dtÖð D™B1ÌrÏÃiæè ­ïX[«ÝúÇ& Æ~ŠÎXJ…Ó÷²–…nhIûÙK5~êÛžiЬqÈC)âÒ¤·èQr‰‚ê'– UºˆHOLœÈÈ¥EÒ%c´ÞjZ‘X‰L_úXMvI°–ÏPí̈¤‰Æã3ʲÛÖåùW)Yýhæ ­Kö^R²’SѰ¦Í•®?ö;‡àÜ—Š6±±EÆJÁå¼[S |vŠ$ @h7ˆ>û¯ ÐB¨ì‡LûS×,ÔnkД°øEž U*:ܧ:gö^ofd_ô6´ýcYôê¥:ÅR„(§¬5B¢› ö('ÉŽ á i,#§ÖsÚªû!´,ãÆ© Ròu$^}òPOöbKCÛñÔÞ,';J»ÙY¡‹nЇɬ!ůOOþ ÿþÁlendstream endobj 398 0 obj 3351 endobj 428 0 obj <> stream xœå\YsÜ6~ׯÐ[f¶<4‚ á·íìQÞ$k+›­².«¬c"bký6@€h€‡3#iSÉVS@£Ñw÷ ñË~YˆýÒþçÿt¹çþ¹/ö?îý²'ü?JÿÇý/öž¿­ô¾)Œ–Zíœî ?_Õu!ô~SÉ¢¥?\îý8{7_ÔEk„¨gwqx3¯Šºn¥œý:_ˆBk]µ³“¹”…*3û<_H%i†œ‰¸¨ ¯…¡=š™û*+U4ÒÌþ1ôwÝT³Ãnª.ëÙÄå0/æ%ж?üN)*~ÊEUÕ ·B5¦Ù?8¦¾œ«¢–ÊèÙµÔSÍ.ç UYëdxص2U^¶‚Ã'Ô˶´´t€¿° ¥.+„KUTº$Rû¹Ï,Áª¢­š°I-´?¯CèØNÐEÓ âˆ(L%Jå«$áQ›Ý:Þ¥fúõ_E¬Lpxî Ue‰W²-Ë~òªŸ<;ï‰îr_W„pMˆn¯Ú¶™-ý)Œá3¶²c÷«®ç¢-$ýõÓ|Q a¡…]äd…(vÓZÔ‰`J]j·k€Ïþ~wOp>—uQjc[“.TĶˆð~^«¢ª…`aŠF«ÙÁÜjŽ$DÎãÄ(”=Qèxgìx½[{¾†6Ð^…ìÔ6N-ýù‰Í‘R'sQ’`UŠÇÔ9‰§·;Ñ¡¥©g§nnmÊÖ/sC†à¥Ýµrg]"µ#¶Zá‘Ê~²rÕ1•TÃZ‹°ˆ‰Mg8¤Ô–ÃRb¥àL¹bcáU¡e» ¬MÎå•Ü¢¿¨¤!›°¿d™t)»cGmdûÝ-$µŠ{‡«\;Üð>œhö>Be.øáôkéd£áO³~Û»`‡QúÏ£‘à‚B|,éŒr=³˜6ãv&S¬Ç?Í#™£ÇV“4ÆZ̓7{ú‘Y·¥IÓJoáíÆŒ°‘ZÈ\ɦP̧ˆt6ögsôÊÔÑ)‰æšÑ~¸ÁúŽhnrÛyäY’´kiŽaÅUÁLÖŠ¯z9§2—jíTEÔ”Î9W® ¶ˆ ×Ñs…ƒrCÚíPKþõ3Té` …ô`›º’¸êtN–ºd=N#ÞEg³ˆLª÷oóEEÜ®êÚ{Ñ`Ÿ1Èü­s/]0Ô£ùb&ç´3¥‚TÛ¤·ªØWe wËÇO!Ü‹Åy¤Ñ ؇ÒÛSVBº…¢Ã¶ID9¥·Óœ %ÒÑÙК¢ GVܰ a´åñÌuò8¸À„VÑ ãÍbxtÎó8Uݪ@'޲Æ»3¨€CÜeà ly70¯K<Y¼o¬­¶¦¾,•™þºa¢r~d…¡´“æ3-a”)ª¦w€j*šCc–§ˆ¢ÂMd®09J"t.Ýr~Ü÷»B§CnTS¦öøÁåZäJŒÅÆÈ0w”öÝÎp;¡ C0ˆG±@6E¿Yê;ÒPöÒ;Ì4{‰r„=Ú+fŽ5žvx‚>‡jqãX%Ó °‡5 o¢L:}(÷˜Ð¤&&Hu¢nÎ7<úMDXç!†þ}®ÃÜ´¤n3¸ErÑqƒ$+îEÙùʪÕÚÇä-…z÷1e‰Ë7t룪xÛgâq– £¿d–i]á ´‹x® Ñ¥¦a‚¾B¸Ÿe£œ7YjbM-‰ #°»Œ®*’j6ò_ò5¦Pª\C¿]ÐìDŒ~_oE¿x¦ÝƒfUSm–Ö0mgzëý0ŽÄ\kâeMU˜Xt };biC’Pa+{YËÒEÿ÷7Á´J mÇø>“4&´‡bÐG08(0í‚2-w6-ä›ÔEÚ¿6t¢³í­ÅBÇ:_ÓWÊ^16â\•}]¼&j¦(Y* û]8Ñò<+Ê 3×§()†JLKèº)„ †ß˜ÄcÞźÊYî:•ó©'õuJ`oØ»Z¹¨Eˆ¸“p)L dbª‚…£ËÞuêI™ ÆÒ1Yù˜ß” N&7ü±2›]—[ïÃȶl×D´ž7]l(­ÂòˆÉq´´ƒt®±ébšÎñ¸²­f®c¹ çW‡©49!‘#sk™rÎò¤Û>'÷| 3™±À’ƒ ËçlWîhë¡ií½‰¬[›1§îdpŒûQ„%œAjÀS9¯]À—(ko5§·vƒ!0(Þe¥QF‘³šp­ €šH_hk¸`‚ƒ)3¢Qɬ`É­´}d¥æ< ay‡Iã¹Õ0@”Û9gCl’0‡c¡å.5!lëD91,WÐÈ"»u˜(kêlûÚ‹•›ÚL««H0w™LðnyȇÂRÇ$Ï•+8µÌ$KMj þ'š6å|Ð7Xe3Ö#S(»/²ßÛ(€Ûoé -uÜ$0¡(þƒ Öd]ªð[¢hùÔºPü‡D>3*lü«ë€Z«Àbøs ) Ÿ}Õ/sµa?¼ÃUžÄáM>wCeÊwñëE7«ò† Ÿâð$ XÝ4ä¸goãG¶j‡‡ðë9\vÕ!ñRw•—… ÞT¡¦ùvcæô4| Iôëán“ Ü¥áë9\Æ€mGÚˆBÈš=_oþ—´·dLéþ:ëjséƒ<’ÍæúÕ‚‰ïªÅÂf…šÃÇd½I(sˆÈêâV?á2†qc ÝM-[@ÌM8t_nÈ„C«Ž-V@šÞ ½„RÁã"qÈ–ÝåçÉÕð:Ûi¤­\ Bx™Áv{Ïv‘dÀ‡ÇF²¦°‹¢dwu`y×±_L8Ѷñ›Y€ïcÀº^vëw¥ë¯àß™äÞ|½c þ×-¬È Ä)Á›)4aHù/ˆÂ °„;œ#BpýD: YÄ+z_¬çO¦¥ŽÝ\ •E»öÐZ­MÒÜ©¬ Nûçõê2Äz£\çÇõPÓ=D_1ëâZΆ—q.‹¼Y0ú<¿:—;ÂAÆÑdí»²u^íB›² gR–̜ÙŸ"¨4˜ JòT3¦Þ[[¡umŠŠß×OAßw”›ÿ×Oì÷O& ëMj`;†¯Ç<ðÌE<‹ÞA8¥Á^C£c@¶ì{xb¸l$õ­PÙá$ùÅ#†_!{+ ù‹ ·c›¥ŠÌf È1$È)¤.ãÏEB1‚ãÐþîöìéÊ>Œ¸™€±9sãÑF\©ľß>…qx³1P&<.ž¬JÂ<泸ì5\6¨—í¢ͼ¬$ÜÅáF ?̆%qÊÛ!vóëПˆ÷‡y÷C“ûP«ÆþßB~^A]ÇyKšÆ‡á}„ðN8EÈóHcËã{ À£|\WÅÆë"y’@ÃÉ [TÊõ<%QÎÃåyóWµÉ] Ç“\Œh.¹MU3ÅÛD\CÅçâÚ Ð£DÀ(çüí¤Q´öþÆ£Ti&Bõ‘HæJö¦n'@`á .v1^±àãq8ýaÎÂÏÕ+á²òv‚} ÌØ‘y?>þŽ™‡Uçn†Ë¸·ðÇó>ø×¶-xŽÜÇ6<ŸÇ<x`‚³”³]ØôPÕüêÿ—M8=Jxó{¨býå˱3È&¶Ùñ¦DnêªÅ—X"¿‡.‚iÈ¢÷ȯgýfìçíµâ›õ”Gl‹ìî+«_³tc !lAö+Höu'`W‚ócØ,áÐóÐÞèOy†ø'å‹dX×ö"Û£šÃÛ>;jíÄ嬭ŗ§¶½Ÿåá F`#—Ø+æ‹°Ðà߯!ïvˆ)X¡ÿÔÍKZðƾ;¯QTuWŽ‹½]˜EÚŠŽ ·'ü%$&VF,óø§àpîý8“²7mì/„IGèŸi~]ËB3PÞÆš©ñã÷Æ¿]þ9ÞªgÏL /½—¡ÛÆm0¼;<ògðÝÝñ&w[*âwÁÙÅeø¨;aè+‘†5ùtO¿TJïø²Ûùa8Õöo¥‡¾{-Ù¥wÔBIíðUø&Ë"¯ZŒ—–G¶µ¯ä²¾I—ÕáÚ(&­i ˆc²R#`ÃÖÙ¼ïÇšê8{ÏD=i[ƒÃóB¤ƒP·isëZM¤õ]AÜq_Tj˜ºÖ-<Ý¥›5(|âbº‡„iLFì°ïù +wŸJ™ Ax7·G§œDþàù»,Ân®#C±g²æ–ŽÍ†‹çõ`®}“í²ãN+4–ßNu=ÒÇ@²wºF®´è[hÄÒ³¿õJÖSjº,YI´$ÌŸpgkÄ*wnn=£y”hȦh›±†*Üp—ù ÿ¦~\£kì æu—¹òÇâlÇRßç7Òá‰MÒ°µ&˜‹w9ê”jT‰jÁþ®3¯¼½æuwG}ŒŽ‡ÿ>¨¹€®@ñ.ýÖá¶1Ö:úÈ@Ð,ö’³æ8d»JT¯{Kóþ­ÝYÆúÉžâi+zN0ã¥×œÁΡó>¼z1®œ^œñ#$yï~¤ºÆÊ¤ã?o]û@abRlŸ³ùÃg~×ã(N©¸v…fÒ-% Ž,ùÌ\‡zasÑÄ6'³ZJ(»b‹‘XŬÉÑ?"lo=íÔÔÎ j7hÔÃÀ¸Ü¬iÆêŠ=ÿ éÛ:4øzoúÆø(é—¥&ÂkÞ‰‹S…µ/D9hWêÈê(ë›dÊ0`jLˆòÇ{&=Nô5Ì]2ªæÏ²‡€Ø;80ç9SJnd“tDãD޽ÈÃYˆÐYPã3ùÐÐ&ØÞ"> stream xœ½YKs5®âè_±7f(Fèý8p¡Šw ޽Æ.¯;Šâwðwé֌ԭY­mRÊ!²¦GÓ¯¿îÖ¾ØH¡6ÿ-ÿŸ>?ÊnÔæ×£GjùC.7}ðñ›$’×ÞnŽÏÔ"oÊo‚Ñ"ƒçGO†ÇãäDLJ¹á-_ŽF8µ^“Þ{‡í¨µ°2¤á÷qÒVƒ„½$`W$øFì¡]m¬: Ÿ žû`†“YÔK7\uu9¡å³Q‚QðYõóñ§`¥Re…±^£•“1N€Á“v´ ›ã30ðKxG&¯œ4Ã5¬M ÊÙáí ½.A—äSvôø*/½—nÀÉÀ Ë7 ÷¬àI Ÿÿìèø½'Ã4NVhŸ?…ZÇ”Ìð>zˈh{Þ•|Y7/«¥‹WòóÛÆ~z¨”6“г©_¡!FI[R®wR h½v œ<;s¸ /m—Û”íw.YË5Ýΰ0°<—Nyþ­wP¢.¢ˆ 3<Õ‹—çY×9¨FU¿ X9¡0X°¶£ÊÑÊh\̺¤£niID¯MÕm€æ¼È¾£x½8Șl7p$øªÂ×£Êm˜ªà‡¨•RÆ+ÈÁâ«oÇI a1nøfŒQD@ÎðÛýxœŒÐɆ8ü€ÛAÊèWpLF© üé]†$Ê$Ô)û4X¾»#Ù pñ ÿ7,™ŸÖXMÑ,é¥Å‘ð˜!8;2H§ZGjˆ_Þ%¹ÇRß’g7:°î;¶»¸Ñ8ÇÝÈOkQ3sMÈ!sÂ#ÇL^ mÒ’è HP„S£JÆøá|æt]Âîõ,k€øvËkÆ‚/ÐÙ@=¡Gq6ˆààc“5kŒ¿5ð^€d>É\ƒžÃžqö¶+þ¶à¥üÕŸ , -òqæ-o½‡$\µ”Ë\9wT9Y¹­E”ªíMÁêümUSXÁGÊbÅLðV§œT Ñž³RZŠ*õœíˆAÒ\üõ'º&¤”lÉ ¼iè°J€{®ÍJ1×þ5#z­;OmËÚþ±ëˆ-Çz8ë ‘Õ/]ÏR„‰m)=v½ Õ*»?×£ú×âÆÉ¦y‘½ù¨òÒ¶òá´®²žÊXë wµj1¹ý^ —Ýë¥ÎXzÄê!kWÎG(ŸQ+Û ©†½Óœó6²Z¿%RÚ«­f,Txà\ƒKöœQÛ½ìi⧪`Ò¡ÒvÑë’^d'Þ{1Å…²®ºd.ëØXKw°åsV€éÐui î|ÅÈŒhšÀ,dh-Ïõ½´¿ë8—Dðh cI!‚à/bØâZªûûR&ðŒWŠ’t;ò3mî3õ® ³¢•—uL¾h;QÏìˆSúÆÅ2“yËeOò¨gÂÒ|ù¦9×¥0;/ÏIÞñÃQ<ü”Žÿ£.sG>{}RÀŒµÌ4Ÿèt×,²ýN”%ÏU±7mÀ ok¬1¬(DÓÇV›DMíe<œ=C(eà9[ô]ÏzY¼ÆQÞì•%r-Õ•öçGj²Ey_ Ç´{±ÏÞ>À‡9UHé’«ÿ3Ñ{Î JǪ~lRµ$% ¿ðDÄ hºû)sEÙÎî3m(žÛ.Yªûs]Ðú€9gõ&fÎÊÙÁ9-pV¹‚ r>Â\’tH<ëØPÌzŠUùË 9¾[ùqtk›Ø®jFm ±¦­ê3¹¯zPÔ¯L®Ø=¶fƒ\ÑZÊ[¾ÔŽØ}|¹#Rp~EjsÆ”éxE_,g%(ö&"äÇs(œo6\ퟜO{)ó¬+Ê(Óº ýœ›»/,7ç”æ×«ˆ•Þ’Ç(ÝT¹¾.Ï–K®ed=ãõIËö9?ÕÁžcíxÐc Ý™ï®i¹£åÍxר§¡mfÓËýÓÞLGÉ2ç2{ÉϬó§^¬­¼Â+‰ YUxÌb옘,ãÆQ{ðÉËm#›h´Ë˜ì¬9¤ˆuLØ}'Ç*e$žóú¡Žìï·÷ŽÚDຟ²Œ/÷p¹[ûi¨‰Î.õvµþmÌM•ï({í›Í×uÅ$Ýÿ4™2Aá2e nrÛuø]YÜ^Öì:’ Ǭ'ª>ãÍtó;F L¶ÏDï»7ÇŒõï›ÚP õNé~×ÓÕnÐѾŸWÚ»Ë ’„bÝM­”o¦<¤(l[ÇùµŸ—ÌоÙ° 0o÷{ŽÝ_t.ÒªäÁØø}Iww™l¢Š³kÌ(ÉÍH§o}?½1 Êzù²ôýb€ÿ`¬q^X)íIð9L>¼èMÒ” ¼ÞÖëßÜñ-—Âguyߥ°IÉ¿Kaö«Ö–nw§å--™À-é.¹{/Û›`‡SbìÿÆÚêXÉ:TXЦõT2±—@w]ù²Ö¸­îe¶EŒm»ýÅ–%}af¦ûêeË `O[F†ìÒÿÂÐprwÿ¡¼®×€üÌóë«££‡? *>Ã2—®Eñ徆ÿ؇mendstream endobj 488 0 obj 2091 endobj 526 0 obj <> stream xœÍ\YoÇœ7þ Â/Ù5´“é»ÛF^âH`;‰MlÃXqyYISKòßSÕÓGuO-—¤$Ѓš3}ÔùÕÑCþv8âpÄéÿã—ñÇCqøâà·‘~ÓËÃ?üá;eì´úðèô@¤ùÚ˜AØC§äàáÅ˃ß/WfðA³¸«ÃÛ¥ŒñR.^/Wb°Ö*¿8YJ9èÑ…ÅÛåJj 3äBÔE<œáz×S©ôàdX|³ðÞ:µXOSíhW,-ë:¼\ŽÀ+~>ú p)ġЃÒV"—+¥Ì ¯¤€Jwx´™”À´¶vñ¸ *X'ƒòN½¸ŽC«Fµ¸©O_•©@i°Á§GÞÙélé1œé¾>8úäGT”™%/|j±]®ô -œ“Þ+xx…»Ëàåbƒ#%FXStw¥©G JŒ<ýX¶Zõ#aT¤ÔØÑº$Æxüm™ùziáF#€9 š2ñQ`Bïßê~X®ÆÁ£‡§ß-½¼4fñòôËå ˆ ÿ“<þvÃ0 Ÿ©F 'bM=O÷MÕ9Öq~”¥•lBNЩ‰ 45BØ÷eÕßʈ¼þ|©¤„Å/õü¯ÊÌ?WJ¿®‹ÈzäUŠaôî1¼ž×³®—»xCDXW¡i¬²-¬z1 ¢I<ç4M q]eó¢NT˜ u¤v0õ_8Õ… ˰շH iC„÷yz4 ÂŽ"‰ÏƒT=ë 2÷iòý7вBRùþ•ˆŠšéQ]Ø<ŸÐ)û‚Ì­gDq=\é0h h|±”^.XÐZ‚BÇeµ+”Ö¶B®-*ÛšôÚ“0.¾¯ÈWhò0 ð= À@¨ ¢m}; 0AÁVp¼U2È|”R Ícà埖§'-=p2rì¨nwŽ{ˆq4i»8d‰t ‰Ñä-N–ä-œG°Í;ð´]M§iénãPË’©Ä ÿtÆMÝãvÚY;pq†$xµ#ÀwÀÞÑáò’—`·pÁzУ¼°NNïãj Jz:•tÑ%Zè@ 0ƒ¼ŽoÀÆ›%ø?æDG%NÁƒöÁË¥³<’NÀ³œhòóäÎ53^‚¥A”vzb:RHÈšhQÀ`¡*ëȃGœ‰JÒ“ø†¥AX3°e\æÁ6 xcA®aï§E‘}CÈ 0z +Ý4“³%‘ÎæÖÅ–^×Xâé••çu³*7Iþ¶}§ZH‘0 G^” *Ù"¤Œ:˜09ÉŒ¬[403¥”î80øÓ ÌF`B§P†X判ÁoPlb|‘9­ÀŠm‰-7Õ¯n«_'û—Ò$ûBe à"´«­EŽkJ/“±[ˆÏ“¬ =•p]u¼éís—Uz˜Fò¨b—*6÷™#ÏH°ë£B)ñÕÎU~ZN ˆà0e©—èAPW‡+å&ŽÇÔ|Ši7ÐgTJ•c\ELЄîH8¿©ïç æ}¥eŒ<èôîsHÀNγI*Þ«ÝÀ†à¯Ã Ø¢TÏ*ù3mE¯m]‘ÍûdÊT±Õ¡â*~ÿV7'ºG.O á­wN†jé„ü4ô`NXòäI/Ñ•mÎ’žèUÈšr1·{òmªÊçtåÐÞÅ¢)2w:‹Og†Ž˜Ri.ÁèɱˆØ^ò½Ï@‘<Òû’Mîö¾4¡õ¾¨Ï0GRçª m;u+ò¾ÊÓ¹Øè1†²HÒŒ;â“'ƒ‡»PKVŽ„-­l‘&Â[6šÎ\%›Íé¦<¼c×ç@¨Ýn“Ï-Þ˜*‚¸uŽáZP\)ÑÓ}Pÿœ?Ű¾—X>€ŸÖäƒìðljMƒJ“[OJjÝz§ç‘L7çß§œŠ6´ó6)@º×ºù1¿’FßYôžàXQsí|‚û˜ÔÃN¯¹ÜvÃYñ&Ò‹%„¦ÜÁzÓGqƒ}ä{òìäÙÄßï‹G]1Ú…R*´Ü…÷-tdº‰‰¾àø®¢:«W—ɳÞ¥$Ǿ¦”F7B@Û쀳çÜé„§yÝmp±S)„¦8·¸ëÁ =w¦Ù¥ãfnÔRîØ—O§­sï‚CCnDÄâŒIõª)ùsTÍ o»Êu[Mï®óä:„fY·ùÆG øa~]‘«í.à„j‹¤€#ÞÀGœ«ÎòŠã«04æ½W+¨"üJ6ÁÒ ÏRÀRï_ØWßÕZHô }˜J¸Ý‰D–Ô5W3¥¥ûÆèÌ‘›¦nb±ï¾éª÷šø”Wà#[›°æ â×èM|˜dísÊQÊ-åùiV8"*ÞTúSÑÜ”žç'Yá&Ýõ^Tb®êÓŠé“'}´ùãØLS#ìý Q;`g~Ë:è¬5EN%×ÔŠ{OÅ©#Ô†_-…6Œí“v;÷ŠÐ"å ¼=k°mvý,°í*™ü²I ò7êÉ–ÝÛä2šÎ$»Þ”÷Uñ™ô&PKÝÖдCÂi× õ¤^åC¢Ýu§)âø¤P€€Ö¤a:YX2<Êæ…LÆ7£éÓ&…Ã/*$ÒëâOM—cÂ(€“ÈY|b¼i.÷ËKÇ{%‚ÎM+¯rÓ ùùz‚µùð¦aŸ^Ä¡FdݲsÉfoëpËN¸ªCBÙPPu¸)CÎà‚ÈÝ@“LÄW1•°¾'• R´IÃÔ²´3OB} u¥$g› W•Y2|U‡çux]‡oúeQ0ϧ§ÂÅt;?=©Ãu¾¨Ãé4m•áäéÀºQ\#-¥vþÄ ×5\6xKÕÔ<¿+XD ¿váÏú“’Ùç̃or'¸o4Ó|U ôÛ²ÖKÏt6jNÜíÝjjyKÇ»BþÇËøõƒ2».1gŸRp°·çódÂY*ªMb13Â2ºÛŒÁ)JÚ,tä|#³MK&æ_ &› ¹ 0IxòÉIƒXX¾§q?ŠksŒ7äc¾µFîÒÎk`]k†Ë²{P¸ÉÕ=¡Á„rYA¾î!‰ÌÜuP@l±[#å bdÍòT¢¯¦F„HÞ_»ò#¥â$Ô¶·;öžS7Œ"b~sØU³¤?J;j¹ö#‹Në¢:ó²æï§œ(r¢æ,ßî`ý5[ªÊ ²Œj.N3¥¼yžUºÿªÑS”hR¦j¿l²¯œóíî5I@P$ÁéR÷¾¶Nü·1}Q¥ßá4aƒ¦†~ÓøDk¼m/mÞËþ/§ØüéR„ÁK*µˆ;ž9--!5Üg/Õ4ˆ½< ÏA­ñÔ{‘žƒRìÔ†+ù"™l?k×óm•ɳ¦£j9ã]Émਇ] EliåÊZ–6YuÑb¡÷¸h¼!²½æn.[”as¦œæHMÌ_)“Ø–­Ÿ7 :K“ݱ©€¸Ø#³|Ú@Lm{Ò$¸c¹\71·/«AíMô ¢î© »[-ídßgÖϘ˷ÞSäÑN8OÎ"'ü6ëÇ䎭µÙ"æª%}’ò ›R£ö÷–iêÉû kæõ1—ãÇà§>œÏ&Dm}½Fêø, I$Lî ÙPö^6”ר5ûº£«Ïç…h®•Q6Â1émïH$\×YÝoÖãŒ^@¼ºoçejrzLîèwN{ÒÍÏ­¦ü’¹|Ÿ8²›|5´óêªÜ¶Ð I“\^ÐL’ëô¼UYÚåÉ”HßlÆ}çÉä„aEJÙøô¤Î ÉÛÛìtáÓØýckŸ’f—Û#Ž.ó-ŠÕ]ŸŠéž?õ‚lºÀÒmÏ»¹¡KßÙp’½a]š‘ ÿ‘Á»*™{®*z7&ÌžÖk w™n;·Ô¾©¾ïÆšxlVˆ·{W=ÆkO¼Ïi”7a5÷lÜh&«øÞW§ÝØ—Õ;píá ¡»*ú÷KüÌÃ')7œÍ¶81¥zgɳOBe¯O Wl·XÂ’l.ŸÕ¶ïÛ"¾hzÈ&ð Û=µ£¦ßÈL¯ÙóKvHšÉWu¸m:òR šP±Ò~þš{\‡d³[†:Â˳¬£Oаðå Äçò7‘OÒ¹³e—­Ù¹3–ÈP¼ä@~Lnы윕ÿ«*ôö)š©žn-ò„cVm/ÙáN 2VtÊÒKv¸m–eÊCo$íÍÙ U 7ÈòeÍûºëû_ù]ô„GMc`uè’/Ñ7¬Æo@bË»Š§ì¹U"1„ª„üáƒb{óu>œåõ¿Ög¤!vruÏÓHgMÚ”2wÛ†»,R%ðV°7žž°Ã›™AàP´:œòCÌ3SÎ'Dg >ߟÐòÇ,ë­‹ŸPÎèù)9 NfƒxÎGbl |P9âõ{!чîǤ&ÿet€4ÅÿÌ%¦.Hûǯô¨†Ñ®¬œ~÷?j’üÙªú·ªpõ—G‡ÿû[ßendstream endobj 527 0 obj 4164 endobj 559 0 obj <> stream xœÕZÉnÉ|äWô±k0Î}oûbx-Þ4:ô°IQ–Ô¤$6͆áïðï:"+3#ª*›j`C³*·ˆ/–êO+)ÔJâ¿òÿÅdzüçJ­ÞŸ}:SåY®~:?ûíß_%‘¼övu~u¦ÊûÖ9¡ü*-"<øxözýjØ8“Rn} ñó`„sQëõý°QÂ{oâúrÐZXÒúaØh«á ½V4IÀ¨H°GXÛS£ÚXtZÿyPðܳÞޝzéÖûîY¶$~$\ ¶UoÎÿ·T*®"ŒÀéðšcœ€Ãá„ )¬ÎwpÃß /­pë_ð$ÚIkà~M¼$qKâ{Ø4)¡´_ßÑèõdZ}á º[ÜgÑ&ÊnY<Ö\Ù8Þ§µ)•uëh·ÝÑw$Þˆ AÇ×b¯îºÛø¡»,oI$Ú&¢”FK³:ÿÓÙù¯×?4ÅàC'ìJ ç%à2›ë­ÄŒðŽÄ]w… ‰H\\0Žt Pò‚¼@[è(ÕË€î+15_ìH+LqR‘ö2˜Z.ö+€ê$&ÇAÑ·¾xæ-¼ÆØb¡ùºLg7‹Ýf·8Ná|iR¬poH¸šC­š´ZŒa‘™ômÿ¶;Ÿ}?™4¥¯zÿz§‹®V>vmÀnÊ úðR¶EÓé9aèGÙÂ¥þØâ{!÷Úˆ ÏAF’ÄÌ£Eæóa–N6DŒ¬äcJhä³™l&Y´#æ!Nyܽ¾[ÄÐúVh/³eêc6é‚DŒâÉð9—ôôM?´ÕÇ3Yür’7ñ Ú £4ˆÙå 9qùˆ“’v~DVÎÐÖ¸ª‘A•U]’±ì•G·´ÚÄ€:­å£,cBðZ/BTü`å´ÊMĦ6‰X°ný#ÌWIŒ¨¢ÐRr .)ØL.U-pii`ì~ðYÐ__+´Ð—–Z²7¯èl‡Ñ£NCÒšÂ.Ïn1Ù©*ýÐ˹¦ ¦¬T|W®ØËÅm¶¥$x5ÖDÖÇlÖ¤ .|¾ÍI² ¦¨·¼¤ÇãAQ#è8Ö@î« xMǯ@ñž…ŠÖº+úÑü$}øÝRºõ¤Í¦PR˜à2#”Y9³)vØ(Èá½Ô£9F¢5Žä,d‚;Ò;ó+væÖÿ \Ø™»íDfÃ]Ñ·GÒ¯ÏÙûfB6ø¨3’Ž.1]Í}"»ÝT]t…©¯eƒÌœ¹èžyHì; [ë‚D6mt'¯ÒÔ´‘•¿m׫ €èloÿ±ªëñÑMe“Ä Ëpüaac½h¾«cõÝJQ=B\hW‹,2%Ür-ô(XÀ‡‚äÄ¡¯¹Ýµ³ÂëX RjÙfãKî§M|O.QK7õù%Ëzæ~p.)‚”Ñ+½˜0}O=œx”À4âU;zsFPìÔwÝÈÙ m,²³±YÌ aTÀ×¢{¥‚ÐÊaÝb} é.d%€Ò”*Elr,K¦d¥©5g9œ@©ÃDŸ_6€ÒÝ5Q[Ú²ë5îÚ6µpË–OüeÐPþ‡„ÅÉÄ€´£…q>á>8–<ëð ÜÖÊ–vÖÒÆë–÷€ø™Ä;/»/ØË†àܶzÈSR€]úfÛ´A"^f)šS)nÒta cž€§³Ø J#E%mqêÊ%•~iH8Þ·aÛew*)óyÐ2ƒ‹§æ/ÃÉì.Ý„©‡šMÖúTdFCóÂ…÷-µhû€hî¡O´‰î星ŸaߥŸÝ”¿iŸ€“ ¨ ±{b­“oD(CB,?ÈÈí’ËhC'€å Þ–9ƶ΋±µõâÆÚ²´^žê¬Ø—i«°¡¬­rz]“û¡×Vy ñv˜7f`ý~c¦W:y=~¤g­‡þ9ÑMJ_H[ uQ}fa÷Í·œÑ¨¦ùt?À v?–ìÈË»ß=:ï[Ý;vø#’ãP>ízlÉ¿-Ξx2ékBŠ:©PægšÝóšÒ³-¿òH¦Ñ·m¤¨²}äzA:Å®÷P7íþDHk ÎÖycßh ‰ô†‚T­œ¿.xe§ßRðVA阋íÀÛ¥šeÿ#µ«]æ^?´…¯itÆ—œ”æÜÚ'Ìþ'-v²BV`¼~OD&¡ôØAkÙʯØA[¶Ï !ŸÇOXzé¨èÒ¼óÕo—ÌzoÔš˜j9}âïÞ[C›so KyÞÔ5ËÏ'îtiÂjá⠵^–e'Ë¡R?µé¼Í6ýe¢Aï€ð¤(e/ûA¡›TÉ8?ûüû/Ú4¦Gendstream endobj 560 0 obj 2432 endobj 598 0 obj <> stream xœÍ™KoÜ6€÷Ðß K©È²|S,ÐCSE‹¤E“m"éÁqÖŽ{×Y?’ü½þ²¹’f$Í®vQ#(|𘢨y|œÒï )T!ÓOóûôj–ÿ,Tñnö~¦š?dó°x¼˜}óÜø"Šèµ·Åâl¦šùÖ9¡|Œ5<¸š½,_Ts'ꨔ+ïPÜTF8Wk]ÞWs%¼÷¦.—•ÖÂÊËÕ\[ 3t©ð%£"Â7BiwjcEб|V)xîƒ)O¶S½tåŠÕåÅËJ‚QðYõ×âg°R©BYa¬×Éʹ1N€ÁsíhŠÅ0ðWxGF¯œ4å5ȦÊÙò6ÙzW^€.ÑǺ\ããU½—nÀÑÀ í7뢆ùà‘ôÑäÊZªbñt¶øúe9OÖj'mz¯Us/­pô1?óÅ Š÷(.³h£ å'ýÅ(þŽâó­¨ xlWðÆ•Op±?;±1Óô탆²K×9"uhÄ06Y±g¯šQ#ƒ"ol™2Ñ”oI^„!"ÝÔ·ÝÔeCš9ÎK(¯»™àO+4ÄÙŒf¦Ç||_y¡‚t VW9â1« t‡òC5—"HYƒò¨Ñ-Z÷v«r-=¯2y+ÖFa‚ôM–èˆ/„ºvysmg²¼Í›PÌ;ðRD&¹:EñÅK–+¦Püŧ(>éDŽ ©#©Û ”C䢵I³ä§<å‚p“4s°y¢-_•è;×9TvÒ£ž¡öd°I@5leÔÜ;ªü?ßûN‹5Ñ”læZ‘õÉRj r~I6äɰÃþ$pÔ±¼JæGí|LÑ+Ô`Ú˜VƒWUöª‹²æ‘kcws¯‡H ™#ií™[áè9›Ös QŸ£øŠ¿à'~Ü›á"$y/uËçkšZï’øM|©°pÞÀbûÔÆýÔ·X fÂVØÅR3Ø~JíÃPÕØÂ*øæÌ­k¡˜^Ä`j—«GBÒF£N.¿¬b`…µRà g¾lñLîãñÔ6w5‡Ðy;„o˜o‡ðet,[$÷áŽ-Ž$¹ÔÂÎ66VGŸ•H±‰®c’×¶§ªc¤¹°c»A7Á›Î{3­µÙ±šÁ¯Rîò©yzXÊXS&)ƒé™–Fí…ÌDè~çdæ!© ŒÞBÖõ–7§ˆ;Üö+1ïJ6U€MgÁîsœ¹é’Áï(¤–¨ÚáYñg± z;±àüìG¬†¬^Óó`4)@7ííÃÔ.HÄ“çê3v—ž²Áy¸è…°Í/££ï˳µê&Ù&§ôZü*…S;ŽÈŸ+,­YGžL'«å'ŒÌ~¿:Æ¥{ hrä§¶™~Íæa½;ÌðS–Ã5ë™4|y([ΠͲu˶|+ºî¥”œWíßøsл—7ÊÓĽanev8°ÑüH|nYfF…6{‘-´tݻػÝ÷Ç¡®“­º‡¼1I™!nU'¦*'Jƒ¥›”,ÀžW Ðô¶êÙû¬Xo†^žðù»ß¡>É÷>¤êœ±¬ñw5§8JppS«Ä!Åçlˆ`?î1}×Õo»«×|Mh”´°Þbv¾xÓ$sOßš=ôZªC9ɪ 1™äúõ—aƒ|h®ÇJöí[¯²å$ŸµIð“óòM\|ˆýú(|Ê\²ëq6™àuûNÙj°{ˆx½Ì_²íÏš–ó‰ tLüÀVŠKV<|w¨”ÆGkôåð¸B6*Töÿ¸Q¯YCF8 ³ù9‹ÓD ï_É%Öb¸±w!Ϲ:7Wz0›ÊÚ£´4ÜçÃÑaq›³¯ñøB8ªªù$K.÷£0dûòÞYç‚%ƒí-€ÓÃÑæÞf\>›+¼f-’ Éù§nïÿ—ÚHh4ë"UY£¥ÙªOþ¿ì;1½ýd1û ~þžv> stream xœÍYKSG¾ëWè¸[Mæý8䇃Ÿ‰ƒU.*¶2 AÿúôŒv·[¢Šƒ¬Z³3³3_ÝóMï羪/ó_óÿð¬W~öUÿSïsO5?dó°ÿÓ°÷ý¾ñý$’×Þö‡G=Õô·Î åûÁháÁYï]õ¦8“R®ºFó²6¹¨uuS”ðÞ›XMj­…•!U·õ@[ =t¥p€V‘ࡲëZµ±"èT½ª<÷ÁT£EW/]5c×2Bó´–°)x­ú0|»T*ö#´Àêò6Æ8;†Å RèǰÃA^€vÒj¡yæ)k.†Ù$Cuˆ­ç¬y‰æÍ)š34GhÎñ4¯:³Ù¯¡^MI/5x¶ìvd…öÊ™½Cƒ˜‘A• ®Ë.²SM*KoÑ=ïF]âTã®qŠSͺÆÎ4Ççl½j™Ä{¬Ýà S2JuŸËYçÏм@«(¯ºŒt8fyÎre†¯ßï'6ú‰€O¼C€<Ëè'íübÖ‹…÷¼i)/ø®ÏБ$ŒÐgK׸¤Yî&.!Ÿ°±5Z…®àuʺäª39:¯¦AqÚ¥‚vg)™[§<Ém8äHçI›ÃeöGM0óäEš ŒIÐAIaâ"6³^<NüüFÈ­ ùØú}¿´êvÐQࡆ×î\sÉ’p‡wy‹íZ—“¸ø®xi…[Ã>‚¦,eÞ!#~ÀÖ=4÷Ñ|†æ/ SÁÎ?,fðÆmxÇŠ3®qá0—d\Ÿà´‘ÂÁ¡ÅF aÔƒõ}ÅåU’,‹KC¦Ù.Ê‘š8O$±£ì uß×Ýë¿2òçÓ€ô$‰á–í@Ž×vØ”¥× Ò`ÞÑ !R™lˆæ4Ød OÙaÏÐÜcûâd•‹ÂuL,‡¢—>PNñL›.¥ýÆ©³†SÁ®9B>r¬&ìÉYÌÂÑý2«sBuHÚ¼Q ¦8çî¤$#ÿN–ÆgžB[¡?!=Qš[Öç`æY߸¦žDU<@zÒ“œ{$ ~Z¥waÎ%;ž†”ÿ_ô–ô¯ÐüÍ}4_°ô&H(¼aùÿ'7Ã7%=Ijd’?Õ.:dÀdé¹6F(mÉZÈ«¾`׌­³Â+µMÖæ‰ÒFiªØ5>˜©)g7WÍ„R7÷j-¸¤ÅÖm(ž€e§0—‘YD‡e(U6©êçbØâX RŠ’¶z›‘6|ÅËV"˜ˆ¶º&ùå~iS¶ò/¥,9¦Žv)|J9´ˆýkÆ ¶ Šp·X‘³ùbSý¾%¬ ¡“ ±zI¥SÔ%o9%¤^sz< ¨2³@Ýî¨=B¤×]øü_Âï„EŠàwz/hV ½О² (ƒ”Ñ«êe®OÎmÀ²±Mü‹Íó¤t1Û€ÏKù'YKRþï¾ßþ­«Z|3øˆ4;Û”t[ŠÔ„tEÎ#m,L³V¨dwª>äB·EAÆ7êШH â Õ_[ͱš„÷Ë.ÂÒ_ît9¸¿þé.?G\y.+Rë„‚W-vâUZ£hçŒ$þ‡ÓËþ —1Y4ÿtÓðpj Ç4R4~n©ÜL>!:+ù]|;Aäî)¢ñ!tÎ9„ƒS'a· è57é A™”;ËwHÔЬÞê¯m©ŠÅ&8³7¢*v‚óÛZ)H96•JRQ_aÇ8ñu·Sްe÷11¥§V\t«_\Œ­†ìMr^[öކ :ÁIï”Õ¥iólŒ†/R.áØVÕGlÚèêµ+Œww¾‚=ÚzâÉÒxЉxcm‡‰˜P—öÍVáUð£ÉL]¥=¥ØºÊr ''¯ø¯‰ëɶ‘œì#ô.YþÚ·æ¯+*<ºË—?³„¹éŠ ¼É×ñЙyè“aïøûªý©”endstream endobj 641 0 obj 1474 endobj 682 0 obj <> stream xœµ[ÙrÇ ­rÞø·ü⹩Üñô2½$ON¼ÄŽ)1“’#»\\E•)’¢HIÌoÄô ô †—¢¨òƒ[sgºÑhà8 ¾Z ½X á¿üÿƒ—;ñŸ+±úuçÕŽÈÿò«?ïî|þOeV¾÷F½Ú=Þù}=޽0+«dïà‡—;ϺÖ›±w^ˆ±»ÆáåZõãè¤ìÞ¬7¢7Æ(×­¥ìõ`}÷n½‘Z²øQO{kØN/=•J÷Vúîûµ€ßUÝ^zÕ cwÆÊ²‡ÃÓõ›‚eÅÏ»ßÁ.…X Ý+mdØåF©±‡ oäØƒ”vµ{ür-á¡õäW½WΚîuy#ºƒ:º\ot/”Ö¦{Âyã]wëÁbÔÝUÐhÄŒùgçÇî?«Ã,š¢î±Ú}´³ûûgÝîz£zéµuÝIÜó^|I«q‰²Ñ¬”øÂ“~œ³A0©`)Ù‡H3(«¾xY¾ #/Guu>¯+½†™@u Þ}Ïßk]"ËÚx$çõaZiôƒË“ªÁÖI¥+‹*JŒ¸iíé §8Á)¼0‚§ӞÔeQ€×Õhˤc~hc©IÝk'G(Þaؔ쭰Ý~ýê&,jzë=8¬Ä [Ÿª³¾Y›^Øa “Šh7Á§‚áH †¡ÁY£í~¶‡…åGT£í>–¨„¡VB÷9.ùi° ˜ßR…’¯öYéöÐåÉÓ¼=7˜n†€$V§ÂIÞy§ãÑ#ho~ˆÃ?„¥Tï”yÀ¥f‡‡ÉR”qÑôj8’M>“€‡féhþ²Öý(5À q6r hbÄÙЭÂy* Ð%º'ÕX­½ê‡Ñè0KGN?'Pp˜Í "É÷An¥íº/Ö›¶=8ˆ4ÀÉ=%$ãÿ„éþœé>©âœ²¶^Ö7j ¸†¢\s„£#vS‹é£á…¨16/0¸ r>CÈɼx,Íï`%¶÷  cD¦)ćsUíõ`åG‡ž­€šŽÃ Hÿ^ %¤t´r€gGˆ‘h ÔD¾^;0Be-}ù«¼¸šîÙÆ¤ê~êPòîY·Q÷CÅ·D²™ Ñ1Þ«œU–/ÈÊ2Þ&Q#z°.ONu•ijBV Ô öSkŠS‘ ~Zã!üú¦qÉ" UwyYšî¯ìËtŠG"@µÇ¸Þ9 Å’æŠ9å]:’Q;g]‡ ‰û¢O#¸ÕMÛî»úÕú8ìÂø×þNÆÅÆ|÷7ò4š„-k2ª ,ç~Á6y±àÇD·Åš•x8DñQ¢_ÉÚõ’æàÓ4婚.ûlñ欉• ƒ“ € ‰ÑõèÃ4<œÒd­ ÖyòV#Àý}qWЦšVΘVÓKxs~âX†<×# axV‚ž¡“]²ÖOrˆk\í€V3°šë5$Î '•m°aËK1R Á£`>Ø;ŸeœN¼ÈZÊä•YÃmr15:-cù21ºâjÉèÞŸ!Á‘ ÕzíIÉU›ô¤‰Ï%ˆˆÀßùÌ“Og†‡7h·ä…3RÖpÞ†¿“óGGƒÕÐ,’§ÌÕÐUÙ´ ÿY©ŸctÞ¶«óbÌ4Nó!½ù*ú%º£)nI°p &-‡+Á: Üpn%J0 `n.†³ý梵XCýãæ«ˆ·ƒ^°aæ_~@åךJ5Cü–ÄØìã d!À_áµÈBäÃÙ€uƒæ@û$Ê?ÂòQèf¬ZÎA¦‹Bu7F‡¡}4×^8÷ âÇ:9pVRR9#•á8‡; OبLâß=I…˜P;«©¶ÃhÕhõ€¨÷ ßÙ¸7è%h¥,6ð±öšíÅ€pÿ" oº ëÄ\YØc¥ÂWoƒ™sD“| ÊUfRŒ.0¢,l ïÇ -]xQ¯¦KHË¢¨µòwtø/ZÑHMTÈ'‡øôE ¯%I O ØÍ³Øð4H)ÀSL-_–³i&ôL"yZhâ]Ëjä,áf=¿Vž>üo éœb’P!åYu¯ÐËY²ì¹ÆŠ&óf]›/¶Inÿ/2É~®3„BH*Õ‹í$ï1l`æóð6_¬×ñ혙ušSE“ÏøîUx­0ÊêšgY‰åµ­˜tãÖÜ —Ýv‚¤b+ƒ[C€ôàÁ•¬$½•9¢ž^íì³»M·rð^KeEÜ8T—Þ§Ý Á[ä8€mj’§=_ãð ]j?Dƒ2ÆDn0]S>äôÑyÒÓUtúý;ýÁG˜Þ7º˜9Š<|‘Éô¢™^„B4t²~ú_px„Ã3^áð’³úî;Ù/ìdd†çS±©Áóbï¿÷¢Ø—ìúµƒb6Sú 8E¢ÜìèQvO+ñ5Lá«nsÊÃw•V¸@ây‰˜`xkq;ï0éuø’Dاddò XÌ ûI³Ã¬°Úv” %˜½ÅÏùÜœ|_ #Jçó”.‰@7íÕU „Â߯u¯-èÕµÍÎ:W6MÔgU 2íÍYY^o§Zî²|Îü§<©ÇÄ™t­LoƨT‰Ç4¡aç® ¬ì½4Ò² ³;OòçÛd2’6T™èçóºpÿgu!áŒ2Ÿš™»ðÂU3C*¼ˆÍ –á{@XÆ$eçéøZZbîÁnš²™-Úhù=3Xþ¢’_ ( Ðm!½?¥ÃÜ^t ±—ô™š¯0tȹÄìþ”I¤)+¤š[®ÊÉ6_‰®l' %ïÊ[ý¦x‡SLMÔY‘ädéJ&ÔgŸ—äîbNX )lˆoî‰*•lH%Ѩ½TзQ±qˆ…IÑI6OxFr³@*äS¤ÉEwI`{)F²yІtÞ™^'Mèø­òCJììCwd`â{aL"+Bû%X@ÉõJÀ¤öLÅP(‚*e,ÿ¬ŠW›‡øÑ¾š›•Šßu4Qß= ~ã„7>ï ôYÒ<ä⾋ (°© Àaì/mcΤdæØ}‚釸 ±KInÕÂMÃÖN#Ž˜RWOÉø-ÌP­°ïpÊZk4ùñWœƒâaÎÞ¯w+ÝÿSÂÉ J6]¯ku¿õÊðš í¿„ÍCNÖ"Y‰ß7µH:¬ÔïºK=gì áQ†ä[,áK{Á)—›nŽÒ½ÈŠ•É>‡8Úx˜»…æÄ]{ɃÙórpº…èÌ(kžãªýApm# ëe>ãç››v䑦2›ïã|¬ž û" \4˜Õ}š['ât¼¹ðìs´ö9¸Ø’Æ€XÃM›QqWìøEü6<ÄŒiîðAP²+%bo½ÕÐ|¼oÀ7Ý"jäÛ>øê”ò1L˜ÐóÌ߸‘”ûwµ[.iÊêïX¿›ÆðÙ­àŸŠZ›‚éŒýl ¦ÜDe˜hü™!<«ÚÅBú8Ï®Zä›ÂpmBÞx`ø (à}Îo“–Cµòε¡šqYhËMµÓüeÕ1)èë÷ocûš²#µ>8çœ9`ö}ûÛT£Í#›Ø™òàqkÊÉKúŠc¼‰Ò&ì|,ó(ÿ;Ôı¹q!³OY¸ïÚÙW“üI‹Rˆ<Ò´||ʸôÂFù3#C¾èžäµ_(w:ÌËÛp§Âè ¸§úÎÊeg*>Ê÷Ì»ŒBYpÍ:i㙡–3™o>fS‹|Cž6—ÕélÚPü>½ï贇̹ͫ,»-Scµô{ ޲ðwu|c,©«·ZŸÎL«³Ó«áœ½gæŸ\“ m¾ÛælnXf©r%±’moŸü D^w¡Í)9µ…BŽi®'b~@v¸Ï-Ï' ˆ²ç(Ó ˆ¥ˆÀ$p¹÷ˆõ‹%ÇJ©˜ÙÖ«¸šó7 £KÙLíb$æ9olŸàÞfT`QvãxmÃ=ƒL˜«“̸ý{»#—/´UÛ¥W ÛnûÅþ;"ßi5åÅ•hrt,¡‰×L\0צ·2¢×¢q¶{5öÎ0ºdØ¡7ÝÌòú ¹ƒyÐçóßÇè¸0éóÛv¡Ž»"°À²ôüÝ>ŸàN«¤Ds½X8ÙÔC7ÞÒ)ÂÔÄ<éÜðÞ%Â4 Ðö—ßò÷8‹Ìz¹›çk þï ÈS¬ýK¸Ù__@ðtY;XHKŒ«ÃðéW»;ÿ€ÿþ¢Aendstream endobj 683 0 obj 3459 endobj 702 0 obj <> stream xœÍ\Ks·®Jnü¼y×%ŽÁ œ“]åJ9–ÄæÅeç ñmI$-‘²øÇsNãÙ  ±³¤”JJ gg Ð_?¾nà÷Ãq‡£ûÿ?ysàÿ<‡¯~?ñ1þxøõñÁ?*shk¤Ñ‡Çç">¯§iæpVrXà‡7¿l~ÚMÃb…˜6÷xùv«†iZ¤Ü¼ß‰Á£–ÍÙVÊA³Ý|ØI-á ¹øÒw }ÌÝ»+•fi7ßoünfµy5ã´¹fÇò/_oGø(èVüëøoð•Bѯta¾Ã.éwÊI ‘ašÌhòÇ».o¹q„ Ÿì¸Ð»dñn(0ó³iñ扮9iáÚÍ„æÅÐYMk:§!*!㸈€Í„â„b?_º~Õ<(€²³ÔÂ)ö{×¹{–Œ‡à¦V+!ï[«£°XG4ŠeX3‚“Ý÷¢•€Äx½P ¥¯˜Ìæ×M£1CÕ=õ–µqͺ» T<ðQ,—,Úó(Vɤâ›dšLÞ ¢æÂ # A/ DBÈ<¾qãVÃl´›„VFoY;käÊ}Ö)£ .k¨¡qï´üºÅž…ét¢Â?|‚wÿU£Ú½¨¬¨âñ…0f“6ɼ¶bâHú5:4Jæ•hq‚€;ÍV†¦[á‡,,Bä5‹&üý2Z2©’LûI>g%âmï‘1ò]‘ LäóÛe—×’ÖÊ| ’½A€¾ |+|k îŠH¦Ëµ…öù¬g·ËhªåôKdÛaùïDiäÅ¡T í[•¼9ɱróÍöH Òª©ò̪Ŭ4 é+®„× Ép͘J#é®·fj1&®j5X\W)›h–b(Äšv1ˆ» =‘¾î"¬ÖI„ñâü»c^>³yÓtÐ7 o–¢ÿ’SÀdˆ,¢Ô†$ÓzsVÈ™¬KV%D!TÐ퟽Ûc„ަÀ¢|`_zÉÞ}]„àw¶ƒ²õn©Ã\’¨5¯"²ý"ydOv k…¸#–çœ ”|ç)† /KoÛK u±o*ˆ{ùÂN›Ù­»Jþå8U~WЧså'*¢¬©uhÁ›Ä;y/PpiÍ ÀYFk²{ Î&ï„f‘˜IGç¨Wð}^‡½ÏÀθFWé!è’ù1sçà %F]yðNf@‚×6ãbZ 5²_*#jÝ# È<“ˆ=½DTþ±bP*/I=¯¸˜9C å¢öea–~ÊßIÀó6[Â÷n1çq¥çéÇ¢f Öâ;CG´äYiT£Ó|]€/XÊ™  x+áÌ2Y>x½*y”„k"×>RãTþeW ×»B|˜à˜¬}šey¬ù«¬ûßDϬ'֘߀'5è%ê‰ÀLÚ Äc \î÷Þ¹àLç€qÝÏðä<@hÉ-„Ñë¾òYcÂkš#ΔÿV­k¯×Ýl'ä¹aa|†A1~Y¾Š õs^z´§ˆ.Ns©Ú÷Œ†‡¼´ã¡ÈBÜpè'Ý–²ë=~äB«ùÙ¸‹F½°âÁ诮[ë…ãÔÄ~–5"™4v[èšÀ¹cÃü%‡¯n¬DýËÈD±í cj€¨« Ö%[?„òš{}IÔšX ãüÃýjA(ugªßt.p×851K>j'Óèîž–ÍÅ0œ®ð1˜X×änMèz\Þ`[÷œFB0gà.µÃºÊô’»WÍÇ;\½å¢R¼Ù°»¸äZÚÂWô0„‡v,pKÀ`™´E–ïÍ^áÚ%„±–Š,ÉHÍšY=¥¿§ö¯¹—нæ U…ê1$¨¢»êÚɪl*¹L:t*œ`|ÕáIª‡ì$ d9jœ'.PÁ®¹(®cM;ÿ¨¡’ÏÓ­'U“Ê [s!*«ý’v;^5O ×Þm˜ÌÒ½¡µžfâIûZd«” ‹D¨]µLœ‘ßÊ2-àU8jYéšZ~#;AAç²m`…õ5¼ËX*çÀÎý8(þNWŒ¥tJž$á—4vUéÞYÆø±n¡×’)øµ€0“ðÇrÏm¢²—zk2b½4õ Îs©DƒœË•¼ÊÓh×ARê–E õ³ã]§ÅŸ°úâG!–Ã/û°ptiš3áQçÁKrwÀËwxù/?äK. ÑPŽ?(#ŒãõØWÖ¡¨²½]ì·à ]ËEо¥F=ÊŠîw/¾Ž’‘%¦P'8WÖè=Jã iLpû!¼Iz¸‡p]kÓh¢ˆgôˆ;|Ë™-ÿV£ªŠó ‘¨–;@ç»êÇÅ„vá‚’ûð/=ºÀZo1ŒB¡ž6¿áH*³é‡Oð÷ &"’l«õc«ÌÓnS¹4ãOñ¤`yF‰è?EMj8Ëêkäs‰rØÛ(C«ýdOŠëθx–—%ÀOp`„~îNWŠ!žUÈ?mÜ–ñò^ù×p—…¾Ìä}$ôO³ ½cÙª7¾ˆeš¨ßÏéƒiFcõ?RûgLwÆã•Üñ]%˜.Z²ë¤¾è¤ˆÒ¿"xîë;âûx–Û¶SG•ÏÑ AÖ¿ñòÑÀ}ˆ)°fY`¢gÔ¢ªÒ(ŒÃq‹¬ÉͶ·‹§{,wn,§q ÁM(H¶èFäYM™jÙEÝP©†.=ÖÖ^õqÏž±„&€ð¹ék*sŒ§Â›–* |Ðvý|+Û‘_ê/óÀ¯IA1CìëTä8*bÚH~g¿ˆõÉŒrãÓZ#%Kæ …#цº²F‘µþÂMr,⣠9~éº8Wåãµ9Jš! ]Å#×é£m/nf@4Ï›ÏØ*Œë-H‚Ôzáûå?æ3'v Vâ-±4Ï娛),é¼·‡Y/w>)ÛÌ.•-Ù ¼ÙSVS":ÛFm á|TIý¾H Íó=HטÛmãþlr½ˆ R|ÁÁ…ÿ× -@ú?÷՗΂œ³Ö›WC%“é—çÇŸÿ²ù6OÎ }¼Pu{›PVø¿°)䨤ƒ†¢º*DRÓ&W˜´ðž&¨˜Do“Aˆ‹õDeÍBir+4¹Ñ4¤yiË–-.8sñ x¥ho¢Æ5Ë Pãò©ö[*öLZ®É£j žÑm=8ž^ÖÕ¡L6ï­[.D’ !³ciçØE?¢‹úsk@<ªÅ®q’K?è·šUª8ÐBKÆQ¡$*Cúlùý<+2͘ ¬W³$ œKV58±ˆ£çâJÀ–WJöÑÑÀ³˜¯8¿!¥¯AáÿÀ=SæE=-i· gpF0«¥!ˆiħúM>ÕJ#Äà TM¶Mýÿƪš"¨b”Ñým}¬{ËÏ™2eÞ/Ç3Ï ågä÷Àí›ÚtxO¸ø|=™¾Û8?Ð.v¾Îu-ýž0Ž ·ÇDßHQ×%¤)ÎyÄÎ6˜A½¬VH±õ¡Èéà©ÞÙ`Óq[èSMµ+â¸ëC¿h#=™ ~†×Á5Ñð©VYã^s²¹€¯'Ƚ#iGŸýýq ‘•ž½Ns?/³ UÓƒ§[¿br~kÇ:ÉÌ÷.ðòg¶ì®£Êoúz ³ž‘aD¬òo_¡³ÄWwò1%©l&¥Ïä5’)`™6îÍïö(è¶šÍ~Rn·RºŒ—˰٪Ã×,8ÉÝT¶h;UXai 81ϱ´ú+¢Ô ×ß9@¨TS§bøÉ±Å#2ë[ìÈJ_î²&!FÛ±9+Ú2ŸhbØT;¯ OQ!§B °¢|y3ÑÓkûˆ+²Käêf¹"ü^…fÁ§§èµ$ׂ^³Ug%qšrp…žkTªù²ì±Ž9ES©k»ZÃR EQ‡H¾zŒ´•‚e5Ó!< Š)‰¢”fkB¹ƒ«C òþ·šúS£‡¼‘‘G’r𙤗¡õÁ¼!éY¶ª“Ìïø]åu]ÔUÏLS<Ü+Ò.*ÕRDËzV$bzÌÃR„²Mka’n®Ü¥œ)â•óN­`™í4UZ<Ög™\Ÿ•£ 4³Ï1[L·úþ@®“.—–)»ªè¶äd }Q£ñuÂX †D 4ˆøÞj¥F½DºÅ/ѱ{þŸÜòp¤or!ºûuÏ!z™çj[qµÉÊÇmo62•¾Í#ü0r×·˜³Îëoò,/Çï2 1•ò¸êäYï¡1¼—®Ë´í÷&j£ºåˆÈIÒÇz3ÑØÆþ7´[àÈ74¹…ŠQÎH…ÙvH]T²˜ÄLÞR‹Éùlf…ß•OHønlD|îÊ VwY›ü¶"?Š]“Nö‚ˆ-Äs£›º&ß\Ûݱ%B .ö‘\ìó“kU þÔ=F20|Xm•a¥·Î¶:1Kð —qГ¡ïß¹aƒI2‰žÈÍ«<’ßÓ2†’a¹èÁ±?ä0 _÷Ôdrhæ<¼wé×=¬ÛþÒª~ê(IM{‘ÐH5”×b…™³BUæš@ôóIz–•ˆÐ¸m_Ó<,ÓÔ?úÀ gž*o߯Nmjƒùmª|,ÇoΡdv @¿¥›Ü³k¶rÄÙ|D–‡òîYã#v¶f+É]ÞÚ&ªmܹÃÍ)ï]ôÉ™o·z¹MIç¿[Û#š­'‰§¶£(Lá–º»·›1#„wë—Øªþ†ëQ ¥pq¡L4F,ÝxëuÃ|ÀÉÜO=UàQ²Íõ§M—iRëlQ•hç=-S,-ƽÞ'mÌí¸T °æ¨=Ó:kõÄó Ì6•öñ9²NÕ@€ª/þl‘Êç¬yüòå9‰^©R}>c†žO1DU²}W‘3_ÂCž}l ‘§Á.Eùp“’Ò° ©ˆa,ÆÍÖuƒ•òL†—=±7kõ³!ˆÀãóËì¦Òsî&ç¼U±­Ï ôÎxAÑ”LЗ¯â¨ ®ˆ(V¯eUé”ÉñÑvÿmUnÒ£néœGÄWM33ju{ ÆTz§ÌÖÖÒê®2S÷œ^cι ‚[vÈï„Ëåë¢xuÉ—?d¿ˆoê8;)º_s¼Ø2ÍDˆ¥ãñ•Üìþ-¾¯y—½0íFC²ÄûDȱl×ùýB¬VD}»ƒ=òhÌLT“&Œ<ñ'Ù–ΖÑí9 }=ïÔ¦ò‚ nÌ¡g;UÈìùtÉ×ëxC»Î;ënä÷ÿ»‡G/…ÞHužëéY$WnCÔ¤¼þe_£µŒYúV77¬U+®—0.Ø£\œ¬,{雀IYi“J Öæzÿë[¶"z{'ÀœªÌ Û" ·§*WôçeÙ:£ Þ[ºA¯†ì) ¾NUÓ®ê¥|’Uí9ˆ“]:8O;²¡øÀÛrÿ`Ú³Ê[Р´ÀíÛ’/x$šOQÄóäº~¡/kÌ]p–šÝûz‹Ò§8“תîJä1ñ€sò$ ²ù˜5È“¬osÈSµÙ Ó˜q€?:ÿÁ`¼ŸPØÞ<+÷8ëý¢ü]§Åð´{Ž—ûûÝÓ–]¶Ø—O—òÛ¢F*±Ë¼ÚhŠÜX¾,ãf“âQšr˜ç1DŒ~îp,§Qû Ó …[3°´þç—ùg?ªxy—WxéÄÕŠAHŸ9JwoðòÛØÛbG“?…¤i¯ñ•ݧ˼|—÷xyZŒ$Zà]ƒ—âñã›ì<ÿÆ'ñîÏÜümþÊN0™ö»-ÝYú2×/§™ë3v|§ŸB*›ó§tjT> yu[}™5a²5»vË/Å¡Å5SÇ›l![礖©ÝT°7ÅC<»´ƒÆ¦NPuEïäP’à\‰ªfÕùÖóÄžQ±S³×g´§½¼lìݬ"‡êÑ‘²,‰©Jçf> stream xœí[YoÇœ7þŠ}ó®à÷ÝÓA ‰õ`ËyHd!¦DRRD‘ÔeY@~|ªzú¨î©Ù]Ò:^ =hØ3}Tu}_Ýûr%¹ø/ýÿøÅQüs%WÏ^Éô‡H/W=>úúGíVaN9³:>?’é{cí ÝÊk5ŒðâÅуõýÍÖcÒ®ßÖÇW=X;*µþe³•ƒsNë³Rƒ>¬Ýl•Qð…ZËÚi€Ö!À~m–Z•6ƒWaýÃFÂ{çõúdúÔ »¾d×rR/6„‚iåÃãï@J©©”[­í°¶ÁøàWǧ à¿6RøÁK½¾Š!h^7ÀGëÓÚzU[/›Öüø>Pþë§µõ$êÅHЕõjé@U“‚L€>yÍuü$^ìýUí„ó±“5ƒ &uÒ—‰F¿~V_ãHaÐÞ‘þï«¢j#élÚJ “¾Àþð±Q½¹ųrÞÐÖ‹:yü GÐÃh5ý–ìàitõ¸~pRÍé²~ðß:îÛ".•¡¬ë ц²ƒÐÐÖª]‹ÁJµ(À4Ò`x´!eásÑXˆ¶½”V²We)—dͰ?hˆ D)Ϫ1¼œ;B K šoOë·gs+12Òí YPNÚëÕfkeƒËjƤ×ùdd uÕ,wÚ8GIGxŽâ…•tÞ?6ØÝfÅo‘‹F!'ýËŠ‹l`n­¸FÍ5®Ñr‰•Œnj(ïÉBÈLcÙÓn¡ØL–^ð^WuÕNª4¢ Šàßßy@ifÚ"'4~†ïþ²ÙŠÁ0<Û<‹ÚÇ•Y²ÆÒÏ7ýP0Œ¿£áh) žQ®öëo¶zPA[K]Ÿ {ÆBаCÚŠ±J~¿¬dêaTpshŒ4МlµP…}"ìNh*°¯¡ô\öb¢F”CŠA>$z4Ýx Br/°{PÖi*=ØK5ï‰Tï³£T;‚•qxÆ"4u™–hLKÔ(Ìè\™k‘ô¯Ë\O§Ür>¾'N›—;)SZMéDT 6†HËOFF8)TæïÇUóÄ2øös;k˜t  TZoŠŸI¬‘!ÆÀ6çu¨« Êf gÆ2™ŠHCÖ’ñé$ÕG²G‚]WÇÖÈãîCäHú*…B6PKºÚÈq£VëwdG»ÁR7¢P²§¯Kz•õfõ¨Î›TÑåÔ) ÖRñàÃØ8ÇedóžròN@MúŽHuBMj¿S!ñ¸bŠìku“yñÎÒOI “ >›ÈÜçG„Œ °¯úæîŸáÚ ÛK]Ëþ9¹†ÛÙö>OKàÖÓ õ„ íŸVƒß&ƒ†îÖƒmæÐÇê"÷äÑÞm¤´vKéÒ¥†äZµØŠ8u0Eq¹}Ô%êÕƒ5(%N包Hž¿Í [cÆlÙÿÔ<‡¸¸Š±<øÈs:m®f¼Ã‘ô€³~ZÚ3b{Bæ¤áÖ…VÜSRaS­‡DÂ_ñ`&¬;þž-~㙕М±F–u6ßSÕVp ®nóxÆá\Vüð|ÏÛ×Û† ’Šø’D»yÑ—ê&Ä~:;Øç툥+tDKÝÃëri)“÷„qeñžw¸ (³/O¥$v±F©¯4Ž ‘zFœ)mD5¯¦ºž\;PD¬ëeѶ`~ÆdGe@mA{e°»„AkS\£¤j4ƒas4f¬ÂUId¼l™/ÑÏ{¯‘îóQ* MS¾m 4ðÑYwØ#zÁw™ÁªÉ€ tJ#Zò@S[3®ÓŠ`óˆ8Ì%1õájžm޼œ·¦jLÎ[­y+›õÖ˜ôšå‚::L gŒ™ Cf_VK¬‹ çšØt æñ>¹låÔ‚G£Ž*k¤zIb®­Ã$•=["hŵ©˜Âù¥x|¶PÀÖfoYmÌÄ‘ WÆ­˜A†Â|ù¸Ôÿ–kË·4€•O·{3åRYõMÔMúñaÂl3›èFÇP-ŸeÌsžÉ#‘e×Ü•Oº±¡DŠ»§½iãn^íä1à©5{êtƒ_¬w˜= Ñ«Ý×BN:žhí>2Å|;4Üì¿p™Ó¦,zpÞ³K cÕ„ÇùÁê Y‚áß³s±µ¸Ê…'9Nu9ÇirÎ7ëŒÚkš7Єg=h—á¼0;¤Mðì¨Äüùà‚l%)Uü-ú.'Ãðùð–ɬY@+?îY…è›f°Ý9}¦ Ýäô5H`ŒŠm±øÑ$(ŒÞ‰$œt1æX¿+Úb·ê•‰«e9¼÷ïƒ$ÛÀŸ’Øí«œ­/jɬK+¿éaÈ ¼œEûvŒ´[o’b²Ù(™¶œ\4±ô” ;1–lÛ¨#‡o •î¼ë2m°»AD½æØh…w™]*U¯>m» JÊür&åå”>áœ?ñŒåÞ  Ê *!f}ÁÍ[`®r­‹I©IMy¶-´x˜¶±ñ´M)¬„§¹P,°ÐåÀ› ȇk9Wç£èfþÅðéæIÏÍôŒÚ:Z³ž­ÉbšOÉ)ö’Îõ½ÒèÞZúÒ°Ý f,Ч’_Ç&0ûÍ@D9Ò’å{rÌ—#Õy·;èË,âÏ­¡«®%¥t'W¤• Üõ9í8âOúÛb¦V|kÍVI™ª¯|ö‡7¤Lþ±1KΜz¤je©¶(•ƒkŒ·‹·tÐ;y+nh:FBÛF}‚“ SÚàÉ zžv™œ£ýè©@Ý/6}ßVPN®UèÝ<–óöfQkºˆ¥[°•{Bûjv³º'¦ yË ‰ «4=äSoÄ¥ìmµ\³–Bàø~†6Úw•´m±€b|ˆ6ó ±™¶À›Vüh„XýSŸ „W0RþŽÇˆGö4‡¿÷ö;Ê>ÊŽ7xÃK²°ëEˆ}^?×Ç`Ó 9N—$>ÖF.Cÿè°”·ÏŠá‡gž%+lR#d £[ךÓÚdü(±1ózÅ6ÕÛŒàªx!ì…sÊõa¯U9ÍúÈ&ØÝãËH³:NÆZÜiº¦HŬ¹lÒçõÞrOƒ–•bÒrý5'´¥ ØÜ #½Øby)G¸–%¢2ÅX•Ù”ž/zì÷Åô'ɲ M¤Óå-UÊa%Mæ/wôuÏþf/0všmsl}2Õz0 AseéJ‹¬É’}êoaq„Ý\>Þ÷K½§Þü%—ë:B%Ú-%ßH©z¶ñ±Îåw@)ñž(™¢‰Üsà®3©…8–[öf³ÕÆ4zÊ{Ÿë{ÜÎ~<íÖÕ¬òyN{Ãì«“î°vɆEDKÏ˱šVL¾H¶µÊ¦ÈÚ ŽöwNøÛ\8 ˆöAÏèÛäÏèÇÕ-0z:¤ª‘ ˆ#—ɨ]˜èÅí`Vq,]ñâéuŒPÓã³úH>ÚµAR¹ÈÀ©õ ûív°«úxYÛæÇt ¸]xòÈþÒ%iɃ=„¿fû:{4Pr=õ¼¾‹ÜÚê×oŒr9ßþ€?‡Ù[ \ôБÜHðÇL³¨_4‰e>€|9‚!×ðfä¬%’{d ðµ5asµTŒMqsv×|é¤ó´æ?§`Ü÷Ë͸øônˆµñn³XúqŸb[ý¬4\¯ó`æäÒužI[oz›'8<†Ä#Ú1ص&m[D¼{o‚ñÏ€ã•i±ü­° -QŽÜ'Š)µ1xŒC†xÌ¡F/¢{ƒÆ4észáPßåõëüzéÎú{¯„í _àù"2^Úþ?¡žˆÆqÃä§ÛñZ˜qýma„{¤¼ðOò\è‡_‚š89üçC—ð?œ×Ó(vX5FscÉêÏ‹¾¯×þ—F¡ùÜBš‡MJ9ÖFkT7–¦E^ÏSŸ9†‘┄ß{ XÇd×½ø[Ùï7$ª»[Ï1êÕ‚o+§§_‚Œ`áôWÕ<>ˆÄ‚|¼Whpíb¼±Ð,Móy8³<ÕÃ1áÃWþŠÑ ®R±ò:{†ÀGbë!ðÃærEÿ3ôqÄ‹¾rµõx÷1LjĈf‘wþÿþâõAendstream endobj 728 0 obj 3296 endobj 758 0 obj <> stream xœµZYo·ú¨_qß:ãfXîKPp?´p‚¶Vúâ…,]ÙFd]G– èßèÿí9.‡3- ?˜âpÈï,ßY8÷—gbÇñ_úÿôÝQüs'v?ýr$Ò<=ÜýåøèÿTvX°ÒêÝñù‘Hëµ1LØS’yxðîèåðbœ óA3ÜÔáÕ¨˜1^Êáã8 f­U~ØR2Í]>“ÔVÈAÔ—̲g¸AoÍJ¥™“aønðÜ:5œÌK-7ÃeËI^Œ„‚cÅOÇ)…¢RNJCÀÆ´ nw|âë>RÁ#ÔÀðrœ4“–«ygd£. k¸•Åþ„;i´íê˜Ï ¿CQ•âÚÍ ßg6«Ìð¿ %¸îB Q~(„ÿà¹Î!»ÛJÆUÓ?V²¿g°ÃóqRL‚¹D–Ækq0`õÿóÓ¬Daúf2̈o¦o·ãÜ[1<›ÅQÆ ßŒš8-dãÁ¹É¤Òƒ!Ÿ’תºÈÀÉ´ç‚ýÞû{@ @IÞ;›]×; ^aá)nÆQôá¼â¼ŠC¸G¾µ8Tàûב:Š;1¼-,Êä€*÷ú9¦f¿IJ¿›0 $ñr ‰û gµb^Q¶¾¯ÃëºÁ<.¸,r$é üv•ŽnïôßÄÆIÁ8D¼nÀXQ;ªú{â?1î¦< Þ0’Zn]B-ðšª]jË\ô9Îϼ´6>Ô˜XE'&þ @„ä¿\ä¢Ò73zªþ𾞰Ò~Ü ç:YûhÓ¢}÷¡'GAzm4íQOjÐL÷~³Â€þŸ4¦Eö 'da. ¢í›×¤RL9ü8T¥ŸÕ3ÈâóÑ1ç|K¼›^΂ӢJ|pÃïë¶l´)!šÉÇ:NÆt>4Æ$"RáŠ]ÅðwÊZEQÞ6œŸ²þ'ÅxÍðªÒaŸÒ¾SYH3²÷«eÀÂçguƒ³f¯l;2‹¢ŠúTod³“Õ¾>3K« ^§ «qÕBhIÙÒžD©ÝàIü¾º„2ÑD‡Câ¹Ó$"¼ïç”V\eöŠã€ÍÚ«²qthYX_Pî Ï„7mthM’ÃÒʦ Þü:s´*K†ÝwE¸¬åQþº–à#”œ« aWY`Y4fuéöÚ§p–80™½¬uiD븆äð¡Æ)“gòÌ hßS’a.¨;Åd.K“ÍyI6ml^0]¿ºPÖ™ñ”W¥úÄç@kHÎkÎ9²—YÏ’¥¢[ ΔŸ‹þ6Ç.t÷¾<'žÖxpýuŽƒrøjQ ©Ÿô ®lõU¥“,“ª®Ì‰¨;U÷¨Ke³SŒ¢vãPRš˜Õù Ÿh8+13©åþm ¾| ·w3e B(Œ! › #ÕÓMO¤~ï•Ñ‚‰¬å‹]ký'ÄÚ ¥­œ‹ºvÒàÎ¥³Ò`Р‚Ū½ÙÓÌM2𨧣„¾ÌAx>½Ë#\x3FFÏ~+”ÖèóóÓò‘ à·y®Wwâ=?:~ÒRï´ú;)nš:/ñå„.EÏ °ÛDÕ”—s(Z·tÜxGëH£jñº(t1‚i( lèdo|ív#FÏ)Z>’Ày-D%0´é3ÒµÛq`4hø~"í¾«¢ ]“Œ¶ª¢^´È!àœÂ_p–žp‰â)o-µY5ÏMª39Ó¥›!Éÿcy»F=²OÖð¹Sr‘ùç"׃“*¨g†¤ À,³õåf‰šQïè'ûÔ1ª°Î,eAºÎ!ÞR_ÌpÉYújÎ2ÎQkßÕ¿‘&†T¢ÑBm!ÚM•Ëíâó¶‹œYâhè¿F¥²ÛŠ´>¯£Cïu$´4LqÙ°0öM¡û©ï-”îñÉDÀ'í%êÄß_ˆ5Ec~ÞíYÍÄå6hQÆJòÁ“ò~\)½ Ø#J k…½—ïÄá‰Ð_Z>—’8^•È…ôiÏ­ƒòd:H‰¦/x„3/ŠÄuVÀ1«B~ðÛYÕô²ê7%«žŒ³õÜ)/Ü—L›’ª²³á4ÕµëÛ‡˜A7(0<46X2ª‰ø².<‹CϹ‰¤ÙLʘ‰ç6_KiAlØÏn$)žQ†&ub.ÈZö;ÁZñžRöŽh/zÞ+ ?Öá§2ìÉ#KÚø]ññ­jwf^Ð÷÷k]çì÷§ÄÍjÞ½)£~T‚¹¡Þ®•)Zµwfk×so6"²ÔpúsÝ5]¨D¬Á@ÙòÛˉùÞ +Þ1ºQ®A:ËYªAÂù1mÝäÍöµ7©!–¤!&·O«[ƒeÂ/•nÚœ‚7o æëŽ;’|:avléõl‹Ìp›ò¤Æ½läþÇØ2e“Œ»æ~[“ºOýt#†™4EU­bµ€1&\ÚùEÇícÍgE’‚lo›Û:!1›¼E˜»jBâ,É6«kˆE@Xp‹sí7.O*rîauî"7×»ùÚæ sʉ?~] rxµy£+T}œëÜÂý¼ÐqHR=Ã!%ëŽ$“¥¤_숻Í[OŒ)c›DÊ鑤O·«ï‹‘€û´L[ˆó¥ ¬g•aõ¬ õ/7ë·/¢´Aí B<ìn+ƒ{K³FÞ>B•å¦ï1`¿%þÕ½Ô;íErÉý~âä_õ¾ ,•w'ñ×ÒˆuO³¸¸o.9’Ì_’GEiBäÖÝl½¬9,uµ;l «Zp5´j«wCÂp~fz“‚NJ¯{å]Zñç’ŒqøÉ1¿FW¼ˆÊ7ª«¬b"žƒéç+¶!,ÜåI7ôÉ×\Ÿ¥ÖÔ÷Q<ôóo1Õò‡šy´Ðc(ÐÿŽBÒì²D®ž¼üE ´ ÁÝ_Ð!—JìåÝ?PøÃŠêó–ìº+ÃTÙÐÓ Mnº7Qý_yÈùnø·ýÊcØ+p2Ø/zÛ—J?m“X|[Að*Ç>iºA®@+ƒÆó·ÑÜ7îëðu¾­CôÑ ˜1~çÙ“:¼ê¶¦‡fjü¢þ¡ÿ]‡dÁ¡»v_†QÕ&ì ×;„5Á¹Â†Œä¢+áI#@–ÈrÝ]{ÝÝìЈ5of°§ËCV°žX½(Ee1N–C¬ÄÏAó@Ô“d²î¬¨Âð:ëêP53*Q‡²Ð‰Ì¼ ž”öñ—rkLªÎ/ñç ²™?'Í0øˆfem#]D¶uGµ¾ù}ˆTƒ¨¡* Û…ášáJ1¡AÔ1¡ËR*ïÿ»É¤Ü'kU‰/>;>úüû“¸òendstream endobj 759 0 obj 2537 endobj 800 0 obj <> stream xœÕZÛn¹ò¨¯˜7÷8ºy'‘ @1‚]$’Õ›±FÒèë¶^Éký}Šl²«Ø]­™µì LqºÉºSÅbÿ¼ê…\õé_ùÿôæ(ÿ¹’«G?ÉòG_~\}w|ôö_Ú­¢ˆN9³:>?’åyc­nåµ~¸9zßý¸ÞX¢”¶{ÄáǵÖ¥ºOëÎ9ºÝZ)az»Ïë2 žPÄ—ÌŠ{øÎ,Í*m„W±ûûZÂïÎën;<êzÛݲ²lqx½îA)ØVþtüh)eX˜é’š--¬¾Ú('zaî 4|P¶7:½d…YIa]vÈ?ïÆŸÓþux›F)¤rÝ=Înqø‡¿àðŽ]lxÀÄÞwÿf%ñgïpHžÝâ­¦>Ý(+´Œ´ûª^êüe½é…‹Ñi›H¾³ÒÁ²:)í|wŠ“ ƒÊõº»Ê†5*fuÁÜ!øî'¯FÃ'YËBŒÙ°dËâH´{ù9Ù­î‰.¤‹n©¤[Qè`^»¦²È d0¦û•¨VÐ^he»'”á‡%á½AGÝû¬˜²ApùM2LTÖ¢kx-‚qÂǘ!ÀDbY²y‹Ì^5›¡óªÞTƒÂäQGdÙUØùA_ß÷ÁÉîr|lpŠ\6rm*¬Ðå;Ü—<:ĉ}ȶMh%›UB¤ê^Òeçæz\§°QÖÀ3ÀN9fÈNŸÖNHœƒ·eñy*ŽÓ1 ¢ ýЄTÞÓ;:{Wm1<›;èb$(Ï×ÓAG£Q,b¡ì,!±‡d,x:»è[˜õR…d•M1ËF¶me2"bj·ã°}»‡dø´†}µ¶2Ó¶ŽîþL•Ò€ó1dâi§†Ì/c!“·jÉQò&yDƒeEkð5T°’˜Þ6‚oÎM“¤1ÆkðQ¶Ñ€ªÉ€Öm£ƒ°kù[j¤Lu¦§’Ÿ§É”¦U÷ Û`¬½ªÄ–½2š´ýˆ&ò>ÉÂbí€^%‹ü^½ÃC©%Yæ²ÔÐàLz9)Œ”ó-À˜†ì9Œ4« Ù¹¨¦Î¼ ¹h©hýpá<aÇ)À¡†ˆ—Sa’´Jsg”º^ V¿gs‰·‰Ù|o¼Vhi3Ñ­.Ð.;X½À,šæ%’ô®ÛÈÍtçïXŸð¡¿˜½’K‚ýÂ>ár5È[TÊ=‹y¢Ì2Å$ï—äµÒ·ÓlPý‰F˜½á² R -MX‘ÊVo¸VÄ)Kœfc¶yò0O~º…©|'ÌœJH­k÷5€ÓˆÄ/-<‰¯Zû^i÷õ´Ö;8c”ÒökÔ‰6mÕ+Iõ 1Š#Ù9!®VÇ;:~ý¾) ¨è+I5®Ìoj‰áù}rvAE1 ©¦=¡˜'5Úÿ„â#Wšà© .ñ!o¾ÅÉ×á“IXŒB䏿BÂýÃ8YêmÈm›d/€,2t»=ÔHZNçDçê'“tÎqCE¯!T~cå;'ß efòÈ^Êâégsé¬vtrÐÅÅ ­Ö#©óùú€øˆŒOãÏTƒ±Ú bæm=«¸Û>_€&<›wf? „‹²&Ô°•°á@±%lT¼ÍNŽ5dê$–ÐüK¤Pl +±ÔË;%÷y»ð;™=ãì»k~ϲfáäüãZBÜÈÞ´¸ö@\ÊÆz þŒV—ã¦ÅâCM'ÓÀ/Ùl3öp”rl)¡`DÊϽZJHÛ…m£ ý¬[4 :BÈi’?W& †®E$n˜ŽÈ“Úˆ+ps„scmÐô˜ JêDí•IFÓ¢7iyËM*:©‚#‚ï¾+œm€/Þ­°€|ßýu( ù÷¸À?ðY®ó…ßPë ¹ÝóÄ¢}^Ø'k|^öIÎó/òIÉ÷•¨5<˜èQkŠ’)þ˜Vƒ’Ù8Ni KæX;£BÛ8|Ï ¢œ°Iû²þŸä§‘’2z¢©è¡ Ùwɯ*ˆÍ©'ÈQ0w{r+tÇv½GßiÐ; ézŸ`wš4À/pxÕt²k/üš}à^O·ÈMí^áð¡iuol.éAé}Àn®Ô$F—ïq(p¨p¨Qþ5WÈÕp•ªÇ¡jÑ~ñ‡9ê“—ž¿2SÅÿÀ•áW­:ئ({šô#RgÅ„ùÁ­V’õüBz¹|©ÎŸUøþݧt‡©úžiPåÂ#w€ûSŠo»î»…ûª` ìèAxÒ ›v¢šó&évä“>"`i0è>¥_Òa¨ý5¦Sf"¿){Ú$Z“]g·tK÷|A/ô,ù#ç kùçšï$’k÷Éñç·\îíx̯Â'‹½Ž`Ér%28§íÈngǰrN®ýøæ°˜û’Ú,t/êÍ$°æ1ÖÖ-RÙÖc½¸ûÒFCm¾±ÿåþH½ñ$Ûžã³d­]#W¦’ñòü *á#èmòñ}5Ø´Bš½Çv­æ,R»V¯¹v¹8˜v ¥¼ñ=Êœ¨Ôz!ƒÁçvözqöÉ‚Sc‡ÆZúÉÂ!ß$øX5»MÍØÚy+÷BÌÓGNí¥ ÃN µÇ3ºm8ò“!,Ì’“ø¬ÝOà“Hšoßà[ä÷³YÀy³7 ÿO:ûcç{ú%½*›ßV~+ ÖU)ô\zá*.+YÛ5÷€*T‘6ù‚•`íº ºÀ%ÅÕ³W™{¯P–ç¿ÀròKÉ > stream xœí[[oÝÆ.úx~yÒžõÞ/AQÀrT…$Ž€ Mò «%XWGŠëüúÎ’Ë!¹n? ½_o4“VE¿zÀ©gùi+¨ƒí"’jÁ\””·üü-Òh[R pÞM¼GÆqHX æô0”Aq'èÓÉ4­Hò6.q¯Ù#F8ÇÁörÑqùw l<óVíLx&âî¤ï~G9ÎÐ[]›À}}‹£‚éfáma³ŠÌ«À„äŠ0¿c‚’þ´ƒ4S–Cðyî67Š·ÜºÎ<£FæÙl×CëìÿIÂ~é ¶ý€·‹j£è7úâFOq£f ïw1Ÿsúî1¯Gö€(óUœ½dÊòµ þ‹[oskÍA”äÖ¹zø,n-gF™ú;ÃÅÎ׎¹ ¡ì"™¸êUÉ ‘r‡‚Ä“­Hû±\‘A;OêJû:² _»+.3Ü!|åá%l!ݲ­/vš”às\7¦+ L§y}’_GVºá/qxŒÃ÷ÃÏtàôŸ¯Æ¢OÉÜ;Â\Ë¡v ¡þ >å8d8TyX23VLµª—­2!¿I%¡…Í&;<ò…ø0WÔ®î²] "áv1þJ¿Î¸{I`1ëü†…65­i >Å–D»Û” $ÕÝÆHB€DÂÁ92Þ¥,X—ä´›,#.@ ‚c&~s6‘>Áâd¶z^äp¤ïf±§é{˜ioqÝ0Múýkz0H¿å×dÑ£u´[©.`F§1š?-­j q+<3­JÕUpT+Dƒ9è0˜»¦Rß­§ë–²†ºvè:!}}bÆe²%ä8]¥©@Öq š=kÕd@ôº=Pn ‡"3¨Æ615{°25„q+~®stø@bÊz‘“øöEÚ§—J6Ù¡!âIï&¼Tä-Np€ÎyÚL蕉áǯ>»½í;ÔWAþA×ÿsî¤‰åžæ•~^£a2ô‘×PXØ×‰Â÷9@s~$Ѻµ¤A]ݨGÅ0 E—ò-²’>!2•à !=ž¿HˆË5ÑçŽ6Ͷª0¡ 3D~§èÒ–8]»<¡?—¸PHyG¦Àúy â]Ô»ãϤlé³ÖwÓ>4Þk ÇÚ·Ét;Ón&&.4uMB`Lºˆª Úá;ÏŒ¾¡!ÕS®ÿ»&¸Å©–n;‡àÖ¨ûiÊŒÜvŽmštQáÏî:·7JŠ4ć²~í¨"ËË" [e%­$J=gö M¿'5Í×½>`ÿpõýê¾R Jf$&úJ¨ó}¥¡$ŽO®W{«ßVïÏV/~¬ÄêÅ?âÿö¾{¾©þ´Ú?¨–¦¥£B:à†öÓ1Ê/B'ó#Ì2ṳ̈“ùáv~fÒéøQÁ-ÂÏ\:™pðŠùṳ̈“ùqa~fÒA~øBüÌ£“ù±Ð¡òø™I'ócä2ṳ̈“ùÑj~fÒÉü(½ ?3éd~ š“w2?3éd~„[†Ÿ™t2?Ü/ÃÏL:?2Áô|~æÒA~øBüÌ£“ùñb~fÒÉü8¹ ?ϧ3qÁaPЧ À/ÓºŠÅ5¬Ö\p8D¸û¢y4´5¤9¸ë½À±ÅÂ2x9D+cÿèK€j~ê–ÛMt!„ÁM.Öõ’%-#Ȱ{#iMd ¸'"!Òø8ÕŽÇvž2³½-¥BÄ×-tõJØ (¼‡ü´à¦re»-žP¼ÝïŸO!ílpeð±¼ÅxAdêÃãsÁt4Ÿ ¢ÿýàUïi7÷¼÷Yw øŸ^âð-/zŸ¨K„l½ »§§øô‡pxƒswžDŠí'‘Q±ý«*ÿ‚ ˆl „k¡OztHO¶Ê êxœhÝÔ™pI¾9ǧ$J]¡'§9žÆÞ{Çna:¤c-ô^âhè^7x¨ÕƒÝ:ØnWªùw[Š(c¦ÑîŽé}œ;B»G¾SQ<ÿ‰V °³š\ì]ëÌ”š ä¸=ÿoR¡á‚I™°=ˆû_Q—ÜõsbÌnÊ1ÕO å|BNlzÕM,礑)’’¨3€çŸrÎ'AZk&s_w wÚ¥jÛ“f„?¤ió\«Á~š+‚þãbkôÝàÝx†u’Œ—ËOšG‡ÚM~QgÌ$»Üë“ÙÿFòÀ¸Õo¹D#1(F* »ËÅOtG ­A-ãù´T-ýRcCS@FcnÝMɂ؃#ªÜ7€\cÆÈ…¬\5µE9 \â 8©Wßbª8B?/Ç|²hdÖÍÓ·Èù„˜ãðHx詭ʧŽçHÃ8:Õœ†“œ8È~ÑøEwÒI2iÿ’Ò'§ÎÄo1}¾z.‘.ôN½»„ûø±t@ß+‘ã)¬P½Ô8êE©‡A´`5^tö.0Ø-õ@rö±‹šæ—ÉEs»/(ÓÃÞ±É,8š´çnµ®,cwBïlñ& ­6&ûrÜésO;ün•ÕOƒ ƒã”†×­yyÑ3Õ£’ϼCØcP‡6UÚÄ"ÞÑv¬ÛéòÍÓ«”|)>>Û*‰„…P‹Ù䡟ÄÒÅâöåŒIÈvÝŸ˜ÎgôJªiPϹ߅wgzÙ·ËÏ ]«u²ø»˜ÎÉ>¬…€tfÇ!xx7¦ó ¨~{FÙF;?Ç1£K±Åëdè >¶©0¯ÛèèÜð.ñó”F“;5jéç*òk B3)©Ï™Áû-)¬w«„|…އ£òu«â2 cL”i;oY}=¸È1Àž0¼Âîÿ%_ãð‡{8|3ü¬iÂñéþúóÜ8îÿÄOyÚ·ÖÃå`+Q_hŽùJÈ÷«ÿ˜”Ílendstream endobj 832 0 obj 2649 endobj 857 0 obj <> stream xœÝ[Ko¹rÔ¯˜œvFÙé4ߤƒv>l° ¶Éæ K²-¬%Û²äÇ"?>ÅgÙÕË6Aàƒ©6Y,V}õU‘ýv3Ob3Çåÿ³«£ôçFl~>z{$ÊsùqóíÉÑïŸ(» S°ÒêÍÉó#Qúkc&a7NÉÉÃWGÿØ>ÝíÍäƒf{‡Í›šŒñRnßïöb²Ö*¿½ØI9éÙ…íÇÝ^j =äVàK<Ìá¶zí©Tzr2lÜ øÝ:µ=Í]íl¶×¬,§Ø|µ›aQ0­øçÉŸ`•BÑUî•00ød›´ nsr ü~·×“´³Ú>RƒŒÚ~JcúÔö56ïb;9/¶·m¦8Ô€vûû^À >섘”r†v}“ò¦Œ¥f'êdÞÅVšË鲪á÷ëÖzëÿ:*7{vÈÎÖÑáËü ä»ÉËŽ‹%.qYÝI”Ð pçí*·ÝãX²½5·ÖšÈU|IÁPvûÓß"ÓÆa˜èøœ*£.ñ%ˆ*TnRÆn_¶®§8Ù›öð û>®ð·(ÊO;uÓ,-ÈÍHjø Ü#Y NÔ”ªáô2ß»Öê‚HZð–vxMý- hl,i^`_òZÝÉ©ÕJ0Çý<¹yöVô=Zó%Nühô(á7žÀDÉ¥²röÂORÏ2ëè8z´4³Vñ3鈦À’~þ®ý¼ý›?`ó{l~‹Í'ãk:Ìn{‚OƒÔÎMÎdÛ,OO±ïl‚æì (;¶Ç§36'lÊÖdA%®oÓÏ"/ðÏQÁ6€KŠDÁˆÊÆ8¹ýûn¯&´ó´ÃMÃ'2ÖcìJyÑÌ𦘳¨›ü¼¢³ôéÂÊÒ¨ÄÐ e°ÎAˆ»?ÏŠ¢ê¸Ò4 a먽„vA–“ ª¢@G|þÂCPbŽà˜Fož¥d“8€Y$wb@Ĩi&éW–tŽà|„y¶¾Ìh® žPàä‡[w´¸—¤så•KäNoÑèœx=Q)™–Œ@ ¡Z x QëóŒãGdÜs|òFøº4×IÆN•¹/ÚÜ  ¶âORŠ ZWMFy6l YgÚr²Ñgè|¼Ïžã°…½he¢<±øáèä˜R‹!–0Û±ˆhÚAb4/ñ±:S WÙ­¼–ÔÅ[¤ ½i#®‚àœŸp¯0fk@sÇw°‰qZªågÔ¯-°.Þô>¶Àž-µ÷ÈjDHáóÌ¿à[¬ýTZæÌ»þÍDEs_ЫøNàˆtPbÀ¨–»B),ЖPQ€ÛóÂŒ&Æû)˱f%`We˜5H@ÈX8BÒaÖËu²Â@;Ï$p22²ô„#ÆMÂ7>8 I–§ Ñ EŸ= /ß=]¸±¯Æª%ÐÒžö&ÖÖEñç;0E/tËœ=ìÓ8(¯ÝgÔ–‰QJ áÐwŒmA@—™ó¨Oà– òwœ_Ÿ±¼ÂíYEz%Ëx³pR‹bH¤0ý‡ø+¼4w¹¸bRꙨztKaÇé®CòAÈuC ÄŸÊJŰYwBóu³–ɨ¥Ñ“4y¾?˜A¯Tkg¬{^ŸŒˆ®²ÈVÒ´d,âk-¸m ËtˆvЏd5—ìWôVrXƒ4~òÒ¯xþ׃‡fm÷J€€ òsŒn6¢ª¨6‰éÄûä$FÜ¿îÄ )€PÔÏÉ4wK÷„ý»$ß ¬#¢Puë';ØZÀxËàGè:Ø*±É`mS–Q†-4_³£ê±/OÎû•àÂeÇ(³cái³•eº`÷Yóà4O_Œ0 Ä«Î‚’z×(rô¤ TH¯F«©D_5©¤F´¹JˆðÿXŠÍTSù"r†fHLb‘y¤·®±yŽ{pi‹®«Æ•$©.ö»$˜Q,@©\1"¦*4Hül<×[Ä‘šz$˜¤6ØU›i¿'Î/æIùRM„9¿¹r|©‚ÄÁÝü6Oã”’IÑ`³Chìì?£—CÞÍ ¿œƒ£Tî”ágct¨*®âQ‡'p#1MÁ”ߎ>¨”…re%õˆÞmÚý…êµë'#X@ât5õžßaBV“뚦Ũx Ygü‚5öÊe ­c72À šÎ~ǹÊ˱ÄÌ”…Ëú—…%‡ìFɇ°8>ZSZIu RJ­vzŠžhš¼_!”kõ=9RšŽ¡Àc¢KfJð‘c)$0ácÌÈ~v?ü¼¶ÎUü(O‹o&='×4ÁguŸr®G°u]r Á“5R+á•6ønÙpŒ£ý‘ÉP‚yÙÕL Ð(om+Fç{¨?ÇÒ®ºBýg¡™"ÒgQÿΕªèÉ_Eªä"dÔÒ>˜ÒÂ=‡˜NDåy}—»%ï”>žúï$œªóã6Ô£ö4Û\~»¯„ÿÏÒñ/gÅ©„ª3Þð®~enÿOÇÉ1ì:_¤…g¬M00~é°„ÅUßÏpØû,¶ΊíZ“9PpÉC× ?VñÔë!½d)óão«ð”˜à{å±þ°û ¨LÎW®G³S¹'”šgÅÅE€Õä,Ï“îå•!ð\mþNò+¾bñÕ.BÛ’6=‹!¿‚íp™Œ„M¾ŠŒê9ga0),Ûj¿’/_¶dǵzÝ£Øx§—/b“¢×€‚õ6F=¸>X´ì=^úSéNscÛÇ]©­_õxr=B@ö˜2C<Žæ“ô}}Q°–¹ñˆ™ø‰‚e÷´f˜û¢uöNÒKü9G_¡Ê›¢Sͨ”X°%Gf‡È{Mšðòʉ »n+>4°D³îo-ãXɯ€¿JþÇ[”{‹ãåýro›^eg³¢/{vܣݩI—±ðÑTù •ÄîÑ ÇDË‹d¿¦U5P<KÞ¦œ÷¦Óy¯B7t'®KÄI€û‘Êޤsǹ¯—ã‡pÃû_XÎxF^dU âÜ-úz·‚îâÕ‹êHÂü”ni·…C⪛v5¼V'uÜ 5Í:Nd¸‡]OéuªÅ~Wx…6¸Z Ø´T©V±Æ[Àô¸«ãñÚrª|[·ú«!þ““Û_¾LÚ]kȱÜГ¶$´À­¾x”B½Ñ&ПÿvÐ/-Kˆ‡¾Þ »ŒªúK­èÊÝIi-G2Y?lrʦPÀ”ÔH }Œ×ï?²–OPŠ?BÃÙï*Ú´ÓD›–ý°ÂW¾dzÖ~NÛXš/°y‰ÍhWALBZúÚkl’§ïاy°ô…ÄíŽ~!±O_D€óÙægÈŸ[ú=G?W¦‘‘à’}zÛ=̓™2EñŸÞáÓwؼìúÖæ |í Ÿž²#\à7%ýSf\~â[öéûn°ü‰ à–Œ‹×È5;»œ8á ¸AůŸýœá²{xVðŸÞ°FýŽ}Jú¾ç„ï­³•JDµNÈ%„  7>«CÍØœ°)±©PpÓ’‰ì¡¯úOŒ@8—2ŬWIÄ#d$%âlZLºÙ«x¿Ã§ìRŠxYwëâ}ƒâ)V<Ñ)’OaS³â­joü¶UyŸ.C 1»FD’@⧨ñíÇ'Gÿ~vªendstream endobj 858 0 obj 3337 endobj 883 0 obj <> stream xœÍZ[oT7~ß_±oœC»Æ÷‹T!E½¨¨-Y*UÀÃæ’’üûŽ}ì3ã³ÞЪ lÏÅ3ß\–sÎÄœÇ?ùï÷³ôϹ˜¿›}˜‰üž7çO—³G/•¬´z¾ÜŸ‰|^Ä;%™‡÷³×ÝV¿0Ì!Lw‰äy¯˜1^Êîª_f­U¾Ûë¥dš»Ð]÷ ©%œÀ¬²<\§7­J¥™“¡{Ñ Ø·Nu«á¨å¦;iʲBò¸ç °o—¿‚–Bø¹‡.ª¹PÂÀísŽiÜ|¹ Ê~a¹f¦S‘}pÌûÎG¡¤áZ ò ¤E2*ÒÆïaUîÒ ™ í:„n«I1’QV¡˜’\Í—¿Í–_wGNqÓ0=ÌXo“DÞCANÜE™¶qõI²ú±¹z„äE%˜RQ‡YHÔL ‰$×ý‚3‚U&Êà ÌT”ÞºnÏû…fÒòÈ5¾š–Ávgé-½wÀ\<_5*“÷_ð!$ ‰0H±ñù¸Äy8ž¡ŒW©‚3AëdÑè±Ö$3毈(Ä^•Fuï#¤±Š |2 \ÙÌf˜ ¦;÷O{á™'þwˆ¢3SÅ ‹¨:­¢$+ŒC4w9ê©åö£›+pã%ÝO”"\×µŽ ­Mà>©¢S¦™€RF¡î´Š3ÃÍ$¤2Óêdù¼µ}4ãD2mj™K”8̪ µEŠÉ¾7@ÊØN@ÆÁ¼—Í“#§ÐñŽ&ó”÷á¥wrlB4Ùœ«JÍrò¢‰]ÑJlHG]t•Š…Å >ù~'ù½¹lzª¸odH0‹vnÃeÎÖÈXüÔBJÀñ|­YíL©<#_Å'Ò €©-mÓdø§&øÁþë88„Y4¤4bâGÙˉ–‡UB•F3(#î±Õþè^o€ùÝ1%×y8ZÚs;½ãÜ[šU7Ç|z »…mTMøîŠ §,~ÿ30Y%¾[ò§hßõR%$×rU¥Õ ‚*WÁ\º½VL„‘ZfHÅЬk'ŠÝ¯²_‰×:YJ¸ ¨Ë®üˆ–¦HòZû=tjqcí(]ÃÀtñ¾7=ν<×àí"ROjØ-è<‚\Sg/ Xð„ä b],%OïW™Q±$¾Ä},t.Ø®Laµô?sÚÀ^*ÚGY4,á­Aò bæQŒëÈÊ|vQzÍ8øÅ³ìxj…߇ä¡ÁÿH‘Q®û;QÌõ2›N+Ñý‚×þ„)ççá„×¢[F]¤·F·˜LR!1ôKøh7MËË]qÕôY?Ç çio“àþaK²AMoEôÔ†yð‡øØIÛ–E@èrt0·ú M“©°ÌFäëç¤ }ñí"ÃqZßå ]åzÒáÅí¶ººìñ­œ!aA¦¶“P~}LíD&S±>âSCé‹Dßµ†SD¸<§’·©ÐÏ?;¤úWMFWÄ£páËFWå’ªÂ‚È ¼’U¯7wÈ+Wc—t~¹9®Ð|¨æœ¼¥Ôε8Ö&í<ˆéªÜêýd`¤ã`¸jcŽûÛtÌ‘f8PeÓ&¹ÑÄ>ÂE¼¨ÙÏ’ËVÒæ¡œ¤z7.âx9EüøßÚÜÒÿ_å´Ž r¹Þàw›ç/¹¹(ƒ6iºãÉwlÝ¢•TNÉé7Ðo­wkö;K]ý ×–H¾¨*ðF+°UqºSß…µõ~³t¾nþ¼×$›7\UgËeägmÒUÒñŠ,­…ÁUÝjv:‡$éòLÅ­\&[܆7®ÿ[ƒò*þw†…“ã/ýÅÃMõóÔóåìOøó»óÊendstream endobj 884 0 obj 2071 endobj 924 0 obj <> stream xœí\[o·ò¨_!ô%ç¸=ëåtч4u ;Í¥¶‚IŠBV$[µ-)–åÊùõrIÎpwö\dÙu¦w¹¼ gæûf†Ç¿î÷ØïãŸü÷Ñ«½ôÏ}±ÿbï×=‘ÿÑç—û>Ø»ûXÙýÐ+­Þ?8Ù¹¿6¦vß)Ùyxñjï§Å“åÊt>aWØ|½T1^ÊÅÛåJtÖZåÇK);Ý»°¸^®¤–ÐC.~ÔÁÓ.Àn¡çžJ¥;'Ã⛥€÷Ö©ÅáÐÕöfqÆ®å›/—=l ¦ÿ8x»Âï{x«‹Û\)a`ô}X\§]pû¿Àÿ¸\Ù^wfñ]\‰4½VqøÒ|ƒÍ‹¹&ˆNH»8ŧgøtA‡Þ-žcóx˜V‡°8§çló56Áæ)6ϰyˆÍ7ÍlƹΙÅ%>|‡Í˹¯JóUÙÉ{vܬ±ôm×Xžn”È+~e—8î¶ÃSVdD¦Ï895+ê¤Tèú>šJR›/ð=/7ì\§ÜIÅáWeü•P’½¦¹SU*v2Þ±=Xiz}„wYôø|“š±.Y'â'*ð;|ú{l^°;&#ü ›bõŠ=@2ØQ=2ïËMÚÿOlöìú Ã’=œí0¬À¦bMXnX‹¹aËA¾×3 Kº+$t¯º;Úùt¬w;lr…M3·³]šS)³gBšDñ.Ù5>e»d›ílJ{H–ñDQÔ‹uÖ"á‰! ÂýËrÕw6«L+¢£fPÑpmÒáò4[wÒö üB„.-ƒ»@ó>ªp}xZ¡-*c~?¢!9k‹«X Á“’ûЉã~¥édHøYž"~ÒæùRøNx­ÿ&[+#Ôe¦¾Ïq¶(GøPÃY’‰Ï­qY ¨„ÃÃaǪw¢ìÓ»²XTž5½Sõ¶KN¬HùN„ÛoÊH¯âôA;8Að¿rpyÒËÊvÈG¿ Y9Áå7{’=xtð·Ÿ™ JôlÔvÂõFŒGæd½!GOäDŽž0 "ô²he©|Hß<ƒ•nÖµFj€\ŠkˆË–¢ë­"‹yÍmðˆ2¿Úd þ†´Èë¸:dÈë†WƉLè=K•²2Š ¾PÞ˜ä–â×Öd=)° O„r˜ÕÏ*úô<ŸšÑÑ'”ޱ/.ë¢y38!=Ý59<áv¯…¹f’ *˜ ¾È|‰vµT =pˆA;?6£È¥mB]Õ·s£ 'v…Éî#l+eë αïíš$Lezsc›”: Ogš®C§õ§ÇôüWÒÀQ€ÃL¾Êõ½·‚Ž0ñUq5ƒw—^4A‘µ`“Å.îpz_×ÀÁÄ^…:À¼eF}çú޳ýÈÏ´íœeÞ8Ñø3¶Ãó‰uŒæ}V'+߈i¤Û ciTÒÇc§Œæ }e²Ð+Æÿ{¼Äþvu†€ËJ;Ú÷$îÇŠYª„­ ³±& L"EàMÁÀ!¦#$Vy˜b]-7þÂVCÕ!F€C%¶•QFëÚÓøuÐM³Šã=! #ŒlWßyiyÛ>Y•ð ‚o‚Ä6_³OÑ#Då‰ÚoÕɆüÉsû[þè[‚¦}Ï‹}²jòþyQÙõº˜:ÑghÈ"0å‘Ñ }|s0À…ñnÿŸ®Çç> .¼çÍà‚·òáqÁ‰˜DZ ƒÙ)ÙœMô|Þ„¸š¬n€ô[áFvû<<Òm>ŸI‰‚ie«ÍŒî`Q7fj‰qÊí˜ZTj×D9u/ i‰?™PÑ„:[PÑ 5­|£¡,‘< Ù+b ÛËáÌæ¢,Ò-­¬¯F_óœ„odÚ±™%0º™™m&úÞÎÇA0’pv7p)D½HøIÈÛn{†Ç â›IºYÑCÍ0IÙ¢¬¶á»ÄÕ¿( `©EñNŒÑV€LþŠÜô”ýl0Úá~ÖK'Ó;U¯8³ÄAJš‚«•Cr&ïЖ1*$Ã#L’¯È“œù¨±Ô™ÄmE&;ñÇÛ,ùì^,•Õ %úëÞÁŸ_.5À…™ÿ@Bd'K,Æø¾#ï¿âE ø¤*qÅkв²wŽK¿ªŠO«,ß!ðb6âûºÂÇK ëÒfX`ôÑ Ý ^ªDRŒ®Fåkd[Uv7u/‚Ë‘tÒ« ˜¹«äJåMk€f«tØ ßO–gÓÁbz óT(…ú›5ì‹¡ÈfXœº`›ëðs¤þ7ÇϦ”‘eÑÀ1Þªí y!‡=€0I²OI_Ãu`Ò54©‡@êðë€Íñ3…O{¬d²P[ á´ÐN¶’*´~ñkGgÔŽJp 8’UÌH7ÆKçE´ª\1î°]'…Ž‘¿$*7RÎTÌñ˜ÛÍ0Cí€oíRJN&íbæ¶2åëe½övë,¯LÕÒ<äq* pÔïëœØ²ToãÝ5ršè ùPr¶r” v.-Vø {„M±k ˜b”0‰‘z>?œwòeÕpbMd¥“ õ³µ¹Röô¶Þ @õum…[~TÇ<à(ä×IgËC"Ñ‘+oó7ü ›‡9§wEÇðÒ¦-’cY›HnnP^“K¢“´©fvíE„!sãÍ:Ž™½Tæ·Î&ÉETJ?ÞHü–8þMé>b35õ6u+48j®¹˜Eøc;; ·ÑÃÝìÖŒaÞ¤ÝÅ“ÕãÀ‚*u¡MØJˆ3k¡“r_í§71ù|íÃ]¬º`¥oêÃ!dvšŸ¶Ò”XUÔë sÚ³ÊÝZdœ×¢êI#꙲+¹·<‰9Û€…ßß0®ûô$Õ¹nþû¼qÀ¡UùQ dZ`¿®áOSè?XÚéfZ„¿/=„¤BM¯˜çJÕ€¶Srë_X`5MÏî”Ì÷fcÐÜÞ…IüÜm¶Ï—ñî¸ÅŸ´(KWuÞnz¨²?иÀ„ÆûÅyñ6‡­/“$Û(®M¸ƒ£¶µögJãŸ1åÚÉ{ýhâcýd•1‰ÿù0ç¶nÌÚ\d 1£1ý9F® owõäc>O^a®l“ƒ'ÉèÛ ùº/K &nÙöbÐöS"`OpÿúhÉû¡nÕþ?V |ôF^€ÔJRVŽ¿Íøõýƒ½¿ÁŸÿ—ªÅ'endstream endobj 925 0 obj 3737 endobj 951 0 obj <> stream xœÕ][sݶžÉ£~…Æ/>Çc1$@‚@û”´i’6®ÛT™L'éƒlÙ’ã›ìXI”__€¸ì`qx¤Zn2~Åà °Øo÷Û ˜7‡}7öî_øïã—ËŸ‡Ãáóƒ7Cø£?~z|ðñ×RšÎ(¡ÆÃã§C¸~œ¦nP‡³¶?¼<ønó¯íÑÔi3 Óæ’ßne7MZˆÍOÛ£¡SJI½y²¢ûÙl~Ù‰QØ+Äf ›:{¶3öóflrìfa6¶ƒý]Írsâ/Uý´yÅŽå„_l{;)ûÚá?ǵ³$ÎòH“}ø¡[7Îf><>µüj{$;aÆYonúN£ä´ù;ÇGÛ£±ª—ñFÕ›O¶C?wó 7Çn ¢³cyš.|½ P#­ÜìË­ŒgÆ*ûyˆè9ÌÐѬž¥YmÞÑM—éÒSºô‰_ i_õ1]JbqŠËõŽÎ>£ká,Èø4½ ÞàVÎN[™ÙMÛÉBNÓæ<Í¢jÜ|»µ2×f”^˜sßk5Xå:#‡~Üèô§£êt¯à­ü°a€/½`µ”8™ÝYÓI+î÷Iy—#Õ«¹xÔØ!§ÑNÄd:¥-@}¡A¹ùË¡›µòÚ&õ©ê$äá$§ÆCÊ«vÔVètÇæ¢Ô†yzó˜ “œ;iq g™´À^Ó¯ o…ŸÆ!i¤;»¬ÆÜVÚ¯è,¿žOè¬_9'#ÙKgŽk)œð–Ù,ì“Ť;-æz îâ¦ûÈè…™OÆ*ØýpŸj#Vß[ÈÌœ¿(§–Îz$^kç³Êw1K—¬‘¹¨Œ'if<ÀO3w–)G¸7ÔUÖ#=n¹,'3|/9¨ÿ´µxî§!šÏÀW,w™[YîèÑ‚e+Àl¦Ì'øßÝ´ZˆÆWÇ÷¾ËøÙ…÷£Q›?Ø©±ë­5e™,7¾ÞZ°Z§<{ÓžÄ> ‹Ku3UzÚF‡é¼ÖKwýq®Þ™†ÁXCŠ yßœ|ÇË#ºÿŠâ žK¼`y\94(Yܽ"EøuPV'|ÇòS~Ï¢ñ.O¼¬r;„4ü"ÃÄ–ñ¬7†FgŠ&€ZWkF!tOèZxm ÚžEZFÊkq–NæžrúÀ ]&»º<€•øÊœ€²÷ƒ®e‰ƒñÓ Ï{rVçƒþo&(]p"©ÍU¥X†ÇNôq€—óp”b °ùú~Âû{Ï}L#¾ghY\t{è‘ 2- üx¿Ý>&WñÀ‹X(};Ñä¸MþºÂ!Ö£“uVÖéÞ#¼©ÌÕYþ‚ùòÏàNU:Ù§£2 å ©BJ±DÞ:çA#²<™d\&ä¯H=Ù—¿«X™`3 ­Ù1\ŸÎÖ.™œÜ=+w¼Ú)¨()­¿M˜aºxÇ/÷8§œÙ >Åôtkc·YÛßÁ?À‚gù¬à°g4ú)¹?fC_MBAèŠ ¸.ÚaÙŽs3×⟸–Éh/MŸÕìU^3ªÊrc0«c–}Q:ܾôj>7Dqã:G‘—ã¹)e§®’O¨3çnìËâ1œxÃ4£+¼i /D™>[%U#Œxž%ÏÅÔ‰ÁT¯&«vÉ¥ª5¹s‡ð®ÒDìNc#¶f§E Ç:·Ö Çô¾Ò0+nV¼s}™é”JZh~O*NA”<, ÍvõlYÁ`DÍ·¨]ÁZ\^'µWÑhfVo—ágoñ V/ÞP1v*é{UHëà•D%¢¨æ á—D•üVEÞâ÷è"{OÙœ‡´¼æ‹Ìö.nÉ^»%× ,\à*™“å·[‡yßå+Òw·Ž'N*Y¼±ßë¸ÇƒW¥+Chú¹Yvlb5#ö[¨/w9 {%¤ú¹µöûV%¾ž“B¯Vˆ/X…±d‰¸”Ñ¢@ŽŠX5Œ€~ßÁÀ¥ÈÀ¿š{<„åOÂ\¬åyõ†úÕ"÷œ äi‚X¡.ÒËK¼Œ¹+>$ Ã(>JÑiá?œ}ÕY¹ò)Õ]®¸@ê2ÈÙŽ ²´d¿S–Ô@SceH›"c µ†©•äI¥EDv °VøðZWIÒ‚±daz¬x2Lz…Q¦ 5ÏÃçN¤ü)ß À:†Í›lÕ¯ÉßHzκÂÅ|ZÙ¸ùTÏáê·Õ:Èù"ÛV]èŠ V2|šÛKgJ"±é%< *³„cËsuŠª’ÞÎ75!”„ÀĘ̀•E¹,Ø}Jõ£*-V2¡·;èš}™´H¾÷(î®Ø¥ Ì«ý#1î¬ÃÓXåÚ¡ ±ÔÝôæß¡½OäUÄHbA½ó"±Šª &;¨Ÿ·© }š-ünË;&>‹{‰6‰É¶p^6 íïì`’yoVZîù µÁKê8óË„3PNnâÑõ¢Ônã³~™²º/ý^Å^æªwu£løº,åkÅY¬L^óŽ>†,œ…‡=Gþü)èu0»ÐfŠk)SóÈPŒá“º¼ŽF†k üƒž±L^“³æ”GË™¿oÉüƒç ʼnð+¼+'|aÁšºTÂ:€ŠÂš>ÛZÍè'ëñ²(Ï—&’P¦ŒÒx¼o‰œ†xsž6f©*ÛO˜Þ?ð0ñix“S˜J6ÞÀÃÿ†5éðÌG[PðÎyMÐ>Â^z’h_ •ÈH[ñÊRÆ y§í9#·U„M‹¡{µµúem’hB–2ÀV(ÓR¸n°Û\Ec´péKí[ó-k=K;¬x[¢«C¢–|,ñ×pu™ckʤ¸vUkO‘ƒ9â<*å»t¢ÒMs;¾\´{hÔ¯Öô‡ñ}­7þHŠ&\øE/²†4Ï?Œj•î:G#ëâ(#‘ãÝ’—Žû4“òo]˜Ô)lŠ„šÇ¯>Bè=‘Ê«qà~›@ŸH„B<禘û¦ëUM¢ÂÅC÷+±yI÷¤$¨Ö¦‚Šä5úóñ^2.µþƳ'ûf>ÑÊ/4*ZÞ²cÀlóCÅ82Ù¶!ö÷Áçâ¼£}·"ú€”Ó¢>cÉí² )*2|@ü1@îàZ6 £6Ú¶é¯âL}#>Y‘wŒ/B^·÷8l²nXT'Qѯpè{¼vò6†º ½ë³öà ¹îô{Ÿ5ºm/1H,sü¡4þEî#ŠTŽE×S–€9ž²ÕŠw—ó‚l–Š̯âÅ*dä-ñ1ëô* ä;Fùfó6ÞÐ.Þ v±•7ùûIâÃ묬ÒÝ­5®f0y®ÇoeÒQ7‹»ë‡>Ô3w7uß'ù]íÙ\%Mõº™ ·7?èáÂ2åIè Gk€¸šföU'†ÂÐIÚˆ{³¸(V©Zý"1Y·VÁãÖ ÞUFͶŠËB´*©W¥YÎF±{“ê¾,·Ž°±iYrßëçj´á¢‚ÜÈã²Fü '몉ͧM=/SL¡ 6,ý|ã ŸÕ:Å6hñ_Éà=~ÑsbnxØY¹¥AÚÝ5j­îQ‘Bñ’Û'¹É;éš8;Üø„€ÑÍOSæð¡=¬þx@NäHWà~R¥b?­[±¨`­8«ÅZºµoììQm«ól:š6Q×KŸ²œÀÇn®SŠÝøf™W)½Ù'NB»ÕôMØÝb®cMWrô´"þ'œ÷+‹ó‘7•"àÚè@[OL0¢ô²”åìKúP»˜|÷ß²{z"!"Xîš|ÙàE]'ðÖ”¿Û§?«ù¤‚º– w(Â@Þ@Ó9£Is)Í’S…ÌÇI¢/lYŸÂØ”æíÕ9Â6]þ[™kÄ"éîÜH¸À®õŽìbZXc¾W.UœE`r »œé2TPüro-mZZ ¿[q¥Ò”ê´Ä§º‘Z…ZÎ9%R๼“?ÏÍd!è#´QÖçN½ò4ªgš­„i¹çb‘pÎøÆþ#àÁÙôAõu2§4@ÂSôž}­ ¶E¼‚î}ˆd횬6°Ûyµ‡]‹ï2 ¸(lpã#6Åçye=ƒg¹Î\·M€íÌ]ëÖ#»Â~yg—òy–’Y[|½[Ñ+¡ã]ù8]¦nžx‚âq«+9YŽ_¢f«p%` ŠAü7*¿ÙÊêåUÌÇåá1ð¶jõ»¸9ËÏ]½ª3©jñ ÿ •>À $€¢ƒßk-ZP.Èórï*ñ‚Ó(µ·ï¦ßsÿËßgœ¦¾æÐU™;þ¸»ÙR+þÃÖL8cƆ3Ý£‰Iª±ûrëZ«0­€ø²®P•Û\ »N„€sÝf@GÏÙ)sÛ†Æ\u9nËn}âwÉ×E¦¦Ë„×Bä =zйåHnÓqúf‘#vKïl”}Ïó{ú2e#ǧû~©±}ÆßäE#çΦ¦•ogÀaÚØ r»^†Ùá?°X$³³]^)u¸²a™Û¼÷ØxYo¿®Â× qNüŽÆXWù/EB&ò÷ѽê+f­¯w¬! æà?EYü,äÒ >‰.0Oø°Öœ9ÊÏŽþiÿý$fç\endstream endobj 952 0 obj 4774 endobj 968 0 obj <> stream xœÕ[[o·ú¨_q—ž5|Ö¼si´œ8nÒ¦vêÈ‚¦².–`ëEv, ?¾3\^†»³:²ì .ü`ŠËËp8×ox~^‰^®þKÿïŸîÄ?Wrõzçç™þéãêËÝϵ[…>8åÌj÷hG¦ñÆÚ^º•תàÃéο×?tÛAJ»~[›—î­”Z¿ë6²wÎéa}Ø)ÕáÃú}·QFÁµ–uR½}€=üÚ,õ*mz¯Âú„ïÎëõÞ8Ô »>ciÙ«Í7€CÁ¶ò?»ƒSJMO¹ÑÒÂâ+ ­7>øÕîðP /¡¹QVöa™. ð—r/‡ù |Ú*N:.#ówÆIN8ŸwÂË<í6¦Ê:‡ZÓÛ`°É’Rš'S¾Å{©;œN꤃ÒÙ¼ôƒ[?é¤îƒ·ŽÌ)LUH*wKIm†š^9d5Ò¯Eo¥";Ö£’« 8éP†” ´# 9)aÅAº«Èä|õøûuý·U®Çïè«-ÂÈóÊȳ¤!:ÐÞ"Va.VqY¬î€r ú>€Ž]p*DYDø2±®zHí6½TÃú!®ê…Q ™ºÉ\ÝHP}'ÔÈÜcV½æšˆÖÞlsÔ$2û¾Î" œ72— P½¨·&£$ ¶Î“ °¹êéûé: ܯ²Q÷!bú€ÓHÂ㳸2¶ÊÓKìÓƒ£úp^ú^—¾œÜ5¦Ûƒ¤* =.Í%Ë æÍÎ|æ8s*âŠÏuÀ1㧘Á8jˆ*3¢@H‰¦„câpAKQìŽ´ŽŠ/ÔúQ·½ °d#·£„cˆ=Æ]Ê&ÒC§ã&÷êMÿ¡ì÷¾™ŽD®$|ƒå£#)+Ñ“å×À¾A{eðôº×´\§§j0½–=î@+Œ†ÛzÔ ,›Që]l 4rñ¬^cçÛ”êoßíìÞ£œ»®Ç;cõk¯²öý‡±ë 6‰‹b—IöÀ>J³é¥¬¶õO¸ˆ„q܆<°Þ/Ù‹œsn–(C? ´¥…ÿ2ÚñAÙ-ÄÈ2…u8¬—¿Û êÎÊÐWEEYR5 ‰„ÔèÛH#¸ rŸàêýŒwü%Zãjd‰@“wqÓýèªgÃj€À°Èç¼­vÄ,ÜCÛ¢¬0q’íÍJ¢<øÐ”Ï1HHÍ«¦×ÙKЪ³Ú{^›—µyÊ.ö¦®p{M>M‹ÍóÚ<Ícm¢!pÂPö—¦åæEmîÕæ/MÓz°ÁÍ{ì‡ì¾ojó¤6Ï8¢8 Ï7zèÅÍwâ$¿ÃÖð ¹bÏ{Þ=_ðj o¨²¿išéÒÎØY¿~ÀõVrÿÿ¤if¼”íu Šw}Lœ= f±5vÖm4µFGò¸«Ú9 ³ñûÙÄûO½ë? ÷u“ϽÊ#ÿŒ !(£/°®qŽÛ¬Ò”áÄÒ?é<ð³üG ½…ýÖ/ÈÐïºÃˆ]Êœÿâ}x‡ØS2ôi?ï Ã÷‰©?§µ0C z'aݸœ¶6/ç´‰L#¾­ö_³î蘟’î¿’vZPC.ýU¡ƒnþ¼s˜u™|(¤âëÚ¬áÙŒÎÊoᬠÁÁ3òýû²í}Âm1çI{„çü›¼°Y,Öd¼íMÞ“zœgcž|¯]–¯Ê X˜æz1?ø‘çÒ÷]òöJâpJCv{Ôi‹yŒnn·îÀjÑ&ÑÞK·VçóIf‡ÄW' !"±;$,•MÐLJ€!ª´¡ɾ«>#8j̶˜•ô¢3‡|ÑGSÏ!?"@š# 5¯®pŠ„«I' #á]…»Z*³™À„W”( =‹ZoÞ¡—-rRSñ6÷=®0Ï{©S{×qVBèô®E¿â²Cà/á‚ë¬Ü: |+'d #gÀ¡ÃQzeã¤" 3sR7ÀDJaÐÛ äD³¾-Zr–JTxxñÂÊx¡0Ÿ0æ8'Q`À£¶WÂë‚¢7CD¦\Gƒkβ¤)xÙ!츚Ѡ~Ãhß­3zw¯€y$ªÁA«doÀöU]9áÀ"<ä0וuF­K]7ÒS°&Ò™kªŠJɸæQ¥¿…nµîåÄwPïÅÐÙÞù‚ Œ±€B‰‰‚bò2yTmZ#D•ØßQ ¬cT îJ5à'Ùâ  Ê.­bÐn`°hP[2ô€êµ³‘9ÂÓd_¢u,1¬Ý¸ƒ „H½R4U¾ÉÌ«Æ'A,à4îŽQlm‘ÏÙê4–È(o‹ª¼T#·†ðó~‘;­HAÜy^Úç% ÌTm)¬4Ë•–¤buÕåJK¬TLC,ª&ÛãdX«šó}¾T“Àu]ŒzæVú’šñ~þˆíåǺ_aÿ¹k†b;îßz’1451&¯ËLw–âMóï¦)‰üÚI ¡ÞX©Ëå5ÖUÏBµ©8#òÙf Á¤²|¸Cü€yˆ1ÇGAל9'gÅÈÆ‚#—š­–|W9,‹Í±¹²KkMý }ê`·ûÔ‡’;7 !r®Åy[|Ãkî‰xòźñ,ÏÏ’‚[Z™ó FgtÇæf ï’Ø~ŠÞDî¼òK3`uù1VÌ!Õ‚åÌ.æ+r!P«ÔÌ'¦R—U½É»ªÆW#| }ˆŠˆÝÃÆ^Íß) ©P9¾¾ù„Åp2ö¤6ß±½¤pþê7*†šRõX]¾ÍˉÜ<`÷½`qüûïØ}?ìliÜÎÜ$‡¦Ï½$yóS&y]¹P  ÎAÞ9ß!û(p!"‰òV©Or)ût}ŠReï½ÝϦ'Ã!Ÿ›ã±*$G‚×!’èT¨'éDDå°`žövÜÖþÝO¾2€.Ô|ëƒë]ƒ ŠÚ°Ó¥¸£dºñÍ埔”ë‹‘¡Æ;ê­‰_M©°¤<1,e@ö5I[©ð‡æ—Mn1ò°M¾ÆÃiû}/ÛWЦ“P‹ /YWI®â5f3Ü~ÓÙà<¥ÉQªø’)Û- XTH³=pc_Ãó"N{p>ׯX˜uYKCF„'¥¶¡¹–n4˜™²&ë2)žìEûê'× Z°©Ké[\}ZE×Ù^Dý @² æ'lË;ó—¤Ë?© yÈ\øÛD‚È×Õ~ß p‹·iäöÊ+‰Z{íïú`öàk_±'[xý£Ö)©ÓZâ5»ÿq>‘D>>þÝ›ißäêøA%pά©Ù ëoBD‚I-ýLƒ;޹Lpt¬ ƒIV“)R^z…õwÒFåm‡¡¶ŒŒÚ’rF>·1ÙÒo»J A°ö½›5†]BÛ4U…:)E4Š1OU÷#ÏÙ*fók­ˆÉj·= bá…_¦ÑØ.•»x8cá×1Lñ·5cQá²*Q¼ÜÏÊ–Y±çÐE{?ÑÛLëöŸÙЉkdÅl~—Snå]ù‘ ý= ÈŽ¶ôleuòN½í/°fì&ѵÁTöó|iÿÙ&²w|&ýÑéÇ<¹nÿ««ñÎõ £PUˆ†ÒÄ©_ïîüþý›<«™endstream endobj 969 0 obj 3360 endobj 998 0 obj <> stream xœÝ\ÝsůʣþŠ+^Øs¸eç{Ç<0”ƒÁ ©JAdé$«,K²-aë¿OÏ×vÏn¯NwØ!¡üÀhnw¦§»ý¹ÃëE׊Eþåÿ½:ˆ.ÄâåÁë‘ÿèò‹/ןÿ¨ì·ÞJ«ë“‘Ÿ×Æ´Â.œ’m?¼:ø¥ùi¹2mï…0Í ß,UkL/eóÛr%Zk­ê›ÍRÊVwÎ7ï—+©%†Š@€4Vá% §Y¬„hídzÀ$bÓPáè®5Îöq¨}ç𦵲Yál‡C3  ««|Ÿˆ<•V*¿6xÑ i›·HÄ/pxŠÃsnp…s$mƒÃÓò@䙽Z®l õžÎ^°+¼¯^+C²Û%ß°+ εÎäSÆÉ³êwòV!—lvˆÃ·ìð°:ð”„ÀÿA4OÖ~‰Š{§†t¬†¨!e5ÄÎiÈ ¸]ÔÕʨâ‰ÂõA%'êsÈêÌq³ižãyòI}‰|¿®$Ë̾¨8\ôè+ "å‹m¢­Éù¢µ¬h‘Á:0¢õ¸¼Ú~¹U´º’Ø5E­w°ÖDÔO–+ÝJÛ%éiÛ‚A>Ž6²÷>Ê,l#,È¡˜ËÈ™`±ÁྶÝkM¿ÅÐÈΕµ€´oUošwËU×Zï­2A¾á½>H/¼¦:'‚pÂk {QHôô‹á-òè9þ~3ü~ŒÆ?ˆQu­>žÆhà¸mÖK¯ÚÎ7²\×õV4÷â•ètó8 [P08q¨r0…ü C²Ù2x¥ÓìÀ€w¿6¸y˜x» zÎ0«ø\Ûü@¨|FÆ?.{°\p°„Rî«#=]®ò^Ó|–—ƒ•¿&Oâ%gÌ7’„ìÌ¡K4`$õë¼y#ÃM¥Œo:¯Â Ä#Ÿ­A°€êZÍ rowÅD¯bjóûC1t=ŽGvl‚öA4>ëd6cjé+îÏGúARElÓ4Ö¦nÅ}›NèiÄDP´N6¥ )ù˜³[ÀN½>yž˜üù€JLçj•*YÏœaÊ“Ÿ.!}ðbœjÅ´Mº^©ˆA”­¡ëÑNÑË¢'ÚŠ,Am'?ŸN±ç*õ Ø{κ±"%û—¹yÓCø¥èjäŒ|Þ•l½˜%‚0Ó±³Ó<¾7ÃZÉíª’>õC-rb›"æ tUn`ó§#œDxŽ\Q$ñ‰Æÿ"û]àM|„X_jŠ®JyS©@6ŸRŒ!!õ}«y4óÄ`G–Ê@. ÊK³ãÇÔO+´’<úo Î(ø ÿžs0ÛR„ÀÑx€ŽN…ácJ@óŸ‰õ•bˆvžl+ ¤+$§ˆ00]º°zè–Má¤l¼L4á”5y¬ãá“ÛI`–3(˜•“b™qöQfùƆdgΒׂë ô-NLxç©=!NlÂÆÁtøæø8ò½ö®¬s< sîŸ äÑ‹;€˜h4{ÄÍñCܬ£e‚ B¨­>õ˜3å\9SU-Ñ•÷T•KxÖûy[‘ayA&Cæ`A2ïGq`x›Ÿ‚ç>jü|Ê™ë:Rˆ5ZÛ¼æ"Ý3ÖÃNÂÄbŠ0ˆ9A W$àCRÀ\X3Ð:Îÿº.ô&W!yôûkRhËöW»¾ùfé`•P>y” $àõgòèÓR¨[ïÄÒ?°Vv 0äHЉvŸø2>,%~­„É}owYËí$d%^:OÁ@„uNˆ!íÙ{y¦­¹-kÐÙî¹Qvw¼ÿ7_ B)ÄnG/ç-Õo[Wy’Ï jÝ“˜=.“R”áÃT¤éû:‚©W)Ö ŽŸO:ùZ`]s)-I*ë-J|…Xå<ÑÄ'E¾Ô>éˆE_â#ÕÂRsï¨'Iie-h $>móÁû32Nz¢!ˆLz"½´UÁ>· l'j›Ð…àbf4[CÝ'¦™7c\¦ã'ÜJw§F¸!uó‰¸Â£iqOT~Ì}ø5'â!ô:­åbŠR;Ç'°m¯ g¸v©ë )rŠ“cÐåB²Qgì¨KË–¬ÃÉWS²T6»÷Ô¨.”zÊ©ùœÎš{•a˜Ì•/+m§s¡”ÎŽ‹¥ê9QóaøF1Ø›‘iIÜžíR°eŸ‡Ù);9mp•îS¶ß'kjy±;e:°Ïrk£÷ê+‡~$^|#‹x©í™g$»S´)Fú½Of½#䨱w÷e<£³>ç®ÚÓÆÝw[»n;k5¶/»j=Ù5tߦ»†YÒ~‚±àœÓÿ‹‘'¬wÌ]¿Î»ŒRz:r”îÞ©3¤·–w¯µv—3æcÉÜa¹o£ŽÇ/m [1*ÓíùEÄP{Ì%¨ºôÎmðãYÔ« 8œµ¢5‹gu‹8!vöSü°‚p“-¢.p[ˆ~w£0îB礇2ÎDb£{éèÙëEÆ…àö„Q2¨yýºÔ—!ll†°)X ÔwÄ^âìØŠîm7v²V÷2‡Ã8W×C€Í×ׇxNi©Ò€=ú@E·?ˆ£-ŸîŒz ±‹ é³—ÔjF£ÚAÈd|ÑMžš×ãŽÀ˜šÙê@ 2ˆªt¡tškʉ¡üt)VŒ"ˆBtmŒùä£dØ R=;[‚Aë+Ùö‡*2‰6ÈRCïÖm‰À´Ÿ®52”$”>cÃvb_‡òÜL!z6¯Ó†äã!šÙÇp52ƒ)4óudòÀ´¤?ÓÎâÉÉqmø&`Rñ Mð–ìwV˜5‘3_ )ŒñÙO-&’§·“lbZdž2zŒžâwIù§íí‘éÀ,‘O·È[üZ|•“xPÈ¡ÏTâyS¼MËÏYlo¸ˆÿb[@•€«ä[urÞøöWØüô˜(}´  H,ðÁ›‰ô dC³›ûøu6Ï娴mý¤¤†RˆF­S®Ì 5|£¨Ž’i4‘àl…¾\8ŒÓ|Y.–Y]_·Vçˬ¡*¹DêJ/L®Är/QçBv*$p ô1ï‰ñ>ôû¦â…iRÎçDy6#ÏMG»ä$Ì÷Þ¤ó; óË{•Ågø}‹:΋/K¶ogÐä8þË™Nñõ䕳«*tq4W"/Û“OÈICz£góìÃá,ì©Ð=$—!,é=d"v»( s3亚-—LÈÍ’K’;?üóåpñãgÉk—Õ ü=”rÍähî5æŽÒ쵡|騢‘¿²r÷U˜CvßúrÊÊÄ1¹"ʽYx¡-\<#WV ïùk( ©8‹—Sòý—Ñm$òl pVKŒwîÐ",ž×׬´.+Á•ÅøKmïvýfP˜cöQþÒÛÑ~äÞG¹Ê³ ÓÅîVÁ‡D}?súû7ŒÞ“ûYäÖ¹Ë%PLj²»JïËifár70ë+wÿsÀøS˜Ïû‚y€¿²z=wö=ÛªáÓ„“¡©žet­¾ÊÌ# „¢±ùzG¨ð§p{êÑÿ™ïøÁÍÅ™ XFÈÐàÜ¿®mñÔVs>ä.à¯oÏ9z}ÿ.ª{vÛúF÷øÚ l'X¬œi•%N§Dù¾j==^üþý RÅendstream endobj 999 0 obj 3459 endobj 1019 0 obj <> stream xœí\Ys·®JÞø+öÍ».ïhp 0È›ÈG|È‘X~ˆФ(–É¥l‘r”_ŸnÓ™žÝ%µ’㪔aqu£Ï¯1úeÑ6jÑâŸü÷éõQüçB-~>úåHå´ùÇÅgÇGž·MpÚÙÅñ‹#•ÇÛ®k”[x£›~¸>úqùlµîš>(Õ-ï¨ùëÊ4]×k½|³Z«Æ9gúåùJëÆ¶>,ÿ½Zk«a„^*šÔ@o`¿´s½ÚØÆë°üv¥àwçÍò$ um·Üˆg9¡æÕª¢`[õ¯ã¿•Êp*×Fu°øÎÖXüâø üÛjÝ6.gºåW«µm´kÍò±÷;Öûµq3éÖ,ÖªOë~ÊÆÂÁu×7}9w‚ÉÔÄæYjöxÙÙ)<.Ûþ¶Rª1Ö¤60ç6ÒjZ¯Ê$ì…IZ«¦…¥^ã¹ÖùúâpÑ.´=Üœk”éƒùªmL÷6߀ñ°)œß·mïÔòåø|xÝl©sœÖ6LcǪfEy â®Î(7:5’ªºŠ¬Ëá6—§´-cÁn |1»¤i›aÛ´ìÍÐÉöºÆfÐF «â·´-[•ÀËA÷Êóß_#‰¡1Þñmnè®W(1Úâæ wQ\NˆEg4òr¥»¦5!ß–c·=º‚V »¡S:žÄøÆ€r²•جW¤Q‘VßZû2_=à¢R®2펦]ˆë¢&ƒx˜ãÕÚ4:ôÖe)ÈÔ œ-ìêC–S'gœ+)5Û ¸Î\+0 ®Õ‰‘§¤A'ÔÄK³®ñ½â½Wü@hÑ‚µxQQY]>'-"œ,I €¢n7y¯ŠºmŒ“ÉýYÙ·nVVµ“ìßtCë³Þçı”ØLÉÚ¶¦­’e1Î|Ë‚Zso»™nwÚùR*k’”Î5Æ©¢uìwFJ­6q E^8W¶! Àœ¦6tñ2³Ø¬³¬‚­¸Ä6fò’d‡íF.2kH"·VY&v/6§ôá´Û‰N&…6ÈC'šk@‡|ò¯™’ÇÉ,˜®[~>ÕÚb+°óKT=ÓÀÂ3¦uâ(‘æ? Km¤Ÿ WAµ™ ÈB´FLd…kMVqúiIjøObÁO«¬óp\ѤˆžîTô¥L{ÇW=¯ÙNâ˜&E1f=yE¢›M†²|M&ÏLypQð_Fqãô¶È­šqO/VÕ>Îg䘢Ä9ô å8@¦Üšl_Çžš1M<Û,kN¤?*NrLwFþ`ì™™­ƒ·ä˜mß“cîøBlÒ«á>k‘,â{1ü>á vN½2Þì'Å+ÛìTq(cÍÿïzÝs1/1–ö²v¼Yßo«À)yÞYo¨;Û€ç]~<üü×ôÀ †Egëñ iÉW$äŸ cŸ²YªZ ÅŒËãU ÖÔº2•¬+ž²ž€$Ïó/’ºt¡æÄhR æ´ê!ñ,šD»^•KI±ÚÀ´µ¥oa{¾é©¸ÿTîKÅ}K˘\å^0IIÕµwù˜d{‹‘eŽÆêàJ¬UG蓨$ÒNv³z”#À67Á}³XH ³Ð—^âRŒ‰1X®Åñ7GÇÿ¸ü|¥ ÜIçJÌr „Üñ ýNj´ŒãÃftøB±`j™šV¦ÓpÑ2-Ñu¶gÌ“¶ä$¿®¸1W=°Š+ß4F¾Õ…™!_çL;/˜¥‰>HW‰£¼Á_²©ƒ åó!¤£‚Ìê–Oر¿EýƒE}¦‡€­…;z‚ÀZ-¦?É&€é)&²ïÅlR²yRŽwуŒ|¿ }cZHVùZäìžÁP¾Ìõl­o(K6³³·~Ç`»eÆS×~ï³È”óOW¦kl§òèþšÔû„õ&"L "—‰€àcBDd7#"oêBÞÔ†ž9†¯Ùtê•]ĈÜbÂîqÉùÔ÷aA :,+ÙxÀbN‰gÀ[LÃÎ/'ÌAYཛྷûœ=_Ô» pj=î$j/Iþ0ÚGÐ5Èü.ÌBÎ8¦X6kho7B1ííÞ©¿œÏ_ìÕmr„ãÔL*ñÞ-×-Š/Ü8\§ݳL€Å0ó3C.§üs˜Wn}’3;gª f¬K.J™†±è`{+ÖXC¢Yv@JQ¾AL½âðÝ8VB^‡XÃ¥ÛÁMvUäÆtƒq“›P hjÀíJ Ýê’d»Y¥¬sšHymÚ+t CZ¯‡uAÈʃ à@yf¯õ}vf¡×åÞ°sj€Ð:?Àñ´¸ÈZnGR‡g“‘/¹«b²LEÔkßv…Ü>—+2ê­hN^Ú¹zÒ‹q±&F·®0vUgd„®viàt›€{DX%‘aCRl–Øï{Pá‚Ákß„Ö?Ô Ï2,ïûH:LA#a‡ûÄ IÿÑ×°W€”Ž:†&/µy/({= ]Mmľ¢í~»g4'k{¤³Vw‚¹'`{ï)ØŽ~¯Iñn|UÖº-õ—’qÕªVÁKúÍ3yÏæâBÉêúZ“§™_O&üÍ~è$£$JµðæB~F[eQ4”n|¶f€©=óùoÇÞcÄ “¤0«ãé®àà”øÿ&ZžP#v“,?6e¦V²ØÙÆ(ЄOÑ{>lpÇíUš9$òœüòhæDOÉW˜Aá ©;ØÄÂaY¤9Åjäã|,ˆƒ÷A0¯ë¸·­é(.Ų›¿œ ?Н”!zQƒå–Õ<™(ßI‡¹›áQ ›´ßYV&e˜­éf¥šÁ™8_e zuOmÎÕ]ó(étðIlþu z¥¸O ´1¶¼$€pCµZ^^ÍPî%x Â0ñ ’Nž¬ª¯ÎP0} øÏö!ò&«däl­’,2|U\¯Ÿ±X?³€Q*›½¥`™¥—lÀ—²ix³K^³ìU¿%´ê[ýpîÔ¶””‡ì ‘çâÊ.t¨¹’´ï• ‚þ>èä/.¢ˆbd×YÏrù ~ña¤‘ïãõD²`•ë”ò7"}tÎ;難cÐ?³f`øðŒj>Ù$þ>WF.¤ž ïÌfîlËÿpÏÜÏ( äQÞ U3Í–¿=©Sö”böBÆGS5îqFÃ[BÃS~Ö» µdy´•rù¬ò|8=s(£âm3.tý.¨øáÐã½@·ƒ€7å5PÊ1ÃíAÈÆ¡ß j«› Údû+ƒt2D½![ýœO‹Ò|ºWäÿ‚ë÷Ö'~ùµ¡«mØ}ŒåéCÁÇÒ²ÅLºi©µar›Ìž‹ç"ôÀpz¹PNǰ$JÁCE;½·-<¹sšKƒøÙs€­‚4ŠÒ.*§åHÏ8r€£Ý®ª* GH׈˜î»0o‹]p¡K7o¢:xù!ßီîæÀãÑS¥úE¤LÆ÷Üy•58^Ç~x~ a~k N³¼P{*7<áÉ?Ç›ÌÍÛª· ªQÚñ±—Ô|›ÏKjn¨yQVè00-½¿Ró†š×4ö¶àZÛØxï 5_QóœV8ÛB˜Æ{]5ïsôÒ<«Ž#ìÆ¨@‘õfŒ ~àZ¹ ^öZF A•üÔPt‘–š 5=Ý¿¦:j¶Ä£5õêj@i6Ôô»¦iqš­HÄS…PÞŸˆ²ÞïY-^щØË»©Ö-‹ÝW¢ò´8í7j^í"è\ÏYÍ+ZzÍ“DÙÈý ÊkºMÍvN˜G2Ñ{jCìíÆûNUp°Çzû¹µ¸­­Îý?'ê`³þ0óÊÏðRÜ­fÔt‹]RýÞ ´š³Ê쀓/Ɔ¯º´Í†—²WÌçx5ìéÊ!ºËùQa!–’9úœŒÏfŸ–ÕŸ“ùüâ°ÞøD‚Kd8…âîK1î.§Ë+ ;ñI ½0®ß&¾#Š’ÃoÛªÙ7ÌBpÌ^Óak¼L€é“¬XPÞ^í ¿yxMõH„qó»ºÄ•;ÿC' w(þž)ÆÖRÂð_³·¶çâ5 ½õ.ïXê·E£ï·¶}O·åE ­5`.ÄÖJïêI8L¨ªƒã]<õ ªð3µÁO@Œ‰Ïô]Ó† z¬¿æÞ´îß‚2ül‹j¤ÉŸy etR*§:k¬†‚ƒL›¨Va d›^9Žh„/¥]ùç·û¦Mê–5éw¶&ÊŠÃêA7Úi°éú½i¼÷ugy•ö)>(½lƒKðfeÆ_)RÈ»²¡7å€ùfZS;YÈ’}Ó?LÃsY qâ+œr„óz±Ñ-€Ã6ÝÂwìnvÜÂË|vÕ¯ ½˜+“1œk©,r 1D1):ÊK\к¢²…U6³W«˜Þ¢P@ Rl0´mõˆb-g·N§‡d’SY)K½† ©ÇÇ\6ÅLõ¦­E•¡oSŒh;7/…pPH~Å›‰l# /ˆ9/VDW»À%v`ÓDµÒï¤1ù! >2"ÏñäAùNž5Q´&*Á:m)Zµðo­Ûø ÉèèmgQ™˜Ú”æódqT‡(аB­mŒOû†>¢> stream xœÕ[YoÜÈò¨_1Ø—% —}³óæ$Fl²ÎZ dó {tÁã‘VÇÊʯOu³›UME¤1üàV³Ïº¿ªžŸWm#Vmø—þÿøù þ¹«O?ˆôG›>®~sxðÝÊ®|ã­´zuxr ÒxmL#ìÊ)ÙtðáóÁ?«÷õÚ4ÂT·Ø¼ªUcL'eõK½µVuÕq-e£[ç«/õZj #d%pR½‡=\¥çz¥Ò“¾ús-à»uª:ê‡ÚÖT;ö,GØÜÖ-\ ¶ÿ:üÜR(z˵_ÁÙí¼[nà‚¿­uc¤ö¶úG½në½U¦ú¾^«FzíºêÅKßÉê‡~@§Eþn[Q½!Ó~Ì‹…ýì-[µZ‹®ß FJ£«ÜóvUÆô»º¶í¬€]áJ]£eW]ÆØÖºê&ÒBµNT÷‘B]çbçq8Œn€8dRÁâµn¤ñm<¶Pµ0I´ê€Å°¦v»ê—¼çðr¶Ÿb•S¢€(¯Ò’V§V)pw²Ôç0ÔKcíEþ®“e¥qð‚^ú"Æ6®óal¾êf Åy-MÓ*§ƒ}ÃôÝÐyšŽjÅ [+#ª×°ˆ„³:6~©ƒ¤Àì¦í@£˜|¤*šNg/qÇ›@{N—.)rV¨D^!ŒU ˆJÏŒ=F]½™7¬p9 >DZÛ5¶­…jÚVºê®¢QÊ*úùW½ÎÆ$bh±`l+{’qHòd@´ˆ ôkx­g:òÖ“6‰ „g/Xvqø7nEÆ¢Á#§Ú²¢›TÇv†j™FÃ#–z$u°Ô’J–Ú¡ðòçºfëzšuGÌž%ÊöD%ØEá1Ž|?Y¸ Ù©°]AÀMÁI£þ(P™õ'y”®UÉ €ýí`*ˆ]ti4˜åFïûI¯Â$iZ'™F¯D(—¼Äfø­IjÞ½Æ X×ýͽ÷ØÜƦöm$Jn^`“ 8ÂæU^×DZa/³Âg{S `zØã¹m ÞÑût f fYìºhç@ÓuòÜܧa6#—8›»ðKÍh‡‚¬Áp9ã“û=qL%sÃ#{ljl” …;‰¢™o°fiMÑûð4ÏNk‹+òÿýÁ᫯B®YƱ½çì»A&Ÿ(g;vÚ{‰ób_2m}Ìc_D90ð52M`S±Ò޽Yl¢Ö ®{ï+–Î->7‚¶8÷W¢_¯ xš%¦G8c7#ŠuÊm±$êÿu[nXKìŠNê!NôCŒò í÷+*Ñêêoíº¦ ìï¤÷-BL‚ 7‚¶ÒJBbéÅïʹrSøVà•ˆÕ=¬ÃmëCš(…Û7l°Ið!Á³0S1 Šyh›Ç–—ìùiÆ pRŽ^ ØÕ$Ì'’w2lÑãØžH%ŽE˜JV>EÄzF8 Jêåmõ¿K®|G´ïxœ<(` ô‹0ër #ÃRä´D`3Í@öXDÇ&£xœ{>HC UÓ…,¸›õã¶fìíÇwØ{MâànY‡ü ëìî_³e¯Á­¹‚ƒëë#}à Ÿ|þ4‰¿†µþ¿ˆý"¨a‘îóäžRÙ=RƒÂá/†~uÅÍO(ª±{Í ç#©wµïéÀÚ½aÙ÷CòýM­àl¢¥ß³A8bŒu†¶›q6Æ.%.ûÈwí—ìOö}C~¶ï¿®¾ã>Î1†@y%5 ý])šÎVß„YF•Šw¸õ¿é]²rEŒ‚Ž`3ñéóÙÕÙ~J¹’ °®‰ŠN‡ø¬ÓÂg†8Bë¹ìPxÚ>Í/šVù8‘Ì{"ÅÔ%ÞÛľü9ø?¦§ÓYÌ:mÇùüp¬ÁÕó(ÆBdGôPï’òCNòw~>ØÊa.ðPToeNä†BÖR 'U Ÿ† *Ë´T1Љˆ¶] bí°9\ÈÌ|ìf„äôˆÿð´‹‘Ê7‰©Xõ ¶Y©F´…ROÎDuö¬iÕ ?ZEØóGÜ•Ìú¶6Hn‡ºŽnÑ>¦æËudÕ›Âeej1ºUî 'á Iª¨`2®“~=GNJÓ@u„U&rE AI{z[©]—'üK4…‡Fg½8um±3ÎÈvÐ:w~¨ :5ƒÃøµ>²×,á_¡™=K\ódŠÚö)0@;9)Å òŽbœ{ì}¸b©}>¼òË8™¿ý{yÍÚ1NNü^…à ‚©|ˆY^@H¤@îzTÜ5—ê>LŒŒÓs”W:A€#· Xƒé#9¼3|>¥P»\ CÅä³$ÈX¬TOJäT-ÂS‘¸‚k5Üv1¿ñ0·Á7R=>gud›ÐºsÄùñ¦ør¤N=eæüÙnCÓ!FÐ"—Ö¡^ð~ê䬧^0») ÓI¥ö»ñ¦±÷¢Ð¦SrìЈξ½˜×ÒØ°l~×G‘¶·€ùÅ0.zR"gß—`GlH•Qµ(¼t$Û¼cOG¦1tÐ~«txE2;`§g Ú=éð1EŸ¿é¢®g-Ú æßS.Ñ7R‘7h'G)¸ÁvØi:jìÖøDIu–>z!$çÜž±×‘þÞs©´çÇ‚9( ¯± ÈjœPtämöH~Ùóò^ØÎ¼Ö>H,›s"z¨º¬Š”˜mŸ—Qf¨ç(¢›G8>×QZÓãé…Ö=…áœ^ITÖ×9Ö-BªO¬£ÝaøuSˆKÏ-‘€­ô¨ÁÏ\ŒI³€z,j{‰z"K¨ 8’ìÌ>¥ æô΋yU,•JEꆔËGT¤ƒ©qxȵôv& Ì…!ÂÏÇÙ¤·Lù†·©À¥œ zT®%¸@¯—_‘àa ¼–ÞX uGD³Ã3Ù• ŠRhgÜ)êñ×|ö#W:_dç!òì ?ÉÞŒõ…mŠ~Mˆ—ÔÔÁ6±éš¥»O©љ®²% ¯ÂfKOÑ´v…ÖÌfKŠKÇ«¾Îù?r¤&–,_š"Ö¤ ksgœ¡ad˜ÅÃÅ¥R[6ýS8Þ³-ùHå}$nQã'e‚ò:”ˆ^.·‡9É^ASHè®Ææ c2¿S¸0Άœ¡š“H—‡\†&1ñ+.ÊWÓrŽÓ8Ê7¶‘æÔ–›5u.``ªœH@Z äæy½êš¡Éì/8”oäP("£|68KÝI¾òH_öÂ8 ‡””Ø=É5%ó²kb½ÿøý˜åöIïõªP.w䦌ù$9‹YÔ’¾/ÜŸ¥s¨rŠÛqOfñC‰Kb®y‹à=ëðJC›™°¬xqÎAó„/ÁÕŒðe‚%X¶Ÿ9Ÿ-"Óø«…gRˆ¡G‰€б hÈ};;J èмaõˆX*¢’°ß}¼bf4¥L4¥àà”(þ²‚ùŠŸj¤×¯‡­ØÂ~ÐbR|Á²ó%;–}7IKœåk³—}¡šÛÖ\ö¤X,½b×%‡“t’î{XBŽk– Ï—æìýÀ.vË’™Ÿ|Uü³Ye;éÕþkuFO Ýþö5Ì~{xðWø÷Èÿ… endstream endobj 1046 0 obj 3014 endobj 1067 0 obj <> stream xœí[Ys·®Ê#Å–_²«òŽqq*U¶l+JÉG$:yõ@ñdQ$E-%óß§ 3=\®L+U©”Îb€>¾>Ðy»\ˆôoøÿðÍ^þs!¯÷ÞîÉá1ü¸øzï‹ÇÚ-brf±²'‡ùÆÚNº…ת ðÛ½§Ë'«µíB”Ò.¯px¹ÒµA©åûÕZvÎ9–Ç+¥:#|\þ¶Z+£`†ZJ|©ƒ§]„=üÒÌ=UÚt^Åå÷+ ¿;¯—ýT'ìòŒ¥å‡§+LÁ¶òÙþ?€K©)—kaâHëŒ~±ü}»ZëNEãCZ(±b¥[âðe^>Ĩû5UtÑIJŽÄ——»Wg/€…¨¥0…ùáfµ6r"ó•™µfy1š™yy—Dì„ódD~~ѯ<ˆ=Óª -ÓNvÆUè;ª¯ â6Ul™ª¤9o–ÏëÔ^¬Zx¹<¯ñý×+Æõñwd€¼t™%a£ËW¸þs†-xÖ÷6*ÓgMÜ‘UÉûgõý,Òª…¿CÜàçâ\õ.0Á`šŠR¹¢ \+ زt%òûsVªÜr†`…@ QËyzê:%}ˆHû€QLDÁ5ênÈIðIdx' \aç;™Fgh$Ôym5Lqö_kå:gäb-Á+8n¦c¬vkD+Gha•d vUŸÛV^ŠÈ¬1¬‚•둪‹þ3ÃÂî˜úà °#ôl›Æ˜” ]PÕËd»\ ¸VÞXɉ-:+g €lº Õ…íw3ðáaòÖZ‚’Íòß+#€k¨ý¿¸3‚HqpW,z3§^Ø ):†’ð3Dõp… dunäg/‰a!Ùø<‚Ë£¢Çä§ctKEà‚ ‚¦?/B‰PòÔR;|Ù®²!¡µ¨an6ÙÖ2.k@9Fˆ_4æPð@l`“‚(aôHcc+ŠÉ ¼1õÔH«'ai7p+cÅÍ PÀŠ 6–°™]q]¶†Mõ)Ãæé¶XPäåÌŒ#5ä÷-‘\QŽm¬º˜â!>¤]a!§1&ÍœDÓ„µ­ìîùJ†N Ï•µ² XoFqµhì(½µ1[[YÌ%„Š}J¬Xbº4oŃ6ù “åL¬Ø»˜åbt´ÛnŇ4ÜöqSƒw/p9«9kÓµ é·‘"³Û;$Þ±\lʈñSÚ© ,¹;:K‚ŠP˜hz … VòšþwC! þ¾ƒ'=fß°òúH\àÓçìbÄ-œÎ©oꀋð¿ìEg—Q²'åÙ5>;Çáÿ<çÛhQ4ðà½FF7 £Eµ|ôxËJâÕž°o‘©ïÙÍ~ÛûTãP²J¾D.OY‘mXr½ŸWÖ®çPRv8dw þëWúZІs¸’fwSÌ9¾ã¨íÏ€ÃJ)”ûZ½© ü¬B+‡ ×¥:Mìî ï+ÃÏtÞ¢GÀ™æ;g,Ǽªˆ¤‰iv­tÄH`XwênîÿYîÿx–kŠilÍ“ô¶à¨î"OE ³CöÆSe‘*7·éÍ®–doß±zàÁýªþ-žte%ü¡„^¬µéD-·<¬uí©Ìä"éíò2þ‘Œ¯À‰Â.õs•÷i$©•½Æ’ )ßb! 4µ¦%…?ÕB©Ã´mTˆÂ-Ybù‚ìPjxAÎTbJË:Ÿ¥ÄpEH,e‰Q[i `¶„6Tw°ÆWËØÆk2hpÍ"ò]A.y©™é´×X~Ya5¤Ô\­Ý^ìyˆ"~ÐW^<¼jpþ”#$ã©"3ôú5ìö™ð¨ŒKCeL'W:KlT…™™þmÓN,kYTæ¥ Te|™ß"àšBƒÚâ2QÇ ÄþQŸmË&× uÓÞá»Bl߉­^“riÁŽ[+—;\T¸Ms¦@ › 9½+Þþhþï‚ PIês¨/ÚÇÙéä”ú0 BA­¾Mº hMÓìØ$XbûùMo‘©(~‚Šk´©´î$PBXÐ…úOÕ¥[ørU;>_g[q2ÎÙÊã:˜#µ¼i1 qÜn!ð~]‰ë÷I?Z €Ö:<%[É8J 8Rö šÐJø†Œ¢'"üRvö‡°“!#"é83—"@Š÷«Ç!®eØËH?ë©©ñ§È ô÷ŸÉxDä°KÔèIlûÄ'Õ^™öø­û5‚Ò¸úóLìÝŸXJbnÍ,Ùyƒq(ÎÒ&×®7­e¥x­,ç]uIÓK]É ¼D/ü– Œ|0â{Þä) çóñ>ß‘‰|¼g¯t_ r½UË­p¶ÍÅÎÁ‰Xö>ZÅ“ž !ÜÌÂ1Ï|s eÚí-M"ðR“ÃtM` îÕ×ðf@LQ{eÒëàæLR¿åúP…”azp`eFgÏ"xe£§²SÁ[ˆÎ0Ö–m€ú.j.:¡k¿›IŒOHÄa>í¥'ýƦc;î(êviÄ{O²éQšÁ‘»MËvŒãÊÄëÆPGE.-Ín 쨀œ¿ÝvÛ§ÕUÁ1Ú Ý™/O L¼c›—¬…äëãYL&öñxT/µîç&n¤Áæþ6V¥ê²ó,õ烅3/áûŸü¾p–ÝŸÍÖ×Ô³áŒÜŒW…ÙíD¥Ãk>;èþBšíêó¹H·;D2Ù¦Nx®ã<û>é5¦”ú‡a´Ù…Íó¯odj˜Ž šS½¢>ò°?K…  H±{<¾!~ãÕŽäN&w;¨{Æ«fm£¿úí¶5úw(ÖªeÓìP6{ ŸtÙPèOOÌlO»0*Þå B-Ù6â0àÐÏUÛ 7´K<ÏŽ¬¼CáoeÇnc‡¿/ YÎÖì„¡›Žd1Ë®Kʲ[7Ö§Ø>Èdã®ÀþD ð²1èÓqž?¾cΟJ®g²º•ïëeËÛlÕÆwv§å ¾:C 1\ŠÕ›Z¢œ©ñà¢xG·)}•P‹w¤Øï1¾À‡÷¸˜Ý^Q‡Eè¾¢ŽÁ OSÿ†fÇ,ú¥J+¬ž1£¢#Åã >$*'–wšì÷W¢fþÆ7a‚–ëÚ*†¦”\‹U3÷7w(Ím»ŸØ°ÕW<´ßzZEÕÜpí8gGx“\!ý°‚c¥Ö퉴0aŠýl‚uø"€P¿Š]õ~f¹@;=ò¾hE9\õdMŽÊ·¿a¨:íJ"Ã_c® ÕÞM¦æU¾0à ×Xw¾WNsáš,;ÆÒ¸GB¾f#YC7”Æók'ìÔÔ=J‡î é„sÃWYZm=ü¼ž†šj¦ΗžH ý%±{pS06–+©5i!©mŽCǸnM.ÂN ­”†ÏY>Ò$nòÒ/úÕ]h¾Zã¿Õ£ý³Òœ¢Íñ©¡ýæTC²mAON‘¦/¹ð×gÓÛßîïýþýΉFæendstream endobj 1068 0 obj 3141 endobj 1099 0 obj <> stream xœÍ\YÜÆü¸¿b‘͆}°IAÇd8Nb/‡8{ÊŽŽ]Ë»’Ö¿>ÕwUw59³’%ÁqÉfwu}u|UÍ_ûN÷ö¿ðÿóçGîŸÇâøéѯG"ü£<þÛÉÑŸPæxîf#>>¹:á~= 0Ç£’Ýx~ôŸÍÛÝÐM³Ãæ.ÿ|¹UÝ0LRn^mw¢3ƨis¹•²Óý8oÞlwRK¸CnD~¨ƒ«Ý ï7ºuU*ÝrÞü}+àïfT›S«é‡Í v.§ùç³m‹‚׊ÿž| « ¯r§ÔÐÁO˜[§Çy<>¹p ݬD¯aþn)ƒ0ö§tgz¹ù|»ë;3ÏFáñ7¿9 ÌZo®Ýû§yVö¥^(æùx'&?þ§éÏ›³üór+úNM½Ù<ÉÉÿÈW?³RÝ8i<¯›•é͸¹u×r6°Y;ÝIÓ« 5wçs{q†§¸n»…a¨)>¯úQ¸ À²Føù)÷÷ð¼šÝfš £Â^ˆc’†»½HrÒ}§u/½°4ÌV£ÔV-T×k;Õ»8ã‹rÒ]“úÒîÕØ÷ï«­î9¨qóºú œFжÇy°ïÑŸo§¹3J¨Í‰¿× :Ü;ôó°ùGÜ0ãÇ8}“c7©Ô໣“O±¢Ýçm@{w›wô4k⛽µëkWÚ‘ó<Ò^^{ÐkoÙ{¯ÉÄ#VÑcwìr®B½˜FÐ$§QtÌ[Ï_ì­ 5ÚpÆßDMd‡º$ŸFý«µG¦›ä°ò‘Æ¿?t|+ŒiZV0õ">÷{Ú'ö-`¦Š·, ½ôöxgm·}ÅW¤¶µü„‡Æ¡»^/ššó¼žgÙ,U‹ˆÞ"Þ{ËÞ›•5[C~wÀ¾X,"›nÆUÁ¼äµß%“Šf‰æƒf™¬;;° »¦-Ftb˜3vî¡/‘³Cî0»¤/Ù­ü’}ÍMá ÜÅZEÒj›†íÄZ\9ëqÚüL6Ýfø°–3K¬xHm²çÃ?‘âe/{”F‡w…m†EÎ ÞüŸÓCQzÆã_ãAãT8Âv‰!­`ìÇÍë-8e¥èüî½¹çOà:\f¤7ì»Î36‘ ¯ò îƒÁ„ð‰Ñ…ø ·[«5r°ö4j<ṕëÔéI2ÒÈ&cròÊ1ö‚Ù%“áî½eï­L†‹Ví6Ê¡“ãPŒëe+|@òÐ4²¶Bæ~‚ÐÚtbì£Åan/Î6,Ó#DËC+9õ O¶’a)^ÕóæYÁ½À 1N«g¡SÙa4´3y+—çn%†Âë ‘c Yc*%i,¤"W[Þ¤ Ã@zÉãå’ƒ.Òqû*Õ[oCü¬¬…œ_‡q2ßAß“ »­ª×ÓaÐàÜÚy˜£Ìa«C3Z/µ:ô•sS¸ÈH>ÙÚØBnË¡BûQÖ~íÌžSA{›TߦD` g¼ÜÚ¤MXÐô‹yœqF‚ …ƒvÁê”H&Ø3V¯Ò¯K2””rŽ¡"dÕb.)&<™¨¿Õñk¼,`è…iaè“ +Ó¯²“D€ÊŽ™GÆ£-¤ùó`D^ðÀ˜a;ÔÆ]cÄ7-ˆ×5¹ù¤Ì®íÚ‘q°ê3LݤõeVæ ^ð*ýBþ[bBn<õÓºzž–Ö‰ÆTο٩(CPŠL§Ë(zƒ».­C‘Wâ*žzQ©¸]Ù.“5`]òHX7¥§ 2òñ%ÆíÖ’·S§¬õãâÖÑñh‹€‡ìšâ¢x±ÇEÜ[Þ)¢§âÞB~Î߀ô¬µ 0ï^φ¢¹«•B-$§*‰#½Ü>Št=…\ãEL9p¹ç4̪Z·„6 ³¿båCË– ty9ؘHh¨†3åUY¶ÓjU~ª0ìl Ű1)[óÌ• íàõöËÕ£M[Óá¶Æ¡Ð‡Òy†ÔßÇHöck‰ÍüK)Ád=—"»òæF ‰Ÿ©"hfE¡¹÷ç§âÈFIyZHsá1⌒F…IÔ_®*Ú׬z©S°¢K.Bòö÷*…ˆ4nŒ›ƒÀ~Êâ¥9ˆNEƒUyHµlcS036¢>HmÆHÑžÿ´aÙ¤ O÷‹s÷€.¢@k¼Þ™zŸÊ´Xµ’c‡¹Ôܮ᭠¦æ}„iK¡¨Ù¨ñDíOÛü¢˜qŠióïí± P™¼Þžð|´»q´å°¸i$IŠjÖ¥MEÞð>Ä+b\®ró—ÙáRî€æ|N²ŒCd`–b„…:=Ò¹6{é‚l’…z[gú Cð³ ÄÔÉ>ú±žñ<å‚Àdê^¬xˆ/Íw> ïé+À¸tTòu.6ÄEûÉÆŠm¦Ç*ò2×Nð·×öo3Œ¤ßƒw(‘ó¼Â¡—ÛqœLt-xeBvVE&x’UPœe`þ’ÁFáê*+†>¸`iž™ô@xŸì…×H(P/uê.Ûørvx³‚˜ а¦^ÇÆ-ÚýRÃcï¤FHåaá"Ó%^>Lïfd?WûhǺAFÀynu"kíZÊ&vêÄ£æ‰ò)ÑÔæ]yÆâý%¸˜©ï…F, ʘ3ŽS{-¬fk⡓5åLý‰æw¡ï©@ÁÃ7±Õó^H,Gzˆ†gBîxo*BÎx„|C(zRнF”%û,Æ" é ©Æ÷žF|½Ú×ŶäÃç<˜jesé„ lÏ "ŸñÁzŸ¦ÞÙ.ƒ© qR>ÈV ТÞQº-±l¾-­Á.zÒI~IöïÕr” †7 ö*…+hd‚ï8ˆ?¬õ€-C!¹ñÄtrnÆiQ¼¹±…éúBp½w‰ˆðŽ;Ù+Ðk„ž'u¼XåBq%Sm0ö#¦`¯£‰|'ì~(•°ÆŒÔP;ãXË· =]¡Ðií6Ö®Ùa™ÔÂJ™QÔá„’ïŠm.©¶3¼— ½„³®†·£Ä6§ö ‚(RL•ÎmEA Ñóņ›fSWòå{ACM s¦¨Ý¶ö,xhÝò”\rxÇ„²7„N×±Õ/Öe„ÔuJåì=Ê‘dbbnpZuH;å}™´´8àastiüãb[;ä@-<hxW‰†²_öˆQU½(×›Vܧ“+=ÔÃöwÕ5®e8 (\9=É!#3øÛû8œÐU·u’ƒ\(©gG"á•ã`ÇvjÆ5ä%ËeûRíƒ/q³U㸠2í|ó;*[†8T[èo`ÖgŒ¢›˜8µ"¾c÷ªÅÎÐ*k¢Ø²àæCæxÓZR&@8[:M]úZ+9ư Zß¹¨ßÚ°„tÑJ“úADæîI> E”¤Æ]l/IŽÆ‰wù×TÄfÅNxPÐüE‘=S–ðiž`œEzSÈMìùaY^,>×£b¢Æï2ŘШǒsƒí~Ð@]½ƒ!ر,•J-=wÚ<P$y'Ï¥3nZ‘Œ°Ï?evRèjØ—ðˆ]˜=<³úõ„ÌJ~ƒh ØØóB)æöõ'ÞýqM€Èøþ9æ”FaÊóm›^1Ž Ù5Ö¡h'×ÀÅî“OŸr=H§Ô.±§`Bë÷Z9„g5žfŠ$À»ã”s‘ªˆË%yˆ¨@ôý!UrÄñƒ%…wd[ÍŸÌ%4vXÝ&Öo/lk¯½\$*+Z½Pë˃@q¶¬ÉìÙ´6çàœ±CÆìKÿaàwÚÃÖ6 DŒ XŽh~$<Î3ĦÖýäžïGéÌM:ÖÉ´|çö[ç-ªþµƒ´»4:,äü>Iµ®7(¹­ªžF×%rÙr ¯8ÔMžAÔM=%N&Gv®  ˆ‰ÑmQK-g64QŒ?Q&yVÀv½Žï˜Ùˆ²A_ØbU–mZ"¶#vnò8?A…Uè q~åÕ_Lój»K¦^x‡Ûú ="k7“ž£)?¢®¦ îñn4 ^½òª¢òDòOûôW'Gÿ‚ÿþ‘¼Î8endstream endobj 1100 0 obj 4477 endobj 1122 0 obj <> stream xœÕ]K·rÔ!¿a‘‹gM«ùên‰'¶‘ØBÀÎaµ»ZÙ²vdi×–þ^~Yø®*²º{fõ4|0ÕÃn’Åz~Uäþ|Òwâ¤÷ÿ¥ÿŸ=½þy"NžÜùùŽHÿèÓ'Ÿ=¸sÿ5œØÎrÐ'Ý©¿6¦Ãɨd7¹žÞùnóívgºÉ a67Ð|¾U1“”›_¶;Ñ Ã ¦ÍÅVÊN÷£Ý¼Ü®‡Üx©sO;ëÆ7zî©Tº¥Ý|µî÷aT›ÓØuèÍæŠË)4ÚönQnXñßs« ¯r§„q?qsëôhÇ“çnŸo…êìh†Í>|h²V¹õ¹NžnQa}Æ5O¡y›Êu}ì»ÝÔ›»ðsh^@ß3øLuó4¯È²òkסƒêÇÜ74Ót§Ñ¿%é+ñ[ˆD×0Â>Nw´/b}Ÿnwº³Ò 7Ñw¯Ê¸çqÜQŒø[§ ”o Ž„ ¨¨"iu'a—Â~«qóëv×wcßOY#¢ÒO®³Äæû |ã…çÄ¡FüLÍë"1å¨S»)ÑkÊÓþ£Æöiâco„{És’§˜ÔNDǼ„i‹2Pbã©W‰¹ÑCÏÛú~ëé&º~$ƒ^€$=ƒÎ{v‚×þ £{>â½} }/@Ñk§0â´Kúšê;#5øQ’SxÆ} mêp’:Œ½–™CG!§8õøôžž—=éw‰ö;á(9ô2nA+^•T6⥥_ Y¾f»RéòÛ­ã 1u²ï~ uÓLËÓá…ÿÀØ)%[1 ô=Ï#h,êË ü®Ý9=–+ð ¬{ÄÈI–9 ‰Q¥åü]×µ)^Ì­1uÍó2˜ÈžÅ”ê„\'R ¬VºL"«;%E–ÙÌØÂ’eóz ’‚‡¬>EÛÀëq–³7÷Ü åyÒÓÓ0#hQñ)!³JŸz±  ñ&,ëH/ ™7ÒÉHÅÙ1d4¯¶ŽÂŽÊ¢Uü¾çóíØãàtÉJo£´M|_öC§….ZßI_ØÂÁ:.1xˬ«FÄ„ûzƒB×Å­É|ä¦=õ½ÐAtœ1©©U½J»WIš Ý©ìA4–>t@vÉ·7#y½¡ÑÊMMllwª“V†4‰qŠü¡É#“ó K]¥íaaÜü--©ù¨:=eœ•j/hÚ&ή›ËLÆa³K6ÈQ­Å« 3vÂ1Õ+ÖfÞdÕjñ Ñ P_dºÐ‚œA Ñ%ëîA¯[b$ÿ¼ö>Í.ÊÀ°MèÁŽ‘$5;ª±S¤zôÅœÂçEò*;ƒc"_I$Ò7`™Pž¶_˜üåµ°AÊ3øÕwuïõ3&1g+m;åèð°üžeÊy®7Șd‰åµï%,à~ÖÆSàóâþñ®&ÚÞpÊ'Þ™BOjó¯­±éÉœãBýGÑB¿aÜ“I¥éܲëaóè¯r” aäÈ ´žÀç‘áÿ‰Õ'O’|Z !™Dq}w²|\Ç[b:™ÜG¹p¥!vbègžâH÷=¥éuTÍ©¹‡æSh^@ó~ÝWÛ~ QAÛA@s€¦„¦‚/tÐ|Í_ ùšCSB³'Ìà,¦ò¬Už^Aó4÷ô5+œ÷c6†§Ð<«Wšü§Ð¼fûîÙ×ÊÔeеíÚ¡44ÿWš™äpbœ9šÀRŽYN¼m²Sðð{ÏàîŸãÀ²í†“yáOÛÝл Ý‰¾€¡-4G¶É¯cµƒÕFç«ÏRy\žc¦Ã !zÙ)žz'Ï€‚Û1„ìÇîš\ÂÃç,{9+ç´¤›¥ vI *ê§ã"î9ôL§O„áÅPb;FüÏ ‰dþh^A³‘€ºïž¼F^»aehbŠØa`›#KrÄ:ŠôÍߨŠÝ“‘ý®&¯¥M㥦gGèØ¾0 ­‰¾s¾‡Ç ‹žÿÏVônpÑ8Éã@^-²M(6x M„wüºÂi©ÑÐУFÞ¨÷ê9Õ‡—Î:òQ/r.އܲՔO„¡¸á¢ö&ƒï|Θi8¯n/jïÜ–ÿÜ &úö/!‹>+JÓõ@$~¢tQŽ ï{Èófg°Êà{ÑɰÈ{רÉâÆD±ò»E­V|N»´«ŸŠÒ¯`:óTŽÓ9+“ŒA$òûEμTòˆâü$«Ù;¿ä81FÁšõ n½€>Ä Õ£žÎ—œˆ6àC–ÛI }“Úã™­2Üȉàogì&ÒtlEÐz^ý‚Øc Â`ßë““!ð[J·˜A£ˆ€‘5X‘ÍdAgªAé¢W™;pdÍ#kÍšr*£’’œORÂ)¡SUÒ0n;ƒ¾£ ȆÒP9ÝÂÀ*j’'ëAæ¬A#](¿q;hDÅÊ/µ0yvUÚÇï•!Ð5R?6(v‰®­ÖyƶÚÕåÉdk±šWzV+jÂ<%½·hPð¿„D!UÁ¨b„:û:—ýê#¢ H©ê=ËRÎÄ+Ðq %h¤o£”L±½³º%ýŽ=ŽÖ»8ƒÀnáëÑq2‚*°L¿' ÛèÍï¼[äúê¥N@•ãT€k;f|#* ¼“”‡÷n©Z€ESb¯Û.ÑœZÚ϶Ú'Ò,ÁÈ[Ø×cÄ­à¥óëlFèù©Ÿeçbâ]áÆÔ×èÐ9hŽþˆTs q±l'ß­±·:`Žlš€fÆa’ ÇG³6‰E¢˜ö¾Æ¢Ï8-·)¨ù ¨»{‚ö „ª‰°jÞF@Òy‘Ao!DBW²žõýöøüRZU\æ3á“Yp•SêꔼÆÛí ŠÝÂù0¾¤6lµ¯×dYêž±Øv ‰g¯-`¶ôwëŠ_3â v¹= ›D@©}Ä8,Eeå2–rô $oSÑ ùR6iÄFs—[\¢’ƒÝµ‘ÂÊþ>¥‚“sDþ"R•Bv ûU¥ïÓdÓ*„edDŸÙM©8êH°Áh˜Ô¨xé(Ùµñ9 ésDÞi.‡tNÅ+E¢‡ˆWnÞ‹>öÔ8K­¤ñ+VÓ““šMßy^R¿OXID2Gß¿Æ#¨$¬Ðaª½Ÿ Ì´¼(4Ziýù®³ì=Z>£I©\¾D#ÐP§&gp­‹¹È"²–—…±øz²gDŸ¼©®¼ýf]ÐóerвV‚I+gŸx˜¤9xo|ÝÑÓ¨D'L”T¤ž)¤šµ[Œl"É#C0®ï\Ý—¤¬êJRô»:±”»õu#³Éóóy—jAø¼07dEù¢HšÙOŸ½‰I\`Y¡{3ì´"›¯]_‰ÕË¡%‘ úsTQÊœUxÂÊÞ£­°Î9óôˆEy,ÃÎUê}QqØw„o7¡Ç·G]™ÏCo1`t[h:iÍ<¾«ZxݶÀŽø³JõÐ ÔtŒ…/OHTØBê)#Cš=Í%p(Ù“7ëך°èpCÃ6ŽÖíE—€Ø0ÛX>N"A]¥ ¤™º‰RF6ðVŠ—Ä3¬Ì’Ú¨êiªè¸Ò™ =L*aòžC‡Kí%øÉH͆G ƒD-°÷©äyA½5/zS9"ƒUç÷*s1½'à4–V&Õv/<3LVÛHŒ$tø°ì¼1[¥C,ƒÙ®BA­¶dÑŒ¤ï®ÊI£D 7©y–õAƒæp§h°dWê¢ÞþÄÕÊæR×Úåã“oÉpЙè›Ô@óÙH>ÝìŒÓº™ÿu>¬9ì 5C_£Z`6bd WÛŠa|°õÅ R£ݰík´6¬a­O8Dw5nC®ôÝòûy³œûË×sV¦.,Œ/èDëB˜ÊÃz¦Kz–w1™ú‚ɶ΄˷³ §<ü”K‹Ì< 'Z˜ÚNQU¼Sy ”¥‘’<ð÷%>àŒó©ý\jÜO¨6€¹²‰þ kè|ìöA\¥¥ƒ¹.ú–iøUGƒÅ<¯[ƲÛsþ惧Q}ôrûâøTPÄú¬@pb›bøg|\Eëè%Gr5¹èÇ/êüJà 2Gêô="I$LçðôP¦QÕ^¿W²”Yé0©ÜI–2F¢SëÉŸ i ‹ô{>ORùòÁ_+ËÊ—³Î‚®nÙº'LÚÄ|\IÏ0ù5悹lkrÆøÐɲ|Puyp¡Òâ‘Í×ðGVêò‚?2P~Nü®ñÓ‡x)ŽÃLog‚ItL,Ôð~„”É›¿õ}3äè×R/ºh©¹¾…B÷!’›—'e§ ɪž®juB9¢ÂŸ?¸,çØKød`f‚*x è`¦ûÂÑ>Œª„lLÊä¦À¤«R‚ntzÂÍ L–Ë~Óuƒ0=ÂL9ðháì1ƒY®¢¦qƒ”˜hš,t0Ì^Tiÿl0¤­ Fø“’È„"G¸JCyÏ£7µ÷·Ü r† ónl¤ì\M:2‘¯¶Æ‹ì80@LäÒ­MõQ®ç ”;˜ÅMK©;Ô§3àÌj1ÚÒ]z5؈(½fþø"TQÇŸ7a}m4V‹Ù1çER:ëDÙ€·F?vr:%‹$¾¢”-n…™° ð°-›òa®êa}÷ úÈ<õ;Óƒ<åûã¼ÿÊQzÛõªÆarhÉ_ÕøL yÉKsn‹%p÷+ÇÈ»Ð(y»ak°­m¨5Ð’¢°Ù8 ×Š‹Ân««ˆXÆDìx¹Ì£É›ñxº= [s'.̤þErTyˆ¹üLºÒçEYSßhùº€ˆ-rx¼"øåv5ª(³·ÛOmÙ¢lÉãlæ[·¿Ê:ðð ºCÇuxdTë4‡ÝV—$Ïöý^OIüA\ì»v©Pp¬ ðn9òû ºx¸ºÄÕ–T·)­\VöÎú¤x­Á§à«t¨T÷¾ŽÓÇ÷@ÑÌž)¥F2×!¤÷Gø~UÿWФÒMÅ?¤ÈBYys<žÎ„G§ˆc‘|DÍ8œ¤:âÀJÕlÝÚŠÐzB\Ij &ç§«2º”ó¸þ•ŵàD¶9¢ùfRÿáé|™† Ž9â?…Žu±<Á…ru[Ìv«^‘9º(=—mY7̧(á8kÞ“M<äY6 øV ðZõÚ[HV‰¤]¼ãoÅv"ù¼’§¡í:èÂbŸÕq(¿Ùv®G}ù¶„‹=0›7—‡ïôMߘŽK­Üμ‚‘_.?KoåS©VßÞj`¤¨¾|c¦|Üs¿S¿­²y›&TÉWu™‚Æræ½5áE!6tß\ôó(5½JRfÌ'ãCÊ„å9×»`úÒ«ÇË ôj¡ÚùæÔI µÐI¿Kd¶Ùýj P,6¯!fäÔöÊeðE­³I–™³Ð©`þ}Uв×î Ánмb¹¹Róêð|ùêܱÊS?ü0åì¥{lQúü–©rï}–ª#¡¼ÿÍèDß@ëéMmèýNUé|Í4¹²ÖY޼?ï8èLc±Ëp1±¶Ä8Ÿ¤ír¾ÑòjÄO¸6ã.bçã¼1×¢ùFRHñ‚BÓ=kã¬úr¿Å8kÙƒN7ŠñÒšÞb Ixµƒx¨Š<“6{çÅ`ÇWää+)J:'Iñ Ùç¨ÒýjÿÁl€œ¿UÕÖªapŸs“º=ÝD9ï£ÓzŸ¢cbõ_Ó &vOÔñ¿õò¸ÞÓÌ3ÝC2w§rÛÊ…ñˆ‚Fÿ^Ÿš&©þN8ÏĦ…+ “&ªò/îüÓý÷®ªêendstream endobj 1123 0 obj 5177 endobj 1140 0 obj <> stream xœÍY[o\5–àmÅ>úD¬ñý‚R[‚*”…—ªÛ$mª¦Û6$@$~<3>¾ÌÙãmÒ4EUêøŒí¹~sÙwKÁåRà¿üÿÑëEús)—¯ï2ÿ!òÇåýõâëÇÚ-#N9³\?_ÈLo¬åÒ-½V<À‡×‹'ì·aeyˆRZvÙ–çƒæÖ¥Ø_ÃJrçœìdPŠá#ûgX)£€B1ÙqØåÞðÌìÛUÚp¯"ûyðÝyÍ6#©–m»¼lÚòl <+Ÿ®)¥\JÉ#l ”+­-7n|ôËõ1h@”¨½2ȉæÂĨ™ímʺ)èg —V²ï‡•à^R†[eµg? >r!ƒa÷¹B³ß åÃ!Àw£[£&UpÖdæ55‘ò° ÇÃÅúÍri) »JâdpÛ–U¨´•í’ ð ×Ë—+éaSÈQí’ã¶</Ѱ|>xî]PÞ|ÙH›£H Ads2‰ñåoñލ¬q=…ðÏä}јÂrpÑ{–½lK¢ã2x¸ \Îsmbæ[ ?9õgõôk„1¶°÷ÝMåøwX·CèÄ¢J #¢¿ÆÞ´çÖÿªÑpé’äv.™¥êH|;á<;j›çø rà‚£„FEÇÞVe\´M¢7õûvû„‘“5† Dƒìtâ9 œ¬+Œâ9g]cã)ÇK>±7ÍŸ³R¤m¼ÁƒÁNFˆÛ1Zƒ“­IDm-û±»_i“SR@œj­Û™Ã¶ü ž´`?cb(G$BAб (ú8Ñ‹BRö (¥Y!Ï="kÂ5á«¡ICc41æ #èÜ-4€C,DO¼rדÙ/f®›Õveû Xý¤…Vâ/*?±ÿe/äW”[•… ªúZXœ£Ú!qzG|íå Ý´7àõ’ªöN&VSÆ.X©„Ó™ƒ\JËm}‰úwÁ*>zW3Ÿ6I'7Šg] dðM£}Bž9M—Dgß,Àv*3Ç“’oÊL:µÉÌúÞaôÔm¼S[òõÐÅ<¼Ìr5ÅéUÍÅPÚÊZ4X'A“Yá–“K.Î(ÇzÞÞ¨^ütNVv«1žd4»–À¨îêZ·6gÆØn‡QUdbºº}‹!{-Fk+‘‚4{:‡ þÇÎøÛ–piïž”ìÝ-¥!s~LS@à¥U ) ƒ°M•‚ëw5jΆC,‰\Ö?­b3x®PÿÓ²ý\ìݬ.ò¼Üƒ´¼ÚcœœnUv?¯š›]¥Ò9ê^Eh[YC¢~RµŒI7¡yB$EQtc­Ò"À«rÞ—¦É Sà‚*Ej¨WE‘ųÙÄ´è£õY*v÷làA9ÊÈ)Í ¥ýh2ì"ÕW!µž}Qú¬+ÝÞT»JèϦ‹„ªC™±û2ñ½ÎE›B6s}Ùñ¨Zƒ\EjÞWÍ'»íÇgàSy3Û4ŒºÇ¦Ÿ,ýÏËËgúwdØÁ­íè¾'ƒ]*ÙÛdPuó šGo¢é1Ù¾GÖ”üÁ¨¸`È}½œp÷év®ùn¦%—ö««íÌÿmëOaÙŸp¡Ž„üˆÌÜv6ÁÙAý*×¾,íÐOn”¥WÑŽÔÓd|Ø&WMó”E‚¼o»€Ò"¿xuXø°ìÅ‚ª ÅÊ “Yn–ÑVºñóIýœ2G^^´åy[nº´Gii¢H¹ÅF {öK#m魮ˮ¡<Óm>§9䇣·‘ÔcBû}Ý`²¤£`éî)Eû©ÏL“ñškôQ¡3ñ›HÓáòï!MO‰d¹Ö{ö¬ ­j­½¿¬ØEŠ­ˆÙ; ÓšKš„¯«Ðú#®$(ÇöÍ}Ø`«›D÷±_6sÐk¹oÞ´×÷Ͼ.;óºÉU&‘Êàªì¢Þðg6j'‹¤ðÀóÛ\ĸÝÉéhµ‰,³Ÿ2-ô 2hÅþÆWXì¼Æ}<¥eƒY<Ù(&oÍœ1Ͱȵ¨"„–ùÀ¥:G[h™TsÕözR|Œe±×ô'â¤&iu÷Yoº¤óùF=éÐref´íµ!ý‚ãÏ ¯›ZìDØÃõâWø÷ã’FEendstream endobj 1141 0 obj 1782 endobj 1187 0 obj <> stream xœÍZ[oTG –ú˜_±ç î0÷‹TUjU*µjÕBÓªår!ˆ„…¢„__{fαÏÙÙl6¤ñ€™3ÛóÙþ<Ë»…j!ñOýûàl/ÿs¡¯÷Þí©úY?.¾ßß{øÄøEÉkoûÇ{ªÎ·Î åÁháÃÙÞÓî~éDLJ¹î‰ç½ÎE­»Ë~©„÷ÞÄî¨×ZXRwÕ/µÕ0CwŠ  ÎÝ4ªA§î×^ÁwL÷¼LõÒuošº<'ñ´—`«žíÿ V*µPJ$@+—Æ8ƒn†û‡` S’ Ú¢&FH›’é\kPƒ†ÖÉ åT÷¨·ÂigB÷¸wB¦¤U÷go“pRšî»>&áÁ+Ý>zLÇKªº†_Š KÐü—½ýx`‰QÒv×Ùàˆ*½!ñb´=‚wâ”Ç›¨ðÛ«”K`Pªâ´É­|WFc¨¾ÎßÙÎì'ñ‚DXæ’Jûî€FOH\‘ø~.Ú$š8ˆ+/H$bš AÇ¿Ÿ“øŠÄç$¾oŠlîAó0MbÅ*–Ú “>¹çú¥>x‚ó žã•k¬@Øêä‡Ëðóàz Ä×òO¼¿Ô£„$Yºx»¶+F#3Š©ú¦U¢æSñ2 qŸx ŸŒjMbHX ÚSj)´é>Ò…vQDG‰cXŽå—çÌ@ø‡í9ì¤ýV¥OçJe¯½ë?Úïb`€ŠrŽ›£ÈF˜h°*98Dô;FCíÐcfÛâÕ¾€¤)™)œxM£ìe”æ¶жì„Sô+dÝ`ت CB³]’(d;ã3Z•&º|¨†˜ R³åëeOº©Ìå£-Â$aˆøÄx2úrÝèVpöíË4dâªeB.õ.– R‰K5€'˜(AÕã%à«Ð'¡Ž7€ž‡ú›Jù&1yŒW„JÜö“fª ôÄ Á>*å×’ÒŒ1æ+ɪ¬ç¯ÌsÝFòIú6Ùÿ¨5Pk‘Xß•þÛ›éÿßY²àËßDZßJB²®'=hb¢LC'àmïÏHú1+y8ëc5”pKÑFu¿Mù!µaïòÅSþ{¤Ô€ƒFè}^N­¥¹S{ ÍýœS_‘ø¶IŽÏ'ôzàÔ@x½tw~2öI¼ô/"ph5ñÏióÊ›Éæb’Ío"ž—½ŠBcc~›£r²NS Úôæ5a(7€šGUÙ5FtÇ•*y[‡ºéƒñû ^¢2¿~¨À1Ìh_|Hƒ´«/4­‡MAézž¶ŠãI¯oSžâÝŒÜ%%‚§`Ô:ÓÍ{~M;!A1A×4¡÷Ó@Ti EÑïÒKÒû;•íµc0Œ²Íšš¼‘"Ï›vB›Êž–¼ÝÚð0ù;(íˆÍˆµ*4£€î¨x/« ½cÛŒ °âs`‚‘­î÷Q ©ê3EîÍ4+〳+f¦Åf˜{1 ¡’Wå‹ãæhåv2…ùf¹ùäýTé0Š{s‡á‚v”` ÛÄ@)Ù̳’i£dZRà¦{ŠÞ÷•bè% Dyo¶B›¢ö™i¸²ÂæFlfM+Õze;V¸tª½Õ×eÓ¦Šõü,Q|˜ÆÀø:€¯#šö1Ëv5~~Ë•›eYôÍð0… iÅikT:ë°SZ`;° )µ'(ÀêI}–~½PÖ1ÎÍ7¤¬¶¼.° î57°¢‹½túß{ÂóêÊhÊæžh$y{ýå]жޓoï.Íð}\Rö®†`M/ôJaµßW?Òòj…—Áac0ÃW°faÏ5}‘ö_ŽÙ{P#óã”E—‡BÆ> stream xœÍ\[o%Å–xÜ_añÂ9Ó÷î(É$HBp$nQd|Á›õÚˮͲüúTõµº§æÛ8$âÙ93}©®¯¾¯ª{üÃÁ<‰ƒÿËÿ?yþ$þó@<{òÑÿ1ç>8zòþçÊ„)XiõÁÑù‘Ÿ×ÆLÂ8%'?<òÍæ‹í¡™|ÂlnÛåË­šŒñRn~ÜŠÉZ«üæl+å¤g6?m¥–ð„܈öÒw§}¸^»+•žœ ›¿lünÚ§Gíl6WìXŽÛååv†IA·âŸGŸÂ,…¢³¯?ož¶K`“;-w¯ÚåM»|Ù.ÙgO⥳+ Xº©ÝKof£Ú]Ù.]»´íÒ·×<û€cSí5±¯‹¹^¢ñÑz‡ÂOͼn]œ»£uÿÔîµKÁ^êvù¯vº§v]^bóxyÎÞ埽j—ýç&×­”ÝgýfFºìª{–YJÅ^ò‹FÚÕýZ§á’·;0Ŷ¸ÎXÌK3©ˆ>ˆM¡úÇ·‡ódC°Êø"Ô_aX³³¶-7_"þ¥ÑWóZ["w¹zói‹ ×õ÷«3p|5@Œ(žZBÊ[ó‚³NñÓNGzÏNÂÍFô†ä¼Éãˆ_´6Ïr$Ö¯ëvÙ¦œF¯f'h[än7§¨-½yžì$LƒÎHº!LR<çý;|¢ª¶Ü²¹©>ØxÓ†r\C.½»6ÖtÅŽJÚÉ’Qýaç¨Ä<Í~åánàh°RNÓñ\ÔAeø¾Þ|ºçœ¼ó#®­UÂ.¡F>iw¯Ûµ9¾¬¦ßœ’æë@ª V Gz}U™áîê¬Þ|ÒÚÇX¥A%µ¿©­’AÝf×õeú™£Q( ó4UÒ)*Bìïl!. ®6p[\*!³Ç'ÓûNH_ìƒM 6ì®NËøì1¥Ù¢]H³ ³GA’ìn´pÙîñîÓ-:º&g¹j¿·fo*îFNS.F ·lQ iu‚ÖÅø=„—Íe# ʘÍk÷ˆ¥zK }ül7ocFÍ0ÎwëRŸpÑ2? ÷ÞÃרG»îèÔ0âÔÇ+ÿiþM$X¥ -°¬Ô>нàÆòàÐCs X"|Úf8Œ€)®›go».ˆ ¼Ìƒ NélŠÎ+FÈn“×é(q³Ó]Ò%NÆR]½.Ö›o7 äs›Î{Mž/ï¢íææØßnJô€NŽ’ÂFŸ`pf)¼‰õÙðpÊÂ(ã0̾šrˆ3örI|Ü­£‰8ÌEz$Šh×ÓŽ` Ë‚7oÙ”¡®†¦S¾®´ÿskàŒS"õIW×mÎBzª€zþŒM9 £À€Ê§¯'4ò Û(™õ›fïâ*hpt%bHîbB¤Œàyv$”Wˆ\û^ØÚËÄRÍ“¯ì^àÏæeþÕNÁaÇÔR©©ÝyŠÏ@¸/fòÔÁ²È2oíñ¼Ìš0—¤B‡X®öSeƒð1;‚ŠvA½eñ—@Ù8™èoÀ[Ís(³y×ÈqF>‹ÐN•z ‹ëºV8ó¤ƒ(½ Òw—5¡äEÙùâ£GMÔ”óŠSL“¤¬úßèÃ÷lA3þ-£¯F«@:ýz+Ĥ”U´ýÁ»õ}SƒÍ[”0šÉŸšÎáišLU¨¤ÒWöŽÞwH,‚Ú¤<Ò.áÆb&Ð;V®Ð®›5¬î=ô*AôTuAÆ)ZüˉµÞö€xRtYèmã3‚+&" É]×ø 7¶›/Œ.Èç ŽoZ·ÿnþp[Ý’kÍÇܳÆÊH'a/#/äÎÌ̓ÚYÐQ½dHˆj¾Þ§ŠƒRo¾àPJBÏEãF^Û·‰¼ߣ/IXø¡fääçRìp–Z£¤Ö3"(¿Ž²=xðÂOrž×ÔÞÓÈ %¦¬«(!K“žò3ã÷w&?õõ ËÍ8«Uͽe+2§KJ`¸n1¦Ý\Ô5ï­OÖæ½äɳL³Óë‚ü䦥P{-È—MN3ÈP‰Ë2;:ƒœu¯TKâ÷#)lZÂå²ÔPUs˜f©îÕð›-„$¥s€ËíþÜ ÕŠL´Év=Ó®€¡B‰P-©ïä5Ð+Ù^âÀ¾ïê¼€ïlÁÁÈÏÈUíÌ]•2x¬°ƒB‘£¶jP()௢ƹX*2ˆk°ÄL&øk' žMÉ"Jc†C†¸y8(ƒ½Dœ 'Î ¹py´,¢èäV«#?f¼Z¨!&[T@ª8WnRÒ¬“yöxžME뱇6Ö¹Iíª9,q–Þùã ×¶vyH %‚È»ëU›e¸ü[®Xh¤‚Ï·21m6%þûi¢R=¯Túºk­ÿ VªFY7 oÇM§ó(\Å&ÑË‹ÐéÃd$ðižño`FÞ[(qßÖõU½"ݬìäŒQ€,‡ü”â“­‚(<^ä•ì "ýN‘² ‹]kÉ7Ÿ;W%ä£ËNO2†Æþe¿[è5ÁÂŒà6¶·¡ºHï² ‘·¯ªîpÔ›0zïïëZÜÖwÚ¯‡í‚è›N6+`¨ùvœb·¬ÿ±ûˆm§ wm&xkÉæÕ›¶_ÄWÞÏX…Q$>œ·¬<,ÐÃÎFœr¿·POAX/};á5[8nqûשÇŒq6$ùÅYô#aÈùŽç9cÁW]T˜[î8ÉAÓ³X—ÚQèN_@¤ÞÜ%ðGænvVtƒxuÇó¥ü¡,™Ô¬¨""»É},V%7ß-xÙé±”·û—2kpw~û©õ:eó[U6ø•1ì¿þ/UÅ(³·½b&wxÈi±ºB2 Ðñz)[ƒ 4s6ìr 95»Ö! ñ€ y;:ËV„ÆVy$z<ê/Ù©×ݪ÷®ØÉ†è•îÝ EÜqËq—€èd² r¤gkôwü*Y›7/6 †KëcS¤R2ƒN÷³*yþ/Þ*[œ(Å‚þqoª||t¹™€Yè“æ£È¤…u¾Ü¾oc÷rì*.ö3zT¶Ð)pÝa+o‡ŒÏlȪ(‹¶4Ÿ9…VÊÄèkö'iLœ´ÑÀè1Þ¸™Ä›¾&‡’in%&%v²ÍWÛ ×c:aóáæ/±|—ÊØ³; êá »¶EΜÒqneœ?üùl¨Æ'ÝE’ç6ò ~«¹!ò$¿~ø‘“Fè)Âh¿B}Ä™ywº ¶"×wÔPßåÒä Ÿì^²±{´e³.ØE@è An×Ñ÷a¬ìéN>ÛÅþ¥ƒ‡©”)»¡Ê.‡u5;Ü—ëó‹A2¢½s~¬$Åæe1zŒ²U¸] »¢*ø×ˆ¯“È–ø%[àIÛùšIJ¼Ú—‡çC%qqz}ñ¸@¤·m­!%#Ÿ‰Óú£œE§)ÛyëeRYïz¶ýV뻜Ê*í’ˆ#5ßö‹ÙÈc …ÃCO¤P³KË–f—C1ûähÄÇ5B}’SO ÿ´Ê|ÈÊprTü»X` .Œ¦Ì'¯F«ÑŒ¼6î«W.™~oâLÜl…µÙ]|òÀ}6é¹fsN-Ûc~±_$U2Âï„Ô¿ëàš"a—±ßöäS[l}Tl‰37ÕÚ1s†‘$ä¿ôdÉ=Îq/öÒ–‡uK«EôØå³|¦–ºšC®ZÙ!Xìc Ñ¿™T²ZK—¹>f í4Kd3·ïÈö¥‹h8¤Á­ÊŸ›æ9ü„k¿mM¶ÄâñO«.nǼ ™×ÔfÜ9ë6¿£UãõkæSCªÞ5D@Éç<„ž 鲆–üaIwæ“i”ˆÉî3Åt’N>”Jš§°¶ÿ‚ ó3|en%»dê|½y_ôàÃuº—Ñ¥DÙ²VÛñÙÔRçfšìFðwlS8Ä*‚û|ÿ×v`kõâhúVMháóšÆ~ÔŽZ~\ñQ x쓟÷ùp|ßz;ÁIûŽÏ©©wï±gî ÓH}ëûf6zÌo!ø²uÆ™Ö-nÉ‘Úò¡Ã}ÔFuTuîzRÑ?jñ„ÏkÙm¤Æ*f?//åðŒˆWÖ»§ø,ŸávI\·&p…E?¤ß‹ÚÙ8‚ôÒ÷õ÷÷2îu7™6XDÅ=WË8 aqe€äýËô@Hy1c r÷–öU8þ•|"}ƒêÀÞÅ+.´06M0=ú´õU£ðH".‡-¶Ší_a£^YÌÆz„TÔMÚ¤ù1_—ÈAkăß,Bh×w½KTŸIÃÁPNFžG¦#—ßûIíÈoKwÂwOè»Ò)!–zÈUZB¾l‹`àÅš“Neòä‹- YÍñDU¶@–‹ ;°\#Ò_ZÈü5úÛlȽÛ;¬€@o¡óù¹θno%õ~†ÑÎà®)ìËÐxî`)8}ï§ ÖÁ•þyŸ5Þrh'7y\¶¶Þ´¶îD¢£ß Q6¯`ý>Ge<ãø!rDÁÒ`zð p¼5ÃF´@ÔÖºýja²\_ñË•ã$5"¥Ä»H=ýlÓ¦´G¾]†N›$-¶T{ìƒ%ñƒ%Ê õêó¼HJ1n0D¼q0½ÖÂr™€˜ìXɰØiï%ŠHeó0ŽV‘J\ ~bÂʳÇ(óôÇaFo{Áb¶yc: +'m1!‘ÐÐìü¢ (³Î8èDÊ,‚BìàYªÂ‰1¶—xÞ^zY}°‘ž!¶ ÷U Êè÷£Ú+qðÈÇtÁOªÿW/ñc¬Íô*î  ãïƒt®Í<ó`êמü‰j7•í.f3Ú}ÀR¯=£Ã,S«-Q^»^ ”'×ѳ1š)+V ̾&Qࢵ;Ò6AHštOU§¬×§&S^UL‘ëçZ¼ŽÚ3?lD‰½f±ÇB;‹¤é¢p™hs¶7ÄÐåñô3âªÅH`}Md"h.Z ׌‡Ÿí!–cvÅ–Ž9H»ižý^Å•"˜+‚´4jÄ€î>0ù, Ýd"f…™_e”H‚’ë<ë¨N'†L‹üÓc£*½ãf‰¬tLP´Ò,qè›”úƒ¯.àÅE rŽ’Õ•79Ì;2šKèžÐæïB÷Ó-bmêtââORBjeã'6°ö*ÿUDÕ2?W/ñ펞üþû¼~üendstream endobj 1233 0 obj 4573 endobj 1255 0 obj <> stream xœÍ[Yo¹’7ýŠÁ¾¤Çð0Í»‰ 8»ÞÀsm´‚ldÉ# –%’mýûÙ<ŠdµfdkøÁtO7ªúª¾ª¢ß®FÆW£ÿÿ>~}þ¹â«WoxüÇ\ýéðà÷ßK³rÌaÔêp{ÀãûJkÆÍÊJÁ&øáõÁ‡­7šMŽs=ܔỵdZOB ÖÎŒ1r^®…`j´nø´Þ%à 1ðòƒ§ÌÁvPKO…TÌ 7üuÍáwcåp4¿jF=\’{9*Ëõ‡‚eùÿÿ§ä|Å9sðÀŸr#¥fp`ØSÖÙÕá PÁQœ´BùH6*çä ©‡ùi½Ï!Çû\%!Bð¹iù‹òõQÙôiÙ´¸bi šþª>”u Œù¥óçý£M·6’äž&8Y{‹Š3)’Ó¢E}Mž¥–O0z÷¬[Ö Y±Ç¡‚oU4³VósàK>”ß;´ØK–ƒÕST·ä‚KæÑ½BµŸÍÿ^ó\ L€¾ºhå†'QŽÏVbl­°ì0nËk`U°áàB´‹À=¢<B v1? ñ?²>Ÿc‰ùð,ÏðÍéÁ›<‰'“Ãa :1þH­‡ÇѪÁêJÈ'gŸg2 ­ÿ¬¹ä`&|íEh56dˆIZGÓ‡ƒØqœ€“|vj¸PYؽçqOÖÀ˜”rS<‡ÿ•زä»õÞ^+Ž|§Ï@øCÓÞ&u»áEFZRP¶hÿÕ1&ª”fü¾ vÃǵN°1SóÖ%oë78fø’ëß³ ý À3j¦9l:hÏ| ²Võ`îƒ$èv Áiâ@Á·e‚H¶#‘ÛÄcm<ßÏ´°˜ KÖÀdì¨=‚ùÈävr÷%mMüïV,½^Í5ø^ù…´¦ÑWXÉ<€ÃÒLˆÊÈjÓIØ?˦…|p‰Î½ E¤df[fEÊDºzíß•p*lÆThAî>‰Rh„’Œ’dÙÛ5ø '@(G$ ¸ CóãfdðeBÁNÈ£§dœE&Œ^=&ýþMµB-nˆ²¦›7 Í{œ´Ñ˜?bR7à¥1…á#i²…Oà oó›3°¢¨BŒ Éœ—XŸ6x‹G¹Üi£ç@CÏ’J+‹ ƒ¦í¸]›®ÐL1a¤©B“ ‹óBÎħÎOb"…w¬Ø¸£›¢"{ÑM,EÔ]~}•8 Ìo‘ÏÀþ£‹¸>Ð=+«ò$S•ÃòæÓèãá¬W8 Þší]à´IàÂ1LX²Ùn³ W¤-[.Í™Š=_¥õ €3úœ‘ÀígüyF×,ªšÀåbÁaKºiÚ#lÝ šÁÊöF¦?á åâ‘•v9Q˽)`~5'Nh݃¨¶F¼mQŒ-»&S¶y³ç”K3‘ÉŠ]î„)%줸÷Odò‡m" —L@gYè§ä ÆHEÞõ¥³°Û;Wȃ:ç&ž—¶Ü9/ŸM#çuN¸˜<azìM*¶ÎY´•ISCñ¿#_±Í轪 ='±¦/u„èR’iU“¯YùˆÄxÖî+j8d¡Û¸p¾·”‰Þ”¯Ê¬ÑŹ#À„™Î©s˜þãšC®jf£ LF#©Uûðlß{Í-™ýÜUÓ™—ÙgÏ]ôg2¦ö¤È½„"F3ú,Ëõ’Ó^Vx˜±£– s‰k 4^’r Ž€H¡Ç%>…µì¨„Xö¸³MbEåWHo--Ô¬ÈÍžÖç ‰¬~Ь·¤×(ʈô®£aQÍum¥–ËÚÁë÷*ùΞ<毼vx•ËRFü`FFV ¯+3Ku…£âÞPGË÷‘±8yôQõ ª|̽ΗèHùœ®ÒeÓ®J £×ù_G@ ßäÛlÿ^‡XUU ŒqŸpy7c\Ä€O™Ç’5 ¹`ï%~˜·KfyÈ' rN;J0 ¢¬³¼Â9ª¨–P†äTQÅÈßÔ=J(T¦k±÷™ßlèÎ5M8Å*i(jžunÍ?EèxAIkæÔ4¡ænWn—L¾ª˜ ¢É•Œl°”[Û´&þÂöjv¾À\!€o¬3$›!Êy)52•ÙÐçt”-ÕQ~VÞLEDã4~^šÎ? Ç©Z­$VçIŸ–dCígë0Ó™ÚEI«J‚t‚U•–&»ÁÒTÝà½{пi:Ha=Er5…$[Dô¾T`z{v©»Î毳AºÇ—m#¹í4£V4jPûžrl[¿^S]é÷í0t‡Ï×Tº´¥ƒ—ñÛÝð yò8ÞÌOpœ¯ÊÓë2<#ÞÕ±7ßž µÞÑÑ¿ZïߣüÕ4Ækù®ÍûƒÀPG ÿ•2¢Y[!„øÑ5©e¾|ü„µµª9÷ÅîF¢òVÃ&é€ûîb߈îíÐ…R:ÙEOsûIUIôbòIÔy¨‚M̯I©åV°«Ir¤T–®ô   ËdÍZ÷çÊ«m“ÊšËw1bÛUé»m‰‹È9”žm+T.J>‹8ul³; T8ÇDH,íÁ¶=ï[ÎàÎæ ‚¼v1ä|¬eÇÈáuÚªùÞÔŒb"^=)øEovWKÚµ/é:lïzw}’.*Ñ÷gÎÍ5&z{¤¯óCú œ0L}9çùEÚ×ãØ\ïºOËCÕ )—Nµ][ý~}u^¤°=ËðMÙ*Ö#D_z)™¡ P{Új[(ÎùŸ¥ß¥-EjH¦?ÏRîp)½¥Ðì8z„ W8Ø A\àᙬ9í¤”w#ËnмœÐ’¥¶Ê}R,¥›h*äE^•Z}SpñQãI ÚqÂmÉÞG/…—³wdÖK—ÛRüëê“]¸qóÇ®÷èROŸ†Õ>aÝCEºñÂa—+J‘Ý”-¼À¸+¤yŽ‚`8…’Úôf!Qp‚… u¾+j&dft½ hÒ@U±Òù›ÛõåwoZéÎ`ß"iï¢åÖhUDõ7šUw#zÅ2ªºÂQÙ&3 óI?Å´$Ï»t«v/h?Bt·X‰ WM[¯æg÷‚ bKäYÈ/éÚª0¨ŸÛI_2ϵ¨´UÍ>øS/AêÁpQn +v[OW»ÎA}AÊÄùÛˇ—’¨ Þß)®‹Üt «i­ÅuirIº‚ærˆçÞ¶J‚èÆvñ U½™¥^ÇÚ]%¸átËÕõ¡-* äѱõsQ©¥ˆH$޾3ñ µs²é£+¯?I϶1Zg&±¯ïjNðW}“Þw¡œ¼k¸çÜ&‘ªFs¿J2™³M”;=¢|ûj?ñ‰äWßÅL îtÝr^Ô»j:qÓõÍÚr-<ßl Y± •ØÏdë÷ªe7ä]5ö/`ëHÙäM¦}þÏC¶Ð™Õi\ÈìðË—¾ËWèÒ=]ÑB¡ RîË‘wÒ霺+r6AŸ¬-Ö R ~›¿¿i½w#_RÑ~§d’õ•à÷¹Xm¬a‘WɲÈT¥žOþ þ@ÒSÃendstream endobj 1256 0 obj 3160 endobj 1291 0 obj <> stream xœÍ[YoÇòÈ_±ðÓ®¢MŸ3 YFÈJ"QH+KRmjIɤEùñ©>«º§f—2)(ðƒGÞîªêúêÞ÷‹¾‹Þÿ—þüî üs!?¼?é}úãâ/‡ž)»p³ÒêÅáë‘Ökc:aƒ’ÝxwðãòùjmºÑ a–Wøøa¥:cF)—¿®Ö¢³Öªqùj%e§ûÁ-¯Wk©%¬Kuð¶spưÔso¥ÒÝ Ýò‡•€¿ÛA-7q©íÍrËÒ²ÁdzULÁ±â?‡.…¢\®•0°ùhëôà†Åá 0øçÕºï¬sV…¤»Ñ,OËNéÔÑ9µ<ŽÌaÉQ‰–°à$>Ž£,…—$c\þØrJô:}¯¥³~©4º3N/?zb†¾­X¾-{EbT?ˆL‚³Þz!ÛnpŽ{ŽÂx…Kñ‚:elæ¦^zéÿ’’äÐM¸MåF¸b Z¡D¤TõÒKÝ ²¥4‘=ß­Öv4V-/ʦgÈ !ï²zOpä« êØ%ŠðOäYÕ®Sƒ% ¤FÕ²Õµ½­@n3p«Fë¹õZä¹ì5À#hK¾ËÑÌlOvâÉ>]I½G¹f®^ÈÊóÌ hØ&7œ?;Á·Du#‰Æõc&ÑsÌÒuNÑ]>û” ©£›íqdãt9c¿ƒö´Ö y¤¼` l/£°/X„S’{_‰€4+³Vóp R(í^o¬è´h±¯`ùr‰×ýS‹ýÀ*V¦ÀÈLw¡×ÌqN3 86,8’ê ²¤çF»å_ɮ֪“N¦ ¬R½—Oüb݉ÑÒÃ&¶.°ós_¶Òð†æå õÅ[s%ºNx´›LºdJ¤5Ý™C",ï¡6…ß_gŸÀ\(W£ÆA--M‹Ÿ¡×àܶè{Þ oÚTª ^FŒ‹…Þ͘ޣºü\|™ÅÇëòÈ9-YLÏ«•èA{àF¯©å.â ß6Z<5áëœõ©÷áë•ÅÝVB ·—;½t%õc8.\‰ÑÇ5À7¬?$;­ƒôþXiÊ(r­ìßÉþÄ@àþScí—VÆšƒFÖÔ7þ3ãúåK\ûMtŽÚ ªÙžŽ|ö ú*½ô:£ð-bx’¾;ß„s3†¸gÞ¬ÔÖÊ€Ì}†Ç$à",Þð÷fŸ`6Ÿ`o†ê¸xô߀K ¶'£`Ô »ç+P:1šZ]kË#•ê„ÔÔwåGô¤ ÍŠ±öÛy%¡+ÊK IÕ‡ˆn›ÔÇjúöµçÂoãö{ûà×àž4AY"f²Â,a†Ddd¯äØÊ‘°èžãô7Æ« ÜyâÍЭÿ„8;ÇÇ«Ä2`îŠ"ñÉ/êx<¯%‡]£“Ø´@m§¯»µ êØÕ£k[ =E¼¸ÕÄÒ&H¢ÍSqÔ“Hƒ(î·DGÿNžŸ— æªö¿Vº÷ÊX¡¨%& p(…ëÑùpµC+€’: ¶t‡ŒXã›iðî±Knã´qAÉßyë°³0NÐwßæù¥·e&ȆFyD7~Èo½È—ë(;HnÄSLí?Õg¿ bóbÛä-z•ÉCÍ €ù Ù+S~]Üä“,êa ž €¨µÝ­¤»/È}?%Ïߣù·§WuÖ(š%Τ–3ñ`ò´Ÿå90w$›!À‰°~ÎãBmÕ›Ú•£Rȶņ¿Z_:÷·8|rpxïLJ{Ñ¾Å»ÉæÎü¥·ùÆþæòƒèM›%z•ÈLúó–5Mù x!1o¤’­®Žš¾¼ Ï+Î\”ŒLóÖŠìO¼÷gZI} MîÚªBކœfLˆ_𠃨#Ê@¸šAϤHsÕêqDx968¶ïJ”ÿvB r-¬…KчÙŒ‡·—h•v²pÚÛO\òpÉÆïbÌ2‚Æ’¯8O禙²?‹ì•`ú-dJpÐÐc‡«Öƒ5éIý‹è[\Q`Vqd›ðÎ ëg|%êõjW׋*`!K‰‘"Ç’ø–­¾)/ –iâ¡©zTKUÖö|â~÷£2ô½"¢ÍªŠ‚öû+! "ªHTEØdLÁ¶Y¡d«£R ÐKg(óG|FÖzŒ ÂÊÄe¥EM.1ß0…œs—´£2m7‹¿Ú(¥ÈÍÌåä|øð¼¤UY¿°<óÐÁÖ"D£°ë†ý[D[•ˆûúªImq˜¢ÙWB dÌó§Ö7×ÝC¬£ù 4_d{Í D0Ä䂉–³ÙnVzÜŠˆ›èç "¸ÖôsÎ4s²)Š&ø x6f_€GÇúQö^ç%xÛÆ%p‚T°’~>Ñüæ#/Ð<Ë…~œb'S¹ˆ¢ÆïÉNpÞUüOZ?m1)RïÍÔÑ€ÔþÏW <Ž ½+Ÿ18»XkøRe‡¨ák0ÉpNçãÌ^{Xî¥(/GúgˆL;aBÈžWæH^¹üÎ*ÇÒòÇ¡š«Áó>K^X+¶Ë&‡d bŒÙë§Ê2`µž+Á]—þÀ˜ÎgKàFKãîá’­_·‚Ô=ˆ¶WQ«ÂwóÔ”ÅЫÆÖåÛÿ¯ÿjEquy¸ý³ÄÀ0ù­™"oßWõ—iŒÄ[ÍÌŸwÂß1\Pì,7î8´ŽÅ'„°/§sânXZ}”ð¶€ñ[VòÌiÐqÅ["óÉl“¾ðrRB¬Óü <‚.yrH}à^=†Ñ씾’·À ÝÅVÖH¥¡îÿ2©`Õ(YÝm+ | Éf¨<…d[6|lÂ4é­—!¾”|Ïw¥N'­kŽ„¬"nCÄkÊV.ÿˆ¹Àƒè!ÚÇæÒ:­„dÅÑTa:a±h•æ!tVî·P·©ß†~E]KúGñ™ÐgÖÕQe@q|´Ó£oô>Å:Ól=;ÖŒm›·…PMÞ¨¡•ú$•WAT]㋞íx]LLY Oiú7ŒjG²š ü` ol‹(ôÌäÑ`¾!ÄœVpBÀçy >²$o«ÒG>‹Ø–¶è–M¤ÕÍ%“Á§çWÄh5)–BïTGÜgXÓâ‡vjÀæ4xŽÝ|‘')q¥n>›æ”–NíLÐeݬ¾æ ÿˆ™ë†SA¯zZðÄåÞîØ|¥ ôdèç&`ÈÕ&c?(~‚†5%)ab…$A )ÝQÇMÑö¸Þj{ØÉ>c©«Æ>Jº;‡ýbÀÿsߌÉ÷Ý|Ÿ9ºÄ$ÿmëL¿‚OZɾ„\\$Ÿ­Ï8R o§÷\)xÒ”1¸Ìý¤Æ±×Ų<òÅûøÂdVðÖà¼ÇY=ßÉX?òY—Ê0vnÖŒk+&ä9;uFGÍfG˜ÃqYë{Ê;ø4—U.³š2T»îÌ+gÙÈìˆó]{µ¥RÒ²€-¸ñá,é(Þ:Dø²VõŽ“ÐY›ÊG)l“ØQ¶õ†O´¹ عQ“\â¾jÿþ1âïlV$ôa‚˜ÏœD`¦Œfƨc˜5€ÞÎ[Esa.TóÉ|dÓ„ñ© ÍOÕ‘!C6™ØoI¡û³J¥•Y ³…Îd`´›p&”‡Ôþo$’⯠ﺩÇG “þÝLá×FÓ3¦ÁH†K·ØæÉaïèÇÉØ^ª ü¾Iw¾ç·eMèQ+ó¦eIt3}hùlT”#Èíï°çÜþº¼›hA“ðçÖ‚6ûÅÃ÷ágf¨"B xé¥KÙËÔºüÝãvwФ«€âG;p:ÚÙŽ¿¶E |¹×0Ì¢h«(Šx~iç$‰GXù!F=Âb˜þ¹A@²Öým\ðÚ4:’–"vt;Ó>²—GW\w5Ï_Ga™+^ÅÉÚŸ¹$‡´ÿøyÞIðq#dîÌ´çd5[¢H ŠJ̓E~È·š8ÙI7àyô ˜Èy˜`J´›¸†ðK06ùqà,Aô+Ä[½`iW`bÖî$€½ö¢"…OãÜ"ÉvˆNƒž¦?„Ô²¿’)j›iÍj+Á$÷:|d:½þºÁ $aæ?ƒ•ÁÇK|ü€WøønU~wóŠÝ v0Ãdqí9>’.ðq³â~åƉNȘޥ·ðñûö~&ñ-îü¶ ãqpI;$gÜ0|eÉáã)>n+Ñ~U}-íºd•ç¢Úá–‚ùŽ•=ÑÏcöž±”‘+{Ó²?àçs ‘ÍòÚìòH4¨¾ÞöWìjT!t€8eÔ9’Uh_]yô_?><ø'ü÷?οRøendstream endobj 1292 0 obj 3402 endobj 1324 0 obj <> stream xœíXYo#E–xô¯-/3îô}H‰#H k!$ă×Ç&ÄÙd“8Úü{ª{fºjÆmceE å!å>êüêèy_q&*ÿºÿ‹ëIúY‰êjò~"º¼Û¬¾šMNÏ•­ VZ]ÍÖÑׯ0a+§$ó°q=ù­~ÝL óASo‘¼k3ÆKY?6SÁ¬µÊ׫FJ¦¹ õ‡f*µ„²x‰Á* ÃÕzߪTš9êûÖ©zÞµÜÔ̑Ü4Œ±â÷Ù÷`¥PÔÊ©R† º1í‚«fK0ð—FpÇœH’¢)FX¨¾Dr™$ù]}@ò)ˆòÈ!TSá[QðLr~œ(©-_’£°h NR¡¨Õªó»õ}ŠPК%¼îš©fÒ‚.=Wïë›–•wõ:rŠ`ñRÏô$ï¿A§¯ÀLynë·y»µDq'º ÅÅS\DF+ÄžŒÖSPº7xõ\àõ«¼ˆŠa˜æ8<ƒäª Æ7Í$àhz%¢_’ß,·™õÐY­aZ[ßfy¸HBˆJ¾Û Ç|†áI[x“(FÄ¡b[ÒÕÚ–@1Çý»¨‹bBê2ǾLÛ/…¡ü;_;p )D$»¢¤aJHÂà>WJr¿Ëî˜3T§œ÷xhÕDÌH% ,Æ2ÀB|µF­pÄ”ë¨\6ÉA}Ѓ¢ž¹>6– eÁ¨.»!Ÿ¸¬´·ãüŠÕÃj1ʯ×cDö à²þ’ä߆:±GäÍábJæ Åî¨íO¨Ï"HÀ3^S^¤Æ@‘(kzAR»g2‹HGLu]JT|7R—Ê–jδ ¹ü”Dƒ÷ã:Š2¥E™9Ý–A3(ø©ÑÌH£\}#à8×ЦÏòê·QQé½ õwÈô×~¿ÔX¡˜ø¤è“Ù <öÃaý)5¤G‡›”*¬ÄÕ©<Éàåˆçé¹½˜…tYõy< qѶd$ØØDŒnKª´Éûi‡FèâO‡5‘–¢É5™z€§„‹×Ò¥³-ˆ²óÄnêaRˈ 7%¸öÀô•‡Mmšû˜(°/çùI,Òp.¦+K Œ‘iû6o§ªÜ‘+$×H^"-ÄXz`ƒäI"âDêÀ]w ‘ $¯2Yôl*ßý¨=ûï<— i¶VŽÀwEgËA³‚iyĘ¹Ó”Ç„´¢} 4M#Þ«#»’·vX±+A];4ôåH~ʘïÏÓcZWËÕª¶;õî˜ïñL§àßœËat` z9p~¯Âj‡Ü^»Ïn{Š«KÔ`ÚþÎöU Ü ž^é(àvûfEReÈð³gLjߎî¹Ï ‘u´{´õï*Ô¤{Œ?C–þ²á g<÷ñ åøªÿÑùi÷ÉÑúrÐýM<šËçO<¢4ñœsœ)v‚—˜cŠI»î‹s‚ðÌ~ĸB4÷©qtߎB6X$òÿ‹iÅ&v+ñËN+YlqZ1Á¹ü°*(ý0ò Wï‘܇œÇ"³§ñd“æ’$7H.‘\!y×s0€ü¼Ê‹¤CòS$’„ëçÌF/ñùŒö×ÿ¿¡ýßÐÆŒ•÷Ðü 4<ÄžÖÕëlÏd¼|6›ü JøÀòendstream endobj 1325 0 obj 1325 endobj 1369 0 obj <> stream xœÕZÛr·}çWì›gXZw R©TűÊq¬¸b‰yŠó°I‘%‰wZÖ‡äÓ¸M70Ø]R¢b§ô ƒ[7ºOŸnìõŠ3±âá_þÿõûƒøçJ¬Þ\ˆüÏW_ü+ϼ•V¯ŽND¯a®œ’l‚ïþ9¼׆M^3ÜcófT̘IÊáçq-˜µVMÃÉ(%ÓÜùá—q-µ„r8‰A/ó°‡ô¶^©4sÒ|·N ›4Ôr3\tϲÁ滑ƒP°­ø×Ñ_AJ¡¨”k¥ ƒ&œiçÝêèüf\sf½·Ê€Q#ìp$´Üºá5vÞŒkͤåj8;iéíp÷Ÿ&7Üaçù|’árþžÎ?y¯ÂñMx¿Z‹)äpþL6"G: Z D.(2m^ŽbbbÒzø@Ä» úuLI3|Ľ.±yŸ/æ%YwQi&6Iª•+Ôz>¢‚^£5 œ&i„Qaß²Ã&,«ÜN7 ‹v{ûc/f%¿¦9V w`eßáE£`§DÞ³y­“lÇÚÁ#JÅ™¾ôªùJ¢r/ˆu«‘`ÃJ‚·F“Ùàœsç„—†É©s›îÍ`3ÍRBÏÂm…y.ÛN\à²òÈt³~xä÷&R?ŵîÂP°~I·"ÎÎâ;Ú´ãæ—*7d+— <ŸöâA‘ë¬Éµø±\&…oó‹¬Ðc'q·r‹p´ëÅ,²ÖŒeV…6ƃWCU€}Ðù 0Ð+Áu¼Á¶Œç@¯eÂqVœ©)#o¸åŠ(°çe×Wog G{ùjtlâ\è¨B½p3Ä5ÈîÁ“µ…Ñv Vt ’ í; ¢)Ù‹˜I8—„C:ó?vÙä|œIç‹÷ç­… Šq“§þu.KM`§ñŠ>ŒB0¥¬*#ƒ„G@E%µˆ>§Ü%Yô.j‹Ÿ›_à§ÞŠèüV0 Ó‰]áü»*HÅC{±ß½Ïèˆ3RÀm €|ÇÙ}³÷%UÖîG\]â$ hw}\ë ãΖÛå•ûÞà÷ÊSÊwN t¡%¾«ŒV‚Èz’ôÊÉYú(~ß[븊xÒ¸#¾ã|²_”jÇŠÞâô^oºl3nKtðfþÞu|â ï’ {"õ€‹>s’ÜOƒÍèâ}Ad œŽlB4¾ÄÙÏR’ªtSE¡t'6C}¹‰HUDx¼¥qcÀŽÍcŒX™å‚¬Éú“$ë@´g&úpþ—qÃjºA6íÁ¸«^ÐŽ[cÈߣᘖA ûÌ($æM³ &J¶ýK\^u¾G½Íœ(¼\%Åá‰`åθþD80‰Úˆ0ˆûˆ9‰ÿY\ˆo°sA7bï³ÔݤéZÇ  ÞÑ'eàL‡»v‹œ¯Äu²ñYÄ"v "Öëg™?CópO0'Þ„ä|L¬Àp=œ(æc³¢Á´òYÛÎï•“‘ )ÆuÔô:åÜ)égéÁ8À_f Ô@ïŸ@¤ƒüqROÃ?È÷ïpÕ—ÉZ&Àó¬^:XH<ô‹ƒ£Cj„$·"6@.ƒ¸ç/[,Ö†ý0\¸ž/ä¾k]n“$rpD$`Ä.Ä⌰ËÁõiÛ“ŽXF vbé±ð¬èh;Òâ¡’žÍ˜ÿÇ'Z{™Ô!)2NzîŒÂMúK~_©M2Lðl<–Oʵ) ¨^¸Ìa€.i¸Ž“ !B´6}¾™?G¨ÊÍklÞcó›õ4ã ì‹c/Ã¦Çæ›Úó®)R2•p4øÿVyœýGÆ® =þõ–s…o)-͵ë3¦ ÉSš«¶ %äjá@MN‚Z'AºR`Œ·–vÎtARRº‰E:À­½{^`ï3ƒûNÈ)2™jR¡&ζú ¬Èç»]‘¤NVGûh¡T TŸa¾§Á°Ð QxšÉœ9تªÒ¸VI÷°3“_š#ô³È3Lï—ô8$ý„â¦KhÁ½pïšô%(Ø?‘­Ïá('Á¸j³G Á¥ ¡UoÔ/í¬óä ÐÕ’¦HX†s4Óœ´Ò’E,w¹-e†À¢ðûø|:Ö ’ôË ~Í··…H!÷Vpú—}ÜÂñÖ¢ìqÊà¬o·*%$"×U‹°á‘c‘µðÝç Ž&)$MåõñîM~*´É`fðS*í®°ìÍMIïqŠæLÉÚ´Øçu¯H“J•×î´\ʼnêŒnh '“øV&Yà„n‡"T9Û…«_:š¹rÒVŒâel»¬…¬ïà_¼¹ê1%9-œ÷måó l@ _ýÊ˦ƒOð·P‹’Š“jãù¼ÍûÝEÀ'QåMD6Õªó®Ñ­bßîºnC ŸÄö*EÒ@ÕÌ22$¨÷[Æ6~•©³0íbwÝÙ}Y+Du¹'Š›¹7y[R]ô–I|MÓ1$_" ÂB÷:!ʉGBŽüóîºß›®¥£Bû¹_(¿f~„E>ÂÓ>í• )Wfß>NÄY蕤b¸Ls=$DçmÍŽË]Õ,ç ÖKT¯^òj®‘|ƒ•‘G}úrÇ2ÓC³¤Ë¬…M™ëcù~ÿ®z°éɲ Ë1«- [=Ç“¡Î^´ƒÌ’ ’*D*¾½[°‹ˆÐ¢îº gQ£n2WbÝ„£Q$Ç$²ãý}¶¹#oÚv¹ðÎ{ûÀê˜àœÊÿšÕ1o»§ús‹¥P«åày³rß›W(ølš2ÖDÔIµŸ\iŠÍ;lÞtÜ>¼däçRüo jäúO* Tïn4_kR»ò„ZÓëzQ $¸Vû0&ʾÝéò¡¾ÓNØ-‘´kÉ.šû†·Ì&ˤG¼6´q°-Sç2o®¼ÿj˜¿¹Ê?¥æs^Û_¤<M¥|“z[÷*öÑ’kž¡ctY=îÐüž $kÜUOÀ\¹-t]º@¢EÔ÷üL¤û°\Ù}8€MiµT6Óëתö¬é'T§=Mßìcšè*ËM¹Sø;ßIÉX¤Wð)ä5ÅZˆ1´6›²wÒK ?˜qü~ù³IfýŒHï‚ÎéL[þqÜên`hŒùhô‘~V°ŸÉcŽÎ!{&¿0{1› ø¬ð->Ò¥ʘá/˜t%)g› çc$ùzÚm± Š‚€ŒùÏ‘1k@ƒïÉÙ>I伺õyu 8Ÿ–Fü=Éw^ ¼Ï±ùñ-i×Ú‰• 1U°ÐÍÕ+ˆ¡‚—~;?0ówbÓé>ë_9Š2¸ûÏçG:òCdü¥r˜üüèàGø÷_˜oendstream endobj 1370 0 obj 2534 endobj 1413 0 obj <> stream xœÍ[ÙnÇòȯ¸x®cNz_€$€1vb%Rd:›Š¢–ˆZ,‰²õ!ùßTO/U=SÃKR"aøÁ­¹½TWW:UÝüa#F¹é¿òÿã{Ó?7ró|ï‡=Yþ!ʛۇ{¿y Ý&ŽÑ)g6‡÷déo¬¥Ûx­Æ?¼Øûnøf»oÇ¥´Ã6ßlõhmPjx¿Ý—£sN‡ád«Ôh„ÃOÛ}eôPƒÄA#|#¬á³öUi3z‡¿l%ürW'ìð’•å›§[›‚eåÿ »”zãÇè…”i—ûZZ˜|²ÆG¿9|ülÅ g|B“š4"rß?lÍh•‰n¸·Ý£‹Ñi ²Â´ŠÊ ÷·1ŒZX;Ü"¾ÍD-…É-ƒ¾€A„ƒŸoO³:‡ƒí¾|+ã½ÁÉáAëð§í¾¡eõðWÒáKl³¯ÛØ—áò›ñ`'Þ:IÛÑXIôð5ÙæeµS„Ÿigj5íøº¼‹eyCY))äk2ÑMêÑ!ù1t7Ëh|¨Òˆ"LQUbÒ‡Ñà”.ËX>?h³ÑmÞ!í<µ"T¥€4Ýž›®~¦s1µÙ“Z²BЗ0“/Y‹¸~¼ÍP“ø–´©~QØDK©:‹‘è‡*õ[Ò¾)C¹C6@¤¾ßà’ìê+ì{M _‘fa¤É¨‘¿µ•Â^j*5ö»Çë÷z•úϘ$ ð†în°æzçÝñRy¥ {gk#èÝšá_[©åèC [XƒÌ[T®XÎ|77è¡üE+ŠÂuqwõ(LäÏáÍ¢…¯ƒktÚ» ¤I’ü±q”ùšt‰ †:¡áñ+?½"¨ò²¤µ•ÔF9¸s\“™“¹ÌMX彊cÿ© Xd_Zü 'M6poéŽ 6Ú›2ÿó~÷ºmò>§j „ß®fñé•‚bÜcq}"LŒZ’‹¼°·Š®Œ‚BÚèm,Òþ6¥e`Ûqâ‚z«¨o§\23¼ké[JêRZi¥+Y_~x”[1júû›&õ#ÌIל–‚ ¾ÇoÏ+iøš××ÂËÒaj¾jë7IX=x=jmÝÖïÏÝÿì¸^¤=@g§Kf›–{Û’ìwic0DQ¹P/Ǹ…Süýl¦·)C>©™¹'¿“¼š(†hãmZ߃ÕZª.2¬j¾â4ìi[n ˆ£Žî¥~õŽŽÿÐF½n-2ˆlû«X ÊøP„„ò—©¯Õ`9¢ÍJŠweqWä€Np-b°o0O ¦#tZªºª˜Ì¼¢%øjGicé«"|Ûd=Iù6Æj-EZá:iU•6öžÂ0'ÝRŒ¬s±'Ë#¢¤Ue}MÙÍ ?>‰ ` ‹_*ٺʢŽ>x†Í—³ã%ögA›ý™0<¤ŽÝ0€ú«­ £’N ?&BáqCˆW8:é[ëQÖ_S-Í”˜Îiu¾î+´÷S`ÂPÔx\R(É&„¦n´˜tj&2Èn¼œ£&{K†N#ô¦pvwïðóïóƒ!ÎÄ$¦²a –1ëgsošEô®Ð$à) ºÍßCõâtŠÄˆ¿‘æ| º)@x/ý޲Ið!ë7áF˜!œ¡ïãRKkO¢<©ÞuaãÜ|ÄÍJ<’LºŽ¾IÉâóGð=¢€U ΔÃS_NøäºÍHrÞžŽ(ÚÀŠ ‡%4P¤”ÜÇçÚ“·Krh( Ë9Ü%¢è܈'˜+i×´ò“Ôfeš‰Âè³­²£Ð1€än”.©¥Q8 œ mxÀèTÈ £+!ëŒêe†§€8Ãi#Yï:5Lž¬üŠûUÿ„øðÙ6åš&⾯;h,xy²±ÉO ¹ú¬€[óÞéëcŒe, ¢Þ ÷’&)ùXXRψªËá ËÐ=c hßgÜZdÏÈf“!i   »Ò"®…QW%ó³Dï \V¯—ˆ¨¾šüÚaÔA(ÓI6Y° ª©ž8Ô+=Ÿ©}—ε†Ë Ë„¢Áú*ϾHׇ9ÜzOÝŠŒ"gØ0\v JvyŒægŸn§&'­úîI:q¢Å_e\ñWҷ¶6CÄ›%ÚH× ~5팕´ê˜“ä¥NíôRbXÇ4šp¸ÕQ›,7ìœDá.Š?aOè)~-pª¢íNèÝO `‡Dï ×BšÎպƵyyyˆ½d À[)!®IV*àÍZ,Í$†§µ°Ê å2ïN/¥½Ù{Vè#öwÅUÕÈï ¼Ÿ+ë# ¡s8&ÀxNÊ‚‘½¯h°‘§ ‡'U…ä&Ofø=¥è É;l!#±ç˸$ñu p«§yzz'Í4LÏ“‰â³‹ì5@ÀVícM^µ_‰€ÄùhG²þ1¹Ž²î1ªÀš_ ÉjÜ5P“°ýêx«H4©Ó­œF=n«˜ãN²¾^a¼û¤Þp;)Ûß4ŒžÍÅ €$Á¼þ:Ù¢”ª°Ö¬Ù>Î’ðIÃ~:k‰»®†=‹kÕž-GÃrœÑB`ÓïÄœ¯y'!E(žüôÅ7š3ÈÞU8ë„Ñ€¿DêçuþÅ›ô;yjÓX€¹šõÑIټ٥ÈÚBH{…vBâëã|ô2ÄÊZm2—ê¬(?/¿ñìhüJáEšLN¸¼+‰ ••î꛽-+®w7rŽYo9›cs®¨äÔW éYQZMšS–ÏIÉ–¯»=Oxa;@ŸÕ| íâë2–]»L ™¥L=ˆ ¡ãbt˜ùfÉüªU¬×x&±e±¶‹MZ »oñ*9=ŽzZÜ Ö3lY$V4¥HòÛ¾e]‰¬ôºeDù,¼0%ŸLÐ¥ ßoK×NÐuQ¬¹,MãÙ%úÍ/Úª<Í\Ü—P5¡@)Xù2ä;*¹ªØe}SÛêjýr¥³\%ÑÜåNã^ùÆ‚á¼=§Ü‚¡¯Ô›sô©¸^œ”gúdz¾2Ù»S QµnåmOO‹UÂ1w§óÝvƒñ¿6«w]¥f'å¬×¢Â¯\øÍ#Çwœ·ÄI¿¼¬ø~àÒ2’â‘@JÒ¹ÃÉ~—k.ì°k`“H,8êoõo ¾ßf&Â*ôÏHžqçýá¥Ê•¹l\^4Bã(dæë ]¬bÂÇ=ܬÞÖËåœövvC?ýýI÷îy•MizqpzÐsNXÔKEÜ­»w;ž7§¾;Óøs]¾ÿ3° `k:ÝS%+LÏ‚U{™@“¯§4ßÎΔµÒG4ö [}Ñ`ºÉ±+yØ‚Ú'Ÿ!ÅÉîmEÏÂæY/¢ÅâZ®'µ¹ª²÷ã<»yÖ{R!¢¼lµ…HÀòÄþùÒTþV‹kùÅLù­Î #T¬ÞïAWgŠt|†Øñi¹JcKè9ÔòyhÌ%Óù4Ñ–ÀuM@„ê*Ÿræˆ)LZÒÏéú½½g¼ê[ ²‡rÅ/7@ "ôšÞ"¶E hÀTg10L\oL®'LfdÌGÕ>vcTÅØôð)Q*Àä·›ùe±Uð–}—™êF:EÀüòuúa±åYªG(çO+ФT‰6»79}¹ÿ6nöz¼¢ï…ŸnòìžX ú;¿(àaB4|29ŶvˆP7^Æí yăv^$ôùg~Üp‘—_çj‚»$OOæoCgoï XpRO—¤ª5ÓàƒÃ½¿Áÿfð&2endstream endobj 1414 0 obj 3085 endobj 1464 0 obj <> stream xœÍ[[o·ú¨_q§=®Ë;—mQÀ®ýD±ÓXmQÄE¡X²-X¾Ä‘å‡ôÿv†Kr†»\ ‰ŒÂ¦v¹¼Ìå›o†êÝ+a•-Q¨õ^&ýîºO(¶²à¨6 3ú$¢ r·ó§Üw`Ó®t=)°¥ 2ÂWÌÀ0®xÔäÆäðƒùãt ÃÂî^7Ø^ 66~ÚxÃô™æÎpœ >m=)œµÄ×xñ;|o¼N¢H»6jñ}3h]kÖ±U?}±ák¦˜Ý. Ýn4%N½½¬1 ý‹Ÿîû…Âð! o×A`ê€ÂóQ·X›DÓÒ+©‚R#­ý åÝÕ1È }LZ=s­ zxÖØE~OkÇõÔ娱R¢²µÉÑÉ;0b;ï'ÁP3ûhƒ+$fÏ¥±>4ïË´ÌVØ®~d;%-·šŠn Ns5ŽÂà†³óý;¾Yß#]AŒ¥#óǾ±RvçUh±²á¿\;¯’BŽR•Î} Åž¾æ€>1ÍÁdá•ééG¢:Ç]I/7š?C¤T`VUj{—ó–Ïв´€!¯ê ζðDˆý†0ÆÓÏ“Ÿ‚12UFö•æ0·¹µ­Ü!j­„ 'ªwZ¥’@ÓJ¨9ͺ ü ñÐz?üœ,@[„ã4Â’aßJCWhõ>îÓÏg–¦Â€‚ŽM.Qöš\ã–ùPéÛ†/¬¯ 0Ýûž×°ö†iÆg‚]ð¬o¦ Áùý û à¶Ìæèÿš²\ŽÀhûÒè«’!$AÆ¥¥œ±è:èåÀM˜DšðpkÁ³<$¨¨rȸš‰áR®êXš$#‰£Î¸9Fè๥ý~芖 ñtÍPÐ:ލ@ÕQ¢w{ó k«V3o¯è£®ÃÆ”\ …ñVHËýë%°[„z.Án7øã²ØpÍJ¥B㤓–ÂNzù/|¤·Ýº$6±ø›u8á”…ä㼟Ç^´ümÛæÄj:€,¨HjÆj9ŒRèúPÒCV‘@‹Ð2 ©ÆáY/WXDåõÐÁLŽb­jÅ~2Â|†•ºªÍvPDºƒœaж·ÕÂ_«ž2qƒ‚1:ÄOM#íȸnŽÐ†¬P0wë?Ñ~’p!×à×_R*Ñ2‰õK©„BÿúÁÅŒe{knÅcZþ¿\ÖMõ0Þ^<£g"&Í|Y ž)ƒ{Êᤠ=˜wˆ™u#~@¨|ĸÂÞ´yÉô&S-•!ò &á~˜ÊIwŸöÝ‘³0í<]Šc/6q­]Í )uàÚIZÃ,Î5®šâŒŸ ®½^˜Ì•R)ÖçHÆ{×ùºï:ÿbÿ¹Ukt£²ïªs=Ê‘¸G/*‘Wß Ÿ¼Þ°ÒDJ‘lQMùç­RþÌÒ¾²6š°RÙ;òH„R<8üµŸMÕm „‡9Ê®¶’¤‘YÍFcií‹ï>Cî3Ÿƒfú£4ìÕ<ÆÏFZ)¥3²àØ—Ýp³8»k÷x²5NX°’ýØž]>Iº1c:‰cºùɾ£&ØýWóÂqÚþ®[·`\‡%ŽÝ\hq!ß÷i6ó¾™}D+¬T·‚8f*æz›M¶8€ž'„}Bx2Õƒ ³:ctÊWØ}žÉhÔPª ÝÓð·ùˆ)UÌÚ#&NX]åui·ËüºwÌ©Rê´v4U€ƒ[©§ÕB¸kM€XJ]°Ö´è—E/»Ëâl Ë“Šöx¦…¡¾Î`µÈ’Ñï³ÆíýzEè6°²’)°à˜S­Ô5HŸ8Jd<—UvÞØ³·’^ «K‡nw•òÃûÖ,¼{¥òÃîµàñ*çÝ2X<õ®–#”_AB£nUpéìÃì”üœãÁ’£ Hu°l]è.wD$¾­ª9¤ ´Ÿ<üe¨”M§uÙClkô·¥%Ñõì~Xã¹ÔöÇ€%ƒüƒk‹O «(‰ÿ¸Jž?ï'þ¤á]w ç,ÕðW\€Ý¼êò_¦SvÊ9+°â=‹`÷Y6lùj-ÛbÓ6÷Hk¤éo|–#+øÃ:&ŽÆKS‰×EÛ€Êeë²¥ð[Žvº‹Íº~Ê8ܤ[GR®Ÿä+:å‚Jì|Q0K™Å~ÆX ´×óXEli±Nú+°ˆêŒ »#4e[y¡<òh2‡ÁoDêÌ,ãœNºTVŠ4‡”îOWŽ^9­.§‰w~–8sÅ|–ø¡çs¯Ö£›.LcÜqšý³.3îWúΈ|M«ÈWO"Q·{Ošnx½Ä©æÒÌìx7Õ¹š«8Ë›´¿Ýý†LÒû§²åò•çWb»·¼ÖŽ…;‡¤õ~µ/’õ÷²ŒÊ(‚ö´¯žo€Gè–ܽ^K² l«Üð² Åh8@…K‹‚w½‡º>l^ƒ‰Š`^ŒŽg¬Oiù‡àë2jþQ_?ž€‘n0à cº?†À°ûÓý«d̰¨¢xóëXäÉŒæ&qÖE–K\sãì³þz@Õi÷üz€Ý—g?`êÙO.©ÙÞÃ/ê=ÝfØÖß œP󘚽§¿î‡ï»{ùÔl€ 5ÿÁ‹ þÐeçð*S?ö£S›øõ㣃¿Á¿ÿÝŒÊÍendstream endobj 1465 0 obj 2892 endobj 1513 0 obj <> stream xœÍZKo7rÔ¯øÔcd˜æ›‚Y؇,ììÃÚ #‡‘%[†¥Y²ëßo›l»krÖHàƒ)6Y¬*Öóã|\ôB.zü—ÿs}’þ\ÈŇ“'2ÿÑç‹¿ž|÷oíQD§œYœ¾=‘y½±VH·ðZ‰®O^w¯–++B”Òv÷ux»ÔÂÚ T÷Ûr%…sN‡îb©”0½ÝçåJ+T'ë&³"¾3»f•6«ؽ\Jøî¼îÖÃR×ÛnÃò²®Ã«eBÁ±ò×Ó¿ƒ”R†E€àÅ\iiúb¥œèu„¹sð)2 lo4n²Â,¤°®=¤ÏïÇÏx~¾©Ã«:¼¯Ãó:¼£R9ÔF™ì0¤¡‰½ÏÒp]‡Ÿ¸Ù,­¦wºRVh#H úU½Äy¶\õÂÅè´EÆðî¬tÝ^¨ëGÉÊäíre„r½% bŠ®»IêY'ߊï¶ã÷áºBŒI±xKìÈ0ç„ìOœØhL¦Ÿ&§œ¤É³¥ BFé³5àItS#d:ØîIEeæO%ò_qRݦ?Îeö¤ÕåP ¬à¡Ú m^U™%k+QbΛq îÎEE÷o–NHœë²»hŸ9Õ½§œÖÑM%_˜Ò*‹Ÿ6¡e'|ˆYiör$p‘ÚDb)M<@¡lì„ÂßÅRö rˆ„ÓF’qÿy9_vß,ÑZð4°ã~0•ÏHÓ÷Vrê5x† DäßRU”›Lšð½!±Ÿ™Q“û™ê’,x‹çBµ±‹Á‘Ø +E £Š¬ÅYLÍÒi¹‹/ÂÌ»qˆú[e®$8¿-¡Žõ­u5ø}Â'ïª.Mì#¸ÅiÝ.WZ¨h|(KFŸ ŽFN îI†3«!þá!S.®îÝÄÀ›¨•&/vP-*%ßÏkjzË9ð-~×BµÓÉ™5h™È÷}F7„ŸÉ\÷;Pß÷ÁM̾ØñJtÝ ø0 9Ÿ¯î’pЉæàÜ`Ž„ ¹¼²Ô5ö:T 2üïøxï ..÷â9­C¦´G=ï¼ 3¥– .¿©³Œer½ÔR£ÚçCY‡ÞZq¼#üj¡o¨nÑÇ‚ÊS-a;6ÖD’Ÿ˜Ö]å” Lžs™m= N ¯Ê¸ªK«‘ßäì'tñ¶N\ìM•é²h%î²õQPJ¶‰!…ÕˬwK}t[³åàÎýäAþ Å…¶§%×ù±Ö@+å]禚æU5Øá*½Taàj6KÖŽ·'á€q²`=º×\E»3OJ½‡Üýà@M5¢‡^Rщ¯VWüoÐf›Äj-H\8E ÕnÂî`Ô©HŠ"ጸ%IÚäÖÎëÂú<£âì·È ´2 ÒûI4à 5ŠÇ6$~½OTê‡Ý¿XF-zoB÷ ™}Žô•mD ô$¦eo†¦ •ïæ©)±¼-B ŸL•–gWÅEv —p\ *þ:)I‘‚UKÒ ™œ›¾â„$½[?xs¢Þ\®j‚qù|Zd³êÛH­}b=y[ÒñÜ]€¿ËM™²Ó{蜨I3wiòà Ð6îv$kt¡$éïÌÁ &GÛ¥§ÄýÄû¦¥T:joÓ[{%õ91·Ã}Í>ÙçùŽØà#›©¬¢Y1<Ÿ‡f⤪}W;¬Ç%ﲫMÙÙ¿,e•¤VÄÈý¿w&—}CÂ$µ$7Èõ––jôõÝä¬gŸv}|/|I#C!;p˜;…ÒKž±€$ß"ÂØ*$UmY¶Uò<%ç*4é²õ¾³jñÅL£?œÜ¾fõÚd¶ ë(n!!øÀÖNhéSg1e`{Ô^ÜÙÎ uËMªqÒÑÏÐzBã-1bK¡‚‡¼ú|i@{FÛîÇ 8Hp/q,%Dx=÷¢ÁöW6Á`_ón~¬CòÒAˆ]Öávº6qýP%|ÆJøÀ^Ȇ½Oœ6’êó¶Vá¼QܳF1¡;\é#ïæÈw—_r?Üxî[ë“þrVø¦áÉå7|Q}Üy¹7n àÜ-¨ÃEÅ!X¹æ’B5„KuçR™^ˆÖ~¸©¸Rù-ì;®^®…Èwu²j;6‚"Q`ºÔTaÇ{ ,>Œ“mSëš&„ÿÝþ@Ñ—´!×,òÈ÷Ìÿ•ñ'ú©nʳø²ób PYÍvÿôinü‹™eûèá‡ugö±òÙ4cÔƒíÇjVÎ … ÿY þ‚m<öø¶ž`'d–ü‘üæðY½=héN»k‚’°Eø"é1âÀâ%KáŽư©hÂO‡  ²íŽ’#ÎXXˆÀ O&Bû{\4þw…Î ±iLu¦ÉoÏOOþÿþ׊H endstream endobj 1514 0 obj 2460 endobj 1549 0 obj <> stream xœÍ[Ks·®ò‘¿b˧Y—v4xœTª,G±•(Š"3'Û‡•HJŒ(’¢¨Sùñi<»1ÓÃ%)%Nù`‹ºýøº|»z±Âùÿ/ÞìÅ®ÄêõÞÛ=‘ÿ1äWö÷î?Svå{o¥Õ«ý£=‘×kczaWNÉ~„ÞìýÜý´Þ˜~ôB˜î=/Öª7f”²û°ÞˆÞZ«Æîp-e¯ç»OëÔVÈNàG=ÌöÎp^š•J÷Núî¯k¿[§ºmZjÓ²´lqx²€)8VüºÿgàR(ÊåF)ÓÃhëµónµ þq½zë½U8ˆÌa»wC;X×½ÀÉ‹õF÷Òª;Ž'iémwÏG×]âäq¥¤;«¿'úGïU OiÂûÕFŒ‰’oêÏy§ø9Ù‰Ì"§hito|E!õ„]{¶c/F­»„íwAî®WÒtWHÃßç‹ï jp‘1iÆ~”TZ‡¨—áwÑÃô«WU‡YK´ïèdù~va2]ñØ%7ÞAœ<^KÓFPR z­@,áL5ôFÈvåDÆqv.c+Dw”t@Enö"l«zn .ldÒN%?¥FˆC¯F0œ«5|¬ŒˆV â¬î­ƒ¶HàÅ[°Ò¨*GAt`«FîíÙÌ"WU"ù§hŒq7hðIíœùNÒ,Y è—Îd©(ÿycÂeƒÔŸLT!|u/¾sYWãggHºê©¿8œn;@‡s95ØðYü&K~#ÀMÙA¦ ž­š ídæÂ‚ȇñ`G冬i¯%™ \;™= kmúñ¶±É‰¥¶Úˆ´û6¶û¥Cõý:¬0ÒƒxÒ0È/k\”Pe}„³7нrð~E4’Øm Lû^¹*FØà¬°ë‹KœÚuÎ+B7šÒJÇÞS„°WL#=¼yµ‚\¸‰„Ÿž1Î2Ñ“¨E ¤Y(m$E4KÝQµ_"¦kˆ[J¹&EEK'àðŒõÂŒ˜ÛïcN¿¸e%\¿;󦯪†Ku !õ±ÉS $|ô1ì M*EÖ–…Éd–hÀ<ÜL>« oÑIpsÊIhbP1AnPfÁé#uÚÄ3¼$¾1¸ ø¢Pýžø¥ì’ÅFãÃ!…#âÄJÎ"šü†ä|§¬ÃË:¢…£É(Yûu’‹ràÈ‚ƒì—=˜Oˆs¦‡lŸQÞÑ:MÁäRÉ ðJÐoõ¸º…¼9ö, &Üva£*ˆc¼^í²GÔ»EÅ-».ä°ûëQôƒP˜ý˜˜Sà ô‚åO]ý5èvÉ`# à(Þ·±$ÖOÝoR&š òûo ²ˆ`;ÑzUÊOÇÞVœ7¿·pRñ˜ÊQ?G\j—Cø 9”^ ‚g€Ò©-†²YI(’@>{Í. æ_Ü—ÊȽ1D¸ø ÓV²ÿµµT%S-rŸÑ d<' QÂmØ\®±æ+Ÿäé©ôsûœ…Ø%¢Úe«”ÌMâSFšT#ݾ‘ëj›"%¦÷¹8Kb[BBú3lŽôW¨eÂ,î N¸|œDÑž§ëa°À<õ;Ë:Ñ*"V¹Tß=u}SÝ%ªM>â# '³„ªìlÂŽŽ.Ê``1Ï Ci𨅵eœƒ6¸ñd‰×Mh8ÕôìO$ì Ñy65Õ‚`ѳ棈‹œí–KA9èœNN¦ϧZtWB¤YcÿS8È›$ -5EQyjØh¼€¹üâNè¯É?¶T½®öñ¡æ<ÍǧjU(â()Ew«ÏUsçÙ :ŒI–qø…#ZÓ‰¨áÛlÿ§¾u5åôB†Ì·YÛIÀJÂm‘$‰'¬ñ±fxJ¼bµb&_Ilo;·cÕä/'¬»ša݌͊±†(ê¤l‹ü ƒQÛ,Y+B7¼–Rƒ»ïˆA=M9à † w×q0mÈ-s[¨, ¶)©ºá{¬ÍÌëL¬óFûsãW#>gy©é "Np'¹d²Ðç˜2•ƒ3¦Š©¥¶’ïÆùuØ;Á9¾CH>"'¹4 íÊûH+,~ìÁè±h=“fb†´dÛ¶„¿É¢já´˜61¯…ZZ±þ@Óidq׃r“3ggÚòU”•ˆ/¬áïm)»ÆX Gƒ¬€·l ^©¤°øð‘:ós `<@]‚šóò6jÏItCÌ<ÂEé:)»„ü3”øHW,uH)Ò‘æÁm>-—|Uí§ \·†òz‡í·U7öw^tƒOZŠœ¦}Ϊ¢È¾©óÏÁ[.’–ã–ï§fņ%ËæÙ-…h5W—¶j‰Ö2ïDø&E)xÌÛkhØ-‡²ÚzPиá+&|s‡”7hß—$ŒW;¡l 4Ka‘—Á´¾N’‚ä¢y,¼d³yÔV…R¯ª´‡¤îEíV¡;>l”%ðA&»Y'œÇEXîA‘n$Ÿ®s|gؘÏé{® ¼Ôð}w0ƒ7´QüÓu]Þ/ßÚ‰Ö‡|D¢ó²ÈÈÄɈH«Öñ=S›®ì¶ \þμݿë­_$ñ Ã1/À½Xv´ƒkºi X„>n^ùsÓã7¹{eqû>÷®ê+û(‹DþÎT/ƒRܶÏýëõ<šàº¼¼5ï'®hš£³c!Àõ¬l V”ŸSîj¹†2–šU.Œƒœ½Eš$‡ì[¤™Ï•ºÄê‡Á›€Ëq#±u¦¥N Ú“c0’/9®Føô(ʱ«,qõßL"Í ãG¦×+¼¨r¹»üsÄ~yxŒÃK‚ÈŒ,-Ýâð‡‡¸öMœÕ~HÍŽ<¼Äá»à]F¡Ê7¡y=gÆ;÷Yœ½ÀÙ3¾a™Ü6;ÂÓf&ÏÊì‡/pøš=Ã!Þ9»Ùä`Jkè^'8<ÆáisØg’{£#a/Ù['‡ìTYŸýwàgÁNíÑžÎ]MWFZÿ•VÚ)N™–†Eàw7²ÃïpxÀ ô²™-k_²Wö=í?kõ®püšÝ줹FŸ¿€3Ø¡ ŸíæN‡V†GÍgeí+"èW ¿E¤ï/"=`…÷‘½”#Vb¬tÙ ‹Ã1\Aj)õ?h›ã ÿf@5̓DÙ`éëÁLD9i<ŬvœçÚíËeÇ×Lw=4`ÿÀƒïi XÎ5}–öÅv)KÁŽv±erÁÛÔ¶&R œÔÌ«üK“iS„éïÊ¥nÒ?q‡É«†æuTûÚƒ‘ÿCrÖ¬/={˜Þ³ÚX¥I3†ŽEQ˜úŒ©é€^×âÎm‘Üân˜mîJ"ƒ_xy‹ïÈieç»w~¯]OóšÎê·-ÌhÞ›Ù‹½ýµiSÃxZSòŒÂãµûxöcÄæ¦?!;ü@Æû¸ÇizÔ¢ÖñAQ¬5Ì:ˆP‹´I«å/ĵ> stream xœí\[o·ò¨_!䥻Aw2rÈaÐpbÇnãĉ¥4ÍíAÑÅ2"[¶#ÇQÑ_Þù‘s¸³’“6Š<„ærHò\¾s¡^î÷ÛïíáÿÇÏöÜ?÷Ùþ{/÷XøG~ÜÿðpïýÇ\îëNËAŠýó=Æ‹qì˜ÜW|è&óó½oWëÍØMš±qõ:7_­y7ŽÓ0¬~^oX'¥äÓêt= è•^ý²Þ b0#†Ëu¦·Óf µ­Þ‹N zõ隙ߥâ«#?Töãê9¹—£Ü¼X÷†(³,ûþðo†JÆ‘Ê g£™|ßì­J«ýÃCà‡kÑwRrugÍÇNŒlõÑZtã ´\}²Þ˜µ–|„ÞGÐû©Ý>ô WŸ¯õÔñ~ÍLyÀ¡DsÖ h½ïöÉ{ÅâòR‡å…žÂJ’i¿¾êûIº‘¡÷ÞzûAó¸Rð8 øëz#:Óùê3pÚ4ûVæp 9y¹‡yâÆ ý~:íbæ¼ ÜÜ]hÃÜ@ .s¸–S§'ÎÝ>¹á…þ&Gå{¹‘¢IȰê(˜Ú…"¿˜Ðv1ËLœñΰ¶Ç5y…Oü8Ø~ £î§íÇ ¹rÇà¥Änfw³a¦WönªæÐ/¡ý´ýšB¥åmóqšcËÄa§ó]+é6m4ʤƂn öó$‡¹óAŦ‚wÓØœb™{#¯ÜY³^uŠ ¸Œ|Ô '±àTìá3ÆqÝΊÒå4->j{ lõ5ͳ-¶~¼–F«ò´´•†«™™12uCBêí|è¾/Ùð.ðÈ7™³`£¨®µãe… ¦ç±SùGFÆ5€{Ãi)-àJ>†k°\:NSâ1>Ñ*éà×£'@™øœÒ÷QZ4ÁÃL/ôn»»²äk>J<ÿ•YNLZ” W‘ìQ“‘Âæïà¬èýÃ÷Pùœ;ƒù“%H…")8f.(<[›ô=xÇy[°ÙK¡Q>è½n¶üÖøË®›ù~;‰c72­‡Ó¸'fìZ-k «¼1)[3ݩʠ]’Œf9uŠó>Ÿ±ª¿ÃhfMcS^¶@¹klí´­U/JV|Jr¥eëaì8Cž€Ý<\+W?äÅòÎT ³úª²U§t|ò>KT4/(Sˆ™•"-´@7†+ì%¯u%Œ}µʃ=¡Íf墦íµ¢Û«ì¥ÂÏ_e3—ô™í4ü% ª‹{L ö»UžƒW÷¤ôõ,˜aèt ñÞïŽ)³]FåÖwkó•ÔÝÀ%hîWYs/Mï‘CHV¹³1áþ|ˆ¯q%âæ“VÅC4Rm®3œ¡³ô0vá yð­‹q/»¹Ghìíì1Æ]ä¥Ie´‰§²± Àøfo«ï-Ӄџéûò˜ß^Ý¡ïí¶Ã`ØE!`órͦŽMFÎßðÄp¶yYèC¯—XmMƒ-¸ Ô]ä±k?tê%t¾˜©¸ÊZ‚¦9ˬy7“çš ×̬ êçŠ@-jšCjyq#ó¬ç™BZÕµd“8-R"IUøÄê¯Á\ã`•uè¬a’ä̪§ 5ZVÜR‰óq¶xQµ˜£~Ö´\ GU › F0¶¯çÌÿLØÃ“`y¤@æ¥ÇÖæQéŽOnÔ“§ôÇl¾g‘¼ª)ÆsÁ{ЦPŒ!:h‡!CµÌ™¬L^0´×Ù|²¼hO²Ï3;–;¦FCô^…´oŠÿk¦¿ö“†ï°CË ¼ïÆ~ $ØYƒz µ,kšÕic]£·¯ ÁÝ€h&ú"Üv¶™{ã6rý?ˆß+…þ´¼V«K‚8jZ*·»GºfïÊBlá3{¼ × ¨w˜Æêü¼/65Bë}Ùë¢!c %8‚F]ãâ l ÏÍMlß±˜ÌÀ¡Òq‚(!Oീ߂çÝŽ!à|ÄqädOš¥M–ƒ› _—„¬Úã²‘Ž¿‡8"oà -1 Òª”f¾À²¢O¼O; N‰Õz¬±è.N~pçÿ3! ç»Z“}fˆG}肃BÃW»—ƒeÒzH¶1ô}·s@pâλ§ünGsYwÈ0 Dün•¢Cš-<¿Q§}°vXŸZ=GLÉ çn»|¹‹¤$í·ÞÍ,a€±l±ìDæBÌÞq̶˜½!ƒˆÙ/Fe‹ ¹¢‚ä.˜? ÌÌXóC7f]ê`¾åíð{Ï8¶gÓ2S4þ†äÎ;ÿYþžÖÈa@/Þuu•ƒñÙ,HAÐ×kf#VB7R›wëûqÌð/» e”›ömc4‹;4a“á+i3¤q-"›µº¡Î 8È|¾ëTYd*·}F‹I}ê»ïsì>™ ¤íͳ؃pé7Œ0lÁ(ʦ™n‚Q>(‚–¿Ó’Ñ!¤Ú˜7gá÷ƒ„$"¨Íö7g@ÓÓlÿˆ–­û…<ÅÙÐÆÜ%% ìM;[2A7ÍV¿UþÝ/fÈX\ì6™zLQÏi7‹ŽiAºÚöÎ;øDQ#u‡w’o›øÎnf~—\³@gBfåuÇñ¸à iذxÃ:|YžØ.[³“H'ï‘Ì%6Lön³N„Ïf_yÌØff»_éø~2#ÞB︨‹Yïµôw„nº$cnJ ±Pï$¹­”ÑÎ_§Èqy)Ésmxó*ŸŒb¥2‹ ·RGo™ÿÔ9¹#¸EýHãfýHUUTÖDH*s<… Ä%ˆh¶ )þ¯)·jÊ/ l4» Œ|_´Q#ióÈ~— hڊע°~pñ] Qž`#:À·a^[]ò~~cehWÚ¤ú»`$Í€$ž²ˆßúÐ4ƃ|öU …%!dqÇ<¢`#ÍöžŒµ4"'Àâ¢BÄÊäÀQ¥r_‘ÕXñâÔ¿2çÔXfdMIƒÌF5ÞˆõœµC&1uy“ö’ŽOç¼ÔEž‰ß“•.?Ô¼ ùöj+ÛóæÜs>‡¥ªAÈÿ¼XH¨Â m äV™žÅXÖEqV³0zlø¦0v^ØdKÑ>›÷r2)ÁåÓI÷¹d—.BçJF›L4WÊÅä+(CuJ 1O½CZj–4³A¹m¹¼ºêƒÎ¦|®¸!Æ©ób79‚Â>úƒ,­#fbSkóš´²d ”]’Ÿøì¡j0ÿ¯ZgAuSf§4PDMšó¿†(CV×å#–µÒg¶i†ôŒ.Èȶ%Ä¢t¯P•å{Ž¡O‹&àØ‹ŸÐöCJR¥‘À|—Åvƒ“pvà ²ªKböG6&6£÷o¬ç¹Â–â‚¡WªÈWûÖ…ú¦ëÜk=®Qvà «üš;pÁ¾2‚ÕÛ`hYر 'dkâ1ëûñšñNÛUÎÁ—$‘%S TážÊÔ3¢"1 ð6ä^.”%OP@A[Š3²7eMèÊF–x6 ³!CÀæP o€ Xò´Ö¸V+@2)7âo˜½ýê>·Í‡†i[*‘:ÅP Ê;#×u½XxR°e Ú¦ÈÅF®Ð_xž‘®T,’arÕIØh˜¢Ö1M‹ñSõ i+Áî^¥RG/sþKcùT¥ …ëŠWh1ƒ9ÞP¹Ú<ÝHN„Ä×tñÕ `þ²,ô™ŸeÁëÌÁeÆÖ*zÖ¨D‚©2&¬pZ(¡k²óWóêU;”4Št&*9Rá]ñ\§]¤,ØBº*$v&FþÂc R¶e?{“ÑóÆ ,–mêT—.l?SÃã[Ph(ÀM*[×RèÈxäs­a_ùùz'%˜§’é²n¢´$ºÊ‚Ê Üz!ôÇY–;¡?¦ëÒ#{+‰7Ì‹w+ç¤ÄE1å.e©²ú÷/K‰‚Ò8Ú{AŒ-ýŸ-ñŒ®ú‘•æ¿*Ô*K›†º³zù)ˆßcާÞOXØöÁ^lSlá‰JWŒYÃ@5f]ªê.VùŽc#ø~¬ãÏýÓ¹ÅO6P7TÜs5Y(r”4Ç!Š mËå K’ÁŠºƒË¤²J”Û¬ ô˜ÍjÜIÙ±&Ó¸„CRˆç .)ÛŸ}PŠÓl£Áæ¤óÖ ð_¾1ðÅG‹7¨y<)§â€“b}L#=òN*AXz5²èÉ'GzøHQ tÇÞµûyϧFáˆÓ»þ„‹:­uœg~¦ÍäR%'i;¡ú’v n«÷œÿ_¾}°?+£[~I«׬æx4F4U ü]T_{—^µ(ç3ži»Ä—x~nÿLÍ׊΂=t™ÂX£¹Ç‰¨­|Þ Õ BÑ{Y+Ï`ë#4FaŒÖjÐ Vw/>,Œ6Js5–h8 Mp±§Y\– ò°êÊ\sPW€µªÏIÄð¿;ÍzÐPýlmTÞd—;£@û¶g:0c/UÝÓØw÷/Ö$¶8©ÒcC*¾œ¿ž¬Ô “[µ‰c°¤M´QªÑ~dñN`IµØ(³ñõƒá;ƒÌ€{±SÈÈÖŸ«$Óªe"wFž¦5Qþ^à÷>Ž%û÷µtÔXŽ\^:tNp/H€îcŠ¥‘ý¡|8ã²Ôw¾~WÔg„M«bí²¡'?s‚µf/æ( +Xü(ɰ¢ zª #ýPòkJkwšo€¼Y®£é~mWó:ktxù_vxž~ŠÆH8Mn•:ãíçT!n9õ´ñX¨®DÀ½àft *«³ÂÈEÃȇùÛÀÁ÷EtH)ÂFs)ˆ‹é`l =œbM¦B‘ÜÏaÙBÆ8c^á:ïûõ\‚{zMŠ88òpÙlΉ£d yýì¨xkd•µ5 oB¥ñ×âÆX¡ÿÞ¤-U£­^ñN,Ò‡ƒÎ)ždî¬Âøq3t”X¹4,Ñ2nËŬ£M[ŠÅGˆÙp¾(ö½•AB·æßÑØùN\{ç¾ÿoŸˆCS(~(QWÈ›´õЭ(ŽÏTRâ©3¼sbÓ¾ý#@f>÷ÐɈƒÈÅ”ïÙÓ3B$\ÂØ‰}fu“)ç~vÊ14ŸææUn51jÖ±ÁÙŸØ{™›ÏróEn3˜¦°É¼4Ù>s½Osó¢šä_í²Díb–K ìIoÞ-Ú&˜’çä t‰ #n´±¦“ ¤GåŽ+Â0Ìø,âª[ýeø¨¥a73ûˆöv¯,ß Òo’.H+¾‹‡yÐlPc*¾ uo U™;(Izù'ŽsÁ£´Væh² c½ª¤œ1¦ÿ²_„uÄÉßC™bž[ÛôÐÏ=:œK`aJ5Í_ Æ?ÇaÍ®iïâZ+ÓRGç†bôJ âÅ÷À™CüÔß9°ï¯#¸nLKW»äÉ@XH5-˜QÃo kDo%d¢¯HðÒËÝ«Ô5~õQnáÃçòáÌ~nâÌkIC’vtÔJý~ìè“Üû*7ró¤mRË?÷É'cM è6L(R9{Yõ|ïpï óß¿x‹Hendstream endobj 1592 0 obj 4370 endobj 1608 0 obj <> stream xœµ[[o·ú¨_q§=³¼“~)Ú4E$Ú (‚¦¶u$¹².vd9ú÷Þ‡ÜÙ#ÉváS»Üáp8—ofxÞmfÆ7sø—ÿ}yÿÜðÍÅÑ»#žÿ˜óËÍŸ¾ù‡4ϼFmŽOxž¯´fÜl¬ÌÁ‹Ë£OÿÜî4sžs=}hÃ÷[É´vBLwÛgÆé¦ýV¦fë§ß·;¡Ìo1xÊ<¬a'µöTHŬðÓO[ï•ÓË4ÕÌzº"yyÙ†o·3l –åÿ9þvÉ%ÞåNr Ä7ÀSÖÛÍñ lðoÛbÂÌr: \ƒ´œn+¡é<’wÞKØàNhÅ€^^?>½jÃ7í3Dá·°-ˤˆ¼iin@„eÝ}––òøýë&XD«ßw˜ aÝ´o9[ŽD0ݺ†Yï§Ë°˜Úǹ¿Õ}¾’ÌîÓΜ®;ÉÇCRª°8xÙ¸½Ê˺LÕÌÆN7À¾}…öˆDwš$Ã…Ömãû¼ò…dpø‚Ó–o±2ã1ÄÂû¶R82å™´¶tIH¯ÀH¢ÎM1b:©¼ì·|fÒH5Õgˆ:Zsß¶Ýäì€{fÁfþºå’y+9–ûû¢>¯ä´†6¨C Š6rÓ¬'ž¶¬•°\¸xÜ’G%¹k?»q])Ùìíôb+5SÊ»éOÀe@`:Þ:Ч§Ÿ@uæKm‹Ç:j›‘\Ñî²lwü€™Eñ¯SµÓ Lµá\…<Ôx¹ròѨŠÙžV¢È€ßb“ [t3˜"¢Šô5iè˜Ýæ#-úlSúP 4•)Ž\'iÈBɆ=|ÜîffçÙ™•ï_ç™[iW\O³öë qÇœ4°çL‚YäVq¶•¼$xAÌâ¥sÊÑ(aGB£lôOØ<«X³Jƒ CxãpÚ†«>ºUC¸Û8¿YóÞè’ |zmйgòåóªèX‡ ˆÖŽ5èM  ¸ž» XKX'†´,‚w ×%I|BªÐ³’á#0Ù ÒÞæˆ÷¡¾Ž –‡oÚð¶ áT´çŒ‹ÊÓë6¼lÛ6|ÙQ€¡ò³mÄt´Ùü”µ!zªÛд¡è&h >H‡3.÷mxÖ†ïÉ ûޱ<$qƒÐLrï#pàaÅUGòY•³®¢@„Y€-6Q/#­›¿®.(¬ ¾ßÇEx;Åâ¡/Z˜^$š´K o¦W”™uq²Nm¾ª(׆[&¸NÛ6bÀ¤ÙìfžØÒñ#éÁ‡†“³‚”ömDqr6<)‡šÁD’z¥ámøL;ðyYéÀQÐÂqÃôì1±Ó:!q+„Ø S^úˆaA€ºFhR6ÒXåFwqÀ‚ó3jߪùCZ<8Í·á0÷Æö}ŒÞuø<ÈB2%Åô}’ñ¼Ÿ–à¿?†=Y¦­JúšÈ†íÙ`ë"àвÂëR9 k6»€Ò+ŒýiÒGe¾é±iŒ ŽTÌÊ•jÁÆW˜€~™‰ kû膌²”œÁ1rdDô¿9»È¨¹w5Qœx™™©ã°W•=¸äfÞ·ÅZ|C­;à ;³Cd ¸é~Õr,Wu3Hh©Wc,XEOƒŠ¸`áÌ«{ØC¿Z:[Û9Œý‚‚씣:À^>:É>^+,ÎEid(ÿ J’ –­ ƒXA¥btt׃>†ªX4ý,»umŸ\QÊ«*fÇáuˆ‚ÜiÓ­^Íë"(Æõ@ +dÔ( ¾¤j];î·Ò×t†]¿£L»«G‡ œ^¦õqxt¿6W¾Š)±ð}àCd_¶B/ªÀïšI¶R24äèÏZÅñ¾Î:Ì CàLÌöãJâ /µc$‡ZmB2ãt"±L¬K©‹Ne?¢d¸GBtÚTL¶bp V¬øä:È1BÕPY E_O);Dl';6³Ã¶CBµl¸ÀS{C.uèbPb‹ôü¢}õÆÒfÐ…Üøs³,1þ1³XWÖX’(BÓùotÖ4XîŽ%7”Ô:°~D™e,¿£xO¶Çº šœ¶¸£Õ»¼ÜíhôÄSéŒAñô>RÛÕK¹æu{*ëòù„ãgá„C+Tè—Ú0ê‚JqÿMW®³.š &—,Bû¶ºäܪAóçŠ!°Ž›Í ÷­J¿hSF×y¨M]gmSš¥ªŒ®8‘ZPzêºk§ÚÝ»ßÂùKéê­gØ¡t (ä]à[¶±eo/E·äòý/b±4ôi4ÔÔ'r[6ú,EF!8 ·‚Ÿ…ú"†5š°ï®út%tbÏCÖÃR=9Nç¯H|‡Hµû$d­¤Ë ƒÇF®ÿ”-[æŠacA&Y¢Üj”q½öyBtYx4NFš@J*Î3[\`oØqK~Îu}dâè: šÐ>¾|é±Jƒ/ÉÐ Óe*½XCÀÆ%èîÁÄcé¯Á|V[™Znúô¥Æ'ãÙ1×ê‘xÂn+õ2 ¦/× ¯èÐ4³_Í™Ê-œekHoÎTìîôÄ\PÆd°„nJÒÕÒ«ÁE­Üƒ+רbÕš¦ß%pÉ–SË ý;å2HÿºV²/û<ä”I\uàŽKñ æ“ïÝóŸÆuÔu)Cï€÷¤(IE핌Wë¨"òˆ=º¢E<ž>>wá58_Pý¾IÅçf‡Ë:uŠB`ÑÎh_KpFá»|uÒ"9.ÐôJÿº+~žÒÝ œ‹R¦Zâ°ª"wBÑê*и-Á%hÛ?įû´%ÞV˜×¯Üfa=龯PªÙÚ£^Üv-õÂà€_v†ô÷j[oUÓ‘­©2_I=ÆŒ2qÚg”ßµÒú2ÌŠÔy—õø]µ›Ñ‰®Í‘¨øµVâÀïW£@(N Ó}å#(TW 9TÁ/wƒíÿ¤Ç~¨\˜£¨äî ó&RÕtd¥·‡n|¦óGŒ”S&Û=Iž4ñ>æ&h’º"ú!qB¹Ï.9 ‰QL@ÑŸ05§Vl¢åz‹f`Œet3oifKÇ8Zc_‘Aô£tÛÏ"ÛL§7BTª’Ì=ø ˆÛÇuqsaˆ®ÊÖò™XI8Ï—ÏsÙÈ–@wÐè–-êÁ![{dð¨‹Ùz;t«¸ê\ÝÊv¼ ®ºõ8èà-\îrîfhor@3¬Æ³Gì£0·ˆ6Ll~ S¤œ•Cn ·çSl6C#xeÅ—·ÿ°Š)÷$¤Dßʸ nú!ÎEˆ‡~ö‚ê’ÿ¥:ñ¾×;‰$äAÍÐÏj,вãÍ ZÏPø\^¯l·S* Àè~»RÃU”ËÜ.°Áµ#çßc¢A„å*ªØcé|÷¡K±äpàÎT*¢¢ßY޼zñ£–(¤.Y$;5šeÜ×<ú¡ó4g[÷C"“¥Ù§2O±Î]ÇŸJ)‹»«Ã6ûŸš”†\Tàò«ÂøY‰ï†Fxû{Ñ¥5öÙ=£u— ;ÒV‘‡›Ïy.M–Nkˆd£‡dÈ6èflë–ý_Ь«8-yÉp6SðÚCÉRãtµ#PÖ§[aº;%FíËí”Ov?È´ôWiã>Œò¼ýLÓDŸ÷±rñ _£’ùZøRè†~†k;sÿîøèïðïÎó´ endstream endobj 1609 0 obj 3433 endobj 1632 0 obj <> stream xœí[Y·ì·ýƒ}Iàé4o2 8Näpâ Œ ‚ÑÞØKÒÎ:ÚŸªæQÅöÎŒ$ÃèA‡d¬ë+¶Þ.†^,ü“þ>½;ÿ¹‹›£·G"ýcH?.~srôó¿)»}°ÒêÅÉÅ‘Hëµ1½° §dïᇻ£vß,W¦÷AÓ=ÑðÝRõÆx)»ï—+Ñ[k•ïΗRözp¡{¿\I-a…ìmêa¶@ÃuznV*Ý;º?-ünêÖq©LwßäeMÃÛåBYñ¯“?€”Bq)WJ™†À[¯]p‹“3ðdéE?º o|ïÇ#Q(#lwº5TAáR é ï–+Ýi¬êÞÐ,qÒ]ÓðqT[к»J¢Õmè÷+: ¹ë Ô«ê½rp/¢J º¾àEš0x¸Û 7×"†^ùt-pE.Óñ.KŠ×÷ˆ‡‡^Ù€³Òèϱ Ä?'ñ#+€ûç$°ôya)’ ðóûB) ¤'º×eò–&Ïñ ¡7BFí`žže£ÉMµ)ót‡<;¸=“oοÀCU/¤f2_7÷3™ÖK4©-(üb4ö3³ƒ+â]Ø))uMkoQû®ƒË†¼°c/Ÿ¡&aVƒþ@ýÚ…ÕxS¨ šBçQà)pá_.WCï†Á[Á­©NÀ•ùPyÒx:pÿ:çnC'¤ïÎÐD,³8d‡ÅÙ‰­Gsrº»äZ’¦THjÙ%-Tû*é}% ,ØAFõŸ“n;gº‰ÌùËùSRô "aàÀ3Ï`V¼N± ôÁ¶ß7=óm¹G¶4r X?cã<ÇIÇlöNb–l?sr¶Ÿ©2d´¡ÃÅà ž:n‡ì–Ó}:_y[Àb³ˆÌ!h˜ùâg&«ð¬¥vjÖ6X ‹LÅ7,Ž•S)c˜±ÑàÓÓПl-; á Š1‡lT´5Iãv‘ }šŠ`æh5åhÔ†ØbCç ±!›l„Š£¼v•÷ÿ–~þ ¿%ÚÞ¢mò^Kç…&mù² \%lC’Øðû˜ °"BÈf²Ãµ™CÝÓðì0'Þª6G¯‚JÚ•$6­ÙZ‰©Q²¥ÄôLð6@ˆ¬ŠF®÷<]±t™2‡Ö%GÁ¦vùÙ ¶,س|²™ÆíqHùŒ’X. ¼e™ë9å fmSÝY„±,v™KœÝùŠÛ®«Û[•2Ç2Ï{µg™ç ^s¬8áÖMIc¥¸Ýïiÿ}ÎÙ¡- »ƒR‚U•ÒzZHâÕ²ìžA†Ù6\fpG…hÒ‰žÝ +>™ÞŠqèhé©”}ÙÒK–Tqò²ƒgK/VÕ¦µ©þŒ·0 &gDA¾ai¨ŠÚŒeò *ÏØ/«ý"ôŽŠdtãÍÒÀÙt€V£ˆàÇÊ&Ào—€­Pѱ­ESà»5ÜËxŒÁAFaàû%¬„Õb.âJ^²ˆ\hK~Vû†°x­2ý³Žÿj )<(tgÇÒìWx”ïµ’zbÁ+·<̯¯ë¢ÉB ? þmJP…D¸H0ÊíŒb;‹ùm° ÐY°Ë6±ÀÁ€ ŽºÊÊ’Ê•Œ>I܃ ³|ö"áŠ^!HUhÍ\9U£Ï¼²^?&”D­ÖPöë\ĪÁÉË‚Ì7ñ+<ÈhÛª1 Íä…Ì1gœ9ÙsFV…Piðº*ò™¥Ji3-O™Ì˯÷e:Ç7PbÑ ïÚbÜŠê  ~ð\ˆAÕ 7“ZGÃÉI…«VÁ‚ ¶‰×+áSá0iiÖÒdfK#q&€´UðX»pµ a;(Œ"lQrèþ¸ö- Ÿh¸®À,Cã¹Nÿº‰âê’}Ÿš~ .jÔUàz„{ôÚƒÉð®)$[{JÌyÝ^ò~xŸáÇîx4õ÷?ÙñИ;þßñø‘;pÎPïé§Üü/v>š!÷£:b!t¯´•¬óE%ï2D‚ PP÷˜ç­h·4·’aî7x²°ÚZpï±" ¶+òÒÓqä!…]UÈä¥%¦zmc¹·<ç@²K½Èá0Ëv­'§ãƒ _ΟEFF¾g›$  yÿ9m{ìeÚ4¨·j¥ Œ£ëê -Y}¦Úí¡*órûcoÈ'—ù-´ýB¸¦*T=&&‰íε„h î)¼­ˆ=á…·¶~Âam&iz‘ëËÏ2 ½“èJç°àoWuÍÇœí'5Ü…*þa¹ŒÛÏŠ)¤Þ‘î l`´²°!Ìt¡.¶fÓOü¼*m'À0K.ða3/,nÁ¿(Èß<¨™Êaý‡¼”r~+¬AÇVƒ¸lšF8vÑþŸͬLŸÑbZÉcꉇ¢†×ž-Ëç)m Z 8:¥ ½õuWe/I?¬ç>Ý5E§<ånbpëF]µÝ(‹­yߦØßv€i«¤Žî¾\:,ì…j>ÿºLÎ}3M)¦@œ7›9œÖ½¹‡‰óÆ»¨»ºgÍg}rêàÇ»Õ2X~ùñÂÏ}ÆÃ²ã]ôà½Mõb)~ÚS"òÐîÀ4:«¾²Ö2x^¨Ë” c\Mߤ/žÅBÇ•”0è(<óý[ß–èF¬|tsói3ñXÇôýA‰ã{Œd9uâ©hýZílÅ•VW{Ie½ôœÕZªÜf<Žª ãGWã§Bl×e. G°㯞qÔvÓ³=Kþ^»wJ³37íb&jFàáUd¿ñû|Zâ&yòï……ôV#·3òÇ'ÜlSÇñõÜ÷|ó ³œ\3ù 3 s‘ÿË /šÖaèA¶wÍÍÙöÚ{B–±ïd„ŒÕ™Ôx á5 Ù>†R©ý3«ˆ,òNMý›†ë&¸epœÀíøAê´sbÚN˜xÚËa =Ð6ÖÓ`€ž5u¥Ÿ›uŸTG¯›í¬YŰAvÅäáÐÔÑ®!é¿â*Ÿóïy$¾X ™> stream xœÍZKo$·¾ëW ö²Ýë Í÷#9ÙI ’¶u âFI+X+Éz¬íŸ"›ì*²Ù3# ÄaóñU±^¬âÎĆǿüÿòÓYú¹›Î~<ùÏ7_ŸŸ}ù­²›À‚•VoίÏD¯aÂnœ’ÌÇOgÿ¾·†ù „^±ù4*fŒ—rø[Í‚4VQ儇û›/0M:FÑ4ÂÁž“è­ãfÒx敦 ì’kÄYP³#mŠ3#d"ÞhÄL Yn]­UšÀý4_yç ΔÅø%K¸rÃOã–3ǹ·¢lï]¦Oq'"Ë#|5Ñ—¦YAv}Á¡;:°Â(:à9230åla1ìu_8èPÄr•µX‡£´^p~.rIMC6Ž ú¼ÏX| Pä·‘`Ÿ’¬é{œ铆).)ïç•}e§€‡é)ÖI”SYâ¤+üí•VÌÛá|Ü*&ƒ×6cNPn©¨Á±9¦À VëÏÍr°Ø®P˜å,Ý—L{ž­oÚÌq M"â¿Ìk%Ë‘¸`gM±z•ÄÏz‚Ûãw²òÝg™œ- \íô°Mp-ÎÒ}ÉbYjùÜÏ÷ýî(¸ gFJÓˆO‘_Ô°Ÿg Èyœ¿ß¡LÌ Þ¬–ÀÍ<ô¡:È2tÛh‘ÅJ-[I0Ž®EÎÅï«Nûl!sZÖF`Ò<à‰-šG6@°¯sëwŠ|rÜ­–lDO×»T à•n4haB,=ƒWÊ,X<‘¤ß¯³hš°²ìÆ/¨m±—`D‹˜/ñ/*ž×\Nl¼ZhÛä¶Úƒä+Šy‰d©?Ž|$ªänÿqvþáhäpÑuë7جC‹#|½/Ø|ÀæŸû<)œyénOzïÆ^àò®P ¶Û{Ój, šGêbm±Iz/±ùnnžLª ÎMŸI¶ë’Jè#ðC·É±Éº½Q÷±Æ¹déÿ4ñB§ažö„Í[l>çB·É±¹í²ö(ÃÉ4UðR4÷ˆü4ùö>`ó›Ý¤ùCG¤†¨óÄûÇ•ñ­ †RwÝU¥]wÏgÀçî-â ›×ÝÅ.[²]Ã6sˆÈ¢L6â{O{áD•å"€xøµ¸·òç,\€{ Ì•Ô«kAH[TBEVX(LjšŠ Àïl4ù“Á=JB t—"´ªKîO{k€B¸@Vt‘±¶¦ ÉÍIþ‚È%¹iî«IYð‹jŽUcŠ=v¬™Â»Ôq<Ö/*^–¦kpÀÅö±š7ˆ C¬ª‹µ/‚d¬¨°6í1€² ÐvÊ.ª PwÇ®êÈI°Ý1Ø5ÀŽ ˆàRx‚ÃJìºXý1¬ÄÇø.ÖFÞ†uE^}k8†ÕU¨:Xmvßà|Ñ=¯ƒR6‰q`€âœ3Qn} T eI©OfÉmÑ›nFŰèYcކø÷ëÂÉa‰Õƒ=èûz.»ȹu€â„iži´ Gé’H—9æL—®FÚ„UEl¬šAÙ=JÁQ/\ØÃŽ£OYa5v9é T—Ý5ýã¨}Øq1[zAÑ[ì·‹¨4É-üÚUå þ„Ôþ¿b:͆`•¡¹Á—*¥X²Ì¤·ŸžŒ Œ`ÁÉ&ç8¥ár † ŸGá™ä¼*)ÔlI9M³0W‹ÜJ“g^¦B§ä^ÉÇ’D%I·‘tÓ±L$¸L«P%õoÛ´kÚ3E%µgÜðÝ\S‚ëCµ Ǩ3©)‹GÓW§$Ixîzù¯Nr^†*#º›RŒÀ­`BÉ1.“«žÛ:SK”ÜUž5:æŒzÎ7„„g$Ç׊¹lVÆ.$“æw3å%ø.öåE0•M”¨²ûuÙšNHŸJ H¯³—ýmï19IƾT)Âmá|]ÀêØ+ªf$'À¸K´r™‘Œ'ñnÒk0$ûOXc 㘘Ê0ÙTú•Nº:hD÷¸°M¶»h¢:PÜÊ9h”EÞ¸ÉÇï[¡o*n±¼¨¡?×`V}i=,î³¥Ú%Á™³âÁ7õÈÊd¶…­Kªf³4æÞCªi9¢˜W««rÄðF«^Ô”ÔKp`‘E+–qÒÚHÔ«XŠF ÔÝ”þ†Ds*Y,vÎešÇoRú¥Š%KS‰5eê¹vMo ©´°,Q"L–ØvѾÞªú94éòt:I•m +ݲªëow×Ýðb1¶‘÷…_Ò2TF .JFwb½¡ÊK¬L)ÏR˜µGëÝ Xt¡)r×nâåÿÿPú.½_âV­yÁ’k[9|š×¿¡ª¶VŠkb€}Œa5ƒˆ­®;&–1I>ûÞêe{§(õFŸPäÿ~hŸ!4…iýôk«»Vˆ²…¬ä)ÕŸõºw.úåùºbY³>ù\´åU‰¯Ôô®Ò0ôæÓ­ý;Qôê„'s,Ý7 ý`ùû]|ý¾&¿àéGöÍS‰ô@ÅÓw=ËZiëZCÚ•—Ô,ò¢+M@íÆ ÞÏWL’‘+ïÖªöíéÕÌ#ÕñVh› »¾Y´Ö í{‡…ûXÚÄÜÊï> stream xœÕ[K“ܶ®rnû+æfRñÐÄ›°O¶¥8I)¶#¯åJÙ9Œö]^íÈ+­dýû4@Ý ›ËY[IUJa1$Ðhôëënþºé;±éÿôÿÉË£øçFl~9úõH¤?úôãæËã£OŸ)»ñ·ÒêÍñù‘HÏkc:a7NÉn€^ýÔ|ßnM7x!Ls‡ÃÛVuÆ R6oۭ謵jhÎZ);Ý;ßüÖn¥–ð„l¾ÔÁlça×è¥Y©tç¤oþÑ øÝ:ÕìÆGmoš––¯ÛÛŠÿN)ÄFèNi+Ã)·J™¼•¦*Ýæøhà(^y+€oÞ4ŠÌm¥ï»¡ÍãVÂÛÎ[8høypöÎ^ºÁ4æL¯š«¸¦š7OÀ1kšKxÔ%J5ß…Ã «­…òîwð¾†NüöTÆÂž/â¤U°ækxiè;ml³ÇÙÛqV8Ó<ÅÙ³Bசжù¢ê¤Dû,UÎÐ æø.)mZõ„u7è$Ø4ÐB@Ë(pò‡JT’’«üÂÍú‹™…´ñ§âŽ©ä€ªÆcùßy.VîQ¯kcÀ¬?çöxÚ¨¢pŠ^g}Q‹¤ŒË”¥ƒ$¯0hÛAŠžãÌ>½8gâÎ3âxàüû‰›ÖC Dr\QPsEAR{«eNMªn'¥TX*çXâ î(Ö¢,ç¢Þ—¥&÷U=+£/ÆÍAhSI/WÿB‰LYAêo§Lð€ o™‹2Í#œý¾„ —¯eëxÜN 6ÉžÌ<Î!±Å៉0¼"&’·×U ¤¹÷Hàš£YHu–ržq'¦•TOÉVÁO µúypµ Ũëc«¡ÓMîG‡*_•ám+@\®*zIØK* zÑ£ÏSÖ „²À£Þ³™?™¬E®bSHðÈñ j.Oaö“IFbdq yËÇI¢U4=Ga·˜¬¦kÞ)Òrv~’¸AÓˆ‹˜¬€BŠØr’\9=ÿÆæîÎ&"øÑ¤øÏ=jhƒXÐ V/‰´ -|ð~ÅnKô’O,ð`ç²-u}ªÎEjð´I3rLLsøe îèÁ£äѳ2 ÅŽLó5¡n^Μ$W˜®X­]Ä„´ÃWeô¬Œî%&êÕ*1‰©ìÄýŠ‹6¦¬ƒ,Y‡„HEŠ(Ƨ|sIÈô–˜æb¶JQ׊úJÒÈw­èB_†ùzÙ»‚ãæ_f£ª{%‹á2ÒOàbÁñædá’7˜'8H†¦†ï û õDwÖŒFÎ*Ç9óÝqÜ«„hl-/[R˜Ê];s.ÛºIª¥4D,fÉ2Þç]XUÎy¬»­ÜàøCjàö çæ¼að ¡,¯]ízSºÜÑ:öžµ¡×Ôå¹ ›®²›¨ÊŸÍþ&Pn¼Ø;d2“#}TPCxÉtz#‚( [²ETœáð‡W8¼A,òg÷8|É.ö‡—Ó"X¹½&œv) P ´1çó —ŽÙU µ¯YjïpH¶}ËþWàÖ5éèñ 78¼Æáû‘Z þbzÞ8Üáð‡g¸…ªÑ0„¸¬\l}oyx‚Ãk–)§'òñ/X®í–^›cðê6G@ˆ¤)†Yµ€d:“Ty­Ö8ä œM²L9¾H¥)BB…¡2ŠXí‘}Ki¤ û#¢€W œ¿FLrfsOúRK£‚_Ш…ª }|ع…ì_†É¬X½Z†€ÖºvSg{ä탚 y²,}á{ˆä œ¶UK,_%˜¿d„‹Ô·Wڲش9ŸœbL±ÌLõòw¨C,¾æÛnXm8ã JjÜzÅÖp€¤ŒÁÕp̵†Cê-ñI×[C=ocÇ8²8~ÛD&oÚò­Vàø``-E ;'“QørŠ|56+…ßOÂW]Ò§,ÊÚûì 5ÿ’̉X!U)ü>û¦ì€Þп´Š{g,2íÍEbÝUŽ£<šÓÓ^ò*=MâNÓÛøéèZ RùÐô§fu1?éëÚúlBëžïÚ-й3`J•_(Yº\f9ùÓ–@¾%t­½p´¤ƒµ¹£ÎôØA’|Zûõº¥¶¡ÒÖÆ·×Ì™z@³…g´¢¢'.ßê…hóûx^.vDåˆm5¾FÊSñ)\Fü¤d%V£M¶Eõ(‡NNóÞöÛý1×Ì6Êð¹ìI»t&¯YÔíÊ—¦½PS4D =l»j‘KlÇ v©Ýšpòe©:Çžh™A'ÌÊ{yRFxÀF¸ýšñãÕˆÿ(‹ã«^ÐêåÔzúº’ÿÒª629”f‹M¤ïhÖuPbßèÄBÙû‚}m±_vöm¿ñ›­×_’G²÷•ê?9>ú'üûÞCu¼endstream endobj 1662 0 obj 3637 endobj 1680 0 obj <> stream xœÍ\Ys·~ç¯Ø—Tfïhpà¼%vªœJbÇf•ìTeÍ%)FIñ­üúàîгCIvUJgW£¯?ûv3l3ùéÿ³7'áÏ Û¼>y{ÂÒSz¹ùÓéÉËo…ÞØÑj®åæôâ„¥ï¥R#Ó›YðѸoN~¾ÛîÔh,cjx‚âýVŒJ·wÛµÖ ç[ÎG9Ívøe»ã’»/øÀ Ò螎Öõ1ré)rœ¹þ¾eŰŸêI 7äXöP¼ÞNnR®[ö¯Ó¿ºY2g¹B®èÆ6ÊÙΛӃ›à]¨n¬ÃU©>á¡äñ¡J}S¾þM©å%ÈçÑæÖ}4¨CÒ0'vèé¡(sZ@·,®¾W!®¬˜7 +/JŸðDÙ4 3i´$HN0¶—ððE·d0 ê~ ®Y·Ô¸+Ðï$óðô Zxçg±ßúi9åËo«i§(Ú}z–E0^¾_e'S>-ºúBʈ”µ´å…ºËRÝ1gùzâQ¸ A™$jùŒã2)÷,³FÚ²ú¡ˆÄ÷>ÂŒíù‚»²l×m¿’[u²X‚h…z`´)eñÉuû¹†úQÙœƒFÊöyy¼3㞸•õn³qfÖnNÿvrúâ‡owzr:î=s,p﹚¤4GòéäzµldÎ-¡ju‘1+œAøÜSi§y˜¡8BQ•¢8sò”^šq 4`4 bœŠ Ɖ¾E-¸XÃfëâ@ƒóèú–0›y­KKÈSUæíÚi°Zb,¢xQ¾÷oÔ(7Ì»K©ƒáüÍCñŠWP¼©šÚù¶vEð¾±?æY58+ÔA"¨×B²ˆâP]Jfí@fÎPY‰½òHÝZÃû¼Rš/d1gðôU>)Xoªþ8À/bÒáÀ¤49ç@RÏ IG̵ÓÑP€—¤–‡ú™oÔAD—óÜAW]z13žò„yR¥ß ÑQu³1­ÁQNjºdßçE(×9ÇùcÒ,Eg-h heP{r:èé[¤—Xd,b6—«NfºŒ(XJl2`gœu€ ße~G¦ÿ‡®U¿˜Þ¯q>ΓY˜CI5 öDª'«¼Éï?¤ÐA,&ëÂ9I—l>VI’#‰‘˜FÅ–’ü[Ê9U‰WË‘°yøÎ{wÁ&¹í¾CªL/»TVšO|–™Bh­údŽE—“§Ø’ÏiÙ˜<Â[$âèšt¸¤m#:ÇAåÉéÅdtåS¯q1’OsåI4hëî…`fáÛy’œãÞõ¢o¯áÛ&C÷ÂÕ^&žXä\'fé›B«„~Ùk — LEåJ²ÿ8/#ŒfW¬6óšÛËF†V õ¶Œ°Š¿ÉÖM÷M\WÃp}ï=3yH¡'MÌŒ¥„d_¨¹Æ=€¶“àpò}›càpþ-Àá2~›'íDyx]r  î¬‚‘Ã)“ Ý$Di¤Ë'úq êû5œè$%vºÝ CälXà¼èVRO]5'zR,ÑPÞ6¦L4†÷ˆCs]—"ù¸ìx³V‘ü® Ü6¤aÒ)3Ó8pО¦§1E5«Ù¼Y øÝunÀ7…<š+âÌß·6¾LΗÝSL<ùú ûþÌOO*ÖA€3ãp _Ãd§XJ¤9·è¬D–#.5É´Fèአ,«d÷j¸©–¨|ø7 gâÆá&}¥R–æ¿,\öÔ¢¿Ê•§Y|¦·£ßçLYÔ-Xíþ›H"5_Yù:)¶®à.ÇYluוÑtû$K»4™°Þ“-AÔ¸%¥´›Ö)ö<›í@Øk ÞnÊ3×);™ç Ygø’³È z§3±Gq ötÀ{ J†áÿzšfïH#ðã.OY°Ø´fŸf±ÇC-ü¯å5È岋öŸ"_[v:*·¹'¡X†3BâvËpl!_0u:…(`Yç®N/V:lf ë*Ô‘Q–O•‘»C8c£lµÞ=>(‡‘ºNÎE0xC«Ûå]J‚J¶Û¹Í6k8î6§¹²©.™jÖ>ƒ q $]¢ ù@·?;‹TqkãXè|ªÆ_A´>= ­4ãcâé£Ìâ4ã|éž‘êl„ÚÒì×Ê«L­Ë’¸­·¤©jÉéqÝ{½#Ñ{-F^øe™MÜ;š¥QaB¼ ©A½õÛ³/ 5ÙéiƳõJ¬Ù(»Ü5FZ:##Ù˜%Ú„HþÒ :([%ø%cÓÅ:‹ ;0äŽûÏPR‰•ä-S¦>ºà‚È$œ$ßQ~¦‡ûÇC¤#ÝišÖ¼èƒ (÷ü.Ñ¡n UòEÚSòóQ§Y:˜Ôò'dž\[L$+Ú‹:obqC³Eòª¸ªÝK`D{¦¢dXZ›ƒ¡‘š¦<‰„\ÃX;o)«@+üßv›v…(ÎÚ•üÇD¿OÖ¦À¯ ‹Ú…ötfs+®[†ÄÓÖÉUáàÖpÄ‘£|Ý™[4]œ¥¦Ð{ï–˜ Ñ—€Ñ;ŽO5ÅU3¢WÖPœH kj½AzŸëü?!êÚ÷xìÏåB|$Á- U^O}¶Ì,§ï]bcÌ>æ„eÒ-ÀËD6©Ñ­~6öDW¾Ô¿›TäAÆ´80ãp¨ñSè­ÑGDDU» ;>‰i Š6 WýàYDSS´á°ž|!ÍMbä®ÖK˜Ä. g²áÔÚ47ɾÐ_#ÃèU»U²»°> stream xœÍ\Ks·®Ê‘¿bËÍ*ÞÉà1@>¤lÙå8•8ŽÂT*ç@qI‘¥Õ.E-eéß§Ð LÏ.IÙ±KC³xv÷×ýuòÛE׊EçÿÄÿž¿9 ]ˆÅë“·'"þ¥‹?.¾:=ùà e®uF½8½<±¿îûV˜Å dká‡7'ÿiþ±\õ­uBôÍ6o—ªí{+eó~¹­1FÙæb)e«»Á5–+©%ôÀA-|m¬14zî«Tº¤kþºð»Ts6v5]ßlÙ½œas³ìàP°¬øïéŸá”B,„n•6ÒŸr¥TßÂW²oa—Ãât ìá(N9#`'F[×7–|[I×µ¶Í7~£Âhc`#]«ì zÝìýùA¦‡ó§Q·ÐÕ‚>Ñ|½”°æàLs¦wDæû NŒŸ†ÎôqF£:Õ¼òƒuÛ GŸå¹É‚ùc<­¢:õ:„m/NÿrrúÔë–R¢ÓQtÖ9å÷©[i`Ñ÷KÛíz§áp®ùˆßÁž@jJˆæãdo‚j¼î{ašõØ×0>êÞÒ•¶Ø,º¦ñ¸“Ÿ–B€Ê”IÓ+³ŠUÝ Ò 5n_JÑv0Õ]žô]6Íël Ôr¼xµi+üa«Ú‘M]/½y¨A21 vW®é7*zÕÇ=‘A[<ÝËB%½n hwr»ôV#{Ûð,ìò¯çÖy¡ [Ó*eòó:ž¬tå÷Îd0ªãx%dÚRï\IPÓUyÐèBžâׯ—«®ºÎAOM¦H:……Év8±ß‰)BZj+þ@àÓ1Ð%p2/ÁUáJ€3%9ÊÇnoÐò‰¨ÎÑô‰™^f|LzTSù„¹öö^ì€|¥gú^ ã ;üÝ&mî–`h²€$Jý xK 4(^ ÄþèGÓ©<€´kh mð2Ú‘l2R¹ñ¤ëÇÜõ†C%F.ZèÎ+Ð&ÿÉ… ÷ó…‰Sìzš¶ëh×Ƈ5þN¾nò®0¨‹†¥´6q|ôÉQåt¹R­tz°•½%ÛÜq~Ÿ7=‚ƒQ‡Zºàz¥U€ÏXÏXÿÔ¶Ôh²Æ!ôÓ‰><ÂlW˜ÌñÙÑok멜 Te ‰£6lôJA£73–¼­fM`—ĺ/(ÒÒÏÇ?T0¨¨]òu_û‡„®ÄÖøX´#Œ­¶)­Žî]gé×5°KÔÀލ泃î›Ïýú"`ãÒ.wnnxŒKšªjtuBo7R:˜LGùÆß)ñ÷g·X»Ðr]í¢Ž­!ì¬Qœe¬‘½m-tàÃÙv èn&#]!FV Ù›†€aÊðˆƒÙ¨­2˜MˆTÀ`µË u ý·ØõŽøì@¾Áw½ÃKW€™ÈŽÌ„@ðg´UÙÕ›ú äA—¶ÕöÇÎvG–bBNE>•j…ˆù±Á§„`b`i„!±@'š›Rn¯Ú Êbjß3Ïk"_nå†[tS8SbDgTh‘?‚,Ew:Y‰Èÿ5I3òL•Oñú4e2/ë*R‰ÄQù’rØ=â” ìjâ|N3tZÊØ7 ·ž6Ü’`¬¢¬V>†æôó»LÈÝéç(›.nG䜣ˆ¥ˆÍ0¦¹M9뾎¡IHkÙÑKF‡6]úá¤È²kúú‘3Ê"&Ì©FHŒŠŒŸ| K¼ãa”öØ®²ÿ™?jÊ ßE| ­Ô _‹´9õ­áK —çük~Ï <Ñô=ˆd¥› LîãI%D’üÙ«Ø*Ó¥iZŒÉ³É¦? Äé§ÜïëŒîˆÓ ó2Û'ô5zfP_)Ëc.iØø>ü,)c°þhå"uU ¶Ydµ^Ìg“ ø¯„ðUÁ²ÎhßU`¬AÍ î…Íç;_áV±„EË?.ýfAc™q* ¼¨ý< dC)gª¨ì’E=+¦ìó<#Á‡_ÛÚ— ð.}?ÀS‰ï2¡,¨å˜ŽÕ[H´êh,>NS„b‘#*É먃¸LSŸT²KRº$¿§Xjû2ìá¹9ƒeEo`¬®ÀìMY+ŠiWê £²üîþfãJ®—áJ¶ð»ŒÇ­K^bËOÁÆ»˜`HÊS–¬“·àsê‚Æ[ ‡.á¶J—"DË’”' R‡¨?庻JêUÖÍ•œÀu‰>WVÒ…›‰Åª7­wd‚@•óñƒ°™A5ßúy ÄŠÄÿ>6ÖS—U3_*û7)_•×TMp4üoÌû1’0~ÀºœÉuJ®¯Åš¹)ˆp߀ˆ$$fl ˜¦¹ž]¦PT-˜èJ6È&³¥gïH݇aZz1&û/0ýY&ʼnÊÏ’:ÄcÝT Bëè„ü’šM2ÒW_øÒJjóÉ×^ô\T³GI5:& °7$±^çÀþb½Îǃ£4¹ùYÐ ÐÇŠ„D6Q¬?’-3Œ§ªþzÞ­iIe$£2æ®sÈ&?3aX¬Ø°€#Ù…9á#ªgãdÉ Û……~pDïÀËec  ‚cÈÈró=6?ä&çØñråfþÖ–h±sÍ…PDyk½Â¦+ùhÅŒdc):ä¢Ò=îY/r¢O<á$…zØëaY šºˆH´zðw²Ìê Ûy·8­{äU2ëPÖ$ éê6Ó‘ŠúÇ"òœÓ¬a;ªù;+2C4òr‚ï ÜùN‚YE"ÿ=cCÜ&¨û‘+Ç›•DÅ݃ĥ&ù¥e¶Å<1 u«³”kJâI‹j]> ËÐqÐ1?pŽØ9^Â#¶¿ã­"6½Ô3¡báùQ?Å„ÑÔEÒ¡Éá=Vñùèd‰Ò¹Òf¨‚º™¨SÀpš–GÉ…½wì~”,Òm7ÇŽøÌí êú ìð$MïQ”åë-ü£ÇIRV%m¨øôÖFØ™À›Ó¦JG7ÎÞþ̼ŒoF]Ûiæ]Qºhƒä IÚê—Ь9WO¡IBäñ*¸Ó!—ôdS]ámÎ]Zä›)SÂáT;œ‹%ZyE{,w*“Æ(Œx$]:à' _¼þm©zõ »-u«…HsoÉãû5ûj>ƒ"µbÅ/‰ÛMøÍµ&M «5¥°[=zæ³'‚õ—¬íÌÐô–€/wÏSÓ[‚Ãï× mytßUI0^=ÈIñA¦8ÎH™PUú4(Œ%bn¦ÒÝ+ƒìI³|FåMªs™Ÿ…ÓËK|Zƒˆ{W£gÀ]¾°ð¶‡îD㳞âöÀŠN‘îŒj(k||+ߤ*%ÿè¼x§ éE× Mçß”—)Nº¹ àr ¾Õ óxêTLS\Ö4[îc_ô’A‡øè$Æük˜KîùÐ6}¢rrYT/Eñj•7è7£`sàåND§Ì;^=LeË×€ãs0¼=zoL³ßé%gQ~^¥¹aq_Ðåi(4÷V~D‘…ð„L=ûñgážšwØ<Ãæ›0¬w¢õO{Ïñë;l‡ÍwØl±)p²=VÈo±yͳ%WXÇö=Ç&©Çß`“¬¦&}}\µKZ¥_yé­|uî€h{7 ¿ÑÊ߬h#Z©Á %_zDº/ ‰¥æ+l^csû©"-´¯„s÷ÂÖžÝ ùºaµþ~ýŠÝמm’oP⛉˜Äà*ýöƒ?ÐüÀjzŸ6ÖÇÂWp§¦óLÔÿ0g¢ô ÖÚ¶¬µmp‰çøõŠí»+w‡í‹éë v;kö+oÅ×ì¶Yz7sÒc CŽöÙòžeý"ð«c›†u6‡¿ÉiWM0¬{Ÿ…É{¬7,2¾g±EÐý‡ý€_oY¼œ³ #j¾¥ ËöuÎöå-iÖ¹Fó!smXKÚ‹1†Æ®‹&þÿÓÍ—…çeÌóŠÕ9áÇ4ïàÓ`æ„Y…lY…ð^‰xº¼QܱFQÍ;ªô—Ð ú€kVÈïXy«¿+”Wî„ÑØx”X“8š÷2õ(ïÏð+ñ÷ÿd¿>Ça²Ðùã­úW“‰Å“=ÔÀþ…d)ŠN™Á¸‡ç,ºùý¾¬¥C”^‹ ›=4Ÿ¡ &{¨Éóˆ6_’dpü:c³Ã$¼ $ßA"í™!5?‡„P8 ‹ÅeÑL«=¾Q1(w ÿ²Ô«%l²ã¢^ –©¹:`D#F–‰¢%ûëÙ³ðŠvvF´¿g;E>¾C)Ú7Y´¿r\Êa^t=µ>ÃÚä}Q莉t“-Ö} °.²ö/Ù JzÄð§û ž‰ò·h4¿ÐyX>˜®Ôˆܰ1ƒ•¼ó?IqׄâÑølçUy¾(Í «¥Ÿê}%¦aëcÃÈÉZvŠ_IDTNhÿuÍ»d›|:k)i‰ûØ0±„úÿú¤;þ­wß{Ö!Óÿ)—÷dnúÑßœžüþüt¯›¯endstream endobj 1698 0 obj 3926 endobj 1717 0 obj <> stream xœÍZKs·¾óWìqV ¼å[*¹¨’¸o•®h‰ZRâK"%Kÿ>ݘÁtc¦w—T.)ÜÄ4€¯Ÿø€õ§Vf£ñßôß··gõÏÙ|<ûtf¦?ôôqó—ÝÙŸÿí⦨mô›Ýû33éû”‰›ä¬Êðáöì·á—íyP¹†/$~Þ:B¶vøº=7*Æèòp¹µVyÊðm{n½ ;š¤`TØ# þШu^%[†l |É £jÔa¸±\x³Õ`lkþ³{V“7Fšyî\P`1€S>•´Ù½ B6h$^xCâ5‰¿“ø¹Š¾èħ=‰ÓîIDsRR)84§>’xIë¾Ýb”±axO£÷$†¨Á¬R¦ëè‰×$îE…Çg‚P¿t;4ñ+‰ ãwÂÈ€½'`Þˆ[Üt‹µi†F‹(ÆYİCp![ìf÷÷³Ý«ß†W³?ñcP~cTˆÒ¼Fÿ’ÜýÄ1`Ÿ»àަD„‡HÃ`»Îq+Ège³6«LÛ‰™öОmÀ²çq½× Åü½¥ùOKcZî´`<Šùp/†þ©óµóŽ::”4•ÙÿT[lC1;jª¢§g8utßkZJ“¨H´™˹kð¨B¡}‰žÄL!‘ÃÇ^RàÎ7*±DŸ¸ãˆ\·4Ëâ6šH,¤pN£v¹C]É Ñ Ä iËõ{· ™ÝAT}T:D#¬`q¦ŒÈ‰Q‹¢Âë¥k.åÈâ³s2TF U:*„‘V0’£œòFa¬¼Ábù „5Ö´÷b¹Zñ¸®tâHø¿êTºs×dI+|D›Yìæú ‡Å“%¯?•ÝVŒ'¥4ê¶sä'é˜à‡;ê/iÚM7ÚÄ;÷âºW´Â­¸‹ÂIFóBªÕNR­ÇSfî»ø¾Œ°P–#èuÂC7ö«4)BËa‡”\öºk.Mü+)üLâ¯$þóØéÐ7·\[<ŸJ]Ó—Èòl“û¡'ϯû¡„Ȉ+Êí:t@„s¬?ÊÇ Î%D §Îàì)pIŒ¦í1/¯À#Zô¤8wœÜ‘\··pÐõ=mEâì3Ã*1'n(‡ÕŠºL,‚猄³¸ DpÊ­Zua",WGœh9qn$+œQÀNá<ÉjzÈÇpÚcÁN89»d¾.;‘u ©†Ùu"½\~A&ÊD,wº+pþ™ž+ÇÁÉ5lOy.ÖËÝ/> œ¼¡œs,¬Fô²t°œKˆ„°ö@VàäsC¦Ú¾S`ظêêÄ­ˆ~%quâòcmÀ¶áÞK·Ø±#¤¿¥½àpþ48Œ½_‘ÈX6{ÐyìöÂ÷ÂñÊùhësaeQ¾(gJw[§Š+Ñ€[Œ*1ô Û¢UÖfx3Þoµr9™à¶9={¥ bhš_H(¦±Ê熯ó÷Ë­Õ*Æl†ïóZ³‚±'|ˆ ÙÆ0m®×£„ §·ILõŠTé;ìî•q.¶gTÇ‹ñq¸>iñ‚<T¥D×hs)õ) ß…]okõ58×'ÂIážD¤äøîë}%õÓèE}Nö<•‰ÎÄy%_ò{UlˆÝJ¹zÜÔiŒsñUØédÚò¹^> †*•Җʉ¿5ÏøS pñ˜úÇpÜ4G¨àO„jj4 ÚlÁ’ÔŒÏiÚ¦=d×Í!‚wó÷Kþ¨>ã|·ŸÇ™I˜Î2RŸÐ=tèÛoiÙëù¥/9è3×Òï«@T°&+ +ýPamd—r“ëCl,ø`¶ÑcíÜж;óóÇæŠ¥}Ma¿² My¢Å®– ÉØ ñ Aµút¦z·ÍÊoºØá®)Ö.2MŸFólër}fÖ v‰äyVŒÁp-Á+½cßhì¡Ð~ö˜ò˛İÔk^ó06‹R=:šž“#ñ‚™r?@E}¬ [r^ ³¸Ö*¯bK´P M˜*[•^w`ÚZ¬Q ÷\‚¦›—ÀkM|b¡²¨Œ>,¿_ÓખxEÃËŸUEß´Ú(•Il+ÂÇ2œuª•áW+mä°Y‰0€7’D€ä‹ýX—®ÀŸ­,¬¥JÌð'l xÔ4ˆwÙÉù¯Ä:þDßÿº'zKV[½dÌö#M¡ý.É6^ù·vêߤ½µ¼©ªå¶Ÿ¬„3œT96VkªcC˜ŽÔë{ŒT-ïùÁO.ïb-œS+êpy·òÅç4ç %ºÅfMw¿š†u½-q¸ì؇ÃÔˆÇß|%Þå56—™µJœËIœëgØ_ÃXÐHÀg!Ct÷Ī.æYwD{FRV2#b—3©ºÝ:°ÃŽÌÅf­|ˆ+ÆV—iŒ Ž‘SŒm’žÁ­vÛs`ÆÅ§Ì#%=Å‹RæMù­ØŸ¿,~§ßÑ'±µ±ƒXÙôÔ§˜êu‚hã[ªLÍ kÖ QÔG?t}tѧ)ÓªÆß;•iÞr!¬‰@ö™˜ÎÜ@:&¸PXSÍŽ5¶¾Øü†ý±…+çN“ŠzŽL,‡ÙàDÀ˜¹]¯jtñ~læïQ­™£ßSB¤ûe\©Ó-ŽJ Ú \ÏÇ|ã$Ø"ŒMœ5ÉÍúbr%$ŽÈwÒji~Á…°øc4éÀ;)cUj:¤|b´AýÈñ|>Ð÷±nî;ñØ™ØmI=;ª½8šiÑ™ûߌx«ÆÜ„|y ï7ýA‰!ÍnŠÓ"#Öü­g<ÏTØ+=¿2÷h)Áf³ÜaEÄîS, ß-ŒEæ³Ò¡=ß·4ô/)½Åíibd{žòíBÈÖú}IÎQ•%$úÇBÛCJ2Vf`­2™£—§ßâÿÅ @B¦i§âÄèíâ:†ð·ÝÙ¿àߨēendstream endobj 1718 0 obj 2185 endobj 1730 0 obj <> stream xœÕ\[o·ú¨_q>d×ÈY//K.Ó'§iÓM‘&*ú…lÝ Ë’"K¶Õ_ß^‡ÜÙs,ÇvQä!kî’rîßÌÑ/›q›ÿ‹ÿþêÀÿs#6/~9ñc|¹ùæðàñÊlÜàŒ4zsxz â÷zša6VÉa†¯~î~ê·Ó0;!¦î®<Þôj˜¦YÊîM¿ƒ1FÍÝI/å GëºwýVj _ÈN”IŒö°^•JVºîû^À{cUw>5ãÔ]²´•Ç‹~„CÁ¶â_‡S ±bp0€§Ü*5 p` mÐÖÙÍá1ÐÀQœ²R#%jµsªSÜ  ƒrÖÃ8Ûîx~9[ ÿEùô]/à[#\JštŒ“ä ôÔýÐk=˜yî®ÚÙÓèü9qÔLº»…{°Fëî5̶v£ížv~P*Óý¾ßŽƒq³i)œ´˜ŸÞôÂFÂNäË \£-Møz/MélOû´O¼xEÅ ÅiÅæð¯‡~îqUé´»sÏ»¯ì$ÊŒ™ºGeô7°®SbÔA¦ÌÒõ<ˆÜ$ Òš¾|Õoõà$Ÿ&ã…'}zY>EN€¨Z}‘%Æß°vƒ²‚tÍÀÞ×YÐOÂR*ÎRæÑÀ]à|5ZÏ9ÍÃ,M˜eFc»ë"œdçEi§H·4bRÝ}Ô8 ½3;N‚¡Å:÷Bª¯Ê®d}¢>·õ±å4(!Q°2Ge‹‹rÆr°tÚ©{™·%\õbL~‹Ë;˜¤é’é®g“îG¯z”°>h’¼~^æåÉ]ßxB'7Îô¬(ÍÒÂÇŠÞûÃ.Ïçï¢/[ º+ïYƒ9nÀ éă`ø¢èºÖyÅz9vÉùÕ®PÄŒˆ9¤'ÜŽ>¸.ö𶌒“‘ó^&A—tô4¯‹×½M÷½`‡Í(õ/â5‡W—O¤—I¡ì 5éÞµë¾Àu'%Ð$êa9Ø ý‘°œhŽÁ·Dsnа_FuS–L¿Ê‚Gè_9Udô˜±_àê#xFIô‡0ŸhñuŽ¢ºÏ‚ÐwŠƒè¹%]à<¿A8rÍ0GA >¨Œ×Qà‹ž“ŠÎºÝøñVݹ‡º]ɹÝïÑñ ji©½AJ4è™·‘ÁaâÏ˧GyÙËè˜'¹âDÓR‚º¼»òvÝÑxù&¿? !À,½1Çéà®é¢éK$zV(u•»ö'm”ùœŸEçúSvwEQ®ÙÇ«FVGYÀºÜ/¾ÄÇ»"€DƒªARiš_IHª½o{ e‚ÝŽ„UŠëVø‹HFÉò„ügœøß²šÀjR¡ªŠ{3þ¤àÀð¤bW‘É=·g1gÁÌ8ó[”_;޳YQTbΣu2¢šÆ›²ìj ±Eѱbt/ÜÒ±’[+WqYve ñiÅk®ó’ý£ ¼ÚëÞPݵòUq»WmìÅùÚ˜{_J+Iµ±ÏX&óR¶jšãcp«ñ¶½[Ü.ý¸ò^É’µ‰© Ûhé ¥¹èêW½ßdvve-â—Ó]ê£ØŒ•'Ýëj d©†Û ðh‹`¡eSjDCÉ-òLØ ,ù&;èâŸnqK«‰ ’EïJ8 Zuzi)·ˆí½Õs¨ÄY[!nlÊZ½#N‰†Ÿö ³‚÷4¨'ð§øÔUí®iN§ðlÔ‡­ü8zÑät;Nì×Éݾ@[²ˆ Œß+æM¤¬•ÄJÉç¬ %ðE£_8)hq`JóQ0ÑA¢…#dÖEÑìûxtU©ÑÜÖ;D?çC[È•¡-Î9NŽF¯X»—4•LRZ%wéf¾^@*óf†` †Ù·Ú?¨EN£Vøõ4è@[a#Öò,¿öûÆÇ³òø¢<^VKmq­-DT‘ìFf&¼~^Ö9*ìF„¨›všvcЯBõ¡œÝâª<¾*×ìb¯«ÇÉ ˆ 'DÉÒèPÇüX]ÊAôžëþ¼·À¯{Y]S:ïÈžwâÏû~, lJÌÊÅܲ·Aø|×~ëpR‘J©“åø]¿5#ø/h.é"{½®6HÔ¾f) ÓÞ°·p_Ñ®t‡Â–K=ayü9¯ïóŸ0∥šŒ¾eGï9©e™þš%‘7$üuþ ¾¢k{€q[%‘L P„”6Šð»LRh„£ á  0Ç03dÙšŒm¥!îÝ“ª¶½ë ¡ä¨„ßÍNCBðœ»ÞV"â-­ý…ùËLyÀOŸç'<Íœ°®üå•_ ÂEô&ø8c5zVFã^“d2ëñ1ú#¾~¬ž…JÞð†Ä)ž|×g0M”9#Òjê$;J¾û UA Á KJƒÜwZ ƒ ¢°‡cZ’¢d4Iˆ#;¹'ƒ¹¨2„%XvÌF˜$Ê>ësbB² >öçÓÒ/©ñqKM“Á¢b@nõJt\[K?BÎ2‚§œe‰m7GX¿d÷Ø@5![-äüj^A­ß­$D ŽJ‚Ð" —m2DL·èR|¶uÚCdçšJõ ÖhL+ùUÉã {ÂÛ6Ñð÷ <8W£{sÉ_Ê µšê+Á ®E,Jb6‚\úñ 2º»þ±Gš?Jg1@²×¾O w‰:®+ð•b„dÝ—ädA³fÇ£¬g”‚ >í¢ÂÏà<“ŸsÇ"Btݪšä’QvˬÇìÄvs"Ýû´1`Ff_5M諘>²>&ÂäÇÄho;&Øœå\À‹ÃÞ@%EÂf^Ë׬=GCÈÖ}KHX5÷i”Ô5£ð ­Ž ¿ˆ2Æ@s;J‚d… Ö…ñì9ßÃ̲²ƒ’µ< uZV:’ Ûé‰pón秉·<ëOZ«žjòȼ%­Tœé?(º…v}¸ ±›%`Ì?{Œ(… Üœ]c¾ Ü´¯ê¹4Ï©€ :ÔÕ|KHñÂñ§rˆUõC,0µ‚)çMžÔ@Ö(êvFx®çR³!&‘gÙ);º £õºÈá$øz(„GÅãÚ+dá À'˜÷-o­ðòŽâP ‚8_åZ‘Ãû­Ö}h%€`›þK"+D/*½«Ú¼ÉÆ“*HCª™OÊB$@»*£|„už#—À CÀ®áÙg‹–[¸/o½W-N¢Àƒ5ÛË®?…4–ÞˆAÞµ q•í•Ø½´pš”r¨•&Ú\û„ÕÊÜz iWäÜÄSuä –±MµÝ nInÊšV¤V ¢ä/ITTÂr˜ÑÑ‚ÌzÕã7јü¶¼²07mÌñïÜ]1Uéàâ/g̘¢ÍÖhðE))SȺÀÙ8<ø;ü÷_q€@Óendstream endobj 1731 0 obj 3731 endobj 1751 0 obj <> stream xœ½Ùn7È£¾bÞÜìм}Ûì.r ‰6@äAÑa Ña;²cý}ªØdW±‡=3’“@ªáQ¬»Èª~»‘Bm$þ•ÿç·'ùçFm~=y{¢ÊY&7ÿ>=yùñ›$’×ÞnN¯NTYoÊo‚Ñ"ÂÄíÉOÃ÷ãÖ‰˜”rÃ{ßF8µ>Œ[%¼÷&—£ÖÂʆãV[ +ô h“€Q‘àŒ0صQm¬: _ æ}0ÃÙ´ÔK7Üui9#ðf”À«~>ýp© çrkŒm†6§ÀàÇ­ÚK3\!Õ g†ÇŒ3¦d†{§Cc ËÑ‘TAÔÝ—H¼NǺ·ü–•¬®gÚ ˆçUáØf6PNù:ÏN‡¥´ÿ5Í_N» €ï—J…áͼ«Ð‡<ÝóSI‘8ï’Œ•Ôä- ÒJ`p:ÖÈ ¶^„˜ ÄuI»îzƒ» ­ k•›tlAQŸŠ›ëO¶Òh„¶`¨YoÙn´M2€gðg°g „è30µd”´Å|fªœ 94‹]VasN^sþq7œ5€—>´î3 åj "ç Ï9wªI< Š[Ü•4®ež0J—ó³§üUeD˜Ý1z1‚«'¯²ìl&¥á"p‰?»úr² 1V«HŠsHTÍ’L»&¼8 õ´Õ2 –· ¢‚—zÒÑ×ãV Ÿ@Ðnø†ÁßϺû?ýnŒQDžôýbÜ‚ý$âð#Òd@?i¸ _bÈ(=+±,pgfó³Ö[ó©ºD;EY3Z¯i!Óé›¢Ç ,³S´lÚÆhØ®›¢©˜Öíy²Ü“Y¨`^ ”³Ñ»EXZ2Íp‘\v œ‰òº‰5å€;nT@KÆè6– Ý ¿:VŸ>ä•ç´ý¾ë–Œ5²!D@ÜŒ2d÷䯅È|A£™Û -xÖžu%ÓøãV+0dŠ{óÁ5Lû¾—ñˆÀ2‹D©¸ÍíieÛ体Zï}³“BSÖ N9‹ÞpN•&èj˜Sônc‰Q<õ-ÜõwæñLs—MvEùDé÷çT\{;] }JþwrzÉ+òÙCÞ—ãZ2B$þ†Á‹¸VFK\ƒ¨õ-qÍ8—ãšw0˜Û=4Ñä`¬Â´¶õvBß±ÙhÉ&†\TgK®îv8ÈdöV(]]˜"@½—yoˆùãïíέpáGÌ­~¤8‹Rƒ_QxßQÙ±M6¬óûb`ͬõ„&V\ÿ\ÞvÛëÒ¶ÈwÚ'±~žoENÚ|ÇrÂnæ´PnÃWó4P2ƒp\R€Ì’Fô2ûbŒýM;û]Ú$¡7šƒ R½…hTJ{¸òÞ2OæJÍ•zW‘ÀÔçJÿéŠÒG³¤ŸÃñ1˜KðÚŠf¯ù=AQj•ª?Ûü<ú/U#_ÍÒ§ÚÞŠGícéyZÒG³ô,Û;àN`{t ùT®t‡ªU¢?ÉöÜߥ(F¾:š¥gÙžïq÷W¸#_ÍÒ³l/ôÀ§Ä=âê‚=#ð¡­´ÞÑè=¿øžÀw~ ð’¬x›*ÊgÝÑkï ¼ëI;×ں΀k•!ûé—'§Ÿ7ëÔrÏ2ÝY§›uxj”ª®ëZlÅgé\µvîbrïa][ê0©dRyî>ár|«ÂØK<fŸªž½â\e-}äazßaíä²,ˆ•ovø)ՌؑÝÑçò™í†©¾¥T–——Ð-ó‹¦_Þ- ¥¹¾Ã_-ªþc–JÐ=ñ]ꛪ%{¦<Ò+cÿËÖée]em]¥ÿR\-oL56»+/Üõëè…2Ñ{þvf°¥TEcO­—tÔN±—v«pgü­X›ôö9½YÖ7+C~Ó-kQÝ …¦µðѵoñ\ý0š=™çêG꿉wj µÞS[0LÃ{K?ÓSv*ÊØÔ±·ÅùÕØ{¿®VV+çùà¶Ê–Ie3¼gˇqP:;]­Õìtiœ•c¿òLŸêS“¾r}j~¯–ª©íVÞâ¥}¶«–P k,íÔÝÞ­T<2Üð RCCu0c!‹ƒ'x,m·1€¹p–¾ }Oj«ù¨é5W>ÐCj[ úâ(ÅjõT’+¥$æ ›)j>ç±û‰âw¹^r«ÒMŒrn!m”*¼Æèn%8EwÔ&ƒ]õ6“ƒË)mu’@–æ¤0æ$Þ£ê‚Ë ÅP Œµ¨@ĔР5œ†-ÔI”Â:ŸoS|8!¤iêv“åS ¹Èó @wDžú×ðâ¯]ß@æÈ¿LR^ «šÞã/k §6Az­ÞE¹îYð²·auòÜå ¦Hý–ãze~.S+`@E¡¥äíÚ¹sµR‘e8çCâ?Bu×ó€'ô0ú ›&ÝÜüXÐW=Œ(y1÷«SCÔ?/ùIbË»ä§~ ²Ÿ©ûõÍNkʄ⩠b0¿*}Æ(#Ÿíg Xç±ctnYh¯ýÆ7]vÖhY.zß]@%V1ÙUˆvøR3ˆÛý5ÙwsY¥6úÝ —AÖva ¡éS Ì€“?³:ýÜ'4Ûf2Vs?t³¼^*µv;—7K×$½«Q%ÕÜ—Íì9ïÉL¦høRö1ÅÜAo¾v@ë¹þŽg¦ìÏÕÌkHé¹÷ÌîM¬^j=7Éþ¯þÛ?@àù³é"õùsöž}™ð]ºñVCâ>ü­uíŠ:x;–k™%û+©0«½ ô Ñ$éöë&¤8ÁÏK¡´4“Ðí&wqzò-üý¼±¾Ðendstream endobj 1752 0 obj 2138 endobj 1766 0 obj <> stream xœÕ\[o·ò¨_¡7ïIr¶Ëë’} Ú$(’&A«(Ú¦(d[– Ë’#ËNÔ_ßámù‘;«#;q€ÂYñCîp¾¹o~<žFq<…ù¿_Å?Åñ‹£DþcÊ?ÿñäèwß+{ìGo¥ÕÇ'ODž¯…=ž•ýðòè_ÃÃÝތΠa†7õñz§Fcœ”ÃÛÝ^ŒÖZ决”£žf?ü¼ÛK-i†D]4ÒèèiyÐ[£Réq–~øv'èw;«á4Mµ“.Ù³œÖÇ‹ÝD/EÛŠŸ|Mo)ıУÒV†·Ü+eFzá½4#r>>yB/héU¼òVÐI­vÞ4c{é§ÑMbø*þìÝðr'Ge¬·Ã+ÚO9«&5\ÅÇYMÌÙKZB”†zœçÑJ=<©sOò7{ÄG_CºiÔ4ú´Ž^ïñÑk—7ˆë_ªŠ¸.qh=‹£n"ž-{]§ „1xî´ÓI×õ´JB)"Ž={x]Èg†+« FĹã“oŽN>¢D TbÒùöœ÷*Ñ—–6}»³£˜'#èÌ"23 R5Ç q¢Yý*=º¹<…Á+ŽúÍ"Di/I¤‹<rª}–­¸è¿ ë½4V –­Î’È«D_*5 1—]é÷§j’ aa®:­éXjšEÙ–\³«ò±•¸Š¶•ÆtítëÝ (+$‹"3é*Úí§qž&GÏÏ+1`Ò³LW+œü¨¬¿â¤`ýå2õ<¼gN„Gêy4–ÔPDåÏËDXEÀNvFlRÏród<­\ÓÁh»VcÃ?Hg:ÌoW”ŽÔ6*ƒÇu¸LfgóYÃe½ªÒ½U‡ž×Ã$y1š¸r›_AûîZ€Í$ÝâðŒé ŒŸ\~sØ8î`cP­çËc¸–}¾—=© RÂ2]@l‘v$'Î[šÒ„YûQÍiþù¡yÑ‹œ8.+œ˜$b·*ŒÍ÷L ÖÃÇ‹Œ|ÀØ”—x°Y? UÞ«ldËÁÌJ÷õwµ¥üD†?ï¤"V)?Þ.Gþi'icÁã°Š?èP@êq®ÂȪ‹t^‹/óîRý”h OªD#­Ëdr"¤.@~R¹|Ûi ÄÔìL†l0%~#LeLjÁ„ÓºÛu¥{Êža ‚áFÔLw'Q*ê[«=)ªÇ"Ù«ª‰óªNy—.@Pln-3x–€ž†tՎ䯘³©!uÍ :ƒ$è»æy¿¬:G '6‘ô¤¹x ÛèÎbSÑQ(ñ(×á|мº…{ZˆÿcDk«"´«?¾¨š¸_|¹0ÿd·W£ôzvx‘<¤î¾Zdâ¼Ñî‹¶òu¤šF£ ÌzI]ò¾tF;ðë¢:¡3­C kx§¦N½D''Ó›Þ[‹Réq´qÜŠÕ{O›J´,(xl•@Þ­0Ù4ª½»¦|ÆÆç­ž_² º"`g­ºÉ®Yu!OYýÈ{yð†€¼ Ö£b0á¶¾â!½ ÆãM D#­yÒ¤}‚%T«NÅ ‚ÚêN-þ¥²}Š”.* C·1‘Ùj5–(DÛA+'lÖ€ùªLȦ!^GëźÀ­}cÕxSg8•‡¨X§ˆÂzº#³á>«&웪?¾ßiZ§‰g _„¹´Ë†riD5˜/Ø»àáŒÃa È'—õ0¢WäãQZuÝË“=z¶œu×­WE7©š¡+£µ1D×áV] ÑSâc–:,S㤃l°ƒ¥ÓãD‡ýW ¥Ô^“ ¹d6‹Åš²¼­Vê JTaÔSÒP³'ˆRÂ{W œ!lˆéÏM‰í>»=5å²¶pönlYõûU=À;¡W —b0¡¤p?")ͤ£¥4£>Aå›îþáòóðe}¤PÈx1 :ùwuôõñ[vÙúì³:úIs‚Þ>ìÑÚ@¬êåµdÐM›û(†ÁÞÉ^ÕÅŒÜF˜Þxˆ)bVzø‘M›÷ŽH<á*x‚Æ’ýËåþŽA+½XyMگšÕ?ð¥Þp¤ª¹e}¾è…EJŽ—^qØ%µR½Að!dkLK²ᮋ‘øí­h­‘Õ˜£%!²¨÷}eÁ?Sh Œ‰¡UNÇÃ0÷¿u´Ìµ‡ÐTG–.v‚üÍI–¤²Mòòå$'¬²y‰×ÒÆcκ Ëø_l9ýOýu1ÄÑÎ'`*ýòTÖ[ |¦Êg©k)û!Q“+PÚP.IA[ 7ÊiR wJ=o§\"”ƒê/HÙ~°œé&ç¯fÓù˜w&š [6¶ÍZn"}šK%°OŒ@%‡/t­Iöã{´†¬æóî¿@˜ÜR½÷Ie¤¸Cñ5"Æúx_È®c µ_’"'Nó§;KT'rðhl,Àªéu9ÜX76iž#+ÐànñuÞ¨ÉîWw£­åðY ¸„Œƒy©Üí1f Þæ„↌Ki¶à>ÓÝgpñóYWÐøy¾§+ø;áóúøë ‚ÛøM%öé»z…m…¨Äïç+Ö’ÏR<3ïä!VCq‡ü/}VŒº†Õ ùAaÒØOA¹yÂ…> ÿš’¾ªZ‡2×|îãj¥¹ÄF2àWT €Æµi~ÅÂϪy*kmÕšßîš¹Þ©aµµdMÊï¯jËôåî)3»ß=õ°ëMsZ¦É¢o—½Îvt*k‰ËË låðbkYßòþ´+|¿Ó£!cÓØ”•Äu¦,=jéíbŸ°ÙþŒ|Œ¾ë#)Ù D¤ÒI­hÒØà¹ñADçne‡îdçÄ8 … ý¢U «ˆŒÇô*té*äØHÀåRùE_LfÕ ¬—ôÝ£jïØØ“gj€˜1Ñá;©Ÿ-·†M¾g‰pÞ°æ–õ=9É烹·åºÛDß}tÃ’€{†Æ*(o‹D!‹ÔÔ(dÈ^UoƒA~ö|¨¸dÿÂå´ñYuR˜¼1å[ø.³8T ±`ý Êa0ùzeÕ<ü…S3ÀI8Ís–¿%.¤ƒ}·UqÒŠ_ ™º¤¨¦NB¦–àAGà—7Š${ó½—˜…ñm¶‚Ñ)·9Ñî ŽÚ÷”B¢¸öôõé×K²e1­ày³ûE½Š”™ƒÈæ²F#A>B{Å4Å4NÞHï5Ì…/4`Ùóð&ód Âw¯KÀäÖެÃ,é …®ý=D® ‘Fœïºcâž—;ø,%oßL€ÐíiŽý¦yóÖL¡|„>L‰}:D™+F•[ ?×§x/ôäîщAjÂÁÉš.6a,më[.ªÿiHè‰{Ïd¢.oTiÛ™µn³t/±!VÈXS¸Vm³Ñ¯§ê¢U3wߣЗ.ÑÓí,kÎz[H’‰ùmp¤ß¡{壜•$Ê5ŠkÇ'”ù´ü}¾ëÏ7‚ŸnkQ!DŒ¼®_Ùîž|h×5QgÛÔ8x‡Ì9blù öª‡>;ÁÞÙM¿2[›Üܘ.¡5,l ­>±_‰µþW¬”±•‰ÍtÉzÇuÍkó÷¶¹¨>ªdáÙ´í @ñé&ÙÐ Þ$ª­^EÿwtÂv0×[ÖYƒ>~½Ùð!ã³þJ%@G2_©¼] tüÙºxÛC{ò߯Ø^Ã6ž —„yÓóühûà•5š»ÜÝç*ˆ¼KŸZ¹Ø#cP+l–Òóh®Æ«ØìMn²U] ciåèó·,,¹RøoðÕGm«í<Ÿ¢\)ÙN6·2*–m›þðJ­on)¹Ç` ºáËÌÅæ>feŒÏ'—ºŽj¿× ß7ånÿ»ûÙŠrª°àw%uphp:Ø¥Â7x<ØrÄ-$s=®¿jAÞô×éVÉßl†d«ì˜êÌ‹FiG`¸æmÙâåccWœ6X.[㮀Q·õjø«ù„.À°˜;ZËTiû8µýÿ2Px?èsád“Jl7õ–l_yrôWú÷?ÄOî@endstream endobj 1767 0 obj 3672 endobj 1792 0 obj <> stream xœí[KsÇ ®Jnü›\¸ãòާÓÓí›íÈUNä²3qRv—EWæC–þ}€~=ƒåŠv*—¤tPs¦§_>|zZ ½Z ø/ÿöú(þ¹R«WG?©üÇ_®>?9úä/Æ­Bœvvurq¤r;޽r«ÉèÞË×G?¬¿ë6cïƒRãúš·éÇÑk½~ÛmTïœ3~}ÞiÝÛa ëwÝF[ =ôZÑG=<íÌ1­í¾§ÚØ~Òaýu§à½›Ìú4uuø¾×rJÍën€MÁ´êŸ'„]*Ãw¹1fì¡ këí¦ÕÉ6xÒmL¯ƒüú*ŽäC0°—´7bw8*‡S•枀ܴ~Y'å]ãû1X»¾‡¡F]ìúçN©Þ˜iä#½Ç©\ ‚®u¨~å{¯'68Ú—± ,;€&M8LØ=Èàžžæ-ú© ‡Ãߟwjè (Ê0÷¼Ï#™²×Øó— oóý.oƇ,"à®jËy]jöªÑà 51ŠåŒ6uÚ)ßkïÛÎzš´ûòö6®Ø‹ê¡ÇÑÖ›nc{íÔhrs ƒç§³«‹»¬ê#ę́{‡ª’W%ïô–fc ÛÖ)Ø©É]ÙfÙaÓ™¶3y37‡",=õaXhSÔ1U´ 6ïWù<À {ß=˜²áh gîšš;j^Ö¦t|Ú–~`ã6IalU‡Ii¿þWh@ßXÉfè§að®èkÜ#³³3«´3?(4¤Òw×Møgt U`pnµQInÐ\èqâ!Š-Þ³EÞP_²à7ÜþÊ÷gÔ,â³Çà(N³÷v5iï™ZkÎx­y1/tu~Ì÷’½Üvà$⢹‹&­”íuEoañ •ÕÉó£“~X;8‚`ˆ´GMp>ŒëÀžmt¢¿èÀäž]²e¬E{/=OcËGÔåª$ˆÖ~èíèò{ì‰Rñ¶TX?Õ*gƒ“(ï›ïé#80{Æ3Á¦†ò­g›4ôºn | î  ÿwàÉN¥ _Öv4 Í-™údvžeÚÑ8ˆ¨s5™»5Ϥø½wÔá^tfL•·Ùœ@ÞÐÓ kpj;zxÉt¦¢3¼×ø4èÑ™(ú 4-ûc3Ž{Œ™z36އ9ÁW’›¨>HD=eÇ^ ˜g¨¹}èÀC¹êŒ,w8ÍR’çl]7#7ÛâZÔú˜Nî·uØSî.ê KѺU/Ë1ŽLo´{©A&#£`UHaY ›©èÞЬú‰óÝÌ‹-|@{¥‰«Õª» WÎþ6ïf²ü+¶0v0Lû˜F]såÂC2J‹è6! I\R“ÁSŒ®·IìSÛ„!Õ„ÌÁ¬¿ïÜŒèItšvÀæ-v5vÒ”5~å#‘“ö*¸± ú@t°n;:FìÜó¾VÀoE‡€}­^?Ï#L…µ‚4=Ÿšàê•xD:™Þ‚¼¿¤ÏØw4Âíâ¸sèÓ#Õ¾ˆÇ†ãò ¿ŽZ­Q£´!)—wYjJ€ÀjäHõ†¬ç—ÄÆn@‡“ù#)¸¼©ûgÚÄœÛC}¿åÙr²Ó ~æt#Z;ÐðèSÇùÔ§9mú«„¢2°6Ș¢Z/»AÊà°÷s[JÖø²Óc?Œ¶$óªK¶ú §ñw”xú®Úý#¾—ÓÏ %µ ¼'ÛÔiãæË¨M»É‚ˆ^-Ê#‰&+4Üßö‘Un–€Â$µÝg“LÈŒ9ÿD˜Cɸ€%Ì÷ƒáš#kÙMã5 8ƒµŒÌJ.ª¾É>UˆÍ–>µMJž:,ó‰)F³d­wg=%š ¹ˆ³,|ÀV¤,~O¶h€.h0ݺ@ôÔ°h¦»×\ÚRòŸ!…^cŒúï¨Â8õ”tHáÙÐdÁ)ƒ<ª•ÜœGŸJ°Peçø.w(‹üŸ'ŸÙ‰ÝγæmPê žËÇ1hØ=b+ûR\f’;Sûã*J5ùv8~ïg PÌßRtûŠ~:/¥µJ›D¡r6ò£ÈÆÁFõøY)dÚSÏ/êkÌ*”&惂ê•v)kž>£¦ê6ÀKûq=PÏ=cSnpÎ h…®±\È×ÚX'¹¡æ5¯©ù@Í-5ÏiIìé)5ï©)oÿº¬pÍŸ©yEÍ—Ô<;¤EZ—“1ù)—=ý‚šÏ¨©¨É1e=óÞlª,=Fˆ“,  XHŠçýyM‹,ËÌíãS–ÀYæµÛò†ìh(ÃRܪxk7#ª¥È*Û$–¼C¢ù~Ìuîƒre”Á+&6W[Ç˸µï{Š[(®d[‚WF¹ˆêÊ”CÎ 3|ºDmßÈ‘}¦êd%q ¿/¹Y¥aoC^a~´Ë*á"ÙTb÷RZ‹Õ¯¸0„7“‘ù¡\ReüŒMpA7y¿°Š^×Dæ }1njؼñå¦ê‰É aÚˆoèé­¸¾;ñ)ëËbíó§¯úÿ~æÃÏ<ñìÏųß6-Ê:cæ5X׫ûòbiçk3;úZ ˜Wq®©¹¬í` ×Áì¢Ïéé²ðâcš ”y>¼,rðnÓ ñ>ÏM¤,“êÕ¥”ßa…Æ7çk^™“nÃì¿Ã”ݳÈÈ^}7óƒÑ9¢âBªCã‰åÒÂNò¹‹úiŽ´ež×¨f Ú"Õã)ãùNbô ÷¸Îûìo=êtq¸â©þÊ5³$ÔÁÊë"çºÌƒvO_Šìê=;M%-õHÍÄ2„é?R3ÎT% #ù}I©Ôl™Â¦C7oKèÆ ø^…¥e‰8ÓÐëOÄ&uÝ_9µ“6­€KGVœ‘mi›t©¦&p笗qáF›…ô)+,\IʦmoŠVÐLÑì÷‡ @™;é!ÐN@€QÃ>K¦z+‚ª¬¾—Ôw¾äyf®Ö FlEüis¯Š¨ë®Ü­d¥ÛÇé²e÷zÎ[¶ÖG•Î §ëLŽB2Àæ—ÂN,}Do!Å3 ºöUÂRAyÂËÑ‘ Ì´©°÷£¨sÃd–)ùù¥—ûSÐMãSrÒ p–ä×¥ˆp8%Í”ÓMy]æ`å¦|Xmê¥{n“øY¤JѦä"Lj”tíÍ4øÏäšW9ãÐ^ÆÜ ¹³È+.ÖŸT¦¦³ú359Þ”5MLÈ5¯5Ãþ }´\á ˆ?L!DfõÆ…Ãdè~àyÌË8ÕØ ¿!ˆ‘½Ê+vM&A´÷O˜TñÒt¿¯"ÍÔûóÕ2dJn¼!ñªíxFù[žQÎyV‰ù…èE2ËQŒ_²a1øŒ— ÃÖMƒåÚi[ºÚŠöÀÔq”¥í³;$­]”UãÓÖ•àD+¼ºk›—ëÌŒó\‘°eó$£aê¿%SoT$•;÷©tKYÿ#ZÊø¶3ª‡XSÅÛøØÚ›ßIÂŽ;ûül~ÌŒ´É.¥”ÒsIZNé½ä~¹$ eqK9øƒ…fvœ"—œÿ¨‡%Xk4’k¾Ëòó̃³}˧ÝdvAÞÆ˜@¹R,ÅÓiDš¦Ð~Flâkñ”Ûr­Ößà9I¿šj|¸x#òz1ðÞM‰¿”B­qí|‰4Óûrú3@Ç4MsÏ*0ƒòÓ“ÖÈdî([VÁÑQËwD^qFLYˆ(Óˆ3Z‡XNfjwÑåÛ…á !§ «´è°ÈûG³ »~!ªS f6,KÒ²mAÉ]Zf¡9§üŒe£ï¹RŒñ_f¯å*ùc$uy³T›¢Áþ«8³K+ì~ åv âõqýMu1ã×é Ÿø{%ÑxÙ°„Ⱥ!ÕN²uÊ9ɸ™j±®I¯úãœM’ â‡3Tf» ;Ÿi}Ïz.5Ÿ"zàOWìa;ýeÄ`õKz+9ÊæÖG$ñ÷„Ñ6A´¡rÙqO¬b÷ ó7Õ<Ü*?LÑ’šßxÒ€ƒ6qÐTäõ-Ã+r‚es.®òÅP;ñL¦Ü„€‹ŸC+ü E9¢ßÇÄûd´ã?†f÷Ußç#Ö¶Íï± šX‘6“Ý“ÿ#’œonè~~©Kή-.÷àû¼^kƒx[Õôïz²«*x(ûKÖ{,’—HÒYu[6ô­¤\•¨zæGÊGƱ `\¿›¬O½ßÄúÊŒÝû’ü¯æéÒ,Ùµ)±‚?ÿÍQ«–ÆÛ˜L-K tS£FÏNŽþ ÿþ IV|2endstream endobj 1793 0 obj 3767 endobj 1824 0 obj <> stream xœ•XÉr7½ó+xœI…€Æš[RY*©,•„©ìdQ²]–HY¢mùïÓˆÆ èÄ¥ƒF½½÷ºGo×R¨µ¤Ÿüûên•þ\«õ›ÕÛ•ÊÈürýÍvuñ¸uÑigÖÛ›•ÊûµB¹µ-¾¸[=þ7V„¨”ÞÕLJ„µAëáý¸QÂ9a¸µFú8<m4îЃª‡®Šˆ6ü`έj0Âë8ü2*|ï< —ÓV'í°ïúrYoG‰A¡YõÏö'ŒR©µòB+›¢Ü@aÖí„·1¬·;Œ/&ÿ!JHžx-Èè÷䔑ړ¡ôf8ÒV\YI©ÀU0^LÞí„U0|›¢é®*-@)ŸsÁyÚZoÇAE‡C¾Ö»á¾Ú½7 4>Ùr,b¶÷ Ç0õÃãiCÎð:?E¾¡©¦üJ¸Xô@¡%fãÕïÂÛKR‡W)Õ!ÆTª»U´a£­ÑkD þ%M.PÚŠ2B;¼óýè„òÒ¦¤H!cqãÏ\þHnD˜|²ó@q–½ôxU±˜/ %Óiq—M)3yâ °«˜G¸“Xž×)|^Qyò¥ûŒT,¯:-f$ Tž¿$ÿA4ÿòì¥ CLä´– Wuáb}2q¬¾®µZ…¶²`êù—SZ\Ô„º¼ø0€´• âràgªÓ6ÊÀs]HÔVèÀM8SÁ:ÌŠBþ€;U’N³;wÕݞȖëG7]wOMæAiž’6{SÍ ëj)–›%R”Œ¨ÈCmpšè;À.h²2¡9îÌÍéå|S’¾AÝ@ÝÓSî“Aᄼ®D©¥«;)”ô(]gä)¦®PüPW•“Tª¬.à”V ^NA¤UFx@ÙQ‘o¸¡Ø±¿Ø¸‰9ŽÎéU üQŽÛ‡TÃ6Igk³"$K…[Xü'ÿbÏ?fgQ‰o*)™‹ ¬w´5¢!g™«°>0NnzST1²€m¾èÉWŸÜ/3Q±µ™ÂÓzü²ÇÈ™$¸Cœ©[B<‰S‚v}Æí[·BÇœn‰¶‡ X¶—¦D¶hÒ"ýd,©‘i©„Œž«Is ”tþ¿®d¦¦¬'¢ž& Ö¼iN‰VœýÞÚ¶$r]¡éwÝc,·ÝÕi¯ÑÑ K]}Q‹¶=Ž7 ý拾Gûy°èŒ*U•‹©Áí<.`EœÐ܂ۮ–€…€e}•ÙÝU»ÝfxäÆH{p^d#Q˜Ýü,_Á2¾6ñDH¶ÚŒ3e.ht§kíû•ûU1'O~´á×£ÇyÒi»“2ª§¸xi N¡ö Jƒaíã´t ´øö§ØlúTwü=\6²Éìn6ÌpxäΖϗ3ªUóÍîgsØ«ªý*\Î5rªÂ4¿Xׯmƒ¨)1ÐxP&ml\Wçl•é;ÓkYA>ÖÀêVFËûÜmº — ô¼×%Ù ¯µÇºi±û^ŽŸƒ³ÃoA„,hjò EW]}fSU-rwÔ*nE©3œp´;#V;![i×à¥NƒP‡£ø]ø=›[HJe;ë1L±nÂJþ£E¦t ºpÛ@ºš(Zo^m¿x–³Ò„åD"ë÷†ívß–m¢žï»ÜoT3ª§O27_æÐë y8kzë}å/ì}fèê@Ÿá°ø¨+v_ôxÔ0™wŒôQbö|¨í¥Z;Î¥$ÞÏž,|Uß_ÔS<Ü–ÔìS)®pú̾»§ôžÙ~>Vòµmhñÿ(‡‡H «búGydk¼áôH‡¿Û®~ÇŸ«{£endstream endobj 1825 0 obj 1417 endobj 4 0 obj <> /Contents 9 0 R >> endobj 39 0 obj <> /Contents 41 0 R >> endobj 73 0 obj <> /Contents 76 0 R >> endobj 102 0 obj <> /Contents 104 0 R >> endobj 157 0 obj <> /Contents 160 0 R >> endobj 205 0 obj <> /Contents 207 0 R >> endobj 234 0 obj <> /Contents 236 0 R >> endobj 273 0 obj <> /Contents 276 0 R >> endobj 316 0 obj <> /Contents 318 0 R >> endobj 364 0 obj <> /Contents 367 0 R >> endobj 394 0 obj <> /Contents 397 0 R >> endobj 425 0 obj <> /Contents 428 0 R >> endobj 484 0 obj <> /Contents 487 0 R >> endobj 524 0 obj <> /Contents 526 0 R >> endobj 556 0 obj <> /Contents 559 0 R >> endobj 595 0 obj <> /Contents 598 0 R >> endobj 638 0 obj <> /Contents 640 0 R >> endobj 680 0 obj <> /Contents 682 0 R >> endobj 699 0 obj <> /Contents 702 0 R >> endobj 724 0 obj <> /Contents 727 0 R >> endobj 755 0 obj <> /Contents 758 0 R >> endobj 797 0 obj <> /Contents 800 0 R >> endobj 828 0 obj <> /Contents 831 0 R >> endobj 855 0 obj <> /Contents 857 0 R >> endobj 881 0 obj <> /Contents 883 0 R >> endobj 922 0 obj <> /Contents 924 0 R >> endobj 949 0 obj <> /Contents 951 0 R >> endobj 966 0 obj <> /Contents 968 0 R >> endobj 996 0 obj <> /Contents 998 0 R >> endobj 1016 0 obj <> /Contents 1019 0 R >> endobj 1043 0 obj <> /Contents 1045 0 R >> endobj 1064 0 obj <> /Contents 1067 0 R >> endobj 1097 0 obj <> /Contents 1099 0 R >> endobj 1119 0 obj <> /Contents 1122 0 R >> endobj 1137 0 obj <> /Contents 1140 0 R >> endobj 1184 0 obj <> /Contents 1187 0 R >> endobj 1229 0 obj <> /Contents 1232 0 R >> endobj 1253 0 obj <> /Contents 1255 0 R >> endobj 1288 0 obj <> /Contents 1291 0 R >> endobj 1321 0 obj <> /Contents 1324 0 R >> endobj 1367 0 obj <> /Contents 1369 0 R >> endobj 1411 0 obj <> /Contents 1413 0 R >> endobj 1461 0 obj <> /Contents 1464 0 R >> endobj 1510 0 obj <> /Contents 1513 0 R >> endobj 1547 0 obj <> /Contents 1549 0 R >> endobj 1588 0 obj <> /Contents 1591 0 R >> endobj 1606 0 obj <> /Contents 1608 0 R >> endobj 1630 0 obj <> /Contents 1632 0 R >> endobj 1646 0 obj <> /Contents 1648 0 R >> endobj 1658 0 obj <> /Contents 1661 0 R >> endobj 1678 0 obj <> /Contents 1680 0 R >> endobj 1695 0 obj <> /Contents 1697 0 R >> endobj 1715 0 obj <> /Contents 1717 0 R >> endobj 1728 0 obj <> /Contents 1730 0 R >> endobj 1749 0 obj <> /Contents 1751 0 R >> endobj 1763 0 obj <> /Contents 1766 0 R >> endobj 1790 0 obj <> /Contents 1792 0 R >> endobj 1822 0 obj <> /Contents 1824 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 39 0 R 73 0 R 102 0 R 157 0 R 205 0 R 234 0 R 273 0 R 316 0 R 364 0 R 394 0 R 425 0 R 484 0 R 524 0 R 556 0 R 595 0 R 638 0 R 680 0 R 699 0 R 724 0 R 755 0 R 797 0 R 828 0 R 855 0 R 881 0 R 922 0 R 949 0 R 966 0 R 996 0 R 1016 0 R 1043 0 R 1064 0 R 1097 0 R 1119 0 R 1137 0 R 1184 0 R 1229 0 R 1253 0 R 1288 0 R 1321 0 R 1367 0 R 1411 0 R 1461 0 R 1510 0 R 1547 0 R 1588 0 R 1606 0 R 1630 0 R 1646 0 R 1658 0 R 1678 0 R 1695 0 R 1715 0 R 1728 0 R 1749 0 R 1763 0 R 1790 0 R 1822 0 R ] /Count 58 >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 1855 0 R >> endobj 6 0 obj <>endobj 7 0 obj <>endobj 8 0 obj <>endobj 15 0 obj <>endobj 16 0 obj <>endobj 17 0 obj <>endobj 18 0 obj <>endobj 19 0 obj <>endobj 20 0 obj <>endobj 21 0 obj <>endobj 22 0 obj <>endobj 23 0 obj <>endobj 24 0 obj <>endobj 25 0 obj <>endobj 26 0 obj <>endobj 27 0 obj <>endobj 28 0 obj <>endobj 29 0 obj <>endobj 30 0 obj <>endobj 31 0 obj <>endobj 32 0 obj <>endobj 33 0 obj <>endobj 34 0 obj <>endobj 35 0 obj <>endobj 38 0 obj <> endobj 40 0 obj <>endobj 43 0 obj <>endobj 44 0 obj <>endobj 45 0 obj <>endobj 46 0 obj <>endobj 47 0 obj <>endobj 48 0 obj <>endobj 49 0 obj <>endobj 50 0 obj <>endobj 51 0 obj <>endobj 52 0 obj <>endobj 53 0 obj <>endobj 54 0 obj <>endobj 55 0 obj <>endobj 56 0 obj <>endobj 57 0 obj <>endobj 58 0 obj <>endobj 59 0 obj <>endobj 60 0 obj <>endobj 61 0 obj <>endobj 62 0 obj <>endobj 63 0 obj <>endobj 64 0 obj <>endobj 65 0 obj <>endobj 66 0 obj <>endobj 67 0 obj <>endobj 68 0 obj <>endobj 69 0 obj <>endobj 70 0 obj <>endobj 71 0 obj <>endobj 72 0 obj <> endobj 74 0 obj <>endobj 75 0 obj <>endobj 78 0 obj <>endobj 79 0 obj <>endobj 80 0 obj <>endobj 81 0 obj <>endobj 82 0 obj <>endobj 83 0 obj <>endobj 84 0 obj <>endobj 85 0 obj <>endobj 86 0 obj <>endobj 87 0 obj <>endobj 88 0 obj <>endobj 89 0 obj <>endobj 90 0 obj <>endobj 91 0 obj <>endobj 92 0 obj <>endobj 93 0 obj <>endobj 94 0 obj <>endobj 95 0 obj <>endobj 96 0 obj <>endobj 97 0 obj <>endobj 98 0 obj <>endobj 99 0 obj <>endobj 100 0 obj <>endobj 101 0 obj <> endobj 103 0 obj <>endobj 106 0 obj <>endobj 107 0 obj <>endobj 108 0 obj <>endobj 109 0 obj <>endobj 110 0 obj <>endobj 111 0 obj <>endobj 112 0 obj <>endobj 113 0 obj <>endobj 114 0 obj <>endobj 115 0 obj <>endobj 116 0 obj <>endobj 117 0 obj <>endobj 120 0 obj <>endobj 121 0 obj <>endobj 122 0 obj <>endobj 123 0 obj <>endobj 124 0 obj <>endobj 125 0 obj <>endobj 126 0 obj <>endobj 127 0 obj <>endobj 128 0 obj <>endobj 129 0 obj <>endobj 130 0 obj <>endobj 131 0 obj <>endobj 132 0 obj <>endobj 133 0 obj <>endobj 134 0 obj <>endobj 135 0 obj <>endobj 136 0 obj <>endobj 137 0 obj <>endobj 138 0 obj <>endobj 139 0 obj <>endobj 140 0 obj <>endobj 141 0 obj <>endobj 142 0 obj <>endobj 143 0 obj <>endobj 144 0 obj <>endobj 145 0 obj <>endobj 146 0 obj <>endobj 147 0 obj <>endobj 148 0 obj <>endobj 149 0 obj <>endobj 150 0 obj <>endobj 151 0 obj <>endobj 152 0 obj <>endobj 153 0 obj <>endobj 154 0 obj <>endobj 155 0 obj <>endobj 156 0 obj <> endobj 158 0 obj <>endobj 159 0 obj <>endobj 162 0 obj <>endobj 163 0 obj <>endobj 164 0 obj <>endobj 165 0 obj <>endobj 166 0 obj <>endobj 167 0 obj <>endobj 168 0 obj <>endobj 169 0 obj <>endobj 170 0 obj <>endobj 171 0 obj <>endobj 172 0 obj <>endobj 173 0 obj <>endobj 174 0 obj <>endobj 175 0 obj <>endobj 176 0 obj <>endobj 177 0 obj <>endobj 178 0 obj <>endobj 179 0 obj <>endobj 180 0 obj <>endobj 181 0 obj <>endobj 182 0 obj <>endobj 183 0 obj <>endobj 184 0 obj <>endobj 185 0 obj <>endobj 186 0 obj <>endobj 187 0 obj <>endobj 188 0 obj <>endobj 189 0 obj <>endobj 190 0 obj <>endobj 191 0 obj <>endobj 192 0 obj <>endobj 193 0 obj <>endobj 194 0 obj <>endobj 195 0 obj <>endobj 196 0 obj <>endobj 197 0 obj <>endobj 198 0 obj <>endobj 199 0 obj <>endobj 200 0 obj <>endobj 201 0 obj <>endobj 202 0 obj <>endobj 203 0 obj <>endobj 204 0 obj <> endobj 206 0 obj <>endobj 209 0 obj <>endobj 210 0 obj <>endobj 211 0 obj <>endobj 212 0 obj <>endobj 213 0 obj <>endobj 214 0 obj <>endobj 215 0 obj <>endobj 216 0 obj <>endobj 217 0 obj <>endobj 218 0 obj <>endobj 219 0 obj <>endobj 220 0 obj <>endobj 221 0 obj <>endobj 224 0 obj <>endobj 225 0 obj <>endobj 226 0 obj <>endobj 227 0 obj <>endobj 228 0 obj <>endobj 229 0 obj <>endobj 230 0 obj <>endobj 231 0 obj <>endobj 232 0 obj <>endobj 233 0 obj <> endobj 235 0 obj <>endobj 238 0 obj <>endobj 239 0 obj <>endobj 240 0 obj <>endobj 241 0 obj <>endobj 242 0 obj <>endobj 243 0 obj <>endobj 244 0 obj <>endobj 245 0 obj <>endobj 246 0 obj <>endobj 247 0 obj <>endobj 248 0 obj <>endobj 249 0 obj <>endobj 250 0 obj <>endobj 251 0 obj <>endobj 252 0 obj <>endobj 253 0 obj <>endobj 254 0 obj <>endobj 255 0 obj <>endobj 256 0 obj <>endobj 257 0 obj <>endobj 258 0 obj <>endobj 259 0 obj <>endobj 260 0 obj <>endobj 261 0 obj <>endobj 262 0 obj <>endobj 263 0 obj <>endobj 264 0 obj <>endobj 265 0 obj <>endobj 266 0 obj <>endobj 267 0 obj <>endobj 268 0 obj <>endobj 269 0 obj <>endobj 270 0 obj <>endobj 271 0 obj <>endobj 272 0 obj <> endobj 274 0 obj <>endobj 275 0 obj <>endobj 278 0 obj <>endobj 279 0 obj <>endobj 280 0 obj <>endobj 283 0 obj <>endobj 284 0 obj <>endobj 285 0 obj <>endobj 288 0 obj <>endobj 289 0 obj <>endobj 290 0 obj <>endobj 291 0 obj <>endobj 292 0 obj <>endobj 293 0 obj <>endobj 294 0 obj <>endobj 295 0 obj <>endobj 296 0 obj <>endobj 297 0 obj <>endobj 298 0 obj <>endobj 299 0 obj <>endobj 300 0 obj <>endobj 301 0 obj <>endobj 302 0 obj <>endobj 303 0 obj <>endobj 304 0 obj <>endobj 305 0 obj <>endobj 306 0 obj <>endobj 307 0 obj <>endobj 308 0 obj <>endobj 309 0 obj <>endobj 310 0 obj <>endobj 311 0 obj <>endobj 312 0 obj <>endobj 313 0 obj <>endobj 314 0 obj <>endobj 315 0 obj <> endobj 317 0 obj <>endobj 320 0 obj <>endobj 321 0 obj <>endobj 322 0 obj <>endobj 323 0 obj <>endobj 324 0 obj <>endobj 325 0 obj <>endobj 326 0 obj <>endobj 327 0 obj <>endobj 328 0 obj <>endobj 329 0 obj <>endobj 330 0 obj <>endobj 331 0 obj <>endobj 332 0 obj <>endobj 333 0 obj <>endobj 334 0 obj <>endobj 335 0 obj <>endobj 336 0 obj <>endobj 337 0 obj <>endobj 338 0 obj <>endobj 339 0 obj <>endobj 340 0 obj <>endobj 341 0 obj <>endobj 342 0 obj <>endobj 343 0 obj <>endobj 344 0 obj <>endobj 345 0 obj <>endobj 346 0 obj <>endobj 347 0 obj <>endobj 348 0 obj <>endobj 349 0 obj <>endobj 350 0 obj <>endobj 351 0 obj <>endobj 352 0 obj <>endobj 353 0 obj <>endobj 354 0 obj <>endobj 355 0 obj <>endobj 356 0 obj <>endobj 357 0 obj <>endobj 358 0 obj <>endobj 359 0 obj <>endobj 360 0 obj <>endobj 361 0 obj <>endobj 362 0 obj <>endobj 363 0 obj <> endobj 365 0 obj <>endobj 366 0 obj <>endobj 369 0 obj <>endobj 370 0 obj <>endobj 371 0 obj <>endobj 372 0 obj <>endobj 373 0 obj <>endobj 374 0 obj <>endobj 375 0 obj <>endobj 376 0 obj <>endobj 377 0 obj <>endobj 378 0 obj <>endobj 379 0 obj <>endobj 380 0 obj <>endobj 381 0 obj <>endobj 382 0 obj <>endobj 383 0 obj <>endobj 384 0 obj <>endobj 385 0 obj <>endobj 386 0 obj <>endobj 387 0 obj <>endobj 388 0 obj <>endobj 389 0 obj <>endobj 390 0 obj <>endobj 391 0 obj <>endobj 392 0 obj <>endobj 393 0 obj <> endobj 395 0 obj <>endobj 396 0 obj <>endobj 399 0 obj <>endobj 400 0 obj <>endobj 401 0 obj <>endobj 402 0 obj <>endobj 403 0 obj <>endobj 404 0 obj <>endobj 405 0 obj <>endobj 406 0 obj <>endobj 407 0 obj <>endobj 408 0 obj <>endobj 409 0 obj <>endobj 410 0 obj <>endobj 411 0 obj <>endobj 412 0 obj <>endobj 413 0 obj <>endobj 414 0 obj <>endobj 415 0 obj <>endobj 416 0 obj <>endobj 417 0 obj <>endobj 418 0 obj <>endobj 419 0 obj <>endobj 420 0 obj <>endobj 421 0 obj <>endobj 422 0 obj <>endobj 423 0 obj <>endobj 424 0 obj <> endobj 426 0 obj <>endobj 427 0 obj <>endobj 430 0 obj <>endobj 431 0 obj <>endobj 432 0 obj <>endobj 433 0 obj <>endobj 434 0 obj <>endobj 435 0 obj <>endobj 436 0 obj <>endobj 437 0 obj <>endobj 438 0 obj <>endobj 439 0 obj <>endobj 440 0 obj <>endobj 441 0 obj <>endobj 442 0 obj <>endobj 443 0 obj <>endobj 444 0 obj <>endobj 445 0 obj <>endobj 446 0 obj <>endobj 447 0 obj <>endobj 448 0 obj <>endobj 449 0 obj <>endobj 450 0 obj <>endobj 451 0 obj <>endobj 452 0 obj <>endobj 453 0 obj <>endobj 454 0 obj <>endobj 455 0 obj <>endobj 456 0 obj <>endobj 457 0 obj <>endobj 458 0 obj <>endobj 459 0 obj <>endobj 460 0 obj <>endobj 461 0 obj <>endobj 462 0 obj <>endobj 463 0 obj <>endobj 464 0 obj <>endobj 465 0 obj <>endobj 466 0 obj <>endobj 467 0 obj <>endobj 468 0 obj <>endobj 469 0 obj <>endobj 470 0 obj <>endobj 471 0 obj <>endobj 472 0 obj <>endobj 473 0 obj <>endobj 474 0 obj <>endobj 475 0 obj <>endobj 476 0 obj <>endobj 477 0 obj <>endobj 478 0 obj <>endobj 479 0 obj <>endobj 480 0 obj <>endobj 481 0 obj <>endobj 482 0 obj <>endobj 483 0 obj <> endobj 485 0 obj <>endobj 486 0 obj <>endobj 489 0 obj <>endobj 490 0 obj <>endobj 491 0 obj <>endobj 492 0 obj <>endobj 493 0 obj <>endobj 494 0 obj <>endobj 495 0 obj <>endobj 496 0 obj <>endobj 497 0 obj <>endobj 498 0 obj <>endobj 499 0 obj <>endobj 500 0 obj <>endobj 501 0 obj <>endobj 502 0 obj <>endobj 503 0 obj <>endobj 504 0 obj <>endobj 505 0 obj <>endobj 506 0 obj <>endobj 507 0 obj <>endobj 508 0 obj <>endobj 509 0 obj <>endobj 510 0 obj <>endobj 511 0 obj <>endobj 512 0 obj <>endobj 513 0 obj <>endobj 514 0 obj <>endobj 515 0 obj <>endobj 516 0 obj <>endobj 517 0 obj <>endobj 518 0 obj <>endobj 519 0 obj <>endobj 520 0 obj <>endobj 521 0 obj <>endobj 522 0 obj <>endobj 523 0 obj <> endobj 525 0 obj <>endobj 528 0 obj <>endobj 529 0 obj <>endobj 530 0 obj <>endobj 531 0 obj <>endobj 532 0 obj <>endobj 533 0 obj <>endobj 534 0 obj <>endobj 535 0 obj <>endobj 536 0 obj <>endobj 537 0 obj <>endobj 538 0 obj <>endobj 539 0 obj <>endobj 540 0 obj <>endobj 541 0 obj <>endobj 542 0 obj <>endobj 543 0 obj <>endobj 544 0 obj <>endobj 545 0 obj <>endobj 546 0 obj <>endobj 547 0 obj <>endobj 548 0 obj <>endobj 549 0 obj <>endobj 550 0 obj <>endobj 551 0 obj <>endobj 552 0 obj <>endobj 553 0 obj <>endobj 554 0 obj <>endobj 555 0 obj <> endobj 557 0 obj <>endobj 558 0 obj <>endobj 561 0 obj <>endobj 562 0 obj <>endobj 563 0 obj <>endobj 564 0 obj <>endobj 565 0 obj <>endobj 566 0 obj <>endobj 567 0 obj <>endobj 568 0 obj <>endobj 569 0 obj <>endobj 570 0 obj <>endobj 571 0 obj <>endobj 572 0 obj <>endobj 573 0 obj <>endobj 574 0 obj <>endobj 575 0 obj <>endobj 576 0 obj <>endobj 577 0 obj <>endobj 578 0 obj <>endobj 579 0 obj <>endobj 580 0 obj <>endobj 581 0 obj <>endobj 582 0 obj <>endobj 583 0 obj <>endobj 584 0 obj <>endobj 585 0 obj <>endobj 586 0 obj <>endobj 587 0 obj <>endobj 588 0 obj <>endobj 589 0 obj <>endobj 590 0 obj <>endobj 591 0 obj <>endobj 592 0 obj <>endobj 593 0 obj <>endobj 594 0 obj <> endobj 596 0 obj <>endobj 597 0 obj <>endobj 600 0 obj <>endobj 601 0 obj <>endobj 602 0 obj <>endobj 603 0 obj <>endobj 604 0 obj <>endobj 607 0 obj <>endobj 608 0 obj <>endobj 609 0 obj <>endobj 610 0 obj <>endobj 611 0 obj <>endobj 612 0 obj <>endobj 613 0 obj <>endobj 614 0 obj <>endobj 615 0 obj <>endobj 616 0 obj <>endobj 617 0 obj <>endobj 618 0 obj <>endobj 619 0 obj <>endobj 620 0 obj <>endobj 621 0 obj <>endobj 622 0 obj <>endobj 623 0 obj <>endobj 624 0 obj <>endobj 625 0 obj <>endobj 626 0 obj <>endobj 627 0 obj <>endobj 628 0 obj <>endobj 629 0 obj <>endobj 630 0 obj <>endobj 631 0 obj <>endobj 632 0 obj <>endobj 633 0 obj <>endobj 634 0 obj <>endobj 635 0 obj <>endobj 636 0 obj <>endobj 637 0 obj <> endobj 639 0 obj <>endobj 642 0 obj <>endobj 643 0 obj <>endobj 644 0 obj <>endobj 645 0 obj <>endobj 646 0 obj <>endobj 647 0 obj <>endobj 648 0 obj <>endobj 649 0 obj <>endobj 650 0 obj <>endobj 651 0 obj <>endobj 652 0 obj <>endobj 653 0 obj <>endobj 654 0 obj <>endobj 655 0 obj <>endobj 656 0 obj <>endobj 657 0 obj <>endobj 658 0 obj <>endobj 659 0 obj <>endobj 660 0 obj <>endobj 661 0 obj <>endobj 662 0 obj <>endobj 663 0 obj <>endobj 664 0 obj <>endobj 665 0 obj <>endobj 666 0 obj <>endobj 667 0 obj <>endobj 668 0 obj <>endobj 669 0 obj <>endobj 670 0 obj <>endobj 671 0 obj <>endobj 672 0 obj <>endobj 673 0 obj <>endobj 674 0 obj <>endobj 675 0 obj <>endobj 676 0 obj <>endobj 677 0 obj <>endobj 678 0 obj <>endobj 679 0 obj <> endobj 681 0 obj <>endobj 684 0 obj <>endobj 685 0 obj <>endobj 686 0 obj <>endobj 687 0 obj <>endobj 688 0 obj <>endobj 689 0 obj <>endobj 690 0 obj <>endobj 691 0 obj <>endobj 692 0 obj <>endobj 693 0 obj <>endobj 694 0 obj <>endobj 695 0 obj <>endobj 696 0 obj <>endobj 697 0 obj <>endobj 698 0 obj <> endobj 700 0 obj <>endobj 701 0 obj <>endobj 704 0 obj <>endobj 705 0 obj <>endobj 706 0 obj <>endobj 707 0 obj <>endobj 708 0 obj <>endobj 709 0 obj <>endobj 710 0 obj <>endobj 711 0 obj <>endobj 712 0 obj <>endobj 713 0 obj <>endobj 714 0 obj <>endobj 715 0 obj <>endobj 716 0 obj <>endobj 717 0 obj <>endobj 718 0 obj <>endobj 719 0 obj <>endobj 720 0 obj <>endobj 721 0 obj <>endobj 722 0 obj <>endobj 723 0 obj <> endobj 725 0 obj <>endobj 726 0 obj <>endobj 729 0 obj <>endobj 730 0 obj <>endobj 731 0 obj <>endobj 732 0 obj <>endobj 733 0 obj <>endobj 734 0 obj <>endobj 735 0 obj <>endobj 736 0 obj <>endobj 737 0 obj <>endobj 738 0 obj <>endobj 739 0 obj <>endobj 740 0 obj <>endobj 741 0 obj <>endobj 742 0 obj <>endobj 743 0 obj <>endobj 744 0 obj <>endobj 745 0 obj <>endobj 746 0 obj <>endobj 747 0 obj <>endobj 748 0 obj <>endobj 749 0 obj <>endobj 750 0 obj <>endobj 751 0 obj <>endobj 754 0 obj <> endobj 756 0 obj <>endobj 757 0 obj <>endobj 760 0 obj <>endobj 761 0 obj <>endobj 762 0 obj <>endobj 763 0 obj <>endobj 764 0 obj <>endobj 765 0 obj <>endobj 766 0 obj <>endobj 767 0 obj <>endobj 768 0 obj <>endobj 769 0 obj <>endobj 770 0 obj <>endobj 771 0 obj <>endobj 772 0 obj <>endobj 773 0 obj <>endobj 774 0 obj <>endobj 775 0 obj <>endobj 776 0 obj <>endobj 777 0 obj <>endobj 778 0 obj <>endobj 779 0 obj <>endobj 780 0 obj <>endobj 781 0 obj <>endobj 782 0 obj <>endobj 783 0 obj <>endobj 784 0 obj <>endobj 785 0 obj <>endobj 786 0 obj <>endobj 787 0 obj <>endobj 788 0 obj <>endobj 789 0 obj <>endobj 790 0 obj <>endobj 791 0 obj <>endobj 792 0 obj <>endobj 793 0 obj <>endobj 794 0 obj <>endobj 795 0 obj <>endobj 796 0 obj <> endobj 798 0 obj <>endobj 799 0 obj <>endobj 802 0 obj <>endobj 803 0 obj <>endobj 804 0 obj <>endobj 805 0 obj <>endobj 806 0 obj <>endobj 807 0 obj <>endobj 808 0 obj <>endobj 809 0 obj <>endobj 810 0 obj <>endobj 811 0 obj <>endobj 812 0 obj <>endobj 813 0 obj <>endobj 814 0 obj <>endobj 815 0 obj <>endobj 816 0 obj <>endobj 817 0 obj <>endobj 818 0 obj <>endobj 819 0 obj <>endobj 820 0 obj <>endobj 821 0 obj <>endobj 822 0 obj <>endobj 823 0 obj <>endobj 824 0 obj <>endobj 825 0 obj <>endobj 826 0 obj <>endobj 827 0 obj <> endobj 829 0 obj <>endobj 830 0 obj <>endobj 833 0 obj <>endobj 834 0 obj <>endobj 835 0 obj <>endobj 836 0 obj <>endobj 837 0 obj <>endobj 838 0 obj <>endobj 839 0 obj <>endobj 840 0 obj <>endobj 841 0 obj <>endobj 842 0 obj <>endobj 843 0 obj <>endobj 844 0 obj <>endobj 845 0 obj <>endobj 846 0 obj <>endobj 847 0 obj <>endobj 848 0 obj <>endobj 849 0 obj <>endobj 850 0 obj <>endobj 851 0 obj <>endobj 852 0 obj <>endobj 853 0 obj <>endobj 854 0 obj <> endobj 856 0 obj <>endobj 859 0 obj <>endobj 860 0 obj <>endobj 861 0 obj <>endobj 862 0 obj <>endobj 863 0 obj <>endobj 864 0 obj <>endobj 865 0 obj <>endobj 866 0 obj <>endobj 867 0 obj <>endobj 868 0 obj <>endobj 869 0 obj <>endobj 870 0 obj <>endobj 871 0 obj <>endobj 872 0 obj <>endobj 873 0 obj <>endobj 874 0 obj <>endobj 875 0 obj <>endobj 876 0 obj <>endobj 877 0 obj <>endobj 878 0 obj <>endobj 879 0 obj <>endobj 880 0 obj <> endobj 882 0 obj <>endobj 885 0 obj <>endobj 886 0 obj <>endobj 887 0 obj <>endobj 888 0 obj <>endobj 889 0 obj <>endobj 890 0 obj <>endobj 891 0 obj <>endobj 892 0 obj <>endobj 893 0 obj <>endobj 894 0 obj <>endobj 895 0 obj <>endobj 896 0 obj <>endobj 897 0 obj <>endobj 898 0 obj <>endobj 899 0 obj <>endobj 900 0 obj <>endobj 901 0 obj <>endobj 902 0 obj <>endobj 903 0 obj <>endobj 904 0 obj <>endobj 905 0 obj <>endobj 906 0 obj <>endobj 907 0 obj <>endobj 908 0 obj <>endobj 909 0 obj <>endobj 910 0 obj <>endobj 911 0 obj <>endobj 912 0 obj <>endobj 913 0 obj <>endobj 914 0 obj <>endobj 915 0 obj <>endobj 916 0 obj <>endobj 917 0 obj <>endobj 918 0 obj <>endobj 919 0 obj <>endobj 920 0 obj <>endobj 921 0 obj <> endobj 923 0 obj <>endobj 926 0 obj <>endobj 927 0 obj <>endobj 928 0 obj <>endobj 929 0 obj <>endobj 930 0 obj <>endobj 931 0 obj <>endobj 932 0 obj <>endobj 933 0 obj <>endobj 934 0 obj <>endobj 935 0 obj <>endobj 936 0 obj <>endobj 937 0 obj <>endobj 938 0 obj <>endobj 939 0 obj <>endobj 940 0 obj <>endobj 941 0 obj <>endobj 942 0 obj <>endobj 943 0 obj <>endobj 944 0 obj <>endobj 945 0 obj <>endobj 946 0 obj <>endobj 947 0 obj <>endobj 948 0 obj <> endobj 950 0 obj <>endobj 953 0 obj <>endobj 954 0 obj <>endobj 955 0 obj <>endobj 956 0 obj <>endobj 957 0 obj <>endobj 958 0 obj <>endobj 959 0 obj <>endobj 960 0 obj <>endobj 961 0 obj <>endobj 962 0 obj <>endobj 963 0 obj <>endobj 964 0 obj <>endobj 965 0 obj <> endobj 967 0 obj <>endobj 970 0 obj <>endobj 971 0 obj <>endobj 972 0 obj <>endobj 973 0 obj <>endobj 974 0 obj <>endobj 975 0 obj <>endobj 976 0 obj <>endobj 977 0 obj <>endobj 978 0 obj <>endobj 979 0 obj <>endobj 980 0 obj <>endobj 981 0 obj <>endobj 982 0 obj <>endobj 983 0 obj <>endobj 984 0 obj <>endobj 985 0 obj <>endobj 986 0 obj <>endobj 987 0 obj <>endobj 988 0 obj <>endobj 989 0 obj <>endobj 990 0 obj <>endobj 991 0 obj <>endobj 992 0 obj <>endobj 993 0 obj <>endobj 994 0 obj <>endobj 995 0 obj <> endobj 997 0 obj <>endobj 1000 0 obj <>endobj 1001 0 obj <>endobj 1002 0 obj <>endobj 1003 0 obj <>endobj 1004 0 obj <>endobj 1005 0 obj <>endobj 1006 0 obj <>endobj 1007 0 obj <>endobj 1008 0 obj <>endobj 1009 0 obj <>endobj 1010 0 obj <>endobj 1011 0 obj <>endobj 1012 0 obj <>endobj 1013 0 obj <>endobj 1014 0 obj <>endobj 1015 0 obj <> endobj 1017 0 obj <>endobj 1018 0 obj <>endobj 1021 0 obj <>endobj 1022 0 obj <>endobj 1023 0 obj <>endobj 1024 0 obj <>endobj 1025 0 obj <>endobj 1026 0 obj <>endobj 1027 0 obj <>endobj 1028 0 obj <>endobj 1029 0 obj <>endobj 1030 0 obj <>endobj 1031 0 obj <>endobj 1032 0 obj <>endobj 1033 0 obj <>endobj 1034 0 obj <>endobj 1035 0 obj <>endobj 1036 0 obj <>endobj 1037 0 obj <>endobj 1040 0 obj <>endobj 1041 0 obj <>endobj 1042 0 obj <> endobj 1044 0 obj <>endobj 1047 0 obj <>endobj 1048 0 obj <>endobj 1049 0 obj <>endobj 1050 0 obj <>endobj 1051 0 obj <>endobj 1052 0 obj <>endobj 1053 0 obj <>endobj 1054 0 obj <>endobj 1055 0 obj <>endobj 1056 0 obj <>endobj 1057 0 obj <>endobj 1058 0 obj <>endobj 1059 0 obj <>endobj 1060 0 obj <>endobj 1061 0 obj <>endobj 1062 0 obj <>endobj 1063 0 obj <> endobj 1065 0 obj <>endobj 1066 0 obj <>endobj 1069 0 obj <>endobj 1070 0 obj <>endobj 1071 0 obj <>endobj 1072 0 obj <>endobj 1073 0 obj <>endobj 1074 0 obj <>endobj 1075 0 obj <>endobj 1076 0 obj <>endobj 1077 0 obj <>endobj 1078 0 obj <>endobj 1079 0 obj <>endobj 1080 0 obj <>endobj 1081 0 obj <>endobj 1082 0 obj <>endobj 1083 0 obj <>endobj 1084 0 obj <>endobj 1085 0 obj <>endobj 1086 0 obj <>endobj 1087 0 obj <>endobj 1088 0 obj <>endobj 1089 0 obj <>endobj 1090 0 obj <>endobj 1091 0 obj <>endobj 1092 0 obj <>endobj 1093 0 obj <>endobj 1094 0 obj <>endobj 1095 0 obj <>endobj 1096 0 obj <> endobj 1098 0 obj <>endobj 1101 0 obj <>endobj 1102 0 obj <>endobj 1103 0 obj <>endobj 1104 0 obj <>endobj 1105 0 obj <>endobj 1106 0 obj <>endobj 1107 0 obj <>endobj 1108 0 obj <>endobj 1109 0 obj <>endobj 1110 0 obj <>endobj 1111 0 obj <>endobj 1112 0 obj <>endobj 1113 0 obj <>endobj 1114 0 obj <>endobj 1115 0 obj <>endobj 1116 0 obj <>endobj 1117 0 obj <>endobj 1118 0 obj <> endobj 1120 0 obj <>endobj 1121 0 obj <>endobj 1124 0 obj <>endobj 1125 0 obj <>endobj 1128 0 obj <>endobj 1129 0 obj <>endobj 1130 0 obj <>endobj 1131 0 obj <>endobj 1132 0 obj <>endobj 1133 0 obj <>endobj 1134 0 obj <>endobj 1135 0 obj <>endobj 1136 0 obj <> endobj 1138 0 obj <>endobj 1139 0 obj <>endobj 1142 0 obj <>endobj 1143 0 obj <>endobj 1144 0 obj <>endobj 1145 0 obj <>endobj 1146 0 obj <>endobj 1147 0 obj <>endobj 1148 0 obj <>endobj 1149 0 obj <>endobj 1150 0 obj <>endobj 1151 0 obj <>endobj 1152 0 obj <>endobj 1153 0 obj <>endobj 1154 0 obj <>endobj 1155 0 obj <>endobj 1156 0 obj <>endobj 1157 0 obj <>endobj 1158 0 obj <>endobj 1159 0 obj <>endobj 1160 0 obj <>endobj 1161 0 obj <>endobj 1162 0 obj <>endobj 1163 0 obj <>endobj 1164 0 obj <>endobj 1165 0 obj <>endobj 1166 0 obj <>endobj 1167 0 obj <>endobj 1168 0 obj <>endobj 1169 0 obj <>endobj 1170 0 obj <>endobj 1171 0 obj <>endobj 1172 0 obj <>endobj 1173 0 obj <>endobj 1174 0 obj <>endobj 1175 0 obj <>endobj 1176 0 obj <>endobj 1177 0 obj <>endobj 1178 0 obj <>endobj 1179 0 obj <>endobj 1180 0 obj <>endobj 1181 0 obj <>endobj 1182 0 obj <>endobj 1183 0 obj <> endobj 1185 0 obj <>endobj 1186 0 obj <>endobj 1189 0 obj <>endobj 1190 0 obj <>endobj 1191 0 obj <>endobj 1192 0 obj <>endobj 1193 0 obj <>endobj 1194 0 obj <>endobj 1195 0 obj <>endobj 1196 0 obj <>endobj 1197 0 obj <>endobj 1198 0 obj <>endobj 1199 0 obj <>endobj 1200 0 obj <>endobj 1201 0 obj <>endobj 1202 0 obj <>endobj 1203 0 obj <>endobj 1204 0 obj <>endobj 1205 0 obj <>endobj 1206 0 obj <>endobj 1207 0 obj <>endobj 1208 0 obj <>endobj 1209 0 obj <>endobj 1210 0 obj <>endobj 1211 0 obj <>endobj 1212 0 obj <>endobj 1213 0 obj <>endobj 1214 0 obj <>endobj 1215 0 obj <>endobj 1216 0 obj <>endobj 1217 0 obj <>endobj 1218 0 obj <>endobj 1219 0 obj <>endobj 1220 0 obj <>endobj 1221 0 obj <>endobj 1222 0 obj <>endobj 1223 0 obj <>endobj 1224 0 obj <>endobj 1225 0 obj <>endobj 1226 0 obj <>endobj 1227 0 obj <>endobj 1228 0 obj <> endobj 1230 0 obj <>endobj 1231 0 obj <>endobj 1234 0 obj <>endobj 1235 0 obj <>endobj 1236 0 obj <>endobj 1237 0 obj <>endobj 1238 0 obj <>endobj 1239 0 obj <>endobj 1240 0 obj <>endobj 1241 0 obj <>endobj 1242 0 obj <>endobj 1243 0 obj <>endobj 1244 0 obj <>endobj 1245 0 obj <>endobj 1246 0 obj <>endobj 1247 0 obj <>endobj 1248 0 obj <>endobj 1249 0 obj <>endobj 1250 0 obj <>endobj 1251 0 obj <>endobj 1252 0 obj <> endobj 1254 0 obj <>endobj 1257 0 obj <>endobj 1258 0 obj <>endobj 1259 0 obj <>endobj 1260 0 obj <>endobj 1261 0 obj <>endobj 1262 0 obj <>endobj 1263 0 obj <>endobj 1264 0 obj <>endobj 1265 0 obj <>endobj 1266 0 obj <>endobj 1267 0 obj <>endobj 1268 0 obj <>endobj 1269 0 obj <>endobj 1270 0 obj <>endobj 1271 0 obj <>endobj 1272 0 obj <>endobj 1273 0 obj <>endobj 1274 0 obj <>endobj 1275 0 obj <>endobj 1276 0 obj <>endobj 1277 0 obj <>endobj 1278 0 obj <>endobj 1279 0 obj <>endobj 1280 0 obj <>endobj 1281 0 obj <>endobj 1282 0 obj <>endobj 1283 0 obj <>endobj 1284 0 obj <>endobj 1285 0 obj <>endobj 1286 0 obj <>endobj 1287 0 obj <> endobj 1289 0 obj <>endobj 1290 0 obj <>endobj 1293 0 obj <>endobj 1294 0 obj <>endobj 1295 0 obj <>endobj 1296 0 obj <>endobj 1297 0 obj <>endobj 1298 0 obj <>endobj 1299 0 obj <>endobj 1300 0 obj <>endobj 1301 0 obj <>endobj 1302 0 obj <>endobj 1303 0 obj <>endobj 1304 0 obj <>endobj 1305 0 obj <>endobj 1306 0 obj <>endobj 1307 0 obj <>endobj 1308 0 obj <>endobj 1309 0 obj <>endobj 1310 0 obj <>endobj 1311 0 obj <>endobj 1312 0 obj <>endobj 1313 0 obj <>endobj 1314 0 obj <>endobj 1315 0 obj <>endobj 1316 0 obj <>endobj 1317 0 obj <>endobj 1318 0 obj <>endobj 1319 0 obj <>endobj 1320 0 obj <> endobj 1322 0 obj <>endobj 1323 0 obj <>endobj 1326 0 obj <>endobj 1327 0 obj <>endobj 1328 0 obj <>endobj 1329 0 obj <>endobj 1330 0 obj <>endobj 1331 0 obj <>endobj 1332 0 obj <>endobj 1333 0 obj <>endobj 1334 0 obj <>endobj 1335 0 obj <>endobj 1336 0 obj <>endobj 1337 0 obj <>endobj 1338 0 obj <>endobj 1339 0 obj <>endobj 1340 0 obj <>endobj 1341 0 obj <>endobj 1342 0 obj <>endobj 1343 0 obj <>endobj 1344 0 obj <>endobj 1345 0 obj <>endobj 1346 0 obj <>endobj 1347 0 obj <>endobj 1348 0 obj <>endobj 1349 0 obj <>endobj 1350 0 obj <>endobj 1351 0 obj <>endobj 1352 0 obj <>endobj 1353 0 obj <>endobj 1354 0 obj <>endobj 1355 0 obj <>endobj 1356 0 obj <>endobj 1357 0 obj <>endobj 1358 0 obj <>endobj 1359 0 obj <>endobj 1360 0 obj <>endobj 1361 0 obj <>endobj 1362 0 obj <>endobj 1363 0 obj <>endobj 1364 0 obj <>endobj 1365 0 obj <>endobj 1366 0 obj <> endobj 1368 0 obj <>endobj 1371 0 obj <>endobj 1372 0 obj <>endobj 1373 0 obj <>endobj 1374 0 obj <>endobj 1375 0 obj <>endobj 1376 0 obj <>endobj 1377 0 obj <>endobj 1378 0 obj <>endobj 1379 0 obj <>endobj 1380 0 obj <>endobj 1381 0 obj <>endobj 1382 0 obj <>endobj 1383 0 obj <>endobj 1384 0 obj <>endobj 1385 0 obj <>endobj 1386 0 obj <>endobj 1387 0 obj <>endobj 1388 0 obj <>endobj 1389 0 obj <>endobj 1390 0 obj <>endobj 1391 0 obj <>endobj 1392 0 obj <>endobj 1393 0 obj <>endobj 1394 0 obj <>endobj 1395 0 obj <>endobj 1396 0 obj <>endobj 1397 0 obj <>endobj 1398 0 obj <>endobj 1399 0 obj <>endobj 1400 0 obj <>endobj 1401 0 obj <>endobj 1402 0 obj <>endobj 1403 0 obj <>endobj 1404 0 obj <>endobj 1405 0 obj <>endobj 1406 0 obj <>endobj 1407 0 obj <>endobj 1408 0 obj <>endobj 1409 0 obj <>endobj 1410 0 obj <> endobj 1412 0 obj <>endobj 1415 0 obj <>endobj 1416 0 obj <>endobj 1417 0 obj <>endobj 1418 0 obj <>endobj 1419 0 obj <>endobj 1420 0 obj <>endobj 1421 0 obj <>endobj 1422 0 obj <>endobj 1423 0 obj <>endobj 1424 0 obj <>endobj 1425 0 obj <>endobj 1426 0 obj <>endobj 1427 0 obj <>endobj 1428 0 obj <>endobj 1429 0 obj <>endobj 1430 0 obj <>endobj 1431 0 obj <>endobj 1432 0 obj <>endobj 1433 0 obj <>endobj 1434 0 obj <>endobj 1435 0 obj <>endobj 1436 0 obj <>endobj 1437 0 obj <>endobj 1438 0 obj <>endobj 1439 0 obj <>endobj 1440 0 obj <>endobj 1441 0 obj <>endobj 1442 0 obj <>endobj 1443 0 obj <>endobj 1444 0 obj <>endobj 1445 0 obj <>endobj 1446 0 obj <>endobj 1447 0 obj <>endobj 1448 0 obj <>endobj 1449 0 obj <>endobj 1450 0 obj <>endobj 1451 0 obj <>endobj 1452 0 obj <>endobj 1453 0 obj <>endobj 1454 0 obj <>endobj 1455 0 obj <>endobj 1456 0 obj <>endobj 1457 0 obj <>endobj 1458 0 obj <>endobj 1459 0 obj <>endobj 1460 0 obj <> endobj 1462 0 obj <>endobj 1463 0 obj <>endobj 1466 0 obj <>endobj 1467 0 obj <>endobj 1468 0 obj <>endobj 1469 0 obj <>endobj 1470 0 obj <>endobj 1471 0 obj <>endobj 1472 0 obj <>endobj 1473 0 obj <>endobj 1474 0 obj <>endobj 1475 0 obj <>endobj 1476 0 obj <>endobj 1477 0 obj <>endobj 1478 0 obj <>endobj 1479 0 obj <>endobj 1480 0 obj <>endobj 1481 0 obj <>endobj 1482 0 obj <>endobj 1483 0 obj <>endobj 1484 0 obj <>endobj 1485 0 obj <>endobj 1486 0 obj <>endobj 1487 0 obj <>endobj 1488 0 obj <>endobj 1489 0 obj <>endobj 1490 0 obj <>endobj 1491 0 obj <>endobj 1492 0 obj <>endobj 1493 0 obj <>endobj 1494 0 obj <>endobj 1495 0 obj <>endobj 1496 0 obj <>endobj 1497 0 obj <>endobj 1498 0 obj <>endobj 1499 0 obj <>endobj 1500 0 obj <>endobj 1501 0 obj <>endobj 1502 0 obj <>endobj 1503 0 obj <>endobj 1504 0 obj <>endobj 1505 0 obj <>endobj 1506 0 obj <>endobj 1507 0 obj <>endobj 1508 0 obj <>endobj 1509 0 obj <> endobj 1511 0 obj <>endobj 1512 0 obj <>endobj 1515 0 obj <>endobj 1516 0 obj <>endobj 1517 0 obj <>endobj 1518 0 obj <>endobj 1519 0 obj <>endobj 1520 0 obj <>endobj 1521 0 obj <>endobj 1522 0 obj <>endobj 1523 0 obj <>endobj 1524 0 obj <>endobj 1525 0 obj <>endobj 1526 0 obj <>endobj 1527 0 obj <>endobj 1528 0 obj <>endobj 1529 0 obj <>endobj 1530 0 obj <>endobj 1531 0 obj <>endobj 1532 0 obj <>endobj 1533 0 obj <>endobj 1534 0 obj <>endobj 1535 0 obj <>endobj 1536 0 obj <>endobj 1537 0 obj <>endobj 1538 0 obj <>endobj 1539 0 obj <>endobj 1540 0 obj <>endobj 1541 0 obj <>endobj 1542 0 obj <>endobj 1543 0 obj <>endobj 1544 0 obj <>endobj 1545 0 obj <>endobj 1546 0 obj <> endobj 1548 0 obj <>endobj 1551 0 obj <>endobj 1552 0 obj <>endobj 1553 0 obj <>endobj 1554 0 obj <>endobj 1555 0 obj <>endobj 1556 0 obj <>endobj 1557 0 obj <>endobj 1558 0 obj <>endobj 1559 0 obj <>endobj 1560 0 obj <>endobj 1561 0 obj <>endobj 1562 0 obj <>endobj 1563 0 obj <>endobj 1564 0 obj <>endobj 1565 0 obj <>endobj 1566 0 obj <>endobj 1567 0 obj <>endobj 1568 0 obj <>endobj 1569 0 obj <>endobj 1570 0 obj <>endobj 1571 0 obj <>endobj 1572 0 obj <>endobj 1573 0 obj <>endobj 1574 0 obj <>endobj 1575 0 obj <>endobj 1576 0 obj <>endobj 1577 0 obj <>endobj 1578 0 obj <>endobj 1579 0 obj <>endobj 1580 0 obj <>endobj 1581 0 obj <>endobj 1582 0 obj <>endobj 1583 0 obj <>endobj 1584 0 obj <>endobj 1585 0 obj <>endobj 1586 0 obj <>endobj 1587 0 obj <> endobj 1589 0 obj <>endobj 1590 0 obj <>endobj 1593 0 obj <>endobj 1594 0 obj <>endobj 1595 0 obj <>endobj 1596 0 obj <>endobj 1597 0 obj <>endobj 1598 0 obj <>endobj 1599 0 obj <>endobj 1600 0 obj <>endobj 1601 0 obj <>endobj 1602 0 obj <>endobj 1603 0 obj <>endobj 1604 0 obj <>endobj 1605 0 obj <> endobj 1607 0 obj <>endobj 1610 0 obj <>endobj 1611 0 obj <>endobj 1612 0 obj <>endobj 1613 0 obj <>endobj 1614 0 obj <>endobj 1615 0 obj <>endobj 1616 0 obj <>endobj 1617 0 obj <>endobj 1618 0 obj <>endobj 1619 0 obj <>endobj 1620 0 obj <>endobj 1621 0 obj <>endobj 1622 0 obj <>endobj 1623 0 obj <>endobj 1624 0 obj <>endobj 1625 0 obj <>endobj 1626 0 obj <>endobj 1627 0 obj <>endobj 1628 0 obj <>endobj 1629 0 obj <> endobj 1631 0 obj <>endobj 1634 0 obj <>endobj 1635 0 obj <>endobj 1636 0 obj <>endobj 1637 0 obj <>endobj 1638 0 obj <>endobj 1639 0 obj <>endobj 1640 0 obj <>endobj 1641 0 obj <>endobj 1642 0 obj <>endobj 1643 0 obj <>endobj 1644 0 obj <>endobj 1645 0 obj <> endobj 1647 0 obj <>endobj 1650 0 obj <>endobj 1651 0 obj <>endobj 1652 0 obj <>endobj 1653 0 obj <>endobj 1654 0 obj <>endobj 1655 0 obj <>endobj 1656 0 obj <>endobj 1657 0 obj <> endobj 1659 0 obj <>endobj 1660 0 obj <>endobj 1663 0 obj <>endobj 1664 0 obj <>endobj 1665 0 obj <>endobj 1666 0 obj <>endobj 1667 0 obj <>endobj 1668 0 obj <>endobj 1669 0 obj <>endobj 1670 0 obj <>endobj 1671 0 obj <>endobj 1672 0 obj <>endobj 1673 0 obj <>endobj 1674 0 obj <>endobj 1675 0 obj <>endobj 1676 0 obj <>endobj 1677 0 obj <> endobj 1679 0 obj <>endobj 1682 0 obj <>endobj 1683 0 obj <>endobj 1684 0 obj <>endobj 1685 0 obj <>endobj 1686 0 obj <>endobj 1687 0 obj <>endobj 1688 0 obj <>endobj 1689 0 obj <>endobj 1690 0 obj <>endobj 1691 0 obj <>endobj 1692 0 obj <>endobj 1693 0 obj <>endobj 1694 0 obj <> endobj 1696 0 obj <>endobj 1699 0 obj <>endobj 1700 0 obj <>endobj 1701 0 obj <>endobj 1702 0 obj <>endobj 1703 0 obj <>endobj 1704 0 obj <>endobj 1705 0 obj <>endobj 1706 0 obj <>endobj 1707 0 obj <>endobj 1708 0 obj <>endobj 1709 0 obj <>endobj 1710 0 obj <>endobj 1711 0 obj <>endobj 1712 0 obj <>endobj 1713 0 obj <>endobj 1714 0 obj <> endobj 1716 0 obj <>endobj 1719 0 obj <>endobj 1720 0 obj <>endobj 1721 0 obj <>endobj 1722 0 obj <>endobj 1723 0 obj <>endobj 1724 0 obj <>endobj 1725 0 obj <>endobj 1726 0 obj <>endobj 1727 0 obj <> endobj 1729 0 obj <>endobj 1732 0 obj <>endobj 1733 0 obj <>endobj 1734 0 obj <>endobj 1735 0 obj <>endobj 1736 0 obj <>endobj 1737 0 obj <>endobj 1738 0 obj <>endobj 1739 0 obj <>endobj 1740 0 obj <>endobj 1741 0 obj <>endobj 1742 0 obj <>endobj 1743 0 obj <>endobj 1744 0 obj <>endobj 1745 0 obj <>endobj 1746 0 obj <>endobj 1747 0 obj <>endobj 1748 0 obj <> endobj 1750 0 obj <>endobj 1753 0 obj <>endobj 1754 0 obj <>endobj 1755 0 obj <>endobj 1756 0 obj <>endobj 1757 0 obj <>endobj 1758 0 obj <>endobj 1759 0 obj <>endobj 1760 0 obj <>endobj 1761 0 obj <>endobj 1762 0 obj <> endobj 1764 0 obj <>endobj 1765 0 obj <>endobj 1768 0 obj <>endobj 1769 0 obj <>endobj 1770 0 obj <>endobj 1771 0 obj <>endobj 1772 0 obj <>endobj 1773 0 obj <>endobj 1774 0 obj <>endobj 1775 0 obj <>endobj 1776 0 obj <>endobj 1777 0 obj <>endobj 1778 0 obj <>endobj 1779 0 obj <>endobj 1780 0 obj <>endobj 1781 0 obj <>endobj 1782 0 obj <>endobj 1783 0 obj <>endobj 1784 0 obj <>endobj 1785 0 obj <>endobj 1786 0 obj <>endobj 1787 0 obj <>endobj 1788 0 obj <>endobj 1789 0 obj <> endobj 1791 0 obj <>endobj 1794 0 obj <>endobj 1795 0 obj <>endobj 1796 0 obj <>endobj 1797 0 obj <>endobj 1798 0 obj <>endobj 1799 0 obj <>endobj 1800 0 obj <>endobj 1801 0 obj <>endobj 1802 0 obj <>endobj 1803 0 obj <>endobj 1804 0 obj <>endobj 1805 0 obj <>endobj 1806 0 obj <>endobj 1807 0 obj <>endobj 1808 0 obj <>endobj 1809 0 obj <>endobj 1810 0 obj <>endobj 1811 0 obj <>endobj 1812 0 obj <>endobj 1813 0 obj <>endobj 1814 0 obj <>endobj 1815 0 obj <>endobj 1816 0 obj <>endobj 1817 0 obj <>endobj 1818 0 obj <>endobj 1819 0 obj <>endobj 1820 0 obj <>endobj 1821 0 obj <> endobj 1823 0 obj <>endobj 1826 0 obj <>endobj 1827 0 obj <>endobj 1828 0 obj <>endobj 1829 0 obj <>endobj 1830 0 obj <>endobj 1831 0 obj <>endobj 1832 0 obj <>endobj 1833 0 obj <> endobj 1845 0 obj <>stream xœ]O1ƒ0ÛóŠü €JձЅ¡UÕöáâ  $QC_ CŸä³­ó‰®¿öÖD.ÁÑ ‘kcUÀì–@àFcYYqe(î,Oš¤g¢»IÿþxðÕ½ñ»œ žååTç]¹¥È)Ì^‚´#XSm£uË`ÕŸ´}8ÑfT5ÎÙ()šZG9-!ÀÆ\5WIŒÅïï|Jñì žMSü endstream endobj 605 0 obj <> endobj 1846 0 obj <> endobj 11 0 obj <> endobj 1847 0 obj <> endobj 286 0 obj <> endobj 1848 0 obj <> endobj 281 0 obj <> endobj 1849 0 obj <> endobj 222 0 obj <> endobj 1850 0 obj <> endobj 118 0 obj <> endobj 1851 0 obj <> endobj 36 0 obj <> endobj 1852 0 obj <>stream xœ]O1ƒ0ÛóŠü €DձЅ¡¨jû8(—(„¡¿/ СƒOòÙÖùD×ßz²‘‹Gpê…È%°¸5(ð“%VV\[–§š¥g¢»KÿþxðͳóAÎÏòZï»rO)§±x©$M`MQ´1-é?éŒæt¢Í¨j\²ÿTR4µ8rµ†Š¹j®’ XÂïï|Jñ ì Sú endstream endobj 1126 0 obj <> endobj 1853 0 obj <> endobj 13 0 obj <> endobj 1854 0 obj <> endobj 1038 0 obj <> endobj 752 0 obj <> endobj 606 0 obj <> endobj 1834 0 obj <>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝý£ÿG*k7s7ËÂï…¾§ ~Oâÿ/ÀÀÂȘWÜÔãœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€Ý¦&ós JKR‹|óSR‹òò Ró’JsrRKù»˜YÜtðý¸»~Ï÷û{oîù~oóþï}¢ßyµ^þæúÍ££õ›ó7ïÝï\ßy^½ùÎ)÷;û·¥¨®óõ'/®^yþò²½‘ž£“¾<_ñâŸöKØ~ËOgßõ‡{Ï| æe`³§rÝ endstream endobj 12 0 obj <> endobj 1835 0 obj <>stream xœXyT׳E@YufÜ@pAeƒ"0(‚(¸vaPp¯ûPUq7" ‚¢B‚ŸÆ¸Ä¨¨©&w’ónÏøÓ¼sÞï¼Ã™ÃíÛwnU}UõUÕ(Ý>”@ à§HˆHM Oœm箌â÷l¸ÁnHn¨Î¬üKÖ»Fȉõ)¤¯ƒôu 1Ï0î-6êÒŸk ½d» OpRðûèùóZc;C™”ž¬ˆ‰UIÇ;;;K#Ò¥ŸßH=ä)Š˜D©%Y,—Ç+“ä‰*{i€\.UÅʥъx¹tÆÿÅ3ýdÒÑ2¿ùR™5ŠOö£•‰*iR²’¼O oÈUþÊUJd²"I%%ý=¼´:ªbÃU¼Üy-UF““QÊÈTÞš/ïTáŠÄ©Jž¦âåDÈ¥QŠ”¤øðt"—\•”¬Ð¨š¢HŒù*ÝVš, OŽŠ—§hîåQùjŸô_V‡'%ŧk¾«Ôœú"_¡J‘ÇGÛk½*%nM‘ΖòŽý;_]ôÿsEQ^Ó¹+ÏHòð,NöJ‘©¼Sg.Ÿµ"Ü'-bvz¤o”Ÿ|N´ÌÜØyŠ€À¥óã$,´7~‚ÃÄI“œ]¬F»YO³éckGQé9”35‚ò§\¨‘Ô\jeI•P”H¦æSÖÔʆZH¡Qî”-µ˜šAÙQK(Êžò¤ÆR^Ô8JF§¼© ÔLÊšEM¤&Q³©É”/åHùQNTʈ2¦L(SŠ¥Ì¨”95ˆ² S Õ—’RzÔ0ª•@P†”Œ„3¥KM£6P«'ûèõ‘÷©ìóTgÎygºrÝ»B¡L˜!<(¼,ü‡žD_¦?‰Æˆ¾ˆ^1®LÓÆ¨û†÷mÒêyë]èçÐ/C¿¾¥~Žþ%ý÷Žþ© - Çž5lï?¶Yÿ<4 øh”aôÁx±—ñzãÇ&¦¦ß˜þ`zÃô'(1ìFy`Fp8lóÜ÷`ÅÖa+!ØÓxWo‚»Ð8ëï!ØÑ€l¯#Ï£_A¹Ð”ÇÙC¿Ä<ã&B(HšÔ6qe¬ºŒâLXÙ¢œ©ˆÁ4Ø`#éÖ²Äù ¢½$Ø‘ÆFº £M>¶—ÇùúÉãÜ%XF‹U „?@(8MìÙRhàαØÙ °'öz‡)p§Àtðý'ž*Ù†…lÇE¯a– =§¹-jëé¹ÔöPòÅn¢´çGYXÅ… ±+%ø¶†B<…†Mj²wlPÑ*0æö€© †|£÷n9»©imE|eÀýñ•X@̈À¦Ø ¯ÇkÁ[g̃0eŸ[Ò™öþ ìÉFö`ÒÝ× w¹:=ö¸$gÅÞ´}Q ± 'æ;ô…ß ¯à:±m=oÛâK,ý{+y>MŸšS§¼ƒ0{ †àô0õaÌEIÌ%ïS³ %*æ0 §dïž÷i½ÄËË3èλwu­m­Ÿ¸0t]#Êw˜A9 :¨­èÂëwJþ@ D ÿÇÜÖ%7¼ ±.Q”¼·Q¿cÉ׋@xÕOÂ\±PÜW· ~"×A:´°ðŒð{pæ ÀH]ðwWEþKH”¤¦Þëì†KÝ?ݬéüã7nr§w›Án©ÜPV¤¨ ,œIäO€Gàáã¡?è¶ßú¸K2–Þ H˜‡ψ+/^V_½["eþ‰=Üfq žFþ¢±¦awˆ€xpƒ©dÜp´dë \a(ñ¤žŽ‡`19턇ÂprÊ †’0ž"1ä‘䱉6yš”}Iœ ‘‰ÿ£ÊÊG÷oÝ’+†á¢ Û6¡ÍÈ„'¸3&ã>‰4™ç?ƒpŸAŃp€pìýCŒß÷w؈­WAø}uäê@âUn;ׇýh‡V<Š˜>t²Ö‰9Ÿ»\’›v(óòJ˜²Ðüôú¬õ(•‰‹Z1+&qOVºxõï|w‚œ¦wb½ÿò'ô]Ë©(­(-¸ˆêQ[l­ÇìyÉ<*+c/ÊgŠKó.´œLY²MlØ›«S˜Lt]F‚·ŠÞ n‹k±¸Ð›#2’S—Å„.›Kt1˜ø‰ÄÈøŽW`r¹fuâIÉ‘ô+³å £ÓI޾ÂäT4qÕX¼/#ù> ¿i>ýèªäð᯴!ÇÿöA'lÀ„„¶ñÎj Eˆ=i\ŽÛ…Ю…VôZ€B<àOº±£8ò+ðÀG°7.‚+ý¸>Ç®üJãã¾ðœ|&æ n|æÇnr©ôŠèÔ‚óÉ<7²o8¶§Þ¹,‰®Ÿyj&òFAÉŠù d‰@_d[/xZY/ñôòøöNÏ ?’T&üØ•'ø™7cåç à6ó|ÆVöô ^ó\¬«ŠûqC…Øž†`õ áVÑÑ"yÔ’õ¶íJÙ’µõ:ªöì?›sèèÑ[Ükbþ/§âã3ž³`îðLòi’Ý0<{½aàó.`³%Ø‚N÷T&ÍGŒGØ­—ö×*•ä—äT kèXRŽcØ{_ ~3Ø€hÏÝfa ú¶Ä/°Üm¡ú¶&]–‹°©º›sB¬úÝÿóÄg09k3’óRœEÇ6|[èM4c­ñìèž?ýÌBIÙÂfE3jAç O×3X3ÐÖš ™§gPëoëÚ´µF£Ÿ¿çøÂº×L£ƒz#«8ÒPØópÛ4¼ø' ýÿpG`9»- íB{PÆ‹kËcÞL¼¡)©cm±.ž‰§¿v`ð¦õS‰‹é•aQÉ‹P$ZzhEñÚ¼Mß_b¶¿`÷=:]y“@_º2O™½b÷òÑŒ–û¸]„÷*ˆTK^#‹ÞtvrTøzÏòŒ…ˆ,(yÛ«Iö(îú€lºÓÔröêA@G¿ŸÕæÓêR:1Û°) ý;­ðlíb‰õ±Á”wD)»Ÿß„ð ê‰/^}üÊ3_3a>§zúxÖEY9[¿Ï-Û»- 1ö!¡ã$³Ü쪽AÊywk;0ØHxOIJÉCÜ~Þ›Ë!›…94XîK 4ƒðìúë ¦òÜ—%î¢YKB<ÄæW®¢Ùž“x&¡:¶qe7É$Ç—í`"ᮈðnL±m—Ý­¬y»Ï nyóþÜÝ;’A[ýÚ^»öBcÉ[ôý)ïñi}Çùä49ÇÍ–ùxÉGj±.y‹`Ý×C ØÕƒ×O3O\v ñaØÉº¹t¸«ÖÅm\Šaý¯è‚áOVxìœõóSC%_Z^>r[ˆ¥ Ü-Ÿi€t¼7kkšŠ ֧戳Òw®A± îÖô½¨%½.º$¾(ä`òB‹•Qþ ä}®9ùûy{’ÿP¡á¨ba}ûø2¿ïPÆÖµ’­i(­G²©¹± L:F«²3¢ÒͰtó~ûŠG¥•7Ð3t}E}외SÁ9mõ`­§&è’›gŠªÑá͇W^½/)Pl†råêUkVl CŒ¦q]Dx 6‘švïAèÞ]’‰FdEDú$Gôµ0`¤÷ÛÉ¢–Õ51K\NèÄ3,ñp,¼£•’÷+Þ¦•)‘ÿ ¿€èq£æUwn“&t÷çdð#¾õ§$ªDsñà" ¦ó¥Gâ úAW.œîxU9}—X‹3¯¬ã³†åÞ±  ]MÑi™úÝj$Ÿì7xÕƒ ›åF^•÷ƒ§èêÀâL!8Ñx1<ƒÙ&Ä´¦‰ÖTL>ÎKø‹·ñ3SängRõTÌe²È!çü¹Bëƒ:–=EOQGQ}Ý…šüëèÃe~­ÚZÌxÂÖˆ¥¿3ÃÌ`?;¡±ƒúžÌã×°•ÌQ†|šA‚%DßiÚÏ@“ÓÿžZšÏT4ž?‘&ÆjÍÎÿxæŒE}nbJ”.^viþ B˜&ã|Qäòà@¦Edø—‡V™ÞD3á•qà[ˆœ5švB¨®ÆB®šß‡~ÀL“.¦ ÕÍBÞD°Üâ£1,IE–ÿi&õ¹¤Œð¬ÅÛ_Ô˺¡YKÃü#ÓÆ!<a£CNίòn•w£ÔTRÓXÑ÷sf«ž*®„ßñ*s"!#Ô=ƒN¬8ýCÂÞ©¤ pÝ0%C¹*<„þ¿ži@¯j÷[c«I±Íwhöõb°8JÿTvîÖÍò0©ÉñxÖc}çèÙñ@†[þ/ëáCûòk…hc/ }[ ¾;¿¶8-d|CCüfÆ”·oã!ô6<üÅ }6Œùýˆ»c¦œ•˜üÒ\y¬ö¶è9<ÀC]dÊ…‘beìÚ 4›Yf¢må;r÷Î.)Í­DÌÕR…¿GDŒ“d6âÉøÀàGm/b§sÞØ™Lèj/!Öƒ2<žøeü}ކž4øÂUm˦ ó‘$™Èw×ô.fÕýéÙj‰Œéƒ§Ks«s·zÑ$§ÐEž~Š’k[øJ·xéb¢½í‡„G‹~».>BrF áÜgP ›Ì#IX”‚˜LC„üwrµìÆs™GÓ‹¢/Í*þ9 Qaá^+]f6<èvf^åÌûQÉÝÃ^{âøÎZ*Ùñ¡ÝÅÙ·*ʯ¢ZT~8„±ÆìíªESÝ‚}}BëtÖ4Ü–h{¹y£ y{6røD‡OƬÒwÉÈdû4<†Ÿ²AÕNÌB™Ïú®y~ÄùÄ éØbÀ€ü'îü³ãÌØ‚ì{ì?qìP5:ǀΘ.<›qÁº²ãa·b“çPÅ|G lÑcÖ0ºçXŶVO—…†Èdaµm÷jεðú§eÌ\°Ç påàÌîÀ‚ߦ€!zŽZË«î•5åÿIZÔ³òÑÒú‡ž“Iî ·…GcË'V`|æÔþœ|Iö¾½ûŽ1x°ÜÛu‰âXÕñ¯Ü\öNÕ§©¡ }|"/u=ª¸|SÓ(€%¤‘ä&ý ÉÙÍÒýOžC ÷Ž Ú ƒušy~3úY´}ñ²Ä€ &Xtj{iVA^é±ì“èB‡Ozç‘§¿„ò‡Exz#l‡°}yfÞÒà Bº¬ˆüS@‚0FÓúZr*ÐÓ°|1 Óá„Ì¢æ=«^4«A2ê%ÉRïÿ0q\èÚ ­Îdk;½¹«îf3bkÏ Y—æ$q•©BvL&N üÂVZÅÈdD43Äß² ‚éu$šÁ}ˆ1yf¬èO8âÖEØ aK¦‡a¢Ù_‘XÜY™w¥ šî‚M‡àØï`ñ;‡žéôšs»ØU¾)ùh yņÏSº!oƶÝíù•«ÇÏŸïMÞ›‘·¦peIæI2Ñ4×5\i:ÖŠºÑŸ±ÝîO~„ÕØá!ë-kë0.›!Ì0÷»‚…¯§uÏz&„úÚh+U¶›Ï]öÍêhštÂûòÔ#£·èmù»Ûîu¿®†´;] m¾Íþ¥2äŠæ¦Ï‹ fâBÕ±ˆIHË-ÎBho±¤N qŠ{¹4jö¢eÞÑa’elZ"bGo|ßù®“ÿ=Bƒ–ý=0ç*Yo»ëa-/[ì®W{¿ÁéÔ6,ˆ33",8“êõù׿‰/€ÑðÆ¿ÞñÑfPíÿÖEàÓøŽÔ¤ëÿÔ“~-?·øø´|²E„dI±þë˜Qå®ãŽ©(ù¡ uçã"a°.Á+âÁPHªŽrey05/è( zz0¬èíÓׇaûõ (ê¿X”!³ endstream endobj 287 0 obj <> endobj 1836 0 obj <>stream xœViTÇE!™AQ6TpA•E–° ‚‚¢¢ ˜Ù1bŒFÊ-F£Æ@’¢pA ¢2ê€BHÆ%G_4¹=§Æó^ dyy¿Þ9ó£úN-÷ûîW÷+š26¢hšš¢X‘¯ ž‘˜”mˆÙ‰Ö´øž‘ø>ƒ°R·C—/A¦ 25>üž™“ÜéC`îPŠ¡é¹Ñ+}V§çg¤$%gÙ8DE,t?ÞùïÈ$›ùþc㛘™’¤´±#ƒœÄ´ÕéŠDeÖÀù6$L›`C iñÿR5A¹È{uŒOz¬_FfVv`Nn|ÞŠü•kBW%%§D.HJS¸Lãaïàhä<¢Â(Ê– §fPc©ùÔLÊŽŠ¤PQT4åD-¤QÞT åCÅR¾ÔbÊr¥æQþTHQîÔ*˜šJ…P¡ÔjÅPVO ¢L(eF™S.„5ʘ,\O¡ÐEô3£yF©FŸÝe¼˜\æ4ÓÄüblc\c¬•Ìl”´H~eýØt¶™c¹\+÷+ŸÍÎ_d<ÈjPþ âAÝ&f&ëLT&÷› ^6¸`ðçPi.6 •Ñ‘¬²hïôê†]–ÒÓíb‰ ýV_Ò µœ´ã÷+íO[jWËð¿»D®'èŠgŒÂ;N&=ÝË™ë\‘Jç§¢EkÑD€b fXŽkpÔH°„…Íðz ñ¸ ‹ñU p¬a¥vj`Æâ¡jCµ–RñáаmèÒ¡šZ^ú¶ê¤ªþªê]ÙàRÅKÅ–Ê÷¬PCîùÄïOÄðC<®cµøŽë €«G›ŽæËýJV¢„‚´5¹yÊM ɤüT€ËEÇ7”f’K³¾LM²Bɧfgeg*6,E<¡"«Stz ¡‡£b•€í'Á¾Ø·w 8‚}ß[˜îoðxù6/áÙ/<™ïéêÑ R°¸ªÖÊÿâÎkÑj(Ãú9I <|hà‡cá;=‰Õh }«²4âK }AËèœD$(ÁÝUÝ‘#š•è“d‹° ¦ÕcÛ|¯Ì¿›þÁ<ôêE)DñãÙ¢˜)딊°Orœ+ða½ÀÁèë—óW——eìOû"Ê€ +Uà£Ô†2_ê±”¾lÄJ¡ޱßGÕe¶"¬f‚ï0Âr¹ô­/ŠHMázq°6XøùÆ < 1Q.}é6ÿ !×õÊÍE@ñ–†Õ:… /õ]X}þ–ÄC¬×èƒ81@¼!(ö hè>-ÀA­Ñ†q¢F¿ýBTiôÞ¬9<%rÌSmVY´‘<-¥mm-Þ4hñ(‡îª;UqìÐÑÏ®mãŸpÒêí›¶m°ŽB+R{òҶ眹øé@ Ï÷@a#‰æBñ¯þ×°!È|V°“Gm UÈÕy× ç ÄQ±±z/MÜWš#[¿ÿ“ý›«y7v'6kïBFv7¿V/;c{T>óÿe)ªuáLeë*å‚í2s¨ÌêZé'] ì&YN±ÓñX_ÿô6lt•¢Y¥Ú¾«\ÖÎmøt}ñGˆOÚ¸·Zø)gÐY‡«²hî‚]sî[JµbÎék±d:¾ÈÙDú¹ÆŸj’‰Üt½çÞù/™TÛ‰êÊêÚxoŽœ: ¯Wψ&„Ox§xÆØý´Ñprĉ%’ ,vÐ{bÑ“ !X_B*°j`Šxi¸ôO±Õ;%ãX{½³ ¸²àLf>c_‹®¿é]%‰Nì¤k{`_#~S'nÝ‚6#^ùÑþcr¸Éiý/bavpvB²,3}£bëB¾›Ý}ûd…ñ÷kWÇȳ9”œ³.°›¬Ëß’º>4#m òç[Â~ki8Üx]öYô±ÌFtíÛ^¶›Çvà/ ÕEk3²RÒV|‹ø ÄʆËÕå?î“÷~ùõÎò}üß8ÏÂ|á3R - Bâ̂ދC°Jòœ…Q–8Nò’5à0H¼TtcÔ÷0„¸wŠûw¸S¡ ÊRiYHÀ¼¦¼Å2ŸEéá r¨àÀ—Úه̘øÍŠ•ÝpÂæHRy>±í,i”Ûö-«XyÑ¿; Ôƒ~P¯ª«©lFM¨/²Å¡ P7ÒíHj9ºÂßk®ûøæhçm2ƒ]¨tœ††¯ˆü®³ H£oó€MוּÌ ¦k¤†£ Ò4à_Î>~~¸šÙ'_0 0U8ˆùó€"*þáä馳mª‚Áùâ›®†TÞÖNöXŽGö¹Àð;uG.Ÿ“㹑ãíPZ^SÐÊÃpñCAsËßÕ=4dÊÔèëÏûn4?&É­ÑIÞзµÌmBºínÛü‚ôäÍ|"wc×·çÐ#þ5aé©.FEw> endobj 1837 0 obj <>stream xœW{TSWº?È9UŠJ&Š&i}Qµ>F[k­Úú¨/D|T^!$È‹$!/ÞlÞáˆ&PÈCQеÚÖÇXÕzgÚÎX§­Óvµ¶köa6s×Ýjgî]ëþ'Ù_ö>ûûý¾ßïûX„ÿ ‚Åbq¢¤òä,Í¥òŽâ)óõR:œEÏ›AÏ÷Ó ä‰K;h^ ý@ ¿{Þ3öà‰œ¹Ï̦͙ާ’ÕÁaчļ°lÙò­JUŽZšš¦¬^¿~½ 9GðËŠ`›X#MUã‡l±L©’‹Ú‚ƒb±@›&H¤2±`ë¾è#»¢v"vDì+Äj¡L•,“Š‘R‘X¡¿ (ÕÙôH©H‘j¥J…f…à @(ШÄ")þ‘X/«˜…å•X-—j4øY ÕRÕB…Vœ"Ð*R…H–•¿—(ZJ­Äër¼‚·ŠVj´‘ZªÒ ð‰ÑÛÞœ~GmšPËœ«‘âeR‚#S”¢,æ6¿®i…R…F ëµÌ9ÉbAŠT£’ sð¹x+•Z:õ Y©"õŸ§/¨Å©BuŠL¬™Ú—ÉÊ?ï'ø—[ U*YÎÔo•SQ¿ž/ÕjÄ2ÉŠi`Y¡B€ÁD t³äÿsáŸpýÿ$bµ"v‹r«êè¶ÌíjÍmV¶N¨¥D‰÷I¢SÓHÊä+W®^³öåu¯n\²tÙŒ b±žX@D ‰ýÄbq€XL$Äaâ-"†ˆ%¶Gˆ‰mÄvb%ñ&±ŠØA¬&v»ˆ5Änb-±—ˆ"f¯sˆ`â7—!B‰p‚GPÄ,"AÄo17 "‡Îò°¾ž‘0ãÏ~/ø5ùþ9þ÷|Ì~†­gD!¿£õéSËŸjŸ9c¦hæè¬ù³j÷¾óô¾§ÝA‚³ù³7ÌŽœ-šÝ5gÁùœ‡sgÎÝ<7nnS°&ØÎYÃÙ«‚è‹ÀCßLõ߃|ȃüÎL£…\tPÃ.¬·!…FI ,°&X) ,ò’S 裠‹Õu õç»ÍÓäï=®:ÈGÅ$ó¤%8Øä!Sª,Mà,«É‡o]Z¿/^-áMH€kbŽ‹5±mâ.ªR³ëËm ª|°¬É 4 Ûœ·§À¢ÍP§-…KC®²ÐZ›l§+ñCEsåEß©ÉÓ¥vKW<ІCÑV”)—hŒGŠÂÔ°ÊKFÕꀴ¹ºï}ßÿvèèå&}½˜Ã@n®5­¬˜Ëå”>ö’Ò ƒýØ]´žýô{Û÷ê‚&V¯º›þû)µ7ø'¸®‚ë¾ÂYêÀ¯ÌiQ“·Jœy –šÔ“ Ö`ÚR@qÒÕð> 7Bÿû0`D&­‹ŸvJÚ²½…âÈ Õ3tæãg\qmàE¡‡ÜSlNúc‡ÑŒ¥ÉG^MÌ=>̧+üO·ØxÙíOW¢Ù¥ü º4¿‹ÞØÅòÂ%p5\â«i9q"žGóЂ¯ÂÈýæ' œ`ÙOˆË¯q¯8¡WÐ ]ÌþhÝÛp1Üvbü*'\~â)ëÜî7±.çFïÍÐÕ+LéEJ° Dö*Æóï‚ï)(ºgÀÀÑ¡ño(ÅÞ»™òB£ŠŸf6몳¢=Ç C/ ( %Ã%h1Ýyïxß%~w[›kdŒÂÌBÂÖl —è™—1Ãîã}F„pvü ÆM–‘ ¹Àz gq¶“G+U•ë7)øy>®Ý8 (èÿ‡Ÿ`ä¿þ5ò‹NÕî—ñ9á•ñ\PWïh²»ÚÜMm€÷ìC!hŽ2ú@ºÂÝoà3@öN°0Õ‚`7“­zQ+ŠK—jÖ–ê 6={" À1ÙJf£ä€NöyÈî‚eM=}“ÁÿÍ£ _½ê^ú§̆oñà–NÅ·_rA¢Z·¿ ¬†·H(ƒ q‰`2À¹(®°9óÔäõ"§Ä3,xÙÍu»šî¾þf¯ã­æ-`X®{)#AL»P Fû*q¾ú½¨;¸ƒø2S–‘ðë¥\°·ÀºÛDq.¨¡ËCÆ×[ëÁ Ee 7Œ’5a處ÏcXæ¼ ²F{ƒgøïú[$êl) öÊn`„wß¾6Ø‘qŒ?Mò.öL‘üåNýf÷ä=6Çþß“o~C“¦¦?%aJ€’-Û©S¦*â%‡ò6jÞ>ćÅ$d3)Mˆ¢Úá—™lb§¤"¢‚‚²ß^?×]¢0/ÏË¢£±è¬ö¸‚?cnv *:ì×°‡Š@4%8ÉsbÖ§‡Œª6ÙÁU î'Ç;‡|¶ú¼FžSÕbmT_{石jDê‹;"VíŒãÑaù=ô+>VÇ÷÷| Ï…‹²È"CQ± Ke^Mz£¶: P«ví]·ëLüIüåjA¥È3¶Ç|žÍS¢õ^vckm]=¨¶²†’ÓEs' ¾¼võ‹;)Cgù;N*½ ‡òuzûÛ;ÌÙm¼V]cNK"4áÔû&B}¬>¸ŽÃU~%p‹¾Q³·˜Áaêy2V‘µ3RèJç%¾›ýÀ@ НA?øô9\tü!±[ú]2.ºÅh!”üYžþë|È!ÁÝÆ¦û6*>4ÝfÝ…|?xgöE¸QÍŽzI”°û¥GÈÝC¢[7O}z†§nÔ‰óò³A˜Ò||ßù ‰é—Cæ¦yžàOA¿1r‡Z<Õ7ê®Ö…ºÉÄJ È'Q¼†+i2$ &9#ééÙfex²Áõ6~…¢5ä™›•qrÍXÌg㽎±+ôìt»»jÂ<è5 ‰¸¼ ¸ËmEÀ –\eFQ‘AoÈ.ª+©-­Î8›9„³ÑÔ\ëûŽö’Úb—þ UHTéÖüƒoèr%e¸p7zÈÔÊü:ÐZÚÏöŸ«¬ª³ÕÕ;ÇÕµVwzƒ˜€)¿HÆD‘¿HÑá þ™"ÕD0Ôqìô:YZF²ä`Î&@E12CËHp¿Ùþy5nþª&?,9ñ‹Hqj@¬Ñ¼ÅJq¢Õô}Lãèü›tãœÏùÑ« ‹+fæ'jí¡Ïá¼»¯;Z ̵ü+@Xqô„¶PgÛ=Wwž_ƒæ-y-D¼/"àœïvݻˆrþ»Ynzæ»p‡ã×1…a€_¹çìÞš«uWm¸0⫌vÜíÐwQ††¼Y\_ˆuí!“ÎÉñ¸tg¬ E|ŽÍû8âç‹>ÇØ(¯ô}.(²äšŒ:m¶‹Ò[ê÷!r;Þ»âëÒˆ›ëÎq•y'ØX¢‡é­ÃL1æ2]SªšíÇ çP“ 0äã««¡ÎKnªÏq‚;½×#}pòL@'ý .Ûí7pÎ2Ôä½Bg6ØF¡+SIº ÷õÁµ],z1œË•å$ 8‘Ý›Ó]à+¹EÁvÑ £ýéñ®Cøs×E Åhñ§ËàœO.t?¾ÁG-p3· ž¼:3Ï&«ÑW*+c)ù«öb5ün>èù;¸HŒ%,¥ î–`ÃÄÿqFE0 ½—¡x~y:Î¸ŽžÆ!½h"¹w% Pv Rð)>–8l ó‡á±.Ö¬rwè—¸è! ’̦øbL¨.¹½ÒÔnPðæçÃkay©¥­÷Dc¡©¤´°È³JÌÀBÉÚ5=}^oß{ÑgÖíŒÑ$ªxYi…Éà%ê@"ö(¼ôd/¶Æï±ÿ¾Êô~±°¾Ë…á=UÃ'>éþ<  µüw¸§C÷Ùœ5y»¨9l§&£H°×¨‹+*–2sÆås/ùZ6ë(N,ïï>ÞäûÌ—ˆˆH“8SËÓèÒ ·Ü2•¢än¬Ÿw@ÙEkWpç£×à| Ã%¿át6ý<÷"z†ä|M8•µ¢p4kÝ®åR{º[ÉoÓ8£º×T"1ˆÉ'r®k)ηæHkº:ùÙý÷¥0¾úhü»{Ï-âífoÐÕužêlä”om+Œs›iwŸ¹ø,4RvR›&ßâr>2¿Óž›(3bM¼{¸µ®±ÓÍç,#þL[¹£NñŠúÔ¸c9§ÿÅÙ7Ê2JàaÝšv?˜ÂPõ†}ÎZW’©Éºÿu’hsã1PÿnŽH­2¶0sDÅÔñ–D·?fjŽðÒÿ`ÚÈÆ í›C8&½Ü`¬µØQ<ì}ÏéµwzOv8ÁɈkhÏ´î7ÀÖ)´¶X,™úùÒKnl°4âú±$¡ß@!›;¹‡þ– j«[ªjk5^@}Õ—ôüCJF6?3WZ¸¹ûn×TWs® ~®Ä 1ˆÇ0…ñ!œak½g`ªµ),ˆ7ãkxÈ´S3èÇš½þ7)-M˜àKîñ I{“˜”âòy¶Kï †,Xg…p^¡õ´’ år²0³  7æª,žÁqµâp4ï•M(xÍx$œu€3ã‘Г bÂÞ<š°iÿï1OÕ—ï˽M)8É®õÚêÀKÛ Çrû ‡pñýŸ`ðýøû{ºùhÉG¯fyÁù°«gû?9«—œæõ¤9®ÝÓw <¬› ÈÉ È4ìÞRGL,ÉÕIK§¯˜^‘çÄMjÐĽ'“æivL÷ èÉ,PÔhz’!ótóWÈdÈÌdˆáH­Ãio 8Ÿ8Z×hÑî›bI²Ù(aÎ2âàjL¨éà&¸í8ŽT‹&z*Th6‰™P+L+ÍML3=˜k÷Äðä×Ò<‘ Ä«Äûð«Œ.6øUÜxqJ±ӒÑóý}çFÅqŒ™¢¹c,æ/wl²ô‰¢wMüÇ_·šÌÿ8ð›1]ÝÞþg¼#üàí‰m\TƒX™d}•­ªª²£Á[g”·1+Ž?É%Áz]nD9¥¡gyÈU•¹-Xaè›$ÓPŒÑ~ OÃůCvçOWh·ÿŸ{P×D‘»ÒÒ–Ëù¹äg _îi)Źե8‘pìÙ­âø}}cw:/e@îJ¬ÒHúÜ€U… Ÿ3 )zùÙžÜ&Ñ Šó§ëΓï=û0êíE¯Yxˆ7Õ4À9Ð^í †.¸-€ B8?`CµqéíÈèMè7hî•û–‡¡X’˜ò‹àBÜϲ9Qò3H̆b8€w2vÀÿÀÅêÄã4.÷£Ó™l„é÷fmŽAþ›¢‘?@azã+¼•Îùò;8>½å?;#«Ä(çõÁ%Ÿ}Ÿ¢ poº¡5h¦I~T›Óà´ðs}–Àcpµör]­¶¹ºyJOqËã€óYt&3׬e'"u€—í¼îi½„¹.b£¸ÉÓ_³±Ÿñà¾nda¥ÿ7xÃ[þñbqÂÑÓ’ó£ýýø»~†7ÿöRXt½€;Y±†®`#ÊúïHŸ„kX0æC¿o!Í…Ôͱ߇ԭäÑ}GÒÓ;)©©µ¼ªŠJP ¨F›Å$N¾Ãpkb æKö¸ì¢U\_kSõP¥ÔW6Õ¸êmàÕ®ö¨²L2/SR`‘( ªB$ðÖ8wÚÝU  …òéÚ”ò¬,enµ¥9“×*®2W KCÅ­EµêÁìC£ P ½N‘ê0—ðÏ•8Js¨B2#ËR*,£*ôe[Vg«½¾ËÅï°Ùú;ëŠCËãË,:©)«Ô ò(©S{òd›ûdSi½¹•§,i)©« =i°º”ÝGÆ@u¶¶uúô͇«ù Õ†êÔã‘›˜Oûa-{ä‡õlŒ‹RÖÀ$~„I’ò¥@ñö´‘`w;õD*P8 áÐP‚þ'v»­ “.‘@d6¦>ñ‡JìxžG®²&”¦ê96ø¹º·¥ÃÞænôŠóó)ÉP^^Z^Ê/6—™‰ÊhÏêïïðö^ÞÑ‹fl9˜“*á‰D†¸²ßbÿ¿ŒpÏ”d1ÇáíKðö5f;`f+¸R¬aXâ™Á®Q°„¤sÑBŒq±}3¡`–ÏîÀ§ â¿¥ñ¸š endstream endobj 223 0 obj <> endobj 1838 0 obj <>stream xœYiXS׺Þ²³k­Zq[P›DkÕÖYk[;9‹â„"u@IL™P\‚Jv€@eVœEÅY[kÏ­mmOímo{:¨m­Û¶ö¬í]œç¹+ aÔÞóœÇ@VÖZßð~ï÷~K8€àñxCÃ¥)[SÕËòeS(dqžÏ^äFñ¸Ñ¸gÒPÌCÞÃ¥|N8ˆƒÀ ÀÊÑ£ÿ5ìaÂÓÉ!Ü¡¾Còyn^3ïîĵ«Ö½0iÒä… ¥V%MHÔˆgÌ™3G¼U+î\/’¨¥ rñxüKšD¦P¦Häš©âÕ‰X“(ÇKeñÂQaá‹Å‡¯/–È%ª™8"u«L+^&•ÈÕ’Äñ •XæûC«ÇI5R…\=U<_-Ž«•’X)Þ$Ɉ•(= “ÅJ‰*EªVãßÅRµ8A#×HâÄ…X*•¥Æy®ÇŸÇ+ä±R¥Àë)x¡PkÔ±*©R#Æ7F, õÙ¨IŒÑxîUKñ²X¿§ˆMõxÓµ¦‰‘ÊÕb$Cã¹g«D'U+e1Z|/>J©’zMHUKå Ý·O«$ 1ª8™Dí=וnÿÄ=¼ŽQ*eZï^…÷[]÷K5j‰,~ª/«bœV…x™Ø“Ø^Ÿt§è?KAÓçË×/P,TnXô¶*T½X“š–“±L.Y‘¸Jºz­,rÝÔi³Æ¾þæ„èSb,±‚˜Ct®ãÂè)¤äœ<ùŽL-P‚äÊÌC;)d´ TÀœgÊítEoÓ›ì®úoµ3Î>·Zá2è‹3'›\m£®Öi6ˆP¨ .U›ŒÍ=!ú¡—µTSjYœ.€+Gc’ª·–lk€T½‘òËvó8¶Óp ß¿«² 4†§¥4ËÙ 2èv˜-“Yô Õn¨ËšŠxÁ“!¯ÞÁ”€ÊnÛ€šNZÀNí÷4¥BÛšg¢åÁè5´Ÿš!ó]ÄX}nônCz™4ÿ78(ø>”˜—®)!¾$ôù^cZ™d—׎eávØO,4°«pÄüÄÒzRíMdw`KL6‹cG¾ñ ~yí—¤m ˆ‚¸ã-åÍm#~õcÄ¢½û²LFÿ>#c)Ê«T)É¢14CTÇnÜ [(B|”Kñp”à(h²Ôè© µ:×6õÈ©v±[§ca9Ë;ÊÂël¼ÈEÒh"âGÁh$ÇAÏ?òw8Òˆüíœ@w=bþ¼Ð•3g†^þüï×/ÝáC²Xn+ukÆÎMçVsïÑA×k×$ÚÖBSÑ@4½$  Ép( €o}úQYÓqaKuy-¨¢öiª”†ìÜœ¡R@ŽU¥5oôÖ‡¬èšàÁg_üÖrÀ¤ß'¬×Ù {Ô»Õù›ÙfvXK€”Úì%…L~¨¡¾€š6+CM/5éí¨Lm5h=ñG1,°ÐÂò>ca;örÁßè³±ÇuW<Õøû-8ÒÏÝEâå1º˜ ¢ˆàw#c¡Ø_€ÎŽp]ï´yVMv³7üpY Š{ԃŋ9cþ6@­$á \4}4›jÓëÓÊãAõöò¨Ù³ÂÛ?i*o­¯Öº›™£À‡.ˆåýÂB¶u#K㬌àß혌ÞU¾yÉ®wš\Ýî3`õ1\,@:‚ø¸ pžÔî,´2¦ÒL›ôfc¶Å˜—TÔBA×8õlÀg,-Ñh“½ð1–/â·ß÷ªNŸm;U}Ü N à ŸBã…(ÑOO>úI®Ô²A4΃º†Äz©s3x—Ú(ë ‰ ™,9){E§cð¹{]…ð&Æ #ávú[ Ôù¦=&FïÂŽ•ú³ƒZ ò€;™íuÚ2%®nìŒ;cJÊò2ƺ!J€7ûDÅžou|±c­ w•KGPWv“­¿ƒpÉp2 jò˜\ÆXªóEÒbÌ—›‚Z‡_,¡‘Åûnœ€º1—¢Qd&ÈØaõ`¨ë\Ƈ’ ÷÷#ãÊÞ Â˪Lgñ·c)-(ÜÝ—Ë1s!œ@M¿ùóÁê¦Q`Ï-5àÅ\ öUUÕ•YŠÓ\"Ymrq"Ø$™¯¯èt:ƒå¸&?<Ëeì ¸Ý‹$OÀk0zì&¿Ïž€›¼èñœY/ðn6÷ 8Þ<©#ùß ø#X/™t÷q<;nò0ü²‹©nÃ0à¦ÀéâT‡ G 8möbl‚0­‚6½;Yo²d˜…qe[mt% | ´ëœæ2PlEÌáŒ3ÆKØTú§+_·m;¶¹Z”âŠ-šg_ÊXweíÑí52€¡ÊN¹Îm6¥× ½ÌˆãžÂòšYø1À„ïÐu6‡ Ôø;˜×?´Äm¶¯bð† %%™qæh° D•JëeµY‡Àeêš´»Û››O8/‚ =Õžh“°×b3u“£Í¾«×ÁM¨Æäh·xSšŒæluLņ¢µ`X¢Š\)›æR‹àíšÅG¶œŽúVþ+¸ Ζþp’ò~/ GºyÄJ‚?Ò0ÌOu=r•ãëÆ(ì{²/ÿ˜²qP`5+QÐùü¹%“/ ɳ_ºªN ºŠK@5U—V¥Ì±ä™2…›4Ñ9‘@…Ù%ÖÂ<TxŒ3°°€åy¥LWè+¾þcüW,!×­Q¢µBQuZ1Ý÷м¼FÓ_´+؉¿ "Ê·NiR5œ@“£ý$ý³ §æñiŸJƒãs¦&ó÷U ¨O|:[ &û6˜® qðuô#ÿüþÈwþÅ!£ˆì6è< £?AaüÛä7ðVs~y¨ïC&ßASÉ´žÚÉ,_·+$cÑ”p8“?‹\fÆÁ)5À†­ q0~¹×eÎ4,=’Já“Tr·¶%ï[t+ø§Îº ¼}•vôOh¹ï!IŽ ŸÀ4çÈ/Üóˆj×ÁMäùШù†Ìha:®IFÉ+RëGþn—°­¸uO3 ®Õë¥"`k¡¬ Ì¡Û6E©•úD £æ~ïÊGÍ)aЃ]0^#]¹P[’\•¯îÿ¨¥u»å°¨+HÜ0†Áp@KAøtz6½§g Yh(7„G‡Ÿva»ËB@)6 øG†¡\Û¼ÇJ=†K{kÅã•®–jc‰¢XtãýÏÃU}Єà󳸫Â7 ô8i÷=ÆE™¶q;ÕÕ<ÎcŽhå†Ó¸E$¥å˜Ò¬Â8w´}ŽÒ¤±ÐsᑇcE§£¯¦ÝÅ”z­øˆûHEU-n*uX¥f›¶›MÂmi¹Û3¬jóÖÜX¼ë‰ˆ#_t¨­ÕÕ·:΀ãà€©WÐ^ÓnížÔ|«Íj3—ö”ªžåí °ÌÛÎ`ƒêÒˆê™]oÕ‰†’[ZÞu®sÁê´›7nV¯K@Xõª¶Mm›/¦}®€C%çP‰<Š1|EE¢¸›nMÙõŠ•# $€ä,©J¥PJ Ñ HKûTµYÍ 4;Zjjêêš‹Oõ¤7XX„á6ŸÒ°¸Cȿǥ“‡+Êš¼`ùÑ6âñhÛN¨ˆÍG‚Ç kÒ3(z‘Ó%Hi¿4襬½~%ú(æûïÄó÷I8>$€B4à>zGÏãAf4äM‚Ó>ù­Ì}BX]TänÜT*•¦ì¼ÙÂijÕö`ˆ¬Ó¼G|O—ž¿ràNþåDçÊ?Ùð*Xø¿Ø÷sÜO4hžFÏ¢7Лÿ„SádŸ…¯þ"ûbÙ{¢Èö%ûÞÁz%ðÞOE4`ÎÔ_xíäÃÀ¯îü*òëÅàêÆçõ´ÒIýÊ¢»v'µ’Íûœ—OåZ[„Åyö{U[QY_¥w) EÉ̲Âü­'篚&Šß(Pöt0çáøüÿgïèö@ y› ˲p©WBjÿôHÈwé_É; ÝuütÓþ²“  É3n¢ !ÊêwÍ¿«þ’ú©¿®0L$¹ @8¼~4qÕê˜ÄPHú¨ç–¿ŽpM垧㚣]˜éÑÈç' üÛ8òì±Ò–6ÑÁºø¤UBÄ{ÔÓL'A’÷õ—ŠàCçãëW*ͦo¾1oᲈ¹s—_ùìÆÕ+ùßU ̸F‘ú/«ý¯0ñâã'‚Dªál(¸Ö–¼%jyÂ+]ÕõÕƒaPÎÆJãüÝ£C±ýÕu±Ç‚›Èˆ?¾»ýj£»:“A÷³87Ž…^DúÈâë?à®?8WGcl³2f‡G§“Ù¨J¬Ü\´ï:uîøU‘gä¢&m“ñܲÛ+r*³éXêlY™4?lYý£Ð¼K¡‰1ìÉòµ_Cç &ØäLÛï,Üív Oo;g8m}ööÇœÍ8Û$’ÕH/9ç9róÓí©Eú*,•µ7põ”2–&Pè}Cqt~žqÙç?ñR=W‹•…—á=t+ÊùK†÷bz?:L†¯Ü°hÑÊÓï ááý¨¢›e—Â{J/Ù\‘yx'…`QÝê‹[Ž%ÒÇšû¤óXó¥cû.‚O:ûИ9 puýî©®PR凎h®PïèJkÇ}ÓÚ YVŸ4ŒÅw]„ãh4Þæ—“Õ€Ég©ÅCz_”îHwY™¶n7u¤ß#a —^ w1!®½7p÷’àx èÑbc‘Å–·PÕ=l9è;¨ïqé {\e`_Honzæñ¥vŽLD5saÿ9r.JK€5üSØ%{/—ººòPIP8u Û¯b_°pÅé±à»ª§[ëë[[åõñ"-™’’ÐrÀS„\>÷OÚîÎß Š¨,œ4£T/DŸýë5“v‡CTÕšÚê{K©‡lô,Åã&y߃®Ãz.ˆNIM“+Ë3›óDÇòJò*L'3êA<Ðä¨2uJu¼1,){·¹töíùÙ€R¤¦*Ö-…C¾;çh>.j;Pw\×âÛç¶RAß~x¨¶õÂHpD{<¹Qrh]y Ä#W*+5û%{FÔ´¿®è ®“¿¿ÁëÁ—ØÁÑÜ=ºÙ TŒ±„¸Í¾»¶:âQŸzvÍÆ»p$Šòvä`j Ñ; ®âb›Ó&„c`¼HoJQÆÅ6(Oœh¨=|D^»Ñs²ßàÜkô£ž¼=œÞoäî‚lÇp´ì?Ûé¹\ñ0àñ&{úìD–ûÔ_w\5}¹Ïqvð“ÃÌ9á¬Ç š²ÏyÑôJ2L殑¡c¶ýpæC'šå_ïõ"Þõ+žã  ¿¨¥û[ÕY ÃýdÓ³1úÊbpº› sÃan·›¼?ðþ“wlƒÝôAüŒªf± endstream endobj 119 0 obj <> endobj 1839 0 obj <>stream xœ½YwTg»„QYDÍÎZì¢QÑ(ÒÄ‚]B[`•&°J„¥ˆ HÙ¥I³EEÛ¨` QÑØ `‰%ÑÄ?¾/¨Ižñ¾äžûîRvÌg¾sÏýãžÃ90o}êïy~/„QÂÀÀ ¯§"Ì_í>ì"y°R;fÃ2à÷à?3ÜŒÔ{éÿæ7‚ :†/Ÿ±bNäJ§õs£œ£]b\•nÜ7úÍ‹õŸàè)_ä²H±xí’uÞ¡KÖûrü„‰“l'Où|ê7Ó†Nf7ã «QöÖ6«FY3– † ˆéÄ0‹°#† ‰Äb1’XLXKˆQ„7aM,%lˆeÄhb91›C¬ æc‰•„1ŽXEÌ%ÆÎÄÂ…˜H¸n„-áNL&æSˆùÄç„1•ð$¦}¢/Ñ0#$D‚&Ì bqˆ°$ ‰„1ˆLH ŠèIȈ^Ę˜I˜½‰Y„)±‡<^²Á ‡¦Gï=.:^626 1ú§(DÔBº’ÿ%ÖˆßSñÔóž£znêy·×„^uÆÆ÷L\M {‹{Ç÷þÝtªé>&}üûœì;ºoV¿þý ÌLÍVIúJVJjúOê¯é—J_4n>Ç|‰¹ÊüW [‹ªlÀ[ª,¿è?ðá ^ƒ ÛŽ|rðûÏúæûY“T&­g&0¾Ì^æ ó‡Ì‚o5å[Y¬8¨ç xð¢/"+‘=§JKJÔ¤U00¬Ð”–¨ ☠­à+EÈW0mB"—v¥(T04Z¿c&ÙV"Èåh´™êEÛÉŽ_r‘œÙ·þìá,$w`?…vÐ"¹Qƒ^ú±ß• Xèõ|ò WX´½ˆ’ÚµoáÑAÇØÊôÝ÷l(‰bÃ(Ä*Äzi ôP@>tiœ$•xy°Á± çQ:Yx%g€£Á’°€Úõ¥ªü8êª#ÑX´‡5¢“úQýŠí$¸ $ä…XQ¼ÀÁç‘0 ÖÂt´Vä!X1@¿"¾Ó: ȱP}µnÉæ ñ´·`G#ùªùÎó[¾g¦V3¿:ž§ž:^³‘¢"ý¢’Crä0MÜtÑg¡‡ç—Ÿ3È í¡!¬ÅWÙš´ƒ±G”;CØ`Êcñ ')¾8ã 8ƒûß _ù5?‡F’‘V¨ê×6 $`öö_` «¡þŒ¿ÑoOg 5Õnø°iOÞ¶={òžÑ›²ïnœ`‡h7YV¤.)NQÇkÕíÏã$²FÑØ(:*0§À໵æÜ!BŠ¡gæê×%;$¦ª ·¶ÊìšVl I+ÅçÒ«ëìvc]Y¯õ>«|×DÌe=©ib4ú >0øúÕ=õg¥_í..g ©¢Tõæ´-[SÓ¤Þó–¯wf)ÔËê˜0÷Ä`üS+þøÝRÏ\ivBAj1K•h°FbÉàŠ4MRbš*Nk6äÉÁxi#z'˜âæ± ¯a8é1‚þ±¡½Â›”¼Ö«ã­WGòÊkWïv1ì!KAŸ7?ƒ1#Æc_¡¾ö+"—J%+Áùºí¡£Í¸Ö£f¶¼ùåqË¿vïÍÁiÎO7w1–/11ˇ† [¹bxÂûŠ.£·ÈV[ *-)ÐTJ¡ìÌ£'í¾"/q÷)ï9xÁ¾çh… Þ"I ÛÀ†2Å0d$!ZŠ"õ jH®]IóJ&n`lª 9î¿g»”š-bk=ú¯6ºÆÁÎL-$y?xI¯¾¹¤z6|ß112~3ú0’¦GìÅêú›ʵ &¹§7YþÎW4ˆ%C»Ç’ÕÈ%’n{¤³Ó(«/ZÞ¼yÔü+Ó•XÏ«~ãÌ´™5‚ûƒÛˆõß0pVŒð!ã:LS! q·ƒ}МDõXŠUI©n–iwÔËÔЮ¤¦ä¿&“Ý»±B·Ä]ˆŠ/С]6 D‘ñ)©›“ SË™ôr´þ îå…êâ]Ò¸ÀzR2¡ zÔ“­JÞS–“UÀRÅM±&]_ʬߩԄ³ËÙ•ã¦RBE :…þ8%Zvê¡Ó21I¯å­µ\úwZB"YQ¨3x,ƒ¤‰UÅ“œ¢Êì·±ʸ u’½¼OÓ!|¶/b)ëÙ«ÜC+ÂöÅ1ûâ÷¥5§~“¾7í«DJR½wSyTÌÀ¥n¶Ÿ;©—ˆKR5›uÆ›&–¸uû¤H,©:q.þÆ =»ø 6¶&t³nGP‘g­&=GYJIön(N./xòâÁæÂ}ò¤9 i8mµû™;b‰y%vKRjr|ØÁ|FUAÏNô0Æžùƒ/9]JVjº´[*КA6äâõ!©Ëp°·}ƒ™&1Û¸ïú)î葺ò‹ìì}ÿÜåÙñù©%—¾KL+ÓÕ‰:uÅ’–Ã>K*ܹ± c|üV¬ ud(G1šôû˜öíÍŠšÆNÉpšU`Ï‚'0wŸ‚ŒÅÝ0ÚŒv’WWýò=G÷ª S22³2R¥1Nñ‹YÊÙ÷Ðyª RÜ•3vaÀpüi6Ç_ç†5¼r MÉÑ.7|zvO»²³|jO”éWyCBgÄhsB—Š{9ÿ·’@~žy‹c¼ “eKIIÝ‚%ža®ƒ–?ÇÀ7cŠgg~½ì;©Äé&{uß7 ‚â~Û±‰¯¤xö¾Ð³íJľï â›éîX àGs°ãMDœ@gÂß&q})Š%‘ ¼ÝÜ5Z¿ˆ#af»‰¨£x¥sÏ;PÛ‹÷Á±gÒØ¢äîv+Vï¬_.s=8!kñ}÷ Q×YêÝ÷O;jA®>¼‡ù3,gå§Kë9Ò5Mµh99©ç@“èëO/¬$ŸcQÏ“?Bñ+T,êòš8³û4vÀx?ÕüÀq›¼¡Š¼çra\{Rìiò–ô46…JÖ¨ sr³³s¥vïË?ÌRMçÖ®dœÄ^e¡ykpFõ›â5™‘¨ì¯-{}÷ÊW—®J%‡êŒ\ç{G;áHö©¹píþÉßOIW”¼¾:\[O?izzjAúÒò…^ŽÅ¤, :os¢`å€2;zéƒ ÷u‡PŽrZôI‚f‘|³ôÇ;ââ)DÐ0&Š >Ýž!ÑgÈ sQý§û˦¢‰h>r©÷YêÏs!a"XÃxd-rÿt÷¨êΫ·:雑%¸iÃ͈d¹¾R-ih¯Äte÷È›—¤äôÜÓWMƒÀ¤µ úAß1­È”‘œtd¯[áDó·ô¯ì†YÛM·a$u£f>mk{üDØ‚à*ÿvÉÆ¿s¢^Þ´+ÉÀ/ƒ5‚b9}%îhü1î™pf¨5—ìpB#DHòqýé:Ü _!*ý´áH4=GÓà¹è‚`…X¿¢Œìê|qñÂÉøOl®‡üZÞ„ö?ì]é‰sàè1hêÿËx°¸y³ªö<³¯r{[Lª4)i™[SS¥ËVyDÏÆ+ fµü=´@ç÷ü–æ29ñùi‚R0­²CÓXi·Åp³mŠ ö¾ ±w©Û•Ž=­äå# ¶"Ñ8Ô†&B›hÔG «øxwŠ9òJ5‰äw‘>h1ðÆÈ®íEÞÖw?ß@®5 ×¢`¾W«k£j1\„×¢ƒLßÍå³tA&€ädrå½…‡°iŒm´L¢OëHm_ÕÂ^©=}—šôF,D EÂ[ܹÍÆHYͰ³¶š‰ÉŽ0½½Þqp˼՜¯¬$¬µ J´è2Ÿ-òQ íb£/o| —Û³;”‚ÙØ`ô,‡U4[ŸY™x(øÙŒó£±øý­Æ¡ÞÈüá0蘜®-Â¾ÏØ²5# X7[éÁ"‚q'ñ7Š3ªøùþåV¶•mö*›@u„Vgpžã'ëHUp€" 4Müø wÖ0f!ÌÑL®€ú‘h8úl #"Ç‚d {‰™.ÂHìÃx|èn«°PÝ ¯’çêjoî<–™¹Wz&es´Í¢º¸0½`ó6f]¾sœ¥&Î[:›ñ´ÕЗ襵ÀHwõFBÎP·ˆƒm]´T ¼ 4¦·@þØüúõ´ûC”ö·¸ùqà F° ³ÐÇ7»8ÏY4™ùw†ðcC˜/hŸ[K«µù%7Qˆz=D¸û¿Ï6¨Ã »x/q‘â~ZIžc”ש>Xr€å(LFý;M˜I¿iÂ4ÁÁaÜ8L§š[~é´®.´uŠîÑ*ú—°n¯\ÓñU˜V®à.Õ|@M•4\߇›AËãìδ]±{6–¬×½Iøú+ }-òmä·Æqž~1žË;â‚8ìWÝíu:3çÒø’!§¼_¢Ï©KzG‡’v0$âÈü“¯ÖŸaoPϧݷ‘¢ìÿ]ñ‚\#ˆ‡±âû·¼Ì›±Ìº;®Þ½7ƒâÆ@…mÒbƒ­àˆ^è%š,øþSà×ɤ¤m+ÿí5¬±›k›ëŸ¹¸SpŒSžÒR‚…|)íÇùTx±ÔЙ®¶~•‡b˜jåáÍw7ßÛ¼#}w¦ûâË×… tœë=n‚ãù›™Ò¬²tuKiaˆAF¬ ƒ¥ìǬ`5×u—¬î¶ž9¸› «ŒPÏ*ñ(ŒR¯/Ǭ ª¶åŸU¿jfp`‡ÙÌi)²Ýlq‚&¹¸4_)8Ù¾‘zÎÕ3Ú•óÞ!H{³kÚ®õ¸ÒõÇÀw Ÿ~sò!QøâÚb!:-€sýêØmÈY‰xcA;-yÝÑ´ FÞÝ]k[oÁ…¾¦£¡IÍÕápjz¢ny3ú‰œ8w®í$ç»?Iá§æÐ:NÕ¹ª¯Bä“AF/^Ù‰ô•ÝM{& 4ëÙ^ùâO×ÿòYxs•ù%ä|¥è€ Ý²ÁÒun|D"ïv¥(“Dž¼RôP°h´^¸·ʢ¶€ã0Kû£%ðF81…Zrµ½T’;#åÚwÇnü”ÜRà†XR{éèÁ=µƒj„2èŽÀ ÚÙ£—«w㞸öÀZ9¦&MÖ’«Ï.ô_»aE TyfÝ._–’xù±áqŠU”^cSók$ˆùá`Ô>\tüë¾]àpA F.jDü`‘‰ŒÚ/æ#E¯ݱ  è^k7a&z(:0,"(¨:üSH«ÞwôHؾ@p÷;gÀóôŸF+>i×ó>ô¦sÕÙ¹l.U˜¢IÁ…21Mоûsþ–´¬ v‹e fª…y¹¥Zooâø3X|‘ìøxOƒ­=ÈÚ#ÙJ­0?~€K£!>&IÑohözÅíêú55•'ØlMìNEõš v5IÌ΋s [£T(býX?VQ©¬ «»Í^ïàƒpH›ŠÔ7ÃÁâ.ã˜ñ®\¬ö.¾<¡s²s²³Ù+{Ž^`/Q/ìoY-[‘(݇IVŠFU¤Þ–S\(Ý_s¶ê"K=l\éîèÇlHIÈZÁRñ)]1{§õ©Û³ìÝ',^\yx5“–·%'¥RTª”¤’¤CñÌ…ˆÓIgY Ä¿lªN¼ümyÒ?^þa[‘Ÿ™ÇZi4EꭹɚNKW‡LÎ §x¨¶Ÿ Õ½ÒÃMúÞá'Ù«ÔOv-£GÛ9Lô<è{7X*y7[¸Ìm Íó™ïÞ=Üz3ðëÙ‡¤’V(§\Yìäî¹ÌÁ~Á…›w¯\|ÀHÞ¡#FÏ®-²wt[0ÃÎýJKóõËOµ·ÂH\9jPþ¶(MrkYÁjжí©üÌ?5Ú!§B888}ÌWÀŸtvlö&VÅ΋÷ˆør¥ÃÌÕöl,·-%/5oKvµTUrìá„“7nì©ÿši¾Vû s¦)êecÿ9"F<˜úê^Ãñ§œ4½Žþ29nSÂºà€ A,5wÑÍÇ?\ºÙ|û¼ÏÔ½Ì6›•£XÈöæ@àéWz_L"Ë *»<­(‘µLbÓS³ârÀr;-È.J)LÖŽ§uŽÛéúˆT!3‘ †¾ P”(U¼»®$_]‘#ÝJÑ+rŠÊJͱ–%l:»¢ ”žéE˜A®3Z{ÚRf"]iàÿ‡ê x<\?¾ÿÈ‘°ýºªÁÁû‚a=mÃÑž‰ËBBIRY‰:¿²P # B4öüÝfLDÞaUbjÐ-]»—àYÁ ÿôŒvs¿½U»àôUCÞ/JaÓÒâ#P@Ô“µb‡v‰viR 1jŠr³r¶æ1ÎÐ7ô-ûûÇ÷wÀ4'/;×=Ì“uÕíWxZõÕ@îwN÷\Õ, ýŸd›©Ÿç|;dùºÔˆùÒÔÌÍéªLÊEÜÍÂ9ñ…¯ªëXêYãj·E+}µ’L‡ Þ´"fcXØ®5Ì^²f׎ýÕ1U ‚Û®ÂL,rŠ*yKöÖœ æ.êWm¥%©²ÐaÎÈtkFÖVv ¥ƒ—‚‚½åÒ{Ðãôdeß­ýÍŒbŽbzËj£ÑƒÛQŽg´õaú{í.,ŠÒ 6ç0P-þÙåÎ$šŽ‹ö)š*f*</;¼üTô–j~pð@!6GZVVJ2³!γ/»‚ ©ˆ<V‰½BÁd1 ¸þúÕí³+æJW‹Gd;z²S)§ËÞ ³sª¤'Œ6g&f%³Ô€ÚsW.|¤SRÛäÝidy"-gköÖR ü)j•:‹ÉÍK?;d”–‚õ̰ÔFº:/·P-}FO‘‘:97SÝSy™ù[ ;ÌÀ-OlÏËÏg‹,µÏè™iY[3¤ÈÒWŒø#~Зû0°»‰¸B· º韡 ÕÛh ”vu²PJƒ«  ¹~ôòµ¹ Ѝ+ü3J²ÿ)QbéŒ2Ö5{‰Iº³¤B1ãîþnÕIU„³g+ rd¤ G6VñSªÀ¬ªªŠ<Ù‹3>ib™ô&ˆÿ>Bde endstream endobj 37 0 obj <> endobj 1840 0 obj <>stream xœW{X×¶OLÆwKIÔfbµ=­ZŸ­ŠZõõ( ت<D’’7y¿7 !&"oTE´b­U‹¢ˆÚÓjÕ«==ý¾¶^{÷p6÷1è½§ç~÷¿ûÍ?3³ö¬µöúýÖoí¡R^C¡R©QÛ¢”\Y\¶h[vô–âø¹åÉÂQÓb•˜>†x‹†^G©Ãÿ>üg:Á@h`ÂkÓ#?ÞýÆ0s2ñë믜y¨-Ôóc(ïÅÇíyΜ¹k³%j© #SÎ[ÍKQóþÛÂ[Ç— 2ļwÉ_˜-ñÅòy¼|>OžÉç¥ „|ÞÚí±‰·mཷa[‘ñ’y2 ?U@~ÄW¥ò%£†¹< _*Èdä=O ãeH“År~OžÍˆS…¹i£áÉ÷éÙb9O"Í&í"ÒBºŠÍ–Ée©RDÎ##Æ®‹y•£<3Y>W& ͼìtreZvjîènþa“' Ä2žœ¯’ÆIáóÒ2‰0YMÆ%]I¤‚—)äÊâŒ?¢ÏåIùÉÒ4!_öÒïhUþØïŸv,‘Õ/¿Í~¹êñr_˜>ïº<Þd1D˜·…7 ±0YÊ…YúüÛÿH …2Cœ-•ÉsÊd•:uk?S°ó P4oÁÂE‹?ühÉÒeoGS(Û)±””]”xÊnÊJe %‘’DYG™GYO‰¡l¤l¢|HÙLÙJÙF™LyƒIaRÞ¤°(S(Q6…C¡Q¦RÞ&9Gyâ§ü•º‘:0fÕ˜›´Õ´¯yè+è·0Ú#â#:±ØÅ±Éc¿·tÜŒgWŒ¿3aé„Þ hbÂį&¾˜äœteò*èD8ÍÝðŹHØvÇý—(æCâËRäˆÓÕÚ<À±X?eñ>˜BgÞð… Ž”Mm•T§mÞ²}8‹û ;=ñF…ãC-GqÎ]jJ`sÛÜö9è9û£.*:ÒÙùÙ¹žã ÕÛA‹ߢé̇úgži*¿LÛ|º&üì—ÌÆ&æ…©µ`ͼGle¡Ùè=4-üèbüÓëWú.áׯµ=w°ïwô-ᬎºô¸5ÿ´ž¾›/=°Ï„­_ Ö?>;€Ÿ¼ØÞаI„ˆwBT8qJ/\UÑÑ5Ô|±®±ŸÃg höÀê+*Uál¹D'ÉÁS’Scµ©yìóPäô¬Ñ›]k MÄQŸøv¤Ô¤Î@»_ŽNÓIÿú:LÌ­R…"!õv×P3¿¾ËR¢ÅôrF ¼ÐW JGÈŽ1…Ö#Îòi._:¡èüìÎïÖ6‚Z¬9némHÿ¸˜[Î`NAœžÇ°äYyÀ L•ü2 Õy´ÓÖì=ðiVø@{<~2¡"ˆ±}¢¬ý»„§~Òr'ÁFãYø÷&*Å<^N¼Ç 1òøòë<Å&?¿$®d†weÁb¶'Íc)"s©¨n½á;ji8ÿ.`×£[‰Çéœ(.®mÎÏ/ðøàt¸tF‚«XCÌLï³”ë¸åºB0€‚x…–fÁlfì!—×fwº,v.Ú…úœ7/Œ79ÌWŒ®€a ±Sï0:dŽƒv0¹ .lµ³{CÄüPdŘp;ŠyšHƒcX:Ínµˆ„z“`[¡?ÔÿÜ WãÞâ|§Èêeo³:ƽ–ãâðÀAl4mF‹ÖŸH¹z³£¾þW~ìÔ‰‡¸ÄP×V}øé —YŠVÀ[¬c®#2 –&¢q1ŸÈ$`™òú® 'žw\ÁÛ.u7µ9ÉÄb—àÓ‹Tâ]HcYÌv›Ù LF æRk+à.t{¥¿»@°ónkg%Ù¼g±½Äêw. †ÃšrÙ~~/7~‘×o I'ÌÛ”F»@w¢¨ÈS8Õ Ð\¶½MfG£±J‘Rm0yM…z¿Ñk˜J§Sæ„´ %E_õàµMáÚöK h»4¡TÛN€š£—þe4["šäÙ”6Z˜Å*õúó>”v¡Õ›Ž¢±@´6­N-LQæ Š\ƒElÀê5t%FŸ`¹M®ôˆªþ*Œ‚³a¤àýprÝ-pkV‹äZ]®.` 鹇~3È©é/A3”cëï„Ñ:€9n·8€ÙaÛm²»õÎ<×Ë*¶x˜Úð4Ý¢Á翳vŦå&,NÐ1ð°åÉÅ/ñú†¶Ê“« Z v—ÝaÆ­z—˜1Y0ïhm8TÓµ¯e;)º<ô.Z0÷®¿hºÌ4¼0àñV—Ëåµ,³9§ëÑå!¸¸û`˜AV&Wø¿+Cb¢¶Ý¥AœÌ2ÉË•¬Ò©É±ûù½%¾žïÍ÷å{àbˆm÷ÅêùÖX²û"΄¬Z§Ûæ4ãè­‘j§ÑevNF…²©·¥þo×H%H'ù÷¯½Tøowá’û´áõ$M‹ÉéÈÎPhHi²Ø ‹}å…GIM+È/ðZÍi•Ö TJ«NÆMÊJÙƒÆTûÀa¬E^-ضždè|î%ÈwzvŽe:޶:¢¦Ôª3Êd &.všô ØÆ¸8xüXïŇ—/X©ß¬5g¡‰[eì‚PϹ³ý=õ;Td2Ú]»ß4æt‡ ˜8¢2mMwgóày®ÏOŸ½d¾û…%’æÅÕÒº¦š£ 95¢QRYë†#ê¨M÷áåû4ø×áe,²Cç"2 öÕÅ?w´Ûñ_ïÂåÎÂà¢ØŸfs­Ù¬ Ÿ¯@SSQtÜ;8cŠ`Àâ³zþÞ ÷ö>Ã[¯žlì=Œ:Ap˜EvÊØÔ2’ÅGŠ *Õ¸'à)E„ gåArZù8.¯¸€ÛÍ]©[¨v‹Ëèâè"úY‘±_Œ'‹èé0²³A©»Æ„1~¥hÞµr*ȰdäÉ䩟g§‹ŽˆÃZ¿ `ÙÚ<)ÿ”b ¯§¤º¿ßÕó<·Ä]Ÿ6bÞ2ÊÄî–æþ©··_X³5uóÁÑŸ‚‹¾¦‰Ðƚˀ‰ ôÆÈG#k•ŸÒa‘„bè÷]pýZr…2 °Ð F¯Öv¢o€ Ÿß A3ñŒ5Œª:*bÌDbº.âgE³¡UÜ”N»1D]þþB…:s¥‡u~’á2V–Ù–{FC|.¾"?àžÞ’Q¾<4Š€µ†˜ÞJm‚¡'4¢rx MÕ}*ýh b~° ½ ÐL ½yk¤Ái™pÎoëßË>hÑgsž›ä‹©¿ÂqeD%¬›‰«6ÈV¦ïÁ…û2äÙ–qö»oBj:ñº®¦P÷KFYBÄ=ñcóX¶búÈxÆr4½Ì|¦¯6x p ”áqŽÐF~¢ß|¹ñ#ÑU‘ ým÷àwTýQÌð;"’ÇìêØwk¾|‡·fÛ¢øpÚõ5\™³,’€((mŽ»,þ`LN~v÷ù7¢ KãÑ|ƒ"JÔ`'¶|GìÇ+w~ù—;=7ï¶p <Tú±«_°>¾­©íØÍ“_s™}W;ö®ß-åïãR™ÿ²á©äÏÙÏD4«¾Þ8ʱò¼RµLªÊµsmRó*Ë;Z4åŒl|eÓHÿÙFnJ‚Š.b| õÆcXz‡V¥aÁiUßÔ~ bOûáT§a0jí#DE‘ˆ¬=âͼ²úñ©Ö’æ^nK»/qÓÖ8ÎÚm‰9+5<3üëÊñ¤eKç‰ÄxNNІ°-éçÖÛщ­n,%Åg’2D¬ ÁÏCŒªq÷ÆWM˜@¡ü·»ª endstream endobj 1127 0 obj <> endobj 1841 0 obj <>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýcëBÖnæn–…ß7 }OüžÄÿ=^€…‘1¯¸©Ç9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU»ML:çç”–¤)øæ§¤å夿%•æä¤–0000ò10v1012²¸ÿèàû)´hÿ÷Oû_ìÿþa?ó­ßûD¿ «¾ÿ-ð[@Uí·Ðoáêß¾ |üð]HîwÙogQmÛoßÞ¼ñúõM;MM[;my¾âÅ?í—°ýVœÎ¾Ÿk?÷þ<<@ÌËÀÌHrò endstream endobj 14 0 obj <> endobj 1842 0 obj <>stream xœµyyXSW×ï‰1çœÖ¡•4š¨M¨Õj§V¬uÆAD„0$@’@´Ã ažgDq‡Ö©ÎÚA}ßÚùmkÛ·ûÐMï½û`‡÷ùÚïïÞç>CNö>{¯ý[kýÖoípˆ±c‡Ãßq8Vá.Ø%_é²À]Ë~=—™Æa¦a^ånB‘¿hy‘LjÇ`<Œ[9}®ÐájÒðæ—˜O_~¾N§3Àžãé¾ïÍyóæo”G©cBƒC”ŽKV®\éxXíøÛˆ£³Téøþ'•É£"¤‘Ê…Ž{¤RGeˆÔ1(T&uܸÛuÿ¶][çlÙåé¸E)ñ—9ºÆ–…8º„H#Ò7ƒä1޲çŽòÈÀPe¨öÚ´²é¼éÊé•Ó?}õà«OÄq¦øÉ"I¦c¬ã³×^zmëkG^»3cêŒÂ_?ùú3'ÌlœyfgVõ¬÷g=‚Ù‡ƒ€zõ2¯Ù9Ã{m‚ƒÙÆÂ;(‹¹"Œ'QàHâôFb‚OºH½m”O|ICqvin‰d¾ÀƒV²w^q”%èD F“¼7ƒVÁ|jD ‚ F ¼‰L°2SÏr>|q˘‚¼ìÂÌ"@7h½%(“îW*­…!VÊ+G[ :hØF?ZUÜ èÁÙ6 ’RÀE¯ÙÏN ´RÞ¹‰Å`†jêK¿së}eš[Ä)S–·:Ôà‘ =Òð|—á¹”¤"Ϥ—™€h êÈ`ÄCb¡ÿ…]} JìÖüÖ̆L¡ UQWÒ*´ÿBÈAË…h ò\úZJªW*>ºÎF¹å¨óA5°Zk;à88Gørlõ®ZP'C3R!#‘Eà„Ú›§-<4„<`½¾·_y`/~?¶ØTÌãN•ÍòžÁ”gï@j n9¶“oUQRŠ `==âJõz½SÍSÁPÀÍÊζŽûQpô«{dõQÅÛËN•TÖTÒ|Ym•µ³w*»t­¯DŸ ¾)ZüúyE}€ËTà  WNÞho]A‹öŽÅðUZ ¬â~’/ƒÔ%Ÿ¥«÷ú-`w˜¥ œÆ§°ô)f3‡hòâyHŒ¦}ñt€_ÿŠá”E_¡W$z¹àÑ…yèUÄ;¸e]`PMOœD~*áp“þêØå›bÖ¶a®¯?ãïa!W‘§2Ê“S“´èu'Ds`Œ¡Ì\ŠD ¢´ %+‚¢LÚ†ZUÔñôRÝwè58yÑ ,7§b/ب¥Yºbp†{)8Æ]úg]ÕÉQŒuýÌ=}Üa‚Ù+H‚q¼8Ò—’€6[›ç]¶?ÿX œd;=6í”.h XØôÖI÷‹Û?—~ |;pé#Z]±Þy[„¹€=öC]ƒ²§ri¸í øœuþT\@¸%Ü*·m§1j(¢\S¡†ÆfâE‡»`ì“)ü”æUAA¦ºÍb<  ¡À>ƒÁÕLóßÐÀа‚Z—©/ïÑp ÕVc<høâçp,œ_ÞôéÜ=~1ž~’û”9Ë3.Dï¡Á¹ëMç:î ®E4âz¯ÛxÀ½£I<‘ ‹ù¤‹ÃÜ„ÎÍc\|¬"ÆOçhTH2ÎÌ¿yÖ‘j*­åÕ‘ƒùöòÊêÆ£¥WñnÑäȶ‘ó´Ì%ª:óF½ö{”þøŒ!!g ?óGÈ€‰úµ)8ÞT°“‚4ø©õò¹+:?߀§<În¹8èU¼c5ÉŸ®¢š ’p8óeÏZÍEù½O®$„?ðì}  ¯xç€W¤[âr@$â E±TWÝ/1 5O`£)|-aV |ë# ñʓ桱h&r¸ºôË¡³uÇû%'˵ÖÛ5¨†RÊ£89¡™¯ Ôô‰(RõÆäXUX¢ È@Ta¼=¼1î ¸ŠQ>}çñåæ°­£Øáþ^XÐ…ýí³)|%ó%\-“ûqH^té üsM–”ìô"PNCR«¾Ä‰®†Z%i:œª5èôyòlæBC6äåÕ‹á4ÇS•¶| ]K¦Á×y# $?SEÝ1—èÀ¦ÑTߤÓnÀÖ;«˜Nj"|‚Ùrµsï×ÂL”fdº¶ ÁO‚²)°ßdÚ‘ˆYÐd¥¶dk¬à< c©–¾õy)Æ"q™®È\èkyCkœ= #goÉçTJÖÞØ`½«J4‘9 lðÒœ3„QÀ>•¸J­]…MŸÅšžËš>ýoL¿ÿ§é›(àd`B[mÔš])¸EÃH8‹ú”k‹ßÁY!2V%Ú™…v}•ÃÉËpåSøóáuxM §ó dzz’)ó¦È ŒY†\š_ž›=í]w¯{ZûH†ÂÚãË@&ò —{…ÊJªTâ¸Ú¤jýy:-.!-…9Y¾K(M¯Æ9Unn¨O­˜vÿý¡N(ZwwHñ¾¼L[ êE=Í ç›B—V³´¤ëa~îá´@’qü†;¼þ,@ùj²/­8­8Ùš”§‡hô6¾+j#Z1’p×— ŸõŠû/×_çÀ ª;¸I^U»‹®&“a0/–4«Ôº8` ÙjËA«oþAŒäLo³Ñ¡7ë×s•\ÛüµŽOœÔÞÓNC? \(.Ê¥'Âfã)f|‹C LA;qÀ?†ù˜¶ø7Þ€4Y˜‘m›’ÌI&£ÔãOB*Íl0™M)SAZfzv:Í¿q!W4º0ØUsªU¬/Š‹Ñc(H[ÿžvSüÇß“£) ûa§óó3xîJ!`æ·ŠŠî[0Õ6«¨û¦"Ø8êׯÄÕ¬_›mÔº<} &txžCûþn„qý»UÐ^Š-%Cîvær]©ÃÍGp3>ÛtFqBBúŠ$ðk´”â·j¨ËiÅF°ŸF‰§èt†¨XYb ÃÛŽHøåð!zCGO+Õ_åRï÷ºÝÙ]V_/îëã9Q|—œôöŽ¢“¥"6ylÃcmHáR,c­Ó'®H{^“Wf'”‚Û£æÞ.-y”ƒÍ=¡¢?/¹ØVy×Îa¢1öH¢%[Ò¬F Ætcªq*΂æÒ´RP€‹T‘¥=›¶"/-Õ•n1Ì„ãQ0ËœmÊNÎSç%ç<`)±vÂWàaãõÂ9°4µ0½Š@eq~[žµUKU§ç«¼à4ô•°8"_—rA~Iq®E&ágÈP”cÎ" È-(ëÁà[aÅ‘ì\;Þ»ÚÕxÞ}ˆÖ8œûÎùh ÿ(³ëª@£KLÑZi*í—@<§Rµ5±‡l®€^°ÞÛEi¯®©´WådäfX$éùÀB×·Tõ ÖGzŠwQháNMò!il¼.„Ñ|/—~¿Ký½•§.‰ù%ûr+âz§µaûÛ»ðZ„©^–’—¨ÐÉ“â"oë“äà$ëí€úéçZ„—Ÿq™%ÃSÅ… 4¥'ƒx«ŒððB›Ð[BèOýá™NõÀ\¬ο“Ý»lè·Û¨Õ¬½MÃÝT]å¿gÜ[wÆ(D@§3É3R€ŒÊÀ!µ/SW¸ø¤ƒÙBè]¯_)Ë¿ž+²!°4`g–Y9°y2ôµ’2_&ëG¯@/á'p¼­¾©¬%SdEKµTSz¡è@bblŒ,Åœ¨ÖÇëìBùu(¥%–¦Lì»mÕÊô;D3…ˆD+#Mai"-œe¥ä‰¹%yk‰]ò¾ôrÌ1g™«VSjX:ùX²Œ{sãŒÿ'.^-HÉò×F%Ћ"“y T^f°º§ É_2RFɇ}…Ïàø:|ií—³w¹{Ç‹÷Ží>ÖqêÁ‰Õh"âúìX¹ï`uío…µ›ùþy­‰b>€©N©Õ„z¨½•Ü Ïk—0¸YZú0ƒÞþŸÅ‘Ÿû{ytU1íÔq¸m(Pä#æN9›«Óp®–%%¤f˜ÓL’¹¨Q0Ï\šZ2*'­–¾, ÐaU—ZnÈ×@e³“­ ûË‚Yé®Uºh"tѱ*0ƒ¤,c®Ê¢ÉÑà˜W„µÄ¹vüœyF2óKZŠ k²El¬ßbxœÚû\f\,ðÙ¬À2kñŽ!õÃÙ›u”‚ %y±ùò u%ÕUÙªÏm:¶ÂÛ+>ø°d¿Ÿ| x—F“.„Ü£=eÍâúìï ôÄ_&ü¡œ~¦ æ·™#ûqÜ%>;\d7äâ"ûœro–”ÜacÔ‡BÑ#Y(Éâ!oùqJI"Ë$s)0S§r2ã÷Ù⬩ßÓÌl æŒã•’ø ‰™ÚÄaÞ†Óêã~s‚^#ÒiB“¼på“°Šy“gEßQièE^YpÛj½ˆµ¢˜D¶‘7±Vœ0Jï§@ób§þ ŒÄ…ßpö)^¥ÎHi€NÆ,ϼå‡&ĸC#J ò3ó@> ; Œ‡%h1%m‰* ÀûQ q[6½rw9s®Ë~¬M²Ó÷X`2% êøc$ <>„/AÞà{§ìe‰Ð`Obs`[ÖÏrc0Õ¸XØi+)-,ÍébY>QEu¥•¦Z“캂`°“FO©£â¡µ*²”&÷ GvR|¯¿l:Å/avaÈX¯ß€‘-êà0ó¡“Àgí¡ÈÀjŒ<¯î2µ¦_¢á%2ùб1¦%¢Ã·rب¥¡G9ƒ•Ò[oAê«» qDŒÀù‚¢m—À%P#/YÎÒ“®ƒù_œ6¬IÖ@’ v =h:»¾ ZŸq“ ¹|øOìƒýp:t„¾ßF>ö¸(q¹±¢c†zìPw„Ÿñn^Ð8àªß¿/)F£T†„Tï¾à`EHó¾°ïqž5|säÝÝ7XuÐÏ5çìèßÀù»ñ2›U/añ1dkîª,5FVˆË¢‹å€®¶UTwøÕíÞ¹7Ê7Zí—œ±Š^þ1ºF‚ †Äl^bÅ•ÖPîÒðœH=WœU=ðÛN|÷ &°í„ „ý‚ºôòŒ:ðœ)쫹ØÒq \Gt]QýËà¨('ùå˜ ’ ¿Ë’dãZÓóLx7[ËVs¾Œ‰±ÔÃi—ÌœëºQñºÌ,¥x”%ÎÃev8¥†uç6p>€ ÷ë¸L#t¯¡âq/o‰ÍFFåâB»pýÆÅ.õÒ«a•Z­1§„Eêãqeˆ+NìwÞ‚è½ü¾ºû îÈ)qWsy è—YŸy½Y1  Ø[Ûëó 2,ÙÀ–^’‘:Aµ¹¾µÁÚN€Æ”j] L#S­¦̓€þ¬Uì¶6ñ–¹5öW[JŽœäÂ/Úšë4eâŠb_Hï‰ ñÝíåkV»¿òg” »¡eDf¯êç§ë%å=w®v}6Ú¥ú¢ép& ç!ä÷fÓÊ ;ÄÝþ-ñ7Ç<„×ß…ÁeÀŠ;SÜjç‘èéð  ¨Úeg|ZæÄs"gøÞ§ô>À¯<¸eï±ðï||Ýø¯ÞÞþc•C€~~½3í çö#¸ ÏøµàÈ@Sy7 OÔo’ o l1êÝÌÏïw< Íùà }¨Ÿüϼãê¯Øí+†ç©”ìÐĘä= ¢(¶àädfcéA÷å'’Œ„ãɜ䖌ߗY)·íðÓ„E†ÈÔþ`XÕ¿Žu½%=u¸VZ Ï zë~ß K]ΉûÅJ² …ðªH¾‹-³¸Ô: wµ©6^IÛÕ“Ü3 RŸ>üác+HxS2cÈ¿œ¡Ïéº|ôˆ*¸]Ü^]æŠÛB||Ù6}¾[Õt£‚.¢¶eD›#Õ‘jm p§Ñf\WÔÊ­ñ×â*`3pØSv¸AÝ ®7_ÍøN—ÞÄ{„>áÂ~VŽm]ÌÓQŹE99Y–òÌ•Úp +ÒÃ’• IÚ$]š?‹VêÝÌ„Bpœf¾¡&þ¢…¾ƒ˜=Öûí †ûÀs¸¯]å^Ó ®oÞF²»ÝcªïpàgO¸Œ¾*Ðç¹ë“J&á»ÐùÓ/ºï¢ïÞ¹ÿºÇ¾Ø€ qx¨6\ã\™"ìùWGË @?:ï¾bµïÂK%h3rã%2SñN?0îØþ L`ëîõk/î¾{çÒ¥[÷]/®ùÀh àäá%‚ꪰŽF°¶˜»ªuñªhà4ú¼.6b³š6PW3ëò++¬Ýì½#ðƒŠêk•[íêjð 1€çzåòŠè¼­™£7*Ìgà­‡Ò[Sø7àø‰à¨N¯IºÛíŽ1_á¾}}T¼¥&HQ¡±°M—VÒûÁý‡u½Ç$Çzë†À5p2áXds|•ªØÏFóß8VÛyfêG;Î-Úï§ GDi£cw[S…½·¶¾è+Gý\‚µÁ11’ˆ¹v‹bÔ‘v8û}fµÝ}°æ>®PŒ &f1n~$º6âÆÛÛÐ*Šÿý}¸ê‰¶¾/@&šà×l«©ëdÎ?äÀá¸pó¡z‘e '+ÛÒõ©0É¢3¦ÄaIIÄAFÜôd€tQJNZ~KIß+†TÐé`=o׺ÕñKU„8¼ZYèH]bŒô˜âî£[õ'OHŽVž÷À-ÕÀþ~ýîÕèÅJlµ+sãGœÜ =»¹ç™M‚k­G/‹ô‰îƒ! ehx•ª3Ï’™™'¶d‰ëJž99\ä$fÕÿ`6{Æfì§í ˜ó”˸¯ÃŠÒè¦Úà…ˆ5®ˆh*X^¿¬o—ßÅeܼüä+(†¯løQ~q&©‹¤΃c!—ÔÑè0ê<9±“ݘÀ]›–y~ Ìo°[%•eÍí£õ6ÙÎܾÃa<1Gޤ+š]žÜw½¢ä,Áy|Á»BÂá<Ì@I?3gqºAgÁQ†«R(R5„†ÅGP¬,Ú(.ØÇªoD-«J…,¢*¶©¥ºª©IQ!ùÿþûææ°M‚«x;Iô2ZÅk#á„àÄ™£ÁÓ0<±ÁáܽMw ü†Ç=,RaC ¾=Ý~\§?Þxq6â¼³uñv[äO‹ÄüO±2V¶eê܇[ Ž¿õ‡û¡ƒhÂS±z¦àö¾š`°‡Þ~ðàöµ^Cÿx¿êÈÐ11ÿþà}ÁÒ¡àpŽ:ÚûÞõ>¿ÍîòƒîRqJ©iìùÌF˜Î§˜KOÙ½‚‹ QT¥ªP*Tje‚õÍò%b4gò3‚}ÌØNÓçÜ ±8¶ä¬íúà÷.Á—œFÕ‹à H€Æ-}MCo½‰³GÊzO‹£ˆëˆæGÓð€øÔ$C’\¤ôZŸ»pÜù²‹•u’r{mQ# ÿqô-ô®äyšz…SÏÂívk³I;œÊûéì\² 乑è ‰ÈæÑûð¢CÆ¡©‚ÜÄî)ü­?£×7Úú.þ‘k±¡b~ZØéÆÉ²à„›ög¾u1ü¨¿.>|Go75Áâ¶²R[Ód¶;\ºcj¯ÜƒÑuSø>‡—àÐAÑA¾ÎËCfj.~ç›ÿœÕëS{*¼¸L¸ê=y{Ô]Å5Ã=ðø©äãúË —›:n ±å'ùgøƒnjâ\?yåçæÏ¹0 : Š®•÷t8@ieË`Iè]úeuH»kµ' mÚéPÛ\S^^Sj.Ö–KKS @>Ý2Ð4xñøÞ­¾z…‡X¾CåmôÎðng ;<òwÂŽ©ÅÝÝsû¡ÏnÚ$¸s¼©®sàæ?ÚGoà+Aß,{vøxtÕ¾–Äá‡.õ! ëj¶­³Áëz§¨]r—ˆànl.b¶q¡™ñdj²âÌ‘úP‘Iª:¾Lc«¬°U楕¤”ˆõí¦.Ü6X(KZUR¥º>LT++O¬Àê®ÔZU§-ò³Hó‹£Ë’s…ƒ 6K¿¥+¯¤ÔÒÕÚ²8­F/Wˆc"bbcM©Â: Ôä55çÙrÊ@]™P¯ÕÆ'æ¨óâÄ…a¹2Eë)i¥ª,¬#¾&1w½*mB¼Â®;ž$é45mú"“ðpL‚Ù7é`²&Äб¥úª²‚\[¹¸±577ßRX`Ém¯b¯íÐâÚá‚ZÎ?ïqá)4Eð–PÞ.^N5—”´ˆŸÖ¢à_/À`¬./an=p•³®raì ù6(GQWa”_ErÅJÐÓXð¾Ñj´CïZ‡oÁݸ—¿Ò̼%¸Žî‘`‡A¿'+Û(+µ'G_Š;@øñêëÜ´½TÎ6¡I;S~Î5”€÷ih¥@¨Î:Móç§fóøL~‘iÓÐ’>ôg7ç–—öu7 À¦¯ µE•°÷‹•Öòª#ûÖ¬u‹ö–D6™WÑ›É?”$ÐP5Ú õðfëÙ,#;ÀŘ‹}‚¹ø¿$­˜_ùgÞòýW.~~æÙ-pêôz‡ïAW|æoZ˜·7ÐU4Çè’Œ&czdúoMcž® ÐðsèŠþAomÂ>¶ ·Rž9ÆBpŠUû)YɆÔD³H•¤KI)À˜­Í¥ùŠä‘yŠi€¯BqȘºŒv&á—“‘ë)òÇÊýUÅÉQb¾Ln+IªžfÁ"37÷?| Wßã¶aÇÀàá (8æ ÕZ¦ ‘üºœ’éô21ž÷¾Çé†Ün¬N\`Æ{ÔÄx;³×=ìdÓ‹Ç5åÿ¸bü‚ø?‰ÿa endstream endobj 1039 0 obj <> endobj 1843 0 obj <>stream xœUSmLSg~o/-wJØf×mw¸Þn!ÆEçÜDœß2, ¨Õ– ¢£®Bµ-¶Dˇh¥§V>;hÕV"X•¸¡(0q¨01~P”Í ©nšùcúcï%×%»ÈŒYÞ?ç=OÎsžsr…Ao%iõjÓöµé†„š S¼1]7žŸÆFìTû> œaìј^a$„…™òd Ö¿‰¿z'¼H‚X’¶uYVv~®6#Ó(›®T$4cFԫ̬˜˜™:ÿ%"‹Õl×fdÓøà[.+[¯1'4ÈxÛe ²qºô\Ù¸íæÿa¡I†\£)}³&C«GhZ‹”H…–¢X‡ähJB“ù¹PJFUèEŒ ‚nRIæ‘c¸%œí7»ÖŸéžÂî ¾#nÅñ¬G‘Ï=ÂQQnŠoaAÃí›#ºZ3Óö–í²0K¸§<ø+f¯µ}µôªsî¢ølU²TÜZ{]Žïó”yî}î)ân,EwkÄá}X`¡ßŠ=Ì{lEk`cNb,%î>t—¯m1ú٨ēû$+àK?µàHa´HÇE cE»åÂÑü碲bkÓ)'õ?¹[ì뤮;ºÒ}ÖB M».»­ÜVÁXRø@ÄÏǦº‰àï$»ãmL²ž-ë2r(öË9@+3›/TÙªÔ0#l(}þ|ú v3½ü¢ú~àrCÏi¡B8Á3k˜¸ć$Ûù£¤¤Ì r «ÝÁn³3ýøR…jè›qír̜ՙ'U7UÖÕÕ=Úæ< Tïùì-k©u³?¿DW´´”æÞ+L/NÑ%oÕ«` õÅ¥Ô‡§Ú*kOKO8œ5?œ¦JC-¡ê¦Ü‡*ŽIØ*øGqÇỈ³U³Rlkhóñ5fœÍU•k«lçœT8»ß8ÌF CA|™_gþKbsòÏv|ùßçxu'ÔNÌ‚yU܆$-GÀLØàJiÊ<ùu{^?Ü…[ÇÏ_jlvtõPÑ"}̺MË€ŠÛÔè÷ ù.2­W»šû€ºv&S±J­%Ìø–†±Ü?&FƒøNd{±Yb?TÝQÞ^úϹ¿pè³hµ|½tCÂNó@Y¿îÌ–SÚs—‡Á³ÁŒøVqª 9Pó7vÞóØj:™Ã~Iãƒý¿5Оº¸ØZZV0Þ3ø±ÄÏÎ&ù^GùƒÙ¹`—¯¸Îä¢sŽlsha!,Ф$ªâ5œfR1°è鵫Þî.©%ÏÀMU*?zùfo;SZj5[÷À^°Ð o¯ÿ{d ál»´«ÃÛçÅâGìÊw¹’DI[êâÄü%Y)ÌÖ¤ÕšU@ÉÓ»Fzõ¿Èœ¾ÞÓz ¨pœË_ÿ³g®ãÕD‹þ»}6øÒscå/<·â•In㻼ç†\7¾ÑéËRYÍûÍÌBîŸ Ì¸ÕëúÂqCê.€-³Œ{Ì##ìkv‡Ý ›vÔ›²kÒ`(rV+ z¾ñÆÃrHÛ±r5áPc=ëqãDwB½(0)89P†Ð¿¨´V endstream endobj 753 0 obj <> endobj 1844 0 obj <>stream xœ]ŽËJQ†Ïxφn•žE‹ñÒFŒB lQ‹mô BãÈxlrQÓ4('e¼pÔE”Ц è |‰ö½ÆÑEJ»?ÿeñóqÀaǹÉäq42‹[lc6¶i'©Ñ ûrÞNxÇ;s­XWËÖå¢u±ì'•ô„T(˹LÃíÔŒÆã± ÜDâðPDr.%äaRÀY$ xZ®á¹”Ê!\†ÛûYŒ {á°¢(!A,†$9s°„Jgá*"ù¥á‘”ÇðTüc ýYB %Œd˜”ÒHÎlûl‚À Êqþʪ £çô+û|á~˜eرÚm¶LB=Të¨ÕÑïý“ḯ©¬‘JÛ ›¾ž^' â¡¥ºYi&ëÉùïκ]¥fÛ$]Ò}0Us2´ú¾ûVT‰GÕ4U3ûz€ ÆO“©îtã‘hkjG£:iõü ¥KPÚ³Äk,P÷‡÷{ÞïuÄ^ø¹·&Ïð †ü¢Ä endstream endobj 5 0 obj << /Limits [ (0.1.1) (table.2) ] /Names [ (0.1.1) 16 0 R (0.1.1.2) 20 0 R (0.1.2.1.3) 56 0 R (0.1.2.2) 47 0 R (0.10.1) 696 0 R (0.10.34.2) 714 0 R (0.10.35.13.3) 734 0 R (0.10.35.2) 717 0 R (0.10.36.2) 750 0 R (0.10.37.2) 763 0 R (0.10.38.14.3) 787 0 R (0.10.38.15.3) 810 0 R (0.10.38.16.3) 833 0 R (0.10.38.17.3) 871 0 R (0.10.38.18.3) 892 0 R (0.10.38.19.3) 911 0 R (0.10.38.2) 766 0 R (0.10.38.20.3) 974 0 R (0.10.38.21.3) 1078 0 R (0.10.38.22.3) 1105 0 R (0.10.38.23.3) 1142 0 R (0.10.38.24.3) 1154 0 R (0.10.38.25.3) 1169 0 R (0.10.38.26.3) 1189 0 R (0.10.38.27.3) 1204 0 R (0.10.38.28.3) 1223 0 R (0.10.38.29.3) 1257 0 R (0.10.38.30.3) 1273 0 R (0.10.38.31.3) 1298 0 R (0.10.38.32.3) 1311 0 R (0.10.38.33.3) 1335 0 R (0.10.38.34.3) 1354 0 R (0.10.38.35.3) 1378 0 R (0.10.38.36.3) 1391 0 R (0.10.38.37.3) 1455 0 R (0.10.38.38.3) 1500 0 R (0.10.38.39.3) 1518 0 R (0.10.38.40.3) 1537 0 R (0.10.38.41.3) 1555 0 R (0.10.38.42.3) 1571 0 R (0.11.1) 1614 0 R (0.11.39.2) 1642 0 R (0.11.40.2) 1654 0 R (0.11.41.2) 1663 0 R (0.11.42.2) 1670 0 R (0.11.43.2) 1675 0 R (0.11.44.2) 1683 0 R (0.11.45.2) 1686 0 R (0.11.46.2) 1699 0 R (0.11.47.2) 1702 0 R (0.12.1) 1706 0 R (0.12.48.2) 1708 0 R (0.12.49.2) 1720 0 R (0.12.50.2) 1723 0 R (0.12.50.43.3) 1732 0 R (0.12.50.44.3) 1735 0 R (0.12.51.2) 1739 0 R (0.12.52.2) 1758 0 R (0.12.53.2) 1768 0 R (0.12.53.45.3) 1775 0 R (0.12.54.2) 1783 0 R (0.12.55.2) 1786 0 R (0.12.56.2) 1798 0 R (0.13.1) 1802 0 R (0.14.1) 1812 0 R (0.15.1) 1826 0 R (0.2.1) 69 0 R (0.2.3.2) 78 0 R (0.2.4.2) 85 0 R (0.2.4.2.3) 88 0 R (0.2.4.3.3) 92 0 R (0.2.4.4.3) 95 0 R (0.2.4.5.3) 99 0 R (0.2.5.2) 194 0 R (0.2.5.6.3) 196 0 R (0.2.6.2) 230 0 R (0.3.1) 259 0 R (0.3.10.2) 298 0 R (0.3.7.2) 261 0 R (0.3.8.2) 278 0 R (0.3.9.2) 289 0 R (0.4.1) 300 0 R (0.4.11.2) 303 0 R (0.4.12.2) 306 0 R (0.4.13.2) 312 0 R (0.4.14.2) 322 0 R (0.4.15.2) 343 0 R (0.4.15.7.3) 375 0 R (0.4.15.8.3) 378 0 R (0.4.16.2) 381 0 R (0.5.1) 387 0 R (0.5.17.2) 390 0 R (0.5.18.2) 399 0 R (0.5.19.10.3) 420 0 R (0.5.19.2) 406 0 R (0.5.19.9.3) 410 0 R (0.5.20.2) 489 0 R (0.6.1) 497 0 R (0.6.21.2) 500 0 R (0.6.22.2) 504 0 R (0.6.23.2) 511 0 R (0.7.1) 516 0 R (0.7.24.2) 519 0 R (0.7.25.2) 528 0 R (0.7.26.2) 537 0 R (0.8.1) 563 0 R (0.8.27.2) 566 0 R (0.8.28.2) 569 0 R (0.8.29.2) 576 0 R (0.9.1) 579 0 R (0.9.30.2) 582 0 R (0.9.31.2) 587 0 R (0.9.32.2) 600 0 R (0.9.33.11.3) 688 0 R (0.9.33.12.3) 693 0 R (0.9.33.2) 684 0 R (0:1000) 940 0 R (0:1001) 941 0 R (0:1002) 942 0 R (0:1003) 943 0 R (0:1004) 944 0 R (0:1005) 945 0 R (0:1006) 946 0 R (0:1007) 947 0 R (0:1008) 953 0 R (0:1009) 954 0 R (0:101) 96 0 R (0:1010) 955 0 R (0:1011) 956 0 R (0:1012) 957 0 R (0:1013) 958 0 R (0:1014) 959 0 R (0:1015) 960 0 R (0:1016) 961 0 R (0:1017) 962 0 R (0:1018) 963 0 R (0:1019) 964 0 R (0:102) 97 0 R (0:1021) 970 0 R (0:1022) 971 0 R (0:1023) 972 0 R (0:1024) 973 0 R (0:1026) 975 0 R (0:1028) 976 0 R (0:1029) 977 0 R (0:103) 98 0 R (0:1030) 978 0 R (0:1031) 979 0 R (0:1033) 980 0 R (0:1034) 981 0 R (0:1035) 982 0 R (0:1036) 983 0 R (0:1037) 984 0 R (0:1038) 985 0 R (0:1040) 986 0 R (0:1041) 987 0 R (0:1042) 988 0 R (0:1043) 989 0 R (0:1044) 990 0 R (0:1045) 991 0 R (0:1046) 992 0 R (0:1047) 993 0 R (0:1048) 994 0 R (0:1049) 1000 0 R (0:105) 100 0 R (0:1050) 1001 0 R (0:1051) 1002 0 R (0:1052) 1003 0 R (0:1053) 1004 0 R (0:1055) 1005 0 R (0:1056) 1006 0 R (0:1057) 1007 0 R (0:1059) 1008 0 R (0:106) 106 0 R (0:1060) 1009 0 R (0:1061) 1010 0 R (0:1062) 1011 0 R (0:1063) 1012 0 R (0:1064) 1013 0 R (0:1065) 1014 0 R (0:1067) 1021 0 R (0:1068) 1022 0 R (0:1069) 1023 0 R (0:107) 107 0 R (0:1070) 1024 0 R (0:1071) 1025 0 R (0:1072) 1026 0 R (0:1073) 1027 0 R (0:1074) 1028 0 R (0:1075) 1029 0 R (0:1077) 1030 0 R (0:1078) 1031 0 R (0:1079) 1032 0 R (0:108) 75 0 R (0:1080) 1033 0 R (0:1081) 1034 0 R (0:1082) 1035 0 R (0:1083) 1036 0 R (0:1084) 1037 0 R (0:1085) 1040 0 R (0:1086) 1041 0 R (0:1088) 1047 0 R (0:1089) 1048 0 R (0:109) 108 0 R (0:1090) 1049 0 R (0:1091) 1018 0 R (0:1092) 1050 0 R (0:1093) 1051 0 R (0:1095) 1052 0 R (0:1096) 1053 0 R (0:1097) 1054 0 R (0:1098) 1055 0 R (0:1099) 1056 0 R (0:110) 109 0 R (0:1101) 1057 0 R (0:1102) 1058 0 R (0:1103) 1059 0 R (0:1104) 1060 0 R (0:1105) 1061 0 R (0:1106) 1062 0 R (0:1107) 1069 0 R (0:1108) 1070 0 R (0:1109) 1071 0 R (0:111) 110 0 R (0:1110) 1072 0 R (0:1111) 1073 0 R (0:1112) 1074 0 R (0:1113) 1075 0 R (0:1114) 1076 0 R (0:1115) 1077 0 R (0:1117) 1079 0 R (0:1119) 1080 0 R (0:112) 111 0 R (0:1120) 1081 0 R (0:1121) 1082 0 R (0:1123) 1083 0 R (0:1124) 1084 0 R (0:1125) 1085 0 R (0:1126) 1086 0 R (0:1127) 1087 0 R (0:1128) 1088 0 R (0:1129) 1089 0 R (0:113) 112 0 R (0:1131) 1090 0 R (0:1132) 1091 0 R (0:1133) 1092 0 R (0:1135) 1093 0 R (0:1136) 1094 0 R (0:1137) 1095 0 R (0:1139) 1101 0 R (0:114) 113 0 R (0:1140) 1102 0 R (0:1141) 1103 0 R (0:1142) 1104 0 R (0:1144) 1106 0 R (0:1146) 1107 0 R (0:1147) 1108 0 R (0:1148) 1109 0 R (0:1149) 1110 0 R (0:115) 114 0 R (0:1151) 1111 0 R (0:1152) 1112 0 R (0:1153) 1113 0 R (0:1154) 1114 0 R (0:1155) 1115 0 R (0:1156) 1116 0 R (0:1157) 1117 0 R (0:1158) 1124 0 R (0:1159) 1125 0 R (0:116) 115 0 R (0:1160) 1128 0 R (0:1161) 1129 0 R (0:1162) 1130 0 R (0:1163) 1131 0 R (0:1165) 1132 0 R (0:1166) 1133 0 R (0:1167) 1134 0 R (0:1168) 1135 0 R (0:117) 116 0 R (0:1170) 1143 0 R (0:1172) 1144 0 R (0:1173) 1145 0 R (0:1174) 1146 0 R (0:1176) 1121 0 R (0:1177) 1147 0 R (0:1178) 1148 0 R (0:1179) 1149 0 R (0:118) 117 0 R (0:1181) 1150 0 R (0:1182) 1151 0 R (0:1183) 1152 0 R (0:1184) 1153 0 R (0:1186) 1155 0 R (0:1188) 1156 0 R (0:1189) 1157 0 R (0:119) 120 0 R (0:1190) 1158 0 R (0:1192) 1159 0 R (0:1193) 1160 0 R (0:1194) 1161 0 R (0:1196) 1162 0 R (0:1197) 1163 0 R (0:1198) 1164 0 R (0:120) 121 0 R (0:1200) 1165 0 R (0:1201) 1166 0 R (0:1202) 1167 0 R (0:1203) 1168 0 R (0:1205) 1170 0 R (0:1207) 1171 0 R (0:1208) 1172 0 R (0:1209) 1173 0 R (0:121) 122 0 R (0:1211) 1174 0 R (0:1212) 1175 0 R (0:1213) 1176 0 R (0:1214) 1177 0 R (0:1216) 1178 0 R (0:1217) 1179 0 R (0:1218) 1180 0 R (0:1219) 1181 0 R (0:122) 123 0 R (0:1220) 1182 0 R (0:1222) 1190 0 R (0:1224) 1191 0 R (0:1225) 1192 0 R (0:1226) 1193 0 R (0:1228) 1139 0 R (0:1229) 1194 0 R (0:123) 124 0 R (0:1230) 1195 0 R (0:1231) 1196 0 R (0:1233) 1197 0 R (0:1234) 1198 0 R (0:1235) 1199 0 R (0:1237) 1200 0 R (0:1238) 1201 0 R (0:1239) 1202 0 R (0:124) 125 0 R (0:1240) 1203 0 R (0:1242) 1205 0 R (0:1244) 1206 0 R (0:1245) 1207 0 R (0:1246) 1208 0 R (0:1248) 1209 0 R (0:1249) 1210 0 R (0:125) 126 0 R (0:1250) 1211 0 R (0:1251) 1212 0 R (0:1253) 1213 0 R (0:1254) 1214 0 R (0:1255) 1215 0 R (0:1257) 1216 0 R (0:1258) 1217 0 R (0:1259) 1218 0 R (0:126) 127 0 R (0:1261) 1219 0 R (0:1262) 1220 0 R (0:1263) 1221 0 R (0:1264) 1222 0 R (0:1266) 1224 0 R (0:1268) 1225 0 R (0:1269) 1226 0 R (0:127) 128 0 R (0:1270) 1227 0 R (0:1272) 1234 0 R (0:1273) 1235 0 R (0:1274) 1236 0 R (0:1275) 1237 0 R (0:1276) 1186 0 R (0:1278) 1238 0 R (0:1279) 1239 0 R (0:128) 129 0 R (0:1280) 1240 0 R (0:1281) 1241 0 R (0:1282) 1242 0 R (0:1283) 1243 0 R (0:1284) 1244 0 R (0:1285) 1245 0 R (0:1286) 1246 0 R (0:1287) 1247 0 R (0:1288) 1248 0 R (0:1289) 1249 0 R (0:129) 130 0 R (0:1290) 1250 0 R (0:1291) 1251 0 R (0:1293) 1258 0 R (0:1295) 1259 0 R (0:1296) 1260 0 R (0:1297) 1261 0 R (0:1299) 1231 0 R (0:1300) 1262 0 R (0:1301) 1263 0 R (0:1302) 1264 0 R (0:1304) 1265 0 R (0:1305) 1266 0 R (0:1306) 1267 0 R (0:1307) 1268 0 R (0:1309) 1269 0 R (0:131) 131 0 R (0:1310) 1270 0 R (0:1311) 1271 0 R (0:1312) 1272 0 R (0:1314) 1274 0 R (0:1316) 1275 0 R (0:1317) 1276 0 R (0:1318) 1277 0 R (0:132) 132 0 R (0:1320) 1278 0 R (0:1321) 1279 0 R (0:1322) 1280 0 R (0:1323) 1281 0 R (0:1324) 1282 0 R (0:1326) 1283 0 R (0:1327) 1284 0 R (0:1328) 1285 0 R (0:1329) 1286 0 R (0:133) 133 0 R (0:1330) 1293 0 R (0:1331) 1294 0 R (0:1332) 1295 0 R (0:1333) 1296 0 R (0:1334) 1297 0 R (0:1336) 1299 0 R (0:1338) 1300 0 R (0:1339) 1301 0 R (0:134) 134 0 R (0:1340) 1302 0 R (0:1341) 1303 0 R (0:1342) 1304 0 R (0:1344) 1305 0 R (0:1345) 1306 0 R (0:1346) 1307 0 R (0:1347) 1308 0 R (0:1348) 1309 0 R (0:1349) 1310 0 R (0:1351) 1312 0 R (0:1353) 1313 0 R (0:1354) 1314 0 R (0:1355) 1315 0 R (0:1357) 1316 0 R (0:1358) 1317 0 R (0:1359) 1318 0 R (0:136) 135 0 R (0:1360) 1319 0 R (0:1362) 1326 0 R (0:1363) 1327 0 R (0:1364) 1328 0 R (0:1366) 1290 0 R (0:1367) 1329 0 R (0:1368) 1330 0 R (0:137) 136 0 R (0:1370) 1331 0 R (0:1371) 1332 0 R (0:1372) 1333 0 R (0:1373) 1334 0 R (0:1375) 1336 0 R (0:1377) 1337 0 R (0:1378) 1338 0 R (0:1379) 1339 0 R (0:138) 137 0 R (0:1381) 1340 0 R (0:1382) 1341 0 R (0:1383) 1342 0 R (0:1384) 1343 0 R (0:1386) 1344 0 R (0:1387) 1345 0 R (0:1388) 1346 0 R (0:139) 138 0 R (0:1390) 1347 0 R (0:1391) 1348 0 R (0:1392) 1349 0 R (0:1394) 1350 0 R (0:1395) 1351 0 R (0:1396) 1352 0 R (0:1397) 1353 0 R (0:1399) 1355 0 R (0:140) 139 0 R (0:1401) 1356 0 R (0:1402) 1357 0 R (0:1403) 1358 0 R (0:1405) 1359 0 R (0:1406) 1360 0 R (0:1407) 1361 0 R (0:1408) 1362 0 R (0:1410) 1363 0 R (0:1411) 1364 0 R (0:1412) 1365 0 R (0:1414) 1371 0 R (0:1415) 1372 0 R (0:1416) 1373 0 R (0:1417) 1323 0 R (0:1419) 1374 0 R (0:142) 140 0 R (0:1420) 1375 0 R (0:1421) 1376 0 R (0:1422) 1377 0 R (0:1424) 1379 0 R (0:1426) 1380 0 R (0:1427) 1381 0 R (0:1428) 1382 0 R (0:143) 141 0 R (0:1430) 1383 0 R (0:1431) 1384 0 R (0:1432) 1385 0 R (0:1433) 1386 0 R (0:1435) 1387 0 R (0:1436) 1388 0 R (0:1437) 1389 0 R (0:1438) 1390 0 R (0:144) 142 0 R (0:1440) 1392 0 R (0:1442) 1393 0 R (0:1443) 1394 0 R (0:1444) 1395 0 R (0:1446) 1396 0 R (0:1447) 1397 0 R (0:1448) 1398 0 R (0:1449) 1399 0 R (0:145) 143 0 R (0:1451) 1400 0 R (0:1452) 1401 0 R (0:1453) 1402 0 R (0:1454) 1403 0 R (0:1455) 1404 0 R (0:1456) 1405 0 R (0:1457) 1406 0 R (0:1458) 1407 0 R (0:1459) 1408 0 R (0:1460) 1409 0 R (0:1461) 1415 0 R (0:1462) 1416 0 R (0:1463) 1417 0 R (0:1464) 1418 0 R (0:1465) 1419 0 R (0:1466) 1420 0 R (0:1467) 1421 0 R (0:1468) 1422 0 R (0:1469) 1423 0 R (0:147) 144 0 R (0:1470) 1424 0 R (0:1471) 1425 0 R (0:1472) 1426 0 R (0:1473) 1427 0 R (0:1474) 1428 0 R (0:1475) 1429 0 R (0:1476) 1430 0 R (0:1477) 1431 0 R (0:1478) 1432 0 R (0:1479) 1433 0 R (0:148) 145 0 R (0:1480) 1434 0 R (0:1481) 1435 0 R (0:1482) 1436 0 R (0:1483) 1437 0 R (0:1484) 1438 0 R (0:1485) 1439 0 R (0:1486) 1440 0 R (0:1487) 1441 0 R (0:1488) 1442 0 R (0:1489) 1443 0 R (0:149) 146 0 R (0:1490) 1444 0 R (0:1491) 1445 0 R (0:1492) 1446 0 R (0:1493) 1447 0 R (0:1494) 1448 0 R (0:1495) 1449 0 R (0:1496) 1450 0 R (0:1498) 1451 0 R (0:1499) 1452 0 R (0:1500) 1453 0 R (0:1501) 1454 0 R (0:1503) 1456 0 R (0:1505) 1457 0 R (0:1506) 1458 0 R (0:1507) 1459 0 R (0:1509) 1466 0 R (0:151) 147 0 R (0:1510) 1467 0 R (0:1511) 1468 0 R (0:1512) 1469 0 R (0:1514) 1470 0 R (0:1515) 1471 0 R (0:1516) 1472 0 R (0:1517) 1473 0 R (0:1518) 1474 0 R (0:1519) 1475 0 R (0:152) 148 0 R (0:1520) 1476 0 R (0:1521) 1477 0 R (0:1522) 1478 0 R (0:1523) 1479 0 R (0:1524) 1480 0 R (0:1525) 1481 0 R (0:1526) 1482 0 R (0:1527) 1483 0 R (0:1528) 1484 0 R (0:1529) 1485 0 R (0:153) 149 0 R (0:1530) 1486 0 R (0:1531) 1487 0 R (0:1532) 1488 0 R (0:1533) 1489 0 R (0:1534) 1490 0 R (0:1535) 1491 0 R (0:1536) 1492 0 R (0:1537) 1493 0 R (0:1538) 1494 0 R (0:1539) 1495 0 R (0:1540) 1496 0 R (0:1541) 1497 0 R (0:1542) 1498 0 R (0:1543) 1499 0 R (0:1545) 1501 0 R (0:1547) 1502 0 R (0:1548) 1503 0 R (0:1549) 1504 0 R (0:155) 150 0 R (0:1551) 1505 0 R (0:1552) 1506 0 R (0:1553) 1507 0 R (0:1554) 1508 0 R (0:1556) 1463 0 R (0:1557) 1515 0 R (0:1558) 1516 0 R (0:1559) 1517 0 R (0:156) 151 0 R (0:1561) 1519 0 R (0:1563) 1520 0 R (0:1564) 1521 0 R (0:1565) 1522 0 R (0:1567) 1523 0 R (0:1568) 1524 0 R (0:1569) 1525 0 R (0:157) 152 0 R (0:1570) 1526 0 R (0:1572) 1527 0 R (0:1573) 1528 0 R (0:1574) 1529 0 R (0:1576) 1530 0 R (0:1577) 1531 0 R (0:1578) 1532 0 R (0:1580) 1533 0 R (0:1581) 1534 0 R (0:1582) 1535 0 R (0:1583) 1536 0 R (0:1585) 1538 0 R (0:1587) 1539 0 R (0:1588) 1540 0 R (0:1589) 1541 0 R (0:159) 153 0 R (0:1591) 1542 0 R (0:1592) 1543 0 R (0:1593) 1544 0 R (0:1594) 1545 0 R (0:1596) 1551 0 R (0:1597) 1552 0 R (0:1598) 1553 0 R (0:1599) 1554 0 R (0:160) 154 0 R (0:1601) 1556 0 R (0:1603) 1557 0 R (0:1604) 1558 0 R (0:1605) 1559 0 R (0:1607) 1560 0 R (0:1608) 1561 0 R (0:1609) 1562 0 R (0:161) 155 0 R (0:1610) 1563 0 R (0:1611) 1564 0 R (0:1612) 1565 0 R (0:1613) 1566 0 R (0:1615) 1567 0 R (0:1616) 1568 0 R (0:1617) 1569 0 R (0:1618) 1570 0 R (0:1620) 1572 0 R (0:1622) 1573 0 R (0:1623) 1574 0 R (0:1624) 1575 0 R (0:1625) 1576 0 R (0:1627) 1577 0 R (0:1628) 1578 0 R (0:1629) 1579 0 R (0:163) 162 0 R (0:1630) 1580 0 R (0:1631) 1581 0 R (0:1632) 1582 0 R (0:1633) 1583 0 R (0:1635) 1584 0 R (0:1636) 1585 0 R (0:1637) 1586 0 R (0:1638) 1593 0 R (0:1639) 1594 0 R (0:164) 163 0 R (0:1640) 1595 0 R (0:1641) 1596 0 R (0:1642) 1597 0 R (0:1643) 1598 0 R (0:1644) 1599 0 R (0:1645) 1600 0 R (0:1646) 1601 0 R (0:1647) 1602 0 R (0:1648) 1603 0 R (0:1649) 1604 0 R (0:165) 164 0 R (0:1650) 1590 0 R (0:1652) 1610 0 R (0:1653) 1611 0 R (0:1654) 1612 0 R (0:1655) 1613 0 R (0:1658) 1615 0 R (0:1659) 1616 0 R (0:166) 165 0 R (0:1660) 1617 0 R (0:1661) 1618 0 R (0:1662) 1619 0 R (0:1663) 1620 0 R (0:1664) 1621 0 R (0:1665) 1622 0 R (0:1666) 1623 0 R (0:1667) 1624 0 R (0:1668) 1625 0 R (0:1669) 1626 0 R (0:1670) 1627 0 R (0:1671) 1628 0 R (0:1672) 1634 0 R (0:1673) 1635 0 R (0:1674) 1636 0 R (0:1675) 1637 0 R (0:1676) 1638 0 R (0:1677) 1639 0 R (0:1678) 1640 0 R (0:1679) 1641 0 R (0:168) 166 0 R (0:1681) 1643 0 R (0:1682) 1644 0 R (0:1683) 1650 0 R (0:1684) 1651 0 R (0:1685) 1652 0 R (0:1686) 1653 0 R (0:1688) 1655 0 R (0:1689) 1656 0 R (0:169) 167 0 R (0:1691) 1664 0 R (0:1692) 1665 0 R (0:1693) 1666 0 R (0:1694) 1667 0 R (0:1695) 1668 0 R (0:1696) 1669 0 R (0:1698) 1671 0 R (0:1699) 1672 0 R (0:170) 168 0 R (0:1700) 1673 0 R (0:1701) 1674 0 R (0:1703) 1676 0 R (0:1704) 1660 0 R (0:1705) 1682 0 R (0:1707) 1684 0 R (0:1708) 1685 0 R (0:171) 169 0 R (0:1710) 1687 0 R (0:1711) 1688 0 R (0:1712) 1689 0 R (0:1713) 1690 0 R (0:1714) 1691 0 R (0:1715) 1692 0 R (0:1716) 1693 0 R (0:1718) 1700 0 R (0:1719) 1701 0 R (0:1721) 1703 0 R (0:1722) 1704 0 R (0:1723) 1705 0 R (0:1725) 1707 0 R (0:1727) 1709 0 R (0:1728) 1710 0 R (0:1729) 1711 0 R (0:173) 170 0 R (0:1730) 1712 0 R (0:1731) 1713 0 R (0:1732) 1719 0 R (0:1734) 1721 0 R (0:1735) 1722 0 R (0:1737) 1724 0 R (0:1738) 1725 0 R (0:1739) 1726 0 R (0:174) 171 0 R (0:1741) 1733 0 R (0:1742) 1734 0 R (0:1744) 1736 0 R (0:1745) 1737 0 R (0:1746) 1738 0 R (0:1748) 1740 0 R (0:1749) 1741 0 R (0:175) 172 0 R (0:1750) 1742 0 R (0:1751) 1743 0 R (0:1752) 1744 0 R (0:1753) 1745 0 R (0:1754) 1746 0 R (0:1755) 1747 0 R (0:1756) 1753 0 R (0:1757) 1754 0 R (0:1758) 1755 0 R (0:1759) 1756 0 R (0:1760) 1757 0 R (0:1762) 1759 0 R (0:1763) 1760 0 R (0:1764) 1761 0 R (0:1766) 1769 0 R (0:1767) 1770 0 R (0:1768) 1771 0 R (0:1769) 1772 0 R (0:177) 173 0 R (0:1770) 1773 0 R (0:1771) 1774 0 R (0:1773) 1776 0 R (0:1774) 1777 0 R (0:1775) 1778 0 R (0:1776) 1779 0 R (0:1777) 1780 0 R (0:1778) 1781 0 R (0:1779) 1782 0 R (0:178) 174 0 R (0:1782) 1784 0 R (0:1783) 1785 0 R (0:1785) 1787 0 R (0:1786) 1788 0 R (0:1787) 1794 0 R (0:1788) 1795 0 R (0:1789) 1796 0 R (0:179) 175 0 R (0:1790) 1797 0 R (0:1792) 1799 0 R (0:1793) 1800 0 R (0:1794) 1801 0 R (0:1796) 1803 0 R (0:1797) 1804 0 R (0:1798) 1805 0 R (0:1799) 1806 0 R (0:180) 176 0 R (0:1800) 1807 0 R (0:1801) 1808 0 R (0:1802) 1809 0 R (0:1803) 1810 0 R (0:1804) 1811 0 R (0:1806) 1813 0 R (0:1807) 1814 0 R (0:1808) 1815 0 R (0:1809) 1816 0 R (0:1810) 1817 0 R (0:1811) 1818 0 R (0:1812) 1819 0 R (0:1813) 1820 0 R (0:1815) 1827 0 R (0:1816) 1828 0 R (0:1817) 1829 0 R (0:1818) 1830 0 R (0:1819) 1831 0 R (0:182) 177 0 R (0:1820) 1832 0 R (0:183) 178 0 R (0:184) 179 0 R (0:185) 180 0 R (0:187) 181 0 R (0:188) 182 0 R (0:189) 183 0 R (0:190) 184 0 R (0:192) 185 0 R (0:193) 186 0 R (0:194) 187 0 R (0:195) 188 0 R (0:197) 189 0 R (0:198) 190 0 R (0:199) 191 0 R (0:200) 192 0 R (0:201) 193 0 R (0:203) 195 0 R (0:205) 197 0 R (0:206) 198 0 R (0:207) 199 0 R (0:208) 200 0 R (0:209) 201 0 R (0:210) 202 0 R (0:211) 203 0 R (0:212) 159 0 R (0:27) 15 0 R (0:275) 210 0 R (0:276) 211 0 R (0:278) 212 0 R (0:279) 213 0 R (0:280) 214 0 R (0:281) 215 0 R (0:282) 216 0 R (0:284) 217 0 R (0:285) 218 0 R (0:286) 219 0 R (0:287) 220 0 R (0:289) 221 0 R (0:29) 17 0 R (0:290) 224 0 R (0:291) 225 0 R (0:292) 226 0 R (0:293) 227 0 R (0:294) 228 0 R (0:295) 229 0 R (0:298) 231 0 R (0:299) 232 0 R (0:30) 18 0 R (0:300) 238 0 R (0:301) 239 0 R (0:303) 240 0 R (0:304) 241 0 R (0:305) 242 0 R (0:307) 243 0 R (0:308) 244 0 R (0:309) 245 0 R (0:31) 19 0 R (0:311) 246 0 R (0:312) 247 0 R (0:313) 248 0 R (0:315) 249 0 R (0:316) 250 0 R (0:317) 251 0 R (0:319) 252 0 R (0:320) 253 0 R (0:321) 254 0 R (0:323) 255 0 R (0:324) 256 0 R (0:325) 257 0 R (0:326) 258 0 R (0:328) 260 0 R (0:330) 262 0 R (0:331) 263 0 R (0:332) 264 0 R (0:334) 265 0 R (0:335) 266 0 R (0:336) 267 0 R (0:338) 268 0 R (0:339) 269 0 R (0:34) 21 0 R (0:340) 270 0 R (0:341) 271 0 R (0:343) 279 0 R (0:344) 280 0 R (0:345) 283 0 R (0:346) 284 0 R (0:347) 285 0 R (0:348) 288 0 R (0:35) 22 0 R (0:350) 290 0 R (0:351) 291 0 R (0:352) 292 0 R (0:353) 293 0 R (0:354) 294 0 R (0:355) 295 0 R (0:356) 296 0 R (0:357) 297 0 R (0:36) 23 0 R (0:363) 301 0 R (0:364) 302 0 R (0:365) 304 0 R (0:366) 305 0 R (0:367) 307 0 R (0:368) 308 0 R (0:369) 309 0 R (0:37) 24 0 R (0:370) 310 0 R (0:371) 311 0 R (0:373) 313 0 R (0:374) 314 0 R (0:375) 320 0 R (0:376) 321 0 R (0:378) 323 0 R (0:38) 25 0 R (0:380) 324 0 R (0:381) 325 0 R (0:382) 326 0 R (0:384) 327 0 R (0:385) 328 0 R (0:386) 329 0 R (0:388) 330 0 R (0:389) 331 0 R (0:39) 26 0 R (0:390) 332 0 R (0:392) 333 0 R (0:393) 334 0 R (0:394) 335 0 R (0:396) 336 0 R (0:397) 337 0 R (0:398) 338 0 R (0:40) 27 0 R (0:400) 339 0 R (0:401) 340 0 R (0:402) 341 0 R (0:403) 342 0 R (0:405) 344 0 R (0:406) 345 0 R (0:407) 346 0 R (0:408) 347 0 R (0:409) 348 0 R (0:41) 28 0 R (0:410) 349 0 R (0:411) 350 0 R (0:412) 351 0 R (0:413) 352 0 R (0:414) 353 0 R (0:415) 354 0 R (0:416) 355 0 R (0:417) 356 0 R (0:418) 357 0 R (0:419) 358 0 R (0:42) 29 0 R (0:420) 359 0 R (0:421) 360 0 R (0:422) 361 0 R (0:423) 362 0 R (0:424) 369 0 R (0:425) 370 0 R (0:426) 371 0 R (0:427) 372 0 R (0:428) 373 0 R (0:429) 374 0 R (0:43) 30 0 R (0:432) 376 0 R (0:433) 377 0 R (0:436) 379 0 R (0:437) 380 0 R (0:439) 382 0 R (0:44) 31 0 R (0:440) 383 0 R (0:441) 384 0 R (0:442) 385 0 R (0:447) 388 0 R (0:448) 389 0 R (0:449) 391 0 R (0:45) 32 0 R (0:450) 392 0 R (0:451) 400 0 R (0:452) 401 0 R (0:453) 402 0 R (0:454) 403 0 R (0:455) 404 0 R (0:456) 405 0 R (0:458) 407 0 R (0:459) 408 0 R (0:46) 33 0 R (0:460) 409 0 R (0:462) 411 0 R (0:463) 412 0 R (0:464) 413 0 R (0:465) 414 0 R (0:466) 415 0 R (0:467) 416 0 R (0:468) 417 0 R (0:469) 418 0 R (0:47) 34 0 R (0:470) 419 0 R (0:472) 421 0 R (0:473) 422 0 R (0:474) 423 0 R (0:475) 430 0 R (0:476) 431 0 R (0:477) 432 0 R (0:478) 396 0 R (0:48) 35 0 R (0:480) 433 0 R (0:481) 434 0 R (0:482) 435 0 R (0:483) 436 0 R (0:484) 437 0 R (0:485) 438 0 R (0:486) 439 0 R (0:487) 440 0 R (0:488) 441 0 R (0:489) 442 0 R (0:49) 43 0 R (0:490) 443 0 R (0:491) 444 0 R (0:492) 445 0 R (0:493) 446 0 R (0:494) 447 0 R (0:495) 448 0 R (0:496) 449 0 R (0:497) 450 0 R (0:498) 451 0 R (0:499) 452 0 R (0:50) 44 0 R (0:500) 453 0 R (0:501) 454 0 R (0:502) 455 0 R (0:503) 456 0 R (0:504) 457 0 R (0:505) 458 0 R (0:506) 459 0 R (0:507) 460 0 R (0:508) 461 0 R (0:509) 462 0 R (0:51) 45 0 R (0:510) 463 0 R (0:511) 464 0 R (0:512) 465 0 R (0:513) 466 0 R (0:514) 467 0 R (0:515) 468 0 R (0:516) 469 0 R (0:517) 470 0 R (0:518) 471 0 R (0:519) 472 0 R (0:52) 46 0 R (0:520) 473 0 R (0:521) 474 0 R (0:522) 475 0 R (0:523) 476 0 R (0:524) 477 0 R (0:525) 478 0 R (0:526) 479 0 R (0:527) 480 0 R (0:528) 481 0 R (0:529) 482 0 R (0:531) 490 0 R (0:533) 491 0 R (0:534) 492 0 R (0:535) 493 0 R (0:537) 427 0 R (0:538) 494 0 R (0:539) 495 0 R (0:54) 48 0 R (0:544) 498 0 R (0:545) 499 0 R (0:546) 501 0 R (0:547) 502 0 R (0:548) 503 0 R (0:549) 505 0 R (0:55) 49 0 R (0:550) 506 0 R (0:551) 507 0 R (0:552) 508 0 R (0:553) 509 0 R (0:554) 510 0 R (0:556) 512 0 R (0:557) 513 0 R (0:558) 514 0 R (0:56) 50 0 R (0:563) 517 0 R (0:564) 518 0 R (0:565) 520 0 R (0:566) 521 0 R (0:567) 522 0 R (0:568) 529 0 R (0:569) 530 0 R (0:57) 51 0 R (0:570) 531 0 R (0:571) 532 0 R (0:572) 533 0 R (0:573) 534 0 R (0:574) 535 0 R (0:575) 536 0 R (0:577) 538 0 R (0:578) 539 0 R (0:579) 540 0 R (0:58) 52 0 R (0:580) 541 0 R (0:581) 542 0 R (0:582) 543 0 R (0:583) 544 0 R (0:584) 545 0 R (0:585) 546 0 R (0:586) 547 0 R (0:587) 548 0 R (0:588) 549 0 R (0:589) 550 0 R (0:59) 53 0 R (0:590) 551 0 R (0:591) 552 0 R (0:592) 553 0 R (0:593) 554 0 R (0:594) 561 0 R (0:599) 564 0 R (0:60) 54 0 R (0:600) 565 0 R (0:601) 567 0 R (0:602) 568 0 R (0:603) 570 0 R (0:604) 571 0 R (0:605) 572 0 R (0:606) 573 0 R (0:607) 574 0 R (0:608) 575 0 R (0:61) 55 0 R (0:610) 577 0 R (0:615) 580 0 R (0:616) 581 0 R (0:617) 583 0 R (0:618) 584 0 R (0:619) 585 0 R (0:620) 586 0 R (0:621) 588 0 R (0:622) 589 0 R (0:623) 590 0 R (0:624) 591 0 R (0:625) 592 0 R (0:626) 593 0 R (0:628) 601 0 R (0:629) 602 0 R (0:63) 57 0 R (0:630) 558 0 R (0:632) 603 0 R (0:633) 604 0 R (0:634) 607 0 R (0:635) 608 0 R (0:636) 609 0 R (0:637) 610 0 R (0:638) 611 0 R (0:639) 612 0 R (0:64) 58 0 R (0:640) 613 0 R (0:641) 614 0 R (0:642) 615 0 R (0:643) 616 0 R (0:644) 617 0 R (0:645) 618 0 R (0:646) 619 0 R (0:647) 620 0 R (0:648) 621 0 R (0:649) 622 0 R (0:650) 623 0 R (0:651) 624 0 R (0:652) 625 0 R (0:653) 626 0 R (0:654) 627 0 R (0:655) 628 0 R (0:656) 629 0 R (0:657) 630 0 R (0:658) 631 0 R (0:659) 632 0 R (0:66) 59 0 R (0:660) 633 0 R (0:661) 634 0 R (0:662) 635 0 R (0:663) 636 0 R (0:664) 642 0 R (0:665) 643 0 R (0:666) 597 0 R (0:668) 644 0 R (0:669) 645 0 R (0:67) 60 0 R (0:670) 646 0 R (0:671) 647 0 R (0:672) 648 0 R (0:673) 649 0 R (0:674) 650 0 R (0:675) 651 0 R (0:676) 652 0 R (0:677) 653 0 R (0:678) 654 0 R (0:679) 655 0 R (0:68) 61 0 R (0:680) 656 0 R (0:681) 657 0 R (0:682) 658 0 R (0:683) 659 0 R (0:684) 660 0 R (0:685) 661 0 R (0:686) 662 0 R (0:687) 663 0 R (0:688) 664 0 R (0:689) 665 0 R (0:690) 666 0 R (0:691) 667 0 R (0:692) 668 0 R (0:693) 669 0 R (0:694) 670 0 R (0:695) 671 0 R (0:696) 672 0 R (0:697) 673 0 R (0:698) 674 0 R (0:699) 675 0 R (0:70) 62 0 R (0:700) 676 0 R (0:701) 677 0 R (0:702) 678 0 R (0:704) 685 0 R (0:705) 686 0 R (0:706) 687 0 R (0:708) 689 0 R (0:709) 690 0 R (0:71) 63 0 R (0:710) 691 0 R (0:711) 692 0 R (0:713) 694 0 R (0:714) 695 0 R (0:717) 697 0 R (0:718) 704 0 R (0:719) 705 0 R (0:72) 64 0 R (0:720) 706 0 R (0:721) 707 0 R (0:722) 708 0 R (0:723) 709 0 R (0:724) 710 0 R (0:725) 711 0 R (0:726) 712 0 R (0:727) 713 0 R (0:729) 715 0 R (0:730) 716 0 R (0:732) 718 0 R (0:733) 719 0 R (0:734) 720 0 R (0:735) 721 0 R (0:736) 722 0 R (0:737) 729 0 R (0:738) 701 0 R (0:739) 730 0 R (0:74) 65 0 R (0:740) 731 0 R (0:741) 732 0 R (0:742) 733 0 R (0:744) 735 0 R (0:745) 736 0 R (0:747) 737 0 R (0:748) 738 0 R (0:749) 739 0 R (0:75) 66 0 R (0:751) 740 0 R (0:752) 741 0 R (0:753) 742 0 R (0:755) 743 0 R (0:756) 744 0 R (0:757) 745 0 R (0:758) 746 0 R (0:759) 747 0 R (0:76) 67 0 R (0:760) 748 0 R (0:761) 749 0 R (0:763) 751 0 R (0:764) 760 0 R (0:765) 726 0 R (0:766) 761 0 R (0:767) 762 0 R (0:769) 764 0 R (0:77) 68 0 R (0:770) 765 0 R (0:772) 767 0 R (0:773) 768 0 R (0:774) 769 0 R (0:775) 770 0 R (0:776) 771 0 R (0:777) 772 0 R (0:778) 773 0 R (0:779) 774 0 R (0:780) 775 0 R (0:781) 776 0 R (0:782) 777 0 R (0:783) 778 0 R (0:784) 779 0 R (0:785) 780 0 R (0:786) 781 0 R (0:787) 782 0 R (0:788) 783 0 R (0:789) 784 0 R (0:79) 70 0 R (0:790) 785 0 R (0:791) 786 0 R (0:793) 788 0 R (0:795) 789 0 R (0:796) 790 0 R (0:797) 791 0 R (0:799) 792 0 R (0:80) 71 0 R (0:800) 793 0 R (0:801) 794 0 R (0:802) 795 0 R (0:804) 757 0 R (0:805) 802 0 R (0:806) 803 0 R (0:807) 804 0 R (0:808) 805 0 R (0:810) 806 0 R (0:811) 807 0 R (0:812) 808 0 R (0:813) 809 0 R (0:815) 811 0 R (0:817) 812 0 R (0:818) 813 0 R (0:819) 814 0 R (0:821) 815 0 R (0:822) 816 0 R (0:823) 817 0 R (0:824) 818 0 R (0:825) 819 0 R (0:827) 820 0 R (0:828) 821 0 R (0:829) 822 0 R (0:83) 79 0 R (0:831) 823 0 R (0:832) 824 0 R (0:833) 825 0 R (0:834) 826 0 R (0:836) 834 0 R (0:838) 835 0 R (0:839) 836 0 R (0:84) 80 0 R (0:840) 837 0 R (0:841) 799 0 R (0:842) 838 0 R (0:844) 839 0 R (0:845) 840 0 R (0:846) 841 0 R (0:847) 842 0 R (0:849) 843 0 R (0:85) 81 0 R (0:850) 844 0 R (0:851) 845 0 R (0:852) 846 0 R (0:853) 847 0 R (0:854) 848 0 R (0:86) 82 0 R (0:87) 83 0 R (0:88) 84 0 R (0:91) 86 0 R (0:911) 850 0 R (0:912) 851 0 R (0:913) 852 0 R (0:914) 853 0 R (0:915) 859 0 R (0:916) 830 0 R (0:917) 860 0 R (0:918) 861 0 R (0:919) 862 0 R (0:92) 87 0 R (0:920) 863 0 R (0:921) 864 0 R (0:922) 865 0 R (0:923) 866 0 R (0:925) 867 0 R (0:926) 868 0 R (0:927) 869 0 R (0:928) 870 0 R (0:930) 872 0 R (0:932) 873 0 R (0:933) 874 0 R (0:934) 875 0 R (0:936) 876 0 R (0:937) 877 0 R (0:938) 878 0 R (0:939) 879 0 R (0:94) 89 0 R (0:941) 885 0 R (0:942) 886 0 R (0:943) 887 0 R (0:945) 888 0 R (0:946) 889 0 R (0:947) 890 0 R (0:948) 891 0 R (0:95) 90 0 R (0:950) 893 0 R (0:952) 894 0 R (0:953) 895 0 R (0:954) 896 0 R (0:956) 897 0 R (0:957) 898 0 R (0:958) 899 0 R (0:959) 900 0 R (0:96) 91 0 R (0:961) 901 0 R (0:962) 902 0 R (0:963) 903 0 R (0:965) 904 0 R (0:966) 905 0 R (0:967) 906 0 R (0:969) 907 0 R (0:970) 908 0 R (0:971) 909 0 R (0:972) 910 0 R (0:974) 912 0 R (0:976) 913 0 R (0:977) 914 0 R (0:978) 915 0 R (0:98) 93 0 R (0:980) 916 0 R (0:981) 917 0 R (0:982) 918 0 R (0:983) 919 0 R (0:984) 920 0 R (0:985) 926 0 R (0:987) 927 0 R (0:988) 928 0 R (0:989) 929 0 R (0:99) 94 0 R (0:990) 930 0 R (0:991) 931 0 R (0:992) 932 0 R (0:993) 933 0 R (0:994) 934 0 R (0:995) 935 0 R (0:996) 936 0 R (0:997) 937 0 R (0:998) 938 0 R (0:999) 939 0 R (0:AVEN) 386 0 R (0:CAVERN) 299 0 R (0:DIFFPOS) 496 0 R (0:EXTEND) 515 0 R (0:INDEX) 8 0 R (0:SORTERR) 562 0 R (0:SURVEXPORT) 578 0 R (Doc-Start) 7 0 R (page.1) 6 0 R (page.10) 365 0 R (page.11) 395 0 R (page.12) 426 0 R (page.13) 485 0 R (page.14) 525 0 R (page.15) 557 0 R (page.16) 596 0 R (page.17) 639 0 R (page.18) 681 0 R (page.19) 700 0 R (page.2) 40 0 R (page.20) 725 0 R (page.21) 756 0 R (page.22) 798 0 R (page.23) 829 0 R (page.24) 856 0 R (page.25) 882 0 R (page.26) 923 0 R (page.27) 950 0 R (page.28) 967 0 R (page.29) 997 0 R (page.3) 74 0 R (page.30) 1017 0 R (page.31) 1044 0 R (page.32) 1065 0 R (page.33) 1098 0 R (page.34) 1120 0 R (page.35) 1138 0 R (page.36) 1185 0 R (page.37) 1230 0 R (page.38) 1254 0 R (page.39) 1289 0 R (page.4) 103 0 R (page.40) 1322 0 R (page.41) 1368 0 R (page.42) 1412 0 R (page.43) 1462 0 R (page.44) 1511 0 R (page.45) 1548 0 R (page.46) 1589 0 R (page.47) 1607 0 R (page.48) 1631 0 R (page.49) 1647 0 R (page.5) 158 0 R (page.50) 1659 0 R (page.51) 1679 0 R (page.52) 1696 0 R (page.53) 1716 0 R (page.54) 1729 0 R (page.55) 1750 0 R (page.56) 1764 0 R (page.57) 1791 0 R (page.58) 1823 0 R (page.6) 206 0 R (page.7) 235 0 R (page.8) 274 0 R (page.9) 317 0 R (table.1) 209 0 R (table.2) 849 0 R] >> endobj 1855 0 obj <>stream GPL Ghostscript 10.00.0 2023-02-03T13:58:17+13:00 2023-02-03T13:58:17+13:00 LaTeX with hyperref endstream endobj 2 0 obj <>endobj xref 0 1856 0000000000 65535 f 0000199362 00000 n 0000386545 00000 n 0000198819 00000 n 0000190199 00000 n 0000358050 00000 n 0000199514 00000 n 0000199576 00000 n 0000199637 00000 n 0000000182 00000 n 0000004031 00000 n 0000307610 00000 n 0000313641 00000 n 0000311678 00000 n 0000345885 00000 n 0000199698 00000 n 0000199760 00000 n 0000199822 00000 n 0000199884 00000 n 0000199942 00000 n 0000200004 00000 n 0000200066 00000 n 0000200128 00000 n 0000200190 00000 n 0000200251 00000 n 0000200313 00000 n 0000200375 00000 n 0000200437 00000 n 0000200499 00000 n 0000200559 00000 n 0000200620 00000 n 0000200682 00000 n 0000200744 00000 n 0000200803 00000 n 0000200864 00000 n 0000200925 00000 n 0000310773 00000 n 0000340572 00000 n 0000200985 00000 n 0000190341 00000 n 0000201039 00000 n 0000004052 00000 n 0000007573 00000 n 0000201103 00000 n 0000201166 00000 n 0000201229 00000 n 0000201292 00000 n 0000201355 00000 n 0000201417 00000 n 0000201480 00000 n 0000201543 00000 n 0000201606 00000 n 0000201669 00000 n 0000201732 00000 n 0000201794 00000 n 0000201857 00000 n 0000201920 00000 n 0000201982 00000 n 0000202045 00000 n 0000202108 00000 n 0000202171 00000 n 0000202234 00000 n 0000202297 00000 n 0000202359 00000 n 0000202422 00000 n 0000202484 00000 n 0000202547 00000 n 0000202610 00000 n 0000202673 00000 n 0000202736 00000 n 0000202798 00000 n 0000202861 00000 n 0000202924 00000 n 0000190485 00000 n 0000202978 00000 n 0000203042 00000 n 0000007594 00000 n 0000011321 00000 n 0000203105 00000 n 0000203168 00000 n 0000203231 00000 n 0000203294 00000 n 0000203357 00000 n 0000203420 00000 n 0000203483 00000 n 0000203546 00000 n 0000203608 00000 n 0000203671 00000 n 0000203734 00000 n 0000203797 00000 n 0000203860 00000 n 0000203923 00000 n 0000203986 00000 n 0000204048 00000 n 0000204111 00000 n 0000204174 00000 n 0000204237 00000 n 0000204300 00000 n 0000204360 00000 n 0000204423 00000 n 0000204486 00000 n 0000204550 00000 n 0000190630 00000 n 0000204605 00000 n 0000011342 00000 n 0000014499 00000 n 0000204671 00000 n 0000204736 00000 n 0000204801 00000 n 0000204866 00000 n 0000204931 00000 n 0000204996 00000 n 0000205061 00000 n 0000205125 00000 n 0000205190 00000 n 0000205255 00000 n 0000205320 00000 n 0000205385 00000 n 0000310039 00000 n 0000333660 00000 n 0000205446 00000 n 0000205508 00000 n 0000205570 00000 n 0000205632 00000 n 0000205694 00000 n 0000205759 00000 n 0000205824 00000 n 0000205889 00000 n 0000205954 00000 n 0000206019 00000 n 0000206084 00000 n 0000206149 00000 n 0000206214 00000 n 0000206279 00000 n 0000206344 00000 n 0000206409 00000 n 0000206474 00000 n 0000206539 00000 n 0000206604 00000 n 0000206669 00000 n 0000206734 00000 n 0000206799 00000 n 0000206864 00000 n 0000206929 00000 n 0000206994 00000 n 0000207059 00000 n 0000207124 00000 n 0000207189 00000 n 0000207254 00000 n 0000207319 00000 n 0000207384 00000 n 0000207449 00000 n 0000207514 00000 n 0000207576 00000 n 0000207641 00000 n 0000207704 00000 n 0000207769 00000 n 0000190777 00000 n 0000207826 00000 n 0000207892 00000 n 0000014521 00000 n 0000017631 00000 n 0000207957 00000 n 0000208022 00000 n 0000208087 00000 n 0000208151 00000 n 0000208215 00000 n 0000208280 00000 n 0000208345 00000 n 0000208410 00000 n 0000208475 00000 n 0000208540 00000 n 0000208605 00000 n 0000208670 00000 n 0000208735 00000 n 0000208800 00000 n 0000208865 00000 n 0000208930 00000 n 0000208995 00000 n 0000209060 00000 n 0000209125 00000 n 0000209190 00000 n 0000209255 00000 n 0000209320 00000 n 0000209385 00000 n 0000209450 00000 n 0000209515 00000 n 0000209579 00000 n 0000209644 00000 n 0000209709 00000 n 0000209774 00000 n 0000209839 00000 n 0000209904 00000 n 0000209969 00000 n 0000210034 00000 n 0000210099 00000 n 0000210164 00000 n 0000210229 00000 n 0000210293 00000 n 0000210358 00000 n 0000210423 00000 n 0000210488 00000 n 0000210552 00000 n 0000210617 00000 n 0000210681 00000 n 0000190924 00000 n 0000210749 00000 n 0000017653 00000 n 0000021009 00000 n 0000210815 00000 n 0000210880 00000 n 0000210945 00000 n 0000211007 00000 n 0000211072 00000 n 0000211137 00000 n 0000211202 00000 n 0000211267 00000 n 0000211332 00000 n 0000211397 00000 n 0000211462 00000 n 0000211526 00000 n 0000211590 00000 n 0000309517 00000 n 0000328362 00000 n 0000211655 00000 n 0000211720 00000 n 0000211785 00000 n 0000211850 00000 n 0000211915 00000 n 0000211980 00000 n 0000212045 00000 n 0000212110 00000 n 0000212175 00000 n 0000212240 00000 n 0000191079 00000 n 0000212308 00000 n 0000021031 00000 n 0000023752 00000 n 0000212374 00000 n 0000212439 00000 n 0000212504 00000 n 0000212569 00000 n 0000212634 00000 n 0000212699 00000 n 0000212764 00000 n 0000212826 00000 n 0000212891 00000 n 0000212956 00000 n 0000213021 00000 n 0000213086 00000 n 0000213150 00000 n 0000213215 00000 n 0000213280 00000 n 0000213345 00000 n 0000213410 00000 n 0000213475 00000 n 0000213540 00000 n 0000213604 00000 n 0000213669 00000 n 0000213734 00000 n 0000213799 00000 n 0000213864 00000 n 0000213926 00000 n 0000213991 00000 n 0000214055 00000 n 0000214119 00000 n 0000214184 00000 n 0000214249 00000 n 0000214314 00000 n 0000214379 00000 n 0000214444 00000 n 0000214509 00000 n 0000214573 00000 n 0000191226 00000 n 0000214628 00000 n 0000214694 00000 n 0000023774 00000 n 0000027132 00000 n 0000214759 00000 n 0000214824 00000 n 0000214889 00000 n 0000308924 00000 n 0000322845 00000 n 0000214954 00000 n 0000215019 00000 n 0000215084 00000 n 0000308338 00000 n 0000319422 00000 n 0000215149 00000 n 0000215214 00000 n 0000215279 00000 n 0000215344 00000 n 0000215409 00000 n 0000215474 00000 n 0000215537 00000 n 0000215602 00000 n 0000215667 00000 n 0000215732 00000 n 0000215797 00000 n 0000215860 00000 n 0000215925 00000 n 0000215986 00000 n 0000216051 00000 n 0000216116 00000 n 0000216178 00000 n 0000216243 00000 n 0000216308 00000 n 0000216373 00000 n 0000216437 00000 n 0000216502 00000 n 0000216567 00000 n 0000216632 00000 n 0000216697 00000 n 0000216762 00000 n 0000216827 00000 n 0000216892 00000 n 0000191373 00000 n 0000216999 00000 n 0000027154 00000 n 0000030677 00000 n 0000217065 00000 n 0000217130 00000 n 0000217195 00000 n 0000217259 00000 n 0000217324 00000 n 0000217389 00000 n 0000217452 00000 n 0000217517 00000 n 0000217581 00000 n 0000217646 00000 n 0000217711 00000 n 0000217776 00000 n 0000217841 00000 n 0000217906 00000 n 0000217971 00000 n 0000218036 00000 n 0000218101 00000 n 0000218166 00000 n 0000218231 00000 n 0000218296 00000 n 0000218361 00000 n 0000218426 00000 n 0000218491 00000 n 0000218555 00000 n 0000218620 00000 n 0000218685 00000 n 0000218750 00000 n 0000218812 00000 n 0000218877 00000 n 0000218942 00000 n 0000219005 00000 n 0000219070 00000 n 0000219135 00000 n 0000219200 00000 n 0000219265 00000 n 0000219330 00000 n 0000219395 00000 n 0000219460 00000 n 0000219525 00000 n 0000219589 00000 n 0000219654 00000 n 0000219718 00000 n 0000219783 00000 n 0000219848 00000 n 0000191520 00000 n 0000219929 00000 n 0000219995 00000 n 0000030699 00000 n 0000034489 00000 n 0000220060 00000 n 0000220125 00000 n 0000220190 00000 n 0000220255 00000 n 0000220320 00000 n 0000220385 00000 n 0000220450 00000 n 0000220515 00000 n 0000220580 00000 n 0000220645 00000 n 0000220710 00000 n 0000220775 00000 n 0000220839 00000 n 0000220904 00000 n 0000220969 00000 n 0000221034 00000 n 0000221099 00000 n 0000221163 00000 n 0000221228 00000 n 0000221293 00000 n 0000221358 00000 n 0000221423 00000 n 0000221485 00000 n 0000221550 00000 n 0000221615 00000 n 0000191667 00000 n 0000221696 00000 n 0000221762 00000 n 0000034511 00000 n 0000037936 00000 n 0000221827 00000 n 0000221892 00000 n 0000221957 00000 n 0000222022 00000 n 0000222084 00000 n 0000222149 00000 n 0000222214 00000 n 0000222279 00000 n 0000222344 00000 n 0000222409 00000 n 0000222474 00000 n 0000222539 00000 n 0000222604 00000 n 0000222669 00000 n 0000222734 00000 n 0000222799 00000 n 0000222864 00000 n 0000222929 00000 n 0000222994 00000 n 0000223059 00000 n 0000223124 00000 n 0000223189 00000 n 0000223254 00000 n 0000223319 00000 n 0000223384 00000 n 0000223447 00000 n 0000191814 00000 n 0000223515 00000 n 0000223581 00000 n 0000037958 00000 n 0000041981 00000 n 0000223646 00000 n 0000223711 00000 n 0000223773 00000 n 0000223838 00000 n 0000223903 00000 n 0000223968 00000 n 0000224033 00000 n 0000224097 00000 n 0000224161 00000 n 0000224226 00000 n 0000224291 00000 n 0000224356 00000 n 0000224421 00000 n 0000224486 00000 n 0000224551 00000 n 0000224616 00000 n 0000224681 00000 n 0000224746 00000 n 0000224810 00000 n 0000224875 00000 n 0000224940 00000 n 0000225005 00000 n 0000225069 00000 n 0000225134 00000 n 0000225198 00000 n 0000225263 00000 n 0000225328 00000 n 0000225393 00000 n 0000225458 00000 n 0000225523 00000 n 0000225588 00000 n 0000225653 00000 n 0000225718 00000 n 0000225783 00000 n 0000225844 00000 n 0000225909 00000 n 0000225974 00000 n 0000226039 00000 n 0000226104 00000 n 0000226169 00000 n 0000226234 00000 n 0000226299 00000 n 0000226364 00000 n 0000226429 00000 n 0000226494 00000 n 0000226559 00000 n 0000226624 00000 n 0000226689 00000 n 0000226754 00000 n 0000226819 00000 n 0000226884 00000 n 0000226949 00000 n 0000227014 00000 n 0000227079 00000 n 0000191961 00000 n 0000227162 00000 n 0000227228 00000 n 0000042003 00000 n 0000044168 00000 n 0000227293 00000 n 0000227358 00000 n 0000227423 00000 n 0000227488 00000 n 0000227550 00000 n 0000227615 00000 n 0000227677 00000 n 0000227742 00000 n 0000227807 00000 n 0000227872 00000 n 0000227937 00000 n 0000228002 00000 n 0000228064 00000 n 0000228129 00000 n 0000228194 00000 n 0000228259 00000 n 0000228324 00000 n 0000228389 00000 n 0000228454 00000 n 0000228519 00000 n 0000228584 00000 n 0000228649 00000 n 0000228714 00000 n 0000228779 00000 n 0000228844 00000 n 0000228909 00000 n 0000228973 00000 n 0000229038 00000 n 0000229100 00000 n 0000229165 00000 n 0000229230 00000 n 0000229292 00000 n 0000229356 00000 n 0000229419 00000 n 0000229483 00000 n 0000192108 00000 n 0000229564 00000 n 0000044190 00000 n 0000048428 00000 n 0000229630 00000 n 0000229695 00000 n 0000229760 00000 n 0000229825 00000 n 0000229890 00000 n 0000229955 00000 n 0000230020 00000 n 0000230085 00000 n 0000230150 00000 n 0000230214 00000 n 0000230279 00000 n 0000230344 00000 n 0000230409 00000 n 0000230474 00000 n 0000230539 00000 n 0000230604 00000 n 0000230669 00000 n 0000230734 00000 n 0000230799 00000 n 0000230864 00000 n 0000230929 00000 n 0000230994 00000 n 0000231059 00000 n 0000231124 00000 n 0000231189 00000 n 0000231253 00000 n 0000231318 00000 n 0000231383 00000 n 0000192255 00000 n 0000231477 00000 n 0000231543 00000 n 0000048450 00000 n 0000050956 00000 n 0000231608 00000 n 0000231673 00000 n 0000231738 00000 n 0000231803 00000 n 0000231868 00000 n 0000231933 00000 n 0000231995 00000 n 0000232060 00000 n 0000232125 00000 n 0000232189 00000 n 0000232254 00000 n 0000232319 00000 n 0000232384 00000 n 0000232449 00000 n 0000232514 00000 n 0000232579 00000 n 0000232644 00000 n 0000232709 00000 n 0000232774 00000 n 0000232839 00000 n 0000232904 00000 n 0000232969 00000 n 0000233031 00000 n 0000233096 00000 n 0000233161 00000 n 0000233226 00000 n 0000233291 00000 n 0000233356 00000 n 0000233421 00000 n 0000233486 00000 n 0000233551 00000 n 0000233616 00000 n 0000233681 00000 n 0000233746 00000 n 0000192402 00000 n 0000233827 00000 n 0000233893 00000 n 0000050978 00000 n 0000052728 00000 n 0000233958 00000 n 0000234023 00000 n 0000234085 00000 n 0000234147 00000 n 0000234212 00000 n 0000307348 00000 n 0000313026 00000 n 0000234277 00000 n 0000234341 00000 n 0000234405 00000 n 0000234470 00000 n 0000234535 00000 n 0000234600 00000 n 0000234665 00000 n 0000234730 00000 n 0000234795 00000 n 0000234859 00000 n 0000234923 00000 n 0000234988 00000 n 0000235053 00000 n 0000235118 00000 n 0000235183 00000 n 0000235248 00000 n 0000235313 00000 n 0000235378 00000 n 0000235443 00000 n 0000235508 00000 n 0000235573 00000 n 0000235638 00000 n 0000235703 00000 n 0000235768 00000 n 0000235833 00000 n 0000235898 00000 n 0000235963 00000 n 0000236025 00000 n 0000236087 00000 n 0000236152 00000 n 0000236217 00000 n 0000192549 00000 n 0000236298 00000 n 0000052750 00000 n 0000054298 00000 n 0000236364 00000 n 0000236429 00000 n 0000236494 00000 n 0000236559 00000 n 0000236624 00000 n 0000236689 00000 n 0000236754 00000 n 0000236819 00000 n 0000236884 00000 n 0000236949 00000 n 0000237014 00000 n 0000237079 00000 n 0000237144 00000 n 0000237209 00000 n 0000237274 00000 n 0000237339 00000 n 0000237404 00000 n 0000237469 00000 n 0000237534 00000 n 0000237599 00000 n 0000237664 00000 n 0000237729 00000 n 0000237794 00000 n 0000237859 00000 n 0000237924 00000 n 0000237989 00000 n 0000238054 00000 n 0000238119 00000 n 0000238184 00000 n 0000238249 00000 n 0000238314 00000 n 0000238379 00000 n 0000238444 00000 n 0000238509 00000 n 0000238574 00000 n 0000238639 00000 n 0000238704 00000 n 0000238769 00000 n 0000192696 00000 n 0000238826 00000 n 0000054320 00000 n 0000057853 00000 n 0000238892 00000 n 0000238957 00000 n 0000239019 00000 n 0000239084 00000 n 0000239149 00000 n 0000239214 00000 n 0000239279 00000 n 0000239344 00000 n 0000239409 00000 n 0000239474 00000 n 0000239538 00000 n 0000239603 00000 n 0000239666 00000 n 0000239731 00000 n 0000239796 00000 n 0000192843 00000 n 0000239864 00000 n 0000239930 00000 n 0000057875 00000 n 0000062718 00000 n 0000239995 00000 n 0000240060 00000 n 0000240125 00000 n 0000240190 00000 n 0000240255 00000 n 0000240320 00000 n 0000240385 00000 n 0000240450 00000 n 0000240515 00000 n 0000240580 00000 n 0000240644 00000 n 0000240709 00000 n 0000240774 00000 n 0000240838 00000 n 0000240903 00000 n 0000240967 00000 n 0000241031 00000 n 0000241096 00000 n 0000241161 00000 n 0000241226 00000 n 0000192990 00000 n 0000241307 00000 n 0000241373 00000 n 0000062740 00000 n 0000066110 00000 n 0000241438 00000 n 0000241503 00000 n 0000241568 00000 n 0000241630 00000 n 0000241695 00000 n 0000241760 00000 n 0000241825 00000 n 0000241889 00000 n 0000241954 00000 n 0000242019 00000 n 0000242084 00000 n 0000242149 00000 n 0000242214 00000 n 0000242279 00000 n 0000242344 00000 n 0000242409 00000 n 0000242474 00000 n 0000242539 00000 n 0000242604 00000 n 0000242669 00000 n 0000242734 00000 n 0000242799 00000 n 0000242864 00000 n 0000312863 00000 n 0000357349 00000 n 0000242929 00000 n 0000193137 00000 n 0000243010 00000 n 0000243076 00000 n 0000066132 00000 n 0000068743 00000 n 0000243141 00000 n 0000243206 00000 n 0000243271 00000 n 0000243336 00000 n 0000243401 00000 n 0000243466 00000 n 0000243531 00000 n 0000243596 00000 n 0000243661 00000 n 0000243726 00000 n 0000243791 00000 n 0000243856 00000 n 0000243921 00000 n 0000243986 00000 n 0000244051 00000 n 0000244116 00000 n 0000244181 00000 n 0000244246 00000 n 0000244311 00000 n 0000244375 00000 n 0000244440 00000 n 0000244505 00000 n 0000244570 00000 n 0000244635 00000 n 0000244700 00000 n 0000244764 00000 n 0000244829 00000 n 0000244894 00000 n 0000244959 00000 n 0000245024 00000 n 0000245089 00000 n 0000245154 00000 n 0000245219 00000 n 0000245284 00000 n 0000245349 00000 n 0000245412 00000 n 0000245477 00000 n 0000193284 00000 n 0000245571 00000 n 0000245637 00000 n 0000068765 00000 n 0000071360 00000 n 0000245702 00000 n 0000245767 00000 n 0000245832 00000 n 0000245897 00000 n 0000245962 00000 n 0000246024 00000 n 0000246088 00000 n 0000246153 00000 n 0000246218 00000 n 0000246283 00000 n 0000246348 00000 n 0000246412 00000 n 0000246477 00000 n 0000246542 00000 n 0000246607 00000 n 0000246672 00000 n 0000246735 00000 n 0000246800 00000 n 0000246865 00000 n 0000246930 00000 n 0000246995 00000 n 0000247060 00000 n 0000247125 00000 n 0000247190 00000 n 0000247255 00000 n 0000247320 00000 n 0000193431 00000 n 0000247401 00000 n 0000247467 00000 n 0000071382 00000 n 0000074105 00000 n 0000247532 00000 n 0000247593 00000 n 0000247658 00000 n 0000247720 00000 n 0000247785 00000 n 0000247850 00000 n 0000247915 00000 n 0000247980 00000 n 0000248045 00000 n 0000248110 00000 n 0000248175 00000 n 0000248240 00000 n 0000248305 00000 n 0000248369 00000 n 0000248434 00000 n 0000248498 00000 n 0000248563 00000 n 0000248628 00000 n 0000248693 00000 n 0000248758 00000 n 0000248823 00000 n 0000248888 00000 n 0000193586 00000 n 0000248969 00000 n 0000074127 00000 n 0000077538 00000 n 0000249035 00000 n 0000249100 00000 n 0000249165 00000 n 0000249230 00000 n 0000249295 00000 n 0000249360 00000 n 0000249425 00000 n 0000249489 00000 n 0000249554 00000 n 0000249617 00000 n 0000249682 00000 n 0000249747 00000 n 0000249812 00000 n 0000249877 00000 n 0000249942 00000 n 0000250007 00000 n 0000250072 00000 n 0000250137 00000 n 0000250202 00000 n 0000250267 00000 n 0000250332 00000 n 0000250397 00000 n 0000193733 00000 n 0000250465 00000 n 0000077560 00000 n 0000079705 00000 n 0000250531 00000 n 0000250596 00000 n 0000250661 00000 n 0000250726 00000 n 0000250788 00000 n 0000250850 00000 n 0000250915 00000 n 0000250980 00000 n 0000251045 00000 n 0000251110 00000 n 0000251175 00000 n 0000251240 00000 n 0000251305 00000 n 0000251370 00000 n 0000251435 00000 n 0000251500 00000 n 0000251562 00000 n 0000251627 00000 n 0000251692 00000 n 0000251757 00000 n 0000251822 00000 n 0000251886 00000 n 0000251951 00000 n 0000252016 00000 n 0000252081 00000 n 0000252146 00000 n 0000252211 00000 n 0000252276 00000 n 0000252341 00000 n 0000252406 00000 n 0000252471 00000 n 0000252536 00000 n 0000252601 00000 n 0000252666 00000 n 0000252731 00000 n 0000252796 00000 n 0000252861 00000 n 0000193880 00000 n 0000252942 00000 n 0000079727 00000 n 0000083538 00000 n 0000253008 00000 n 0000253073 00000 n 0000253138 00000 n 0000253203 00000 n 0000253268 00000 n 0000253333 00000 n 0000253397 00000 n 0000253462 00000 n 0000253527 00000 n 0000253592 00000 n 0000253657 00000 n 0000253719 00000 n 0000253784 00000 n 0000253849 00000 n 0000253914 00000 n 0000253978 00000 n 0000254043 00000 n 0000254108 00000 n 0000254173 00000 n 0000254236 00000 n 0000254301 00000 n 0000254366 00000 n 0000254431 00000 n 0000194027 00000 n 0000254501 00000 n 0000083560 00000 n 0000088408 00000 n 0000254567 00000 n 0000254632 00000 n 0000254697 00000 n 0000254762 00000 n 0000254825 00000 n 0000254890 00000 n 0000254955 00000 n 0000255020 00000 n 0000255085 00000 n 0000255150 00000 n 0000255215 00000 n 0000255280 00000 n 0000255345 00000 n 0000194174 00000 n 0000255402 00000 n 0000088430 00000 n 0000091864 00000 n 0000255468 00000 n 0000255533 00000 n 0000255598 00000 n 0000255663 00000 n 0000255728 00000 n 0000255793 00000 n 0000255858 00000 n 0000255923 00000 n 0000255988 00000 n 0000256053 00000 n 0000256118 00000 n 0000256183 00000 n 0000256248 00000 n 0000256313 00000 n 0000256378 00000 n 0000256443 00000 n 0000256508 00000 n 0000256573 00000 n 0000256638 00000 n 0000256703 00000 n 0000256767 00000 n 0000256832 00000 n 0000256897 00000 n 0000256962 00000 n 0000257027 00000 n 0000257092 00000 n 0000194321 00000 n 0000257173 00000 n 0000091886 00000 n 0000095419 00000 n 0000257239 00000 n 0000257305 00000 n 0000257371 00000 n 0000257437 00000 n 0000257503 00000 n 0000257569 00000 n 0000257635 00000 n 0000257700 00000 n 0000257766 00000 n 0000257832 00000 n 0000257898 00000 n 0000257963 00000 n 0000258028 00000 n 0000258093 00000 n 0000258159 00000 n 0000258225 00000 n 0000194469 00000 n 0000258296 00000 n 0000258364 00000 n 0000095441 00000 n 0000099400 00000 n 0000258431 00000 n 0000258498 00000 n 0000258565 00000 n 0000258631 00000 n 0000258695 00000 n 0000258762 00000 n 0000258829 00000 n 0000258894 00000 n 0000258961 00000 n 0000259024 00000 n 0000259091 00000 n 0000259158 00000 n 0000259225 00000 n 0000259289 00000 n 0000259356 00000 n 0000259423 00000 n 0000259490 00000 n 0000312632 00000 n 0000355797 00000 n 0000259557 00000 n 0000259624 00000 n 0000259689 00000 n 0000194619 00000 n 0000259786 00000 n 0000099423 00000 n 0000102513 00000 n 0000259854 00000 n 0000259921 00000 n 0000259988 00000 n 0000260054 00000 n 0000260121 00000 n 0000260187 00000 n 0000260254 00000 n 0000260321 00000 n 0000260388 00000 n 0000260455 00000 n 0000260522 00000 n 0000260589 00000 n 0000260656 00000 n 0000260721 00000 n 0000260788 00000 n 0000260855 00000 n 0000260922 00000 n 0000194769 00000 n 0000260980 00000 n 0000261048 00000 n 0000102536 00000 n 0000105753 00000 n 0000261115 00000 n 0000261182 00000 n 0000261249 00000 n 0000261316 00000 n 0000261383 00000 n 0000261450 00000 n 0000261517 00000 n 0000261584 00000 n 0000261648 00000 n 0000261714 00000 n 0000261781 00000 n 0000261846 00000 n 0000261910 00000 n 0000261977 00000 n 0000262044 00000 n 0000262111 00000 n 0000262178 00000 n 0000262245 00000 n 0000262312 00000 n 0000262379 00000 n 0000262446 00000 n 0000262513 00000 n 0000262580 00000 n 0000262647 00000 n 0000262714 00000 n 0000262781 00000 n 0000262848 00000 n 0000262915 00000 n 0000194919 00000 n 0000263010 00000 n 0000105776 00000 n 0000110329 00000 n 0000263078 00000 n 0000263145 00000 n 0000263212 00000 n 0000263278 00000 n 0000263345 00000 n 0000263412 00000 n 0000263479 00000 n 0000263546 00000 n 0000263613 00000 n 0000263680 00000 n 0000263747 00000 n 0000263814 00000 n 0000263881 00000 n 0000263948 00000 n 0000264015 00000 n 0000264079 00000 n 0000264146 00000 n 0000264213 00000 n 0000195069 00000 n 0000264282 00000 n 0000264350 00000 n 0000110352 00000 n 0000115605 00000 n 0000264417 00000 n 0000264484 00000 n 0000311414 00000 n 0000345269 00000 n 0000264551 00000 n 0000264618 00000 n 0000264684 00000 n 0000264751 00000 n 0000264818 00000 n 0000264885 00000 n 0000264952 00000 n 0000265019 00000 n 0000265086 00000 n 0000195219 00000 n 0000265172 00000 n 0000265240 00000 n 0000115628 00000 n 0000117486 00000 n 0000265307 00000 n 0000265373 00000 n 0000265440 00000 n 0000265504 00000 n 0000265571 00000 n 0000265638 00000 n 0000265703 00000 n 0000265770 00000 n 0000265837 00000 n 0000265904 00000 n 0000265971 00000 n 0000266035 00000 n 0000266102 00000 n 0000266169 00000 n 0000266236 00000 n 0000266303 00000 n 0000266370 00000 n 0000266437 00000 n 0000266501 00000 n 0000266568 00000 n 0000266632 00000 n 0000266699 00000 n 0000266765 00000 n 0000266829 00000 n 0000266896 00000 n 0000266963 00000 n 0000267030 00000 n 0000267097 00000 n 0000267164 00000 n 0000267231 00000 n 0000267298 00000 n 0000267365 00000 n 0000267432 00000 n 0000267499 00000 n 0000267566 00000 n 0000267630 00000 n 0000267697 00000 n 0000267764 00000 n 0000267831 00000 n 0000267898 00000 n 0000267965 00000 n 0000268032 00000 n 0000195369 00000 n 0000268114 00000 n 0000268182 00000 n 0000117509 00000 n 0000119552 00000 n 0000268249 00000 n 0000268315 00000 n 0000268382 00000 n 0000268449 00000 n 0000268516 00000 n 0000268583 00000 n 0000268648 00000 n 0000268715 00000 n 0000268782 00000 n 0000268849 00000 n 0000268916 00000 n 0000268983 00000 n 0000269050 00000 n 0000269117 00000 n 0000269184 00000 n 0000269251 00000 n 0000269318 00000 n 0000269385 00000 n 0000269451 00000 n 0000269518 00000 n 0000269585 00000 n 0000269652 00000 n 0000269719 00000 n 0000269786 00000 n 0000269853 00000 n 0000269920 00000 n 0000269987 00000 n 0000270054 00000 n 0000270121 00000 n 0000270188 00000 n 0000270254 00000 n 0000270321 00000 n 0000270387 00000 n 0000270454 00000 n 0000270521 00000 n 0000270588 00000 n 0000270655 00000 n 0000270722 00000 n 0000270789 00000 n 0000270856 00000 n 0000195519 00000 n 0000270938 00000 n 0000271006 00000 n 0000119575 00000 n 0000124224 00000 n 0000271073 00000 n 0000271140 00000 n 0000271207 00000 n 0000271273 00000 n 0000271340 00000 n 0000271407 00000 n 0000271474 00000 n 0000271541 00000 n 0000271605 00000 n 0000271672 00000 n 0000271739 00000 n 0000271806 00000 n 0000271873 00000 n 0000271940 00000 n 0000272007 00000 n 0000272074 00000 n 0000272141 00000 n 0000272208 00000 n 0000272275 00000 n 0000195669 00000 n 0000272383 00000 n 0000124247 00000 n 0000127483 00000 n 0000272451 00000 n 0000272517 00000 n 0000272584 00000 n 0000272648 00000 n 0000272715 00000 n 0000272782 00000 n 0000272847 00000 n 0000272914 00000 n 0000272981 00000 n 0000273048 00000 n 0000273115 00000 n 0000273182 00000 n 0000273249 00000 n 0000273316 00000 n 0000273383 00000 n 0000273450 00000 n 0000273517 00000 n 0000273584 00000 n 0000273651 00000 n 0000273718 00000 n 0000273785 00000 n 0000273852 00000 n 0000273919 00000 n 0000273985 00000 n 0000274052 00000 n 0000274115 00000 n 0000274179 00000 n 0000274246 00000 n 0000274313 00000 n 0000274380 00000 n 0000274447 00000 n 0000195819 00000 n 0000274529 00000 n 0000274597 00000 n 0000127506 00000 n 0000130984 00000 n 0000274664 00000 n 0000274731 00000 n 0000274797 00000 n 0000274864 00000 n 0000274931 00000 n 0000274998 00000 n 0000275065 00000 n 0000275132 00000 n 0000275196 00000 n 0000275263 00000 n 0000275330 00000 n 0000275394 00000 n 0000275461 00000 n 0000275527 00000 n 0000275594 00000 n 0000275661 00000 n 0000275728 00000 n 0000275795 00000 n 0000275862 00000 n 0000275929 00000 n 0000275996 00000 n 0000276063 00000 n 0000276130 00000 n 0000276197 00000 n 0000276264 00000 n 0000276331 00000 n 0000276398 00000 n 0000276465 00000 n 0000195969 00000 n 0000276547 00000 n 0000276615 00000 n 0000131007 00000 n 0000132408 00000 n 0000276682 00000 n 0000276749 00000 n 0000276816 00000 n 0000276882 00000 n 0000276949 00000 n 0000277016 00000 n 0000277081 00000 n 0000277148 00000 n 0000277214 00000 n 0000277281 00000 n 0000277348 00000 n 0000277415 00000 n 0000277482 00000 n 0000277549 00000 n 0000277616 00000 n 0000277683 00000 n 0000277750 00000 n 0000277817 00000 n 0000277884 00000 n 0000277951 00000 n 0000278018 00000 n 0000278085 00000 n 0000278152 00000 n 0000278219 00000 n 0000278286 00000 n 0000278353 00000 n 0000278420 00000 n 0000278487 00000 n 0000278554 00000 n 0000278621 00000 n 0000278687 00000 n 0000278754 00000 n 0000278821 00000 n 0000278886 00000 n 0000278953 00000 n 0000279020 00000 n 0000279087 00000 n 0000279154 00000 n 0000279221 00000 n 0000279288 00000 n 0000279355 00000 n 0000196119 00000 n 0000279437 00000 n 0000132431 00000 n 0000135041 00000 n 0000279505 00000 n 0000279572 00000 n 0000279639 00000 n 0000279705 00000 n 0000279772 00000 n 0000279839 00000 n 0000279906 00000 n 0000279972 00000 n 0000280039 00000 n 0000280106 00000 n 0000280173 00000 n 0000280240 00000 n 0000280307 00000 n 0000280374 00000 n 0000280441 00000 n 0000280508 00000 n 0000280575 00000 n 0000280642 00000 n 0000280709 00000 n 0000280776 00000 n 0000280843 00000 n 0000280910 00000 n 0000280977 00000 n 0000281044 00000 n 0000281111 00000 n 0000281178 00000 n 0000281245 00000 n 0000281312 00000 n 0000281379 00000 n 0000281446 00000 n 0000281513 00000 n 0000281579 00000 n 0000281646 00000 n 0000281713 00000 n 0000281780 00000 n 0000281847 00000 n 0000281914 00000 n 0000281981 00000 n 0000282048 00000 n 0000282115 00000 n 0000196269 00000 n 0000282197 00000 n 0000135064 00000 n 0000138225 00000 n 0000282265 00000 n 0000282332 00000 n 0000282398 00000 n 0000282464 00000 n 0000282531 00000 n 0000282598 00000 n 0000282665 00000 n 0000282732 00000 n 0000282799 00000 n 0000282864 00000 n 0000282931 00000 n 0000282998 00000 n 0000283065 00000 n 0000283132 00000 n 0000283199 00000 n 0000283266 00000 n 0000283333 00000 n 0000283400 00000 n 0000283467 00000 n 0000283534 00000 n 0000283601 00000 n 0000283665 00000 n 0000283729 00000 n 0000283796 00000 n 0000283863 00000 n 0000283930 00000 n 0000283996 00000 n 0000284063 00000 n 0000284127 00000 n 0000284194 00000 n 0000284261 00000 n 0000284328 00000 n 0000284395 00000 n 0000284461 00000 n 0000284527 00000 n 0000284594 00000 n 0000284660 00000 n 0000284727 00000 n 0000284794 00000 n 0000284861 00000 n 0000284928 00000 n 0000284994 00000 n 0000285061 00000 n 0000285127 00000 n 0000285194 00000 n 0000285261 00000 n 0000196419 00000 n 0000285330 00000 n 0000285398 00000 n 0000138248 00000 n 0000141216 00000 n 0000285465 00000 n 0000285532 00000 n 0000285599 00000 n 0000285665 00000 n 0000285732 00000 n 0000285798 00000 n 0000285865 00000 n 0000285931 00000 n 0000285998 00000 n 0000286065 00000 n 0000286132 00000 n 0000286199 00000 n 0000286266 00000 n 0000286332 00000 n 0000286399 00000 n 0000286466 00000 n 0000286533 00000 n 0000286600 00000 n 0000286667 00000 n 0000286732 00000 n 0000286799 00000 n 0000286866 00000 n 0000286933 00000 n 0000287000 00000 n 0000287067 00000 n 0000287134 00000 n 0000287201 00000 n 0000287268 00000 n 0000287335 00000 n 0000287400 00000 n 0000287467 00000 n 0000287534 00000 n 0000287601 00000 n 0000287668 00000 n 0000287734 00000 n 0000287801 00000 n 0000287867 00000 n 0000287934 00000 n 0000288001 00000 n 0000288068 00000 n 0000288135 00000 n 0000288201 00000 n 0000288268 00000 n 0000288335 00000 n 0000196569 00000 n 0000288417 00000 n 0000288485 00000 n 0000141239 00000 n 0000143775 00000 n 0000288552 00000 n 0000288619 00000 n 0000288686 00000 n 0000288753 00000 n 0000288819 00000 n 0000288886 00000 n 0000288952 00000 n 0000289019 00000 n 0000289086 00000 n 0000289152 00000 n 0000289219 00000 n 0000289285 00000 n 0000289352 00000 n 0000289419 00000 n 0000289485 00000 n 0000289552 00000 n 0000289619 00000 n 0000289686 00000 n 0000289753 00000 n 0000289820 00000 n 0000289887 00000 n 0000289954 00000 n 0000290021 00000 n 0000290087 00000 n 0000290154 00000 n 0000290221 00000 n 0000290288 00000 n 0000290355 00000 n 0000290422 00000 n 0000290487 00000 n 0000290554 00000 n 0000290621 00000 n 0000196719 00000 n 0000290703 00000 n 0000143798 00000 n 0000147207 00000 n 0000290771 00000 n 0000290838 00000 n 0000290905 00000 n 0000290971 00000 n 0000291037 00000 n 0000291104 00000 n 0000291171 00000 n 0000291238 00000 n 0000291305 00000 n 0000291372 00000 n 0000291439 00000 n 0000291506 00000 n 0000291573 00000 n 0000291640 00000 n 0000291707 00000 n 0000291774 00000 n 0000291841 00000 n 0000291905 00000 n 0000291972 00000 n 0000292039 00000 n 0000292106 00000 n 0000292170 00000 n 0000292237 00000 n 0000292304 00000 n 0000292371 00000 n 0000292437 00000 n 0000292504 00000 n 0000292571 00000 n 0000292637 00000 n 0000292703 00000 n 0000292770 00000 n 0000292837 00000 n 0000292904 00000 n 0000292971 00000 n 0000293038 00000 n 0000293105 00000 n 0000293172 00000 n 0000196869 00000 n 0000293254 00000 n 0000293322 00000 n 0000147230 00000 n 0000151676 00000 n 0000293389 00000 n 0000293456 00000 n 0000293522 00000 n 0000293589 00000 n 0000293656 00000 n 0000293723 00000 n 0000293787 00000 n 0000293854 00000 n 0000293921 00000 n 0000293988 00000 n 0000294055 00000 n 0000294122 00000 n 0000294189 00000 n 0000197019 00000 n 0000294260 00000 n 0000151699 00000 n 0000155208 00000 n 0000294328 00000 n 0000294395 00000 n 0000294462 00000 n 0000294527 00000 n 0000294591 00000 n 0000294658 00000 n 0000294725 00000 n 0000294792 00000 n 0000294859 00000 n 0000294926 00000 n 0000294993 00000 n 0000295060 00000 n 0000295127 00000 n 0000295194 00000 n 0000295261 00000 n 0000295328 00000 n 0000295395 00000 n 0000295461 00000 n 0000295527 00000 n 0000295594 00000 n 0000197169 00000 n 0000295676 00000 n 0000155231 00000 n 0000158135 00000 n 0000295744 00000 n 0000295811 00000 n 0000295878 00000 n 0000295945 00000 n 0000296012 00000 n 0000296079 00000 n 0000296146 00000 n 0000296213 00000 n 0000296280 00000 n 0000296344 00000 n 0000296411 00000 n 0000296478 00000 n 0000197319 00000 n 0000296560 00000 n 0000158158 00000 n 0000160824 00000 n 0000296628 00000 n 0000296695 00000 n 0000296762 00000 n 0000296829 00000 n 0000296896 00000 n 0000296963 00000 n 0000297030 00000 n 0000297096 00000 n 0000197469 00000 n 0000297165 00000 n 0000297233 00000 n 0000160847 00000 n 0000164560 00000 n 0000297300 00000 n 0000297367 00000 n 0000297434 00000 n 0000297498 00000 n 0000297565 00000 n 0000297630 00000 n 0000297697 00000 n 0000297764 00000 n 0000297828 00000 n 0000297895 00000 n 0000297961 00000 n 0000298028 00000 n 0000298095 00000 n 0000298162 00000 n 0000298229 00000 n 0000197619 00000 n 0000298298 00000 n 0000164583 00000 n 0000168647 00000 n 0000298366 00000 n 0000298433 00000 n 0000298500 00000 n 0000298567 00000 n 0000298631 00000 n 0000298698 00000 n 0000298764 00000 n 0000298831 00000 n 0000298898 00000 n 0000298965 00000 n 0000299032 00000 n 0000299099 00000 n 0000299166 00000 n 0000197769 00000 n 0000299235 00000 n 0000168670 00000 n 0000172672 00000 n 0000299303 00000 n 0000299370 00000 n 0000299437 00000 n 0000299501 00000 n 0000299568 00000 n 0000299635 00000 n 0000299702 00000 n 0000299769 00000 n 0000299835 00000 n 0000299902 00000 n 0000299969 00000 n 0000300035 00000 n 0000300101 00000 n 0000300168 00000 n 0000300235 00000 n 0000300301 00000 n 0000197919 00000 n 0000300370 00000 n 0000172695 00000 n 0000174956 00000 n 0000300438 00000 n 0000300505 00000 n 0000300572 00000 n 0000300636 00000 n 0000300703 00000 n 0000300770 00000 n 0000300837 00000 n 0000300903 00000 n 0000300970 00000 n 0000198069 00000 n 0000301039 00000 n 0000174979 00000 n 0000178786 00000 n 0000301107 00000 n 0000301171 00000 n 0000301238 00000 n 0000301304 00000 n 0000301371 00000 n 0000301435 00000 n 0000301502 00000 n 0000301569 00000 n 0000301636 00000 n 0000301703 00000 n 0000301770 00000 n 0000301837 00000 n 0000301904 00000 n 0000301971 00000 n 0000302038 00000 n 0000302105 00000 n 0000302172 00000 n 0000198219 00000 n 0000302241 00000 n 0000178809 00000 n 0000181023 00000 n 0000302309 00000 n 0000302376 00000 n 0000302443 00000 n 0000302510 00000 n 0000302577 00000 n 0000302644 00000 n 0000302711 00000 n 0000302778 00000 n 0000302843 00000 n 0000302910 00000 n 0000198369 00000 n 0000302979 00000 n 0000303047 00000 n 0000181046 00000 n 0000184794 00000 n 0000303114 00000 n 0000303180 00000 n 0000303247 00000 n 0000303314 00000 n 0000303381 00000 n 0000303445 00000 n 0000303512 00000 n 0000303579 00000 n 0000303646 00000 n 0000303713 00000 n 0000303780 00000 n 0000303847 00000 n 0000303914 00000 n 0000303981 00000 n 0000304048 00000 n 0000304115 00000 n 0000304182 00000 n 0000304248 00000 n 0000304315 00000 n 0000304378 00000 n 0000304445 00000 n 0000304512 00000 n 0000198519 00000 n 0000304581 00000 n 0000184817 00000 n 0000188660 00000 n 0000304649 00000 n 0000304716 00000 n 0000304783 00000 n 0000304850 00000 n 0000304917 00000 n 0000304983 00000 n 0000305050 00000 n 0000305117 00000 n 0000305184 00000 n 0000305251 00000 n 0000305317 00000 n 0000305384 00000 n 0000305451 00000 n 0000305518 00000 n 0000305582 00000 n 0000305646 00000 n 0000305713 00000 n 0000305780 00000 n 0000305844 00000 n 0000305911 00000 n 0000305976 00000 n 0000306043 00000 n 0000306110 00000 n 0000306177 00000 n 0000306244 00000 n 0000306311 00000 n 0000306378 00000 n 0000306445 00000 n 0000198669 00000 n 0000306527 00000 n 0000188683 00000 n 0000190176 00000 n 0000306595 00000 n 0000306662 00000 n 0000306726 00000 n 0000306792 00000 n 0000306859 00000 n 0000306926 00000 n 0000306993 00000 n 0000307060 00000 n 0000313242 00000 n 0000314102 00000 n 0000319801 00000 n 0000323249 00000 n 0000328789 00000 n 0000334237 00000 n 0000340925 00000 n 0000345486 00000 n 0000346562 00000 n 0000356058 00000 n 0000357577 00000 n 0000307116 00000 n 0000307516 00000 n 0000308239 00000 n 0000308825 00000 n 0000309418 00000 n 0000309945 00000 n 0000310679 00000 n 0000311183 00000 n 0000311584 00000 n 0000312517 00000 n 0000385078 00000 n trailer << /Size 1856 /Root 1 0 R /Info 2 0 R /ID [<1711882C9BDE286890A17076EBDA3DB3><1711882C9BDE286890A17076EBDA3DB3>] >> startxref 386743 %%EOF survex-1.4.4/doc/AUTHORS.htm0000644000175000017500000000367414141575516012424 00000000000000 Survex Credits

Survex Maintainers

  • Olly Betts
  • Mark Shinwell
  • Wookey

Translation Maintainers

  • Eric Madelaine
  • Gerhard Niklasch
  • Josep Guarro
  • Leandro Dybal Bertoni
  • Roberto Maugeri
  • Martin Sluka
  • Cristian Flueraru

Other Contributors

The following people have contributed code, bug reports, suggestions, documentation, translations, useful information, or assisted in other ways:

Andrew Atkinson, Andrew Boardman, Andy Holtsbery, Andy Waddington, Anthony Day, Bill Purvis, Bob Thrun, Brian Clipstone, Chris Williams, Clewin Griffith, Devon Bowen, Duncan Collis, Earl Merson, Erin Lynch, François Dani, Gavin Lowe, Graham Mullan, Heatheri Sullivan, Iain Miller, James Aylett, James Begley, Jenny Black, Jens Rasch, John Halleck, John Pybus, Julian Todd, Justin Fletcher, Larry Fish, Lev Bishop, Mark Fearon, Martin Budaj, Martin Ellis, Martin Green, Martin Heller, Michel Bovey, Mike Lake, Mike McCombe, Mike Yocum, Patrick Warren, Paul "Footleg" Fretwell, Peter Wilton-Jones, Phil Bull, Phil Holmes, Phil Maynard, Phil Underwood, Philip Balister, Ray Duffy, Rob Garrett, Rob Pollard, Robert Smallshire, Roger Schuster, Sean Kelly, Simeon Warner, Stacho Mudrak, Taco van Ieperen, Thilo Müller, Thomas Holder, Tim Long, Tim Morgan.

And also thanks to everyone in CUCC who has helped give it a good hammering on expedition in Austria every year for the past decade. survex-1.4.4/doc/man_cavern.sgml0000644000175000017500000000156114141575516013553 00000000000000 %entities; ]> &man.cavern; See Also aven1, diffpos1, dump3d1, extend1, sorterr1, survexport1 survex-1.4.4/doc/Makefile.am0000644000175000017500000000746314205012024012576 00000000000000## Process this file with automake to produce Makefile.in pkgdocdir = @PKGDOCDIR@ other_mans = cavern.1 diffpos.1 dump3d.1 extend.1 sorterr.1 survexport.1 \ aven.1 manual_sources = manual.sgml cavern.sgml\ diffpos.sgml dump3d.sgml extend.sgml sorterr.sgml survexport.sgml aven.sgml manual_alt = manual.txt manual.pdf # People can build from git without docbook-utils installed but they won't be # able to "make dist", which is arguably a good thing - we don't want tarballs # accidentally lacking the documentation. EXTRA_DIST = $(HTMLFILES) manual $(manual_alt)\ custom.dsl survex.ent\ caution.png note.png\ $(manual_sources) $(other_mans)\ man_aven.sgml man_cavern.sgml man_diffpos.sgml man_dump3d.sgml \ man_extend.sgml man_sorterr.sgml man_survexport.sgml\ news2html.pl NEWS.htm: ../NEWS news2html.pl ./news2html.pl '@PRETTYPACKAGE@ @VERSION@' < ../NEWS > NEWS.htm OLDNEWS.htm: ../OLDNEWS news2html.pl ./news2html.pl < ../OLDNEWS > OLDNEWS.htm MAINTAINERCLEANFILES = $(manual_alt) $(other_mans) NEWS.htm OLDNEWS.htm pkgdoc_DATA = @HTMLFILES@ $(manual_alt) man_MANS = survex.7 $(other_mans) aven.1: $(srcdir)/aven.sgml $(srcdir)/man_aven.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_aven.sgml rm -f manpage.links manpage.refs survexport.1: $(srcdir)/survexport.sgml $(srcdir)/man_survexport.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_survexport.sgml rm -f manpage.links manpage.refs cavern.1: $(srcdir)/cavern.sgml $(srcdir)/man_cavern.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_cavern.sgml rm -f manpage.links manpage.refs diffpos.1: $(srcdir)/diffpos.sgml $(srcdir)/man_diffpos.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_diffpos.sgml rm -f manpage.links manpage.refs dump3d.1: $(srcdir)/dump3d.sgml $(srcdir)/man_dump3d.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_dump3d.sgml rm -f manpage.links manpage.refs extend.1: $(srcdir)/extend.sgml $(srcdir)/man_extend.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_extend.sgml rm -f manpage.links manpage.refs sorterr.1: $(srcdir)/sorterr.sgml $(srcdir)/man_sorterr.sgml $(srcdir)/survex.ent $(JW) -b man $(srcdir)/man_sorterr.sgml rm -f manpage.links manpage.refs install-data-local: manual $(mkinstalldirs) $(DESTDIR)$(pkgdocdir)/manual test ! -d manual -a -d "$(srcdir)/manual" && cd $(srcdir) ; \ for p in manual/*.htm manual/*.png ; do \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdocdir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdocdir)/$$p; \ done uninstall-local: test ! -d manual -a -d "$(srcdir)/manual" && cd $(srcdir) ; \ for p in manual/*.htm manual/*.png ; do \ echo " rm -f $(DESTDIR)$(pkgdocdir)/$$p"; \ rm -f $(DESTDIR)$(pkgdocdir)/$$p; \ done -rmdir $(DESTDIR)$(pkgdocdir)/manual maintainer-clean-local: rm -rf manual "$(srcdir)/manual" # manual, etc depend on configure.ac so they get rebuilt when the # version number is bumped manual: manual/stampfile manual/stampfile: $(manual_sources) custom.dsl survex.ent ../configure.ac rm -rf manual $(JW) --backend html --dsl 'custom.dsl#html' --output manual manual.sgml cp caution.png note.png manual touch manual/stampfile manual.txt: $(manual_sources) survex.ent ../configure.ac $(JW) --backend txt manual.sgml manual.pdf: $(manual_sources) survex.ent ../configure.ac $(JW) --backend ps manual.sgml ps2pdf manual.ps manual.pdf rm manual.ps # The rules below aren't used by the build system - they're for "manual" use # (ho ho) manual.html: $(manual_sources) custom.dsl survex.ent ../configure.ac $(JW) --backend html --dsl 'custom.dsl#onehtml' manual.sgml > manual.html manual.rtf: $(manual_sources) survex.ent ../configure.ac $(JW) --backend rtf manual.sgml manual.ps: $(manual_sources) survex.ent ../configure.ac $(JW) --backend ps manual.sgml CLEANFILES = usr check-local: grep -F '$(VERSION)' '$(srcdir)/manual.sgml' survex-1.4.4/doc/index.htm.in0000644000175000017500000000200614141575516012777 00000000000000 @PRETTYPACKAGE@ @VERSION@ Documentation Access to mailing lists and downloads are available at the Survex web site.

@PRETTYPACKAGE@ @VERSION@ Documentation

Documentation of use to Developers

survex-1.4.4/doc/aven.sgml0000644000175000017500000001372614141575516012401 00000000000000 aven 1 aven sophisticated cave viewer for Unix and MS Windows aven --survey=SURVEY --print .3d file Description Aven displays processed cave surveys in a window and allows you to manipulate the view. Note that there is no perspective in the view. This means that it is impossible to tell which way round a cave is rotating, or whether you are viewing something from behind, or in front. So if you think the direction of rotation in wrong, or changes as you watch, this is just your brain being confused, not a bug! Mouse Control The best way to move the cave is with the mouse. We suggest you try each of these out after reading this section to get a feel for how they work. If you hold down the right button then the cave is dragged when you move the mouse. If you hold down the left button, then the cave is rotated if you move left or right, and zoomed if you move up and down. If you hold down Ctrl while dragging with the left mouse button, then the cave rotates and tilts at the same time instead. If your mouse has a middle button then holding it down and moving the mouse up and down tilts the cave. Moving the mouse left and right has no effect. And if you have a scrollwheel, this can be used to zoom in/out. By default the mouse moves the cave, but if you press Ctrl-R, then the mouse will move the viewpoint instead (i.e. everything will go in the opposite direction). Apparently this feels more natural to some people. Keyboard Control P and L select Plan and eLevation respectively. Changing between plan to elevation is animated to help you see where you are and how things relate. This animation is automatically disabled on slow machines to avoid user frustration. Comma ', and Slash / tilt up and down respectively. Tilt goes 180 degrees from plan view to a view from directly below (upside down plan). Space toggles automatic rotation about a vertical axis on and off. The speed of rotation for this, and animated transitions between plan and elevation, is controlled by Z and X. Crosses and/or labels can be displayed at survey stations. Ctrl-X toggles crosses and Ctrl-N station names. Ctrl-L toggles the display of survey legs. Delete is useful if you get lost - it resets the scale, position, and rotation speed, so that the cave returns to the centre of the screen. There are also keyboard controls to use instead of the mouse - Shift helps here as it accelerates all movements: Z, X : Faster/Slower Rotation R: Reverse direction of rotation Enter, Space: Start and stop auto-rotation Ctrl-Cursor Left, Ctrl-Cursor Right: Rotate cave one step clockwise/anti-clockwise (also: C, V) Ctrl-Cursor Up , Ctrl-Cursor Down: Higher/Lower Viewpoint (also: ' , /) ] , [: Zoom in/Out U, D: Set view to Up/Down N, S, E, W: Set view to North, South, East, West Delete: Reset to default scale, rotation rate, etc P, L: Plan, Elevation Cursor Left, Cursor Right: Pan survey Left/Right (on screen) Cursor Up, Cursor Down: Pan survey Up/Down (on screen) Ctrl-N: Toggle display of station names Ctrl-X: Toggle display of crosses at stations Ctrl-L: Toggle display of survey legs Ctrl-F: Toggle display of surface legs Ctrl-G: Toggle display of grid Ctrl-B: Toggle display of bounding box O: Toggle display of non-overlapping/all names Ctrl-R: reverse sense of controls Shift: accelerates all movement keys A little experimentation should give a better understanding of how this works. There is an auto-resizing scale bar along the bottom of the screen which varies in length as you zoom in or out. In the lower right corner is a compass pointer showing which way is North, and a clino pointer showing the angle of tilt. And in the upper right is a colour key showing the correspondence between colour and depth (by default - you can also colour by date or by error). Options -p, --print Print the specified file and exit. -s, --survey=SURVEY Only load the sub-survey 'SURVEY'. survex-1.4.4/doc/aven.10000664000175000017500000001133514205545544011572 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "AVEN" "1" "24 February 2022" "" "" .SH NAME aven \- sophisticated cave viewer for Unix and MS Windows .SH SYNOPSIS \fBaven\fR [ \fB--survey=SURVEY\fR ] [ \fB--print\fR ] \fB\&.3d file\fR .SH "DESCRIPTION" .PP Aven displays processed cave surveys in a window and allows you to manipulate the view. .PP Note that there is no perspective in the view. This means that it is impossible to tell which way round a cave is rotating, or whether you are viewing something from behind, or in front. So if you think the direction of rotation in wrong, or changes as you watch, this is just your brain being confused, not a bug! .SS "MOUSE CONTROL" .PP The best way to move the cave is with the mouse. We suggest you try each of these out after reading this section to get a feel for how they work. .PP If you hold down the right button then the cave is dragged when you move the mouse. .PP If you hold down the left button, then the cave is rotated if you move left or right, and zoomed if you move up and down. If you hold down \fBCtrl\fR while dragging with the left mouse button, then the cave rotates and tilts at the same time instead. .PP If your mouse has a middle button then holding it down and moving the mouse up and down tilts the cave. Moving the mouse left and right has no effect. .PP And if you have a scrollwheel, this can be used to zoom in/out. .PP By default the mouse moves the cave, but if you press \fBCtrl-R\fR, then the mouse will move the viewpoint instead (i.e. everything will go in the opposite direction). Apparently this feels more natural to some people. .SS "KEYBOARD CONTROL" .PP \fBP\fR and \fBL\fR select Plan and eLevation respectively. Changing between plan to elevation is animated to help you see where you are and how things relate. This animation is automatically disabled on slow machines to avoid user frustration. .PP Comma \fB\&'\fR, and Slash \fB/\fR tilt up and down respectively. Tilt goes 180 degrees from plan view to a view from directly below (upside down plan). .PP \fBSpace\fR toggles automatic rotation about a vertical axis on and off. The speed of rotation for this, and animated transitions between plan and elevation, is controlled by \fBZ\fR and \fBX\fR\&. .PP Crosses and/or labels can be displayed at survey stations. \fBCtrl-X\fR toggles crosses and \fBCtrl-N\fR station names. \fBCtrl-L\fR toggles the display of survey legs. .PP \fBDelete\fR is useful if you get lost - it resets the scale, position, and rotation speed, so that the cave returns to the centre of the screen. There are also keyboard controls to use instead of the mouse - \fBShift\fR helps here as it accelerates all movements: .nf \fBZ\fR, \fBX\fR : Faster/Slower Rotation \fBR\fR: Reverse direction of rotation \fBEnter\fR, \fBSpace\fR: Start and stop auto-rotation \fBCtrl-Cursor Left\fR, \fBCtrl-Cursor Right\fR: Rotate cave one step clockwise/anti-clockwise (also: \fBC\fR, \fBV\fR) \fBCtrl-Cursor Up\fR , \fBCtrl-Cursor Down\fR: Higher/Lower Viewpoint (also: \fB\&'\fR , \fB/\fR) \fB]\fR , \fB[\fR: Zoom in/Out \fBU\fR, \fBD\fR: Set view to Up/Down \fBN\fR, \fBS\fR, \fBE\fR, \fBW\fR: Set view to North, South, East, West \fBDelete\fR: Reset to default scale, rotation rate, etc \fBP\fR, \fBL\fR: Plan, Elevation \fBCursor Left\fR, \fBCursor Right\fR: Pan survey Left/Right (on screen) \fBCursor Up\fR, \fBCursor Down\fR: Pan survey Up/Down (on screen) \fBCtrl-N\fR: Toggle display of station names \fBCtrl-X\fR: Toggle display of crosses at stations \fBCtrl-L\fR: Toggle display of survey legs \fBCtrl-F\fR: Toggle display of surface legs \fBCtrl-G\fR: Toggle display of grid \fBCtrl-B\fR: Toggle display of bounding box \fBO\fR: Toggle display of non-overlapping/all names \fBCtrl-R\fR: reverse sense of controls \fBShift\fR: accelerates all movement keys .fi .PP A little experimentation should give a better understanding of how this works. .PP There is an auto-resizing scale bar along the bottom of the screen which varies in length as you zoom in or out. In the lower right corner is a compass pointer showing which way is North, and a clino pointer showing the angle of tilt. And in the upper right is a colour key showing the correspondence between colour and depth (by default - you can also colour by date or by error). .SH "OPTIONS" .TP \fB-p, --print\fR Print the specified file and exit. .TP \fB-s, --survey=SURVEY\fR Only load the sub-survey 'SURVEY'. .SH "SEE ALSO" .PP \fBcavern\fR(1), \fBdiffpos\fR(1), \fBdump3d\fR(1), \fBextend\fR(1), \fBsorterr\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/man_aven.sgml0000644000175000017500000000156114141575516013226 00000000000000 %entities; ]> &man.aven; See Also cavern1, diffpos1, dump3d1, extend1, sorterr1, survexport1 survex-1.4.4/doc/cavern.sgml0000644000175000017500000001263414142356022012711 00000000000000 cavern 1 cavern process raw survey data cavern options survex data file Description Cavern is the Survex data processing engine. If multiple survey data files are listed on the command line, they are processed in order from left to right. Settings are reset to their defaults before processing each file. Options -o, --output=OUTPUT Sets location for output files. -q, --quiet Only show a brief summary (--quiet --quiet or -qq will display warnings and errors only). -s, --no-auxiliary-files do not create .err file. -w, --warnings-are-errors turn warnings into errors. --log Send screen output to a .log file. -v, --3d-version Specify the 3d file format version to output. By default the latest version is written, but you can override this to produce a 3d file which can be read by software which doesn't understand the latest 3d file format version. Note that any information which the specified format version didn't support will be omitted. Output Cavern reads in text files containing the survey data .svx) and outputs two files, with the extensions .3d and .err. By default these files are put in the current directory, with the same base filename as the first .svx file read, but a different extension. You can change the directory and/or base filename using the --output command line option. E.g. if you process the data file entrance.svx with the command cavern entrance then the files entrance.3d and entrance.err will be created. Cavern also gives a range of statistics at the end of a successful run: The highest and lowest stations and the height difference between them The total length of the survey (before and after adjustment). This total excludes survey legs flagged as SURFACE, DUPLICATE, or SPLAY. The number of stations and legs. Note that a *EQUATE is counted as a leg in this statistic. The East-West and North-South ranges, and the North-most, South-most, East-most, and West-most stations. The number of each size of node in the network (where size is number of connections to a station) i.e. a one node is the end of a dead-end traverse, a two-node is a typical station in the middle of a traverse, a three-node is a T-junction etc. How long the processing took and how much CPU time was used. <filename>.3d</filename> - data describing the loop-closed centre line This file contains details of the stations and legs, and any flags associated with them. <filename>.err</filename> - loop closure statistics (percentage errors, etc) This file contains statistics about each traverse in the survey which is part of a loop. It includes various statistics for each traverse, such as the percentage error per leg. You should study this information to determine if any parts of the survey are of lower quality or contain gross errors. Error Messages There are a number of error messages that you may get when processing data. Most of these are self explanatory, and will be caused by such problems as typing mistakes, or by your survey data not being attached to fixed points (in this situation, Survex will list some of the stations that are not connected). Along with the error message, the filename and line number of the offending line will be printed (or the filename for errors such as `file not found'). The format of the filename and line number is that used by gcc, so if your editor can parse errors from gcc, you should be able to set it to allow you to jump to the file and line of each error. Cavern will stop after more than 50 errors. This usually indicates something like the incorrect data order being specified. Deluging the user with error messages makes the actual problem less clear. survex-1.4.4/doc/dump3d.sgml0000644000175000017500000000166114270423117012627 00000000000000 dump3d 1 dump3d dump .3d file contents in textual format dump3d --survey=SURVEY --rewind --show-dates --legs PROCESSED_SURVEY_DATA_FILE Description Dump out the entries in a processed survey data file - useful for debugging, and also provides a textual format which is fairly easy to parse if you want to write a simple script to pull out information from a file. Note that this tool can actually be used to dump any format the "img" library can read, not just Survex .3d files. survex-1.4.4/doc/survexport.10000664000175000017500000000671014214237426013100 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "SURVEXPORT" "1" "16 March 2022" "" "" .SH NAME survexport \- convert a processed survey data file (such as a Survex .3d file)to another format. .SH SYNOPSIS \fBsurvexport\fR [ \fBoptions\fR ] \fB\&.3d file\fR [ \fBoutput file\fR ] .SH "OPTIONS" .PP \fB-s, --survey=SURVEY\fR only load the sub-survey with this prefix .PP \fB--scale=SCALE\fR scale (50, 0.02, 1:50 and 2:100 all mean 1:50) .PP \fB--bearing=BEARING\fR bearing (90, 90d, 100g all mean 90°) .PP \fB--tilt=TILT\fR tilt (45, 45d, 50g, 100% all mean 45°) .PP \fB--plan \fR plan view (equivalent to --tilt=-90) .PP \fB--elevation\fR elevation view (equivalent to --tilt=0) .PP \fB--legs \fR underground survey legs .PP \fB--surface-legs\fR surface survey legs .PP \fB--splays \fR splay legs .PP \fB--crosses \fR station markers .PP \fB--station-names \fR station labels .PP \fB--entrances \fR entrances .PP \fB--fixes \fR fixed points .PP \fB--exports\fR exported stations .PP \fB--cross-sections\fR cross-sections .PP \fB--walls \fR walls .PP \fB--passages \fR passages .PP \fB--origin-in-centre\fR origin in centre .PP \fB--full-coordinates\fR full coordinates .PP \fB--clamp-to-ground\fR clamp to ground .PP \fB--defaults\fR include items exported by default .PP \fB-g, --grid[=GRID]\fR generate grid (default 100m) .PP \fB-t, --text-height=TEXT-HEIGHT\fR station labels text height (default 0.6) .PP \fB-m, --marker-size=MARKER-SIZE\fR station marker size (default 0.8) .PP \fB--csv \fR produce CSV output .PP \fB--dxf \fR produce DXF output .PP \fB--eps \fR produce EPS output .PP \fB--gpx \fR produce GPX output .PP \fB--hpgl \fR produce HPGL output .PP \fB--json \fR produce JSON output .PP \fB--kml \fR produce KML output .PP \fB--plt \fR produce Compass PLT output for Carto .PP \fB--skencil\fR produce Skencil output .PP \fB--pos\fR produce Survex POS output .PP \fB--svg\fR produce SVG output .PP \fB--help\fR display short help and exit .PP \fB--version\fR output version information and exit .SH "DESCRIPTION" .PP The input formats supports are all those supported by Survex's "img" library - Survex .3d, Survex .pos, Compass PLT and CMAP XYZ files. .PP Currently the output formats supported are CSV, DXF, EPS (Encapsulated PostScript), GPX, HPGL for plotters, JSON, KML, Survex POS files, Skencil, and SVG. Also survexport can produce Compass .plt files, which are primarily intended for importing into Carto, but can also be used with Compass itself. .SS "POS FORMAT" .PP The POS format is a Survex-specific format containing a list of stations with coordinates (ordered x,y,z [East, North, Up]) and complete names. .PP The stations are sorted by name such that numbers occur in the correct order (so ``2'' before ``10''). Numbers with a prefix and/or suffix are sorted by the number part first, so you'd get: .nf 040.sv8 040.sv8a 040.sv8b 040.sv8c 040.sv9 040.sv10 040.sv11 40_entrance_tag 40b_entrance_tag .fi .SS "DXF EXPORT" .PP DXF export separates Splays, Surface legs, Surface points, survey legs, and survey stations onto separate layers. Splays will export dotted, and surface legs dashed. This is not configurable. .SH "SEE ALSO" .PP \fBaven\fR(1), \fBcavern\fR(1), \fBdiffpos\fR(1), \fBdump3d\fR(1), \fBextend\fR(1), \fBsorterr\fR(1) survex-1.4.4/doc/man_diffpos.sgml0000644000175000017500000000156114141575516013727 00000000000000 %entities; ]> &man.diffpos; See Also aven1, cavern1, dump3d1, extend1, sorterr1, survexport1 survex-1.4.4/doc/survex.ent0000644000175000017500000000045614141575516012624 00000000000000 survex-1.4.4/doc/cavern.10000664000175000017500000001045314205545543012116 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "CAVERN" "1" "24 February 2022" "" "" .SH NAME cavern \- process raw survey data .SH SYNOPSIS \fBcavern\fR [ \fBoptions\fR ] \fBsurvex data file\fR\fI ...\fR .SH "DESCRIPTION" .PP Cavern is the \fBSurvex\fR data processing engine. .PP If multiple survey data files are listed on the command line, they are processed in order from left to right. Settings are reset to their defaults before processing each file. .SH "OPTIONS" .TP \fB-o, --output=OUTPUT\fR Sets location for output files. .TP \fB-q, --quiet\fR Only show a brief summary (--quiet --quiet or -qq will display warnings and errors only). .TP \fB-s, --no-auxiliary-files\fR do not create .err file. .TP \fB-w, --warnings-are-errors\fR turn warnings into errors. .TP \fB--log\fR Send screen output to a .log file. .TP \fB-v, --3d-version\fR Specify the 3d file format version to output. By default the latest version is written, but you can override this to produce a 3d file which can be read by software which doesn't understand the latest 3d file format version. Note that any information which the specified format version didn't support will be omitted. .SH "OUTPUT" .PP Cavern reads in text files containing the survey data \fI\&.svx\fR) and outputs two files, with the extensions \fI\&.3d\fR and \fI\&.err\fR\&. By default these files are put in the current directory, with the same base filename as the first \fI\&.svx\fR file read, but a different extension. You can change the directory and/or base filename using the --output command line option. .PP E.g. if you process the data file \fIentrance.svx\fR with the command \fBcavern entrance\fR then the files \fIentrance.3d\fR and \fIentrance.err\fR will be created. .PP Cavern also gives a range of statistics at the end of a successful run: .TP 0.2i \(bu The highest and lowest stations and the height difference between them .TP 0.2i \(bu The total length of the survey (before and after adjustment). This total excludes survey legs flagged as SURFACE, DUPLICATE, or SPLAY. .TP 0.2i \(bu The number of stations and legs. Note that a *EQUATE is counted as a leg in this statistic. .TP 0.2i \(bu The East-West and North-South ranges, and the North-most, South-most, East-most, and West-most stations. .TP 0.2i \(bu The number of each size of node in the network (where size is number of connections to a station) i.e. a one node is the end of a dead-end traverse, a two-node is a typical station in the middle of a traverse, a three-node is a T-junction etc. .TP 0.2i \(bu How long the processing took and how much CPU time was used. .SS ".3D - DATA DESCRIBING THE LOOP-CLOSED CENTRE LINE" .PP This file contains details of the stations and legs, and any flags associated with them. .SS ".ERR - LOOP CLOSURE STATISTICS (PERCENTAGE ERRORS, ETC)" .PP This file contains statistics about each traverse in the survey which is part of a loop. It includes various statistics for each traverse, such as the percentage error per leg. You should study this information to determine if any parts of the survey are of lower quality or contain gross errors. .SH "ERROR MESSAGES" .PP There are a number of error messages that you may get when processing data. Most of these are self explanatory, and will be caused by such problems as typing mistakes, or by your survey data not being attached to fixed points (in this situation, \fBSurvex\fR will list some of the stations that are not connected). .PP Along with the error message, the filename and line number of the offending line will be printed (or the filename for errors such as `file not found'). The format of the filename and line number is that used by gcc, so if your editor can parse errors from gcc, you should be able to set it to allow you to jump to the file and line of each error. .PP Cavern will stop after more than 50 errors. This usually indicates something like the incorrect data order being specified. Deluging the user with error messages makes the actual problem less clear. .SH "SEE ALSO" .PP \fBaven\fR(1), \fBdiffpos\fR(1), \fBdump3d\fR(1), \fBextend\fR(1), \fBsorterr\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/diffpos.10000664000175000017500000000210314205545543012263 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "DIFFPOS" "1" "24 February 2022" "" "" .SH NAME diffpos \- compare the contents of two .3d files .SH SYNOPSIS \fBdiffpos\fR \fB\&.3d file\fR \fB\&.3d file\fR [ \fBthreshold\fR ] .SH "DESCRIPTION" .PP Diffpos reports stations which are in one file but not the other, and also stations which have moved by more than a specified threshold distance in X, Y, or Z. The threshold distance is given in metres and defaults to 0.01m if not specified. .PP For backward compatibility diffpos will also read the \fI\&.pos\fR files produced by earlier versions of cavern, by the (now removed) 3dtopos tool, by survexport, or by aven's export feature (requires 1.2.19 or later). .SH "SEE ALSO" .PP \fBaven\fR(1), \fBcavern\fR(1), \fBdump3d\fR(1), \fBextend\fR(1), \fBsorterr\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/manual.sgml0000644000175000017500000035123714367055734012734 00000000000000 ]>
<Application>Survex</Application> <!--VERSION-->1.4.4 Manual Olly Betts Olly Betts wrote most of Survex.
olly@survex.com
Wookey Wookey is a small furry creature.
wookey@survex.com
1998-2018 Olly Betts This is the manual for Survex - an open-source software package for cave surveyors.
Introduction This section describes what Survex is, and outlines the scope of this manual. About <Application>Survex</Application> Survex is a multi-platform open-source cave surveying package. Versions 1.2 and later run on UNIX, Microsoft Windows, and macOS. We're investigating support for phones and tablets. We are well aware that not everyone has access to super hardware - often surveying projects are run on little or no budget and any computers used are donated. We aim to ensure that Survex is feasible to use on low-spec machines. Obviously it won't be as responsive, but we intend it to be usable. Please help us to achieve this by giving us some feedback if you use Survex on a slow machine. Survex is capable of processing extremely complex caves very quickly and has a very effective, real-time cave viewer which allows you to rotate, zoom, and pan the cave using mouse or keyboard. We have tested it extensively using CUCC and ARGE's surveys of the caves under the Loser Plateau in Austria (over 25,000 survey legs, and over 140km of underground survey data). This can all be processed in around 10 seconds on a low-end netbook. Survex is also used by many other survey projects around the world, including the Ogof Draenen survey, the Easegill resurvey project, the OFD survey, the OUCC Picos expeditions, and the Hong Meigui China expeditions. Survex is still actively being worked on. Version 1.0 was complete in some sense, but development continues - initially in reshaping Survex into a more integrated GUI package. We encourage feedback from users on important features or problems, which will help to direct future development. See the "Mailing List" section of this manual for the best way to contact us. About this Manual If there's a part of this manual you find hard to understand, please do let us know. We already know Survex well, so it can be hard for us to spot areas where the manual doesn't given enough information, or doesn't explain things clearly enough to follow when you don't know what's going on. It's helpful is you can suggest a better wording, but don't worry if you can't, just explain the problem as precisely as you can. The master version of this manual is an SGML document written using the docbook DTD, and automatically converted to a number of other formats. If you are going to send us major changes, it's much easier to include them if you work from this master. You can get it from the source archive (docs/manual.sgml) or from the Survex website. Terminology Throughout this document we use British terminology for surveying. station a point in the cave that you survey from and/or to leg a line joining two stations survey a group of legs surveyed on the same trip Getting Started This section covers how to obtain the software, and how to unpack and install it, and how to configure it. Obtaining <Application>Survex</Application> The latest version is available from the Survex website: https://survex.com/. It is also freely redistributable, so you welcome to get a copy from someone else who has already downloaded it. If you want some sample data to experiment with, you can download some from the Survex website too: https://survex.com/software/sample.tar.gz Installing <Application>Survex</Application> The details of installation depend greatly on what platform you are using, so there is a separate section below for each platform. Linux We supply pre-compiled versions for x86 Linux machines in RPM format (suitable for Redhat, Mandrake, and some other distributions). Survex Debian packages are available from Debian mirror sites in the usual way. You'll need root access to install these prebuilt packages. If you don't have root access you will need to build from source (see the next section). Other versions of UNIX For other UNIX versions you'll need to get the source code and compile it on your system. Unpack the sources and read the file called INSTALL in the top level for details about building from source. macOS The easiest way to install a recent release of Survex on macOS is by using the Homebrew package manager. If you don't already use Homebrew, you'll need to install it first. See the macOS download page on the website for installation instructions. Microsoft Windows This version comes packaged with an installation wizard. Just run the downloaded package and it will lead you through the installation process. If you want the file associations to be set up for all user, run the installer as administrator, or as a user with administrator rights. The survey viewer that's part of Survex is called aven, and uses OpenGL for 3d rendering. If you find that 3D rendering is sometimes very slow (e.g. one user reported very slow performance when running full screen, while running in a window was fine) then try installing the OpenGL driver supplied by the manufacturer of your graphics card rather than the driver Microsoft supply. The installer creates a Survex group in the Programs sub-menu of the Start menu containing the following items: Aven Documentation Uninstall Survex Icons are installed for .svx, .3d, .err, and .pos files, and also for Compass Plot files (.plt and .plf) (which Survex can read). Double-clicking on a .svx file loads it for editing. To process it to produce a .3d file, right click and choose "Process" from the menu - this runs aven to process the .svx file and automatically load the resultant .3d file. All the Survex file types can be right clicked on to give a menu of possible actions. .svx Process Process file with aven to produce .3d file (and .err file) .3d Open Load file into Aven Print Print the file via Aven Extend Produce extended elevation Convert to DXF This entry used to be provided to allow converting to a DXF file (suitable for importing into many CAD packages) but this functionality is now available from inside Aven with the ability to control what is exported, and this entry was dropped in 1.2.35. Convert for hand plotting This entry used to be provided to allow converting to a .pos file listing all the stations and their coordinates, but this functionality is now available from inside Aven with the ability to control what is exported. and this entry was dropped in 1.2.35. .err Open Load file into Notepad Sort by Error Sort .err file by the error in each traverse Sort by Horizontal Error Sort .err file by the horizontal error in each traverse Sort by Vertical Error Sort .err file by the vertical error in each traverse Sort by Percentage Error Sort .err file by the percentage error in each traverse Sort by Error per Leg Sort .err file by the error per leg in each traverse Configuration Selecting Your Preferred Language Survex has extensive internationalisation capabilities. The language used for messages from Survex and most of the library calls it uses can be changed. By default this is picked up from the language the operating system is set to use (from "Regional Settings" in Control Panel on Microsoft Windows, from the LANG environment variable on UNIX If no setting is found, or Survex hasn't been translated into the requested language, UK English is used. However you may want to override the language manually - for example if Survex isn't available in your native language you'll want to choose the supported language you understand best. To do this, you set the SURVEXLANG environment variable. Here's a list of the codes currently supported: CodeLanguage enInternational English en_USUS English bgBulgarian caCatalan deGerman de_CHSwiss German elGreek esSpanish frFrench huHungarian idIndonesian itItalian plPolish ptPortuguese pt_BRBrazillian Portuguese roRomanian ruRussian skSlovak zh_CNChinese (Simplified) Here are examples of how to set this environment variable to give messages in French (language code fr): Microsoft Windows For MS Windows proceed as follows (this description was written from MS Windows 2000, but it should be fairly similar in other versions): Open the Start Menu, navigate to the Settings sub-menu, and open Control Panel. Open System (picture of a computer) and click on the Advanced tab. Choose `Environmental Variables', and create a new one: name SURVEXLANG, value fr. Click OK and the new value should be effective immediately. UNIX - csh/tcsh setenv SURVEXLANG fr UNIX - sh/bash SURVEXLANG=fr ; export SURVEXLANG If Survex isn't available in your language, you could help out by providing a translation. The initial translation is likely to be about a day's work; after that translations for new or changed messages are occasionally required. Contact us for details if you're interested. Using <Application>Survex</Application> Most common tasks can now be accomplished through Aven - processing survey data, viewing the processed data, printing, exporting to other formats, and producing simple extended elevations. A few tasks still require you to use the command line. And some functionality is available both via aven and from the command line, which allows it to be scripted. The command line programs that come with Survex are: extend Produces extended elevations - this is probably the most useful of these command line tools. Since version 1.2.27 you can produce simple extended elevations from Aven using the "Extended Elevation" function. However the command line tool allows you to specify a spec file to control how the survey is extended, which you can't currently do via Aven. diffpos Compares the positions of stations in two .3d, .pos, etc files. sorterr Sorts a .err file by a specified field. survexport Provides access to Aven's "Export" functionality from the command line, which can be useful in scripts. cavern Processes survey data, but since version 1.2.3 you can process .svx files by simply opening them with Aven, so you no longer need to run cavern from the command line. The main reason to run cavern directly is for use in scripts. dump3d Dumps out a list of the items in a .3d file - it's mainly useful for debugging. Survex Programs Standard Options All Survex programs respond to the following command line options: --help display option summary and exit --version output version information and exit Short and Long Options Options have two forms: short (a dash followed by a single letter e.g. cavern -q) and long (two dashes followed by one or more words e.g. cavern --quiet). The long form is generally easier to remember, while the short form is quicker to type. Options are often available in both forms. Command line options are case sensitive, so "-B" and "-b" are different (this didn't used to be the case before Survex 0.90). Case sensitivity doubles the number of available short options (and is also the norm on UNIX). Filenames on the Command Line Filenames with spaces can be processed (provided your operating system supports them - UNIX does, and so do modern versions of Microsoft Windows). You need to enclose the filename in quotes like so: cavern "Spider Cave" A file specified on the command line of any of the Survex suite of programs will be looked for as specified. If it is not found, then the file is looked for with the appropriate extension appended. So cavern survey will look first for survey, then for survey.svx. Command Reference &man.cavern; &man.aven; &man.diffpos; &man.extend; &man.sorterr; &man.survexport; <Application>Survex</Application> data files Survey data is entered in the form of text files. You can use any text editor you like for this, so long as it has the capability of writing a plain ASCII text file. The data format is very flexible; unlike some other cave surveying software, Survex does not require survey legs to be rearranged to suit the computer, and the ordering of instrument readings on each line is fully specifiable. So you can enter your data much as it appears on the survey notes, which is important in reducing the opportunities for transcription errors. Also all the special characters are user-definable - for example, the separators can be spaces and tabs, or commas (e.g. when exporting from a spreadsheet), etc; the decimal point can be a slash (for clarity), a comma (as used in continental Europe), or anything else you care to choose. This flexibility means that it should be possible to read in data from almost any sort of survey data file without much work. Survex places no restrictions on you in terms of the ordering of survey legs. You can enter or process data in any order and Survex will read it all in before determining how it is connected. You can also use the hierarchical naming so that you do not need to worry about using the same station name twice. The usual arrangement is to have one file which lists all the others that are included (e.g., 161.svx). Then cavern 161 will process all your data. To just process a section use the filename for that section, e.g. cavern dtime will process the dreamtime file/section of Kaninchenhöhle. To help you out, if all legs in a survey are connected to one another but the survey has no fixed points, cavern will 'invent' a fixed point and print a warning message to this effect. It is up to you what data you put in which files. You can have one file per trip, or per area of the cave, or just one file for the whole cave if you like. On a large survey project it makes sense to group related surveys in the same file or directory. Readings Blank lines (i.e. lines consisting solely of BLANK characters) are ignored. The last line in the file need not be terminated by an end of line character. All fields on a line must be separated by at least one BLANK character. An OMIT character (default '-') indicates that a field is unused. If the field is not optional, then an error is given. Survey Station Names Survex has a powerful system for naming stations. It uses a hierarchy of survey names, similar to the nested folders your computer stores files in. So point 6 in the entrance survey of Kaninchenhöhle (cave number 161) is referred to as: 161.entrance.6 This seems a natural way to refer to station names. It also means that it is very easy to include more levels, for example if you want to plot all the caves in the area you just list them all in another file, specifying a new prefix. So to group 3 nearby caves on the Loser Plateau you would use a file like this: *begin Loser *include 161 *include 2YrGest *include 145 *end Loser The entrance series point mentioned above would now be referred to as: Loser.161.entrance.6 You do not have to use this system at all, and can just give all stations unique identifiers if you like: 1, 2, 3, 4, 5, ... 1381, 1382 or AA06, AA07, P34, ZZ6, etc. Station and survey names may contain any alphanumeric characters and additionally any characters in NAMES (default `_' and `-'). Alphabetic characters may be forced to upper or lower case by using the *case command. Station names may be any length - if you want to only treat the first few characters as significant you can get cavern to truncate the names using the *truncate command. Anonymous Stations Survex supports the concept of anonymous survey stations. That is survey stations without a name. Each time an anonymous station name is used it represents a different point. Currently three types of anonymous station are supported, referred to by one, two or three separator characters - with the default separator of '.', that means '.', '..', and '...' are anonymous stations. Their meanings are: Single separator ('.' by default) An anonymous non-wall point at the end of an implicit splay. Double separator ('..' by default) An anonymous wall point at the end of an implicit splay. Triple separator ('...' by default) an anonymous point with no implicit flags on the leg (intended for cases like a disto leg along a continuing passage). You can map '-' to '..' (for compatibility with data from pocket topo) using the command: *alias station - .. Support for anonymous stations and for '*alias station - ..' was added in Survex 1.2.7. Numeric fields [<MINUS>|<PLUS>] <integer part> [ <DECIMAL> [ <decimal fraction> ] ] or [<MINUS>|<PLUS>] <DECIMAL> <dec fraction> i.e. optional PLUS or MINUS sign in front, with optional DECIMAL character (default '.'), which may be embedded, leading or trailing. No spaces are allowed between the various elements. All of these are valid examples: +47, 23, -22, +4.5, 1.3, -0.7, +.15, .4, -.05 Accuracy Accuracy assessments may be provided or defaulted for any survey leg. These determine the distribution of loop closure errors over the legs in the loop. See *SD for more information. Cavern Commands Commands in .svx files are introduced by an asterisk (by default - this can be changed using the set command). The commands are documented in a common format: Command Name Syntax Example Validity Description Caveats See Also ALIAS Syntax *alias station <alias> [<target>] Example *begin parsons_nose *alias station - .. 1 2 12.21 073 -12 2 - 4.33 011 +02 2 - 1.64 180 +03 2 3 6.77 098 -04 *end parsons_nose Description *alias allows you to map a station name which appears in the survey data to a different name internally. At present, you can only create an alias of '-' to '..', which is intended to support the pocket topo style notation of '-' being a splay to an anonymous point on the cave wall. And you can unalias '-' with '*alias station -'. Aliases are scoped by *begin/*end blocks - when a *end is reached, the aliases in force at the corresponding begin are restored. *alias was added in Survex 1.2.7. See Also *begin, *end BEGIN Syntax *begin [<survey>] Example *begin littlebit 1 2 10.23 106 -02 2 3 1.56 092 +10 *end littlebit ; length of leg across shaft estimated *begin *sd tape 2 metres 9 10 6. 031 -07 *end Description *begin stores the current values of the current settings such as instrument calibration, data format, and so on. These stored values are restored after the corresponding *end. If a survey name is given, this is used inside the *begin/*end block, and the corresponding *end should have the same survey name. *begin/*end blocks may be nested to indefinite depth. See Also *end, *prefix CALIBRATE Syntax *calibrate <quantity list> <zero error> [<scale>] *calibrate <quantity list> <zero error> <units> [<scale>] *calibrate default Example *calibrate tape +0.3 Description *calibrate is used to specify instrument calibrations, via a zero error and an optional scale factor (which defaults to 1.0 if not specified). Without an explicit calibration the zero error is 0.0 and the scale factor is 1.0. <quantity list> is one or more of: QuantityAliases LENGTHTAPE BEARINGCOMPASS GRADIENTCLINO BACKLENGTHBACKTAPE BACKBEARINGBACKCOMPASS BACKGRADIENTBACKCLINO COUNTCOUNTER LEFT RIGHT UPCEILING DOWNFLOOR DEPTH DECLINATION EASTINGDX NORTHINGDY ALTITUDEDZ DECLINATION The specified calibration is applied to each quantity in the list, which is handy if you use the same instrument to measure several things, for example: *calibrate left right up down +0.1 You need to be careful about the sign of the ZeroError. Survex follows the convention used with scientific instruments - the ZeroError is what the instrument reads when measuring a reading which should be zero. So for example, if your tape measure has the end missing, and you are using the 30cm mark to take all measurements from, then a zero distance would be measured as 30cm and you would correct this with: *CALIBRATE tape +0.3 If you tape was too long, starting at -20cm (it does happen!) then you can correct it with: *CALIBRATE tape -0.2 Note: ZeroError is irrelevant for Topofil counters and depth gauges since pairs of readings are subtracted. In the first form in the synopsis above, the zero error is measured by the instrument itself (e.g. reading off the number where a truncated tape now ends) and any scale factor specified applies to it, like so: Value = ( Reading - ZeroError ) * Scale (Scale defaults to 1.0) In the second form above (supported since Survex 1.2.21), the zero error has been measured externally (e.g. measuring how much too long your tape is with a ruler) - the units of the zero error are explicitly specified and any scale factor isn't applied to it: Value = ( Reading * Scale ) - ZeroError (Scale defaults to 1.0) If the scale factor is 1.0, then the two forms are equivalent, though they still allow you to differentiate between how the zero error has been determined. With older Survex versions, you would specify the magnetic declination (difference between True North and Magnetic North) by using *calibrate declination to set an explicit value (with no scale factor allowed). Since Survex 1.2.22, it's recommended to instead use the new *declination command instead - see the documentation of that command for more details. See Also *declination, *units CASE Syntax *case preserve|toupper|tolower Example *begin bobsbit ; Bob insists on using case sensitive station names *case preserve 1 2 10.23 106 -02 2 2a 1.56 092 +10 2 2A 3.12 034 +02 2 3 8.64 239 -01 *end bobsbit Description *case determines how the case of letters in survey names is handled. By default all names are forced to lower case (which gives a case insensitive match, but you can tell cavern to force to upper case, or leave the case as is (in which case '2a' and '2A' will be regarded as different). See Also *truncate COPYRIGHT Syntax *copyright <date> <text> Example *begin littlebit *copyright 1983 CUCC 1 2 10.23 106 -02 2 3 1.56 092 +10 *end littlebit Validity valid at the start of a *begin/*end block. Description *copyright allows the copyright information to be stored in a way that can be automatically collated. See Also *begin CS Syntax *cs [out] <coordinate system> Example *cs UTM60S *fix beehive 313800 5427953 20 ; Output in the coordinate system used in the Totes Gebirge in Austria *cs out custom "+proj=tmerc +lat_0=0 +lon_0=13d20 +k=1 +x_0=0 +y_0=-5200000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232" Description *cs allows the coordinate systems used for fixed points and for processed survey data to be specified. The "input" coordinate system is set with *cs and you can change it between fixed points if you have some fixed points in different coordinate systems to others. The "output" coordinate system is set with *cs out and is what the survey data is processed in and the coordinate system used for resultant .3d file. The output coordinate system must be in metres with axis order (East, North, Up), so for example *cs out long-lat isn't valid. *cs was added in Survex 1.2.14, but handling of fixed points specified with latitude and longitude didn't work until 1.2.21. Also *fix with standard deviations specified also didn't work until 1.2.21. The currently supported coordinate systems are: CUSTOM followed by a PROJ string (like in the example above). EPSG: followed by a positive integer code. EPSG codes cover most coordinate systems in use, and PROJ supports many of these. The website https://epsg.io/ is a useful resource for finding the EPSG code you want. For example, EPSG:4167 is NZGD2000. Supported since Survex 1.2.15. ESRI: followed by a positive integer code. ESRI codes are used by ArcGIS to specify coordinate systems (in a similar way to EPSG codes), and PROJ supports many of them. Supported since Survex 1.2.15. EUR79Z30 for UTM zone 30, EUR79 datum. Supported since Survex 1.2.15. IJTSK for the modified version of the Czechoslovak S-JTSK system where the axes point East and North. Supported since Survex 1.2.15. IJTSK03 for a variant of IJTSK. Supported since Survex 1.2.15. JTSK for the Czechoslovak S-JTSK system. Its axes point West and South, so it's not supported as an output coordinate system. Supported since Survex 1.2.16. JTSK03 for a variant of JTSK. Supported since Survex 1.2.16. LONG-LAT for longitude/latitude. The WGS84 datum is assumed. NB *fix expects the coordinates in the order x,y,z which means longitude (i.e. E/W), then latitude (i.e. N/S), then altitude. Supported since Survex 1.2.15. OSGB: followed by a two letter code for the UK Ordnance Survey National Grid. The first letter should be 'H', 'N', 'O', 'S' or 'T'; the second any letter except 'I'. For example, OSGB:SD. Supported since Survex 1.2.15. S-MERC for the "Web Mercator" spherical mercator projection, used by online map sites like OpenStreetMap, Google maps, Bing maps, etc. Supported since Survex 1.2.15. UTM followed by a zone number (1-60), optionally followed by "N" or "S" (default is North). The WGS84 datum is assumed. By default, Survex works in an unspecified coordinate system (and this was the only option before *cs was added). However, it's useful for the coordinate system which the processed survey data is in to be specified if you want to use the processed data in ways which required knowing the coordinate system (such as exporting a list of entrances for use in a GPS). You can now do this by using "*cs out". It is also useful to be able to take coordinates for fixed points in whatever coordinate system you receive them in and put them directly into Survex, rather than having to convert with an external tool. For example, you may have your GPS set to show coordinates in UTM with the WGS84 datum, even though you want the processed data to be in some local coordinate system. And someone else may provide GPS coordinates in yet another coordinate system. You just need to set the appropriate coordinate system with "*cs" before each group of "*fix" commands in a particular coordinate system. If you're going to make use of "*cs", then the coordinate system must be specified for everything, so a coordinate system must be in effect for all "*fix" commands, and you must set the output coordinate system before any points are fixed. Also, if "*cs" is in use, then you can't omit the coordinates in a "*fix" command, and a fixed point won't be invented if none exists. If you use "*cs out" more than once, the second and subsequent commands are silently ignored - this makes it possible to combine two datasets with different "*cs out" settings without having to modify either of them. Something to be aware of with "*cs" is that altitudes are currently assumed to be "height above the ellipsoid", whereas GPS units typically give you "height above sea level", or more accurately "height above a particular geoid". This is something we're looking at how best to address, but you shouldn't need to worry about it if your fixed points are in the same coordinate system as your output, or if they all use the same ellipsoid. For a more detailed discussion of this, please see: http://expo.survex.com/handbook/survey/coord.htm See Also *fix DATA Syntax *data <style> <ordering> *data Example *data normal from to compass tape clino *data normal station ignoreall newline compass tape clino Description <style> = DEFAULT|NORMAL|DIVING|CARTESIAN|TOPOFIL|CYLPOLAR|NOSURVEY|PASSAGE <ordering> = ordered list of instruments - which are valid depends on the style. In Survex 1.0.2 and later, TOPOFIL is simply a synonym for NORMAL, left in to allow older data to be processed without modification. Use the name NORMAL by preference. There are two variants of each style - interleaved and non-interleaved. Non-interleaved is "one line per leg", interleaved has a line for the data shared between two legs (e.g. STATION=FROM/TO, DEPTH=FROMDEPTH/TODEPTH, COUNT=FROMCOUNT/TOCOUNT). Note that not all readings that can be shared have to be, for example here the to/from station name is shared but the depth gauge readings aren't: *data diving station newline fromdepth compass tape todepth In addition, interleaved data can have a DIRECTION reading, which can be "F" for a foresight or "B" for a backsight (meaning the direction of the leg is reversed). In interleaved data, a blank line (one which contains only characters which are set as BLANK) ends the current traverse so can be used to handle branches in the survey, e.g.: *data normal station newline tape compass clino 1 9.34 087 -05 2 ; single leg up unexplored side passage 4.30 002 +06 3 2 ; and back to the main package 6.29 093 -02 4 In data styles which include a TAPE reading (i.e. NORMAL, DIVING, and CYLPOLAR data styles), TAPE may be replaced by FROMCOUNT/TOCOUNT (or COUNT in interleaved data) to allow processing of surveys performed with a Topofil instead of a tape. In Survex 1.2.44 and later, you can use *data without any arguments to keep the currently set data style, but resetting any state. This is useful when you're entering passage tubes with branches - see the description of the "PASSAGE" style below. (This feature was originally added in 1.2.31, but was buggy until 1.2.44 - any data up to the next *data gets quietly ignored). DEFAULT Select the default data style and ordering (NORMAL style, ordering: from to tape compass clino). NORMAL The usual tape/compass/clino centreline survey. For non-interleaved data the allowed readings are: FROM TO TAPE COMPASS CLINO BACKCOMPASS BACKCLINO; for interleaved data the allowed readings are: STATION DIRECTION TAPE COMPASS CLINO BACKCOMPASS BACKCLINO. The CLINO/BACKCLINO reading is not required - if it's not given, the vertical standard deviation is taken to be proportional to the tape measurement. Alternatively, individual clino readings can be given as OMIT (default "-") which allows for data where only some clino readings are missing. E.g.: *data normal from to compass clino tape 1 2 172 -03 12.61 *data normal station newline direction tape compass clino 1 F 12.61 172 -03 2 *data normal from to compass clino fromcount tocount 1 2 172 -03 11532 11873 *data normal station count newline direction compass clino 1 11532 F 172 -03 2 11873 DIVING An underwater survey where the vertical information is from a diver's depth gauge. This style can also be also used for an above-water survey where the altitude is measured with an altimeter. DEPTH is defined as the altitude (Z) so increases upwards by default. So for a diver's depth gauge, you'll need to use *CALIBRATE with a negative scale factor (e.g. *calibrate depth 0 -1). For non-interleaved data the allowed readings are: FROM TO TAPE COMPASS CLINO BACKCOMPASS BACKCLINO FROMDEPTH TODEPTH DEPTHCHANGE (the vertical can be given as readings at each station, (FROMDEPTH/TODEPTH) or as a change along the leg (DEPTHCHANGE)). Survex 1.2.20 and later allow an optional CLINO and/or BACKCLINO reading in DIVING style. At present these extra readings are checked for syntactic validity, but are otherwise ignored. The intention is that a future version will check them against the other readings to flag up likely blunders, and average with the slope data from the depth gauge and tape reading. For interleaved data the allowed readings are: STATION DIRECTION TAPE COMPASS BACKCOMPASS DEPTH DEPTHCHANGE. (the vertical change can be given as a reading at the station (DEPTH) or as a change along the leg (DEPTHCHANGE)). *data diving from to tape compass fromdepth todepth 1 2 14.7 250 -20.7 -22.4 *data diving station depth newline tape compass 1 -20.7 14.7 250 2 -22.4 *data diving from to tape compass depthchange 1 2 14.7 250 -1.7 CARTESIAN Cartesian data style allows you to specify the (x,y,z) changes between stations. It's useful for digitising surveys where the original survey data has been lost and all that's available is a drawn up version. *data cartesian from to northing easting altitude 1 2 16.1 20.4 8.7 *data cartesian station newline northing easting altitude 1 16.1 20.4 8.7 2 Cartesian data are relative to true North not magnetic North (i.e. they are unaffected by *calibrate declination). CYLPOLAR A CYLPOLAR style survey is very similar to a diving survey, except that the tape is always measured horizontally rather than along the slope of the leg. *data cylpolar from to tape compass fromdepth todepth 1 2 9.45 311 -13.3 -19.0 *data cylpolar station depth newline tape compass 1 -13.3 9.45 311 2 -19.0 *data cylpolar from to tape compass depthchange 1 2 9.45 311 -5.7 NOSURVEY A NOSURVEY survey doesn't have any measurements - it merely indicates that there is line of sight between the pairs of stations. *data nosurvey from to 1 7 5 7 9 11 *data nosurvey station 1 7 5 *data nosurvey station 9 11 PASSAGE This survey style defines a 3D "tube" modelling a passage in the cave. The tube uses the survey stations listed in the order listed. It's permitted to use survey stations which aren't directly linked by the centre-line survey. This can be useful - sometimes the centreline will step sideways or up/down to allow a better sight for the next leg and you can ignore the extra station. You can also define tubes along unsurveyed passages, akin to "nosurvey" legs in the centreline data. This means that you need to split off side passages into separate tubes, and hence separate sections of passage data, starting with a new *data command. Simple example of how to use this data style (note the use of ignoreall to allow a free-form text description to be given): *data passage station left right up down ignoreall 1 0.1 2.3 8.0 1.4 Sticking out point on left wall 2 0.0 1.9 9.0 0.5 Point on left wall 3 1.0 0.7 9.0 0.8 Highest point of boulder Each *data passage data block describes a single continuous tube - to break a tube or to enter a side passage you need to have a second block. With Survex 1.2.30 and older, you had to repeat the entire *data passage line to start a new tube, but in Survex 1.2.31 and later, you can just use *data without any arguments. For example here the main passage is 1-2-3 and a side passage is 2-4: *data passage station left right up down ignoreall 1 0.1 2.3 8.0 1.4 Sticking out point on left wall 2 0.0 1.9 9.0 0.5 Point on left wall opposite side passage 3 1.0 0.7 9.0 0.8 Highest point of boulder ; If you're happy to require Survex 1.2.31 or later, you can just use ; "*data" here instead. *data passage station left right up down ignoreall 2 0.3 0.2 9.0 0.5 4 0.0 0.5 6.5 1.5 Fossil on left wall IGNORE skips a field (it may be used any number of times), and IGNOREALL may be used last to ignore the rest of the data line. LENGTH is a synonym for TAPE; BEARING for COMPASS; GRADIENT for CLINO; COUNT for COUNTER. The units of each quantity may be set with the UNITS command. DATE Syntax *date <year>[.<month>[.<day>]][-<year>[.<month>[.<day>]]] Example *date 2001 *date 2000.10 *date 1987.07.27 *date 1985.08.12-1985.08.13 Validity valid at the start of a *begin/*end block. Description *date specifies the date that the survey was done. A range of dates can be specified (useful for overnight or multi-day surveying trips). See Also *begin, *instrument, *team DECLINATION Syntax *declination auto <x> <y> <z> *declination <declination> <units> Description The *declination command is the modern way to specify magnetic declinations in Survex. Magnetic declination is the difference between Magnetic North and True North. It varies over time as the Earth's magnetic field moves, and also with location. Compass bearings are measured relative to Magnetic North - adding the magnetic declination gives bearings relative to True North. Prior to 1.2.22, *calibrate declination was used instead. If you use a mixture of *calibrate declination and *declination, they interact in the natural way - whichever was set most recently is used for each compass reading (taking into account survey scope). We don't generally recommend mixing the two, but it's useful to understand how they interact if you want to combine datasets using the old and new commands, and perhaps if you have a large existing dataset and want to migrate it without having to change everything at once. Note that the value specified uses the conventional sign for magnetic declination, unlike the old *calibrate declination which needed a value with the opposite sign (because *calibrate specifies a zero error), so take care when updating old data, or if you're used to the semantics of *calibrate declination. If you have specified the output coordinate system (using *cs out) then you can use *declination auto (and we recommend that you do). This is supported since Survex 1.2.21 and automatically calculates magnetic declinations based on the IGRF (International Geomagnetic Reference Field) model. A revised version of the IGRF model is usually issued every 5 years, and calculates values using a model based on observations for years before it is issued, and on predictions for 5 years after it is issued. Survex 1.2.43 updated to using version 13 in early 2020. The IGRF model takes a date and a location as inputs. Survex uses the specified date of the survey, and uses the "x y z" coordinates specified in the *declination auto command as the location in the current input coordinate system (as set by *cs). Most users can just specify a single representative location somewhere in the area of the cave. If you're not sure what to use pick some coordinates roughly in the middle of the bounding box of the cave - it doesn't need to be a fixed point or a known refindable location, though it can be if you prefer. For each *declination auto command cavern will (since Survex 1.4.2) report the range of calculated declination values and the dates at which the ends of the range were obtained, and also the grid convergence (which doesn't vary with time). This appears in the log - if you processed the data with aven you can view this by using "File->View Log". It looks like this: /home/ol/1623.svx:20: info: Declination: -0.4° @ 1977-07-02 / 3.8° @ 2018-07-21, grid convergence: -0.9° *declination auto 36670.37 83317.43 1903.97 You might wonder why Survex needs a representative location instead of calculating the magnetic declination and grid convergence for the actual position of each survey station. The reason is that we need to adjust the compass bearings before we can solve the network to find survey station locations. Both magnetic declination and grid convergence don't generally vary significantly over the area of a typical cave system - if you are mapping a very large cave system, or caves over a wide area, or are working close to a magnetic pole or where the output coordinate system is rather distorted, then you can specify *declination auto several times with different representative locations for different areas of the cave system - the one currently in effect is used for each survey leg. Survex 1.2.27 and later also automatically correct for grid convergence (the difference between Grid North and True North) when *declination auto is in use, based on the same specified representative location. Generally it's best to specify a suitable output coordinate system, and use *declination auto so Survex corrects for magnetic declination and grid convergence for you. Then Aven knows how to translate coordinates to allow export to formats such as GPX and KML, and to overlay terrain data. If you don't specify an output coordinate system, but fix one or more points then Survex works implicitly in the coordinate system your fixed points were specified in. This mode of operation is provided for compatibility with datasets from before support for explicit coordinate systems was added to Survex - it's much better to specify the output coordinate system as above. But if you have a survey of a cave which isn't connected to any known fixed points then you'll need to handle it this way, either fixing an entrance to some arbitrary coordinates (probably (0,0,0)) or letting Survex pick a station as the origin. If the survey was all done in a short enough period of time that the magnetic declination won't have changed significantly, you can just ignore it and Grid North in the implicit coordinate system will be Magnetic North at the time of the survey. If you want to correct for magnetic declination, you can't use *declination auto because the IGRF model needs the real world coordinates, but you can specify literal declination values for each survey using *declination <declination> <units>. Then Grid North in the implicit coordinate system is True North. See Also *calibrate DEFAULT Syntax *default <settings list>|all Description The valid settings are CALIBRATE, DATA, and UNITS. *default restores defaults for given settings. This command is deprecated - you should instead use: *calibrate default, *data default, *units default. See Also *calibrate, *data, *units END Syntax *end [<survey>] Validity valid for closing a block started by *begin in the same file. Description Closes a block started by *begin. See Also *begin ENTRANCE Syntax *entrance <station> Example *entrance P163 Description *entrance sets the entrance flag for a station. This information is used by aven to allow entrances to be highlighted. EQUATE Syntax *equate <station> <station>... Example *equate chosspot.1 triassic.27 Description *equate specifies that the station names in the list refer to the same physical survey station. An error is given if there is only one station listed. See Also *infer equates EXPORT Syntax *export <station>... Example *export 1 6 17 Validity valid at the start of a *begin/*end block. Description *export marks the stations named as referable to from the enclosing survey. To be able to refer to a station from a survey several levels above, it must be exported from each enclosing survey. See Also *begin, *infer exports FIX Syntax *fix <station> [reference] [ <x> <y> <z> [ <x std err> <y std err> <z std err> [ <cov(x,y)> <cov(y,z)> <cov(z,x)> ] ] ] Example *fix entrance.0 32768 86723 1760 *fix KT114_96 reference 36670.37 83317.43 1903.97 Description *fix fixes the position of <station> at the given coordinates. If you haven't specified the coordinate system with "*cs", you can omit the position and it will default to (0,0,0). The standard errors default to zero (fix station exactly). cavern will give an error if you attempt to fix the same survey station twice at different coordinates, or a warning if you fix it twice with matching coordinates. You can also specify just one standard error (in which case it is assumed equal in X, Y, and Z) or two (in which case the first is taken as the standard error in X and Y, and the second as the standard error in Z). If you have covariances for the fix, you can also specify these - the order is cov(x,y) cov(y,z) cov(z,x). If you've specified a coordinate system (see *cs) then that determines the meaning of X, Y and Z (if you want to specify the units for altitude, note that using a PROJ string containing +vunits allows this - e.g. +vunits=us-ft for US survey feet). If you don't specify a coordinate system, then the coordinates must be in metres. The standard deviations must always be in metres (and the covariances in metres squared). You can fix as many stations as you like - just use a *fix command for each one. Cavern will check that all stations are connected to at least one fixed point so that co-ordinates can be calculated for all stations. By default cavern will warn about stations which have been FIX-ed but not used otherwise, as this might be due to a typo in the station name. This is unhelpful if you want to include a standard file of benchmarks, some of which won't be used. In this sort of situation, specify "REFERENCE" after the station name in the FIX command to suppress this warning for a particular station. X is Easting, Y is Northing, and Z is altitude. This convention was chosen since on a map, the horizontal (X) axis is usually East, and the vertical axis (Y) North. The choice of altitude (rather than depth) for Z is taken from surface maps, and makes for less confusion when dealing with cave systems with more than one entrance. It also gives a right-handed set of axes. FLAGS Syntax *flags <flags> Example *flags duplicate not surface Description *flags updates the current flag settings. Flags not mentioned retain their previous state. Valid flags are DUPLICATE, SPLAY, and SURFACE, and a flag may be preceded with NOT to turn it off. Survey legs marked SURFACE are hidden from plots by default, and not included in cave survey length calculations. Survey legs marked as DUPLICATE or SPLAY are also not included in cave survey length calculations; legs marked SPLAY are ignored by the extend program. DUPLICATE is intended for the case when if you have two different surveys along the same section of passage (for example to tie two surveys into a permanent survey station); SPLAY is intended for cases such as radial legs in a large chamber. See Also *begin INCLUDE Syntax *include <filename> Example *include mission *include "the pits" Description *include processes <filename> as if it were inserted at this place in the current file. (i.e. The current settings are carried into <filename>, and any alterations to settings in <filename> will be carried back again). There's one exception to this (for obscure historical reasons) which is that the survey prefix is restored upon return to the original file. Since *begin and *end nesting cannot cross files, this can only make a difference if you use the deprecated *prefix command. If <filename> contains spaces, it must be enclosed in quotes. An included file which does not have a complete path is resolved relative to the directory which the parent file is in (just as relative HTML links do). Cavern will try adding a .svx extension, and will also try translating "\" to "/". And as a last resort, it will try a lower case version of the filename (so if you use Unix and someone sends you a DOS/Windows dataset with mismatched case, unzip it with "unzip -L" and UNIX cavern will process it). The depth to which you can nest include files may be limited by the operating system you use. Usually the limit is fairly high (>30), but if you want to be able to process your dataset with Survex on any supported platform, it would be prudent not to go overboard with nested include files. INFER Syntax *infer plumbs on|off *infer equates on|off *infer exports on|off Description "*infer plumbs on" tells cavern to interpret gradients of +/- 90 degrees as UP/DOWN (so it will not apply the clino correction to them). This is useful when the data has not been converted to have UP and DOWN in it. "*infer equates on" tells cavern to interpret a leg with a tape reading of zero as a *equate. this prevents tape corrections being applied to them. "*infer exports on" is necessary when you have a dataset which is partly annotated with *export. It tells cavern not to complain about missing *export commands in part of the dataset. Also stations which were used to join surveys are marked as exported in the 3d file. INSTRUMENT Syntax *instrument <instrument> <identifier> Example *instrument compass "CUCC 2" *instrument clino "CUCC 2" *instrument tape "CUCC Fisco Ranger open reel" Validity valid at the start of a *begin/*end block. Description *instrument specifies the particular instruments used to perform a survey. See Also *begin, *date, *team PREFIX Syntax *prefix <survey> Example *prefix flapjack Description *prefix sets the current survey. Caveats *prefix is deprecated - you should use *begin and *end instead. See Also *begin, *end REF Syntax *ref <string> Example *ref "survey folder 2007#12" Validity valid at the start of a *begin/*end block. Description *ref allows you to specify a reference. If the reference contains spaces, you must enclose it in double quotes. Survex doesn't try to interpret the reference in any way, so it's up to you how you use it - for example it could specify where the original survey notes can be found. *ref was added in Survex 1.2.23. See Also *begin, *date, *instrument, *team REQUIRE Syntax *require <version> Example *require 0.98 Description *require checks that the version of cavern in use is at least <version> and stops with an error if not. So if your dataset requires a feature introduced in a particular version, you can add a *require command and users will know what version they need to upgrade to, rather than getting an error message and having to guess what the real problem is. SD Syntax *sd <quantity list> <standard deviation> Example *sd tape 0.15 metres Description *sd sets the standard deviation of a measurement. <quantity> is one of (each group gives alternative names for the same quantity): TAPE, LENGTH BACKTAPE, BACKLENGTH (added in Survex 1.2.25) COMPASS, BEARING BACKCOMPASS, BACKBEARING CLINO, GRADIENT BACKCLINO, BACKGRADIENT COUNTER, COUNT DEPTH DECLINATION DX, EASTING DY, NORTHING DZ, ALTITUDE LEFT RIGHT UP, CEILING DOWN, FLOOR LEVEL PLUMB POSITION <standard deviation> must include units and thus is typically "0.05 metres", or "0.02 degrees". See *units below for full list of valid units. To utilise this command fully you need to understand what a standard deviation is. It gives a value to the 'spread' of the errors in a measurement. Assuming that these are normally distributed we can say that 95.44% of the actual lengths will fall within two standard deviations of the measured length. i.e. a tape SD of 0.25 metres means that the actual length of a tape measurement is within + or - 0.5 metres of the recorded value 95.44% of the time. So if the measurement is 7.34m then the actual length is very likely to be between 6.84m and 7.84m. This example corresponds to BCRA grade 3. Note that this is just one interpretation of the BCRA standard, taking the permitted error values as 2SD 95.44% confidence limits. If you want to take the readings as being some other limit (e.g. 1SD = 68.26%) then you will need to change the BCRA3 and BCRA5 files accordingly. This issue is explored in more detail in various surveying articles. See Also *units SET Syntax *set <item> <character list> Example *set blank x09x20 *set decimal , Note that you need to eliminate comma from being a blank before setting it as a decimal - otherwise the comma in "*set decimal ," is parsed as a blank, and you set decimal to not have any characters representing it. Description *set sets the specified <item> to the character or characters given in <character list>. The example sets the decimal separator to be a comma. xAB means the character with hex value AB. Eg x20 is a space. The complete list of items that can be set, the defaults (in brackets), and the meaning of the item, is: BLANK (x09x20,) Separates fields COMMENT (;) Introduces comments DECIMAL (.) Decimal point character EOL (x0Ax0D) End of line character KEYWORD (*) Introduces keywords MINUS (-) Indicates negative number NAMES (_-) Non-alphanumeric chars permitted in station names (letters and numbers are always permitted). OMIT (-) Contents of field omitted (e.g. in plumbed legs) PLUS (+) Indicates positive number ROOT (\) Prefix in force at start of current file (use of ROOT is deprecated) SEPARATOR (.) Level separator in prefix hierarchy The special characters may not be alphanumeric. SOLVE Syntax *solve Example *include 1997data *solve *include 1998data Description Distributes misclosures around any loops in the survey and fixes the positions of all existing stations. This command is intended for situations where you have some new surveys adding extensions to an already drawn-up survey which you wish to avoid completely redrawing. You can read in the old data, use *SOLVE to fix it, and then read in the new data. Then old stations will be in the same positions as they are in the existing drawn up survey, even if new loops have been formed by the extensions. TEAM Syntax *team <person> [<role>...] Example *team "Nick Proctor" compass clino tape *team "Anthony Day" notes pictures tape Validity valid at the start of a *begin/*end block. Description *team specifies the people involved in a survey and optionally what role or roles they filled during that trip. Unless the person is only identified by one name you need to put double quotes around their name. See Also *begin, *date, *instrument TITLE Syntax *title <title> Example *title Dreamtime *title "Mission Impossible" Description *title allows you to set the descriptive title for a survey. If the title contains spaces, you need to enclose it in quotes (""). If there is no *title command, the title defaults to the survey name given in the *begin command. TRUNCATE Syntax *truncate <length>|off Description Station names may be of any length in Survex, but some other (mostly older) cave surveying software only regard the first few characters of a name as significant (e.g. "entran" and "entrance" might be treated as the same). To facilitate using data imported from such a package Survex allows you to truncate names to whatever length you want (but by default truncation is off). Figures for the number of characters which are significant in various software packages: Compass currently has a limit of 12, CMAP has a limit of 6, Smaps 4 had a limit of 8, Surveyor87/8 used 8. Survex itself used 8 per prefix level up to version 0.41, and 12 per prefix level up to 0.73 (more recent versions removed this rather archaic restriction). See Also *case UNITS Syntax *units <quantity list> [<factor>] <unit> *units default Example *units tape metres *units compass backcompass clino backclino grads *units dx dy dz 1000 metres ; data given as kilometres *units left right up down feet Description <quantity> is one of the following (grouped entries are just alternative names for the same thing): TAPE/LENGTH, BACKTAPE/BACKLENGTH (added in Survex 1.2.25), COMPASS/BEARING, BACKCOMPASS/BACKBEARING, CLINO/GRADIENT, BACKCLINO/BACKGRADIENT, COUNTER/COUNT, DEPTH, DECLINATION, DX/EASTING, DY/NORTHING, DZ/ALTITUDE, LEFT, RIGHT, UP/CEILING, DOWN/FLOOR Changes current units of all the quantities listed to [<factor>] <unit>. Note that quantities can be expressed either as the instrument (e.g. COMPASS) or the measurement (e.g. BEARING). <factor> allows you to easy specify situations such as measuring distance with a diving line knotted every 10cm (*units distance 0.1 metres). If <factor> is omitted it defaults to 1.0. If specified, it must be non-zero. Valid units for listed quantities are: TAPE/LENGTH, BACKTAPE/BACKLENGTH, COUNTER/COUNT, DEPTH, DX/EASTING, DY/NORTHING, DZ/ALTITUDE in YARDS|FEET|METRIC|METRES|METERS (default: METRES) CLINO/GRADIENT, BACKCLINO/BACKGRADIENT in DEGS|DEGREES|GRADS|MINUTES|PERCENT|PERCENTAGE (default: DEGREES) COMPASS/BEARING, BACKCOMPASS/BACKBEARING, DECLINATION in DEGS|DEGREES|GRADS|MINUTES|QUADS|QUADRANTS (default: DEGREES) (360 degrees = 400 grads) QUADRANTS are a style of bearing used predominantly in land survey, and occasionally in survey with handheld instruments. All bearings are N or S, a numeric from 0 to 90, followed by E or W. For example S34E to refer to 146 degrees, or 34 degrees in the SE quadrant. In this format, exact cardinal directions may be simply alphabetic. E.g. N is equivalent to N0E and E is equivalent to N90E. This unit was added in Survex 1.2.44. Survex has long support MILS as an alias for GRADS. However, this seems to be a bogus definition of a "mil" which is unique to Survex (except that Therion has since copied it) - there are several different definitions of a "mil" but they vary from 6000 to 6400 in a full circle, not 400. Because of this we deprecated MILS in Survex 1.2.38 - you can still process data which uses them but you'll now get a warning, and we recommend you update your data. For example, if your data uses *units compass mils then you need to determine what the intended units actually are. If there are 400 in a full circle, then instead use this (which will work with older Survex versions too): *units compass grads If the units are actually mils, you can specify that in terms of degrees. For example, for NATO mils (6400 in a full circle) you can use this (which also works with older Survex versions): *units compass 0.05625 degrees See Also *calibrate Contents of <filename>.svx</filename> files: How do I? Here is some example Survex data (a very small cave numbered 1623/163): 2 1 26.60 222 17.5 2 3 10.85 014 7 2 4 7.89 254 -11 4 5 2.98 - DOWN 5 6 9.29 271 -28.5 You can vary the data ordering. The default is: from-station to-station tape compass clino This data demonstrates a number of useful features of Survex: Legs can be measured either way round, which allows the use of techniques like "leap-frogging" (which is where legs alternate forwards and backwards). Also notice that there is a spur in the survey (2 to 3). You do not need to specify this specially. Survex places few restrictions on station naming (see "Survey Station Names" in the previous section), so you can number the stations as they were in the original survey notes. Although not apparent from this example, there is no requirement for each leg to connect to an existing station. Survex can accept data in any order, and will check for connectedness once all the data has been read in. Each survey is also likely to have other information associated with it, such as instrument calibrations, etc. This has been omitted from this example to keep things simple. Most caves will take more than just one survey trip to map. Commonly the numbering in each survey will begin at 1, so we need to be able to tell apart stations with the same number in different surveys. To accomplish this, Survex has a very flexible system of hierarchical prefixes. All you need do is give each survey a unique name or number, and enter the data like so: *begin 163 *export 1 2 1 26.60 222 17.5 2 3 10.85 014 7 2 4 7.89 254 -11 4 5 2.98 - DOWN 5 6 9.29 271 -28.5 *end 163 Survex will name the stations by attaching the current prefix. In this case, the stations will be named 163.1, 163.2, etc. We have a convention with the CUCC Austria data that the entrance survey station of a cave is named P<cave number>, P163 in this case. We can accomplish this like so: *equate P163 163.1 *entrance P163 *begin 163 *export 1 2 1 26.60 222 17.5 2 3 10.85 014 7 2 4 7.89 254 -11 4 5 2.98 - DOWN 5 6 9.29 271 -28.5 *end 163 Specify surface survey data Say you have 2 underground surveys and 2 surface ones with 2 fixed reference points. You want to mark the surface surveys so that their length isn't included in length statistics, and so that Aven knows to display them differently. To do this you mark surface data with the "surface" flag - this is set with "*flags surface" like so: ; fixed reference points *fix fix_a 12345 56789 1234 *fix fix_b 23456 67890 1111 ; surface data (enclosed in *begin ... *end to stop the *flags command ; from "leaking" out) *begin *flags surface *include surface1 *include surface2 *end ; underground data *include cave1 *include cave2 You might also have a survey which starts on the surface and heads into a cave. This can be easily handled too - here's an example which goes in one entrance, through the cave, and out of another entrance: *begin BtoC *title "161b to 161c" *date 1990.08.06 ; trip 1990-161c-3 in 1990 logbook *begin *flags surface 02 01 3.09 249 -08.5 02 03 4.13 252.5 -26 *end 04 03 6.00 020 +37 04 05 3.07 329 -31 06 05 2.67 203 -40.5 06 07 2.20 014 +04 07 08 2.98 032 +04 08 09 2.73 063.5 +21 09 10 12.35 059 +15 *begin *flags surface 11 10 4.20 221.5 -11.5 11 12 5.05 215 +03.5 11 13 6.14 205 +12.5 13 14 15.40 221 -14 *end *end BtoC Note that to avoid needless complication, Survex regards each leg as being either "surface" or "not surface" - if a leg spans the boundary you'll have to call it one or the other. It's good surveying practice to deliberately put a station at the surface/underground interface (typically the highest closed contour or drip line) so this generally isn't an onerous restriction. Specify the ordering and type of data The *DATA command is used to specify the data style, and the order in which the readings are given. Deal with Plumbs or Legs Across Static Water Plumbed legs should be given using 'UP' or 'DOWN' in place of the clino reading and a dash (or a different specified 'OMIT' character) in place of the compass reading. This distinguishes them from legs measured with a compass and clino. Here's an example: 1 2 21.54 - UP 3 2 7.36 017 +17 3 4 1.62 091 +08 5 4 10.38 - DOWN U/D or +V/-V may be used instead of UP/DOWN; the check is not case sensitive. Legs surveyed across the surface of a static body of water where no clino reading is taken (since the surface of the water can be assumed to be flat) can be indicated by using LEVEL in place of a clino reading. This prevents the clino correction being applied. Here's an example: 1 2 11.37 190 -12 3 2 7.36 017 LEVEL 3 4 1.62 091 LEVEL Specify a BCRA grade The *SD command can be used to specify the standard deviations of the various measurements (tape, compass, clino, etc). Examples files are supplied which define BCRA Grade 3 and BCRA Grade 5 using a number of *sd commands. You can use these by simply including them at the relevant point, as follows: *begin somewhere ; This survey is only grade 3 *include grade3 2 1 26.60 222 17.5 2 3 10.85 014 7 ; etc *end somewhere The default values for the standard deviations are those for BCRA grade 5. Note that it is good practice to keep the *include Grade3 within *Begin and *End commands otherwise it will apply to following survey data, which may not be what you intended. Specify different accuracy for a leg For example, suppose the tape on the plumbed leg in this survey is suspected of being less accurate than the rest of the survey because the length was obtained by measuring the length of the rope used to rig the pitch. We can set a higher sd for this one measurement and use a *begin/*end block to make sure this setting only applies to the one leg: 2 1 26.60 222 17.5 2 3 10.85 014 7 2 4 7.89 254 -11 *begin ; tape measurement was taken from the rope length *sd tape 0.5 metres 4 5 34.50 - DOWN *end 5 6 9.29 271 -28.5 Enter Repeated Readings If your survey data contains multiple versions of each leg (for example, pockettopo produces such data), then provided these are adjacent to one another Survex 1.2.17 and later will automatically average these and treat them as a single leg. Enter Radiolocation Data This is done by using the *SD command to specify the appropriate errors for the radiolocation `survey leg' so that the loop closure algorithm knows how to distribute errors if it forms part of a loop. The best approach for a radiolocation where the underground station is vertically below the surface station is to represent it as a plumbed leg, giving suitable SDs for the length and plumb angle. The horizontal positioning of this is generally quite accurate, but the vertical positioning may be much less well known. E.g: we have a radiolocation of about 50m depth +/- 20m and horizontal accuracy of +/- 8m. Over 50m the +/-8m is equivalent to an angle of 9 degrees, so that is the expected plumb error. 20m is the expected error in the length. To get the equivalent SD we assume that 99.74% of readings will be within 3 standard deviations of the error value. Thus we divide the expected errors by 3 to get the SD we should specify: *begin *sd length 6.67 metres *sd plumb 3 degrees surface underground 50 - down *end We wrap the radiolocation leg in a *begin/*end block to make sure that the special *sd settings only apply to this one leg. For more information on the expected errors from radiolocations see Compass Points Issue 10, available online at http://www.chaos.org.uk/survex/cp/CP10/CPoint10.htm Enter Diving Data Surveys made underwater using a diver's depth gauge can be processed - use the *Data command to specify that the following data is of this type. Enter Theodolite data Theodolite data with turned angles is not yet explicitly catered for, so for now you will need to convert it into equivalent legs in another style - normal or cylpolar are likely to be the best choices. If there is no vertical info in your theodolite data then you should use the cylpolar style and use *sd command to specify very low accuracy (high SD) in the depth so that the points will move in the vertical plane as required if the end points are fixed or the survey is part of a loop. General: How do I? Create a new survey You simply create a text file containing the relevant survey data, using a text editor, and save it with a suitable name with a .svx extension. The easiest way is to look at some of the example data and use that as a template. Nearly all surveys will need a bit of basic info as well as the survey data itself: e.g. the date (*date), comments about where, what cave, a name for the survey (using *begin and *end), instrument error corrections etc. Here is a typical survey file: All the lines starting with ';' are comments, which are ignored by Survex. You can also see the use of 'DOWN' for plumbs, and *calibrate tape for dealing with a tape length error (in this case the end of the tape had fallen off so measurements were made from the 20cm point). *equate chaos.1 triassic.pt3.8 *equate chaos.2 triassic.pt3.9 *begin chaos *title "Bottomless Pit of Eternal Chaos to Redemption pitch" *date 1996.07.11 *team "Nick Proctor" compass clino tape *team "Anthony Day" notes pictures tape *instrument compass "CUCC 2" *instrument clino "CUCC 2" ;Calibration: Cairn-Rock 071 072 071, -22 -22 -22 ; Rock-Cairn 252 251 252, +21 +21 +21 ;Calibration at 161d entrance from cairn nr entrance to ;prominent rock edge lower down. This is different from ;calibration used for thighs survey of 5 July 1996 *export 1 2 ;Tape is 20cm too short *calibrate tape +0.2 1 2 9.48 208 +08 2 3 9.30 179 -23 3 4 2.17 057 +09 5 4 10.13 263 +78 5 6 2.10 171 -73 7 6 7.93 291 +75 *begin *calibrate tape 0 8 7 35.64 262 +86 ;true length measured for this leg *end 8 9 24.90 - DOWN 10 9 8.61 031 -43 10 11 2.53 008 -34 11 12 2.70 286 -20 13 12 5.36 135 +23 14 13 1.52 119 -12 15 14 2.00 036 +13 16 15 2.10 103 +12 17 16 1.40 068 -07 17 18 1.53 285 -42 19 18 5.20 057 -36 19 20 2.41 161 -67 20 21 27.47 - DOWN 21 22 9.30 192 -29 *end chaos Join surveys together Once you have more than one survey you need to specify how they link together. To do this use *export to make the stations to be joined accessible in the enclosing survey, then *equate in the enclosing survey to join them together. Organise my surveys This is actually a large subject. There are many ways you can organise your data using Survex. Take a look at the example dataset for some ideas of ways to go about it. Fixed Points (Control Points) The *fix command is used to specify fixed points (also know as control points). See the description of this command in the "Cavern Commands" section of this manual. More than one survey per trip Suppose you have two separate bits of surveying which were done on the same trip. So the calibration details, etc. are the same for both. But you want to give a different survey name to the two sections. This is easily achieved like so: *begin *calibrate compass 1.0 *calibrate clino 0.5 *begin altroute ; first survey *end altroute *begin faraway ; second survey *end faraway *end Add surface topography Survex 1.2.18 added support for loading terrain data and rendering it as a transparent surface. Currently the main documentation for this is maintained as a wiki page as this allows us to update it between releases. We recommend using this new code in preference, but previously the simplest approach was to generate a .svx file with the surface mesh in and display it with the survey data. It is possible to generate a mesh or contours overlaying your area by various means. NASA have made 1 arc-second (approximately 30m) terrain data available for the USA for some years, with only 3 arc-second data available for other countries. However, starting in 2014 they're gradually making 1 arc-second data available for more countries. If you want a better resolution that this, reading heights from the contours on a map is one approach. It's laborious, but feasible for a small area. Details of several methods are given in the BCRA Cave Surveying Group magazine Compass Points issue 11, available online at http://www.chaos.org.uk/survex/cp/CP11/CPoint11.htm#Art_5 If you're using another program to generate a .svx file for the surface mesh, it's best to use the NOSURVEY data style. Simply fix all the grid intersections at the correct coordinates and height, and put legs between them using the NOSURVEY style. Here's a grid of 4 squares and 9 intersections: *fix 00 000 000 1070 *fix 01 000 100 1089 *fix 02 000 200 1093 *fix 10 100 000 1062 *fix 11 100 100 1080 *fix 12 100 200 1089 *fix 20 200 000 1050 *fix 21 200 100 1065 *fix 22 200 200 1077 *data nosurvey station 00 01 02 10 11 12 20 21 22 00 10 20 01 11 21 02 12 22 This is far simpler than trying to create fake tape/compass/clino legs of the right length for each line in the mesh. It's also very fast to process with cavern. Overlay a grid Aven is able to display a grid, but this functionality isn't currently available in printouts. You can achieve a similar effect for now by creating a .svx file where the survey legs form a grid. Import data from other programs Survex supports a number of features to help with importing existing data. You can specify the ordering of items on a line using *Data (see Survex Keywords above), and you can specify the characters used to mean different things using *Set (see Survex Keywords above). The Ignore and Ignoreall options to the *Data command are often particularly useful, e.g. if you have a dataset with LRUD info or comments on the ends of lines. Changing Meanings of Characters e.g. if you have some data with station names containing the characters '?' and '+' (which are not permitted in a name by default) then the command: *SET NAMES ?+ specifies that question marks and plus signs are permitted in station names. A-Z, a-z, and 0-9 are always permitted. '_' and '-' are also permitted by default, but aren't in this example. If your data uses a comma ',' instead of a decimal point, then you use *SET DECIMAL , to specify that ',' is now the decimal separator instead of '.'. Export data from <Application>Survex</Application> See Rosetta Stal in the Related Tools section of the Survex web site. This is a utility written by Taco van Ieperen and Gary Petrie. Note though that this only supports a subset of the svx format, and only work on Microsoft Windows. The Survex support is limited and doesn't understand the more recently added commands. See errors and warnings that have gone off the screen When you run Survex it will process the specified survey data files in order, reporting any warnings and errors. If there are no errors, the output files are written and various statistics about the survey are displayed. If there are a lot of warnings or errors, they can scroll off the screen and it's not always possible to scroll back to read them. The easiest way to see all the text is to use cavern --log to redirect output to a .log file, which you can then inspect with a text editor. Create an Extended Elevation Use the Extend program. This takes .3d files and 'flattens' them. See 'Extend' for details. Working with Larry Fish's Compass Survex can read Compass survey data - both raw data (.DAT and .MAK files) and processed survey data (.PLT and .PLF files). You can even use *include compassfile.dat in a .svx file and it'll work! One point to note (this tripped us up!): station names in DAT files are case sensitive and so Survex reads DAT files with the equivalent of *case preserve. The default in SVX files is *case lower. So this won't work: *fix CE1 0 0 0 *include datfilewhichusesCE1.dat Because the CE1 in the *fix is actually interpreted as ce1. This is what you have to do: *begin *case preserve *fix CE1 0 0 0 *include datfilewhichusesCE1.dat *end Mailing List The best way to contact the authors and other Survex users is the Survex mailing list - for details visit: https://survex.com/maillist.html We'd be delighted to hear how you get on with Survex and welcome comments and suggestions for improvements. And we'd love you to contribute your skills to help make Survex even better. Point out areas of the documentation which could be made clearer, or sections which are missing entirely. Download test releases, try them out, and let us know if you find problems or have suggestions for improvements. If there's no translation to your language, you could provide one. Or if you're a developer, "Say it with code". There's plenty to do, so feel free to join in. Future Developments Now that Survex has reached version 1.0, we are continuing progress towards version 2, in a series of steps, evolving out of Survex 1.0. The GUI framework is being based on aven, with the printer drivers and other utility programs being pulled in and integrated into the menus. Aven is built on wxWidgets, which means that it can easily support Unix, Microsoft Windows, and macOS. More information on our plans is on the web site.
survex-1.4.4/doc/man_extend.sgml0000644000175000017500000000156114141575516013564 00000000000000 %entities; ]> &man.extend; See Also aven1, cavern1, diffpos1, dump3d1, sorterr1, survexport1 survex-1.4.4/doc/survex.7.in0000644000175000017500000000346414141575516012613 00000000000000.\" Hey, EMACS: -*- nroff -*- .\" @configure_input@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH SURVEX 7 "2015-03-06" "@PRETTYPACKAGE@ @VERSION@" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME survex \- cave survey software .SH DESCRIPTION \fBSurvex\fP is a suite of programs for processing, viewing, and printing cave survey data. .PP The individual programs each have a man page, and there's also a comprehensive manual, available in HTML, PDF, and plain text formats. The manual is located in \fI@PKGDOCDIR_EXPANDED@\fP and can also be found online at \fIhttps://survex.com/docs.html\fP .SH OPTIONS These programs follow the usual GNU command line syntax, with long options starting with two dashes (`--'). All commands support the options described below; for a complete description of options for a command, see its man page or the manual. .TP .B \-\-help Show summary of options. .TP .B \-\-version Output version information and exit. .SH SEE ALSO \fBThe Survex Manual\fP (located in \fI@PKGDOCDIR_EXPANDED@\fP), \fBaven\fP\fB(1)\fP, \fBcavern\fP\fB(1)\fP, \fBdiffpos\fP\fB(1)\fP, \fBdump3d\fP\fB(1)\fP, \fBextend\fP\fB(1)\fP, \fBsorterr\fP\fB(1)\fP, \fBsurvexport\fP\fB(1)\fP. .SH AUTHOR This manual page was written by Wookey and Olly Betts survex-1.4.4/doc/3dformat.htm0000644000175000017500000003246014205553447013011 00000000000000 Survex 3d Format Specification

Survex 3d Format Specification

If you're writing in C or C++ it's strongly recommended that you use the img routine provided with Survex to read and write 3d files. Doing so means that you can take advantage of any revisions to the 3d format by simply rebuilding your software with the updated img routines, rather than having to update your own code. It also allows you to read a sub-set of the data in the file, restricted by Survey prefix.

This document only describes the most recent revision of the 3d format (version 8) which is produced by versions from 1.2.7. A separate document describes older versions.

If you try to use this specification and find details which aren't spelled out clearly enough (or at all!) or any errors, please let us know. At least two people have successfully written code to read 3d files using this document, but that doesn't mean it can't be improved.

File Header

This consists of:

  • File ID: the string "Survex 3D Image File" followed by a linefeed (decimal 10, hex 0a). [Note: v0.01 files can have a carriage return before this and other linefeeds - this is a file format error in any other format version].
  • File format version: "v8" followed by a linefeed. Any future versions will be "v9", "v10", "v11", etc.
  • Assorted string metadata - the sublist below lists these, and they must appear in the order given, separated by zero bytes, with the end of the metadata marked by a linefeed. More items may be added, so ignore any additional ones which are present. Any trailing items with empty values can be omitted along with the separating zero byte before them.
    • Survey title: Human readable description of the data in the file. There's no length limit on this string.
    • Coordinate system: string describing the coordinate system in use which can be passed to PROJ. For a coordinate system with an EPSG code EPSG: followed by the code number can be used (we recommend using this if an EPSG code exists). Similarly, an ESRI code can be specified with ESRI: followed by the code number.
  • Timestamp: A string consisting of an '@' followed by a count of seconds since the start of 1970 in UTC ("Unix time_t") as a string (for example: "@1371300355"), followed by a linefeed. This is intended to be the time the file was generated, rather than the time the survey data was collected.
  • File-wide flags: a single byte. If bit 7 is set, this is an extended elevation. All other bits are reserved - set them to 0 when writing, and ignore them when reading.

Items

Following the header are a number of items. The last item must be a 0x00 byte when the current label is empty, which marks the end of the data. The first byte of an item is a code identifying what the item is:

Code Type Data Meaning Version
0x00 STYLE_NORMAL / STOP   Set style for following legs to tape, compass and clino.

If the style is already set to STYLE_NORMAL, this code signifies the end of the data in the 3d file.

≥8
0x01 STYLE_DIVING   Set style for following legs to diving data ≥8
0x02 STYLE_CARTESIAN   Set style for following legs to cartesian data ≥8
0x03 STYLE_CYLPOLAR   Set style for following legs to cylindrical polar data ≥8
0x04 STYLE_NOSURVEY   Set style for following legs to unsurveyed ≥8
0x05 - 0x0e     Reserved
0x0f MOVE <x> <y> <z> Set current position to the coordinates given. Coordinates are 4 byte little-endian signed integers representing values in centimetres (0.01 metres). ≥8
0x10 DATE   No survey date information was specified. ≥8
0x11 DATE <date> Set survey date of legs: date is a 2 byte little-endian unsigned integer counting days from the start of 1900. ≥8
0x12 DATE <date1><datespan> Set survey date of legs to a range: date1 is a 2 byte little-endian unsigned integer counting days since the start of 1900, and datespan is an unsigned byte counting days from date1. ≥8
0x13 DATE <date1><date2> Set survey date of legs to a range: date1, date2 are 2 byte little-endian unsigned integers counting days since the start of 1900. ≥8
0x14 - 0x1e     Reserved
0x1f ERROR <legs><length><E><H><V> Error information for the current traverse. <legs> is the number of legs. <length> is the total length of the traverse in cm (0.01m). E, H and V are the error and the horizontal and vertical components in cm. (All values are 4 byte little-endian signed integers) ≥8
0x20 - 0x2f     Reserved
0x30 - 0x31 XSECT <label> <L> <R> <U> <D> Modify the current label buffer according to <label> (see below for details). The updated contents of the label buffer give the full name of the survey station which these dimensions were measured at. Dimensions are 2 byte little-endian signed integers representing values in centimetres (0.01 metres). Omitted dimensions are encoded as 0xffff. Station flags are (N & 0x01): ≥8
Flag (N & 0x01) Meaning
0x01 Station is last one in this passage
0x32 - 0x33 XSECT <label> <L> <R> <U> <D> Modify the current label buffer according to <label> (see below for details). The updated contents of the label buffer give the full name of the survey station which these dimensions were measured at. Dimensions are 4 byte little-endian signed integers representing values in centimetres (0.01 metres). Omitted dimensions are encoded as 0xffffffff. ≥8
Flag (N & 0x01) Meaning
0x01 Station is last one in this passage
0x34 - 0x3f     Reserved
0x40 - 0x7f LINE <label> <x> <y> <z> Modify the current label buffer according to <label> (see below for details) - if <label> is omitted due to flag bit 0x20 being set then the current label buffer is used unmodified. The updated contents of the label buffer give the survey that the leg is in. Return leg from current position to coordinates given, and update current position to coordinates given. ≥8
Flag (N & 0x3f) Meaning
0x01 Leg is above ground
0x02 Leg duplicates data in another leg (e.g. resurvey along a passage to tie into a known station)
0x04 Leg is a splay shot in a chamber (radial shots from a central point)
0x08 Reserved
0x10 Reserved
0x20 No change to label (<label> omitted entirely) ≥8
0x80 - 0xff LABEL <label> <x> <y> <z> Modify the current label buffer according to <label> (see below for details). The updated contents of the label buffer give the survey station's full name. ≥8
The station flags are encoded in the bottom 7 bits of the item code:
Flag (N & 0x7f) Meaning
0x01 Station is on leg above ground
0x02 Station is on an underground leg (both may be true at an entrance)
0x04 Station is marked as an entrance (with *entrance)
0x08 Station is exported (i.e. may be used as a connection point to other surveys)
0x10 Station is a fixed point (control point)
0x20 Station is anonymous
0x40 Station is on the passage wall

A <label> value in the tabel above encodes modifications to the current label buffer, which consist of removing the last D bytes from the buffer, and then appending the next A bytes from the file to the buffer. D and A are encoded as follows:

  • Read a byte - if it is non-zero then: D = byte >> 4, A = byte & 0x0f
  • Otherwise (i.e. the first byte is zero):
    • Read a byte and:
      • If it is not 255 then D = byte
      • Otherwise, D = 4 byte unsigned integer read from the file
    • Read a byte and:
      • If it is not 255 then A = byte
      • Otherwise, A = 4 byte unsigned integer read from the file

Item order

  • A continuous section of centreline is defined by a <MOVE> item, followed by one or more <LINE> items.
  • <LABEL> items may appear anywhere in the file after the header, including within a <MOVE><LINE>... sequence.
  • Duplicate <LABEL> items are permitted provided they also have identical coordinate values. (The same coordinate values may also be shared by any number of different <LABEL> items).
  • Stations must be defined in a <LABEL> item before being referenced (e.g. in <XSECT> items)

Authors: Olly Betts and Mike McCombe, last updated: 2016-05-17

survex-1.4.4/doc/man_sorterr.sgml0000644000175000017500000000156114141575516013775 00000000000000 %entities; ]> &man.sorterr; See Also aven1, cavern1, diffpos1, dump3d1, extend1, survexport1 survex-1.4.4/doc/extend.sgml0000644000175000017500000000611414141575516012730 00000000000000 extend 1 extend produce an extended elevation from a .3d file extend --survey=SURVEY --specfile=ESPEC_FILE --show-breaks INPUT_3D_FILE OUTPUT_3D_FILE Description The extend program can also work on Compass .plt (as can aven and any other Survex program which reads .3d files). If no specfile is given, extend starts with the highest station marked as an entrance which has at least one underground survey leg attached to it. If there are no such stations, the highest deadend station in the survey (or the highest station if there are no deadends) is used. Extend puts the first station on the left, then folds each leg out individually to the right, breaking loops arbitrarily (usually at junctions). If the output filename is not specified, extend bases the output filename on the input filename, but ending "_extend.3d". For example, extend deep_pit.3d produces an extended elevation called deep_pit_extend.3d. If you pass then a leg flagged as "surface survey" will be added between each point at which a loop has been broken - this can be very useful for visualising the result in aven. This approach suffices for simple caves or sections of cave, but for more complicated situations human intervention is required. More complex sections of cave can be handled with a specfile giving directions to switch the direction of extension between left and right, to explicitly specify the start station, or to break the extension at particular stations or legs. The specfile is in a format similar to cavern's data format: ;This is a comment ; start the elevation at station entrance.a *start entrance.a ;this is a comment after a command ; start extending leftwards from station half-way-down.5 *eleft half-way-down.5 ; change direction of extension at further-down.8 *eswap further-down.8 ; extend right from further-down.junction, but only for ; the leg joining it to very-deep.1, other legs continuing ; as before *eright further-down.junction very-deep.1 ; break the survey at station side-loop.4 *break side-loop.4 ; break survey at station side-loop.junction but only ; for leg going to complex-loop.2 *break side-loop.junction complex-loop.2 This approach requires some trial and error, but gives useful results for many caves. The most complex systems would benefit from an interactive interface to select and view the breaks and switches of direction. survex-1.4.4/doc/sorterr.10000664000175000017500000000170114205545543012334 00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "SORTERR" "1" "24 February 2022" "" "" .SH NAME sorterr \- re-sort .err file by various criteria .SH SYNOPSIS \fBsorterr\fR [ \fBoptions\fR ] \fB\&.err file\fR [ \fBhow many\fR ] .SH "DESCRIPTION" .PP Sorterr re-sorts a .err file by the specified criterion (or by the error ratio by default). Output is sent to stdout, or if --replace is specified the input file is replaced with the sorted version. By default all entries in the file are included - if a second parameter is given then only the top entries after sorting are returned. .SH "SEE ALSO" .PP \fBaven\fR(1), \fBcavern\fR(1), \fBdiffpos\fR(1), \fBdump3d\fR(1), \fBextend\fR(1), \fBsurvexport\fR(1) survex-1.4.4/doc/news2html.pl0000755000175000017500000000322014141575516013033 00000000000000#!/usr/bin/perl -w require 5.008; use bytes; use strict; # run on a NEWS file my $title = 'Summary of User-Visible Changes'; $title .= " in $ARGV[0]" if defined $ARGV[0]; print < $title END my $rec; my $in_ul = 0; my $in_li = 0; while () { if (s/^\*\s*//) { if ($in_ul == 2) { if ($in_li) { print "

\n"; $in_li = 0; } print "\n"; --$in_ul; } if (!$in_ul) { print "
    "; $in_ul = 1; } if ($in_li) { print "

    "; $in_li = 0; } print "
  • ", html($_); $in_li = 1; } elsif (s/^\s+\+\s+//) { if (!$in_ul) { print "

      "; $in_ul = 1; } if ($in_ul != 2) { if (!$in_li) { print "
    • "; } print "

        "; $in_ul = 2; $in_li = 0; } if ($in_li) { print "

        "; $in_li = 0; } print "
      • ", html($_); $in_li = 1; } elsif (s/^[ \t]+//) { print html($_); } elsif (/^$/) { # do nothing } else { if ($in_li) { print "

      • "; $in_li = 0; } while ($in_ul) { print "
      "; --$in_ul; if ($in_ul) { print "

    • "; } } $_ = html($_); s!(\(.*\))!$1!; print "

      $_

      \n"; } } if ($in_li) { print "

      "; $in_li = 0; } while ($in_ul) { print "
    "; --$in_ul; if ($in_ul) { print "

  • "; } } print < END sub html { my $t = shift; $t =~ s/&/&/g; $t =~ s//>/g; return $t; } survex-1.4.4/doc/note.png0000644000175000017500000000060311701006570012211 00000000000000‰PNG  IHDRÅb$JIDATxÚ]’-wƒ0†Ÿr"‚ dd$8*‘µs›œì_™ì_è\-®Hê@F"ƒ#ޏL´´Û^u?Î=÷žç¾»È¦ ß2±ݼd°d¦¼ç»àm_”™„0 ìËgc¾dµÞFÇ^ ߪ/ù6o€—Ó5þÕécSÖðWóD¶þWG™‚ p[ƒ R§yig­½ct¦P!t7 ,¼)'fÒ3Ú¼3»¾jε†Ð9Ó XxËÁ_Ƶ•Æ•ˆõ±ppGÅm9zåLˆoC¯¥+P( %äéÛceS¤ËóòLä*iÏ{šÖù÷XgôûêâZ™}n Summary of User-Visible Changes

    Changes in 1.0.32:

    • aven: Fixed font sizes in "Print Preview" and printouts.

    • aven: In the print setup dialog, replaced "Orientation" radio buttons with "Plan" and "Elevation" buttons.

    • aven: Fixed info box on printouts of elevations, tilted views, and extend elevations.

    • aven: Added "fit on one page" option, and make it the default.

    • aven: Reorder "Cancel", "Preview", "Print" buttons and make "Print" the default button.

    • aven: Read settings back from the print dialog when the "Print" button is pressed (was only done for "Preview" previously).

    • aven: Sorted out the initial size of the "Print Preview" window.

    • aven: Fixed the window manager's close button on the "Print Preview" window - previously this was being ignored.

    • aven: Sorted out initial survey scaling when loading a survey at startup.

    • aven: Fixed the measuring line to work better when the survey tree is manipulated with keys. Tweaked redrawing of the measuring line to be a smidgen more efficient. Fixed the blob and ring size which were one pixel too small on Windows.

    • aven: Added "System Information:" section to the "About" dialog to hold information useful when reporting bugs. Currently it contains the wxWindows version, OS version, and colour depth information.

    • aven: Changed the "About" dialog's "Close" button to be "OK" for consistency with pretty much every other application.

    • aven: Added "File->Export as..." which integrates cad3d's functionality within aven.

    • aven: Updated a few icons.

    • cad3d: Added SVG export support from John Pybus

    • (Unix version): Fixed to allow compilation with GCC 3.4

    • (MS Windows version): Upgrade to using innosetup 4 for the installer (we were using innosetup 2). This results in a much smaller download and the installer now translates itself into the currently set language. The installer will no longer work on Windows NT 3.51, but I seriously doubt anyone is still using that...

    • Updates to German translation.

    Changes in 1.0.31:

    • (MS Windows version): Fixed problems with the new printing code by building with a newer version of wxWindows (2.5.2 instead of 2.4.1).

    • aven: Fixed grid menu item so that it always correctly reflects whether the grid is enabled or not.

    • aven: Minor improvements to appearance of a few toolbar icons.

    • Updates to Catalan, French, Italian, Romanian, Slovak, and Spanish translations.

    • cavern: Fixed Romanian message which was appearing in English .err files.

    Changes in 1.0.30:

    • aven: Added printing directly from Aven!

    • aven: Fixed memory leak when showing the "About" dialog.

    • (MacOS X version): Now installable from a disk image package.

    • cavern: Equates are no longer considered when deciding which stations are flagged as surface and underground.

    • Romanian translation mostly completed.

    • (Unix version): Debian: Minor packaging tweaks.

    Changes in 1.0.29:

    • cad3d: Fixed problem with DXF files which stopped them loading with some drawing packages (introduced in 1.0.27).

    • aven: Changed File->Exit to File->Quit.

    • Removed some unused messages from the message files.

    • (Unix version): Fixed SRPMs to build on RedHat 9 and Fedora Core 1 (patch from John Pybus).

    • Romanian translation started.

    • (Unix version): Debian: Fixed new lintian warnings about missing quotes in menu files.

    Changes in 1.0.28:

    • Fixed 3d file reading code to fix incorrect unpacking of compressed station names in a rare case. Also checked other rare cases work correctly.

    Changes in 1.0.27:

    • cad3d: DXF output now puts surface legs, stations, and labels in separate layers.

    • (Unix version): distribute desc-svxedit.txt.

    Changes in 1.0.26:

    • cavern: Fixed interleaved topofil data style - the length was always being calculated as zero.

    • (Unix version): aven: "All Files" now shows files without extensions too.

    • aven: added Ctrl+Q as shortcut for File->Exit.

    • aven: depth colouring now uses a proper colour gradient.

    • (MacOS X version): aven: the keyboard and mouse now work! It turns out that we must apply resources *after* installing.

    • (MacOS X version): aven: now works when run from the MacOS X Finder.

    • (MacOS X version): look for message files and other resources relative to the binaries so that the user can install Survex from a disk image in the location of their choice.

    • (MacOS X version): fixed not to try to build aven if wxWindows isn't installed.

    • cad3d: fixed -e and -r options to not crash (the long versions have always worked).

    • extend: fixed to initialise an internal structure - failing to do so was probably causing crashes on some platforms.

    • Fixed standard graphics for "Note", "Warning", etc in the PostScript manual.

    • Documentation updated.

    • (Unix version): fixed svxedit man page which previously contained xcaverot documentation!

    • test suite: check that cavern doesn't report "nan" or "NaN" for any values.

    • (Unix version): fixed configure --enable-defaultlang=XX to work.

    • (Unix version): fixed configure code to turn on lots of GCC warnings and fixed most of them.

    • (MS Windows version): assorted tweaks to allow building with MS Visual C/C++.

    Changes in 1.0.25:

    • (MacOS X version): hopefully fixed building of aven.

    • (Unix version): updated config.guess and config.sub so should build out of the box on more Unix platforms.

    • (Unix version): Debian: added missing Build-Depends on xlibs-dev.

    • (Unix version): RPMs: give up supplying binary RPMs due to apparently insurmountable technical problems.

    Changes in 1.0.24:

    • cavern: fixed LEVEL (broken since around 1.0.8) and added test case.

    • cavern: corrected handling of declination in Compass DAT files and added test case; also added tests for other aspects of Compass DAT file reading.

    • printps/printpcl: fixed blank page detection in some obscure cases.

    • Documentation: started manual section on working with Compass data files.

    • (Unix version): fixed compilation problems with aven and getopt.h on MacOS X (and probably some other Unix versions).

    • (Unix version): Debian package now Build-Depends on gcc-3.2 and g++-3.2.

    Changes in 1.0.23:

    • Documentation: include 3d v3 file format description on MS Windows, MS DOS, and RISC OS too; include PNG graphics for manual on MS Windows; minor updates to manual.

    • Prefer wxWindows 2.4 if it's available.

    • (MacOS X version): detect MacOS X and look for MacOS X build of wxWindows; automatically add resource fork to aven binary.

    • Disabled experimental support for Chinese (LANG=zh) - it isn't currently working and makes the printer drivers unusable on Chinese versions of MS Windows.

    • (Unix version): tweaked debian packaging.

    • cavern: Handling of "*:" at start of file wasn't fully fixed in 1.0.19.

    Changes in 1.0.22:

    • aven: Fixed handling of extended elevations (and other flat surveys) - they are meant to be "locked flat" but this wasn't fully working before.

    • Documentation: 3d v3 file format description: fixed error in description of codes 0x01-0x0e; include it in binary packages (not only with the source code).

    Changes in 1.0.21:

    • cavern: when reading Compass DAT files, we now processes compass and clino backsights, and recognise the "X" flag which indicates a leg should be entirely ignored. And we now report correct line number with errors in Compass .MAK files.

    • cavern: if "*infer plumbs on", don't infer a plumb if the clino is +/- 90 degrees, but the backclino isn't (and vice versa).

    • cavern: fixed 3dx output so it actually works with Chasm once more.

    • cavern: don't allocate extra space needed for producing 3dx output for Chasm unless we're actually producing that output - saves about 8 bytes per station.

    • cavern: removed slightly too keen sanity check which could misfire in very unusual circumstances.

    • (MS Windows version): all .ico files except 3d.ico have been missing since 1.0.17 (or maybe 1.0.16) - fixed. You wouldn't notice this if you installed over an previous version.

    Changes in 1.0.20:

    • aven: update display when "Metric" or "Degrees" is toggled.

    • cavern: fixed handling of compass and clino corrections in Compass survey data - these were interpreted as radians rather than degrees so the correction was about 57 times too large!)

    • Improved handling of Compass PLT files - if the survey name is empty, don't insert a survey separator character.

    • Documentation: fixed incorrect markup which resulted in a bogus footnote.

    Changes in 1.0.19:

    • cavern: you can now process Compass format survey data (.DAT and .MAK files) - these can even be linked into a Survex dataset with "*include fulford.dat" or "*include lech.mak" to allow processing of mixed datasets.

    • cavern: major speedup (up to 60%) when reading in survey data containing a lot of stations in the same survey hierarchy level (which is how Compass files are handled).

    • cavern: don't warn about a compass reading on a plumbed leg if the plumb was inferred and the compass reading is zero.

    • cavern: reduced memory usage in code which reads a survey station name.

    • cavern: reported CPU time would go negative if cavern ran for more than about 36 minutes (highly unlikely but not impossible on a slow machine with a large, highly interconnect survey) - fixed.

    • cavern: avoid unnecessary work when --percentage isn't specified.

    • cavern: Writing "*:" at the start of a .svx file would crash cavern - fixed and added test case. This is an error anyway, but it shouldn't cause a crash.

    • Don't distribute unused toolbar icons.

    • Documentation: minor updates.

    Changes in 1.0.18:

    • (Unix version): Fixed "Process" action on .svx files.

    • (Unix version): File associations: if svxedit isn't installed, run gnome-edit instead.

    • (Unix version): In Debian packages, now include file associations and file icons in the survex package rather than survex-aven.

    • (Unix version): File associations were missing from RPM packages; moved aven and svxedit man pages to their respective subpackages; moved aven icons to the aven subpackage.

    • Documentation: added details of the 3d file format (version 3).

    • Updated TODO list.

    Changes in 1.0.17:

    • (MS Windows version): Fixed "Open in SvxEdit" to work (and if tcl isn't install this action now falls back to using notepad). SvxEdit now has its own icon.

    • (Unix version): Install mime types, icons, and file associations for Gnome. Note: at present GMC doesn't seem to notice new files being created (e.g. Process on a .svx file creates .3d and .err files) - you have to manually refresh the view.

    • Minor update to manual.

    Changes in 1.0.16:

    • (MS Windows version): Really fixed bug introduced in 1.0.14 which often stops programs from finding the message files.

    • (MS Windows version): Remove any existing "Open" file association for .svx files.

    Changes in 1.0.15:

    • (MS Windows version): Fixed bug introduced in 1.0.14 which often stops programs from finding the message files.

    • (MS Windows version): "Open in Notepad" is now the double-click action for .svx files once again, "Open in SvxEdit" is an action in the menu obtained with the right mouse button.

    Changes in 1.0.14:

    • svxedit: This is a Survex data entry editor from the therion team. It needs tcl and wish installed - for MS Windows an installer is available for free from Activeware.

    • Improved handling of Compass PLT files and CMAP xyz files - no longer change dots to spaces in survey and station names - instead use a space as the separator between survey name and station name.

    • aven: when picking non-overlapping labels, show a slight preference to shorter labels with the aim of displaying more labels.

    • aven: fixed hard to notice problem which could cause the cave to appear tilted sideways after a lot of manipulation.

    • cavern: Modest speed improvement (0.5% for sample dataset).

    • cavern: fixed a rarely sighted bug which caused erroneous error about some stations not being attached to a fixed point.

    • cavern: fixed clino readings and DIRECTION to work in interleaved data.

    • cavern: improved error reporting when an invalid value is given for a DIRECTION reading.

    • cavern: fixed "singular matrix" error when very low SDs were specified.

    • print*: if the --raw is used, the survey can now use the space this would have taken up.

    • Reading of ASCII 3d files now copes with MSDOS/MS Windows line endings once again. Added regression test for this.

    • (MS Windows version): Programs run from the command line now find message files without SURVEXHOME needing to be set.

    • Updated documentation.

    Changes in 1.0.13:

    • aven: Fixed bug which caused the occasional spurious leg to be shown connecting arbitrary stations.

    • extend: try to extend along a survey, and make breaks where other surveys join.

    • cavern: Number reading code reworked to allow repeat readings to be supported, but the actual repeat reading code is currently disabled, and everything should work exactly as before.

    • Experimental support for Chinese (LANG=zh) - only a few messages are currently translated.

    Changes in 1.0.12:

    • diffpos: fixed to work on 64bit architectures.

    • sorterr: fixed to work with more than 1024 traverses.

    • Fixed handling of iso-8859-2 character set and MS Windows code page 1250 (both cover Eastern European languages).

    • (MS Windows version): install file associations for Compass .plt and .plf files and for CMAP .xyz files. Also install the file icon for .plt and .plf files in case Compass isn't installed (thanks to Larry Fish for permission to include the icon).

    • (Unix version): running an installed program with an explicit path works again.

    • (Unix version): xcaverot: automatically switch on PDA mode if the screen is less than 640 pixels wide or less than 480 pixels high.

    • (Unix version): minor portability improvements.

    • Updates to Portuguese translation - all translations are now up-to-date.

    Changes in 1.0.11:

    • aven: improvements in 1.0.10 to the file type selector only work properly on MS Windows, and with wxGtk >= 2.3 on Unix (the latest stable release is 2.2.9 where this doesn't work). Fixed to work as well as possible on 2.2.9, and as intended on 2.3.

    • aven: fixed so that loading PLT files works regardless of the current locale (previously it would fail for locales where the decimal character wasn't '.').

    • aven: key actions during autorotation no longer temporarily pause autorotation.

    • aven: switching to plan or elevation while rotating is now smooth.

    • aven: removed undocumented and confusing "free rotation mode".

    • (MS Windows version): aven: focus now set correctly after loading a file by double-clicking or from the command line.

    • cad3d: write dummy passage dimensions to .plt files to avoid Compass bug.

    • printwin/printps: now support coloured printouts.

    • print*: fixed to work correctly with PLT files.

    • extend: fixed to work correctly with PLT files.

    • Updates to Italian translation.

    • Minor documentation updates.

    Changes in 1.0.10:

    • (MS Windows version): aven: fixed assert failure upon turning on station names.

    • aven: only add a file to the list of recently used files if it was opened successfully.

    • aven: recognise ".plf" as a Compass PLT file too; and on Unix list "*.PLT", "*.PLF", "*.XYZ", and "*.3D" as well as the lowercase versions to help people who transfer files from MSDOS/MS Windows.

    • cavern: fixed bogus warning triggered by "*begin abc.def" (I'm not sure that this should be valid, but the warning given wasn't appropriate).

    • Fixed scaling problem when reading PLT file (feet->metres conversion factor was being applied backwards!)

    • Fixed potential problem when reading or writing a 3d file which couldn't be opened.

    • Translate dots to spaces in survey names in Compass PLT files.

    • Better handling of PLT files which have a D command before any M command.

    • Updates to German and Italian translations.

    Changes in 1.0.9:

    • aven: Fixed jerky start when auto-rotation begins.

    • cavern: Fixed Direction reading - bug previously made it unusable.

    • (MS Windows version): cad3d: fixed broken PLT output (had a double CR at the end of each line).

    • (Unix version): RPMs now have the docs in /usr/share/doc and the man pages in /usr/share/man to conform with the FHS (and where RedHat packages put them).

    • Updates to French, Spanish, Catalan, and Slovak translations.

    Changes in 1.0.8:

    • Slovak translation added; updated German, Catalan, and Spanish translations.

    • aven: reduced memory usage by around 25% and increased speed and responsiveness.

    • aven: rate of rotation and switching between plan and elevation now adjusted to the speed of redraw, so aven behaves in a similar way independent of the speed of the computer or size of the survey.

    • aven: provide list of most recently loaded files (preserved between runs of the program).

    • aven: settings for "Metric" and "Degrees" are preserved between runs.

    • aven: moved some menu items from "View" to "Controls" as they probably belong there and the "View" menu was getting out of hand.

    • aven: cursor keys now translate cave in the same way the mouse does (i.e. now work as in caverot and xcaverot).

    • aven: eliminated the "twinkling label" effect when dragging the cave with the right mouse button.

    • aven: the measuring line moves much more smoothly now: the mouse cursor now snaps to the nearest station, rather than just a near station; and when the line moves, we now only redraw the affected area of the window.

    • aven: resolved annoying limit on zooming in on large surveys. This was a crude way of preventing random lines due to overflow in the windowing system. Aven now clips lines itself at high zoom levels, and limits zoom in to approximately 1mm/pixel.

    • aven: zoom in/out with keyboard wasn't subject to any limits - now restricted to sane values as with zoom in/out with the mouse.

    • print*: added --raw switch to turn of info box, scale bar, and page footer. This can be useful if you want to import the output into another application.

    • print*: improved output when --no-border is used.

    • printpcl/printdm: Added new .ini setting "font_bitmap" which allows the user to choose between alternative fonts. Current we supply "default" and "bold".

    • printps/printhpgl: Fixed --skip-blanks which would incorrectly skip non-blank pages on rare occasions.

    • cavern: added support for BackCompass and BackClino.

    • cavern: implemented "*units clino percent".

    • cavern: added "*infer exports on". Any stations seen while this is on will have the necessary *export-s inferred when accessed from outside their own survey. This allows linking a survey which uses *export to one which doesn't. It's also useful for a maze cave where so many stations can be linked to that listing them explicitly isn't desirable.

    • cavern: N-S, E-W, and vertical ranges now only count stations which are in underground surveys.

    • cavern: *infer plumbs wasn't inferring -90 to be DOWN - fixed.

    • cavern: *infer was giving an internal error if the argument was unknown - now it gives the correct error message.

    • cavern: fixed handling of omitted clino readings when OMIT is *set to be different from MINUS and PLUS (new test omitclino).

    • cavern: fixed a bogus warning for any station which was only used in a line of data which was rejected because of an error.

    • cavern: added error if the *units factor is zero (e.g. "*units tape 0 feet").

    • cavern: removed the ill-thought-out and never implemented LENGTHOUTPUT and ANGLEOUTPUT quantities.

    • cavern: resolved mismatch between bcra5.svx and the default SDs, and the odd values in bcra3.svx. We are now interpreting the BCRA limits as 2 standard deviations (previously bcra5.svx used 3 sds, bcra3 used 3.33 sds for tape and position, and .75 sds for compass and clino, and cavern used 1 sd by default).

    • ChangeLog now only includes entries since the previous release (the full file is 220K or so, and of interest to very few people). MSDOS and MS Windows versions now comfortably fit on a 1.44M floppy once again.

    • Test suite now checks that all programs will run successfully with "--help" and with "--version". This should avoid problems such as that which broke the printer drivers in 1.0.4-1.0.6.

    • (Unix version): uninstalled binaries now use the path they are run with to find support files, which means SURVEXHOME is no longer required, and has been removed.

    Changes in 1.0.7:

    • print*: halted with a failed assertion in 1.0.4-1.0.6.

    Changes in 1.0.6:

    • aven: "Reverse Controls" now works as in xcaverot and caverot.

    • aven: free rotation mode (engage by pressing control while left dragging, exit with Delete) improved.

    • aven: using File->Open when a file was already loaded caused a crash if a station was "grey highlighted" in the survey tree - fixed.

    • aven: added hourglass for "find" operation.

    • aven: reenabled loading of files by drag-and-drop (accidentally disabled in 1.0.4 and 1.0.5).

    • aven: improved handling of flat surveys (e.g. output of extend, surveys with no clino information).

    • aven: surveys with stations but no legs no longer cause the labels and crosses buttons to behave oddly.

    • aven: removed quite a bit of unused and superfluous code.

    • Spell-checked documentation.

    Changes in 1.0.5:

    • Fixed bug in img_open_survey() which could cause a crash if you tried to open an unrecognised file (i.e. not .3d, .pos, .plt, or .xyz format).

    • North and East were the wrong way round when reading in .plt files.

    • cad3d: Improved .plt file output a little - there's probably enough file structure for Compass to read them now.

    • Documentation updates.

    Changes in 1.0.4:

    • extend: previously only kept one name for an equated group of stations in the extended .3d file; now keeps all the names.

    • cad3d: if an output filename is given, use its extension to pick the default output format.

    • aven: movement with keyboard is now accelerated by Shift as in caverot.

    • print*: --no-borders fixed to work as documented; --no-cutlines added to turn off the dashed lines where pages join on multi-page printouts.

    • aven: tracked down two uninitialised variables which seems to fix the failure to load a survey on startup which some people have been experiencing on Microsoft Windows.

    • aven: code cleaned up - should improve performance a little.

    • img routines: img_rewind() now returns a value indicating success/failure.

    • Improvements to .plt file reading, notably that distances in the file are now interpreted as being in feet rather than metres. Also .plt files should now be recognised even with a different extension, and we cope with an odd special case better.

    • Added support for reading CMAP XYZ files. There are two variants of these - the "shot" format is fully implemented, the "station" format currently just reads the station names and positions - the legs are ignored (sadly the sample files I have do not match the format specification).

    • (MacOS X version): aven: aven now builds on MacOS X - we just need to sort out packaging now...

    • (MSDOS version): upgraded graphics library used to Allegro 4.0.1.

    • Documentation updates.

    Changes in 1.0.3:

    • aven: you can now select distances to be displayed in feet (or miles when you zoom right out) instead of metres, and angles to be in grads instead of degrees.

    • aven: show altitude of mouse pointer when in elevation view.

    • cad3d: fixed bug which caused --plt to crash on some platforms.

    • print*: added "Printing to `XXX'..." message to say where output is being written.

    • Updated French translation; minor updates to other translations (mostly sorting out clashing menu shortcuts in aven).

    • (Unix version): assorted portability tweaks.

    Changes in 1.0.2:

    • printdm/printpcl/printwin: take notice of font_size_labels setting in print.ini etc.

    • cavern: Topofil can now be used with DIVING and CYLPOLAR styles; TOPOFIL style is now synonymous with NORMAL.

    • cavern: *INFER EQUATES and *DATA TOPOFIL now work together correctly.

    • cavern: *FIX with 3 standard deviations but no covariances now works.

    • (MacOS X version): command line programs now build. We're working on Aven.

    • Updates to the Catalan and Spanish translations.

    • xcaverot: documented environmental variables XCAVEROT_INDICATOR_RADIUS and XCAVEROT_FONTNAME.

    • cad3d: added --plt option to produce crude approximation to Compass .plt files - should be good enough for reading into Carto.

    • img library enhanced to allow Compass .plt files to be read as if they were .3d files.

    Changes in 1.0.1:

    • (MS Windows version): printwin: fixed sizes of cross and page alignment ticks.

    • Updates to the Portuguese and Italian translations.

    Changes in 1.0.0:

    • Fixed --survey option supported by many programs which was broken in 0.99.

    • aven: altered colours of "fixed points" and "entrances" buttons to match the coloured blobs used to indicate them.

    • (MS Windows version): aven: changed current point highlighting in the survey tree to use a light grey background rather than bold (bold causes the text to "wriggle" as the highlight runs up or down).

    • (MS Windows version): file icons now have transparent backgrounds.

    • survex: removed conversion wrapper - you should use "cavern file.svx" instead of "survex file.svx".

    • (Unix version): GCC 2.95 sometimes fails with an internal error when trying to compile gfxcore.cc - if it does, the Makefile will now try recompiling with a lower optimisation level.

    • (Unix version): when doing an "in directory" build from source, the HTML manual is now installed in its own subdirectory as when doing a non "in directory" build.

    • German translation now completely up-to-date.

    Changes in 0.99:

    • Fixed bug in .3d file reading code which would incorrectly reconstruct the survey hierarchy in rare cases.

    • (MS Windows version): aven: fixed redraw problem for "N found".

    • (MS Windows version): minor tweaks to .err, .pos, and .svx file icons.

    • (Unix version): aven: Highlight of current station restores old background colour correctly rather than assuming it's white.

    • aven: Resolved a number of menu shortcut clashes.

    • (RISC OS version): fixed automatic detection of language.

    • cavern: improved error reporting from *data; better handling of some incorrect usages of *sd and *units.

    • Italian translation updated.

    Changes in 0.99-prerelease9:

    • aven: Side Panel can now be dragged or toggled shut and then reopened again; double-clicking on the divider now maximises the survey window rather than the side panel.

    • aven: .3d files can now be loaded using "drag and drop" from MS Windows Explorer, and X filemanagers which support XDND (e.g. Konqueror).

    • aven: fixed problems with selection handling in survey tree.

    • aven: Escape cancels distance measuring line; suppress distance measuring line during auto-rotation and animated tilting.

    • aven: entrance blobs now green to distinguish them from stations matching search.

    • aven: problems with dragging scalebar fixed.

    • (MS Windows version): aven: Loading file on start-up now works!

    • (MS Windows version): aven: Delete now works in the search box.

    • (Unix version): aven: Highlight current station in tree with grey background (don't seem to be able to use bold like we do on MS Windows).

    • cavern: Fixed handling of interleaved nosurvey data.

    • cavern: Diving and cylpolar styles now take DEPTHCHANGE where they used to take DZ.

    • (MS Windows version): Installer now uses a different compression method (bzip2) which reduces the download size by about 5% (and should help keep the installer small enough to fit on a 1.44M floppy). Bzip2 is a little slower to uncompress, but not appreciably so on the machines I've checked it on.

    • (MS Windows version): Should now install without errors for a non-admin user on MS Windows NT/2000/XP.

    • (MS Windows version): Installer should now allow installation on NT 3.51.

    • Updated manual (notably added documentation for interleaved data styles).

    • German and Brazillian Portuguese translations updated.

    Changes in 0.99-prerelease8:

    • aven: Ctrl + Arrow keys is now the preferred way to rotate and tilt (easier to remember than "C"/"V" and "'"/"/").

    • aven: survey pane now gets initial focus so you no longer have to click on it before key presses are recognised.

    • (MS Windows version): aven: fixed problems with some keys being impossible to enter in search box, or not being recognised in survey pane.

    • (MS Windows version): aven: wxWindows messages files were missing. We now include them for languages which Survex also supports.

    • (MSDOS version): caverot: Shift and/or Ctrl + Arrow keys now works.

    • aven: Close button in About box is now always right in the bottom right corner.

    • Display copyright symbol rather than (C) where the current character set allows it.

    • (MSDOS version): caverot: default to 320x200 when running under Microsoft Windows 2000 and XP as we already do on NT.

    • (MSDOS version): fixed problem when running on DOS outside MS Windows.

    • (MSDOS version): detect current codepage rather than assuming it's 850. We now support codepages 437 and 850 (the common ones) - for other codepages we fall back to using 7-bit ASCII.

    • (Unix version): aven: now compiles cleanly with GCC3.0.

    Changes in 0.99-prerelease7:

    • (MS Windows version): aven was missing from 0.99-prerelease6 (if you installed over an old version you'd have kept the old aven).

    • caverot/xcaverot: Ctrl + Arrow keys is now the preferred way to rotate and tilt (easier to remember than "C"/"V" and "'"/"/").

    • xcaverot: Shift-ed movement keys now work faster as in caverot.

    • cavern: fixed *calibrate depth/todepth/fromdepth/dz and *units dz to work in data styles diving and cylpolar.

    • cavern: fixed handling of malformed *data commands.

    • Various documentation clarifications.

    Changes in 0.99-prerelease6:

    • aven: fixed bogus lines caused by coordinate wrap-around; fixed problem in repeated zoom with [ or ]; tweaked layout and auto-sizing of left panel; station search now case insensitive; regexp search enabled; suppressed message box when wxWindows doesn't support the language Survex is set to use; fixed obscure crash in search highlighting; added "rubber band" between measured stations; Improved choice of menu short-cuts in translations.

    • (MS Windows version): don't include plain text versions of docs; fixed default action for 3d files to be "Open".

    • (MSDOS version): include text docs.

    • cavern: more intelligent and less verbose reporting of errors in nested included files (inspired by GCC 3.0).

    • cavern: improved reporting of syntax errors in survey data.

    • print*: improved reporting of invalid scales; interpret a single number less than one as the scale in the obvious way (so "0.001" means "1:1000").

    • print*: "--crosses" no longer prevents "--station-names" from working.

    • print*: if running interactively, prompt for what elements to plot when run so MS Windows users don't have to resort to the command line.

    • Improved documentation for print.ini; Other minor documentation updates.

    • (Unix version) configure auto-probe for wxWindows updated to cope with wxWindows version 2.2.8 (still works with older versions too).

    • Diving and cylpolar styles now accept dz (change in depth) rather than requiring absolute depths and taking the difference.

    Changes in 0.99-prerelease5:

    • aven: improved initial sizing of window; "Toggle rotation" toolbar icon now works; handle files with only stations better; presentation code disabled for 1.0; releasing mouse over menubar now ends drag; don't highlight hidden stations; accelerator problems fixed; find now works.

    • (MS Windows version) aven: fixed crash on File/Open when a file was already loaded.

    • cavern: After *solve, reused points are no longer written to the .3d file a second time.

    • cavern: Warn that the undocumented extra "omit" allowed by *data is deprecated.

    • cavern: Give error if standard deviation argument to *sd isn't positive.

    • Consistent capitalisation of --help option descriptions.

    Changes in 0.99-prerelease4:

    • Minor improvements to manual and Unix man pages.

    • printps/printhpgl/printwin: --skip-blanks fixed.

    • printhpgl: fixed paper size for A1 landscape (was actually A2 portrait!)

    • (MSDOS version): graphics in HTML manual were corrupted (by being packed as text).

    • (RISC OS version): graphics were missing from HTML manual.

    • (RISC OS version and 286 DOS version): fixed programs to report themselves as part of "Survex" rather than "@PRETTYPACKAGE@".

    • (MSDOS version): pick a default language for messages by looking at the currently set country.

    • (Unix version): Improved test for whether build needs librx - before it was used if it was present, even if it wasn't needed.

    • (Unix version): Assorted minor debian tweaks.

    Changes in 0.99-prerelease3:

    • Documentation rearranged. Some sections which covered the same ground have been merged, and the documentation for each program is now available as a man page under Unix.

    • (Unix version): Fixed problem with incomplete versions being specified in debian package dependencies.

    • (Unix version): Fixed problems with not having librx on Linux (it's now built into libc).

    Changes in 0.99-prerelease2:

    • aven: fixed bug which caused occasional crash during mouse movement; station identifying didn't work after a resize until the survey was moved.

    • Asking for messages in language en_GB now tries language en as it was meant to.

    • printps/printhpgl/printwin: fixed typo which made --skip-blanks get it wrong in some rare cases.

    • (Unix version): Added man pages for 3dtopos and sorterr.

    • (Unix version): More minor tweaks to debian packages.

    • Include images with HTML documentation; other minor documentation changes.

    Changes in 0.99-prerelease1:

    • Major clean-up of Survex Manual; renamed from "svxdocs" to "manual".

    • Text documentation converted to HTML; BUGS and TODO merged, ZOMBIES removed.

    • Include HTML documentation overview page and manual in all versions (was only included in MS Windows before).

    • aven: added new functionality: toolbar, side panel with survey tree, find station, measure distance between two stations, click on station to centre.

    • aven: can now create presentations consisting of a set of views with movements between them. Useful for using aven as a "slide show" in a conference talk.

    • aven: handles loading file from command line better.

    • cavern: added error checks for "*flags" (with no arguments) and "*flags not".

    • cavern: you can now specify optional covariances to *FIX.

    • cavern: parser fixed to recover from errors as intended in a few situations where it was failing to.

    • cavern: implemented covariances for diving data.

    • cavern: added "cylpolar" data style - similar to diving, except the tape is measured horizontally rather than along the slope of the leg.

    • cavern: complain about *export-ing or *entrance-ing a station which is never used.

    • cavern: complain about *export after a *begin without an argument.

    • cavern: use *title only if at top of survey tree, else generate title from filename(s).

    • cavern: removed dummy *lrud command which was added for tunnel but isn't used by tunnel.

    • cavern: round coordinates to nearest cm when writing .3d file.

    • cavern: fixed reporting of node stats for stations fixed with error estimates.

    • cavern: no longer generate a .inf file - the .log file generated by the --log option makes the .inf file obsolete.

    • cavern: only apply special pathname handling to filenames in *include, not those on the command line.

    • cavern: *date now checks its argument. It expects an ISO format date (e.g. 2001.09.13) or range (e.g. 2001.09.12-2001.09.13). For cases where the exact date isn't know, the day and month can be omitted - e.g. 2001.09 and 2001 are also valid.

    • cavern: --new-format renamed to --chasm-format.

    • print*: If restricting to a subsurvey, use that survey name for the title of the printout.

    • print*: Detect .3d files produced by extend and handle them more appropriately (don't ask for view or bearing, and modify info box on printout).

    • print*: --skip-blanks now works on printwin/printpcl/printps; --skip-blanks now forces --no-border.

    • printps: thinner lines by default (0.1 points rather than 0.5).

    • printdm: added --calibrate option to print calibration page; if there's no calibration in the .ini file, refuse to print (apart from calibration pages) rather than printing to the wrong scale.

    • printwin: removed --output option - there is no output file.

    • extend: wasn't picking start station as documented - fixed and also enhanced to try to find an entrance with legs first.

    • survex: conversion wrapper doesn't use --output unless it is actually needed, and displays corresponding cavern command line, and (if appropriate) file.

    • cad3d: added --reduction option (from Leandro) which allows sketch output to be scaled down (default scale is 1:500); grid in sketch file is now visible by default; default output now goes in the current directory.

    • cad3d/3dtopos/sorterr: delete output file if there's an error writing to it.

    • 3dtopos: minor improvements to sort order.

    • hto2svx, svx2hto: Removed HTO support - Survex appears to be the only released software to ever have provided support, and an exchange format that nobody else supports is useless.

    • xcaverot: report more detailed error when .3d file can't be loaded.

    • `program --version' now works even if message file can't be found.

    • (Unix version): Fixed attempt to load messages from "DEFAULTLANG.msg" if both SURVEXLANG and LANG were unset.

    • Much more rigorous checking for operating system errors when reading and writing files.

    • (RISC OS version): query Territory module to find currently selected language, and use that for messages.

    • (UNIX version): man pages now have "Survex <version number>" on them; fixed minor flaws in man pages.

    • Distinguish between a "bad" .3d file and one which has a newer revision of the format than we understand.

    • img library can now read .pos files as if they were .3d files with just stations in, so all programs which can read .3d files can also now read .pos files.

    • Expanded testsuite further.

    • French, Brazillian Portuguese, and German translations brought almost completely up-to-date.

    • (Unix version): Lots of little improvements to debian packages (mostly from Wookey).

    Changes in 0.98:

    • (MS Windows version): New icons for .svx, .pos, and .err files. Tweaked .3d icon to work better in 256 colour modes.

    • Added tests for `*infer plumbs' and `*infer equates'.

    Changes in 0.98-prerelease6:

    • printwin: fixed new bug introduced in 0.98-prerelease4 which caused an internal error.

    • printwin: exit cleanly if no printer drivers are installed.

    • aven: surface surveys weren't being drawn when viewing from above (bug introduced in recent version).

    • aven/caverot/xcaverot/print*/cadgen/extend/diffpos/3dtopos: --survey command line option once more trims specified prefix from station names like it did in xcaverot/caverot in 0.98-prerelease4.

    • sorterr: Added --replace option to sort the .err file and replace the original with the sorted version (for use by MS Windows file associations); cope with empty .err file.

    • cavern: Added --log option to send output to a .log file.

    • cavern: --quiet no longer suppresses node statistics.

    • extend: give up if the .3d file is truncated or corrupted part way through.

    • (MS Windows version): sorterr.exe and 3dtopos.exe were missing; improvements to documentation; assorted fixes and improvements to file associations.

    • print*: reduced memory usage.

    • Fixed dropping of first character of survey station names when reading old .3d files.

    • (MS Windows version): aven.exe wasn't rebuilt for 0.98-prerelease - fixed the dodgy script.

    Changes in 0.98-prerelease5:

    • aven/print*/cadgen/extend/diffpos/3dtopos: Added --survey command line option to restrict the operation of the command to a sub-survey in the .3d file.

    • aven: initial scaling now ignores unused fixed points (unless there are no legs at all), and scales survey so it fits inside window.

    • aven: can now load a survey with no legs, only stations.

    • aven: --version now works, and --help produces more helpful output.

    • cavern: fixed bug with eating first character of line after interleaved data; corrected line numbers in some situations involving interleaved data.

    • cavern: fixed problem with points fixed with errors.

    • cavern: *title without quotes now stops at a comment; *title with no argument no longer allowed - use `*title ""' if you really mean to set an empty title.

    • Minor documentation updates.

    • 3dtopos: Fixed bug which resulted in station names and coordinates getting mismatched; output now defaults to current directory.

    Changes in 0.98-prerelease4:

    • diffpos: list added and deleted stations in sorted order; better error reporting.

    • 3dtopos: removed hardcoded limit on number of stations (was 100000); better error reporting.

    • Further tweaks to charset handling - look at LC_* as well as LANG; Check GUI codepage under MS Windows.

    • cavern: Allow *copyright/*date/*instrument/*team/*title between *begin and *export.

    • cavern: Fixed typo which prevented *instrument from being recognised as a valid command.

    • cavern: removed option to produce ascii .3d files.

    • cavern: on error, remove any existing .inf file for consistency with .3d and .err files.

    • cavern: interleaved nosurvey data style now works; nosurvey legs now count as a "use" of a fixed point.

    • cavern: give at most 5 warnings about use of any particular deprecated feature. Otherwise processing an old dataset just gives an avalanche of warnings which buries any other warnings or errors.

    • cavern: implemented `*infer equates'.

    • aven: if a .3d file is truncated or corrupted part way through, aven would previously load part of it without complaint. Fixed to complain and not load anything.

    • printwin: fixed problem where it hung when waiting for input.

    • print*: Added --output command line option to override the output setting in the .ini file (ignored by printwin).

    • .3d files now store prefixes for legs (the prefix is taken from the "from" station of the leg); Station names and leg prefixes in .3d files are now stored compressed. Despite now storing prefixes for legs, .3d files are now typically 25%-33% smaller than before.

    • xcaverot/caverot: Added --survey command line option which restricts the view to a sub-survey in the .3d file. e.g.: "caverot --survey 161.dream all.3d"

    • (MS Windows version): added explorer bindings for sorterr.

    • cavern/xcaverot/sorterr: fixed --help output to include long options.

    • Minor documentation updates.

    Changes in 0.98-prerelease3:

    • cavern/3dtopos: cavern no longer produces .pos files - they're mostly useful for hand plotting and are larger than the corresponding .3d files so most of the time they slow processing and then clutter up the disk. A new utility 3dtopos produces a .pos file from a .3d file, and has the added benefit that it sorts names with numbers in numerically (i.e. 2 before 10).

    • diffpos: the arguments can now be .pos or .3d files, or one of each.

    • cavern: improved parsing of unquoted *include/*title strings - used to end at the first literal space; now they end at the first BLANK character (space, tab, and comma by default). So the odd case of an unquoted string with commas or tabs will require quotes to be added.

    • All versions have been missing RTF, text, and PostScript versions of the documentation in the previous 2 prereleases.

    • cavern: Fixed articulation code wasn't quite.

    • cavern: an empty label was being added to the .3d file for a station fixed with standard deviations. Such labels are also now ignored by img on read-in.

    Changes in 0.98-prerelease2:

    • (MS Windows version): Fixed "Open" on a .3d file to open in aven rather than converting to a DXF. "Convert to DXF" now appears as a separate menu item.

    • cavern: Fixed bogus errors about matrix not being positive definite.

    • cavern: Fixed bug in articulation point code which could result in a traverse "exploding" in certain situations (introduced in 0.95).

    • cavern: Check for chunks of survey not connected to a fixed point is now done earlier on (which simplifies quite a bit of the network code).

    • xcaverot: Disabled "legs" and "surface" buttons in --pda mode - they make the button bar too wide.

    Changes in 0.98-prerelease1:

    • Covariance matrices are symmetric - now only store 6 of the 9 entries. Typically uses 10% less memory and is 15% faster.

    • caverot: adjust to speed of machine/size of survey on initial draw, rather than on first action from user.

    • (MS Windows version): now handle oe-ligatures.

    • (Unix version): discover character set by looking at $LANG.

    • (MS Windows version): discover character set from Windows.

    • Transliterate accented characters that can't be represented in the current character set.

    • Added support for Latin9 (iso-8859-15) character set.

    • printps/printpcl/printwin: Improved handling of accents on printouts.

    • aven: added optional grid; dashed surface survey now the default; Indicators moved to submenu of View menu.

    • aven: reporting errors in a message box wasn't working (wxWindows bug).

    • cavern: fixed *entrance - it was trying to insist its argument was a survey, not a station.

    • cavern: a leg with the same station at both ends now causes an error rather than just a warning.

    • cavern: added station name to "station equated to itself" message.

    • cavern: allow interleaved data formats.

    • sorterr: new utility for sorting .err files by various criteria.

    • xcaverot: buttons now size to widest label; added --pda switch to turn off less useful buttons for use on small screens (such as the ipaq PDA).

    Changes in 0.97:

    • Unchanged from 0.97-prerelease7.

    Changes in 0.97-prerelease7:

    • Messages relating to command line options are now translatable.

    • (MSDOS versions): now supply self-extracting zip archives.

    • (MS Windows version): after running cavern, wait for a key press before closing the window.

    • cavern: Very quiet mode (-qq) now produces absolutely no output if there are no errors or warnings.

    Changes in 0.97-prerelease6:

    • (MS Windows version): aven: if there are problems opening the message file, report them in a message box rather than printing text which the user will never see.

    • cavern: invalid data lines weren't being counted, so you'd get incorrect line numbers reported for further errors and warnings.

    • cavern: Added a SPLAY flag for indicating splay shots in chambers and large passages.

    • extend: ignore surface legs and splay legs; preserve duplicate flag on extended legs.

    • print*: if surface data isn't being plotted, ignore surface survey stations too, and select page layout based on underground data only.

    • (MS Windows version): get default language from Windows.

    • cavern: added *entrance command for indicating cave entrances.

    • Added "surface", "underground", "exported", "fixed", and "entrance" station flags to 3d format.

    • (DOS version): caverot: fixed bug Brian Clipstone reported where caverot would lock up when trying to plot a label off-screen.

    • xcaverot/caverot: tweaked sense of a few controls to be consistent with each other and with aven.

    • Strip leading '\' from station names read from old .3d files.

    • cavern: Better reporting of error stats involving a station fixed with errors.

    • aven: allow highlighting of fixed, exported, and entrance stations.

    Changes in 0.97-prerelease5:

    • survex: conversion wrapper now only creates __svxtmp.svx file if it has to - simple cases (such as "survex example.svx") don't need one; also always print warning that user should be using cavern instead.

    • Minor updates to documentation.

    • Survey stations names are no longer displayed with a leading '\' - this doesn't make sense now that root is deprecated, and didn't make much sense before to be honest.

    • cavern: *fix with two standard deviations (horizontal and vertical) was being rejected - fixed.

    • cavern: Fixed bug with station "\" appearing in the .err file for a station fixed with error estimates.

    • (non-Unix versions): remove path and extension and lower-case program name for use in error reporting.

    • (MS Windows version): added documentation overview page to HTML help.

    • Removed 255 character limit on station names in .3d and .3dx files.

    • caverot: overlapping label code wasn't allowing enough for vertical overlap.

    • cavern: after a bad *data command, ignore survey data until the next valid *data command.

    • printdm/printpcl: exit cleanly if bitmap font file is missing.

    • cavern: give a more helpful error on empty "*export" or "*prefix".

    • xcaverot: Fixed display of surface legs and related minor issues.

    • print*: Fixed handling of surface legs; `-S' now recognised as a short-form for `--surface'.

    • Added test of *solve command.

    • cavern: Added commands *date, *team, *instrument, *copyright - currently these are ignored, but they provide a place to put data when importing/exporting, and will be processed in future versions.

    • (MS Windows version): aven updated to same codebase as Unix version.

    Changes in 0.97-prerelease4:

    • Updated Portuguese and German translations.

    • aven: Accents now work in display; suppress "wxstd" warning box for English; speed improvements; redesign of indicators; rescale by dragging scalebar; allow surface legs to be hidden (they are by default); now defaults to plan view; depth bar labelling improved; added caverot-like handling of flat surveys (so output from extend is locked flat).

    • cavern: Complain if the same name is used for a survey and a station.

    • cavern: Added --warnings-are-errors command line option.

    • caverot/xcaverot: Middle button now tilts cave by dragging rather than toggling plan/elevation.

    • caverot: continue setup in background while help page is displayed; "R" (Reverse Rotation) now only affects the auto-rotation - it used to affect "C", "V", "/", and "'".

    • cavern: unused fix point warnings now work for stations fixed with error estimates; added test cases for this.

    • testsuite: Enhanced many existing tests to check for warnings.

    • Fixed to build on Solaris with Sun's compiler.

    • Minor corrections to documentation and man pages.

    • cavern: report *export errors at the file and line where the *begin for the survey involved was as that's much more useful.

    • cavern: allow "-" in station names by default.

    Changes in 0.97-prerelease3:

    • (Unix version): aven: Internationalised; Fixed serious drawing bug causing incorrect rendering and segfaults; Scale bar now draggable; Depth bar tidied up; Orientation menu changes; Menu accelerators fixed; Status bar disabled (various continuing problems and it doesn't really convey much useful info anyway); About box fixes; Fixed crashes on mouse actions when no survey loaded; Improved labelling of scale bar and indicators.

    • Created Swiss German and "German German" sub-versions of German translation.

    • (DOS version): caverot: fixed slight underallocation of memory which probably caused the bug Brian Clipstone reported.

    • cavern: Improved reporting of missing *export-s; added 2 more *export tests.

    • No longer trap SIGINT (Ctrl-C) or SIGTERM (Ctrl-\ on Unix) as we can't do anything useful.

    • Removed support for really old language names ("fren", "germ", "ital", etc) - use "fr", "de", "it", etc instead.

    • (RISC OS version): support a few extra accents in messages.

    • "Syntax" in command-line help messages now translated.

    Changes in 0.97-prerelease2:

    • cad3d: Fixed output from `--help'; -e, -D, -S short options now work; fixed infinite loop bug.

    • (Unix version): aven: leaving "about" box no longer causes segfault; toggle status bar now works; N/S/E/W selects view rather than moving cave; window close now works; now have ticks on appropriate menu items; fixed problems with rendering (some legs missing!); 3d file specified on command line now loaded; fixed occasional hangs; fixed terrible slowness during rotation; implemented indicators; various other bugs fixed.

    • Updated translations: pt de it (and fr partially)

    • Added tests for most commands and various other cases.

    • cavern: fixed *case (correct args are PRESERVE/TOUPPER/TOLOWER) and upper/lower were swapped.

    • Documentation brought more up-to-date.

    • caverot/xcaverot: fix missing end of list marker for surface data which typically resulted in a few extra bogus surface legs appearing.

    • printer drivers: fixed .ini file reading routine (bug introduced in 0.97-prerelease 1).

    • printps: postscript file meta information now includes the date of creation, and also the name of the user running printps (Unix only).

    • printer drivers: improved reporting of problems with print.ini files.

    • (MSDOS version): fallback DPMI provider and floating point emulator were missing in 0.97-prerelease1.

    • Better internationalisation - select localised system messages using setlocale().

    Changes in 0.97-prerelease1:

    • extend: fixed bug which resulted in bogus output (added regression test); produce binary rather than ASCII .3d output.

    • cavern: don't report error stats for articulating traverses.

    • (UNIX version): `make uninstall' now removes the HTML documentation.

    • (UNIX version): printer drivers: Look for /etc/survex/print.ini rather than <prefix>/share/survex/myprint.ini

    • cavern: added warning that use of ROOT character ('\' by default) is deprecated; updated documentation to mention this.

    • cavern: added *export command to allow scope of station names to be limited. If *export is never used, behaviour is as before.

    • cavern: added *flags command to allow surface surveys and duplicate surveys (to be ignored when calculating the total survey length) to be indicated.

    • new version of 3d file format which can store flags and is slightly more compact. NB New programs can load old .3d files, but old programs can't load new .3d files.

    • caverot/xcaverot: allow surface legs to be hidden (they are by default)

    • cavern: compass can be omitted on legs in diving data to indicate a plumbed leg. In this case the tape and depth gauge readings are combined to give the length of the leg.

    • cavern: *begin/*prefix reentry warning now gives the original location as a separate warning so smart editors will allow you to click on it to jump to that file and line.

    • printer drivers: put "http://www.survex.com/" on printouts in case someone who gets a printout wants to know more about Survex.

    • cavern: added easting, northing, altitude added as prefered aliases for dx, dy, dz.

    • cavern: bug fix: "*prefix \" or "*begin \" would cause an internal error.

    • xcaverot: "load" button now works; bearing always shown in range 0-360; / and ' now tilt cave; `u' and `d' now switch to view from above/below; shift-ed keys now work; `o' now turns off non-overlapping labels; `ctrl-L' toggles display of survey legs.

    • caverot: n/s/e/w/u/d now work as in xcaverot - the previous functions they had weren't actually useful; if memory is really tight, disable non-overlapping labels rather than dying with an error.

    • prefer balanced quotes (`...') to unbalanced ('...') in messages.

    • cavern: file reading errors now treated as fatal; unattached survey error now fatal.

    • survex: syntax errors in command line arguments now fatal.

    • cavern: if there are errors, don't produce output files.

    • cavern: bug fix: trying to report certain errors in really long lines could cause an internal error.

    • 3dtodxf: renamed to cad3d since it can now produce DXF or sketch format.

    • aven: rewritten to use wxwindows (under Unix only so far).

    • printwin: new native Microsoft Windows printer driver.

    • (MS Windows version): new installation wizard.

    • Use double precision floating point to pass numbers to/from .3d file reading routines to avoid rounding problems.

    • cavern: change of terminology - use "reading" instead of "datum", since datum more usually means a map datum in surveying.

    Changes in 0.96:

    • (MSDOS and MS Windows versions): fixed bug in message file handling introduced in 0.96-prerelease 1 - symptoms: messages incorrectly looked for in current directory, or just printing "???" and exiting.

    • cavern: attempting to *include a non-existent file used to complain: "In file included from example.svx:31:" / "cavern: Couldn't open data file 'bad.svx'" - now complain "example.svx:31: Couldn't open data file 'bad.svx'".

    • xcaverot: cursor keys now move the 3D centre of rotation rather than just the position of the survey in the window.

    Changes in 0.96-prerelease4:

    • cavern (RISC OS version): "is this a directory" test would never say "yes".

    • caverot: (MSDOS version) cursor keys and delete had stopped working (due to changes in allegro graphics library) - fixed.

    • xcaverot: Zoom in and out with keyboard now behaves exactly like clicking on buttons; Removed unused "select" button; Fixed significant memory leak.

    • aven: (MS Windows version) Mark Shinwell has written a Microsoft Windows version of aven, which is better in almost every way than the directx version of caverot (and we're working to fix the few shortfalls), so we've shelved directx caverot and are now including aven instead with the MS Windows version.

    Changes in 0.96-prerelease3:

    • caverot: DirectX version for Microsoft Windows.

    • caverot: (MSDOS version) 640x480 doesn't work under NT either, but 320x200 does so default to that instead.

    • caverot: --mode-picker option now listed by --help.

    Changes in 0.96-prerelease2:

    • caverot: (MSDOS version) --mode-picker now recognised anywhere on command line (had to be last previously).

    • caverot: (MSDOS version) messages from Allegro library now internationalised.

    • caverot: (MSDOS version) don't try to get 800x600 if running under NT - try 640x480 instead.

    Changes in 0.96-prerelease1:

    • xcaverot: Improved responsiveness; can now load multiple .3d files from command line; set defaults (press DELETE) now defaults scale that which fits the whole survey on the screen.

    • cavern: Fixed bug in DOS and Windows versions with handling of paths containing a mixture of "/" and "\".

    • 3dtodxf: added "--grid" option (supplied by Leandro); output file now defaults to same name as input file but with a ".dxf" extension.

    • caverot: now get accents with MSDOS version.

    • cavern: applied patch from Leandro to fix problem with diving and topofil styles.

    • 3dtodxf: can now produce an elevation view with --elevation=ANGLE option.

    Changes in 0.95:

    • Put aven in a separate RPM package since it depends on a stack of libraries which not everyone will want to have to install.

    Changes in 0.95-prerelease7:

    • Disabled experimental gross-error detection code.

    • Now build RPMs (for RedHat Linux - may also work with Mandrake and some others).

    Changes in 0.95-prerelease6:

    • Updated all translations.

    • Fixed another logic error in "only mentioned once in *equate with explicit prefix" check.

    • Minor fixes to get MSDOS (djgpp) and MS Windows (mingw) builds working.

    Changes in 0.95-prerelease5:

    • If no stations are fixed, the first station mentioned is supposed to be. But on some platforms (e.g. x86 Linux) the second station was being used instead (regression test firststn).

    Changes in 0.95-prerelease4:

    • Fixed typo which prevented documentation from installing.

    • Fixed logic error in "only mentioned once in *equate with explicit prefix" check.

    Changes in 0.95-prerelease3:

    • aven: updated to compile with new cvrotimg.

    • More fixes for compilation problems on non-Linux UNIX platforms.

    Changes in 0.95-prerelease2:

    • Minor tweaks to some messages.

    • 3dtodxf: Fixed calculation of bounding box if all coordinates are negative in one or more axes.

    • Added Wookey's man pages - these just list the command line options and point to the HTML documentation.

    • Fixes for compilation problems on non-Linux UNIX platforms.

    Changes in 0.95-prerelease1:

    • cavern: *fix with error values (one for same all round, two for horizontal and vertical, three for x, y, z)

    • Fixed RISC OS not treating "foo." as a directory

    • Improved behaviour when sgmltools not installed

    • cavern: Merged patches for generating .3dx files for chasm

    • Miscellaneous code tidying

    • Moved unresolvable issues from BUGS to ZOMBIES

    • cavern: Fixed articulation code bug (handling of some cases of components with multiple fixed points); added regression test

    • cavern: "*begin" / "*end foo" now gives more explicit error

    • cavern: More work on gross error detection

    • xcaverot: you can now set environmental variables XCAVEROT_FONTNAME, XCAVEROT_INDICATOR_RADIUS

    • extend: now starts from highest station with only one leg. If no such station exists then revert to the previous behaviour of starting from the highest station (but complain if we have no legs at all).

    • cavern: line numbers now correct for .svx files with Mac style lineends

    • cavern: improved error reporting in several cases

    • caverot: on RISC OS now fall back to using 2 or even just one screen bank if we can't find a mode where we can create 3 banks

    • cavern: added data styles "TOPOFIL" (like tape/compass/clino but with a counter instead of the tape), "CARTESIAN" (dx, dy, dz), and "NOSURVEY" (for unsurveyed connections between surveys)

    • cavern: can now suppress "unused fixed point" error on a station by station basis by using: "*fix <station> reference <coords>"

    • cavern: new command "*require <version>" to allow survey data to specify the minimum survex version required to process it

    • print*: now search multiple print.ini files so you can override settings in the shipped file rather than having to modify it. Search order is: ~/.survex/print.ini (unix only), <prefix>/share/survex/myprint.ini, <prefix>/share/survex/print.ini

    • Changed xcaverot rotation/zoom to be the same way round as caverot

    • diffpos, extend, xcaverot, caverot: Now use cmdline library to parse command line arguments and so support --help, --version, etc.

    • hto2svx, svx2hto, and survex wrapper now all support --help and --version

    • `configure --disable-aven' now disables building of aven

    • caverot: on RISC OS fall back to using 2 or just 1 screen bank if there's not enough video memory allocated for 3.

    • Documentation brought more up to date.

    • If a station is only referenced once, and that reference is in a *equate and with an explicit prefix (e.g. "*equate 1 possibletypo.6"), a warning is issued.

    Changes in 0.94-prerelease2:

    • Added test for "cavern would segfault in articulate() on second *solve" (bug3.svx)

    Changes in 0.94-prerelease1:

    • cavern: Fix for bug reported by Leandro - cavern would segfault in articulate() on second *solve

    • xcaverot: Applied patches from Leandro: fix menu buttons, keyboard shortcuts, colour of station markers, scalebar length and text display, mouse right-button "cave drag", centre-button "plan/elevation switch", zoom in/out menu button

    • cavern: Fixed "matrix wouldn't invert" problem with certain datasets; added regression test (bug2)

    • Check for sgmltools v3 (sgmltools-lite) as well as v2

    • BorlandC and RISC OS config files are now regenerated when version number is updated

    Changes in 0.93:

    • Quick fix for problem with finding articulation points in particularly contorted components with 2 or more fixed points - for now each component is solved separately, but they aren't split at articulation points

    • Turned off some debug code left active by mistake

    • Test suite was missing a file

    Changes in 0.92:

    • 3dtodxf's DXF output can be opened by AutoCAD 13, 14 and 2000, as well as ArcView 3.x. Adobe Illustrator 8.0, and CorelDraw 8. [checked by Mike Yocum]

    • HTML documentation now has meaningful filenames (no more "x532.htm")

    • RISC OS documentation zip file now has correct filetype for Postscript version of docs

    • RISC OS binary distribution now includes !CLIcon GUI front end

    • Changed naming scheme for .zip archives to be more consistent

    • Added OLDNEWS with details of user-visible changes in much older versions

    Changes in 0.92-prerelease6:

    • Windows and MSDOS builds were missing 3dtodxf.exe

    • Updated French, German, Portuguese, and Italian translations

    • Windows archive for pre5 contained Linux binaries! (except caverot)

    Changes in 0.92-prerelease5:

    • printps: now allow separate font sizes (and fonts) for station labels and other text

    • print*/print.ini: allow different outputs to be specified for each operating system with sensible defaults in print.ini

    • print.ini: major overhaul of layout to improve readability

    • Another regression test case added

    • HACKING: new file containing nuggets of wisdom for developers

    • Added default s.d. for level legs

    • Fixed network reduction bug (undoing network simplifications didn't always restore removed stations to the station list)

    • Catch *begin with no matching *end

    • Catch *begin and matching *end in different files

    • Updated Portuguese, French, and German translations [Leandro/Eric/Gerhard]

    • Wrong warning was being given for `*equate 1 1'

    • xcaverot: fixed "step" button and keys

    • caverot: reduced exe size down to slightly more than 0.91 (allegro issue)

    Changes in 0.92-prerelease4:

    • cavern: "*infer" wasn't working due to internal token value mismatch

    • Short usage information now directs user to "--help"

    • print.ini: Tidied up comments about font size and line width for printps

    • printps: Line width now set correctly for all pages with ghostview

    • cavern: Fixed problem with highly *equate-d nodes (introduced in 0.92-pre1)

    • aven: Fixed redraw errors; enabled splash screen [mark]

    • cavern: Fixed deltastar network transformation to handle covariances

    • More test cases added to catch any regressions of recent bug fixes

    • Include alien.pl in distribution (helper script for compiling with BorlandC and on RISC OS)

    • cavern: tests for zero now use epsilon related tests, apart for on RISC OS where the FP emulation appears to cut corners and give slightly incorrect answers.

    • Now include Postscript version of documentation

    • HTML documentation now uses ".htm" extension instead of ".html" to placate crap unzip programs which can't handle anything over 8.3

    • NEWS now describes user-visible changes; ChangeLog is now autogenerated from the CVS commit messages

    Changes in 0.92-prerelease3:

    • xcaverot: Switching between plan and elevation now smoother

    • xcaverot: Fixed poor handling of keypresses when rotating

    • xcaverot: Reenabled buttons and made plan/elev button work properly

    • aven: New experimental gtk-based xcaverot replacement

    Changes in 0.92-prerelease2:

    • Can now just run individual tests from test suite

    • cavern: Turned off stray debugging output in matrix.c

    • Improved various bits of debug code

    • cavern: Fixed minor problems when compiling with NO_COVARIANCES

    • In test suite, cavern failing now causes test to fail immediately

    • Include riscos/config.h.in and borlandc/config.h.in in distribution

    • cavern: Fixed bug when finding articulation points in a component with more than one fixed point

    Changes in 0.92-prerelease1:

    • caverot: Help screen incorrectly documented tilt as '/' and ':' - actually it's on '/' and ''' (single quote)

    • caverot: Previously assumed shift-singlequote is '@' which is true on UK keyboards but not on US keyboards. Quick fix: check both '@' and '"' for now.

    • "printps -b" now reports "option requires an argument" (used to segfault)

    • Updated printer driver command line options in manual

    • caverot: Fixed shift key to accelerate movements in allegro version

    • cavern: Disabled articulation point code (for now - there's a bug)

    • cavern: If a datafile isn't found, now try a lowercase version before giving up (so on Unix you can now process a DOS dataset by unpacking with "unzip -L" to force filenames of unpacked files to lower case)

    • diffpos: Fixed a couple of bugs; also now exits with status 1 if differences were reported

    • Added some tests for cavern and diffpos - more to follow

    • cavern: Covariance code now working and enabled by default

    • cavern: When equating two existing stations we need to replace the pos of one with the pos of the other. We used to look down the whole station list, now we just look at neighbouring nodes (noticeable time saving for large networks with many equates)

    • cavern: Renamed truncate function in commands.c to avoid clash with library truncate function on FreeBSD

    • cavern: Warn that *prefix and *default are deprecated

    • Fixed obscure problems when configure is rerun with a different prefix

    • If the environmental variable SURVEXLANG isn't set, LANG is now check before resorting to the default. LANG is a standard way to specify the language for GNU applications - SURVEXLANG is still useful as a way to specify an alternate language if Survex doesn't support your prefered language.

    • Cured superfluous copy of svxdocs in doc/svxdocs in source distribution

    • RISC OS and BorlandC builds now track copyright message and version number automatically

    • If LANG is set to "en_US", treat it as if it were "en-us"

    • xcaverot: Merged in changes from John Pybus and Mark Shinwell

    • cavern: *solve followed by some entirely unconnected survey now caught cleanly (used to hit an assert)

    • cavern: Corrected component and loop counts when there's hanging survey around

    Changes in 0.91:

    • Fixed problem with message files with accented characters

    • Fixed RISC OS specific problem if SURVEXLANG was set

    • xcaverot: Fixed to centre and scale cave on startup

    • Removed superfluous containing directory for RISC OS documentation

    Changes in 0.90:

    • caverot: MSDOS Allegro mode-picker now reappears if an invalid mode is chosen (caverot used to unhelpfully exit in this case).

    • caverot: Fixed cursor keys and delete in MSDOS Allegro version

    • fixed problem with US English messages

    • text files in DOS/Win32 zips now have ".txt" extension and DOS end-of-lines

    • 3dtodxf: Leandro Dybal Bertoni has made major improvements to DXF output

    • caverot: Right and Middle mouse button functions were swapped under RISC OS

    • caverot: BorlandC (pre-386) version wasn't erasing screen between redraws

    • HTML version of documentation now has a hyperlinked table of contents

    Changes in 0.90 beta3:

    • cavern: output files now go in current directory rather than the same directory where the first .svx file is found. You can set a different directory using the "--output" command line option, which can point to a directory or a file.

    • cavern: "*truncate off" rather than "*truncate 0"

    • survex: added wrapper to convert survex invocation into cavern invocation

    • hto filters moved into separate subdirectory of source distribution

    • cavern: fixed bug which included stations with 4 or more connections in the .3d file several times

    • added "miniam.pl" which generates makefiles for BorlandC and RISC OS

    • printdm/printpcl: weren't showing text - problem with new format font file

    • check for old SURVEXLANG codes (engi, fren, germ, ...) now case insensitive

    Changes in 0.90 beta2:

    • xcaverot: Fixed to handle > 2048 stations/legs

    • Spanish and Catalan translations updated (only French left to do)

    Changes in 0.90 beta1:

    • German, Italian, and Portuguese translations updated

    • Linux binaries now supplied (x86 RPM)

    • Documentation brought largely up to date

    Changes in 0.90 alpha5:

    • cavern: comment parsing fix

    • cavern: network reduction bug fixed

    • new messages extracted for translation

    • printps: much smaller postscript output

    • printps: real circles in postscript output

    • nicer infobox on printouts

    • caverot: help page improved

    • scale units on printout bug fixed

    Changes in 0.90 alpha4:

    • printps: made postscript bounding box slightly larger

    • printps: tweaked postscript output to reduce size (5% smaller for Kaninchenhoehle)

    Changes in 0.90 alpha3:

    • fixed bogus "Error writing printer output" message from printer drivers

    • minor cosmetic fixes to printer drivers

    • printps: added postscript bounding box

    • printps: fixed extra "%"s in postscript output

    • cavern: removed stray debug messages added in 0.90 alpha2

    Changes in 0.90 alpha2:

    • cavern: fixed memory allocation bug (affected *include and *title)

    Changes in 0.90 alpha1:

    • cavern: Halt after 50 errors to save swamping user

    • now use GNU getopt to parse command line options

    • cavern: -f and @ removed

    • cavern: -n, -t and -u replaced by *-commands

    • source code tidied up considerably

    • new format message files - now internally use unicode (in UTF-8) and should be faster and smaller

    • new format font file for printdm/printpcl (faster and smaller)

    • cavern: GCC format error/warning messages to allow clicking on messages to jump to the problem line in editors which support it (e.g. GNU emacs and jed)

    • Now uses GNU automake under Unix which makes my life a lot easier and also provides "make install"

    • xcaverot: now checks for failing to open the X display

    Changes in 0.81:

    • survex: Network reduction bug fixed (fix carried back from 0.90 development)

    Changes in 0.80:

    • Added ChangeLog

    • DOS binary distribution now includes files: BUGS NEWS TODO ChangeLog

    • Cross-compiler build for DOS now has debugging information stripped from .exe files once more, so they are rather smaller

    • Sources now include configure.in for those wanting to do major development work

    • Unix versions now build use GNU autoconf - to build just unpack, run "./configure" then "make"

    • Messages file now represents accents like in HTML (e.g. &eacute; for é)

    • caverot: fixed up standard DOS (allegro) version to work much better. In particular, it will now try to choose a video mode for itself (use --mode-picker at the end of the command line to get the mode picker), and keyboard and mouse initialisation problems are cured

    • survex: You can now use DOS or UNIX style filenames (/ or \ for directory separator) on any platform and they will be translated to the native format for your OS. This makes datasets much more portable.

    • survex: "Unique" option changed to "Truncate" and now truncates names if set

    • Removed artificial limit on survey station name length (was 12 characters per prefix component)

    • Many other minor changes

    Changes in 0.72:

    • Expiry timeout removed from all programs

    Changes in 0.71:

    • printdm: Native Printer support for Cannon BJ printers.

    • caverot: DJGPP version for use of more than 640K

    • xcaverot: Updated to have most of the features of Caverot (non-overlapping labels, scale bar & tilt/direction indicators)

    Changes in 0.70:

    • Language support for Catalan, Spanish, and Italian added

    • caverot: tilt indicator added

    • caverot: constant speed rotation (e.g. for small caves on fast computers)

    • caverot: Smooth plan <-> elevation transitions on faster machines

    • caverot: Two files can be read in and displayed in different colour (eg cave and surface data)

    • caverot: Extended memory version so big datasets can be displayed on DOS version

    • Printer Drivers: INI file used instead of multiple configuration files.

    • Printer Drivers: Defaults set-able for all print settings

    • Printer Drivers: Option to print tilted plots

    • printhpgl: now has origin in centre of page option (and is default)

    • printdm/printpcl: Printer font made ISO-8859-1 compatible

    • Printer Drivers: Dotted borders to facilitate cutting to size with scissors

    • Printer Drivers: Scale bar length limited to save time on large plots

    • survex: If adjusted tape is negative then warning generated

    • survex: User-definable characters for input (e.g. for odd characters in imported station names)

    Changes in 0.62:

    • printdm: bug-fix: a graphics postfix setting had been added to dm.cfg, but if this was not used then printing would go wrong

    • printpcl: added an option for printers that do not understand the PCL Vertical Tab command - see PCL.cfg

    Changes in 0.61:

    • Includes a new version of caverot that arranges the labels so that they don't overlap.

    Changes in 0.60:

    • French and German translations greatly improved

    • survex: Survey grades now supported

    • survex: *calibrate, *data, and *units enhanced in a backwards compatible way

    • survex: survey network is now split at articulation points (faster/less memory)

    • survex: Omitted clino readings give a vertical sd of tape/sqrt(10)

    • survex: filenames with spaces are now supported - just put them in quotes ("")

    • diffpos/3dtodxf: improved and made more robust

    • caverot: "sliding point" code improved to work even in really extreme cases

    • caverot: added a "compass"

    • caverot: memory usage improved, so it now copes with larger files

    • And a host of more minor improvements and bug-fixes

    survex-1.4.4/doc/HACKING.htm0000644000175000017500000001402314241026514012317 00000000000000 Survex Hacker's Guide

    Hacking Survex

    (That's hacking in the "tinkering with code" sense, not in the "breaking into other people's computer systems" sense).

    This is currently a random collection of notes that need to be written down while I remember. With time it should evolve into a more coherent document. If you have any questions which this should answer but doesn't then ask me and I'll add them.

    Network code debugging

    You can pick which network simplifications are attempted using "-z" with an argument listing code letters. So:

    • -z= no special simplifications (articulation still performed)
    • -z=l remove "lollipops"
    • -z=p remove parallel legs
    • -z=d convert deltas to stars

    And you can combine these in any combination:

    • -z=lp remove "lollipops" and parallel legs
    • -z=lpd remove "lollipops" and parallel legs; convert deltas to stars

    "-z=lpd" is the default (in 0.99 at least - more transformations may conceivably be added in future, although the simple common cases are already covered).

    Developing on Unix Platforms

    You'll need automake 1.5 or later (earlier versions don't support per-executable CFLAGS; 1.6 has been tested and works, but wasn't a very stable release - automake 1.6.1 is a better bet) and autoconf 2.50 or later (autoconf 2.52, 2.53, 2.64 and 2.71 have all been used successfully).

    The wxWidgets library is used for aven's UI. Currently >= 3.0.0 is supported.

    The PROJ library is used for coordinate conversions. Currently >= 6.2.0 is supported.

    The Perl Locale::PO module is used for process message translation files.

    For building the documentation you'll need docbook-utils (also known as docbook-tools) and w3m.

    And for building unifont.pixelfont, you'll need unifont installed.

    On Debian, you can install the required packages using:

    sudo apt-get install autoconf automake liblocale-po-perl libproj-dev libwxgtk3.0-gtk3-dev inkscape netpbm docbook-utils w3m unifont
    

    Building on Non-Unix Platforms

    Mingw (Microsoft Windows)

    Currently I build this with a Linux hosted cross-compiler. I use the packaged cross-compiler in the debian testing/unstable distribution:

    sudo apt-get install mingw-w64-i686-dev
    

    I then install the various libraries by compiling from source. For wxWidgets 3.0.5, I apply a patch to fix a compiler error and disable a pointless and annoying compiler ABI check (with this check aven stops working each time my cross compiler package is upgraded to a new GCC version; without it everything works fine).

    Then I configure, build and install with:

    ./configure --prefix=/usr/i686-w64-mingw32 --host i686-w64-mingw32 --with-msw --with-opengl --without-libtiff --enable-display --disable-shared host_alias=i686-w64-mingw32 DOCBOOK_TO_MAN="xmlto man --skip-validation"
    make
    sudo make install
    

    With wxWidgets 3.1.6, there's a linking problem with aven if libtiff isn't disabled, and Survex doesn't use it so it's simplest to just disable it:

    /usr/bin/i686-w64-mingw32-ld: /usr/i686-w64-mingw32/lib/libwxtiff-3.1-i686-w64-mingw32.a(wxtiff_tif_dirinfo.o):tif_dirinfo.c:(.text+0x80d): undefined reference to `_TIFF_snprintf_f'
    

    For sqlite (needed by PROJ):

    wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
    tar xvf sqlite-autoconf-3360000.tar.gz
    mkdir BUILD
    cd BUILD
    ../configure --prefix=/usr/i686-w64-mingw32 --host i686-w64-mingw32 --disable-shared --disable-fts4 --disable-fts5 --disable-json1 --disable-rtree host_alias=i686-w64-mingw32
    make
    sudo make install
    

    For PROJ 8.2.0 (TIFF apparently useful for some grids, but would also need libtiff):

    mkdir BUILD
    cd BUILD
    ../configure --prefix=/usr/i686-w64-mingw32 --host i686-w64-mingw32 --disable-shared host_alias=i686-w64-mingw32 --without-curl --disable-tiff
    make
    sudo make install
    

    For ffmpeg 4.4.1:

    sudo apt-get install yasm
    mkdir BUILD
    cd BUILD
    ../configure --prefix=/usr/i686-w64-mingw32 --cross-prefix=i686-w64-mingw32- --enable-cross-compile --target-os=mingw32 --arch=i686 --disable-shared --disable-decoders --disable-demuxers --disable-programs --disable-network --disable-bsfs --disable-protocols --disable-devices
    make
    sudo make install
    

    Building on Windows in a native mingw environment will probably require tinkering. Best bet is probably to install bash and use the current configure script. I'm happy to help if you want to try this, and I'll incorporate patches provided they're fairly clean.

    Microsoft Windows Installer Builder

    We use InnoSetup to build the MS Windows Installer. Survex 1.4.2 was built using InnoSetup 6.2.0.

    Here are some random notes:

    Packages Needed

    On Debian unstable/testing:

    sudo apt-get install wine wx3.0-i18n
    

    And then run:

    wine ~/Downloads/innosetup-6.2.0.exe
    

    Translations

    In addition to the translations included with InnoSetup as standard, we also add these, which you can find in the lib subdirectory of Survex's source tree:

    • ChineseSimplified.isl (6.1.0+)
    • ChineseTraditional.isl (6.1.0+)
    • EnglishBritish.isl (6.1.0+)
    • Greek.isl (6.1.0+)
    • Hungarian.isl (6.1.0+)
    • Indonesian.isl (6.1.0+)
    • Romanian.isl (5.5.3+)
    These are taken from the Inno Setup Translations page.

    survex.iss

    This file is generated by configure (from the template survex.iss.in). We could instead have a static survex.iss which uses #include to pull in a file with the Survex version info in, but the current method works well enough so we'll stick with it for now (I suspect #include was introduced since we started using InnoSetup). survex-1.4.4/doc/NEWS.htm0000664000175000017500000047014214367065110012045 00000000000000 Summary of User-Visible Changes in Survex 1.4.4

    Changes in 1.4.4 (2023-02-03):

    • aven: Fix red line in clino background to be grey (this was introduced in 1.4.3 and was a debugging change accidentally left in).

    • aven: Accept weird .3d files from Therion which have empty components in station names. That's not really valid by Survex's definition of station names, but it's not very helpful to reject such files, so just disable the checks that were rejecting this. The result is empty entries in the survey tree, but I don't see what we can really do that's better than that. Reported by Vasily Vl. Suhachev.

    • aven: Make it more obvious you can enter a custom scale by adding a "..." entry to the scale combobox - selecting this clears the value and gives focus to the combo box text entry. This control has always supported clicking to enter a custom scale, but there wasn't really any indication that this was possible before. Partly addresses #132, reported by Eric C. Landgraf.

    • aven: Force export window to resize when the export format is changed as different controls are shown depending on the export format.

    • aven: Right-align tilt spin control value in print/export dialog to match the bearing spin control.

    • aven,survexport: Add ability to export as Survex 3d which is useful as you can filter to a subset of surveys, filter out splays, convert from other formats the img library can read, etc. This feature is a bit rough and ready currently but please report issues.

    • dump3d: Add --legs option which converts MOVE and LINE to a single LEG line per leg with the from and to coordinates. Tools which parse dump3d output should find this easier to process as it avoids having to track a "current position".

    • Update manual to have a complete list of quantities which *calibrate accepts. Reported by echarlie

    • cavern.tst: Fix testsuite to work with SOURCE_DATE_EPOCH set.

    Changes in 1.4.3 (2022-05-17):

    • aven: Much improved support for HiDPI monitors on all platforms.

    • aven: When started without a file make sure the window has focus so menu accelerators and shortcuts work without clicking on the window.

    • aven,survexport: DXF export now puts splays in a separate layer and uses a dotted linetype for them. Patch from echarlie, see #60.

    • Improved survexport man page to include command line options and a short note about DXF export. Patch from echarlie.

    • Minor translation updates.

    • (Unix version): aven: Fix handling of EGL-based wxGLCanvas (which wxGTK 3.1.5 has). Fix a build failure and don't force X11 (as the EGL-based wxGLCanvas works on Wayland).

    • (MacOS version): aven: Fix hang on startup without a file. Fixes #120, reported by Enrico Fratnik.

    • (Microsoft Windows version): Now using wxWidgets 3.1.6 (was 3.0.5).

    • img library: Support reproducible builds which create .3d files by not embedding a timestamp if environment variable SOURCE_DATE_EPOCH is set. Requested by Martin Budaj.

    Changes in 1.4.2 (2022-02-25):

    • aven: Fix to be compatible with FFmpeg 5.0.

    • Improve docs for *cs and *declination.

    • cavern: Fix "*declination auto" not to crash when built with PROJ < 8.1.0. Bug introduced in 1.4.0.

    • cavern: For each `*declination auto` command cavern now reports an "info" message showing the range of calculated declination values and the dates at which the ends of the range were obtained, and also the grid convergence (which doesn't vary with time). Fixes #92, reported by Rob Eavis.

    • cavern: If any of the N-S, E-W or U-D ranges includes an anonymous station then also report the range in that direction excluding anonymous stations. Patch from Thomas Holder.

    • cavern: The error from a bad `*cs custom` command now highlights the quoted string properly.

    • cavern: "FIX command with no coordinates - fixing at (0,0,0)" is now an "info" rather than a "warning". It's not really reporting a problem and the ability to omit the coordinates is a deliberate feature. It is useful for the user to know where the "*fix" without coordinates is if they want to change the survey to be in real coordinates, so an "info" diagnostic is a good fit. This also means aven will no longer stay on the log view after processing a dataset which fixes without coordinates.

    • cavern: If "*fix" is used twice with no coordinates we no longer say "FIX command with no coordinates - fixing at (0,0,0)" right before: error: Already had FIX command with no coordinates for station "x"

    • cavern: Include errors in Compass .mak files now report the error in the line where the included filename is actually specified.

    • cavern.tst: Add test coverage for warnings for *entrance and *export with a station which doesn't exist otherwise.

    • aven/survexport: Change JSON export to be valid JSON. This means the output has changed incompatibly, but it wasn't valid JSON before which suggests nobody was actually successfully using it. Fixes #128, reported by Pawczak.

    • aven.tst: Skip one testcase on macos as it seems to hang, at least when running on the Continuous Integration system.

    • (Microsoft Windows version): The installer is now generated with a much newer version of Innosetup. Most notably, it now supports installing as a non-admin user. This also means Microsoft Windows Vista is now the minimum supported version but 2000 and XP are both many years out of support anyway.

    • (Microsoft Windows version): The coordinate system database for PROJ is now included so "*cs" now works (broken since 1.4.0).

    • Chinese translation updates from Qingqing Li.

    • Building from source now requires a compiler with support for C99. C99 seems to be universally supported by compilers now so we don't expect this to inconvenience anyone.

    Changes in 1.4.1 (2021-11-08):

    • This release should work with any PROJ version >= 6.2.0.

    • cavern.tst: Fix to actually run tests when building outside the source tree. Previously files for testcases weren't found, and tests were skipped with a warning, which lead to 1.4.0 being released with two failing testcase. Fix to find the files, and make not finding them an error.

    • cavern.tst: Fix testcases gpxexport and require_fail which were failing in 1.4.0.

    • 3dformat.htm: Document that coordinate system can be ESRI:<number>.

    Changes in 1.4.0 (2021-11-06):

    • New release series to mark that Survex now uses the new PROJ API, and requires PROJ >= 7.2.0. Survex 1.2.x will continue to support PROJ < 8 (and won't support newer PROJ versions). Fixes #102, reported by Bas Couwenberg. Due to these changes, PROJ will now convert directly between coordinate systems where it knows how to, instead of always converting via WGS84. This means conversions may now be more accurate in some cases, and you may notice station coordinates changing - these should be for the better. Also, the vertical datum is now taken into account automatically, and terrain data now aligns much better vertically with surveys. Fixes #56.

    • aven: Clicking and holding the left mouse button on the compass or clino, then (while still holding) clicking the right button no longer causes a wxWidgets assertion to fail. Reported by echarlie.

    • img library: Rewrite certain proj strings when reading 3d files for better compatibility with newer PROJ versions, where use of proj strings is strongly discouraged. `+init=epsg:` followed by a code number is rewritten to `EPSG:`. `+init=esri:` followed by a code number is rewritten to `ESRI:`. The proj strings which cavern used to put in 3d files for UTM zones and S-MERC are rewritten to `EPSG:` follow by the appropriate code number.

    • Also install survex.lang for gtksourceview 4. Fixes #125, reported by Martin Green.

    • Fix missing data style in interleaved example in manual. Reported by echarlie.

    • Use jw from docbook-utils instead of sgmltools-lite to process the manual. The sgmltools-lite homepage says it's no longer being developed, and suggests docbook-tools (which Debian packages as docbook-utils) as a replacement.

    • doc/HACKING.htm: Update Debian packages to install

    • doc/HACKING.htm: Update details of setting up mingw cross-build environment.

    • Add simple tests for GPX and KML export.

    • Expand cavern testcase csbad.

    • cavern.tst: Parse warning/error counts more robustly. Previously we'd get confused if the final line just contained an integer, e.g. if we end listing stations not attached to a fixed point.

    Changes in 1.2.45 (2021-03-09):

    • Avoid undefined signed shifts in 3d file handling. Survex itself is only affected on big-endian platforms (so most Linux machine, Microsoft Windows, and current Macs are all OK), but this also affects the img library on all platforms when used in standalone mode as it is in other programs. Fixes #119, reported by MatÄ›j Plch.

    • aven:

      • When reading cavern output for the log window, we need special handling for the case when a chunk of output ends mid-way through a UTF-8 sequence. Previously we lost the first byte of the sequence in this case (and would then show it as an invalid character), but now it is handled correctly. In practice, most of the cavern log output is ASCII so it's quite possible nobody's ever actually hit this.

    • testsuite:

      • Suppress reports of leaks on exit from the LeakSanitiser debugging tool. We know we don't release all memory explicitly on exit since doing so would mean extra work for no reason as the OS reclaims all memory when the process exits.

    • Convert OLDNEWS encoding from ISO-8859-1 to UTF-8.

    Changes in 1.2.44 (2021-02-10):

    • aven:

      • (Microsoft Windows version): Now using wxWidgets 3.0.5 (was 3.0.4).

    • cavern: * Add support for quadrant bearings (e.g. N30E). Patch from echarlie. * Report error if angle units are specified for passage dimension. Previously "*units left degrees" and similar were incorrectly quietly accepted. Spotted by echarlie. * Fix *data with no parameters to keep the current style and reset any state as documented. Previously it actually instead ignored any survey data until the next *data command with parameters. * Fix minor memory leak in *data. We leaked a single memory allocation on "*data default" or an invalid *data command. * Improve test coverage.

    • survexport: * The check for whether a format supported --elevation, --plan, --bearing and --tilt was inverted. Reported by echarlie. * Fix reporting of export errors on Microsoft Windows. Reported by Matic Di Batista.

    • img library: Fix img_open() when used in other programs. Patch from Thomas Holder.

    • configure: Add wx-config-gtk3 to WX_CONFIG search for Arch Linux. Patch from Thomas Holder.

    • Improve documentation of interleaved data. Most notably, we now document that a blank line breaks the current traverse.

    • Fix typo in manual ('cypolar' -> 'cylpolar'). Patch from Wookey, fixes #117.

    • Chinese translation updates from Qingqing Li.

    • Russian translation updates from Vasily Vl. Suhachev.

    • French translation updates from Jean-Marc and from Wassil Janssen.

    • Bulgarian translation updates from Wassil Janssen

    Changes in 1.2.43 (2020-02-28):

    • cavern: Update to use v13 of the IGRF model for calculating declinations. This was issued in December 2019 and should give slightly more accurate declinations for surveys made since 2010.

    • aven:

      • Fix colouring of "not in loop" when colouring by error. 1.2.42 introduced a bug where surveys not in a loop were coloured as if they had zero error. Fixes #111, reported by Bruce Mutton.

      • Fix handling of grid in export. The grid was always getting enabled (probably since 1.2.8) even for formats which don't support exporting with a grid. This resulted in the bounding box being set wrongly for some formats such as SVG, as reported by Richard Knapp on the mailing list.

      • When showing errors processing the survey data we'd previously crash if cavern incorrectly reported an error as being in a column off the end of the line - now we just ignore the error column in this case.

      • Support colouring by survey style ("normal", "diving", "nosurvey", etc).

    Changes in 1.2.42 (2019-09-04):

    • aven:

      • Allow colouring by horizontal or vertical error.

      • (Unix version): Disable scaling for HiDPI displays with GTK3. The OpenGL code needs work before this will work usefully, so just disable for now (which simulates how things are when using GTK2).

      • (Unix version): Fix orientation of notebook tabs when build with wxWidgets 3.1 development versions. We want horizontal tab orientation, but were passing a weird flag combination which now results in vertical tab orientation.

    • When exporting to a format where we support rotation in the horizontal plane (such as SVG), the rotation was incorrectly applied to cross section data (except for the default rotation of zero). Fixes #108, reported by Richard Knapp.

    • Add a section to the manual covering the command line tools, and what you might still need to use them for.

    • Fix compiler warning when building from source with GCC 9.

    • Consistently refer to macOS not OS X - Apple have renamed it yet again.

    • (macOS version): Revert the workaround for the crash on macOS 10.14. The bug we were working around is fixed in git ready for wxWidgets 3.0.5 and there's a backported fix in the homebrew wxmac 3.0.4-2 package, which is how we now recommend people install on a Mac. Closes #101, reported by floho.

    • (macOS version): Remove buildmacosx.sh script since installing from homebrew is now the recommended approach.

    Changes in 1.2.41 (2019-07-10):

    • aven:

      • (Microsoft Windows version): Fix error on startup in the pre-built version of 1.2.39 and 1.2.40. This is a recurrence of the same issue as affected 1.2.33 - this time I've patched out the unnecessary check in wxWidgets which causes this problem so it shouldn't recur again. Reported by Brian Clipstone.

      • (macOS version): Add work around for crash on macOS 10.14 (not fully tested as I don't have access to a Mac). Hopefully fixed #101, reported by floho.

    Changes in 1.2.40 (2019-07-04):

    • aven: Draw the measuring line ring with an even shape. Previously the exact shape of the ring varied slightly depending on the exact coordinates, which could be visually distracting once you noticed it.

    • We were casting a function pointer with a bool return type to the same type but with a void return type. In practice this probably works fine on most platforms, but it's undefined behaviour and also gives a compiler warning with some compilers.

    • Fix bug introduce in 1.2.39 with where the "esri" data file for PROJ is installed.

    Changes in 1.2.39 (2019-06-29):

    • Support versions 5.x and 6.x of the PROJ library we use for handling conversions between coordinate systems. Reported by Bas Couwenberg in #102, by Richard Knapp in #103 and by Martin Sluka in email.

    • (Unix and Mac OS versions): When checking if something is a file or if it is a directory, we no longer treat a symlink as being neither, but instead return an answer based on what the symlink points to.

    • aven:

      • Improve handling of hidden splay ends. Previously, hidden splay ends still served as "targets" for snapping the mouse pointer to, and still got crosses when crosses were enabled. We don't have a handy flag for "this is the outer end of a splay" and computing that on demand isn't so easy to do, so for now we use the "anonymous station" flag so at least these cases now behave properly for splays to anonymous stations (which is likely to be what people with huge numbers of splays from disto-x, etc are using). This does mean that anonymous stations on continuation passages will incorrectly also be off when splays are hidden, but that seems an OK trade-off for now and a definite improvement over the previous situation. The snapping of the mouse pointer was reported by Frank Tully in #105.

      • Fix typo in export UI (CVS should be CSV).

    • Documentation:

      • Add CSV to documented list of survexport output formats.

      • Fix *declination syntax synopsis - "auto" is a literal string, not a placeholder.

      • Update PROJ project name and website - the name is now "PROJ" (all caps and no ".4" suffix) and the website is now: https://proj.org/

    • Install gtksourceview-3.0 language file so .svx files now get syntax highlighting in gedit and other GtkSourceView-based editors. Patch from Philip Withnall. Fixes #98.

    • (Microsoft Windows version): The Survex installer doesn't uninstall the old version when you upgrade, but just overwrites it with the new version. In 1.2.35 cad3d.exe was replaced with survexport.exe, but a user upgrading from an older version would still have cad3d.exe from that old version. We now remove any old cad3d.exe left over from a previous install in the same location to avoid confusion.

    • Add a few more message translations.

    • Fix warnings when built with a C++11 compiler.

    Changes in 1.2.38 (2019-03-02):

    • cavern:

      • Deprecate MILS as angular units. Survex has long support MILS as an alias for GRADS. However, this seems to be a bogus definition of a "mil" which is unique to Survex (except that Therion has since copied it) - there are several different definitions of a "mil" but they vary from 6000 to 6400 in a full circle, not 400. Reported by Andy Edwards.

      • Fix segfault for *include "". This isn't useful, but shouldn't crash. It now reports "file not found" instead.

      • Use isnan() to check for not-a-number. This is cleaner, more robust and more efficient than formatting the number as a string and checking for "NaN" or "nan" in the result.

    • Avoid unused variable warning when compiling from source with modern ffmpeg.

    • Drop support for wxWidgets < 3.0. 3.0.0 was released over 5 years ago and should be easily available everywhere by now. I'm no longer easily able to test with wxWidgets 2.8, and this allows a significant amount of cruft to be removed.

    • (Linux version): survex.spec: Fedora have removed gcc from the default build environment so need to explicitly list it in the BuildRequires tag. See https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot for more information. Patch from James Begley.

    Changes in 1.2.37 (2018-11-18):

    • aven:

      • Add basic "Colour by Survey" feature. The colours used aren't currently controllable.

      • Fix export of splays. Patch from Thomas Holder.

      • Fix KML export to avoid invalid geometry when a tube intersects itself. Patch from Robert Jones.

      • (Unix version): Fix to work under Wayland by forcing the x11 GDK backend for now. This is a workaround until wxWidgets OpenGL support is updated to work under Wayland. Reported by Philip Balister.

      • Fix warnings about using deprecated functions when building movie export code using FFmpeg 4.0.

    • cavern:

      • Compass MAK files: Handle fixed point coordinates in feet - previously the units were ignored and the coordinates assumed to be in metres.

      • Previously the first byte in a MAK file was ignored. Typically MAK files start with a comment, and since cavern currently ignores lines that start with characters it doesn't understand the meaning of, this bug would often go unnoticed.

    • survexport:

      • Fix exporting of passages, walls and cross-sections by running the code aven uses to decide how much to rotate each cross-section. Previously all cross-sections were aligned West-East. Reported by Robert Jones.

      • Default to .pos output if the program name is 3dtopos, and install a second copy (or hardlink under Unix) as 3dtopos. This provides compatibility with current releases of Tunnel. Reported by Becka Lawson, Wookey and Stephen Crabtree.

    • Fix some German translations. Patch from Thomas Holder.

    • (MacOS X version): Fix aven-create-app to not delete converted icons. Typo spotted by Robert Jones.

    • Improve documentation for *team. Document the requirement to quote names unless a person is identified by just one name. Document that the roles are optional, as that information may not have been recorded, and to align with therion's team command.

    Changes in 1.2.36 (2018-07-18):

    • aven:

      • Add support for exporting as a CSV (Comma-Separated Values) file.

      • Support exporting KML with altitude mode "clamp to ground". In this mode, the altitude in the data is ignored and it's rendered on the surface of the terrain. This is useful if your KML viewer renders the terrain as opaque so underground data isn't visible. Rendering cave passages on the surface isn't great, but is better than not being able to see them at all. This option may also be helpful if you want to see where to look on the surface for new entrances.

      • Highlight surveys with a white loop as the mouse is moved over them in the survey tree. This is akin to how we highlight a station with a white ring, and allows restoring "double-click survey in tree to zoom" which temporarily required a quadruple-click in 1.2.35.

      • Only show checkboxes in the survey tree for surveys not stations.

      • Fix wxWidgets assertion if the user tried to select additional surveys to show via the right-click menu.

      • Fix multiple survey filtering when both a parent and child survey are selected. In this case it makes most sense to show all child surveys of the parent, but we actually showed a slightly arbitrary subset of the child surveys of the parent.

      • The checkbox area in the survey tree is now included in the area which is considered by mouse-over updates such as highlighting the station or survey.

      • Fix display of double quotes in cavern log window (they were being replaced with control character 0x16 due to a typo in the code).

      • Add shortcuts to buttons in cavern log window.

      • Eliminate use of gluErrorString() function which eliminates some deprecation warnings when building on macOS.

      • Reject multiple --survey command line options for now (only the last has been used for a long time, but now we actually support multiple survey filtering this matters more).

    • survexport:

      • Report a useful error when trying to convert a .3d file without coordinate system information to GPS. Reported by Mark Shinwell.

      • Handle multiple redundant --survey command line options correctly.

    • dump3d: Report station flag "WALL", which was added in 1.2.7.

    • Minor translation updates.

    • Update manual for Microsoft Windows changes.

    • tests/: Add test coverage for warnings about suspect readings

    • Fix warning when compiling with clang.

    Changes in 1.2.35 (2018-07-03):

    • aven:

      • Viewing can now be restricted to multiple surveys. Use the right-button menu on a survey in the survey tree and select "Show" to enable checkboxes for that survey and all its siblings. Only the selected surveys are shown on screen, printed and exported.

      • Don't open a survey when its name is double clicked. This was happening due to code added to "allow double-clicking to work on wxMSW >= 2.8.11". However, reverting that change still seems to allow double-clicking to work on both wxMSW and wxGTK, but fixes the unwanted additional opening of the survey.

      • Pick initial survey scaling based on whichever of the window width or height gives the smaller scale. Previously we always used the window width, which can result in parts of the cave being outside the initial view. Reported by Wookey.

      • Drop ability to specify a PROJ string in the export dialog. This was added to allow exporting to formats such as GPX before we added support for specifying the projection in .svx files, and that support is now mature.

      • DXF export now uses 2 decimal places (was 6) for the bounding box, for consistency with the precision used for coordinates.

      • Fix handling of surface flag during export. In formats which discriminate, legs could previously have got assigned the wrong status.

      • Fix bug which probably prevented aven starting when OpenGL double buffering is unavailable. This is unlikely to affect any common configurations.

      • (Microsoft Windows version): Fix loading of 3d files with non-ASCII filenames. Issue reported by Matic.

      • (Microsoft Windows version): Fix incorrect display of some toolbar icons. Probably broken since 1.2.17.

    • survexport: New command-line export program which uses aven's export code. Replaces 3dtopos, cad3d and findentrances, since it can do all that these tools could do, plus much more.

    • Merge more Spanish i18n updates from Evaristo Quiroga.

    • Minor updates to various other translations.

    • img library:

      • Now supports reading from and writing to an existing FILE*.

      • Improve API documentation.

    • (Microsoft Windows version): Fix packaging to include wxWidgets translation files like it was supposed to, which fixes a few missing translations. This was probably broken by changes in 1.2.8. Reported by Evaristo Quiroga.

    • (Microsoft Windows version): Drop two options from explorer bindings. "Convert to DXF" and "Convert for hand plotting" have both been supported via aven for a while, and that's a more useful way to access them as you can control what gets exported.

    Changes in 1.2.34 (2018-03-24):

    • aven:

      • (Microsoft Windows version): Fix error on startup in the pre-built version of 1.2.33.

      • (Microsoft Windows version): Now using wxWidgets 3.0.4 (was 3.0.2).

    Changes in 1.2.33 (2018-03-22):

    • aven:

      • Reliably disable scale bar in perspective view. This is supposed to happen (because the scale across the screen varies in perspective view) but actually the scale bar stayed around until an update was forced for another reason. Spotted thanks to Pedro Silva Pinto.

      • Make "no date"/"not in loop" colour grey. The white was a bit bright and made it harder to see the legs that had colours. The grey now used is within the brightness range of the other colours. Fixes #94, reported by Erin Lynch.

      • Fix KML export - exporting both survey legs and station names resulted in a malformed KML file. This bug was introduced in 1.2.30 when support for exporting passages and walls was added. Reported by Erin Lynch in #90.

      • Consistently use 2 decimal places for altitude in KML output. Some places used 8 decimal places which is appropriate for lat and long, but clearly overkill for an altitude in metres and increases the file size unnecessarily.

      • Right-align bearing widget in print/export dialog. The change to allow the value to wrap round from 360 to 0 in 1.2.27 inadvertently made this control left-aligned (due to incorrect wxWidgets documentation of the default style for this control).

      • (Unix version): Work around wxWidgets bug so that custom cursors work under GTK3.

      • (Unix version): Update GTK version reporting - report GTK3, and don't bother to report subversions of GTK2 (it seems to be fairly arbitrary which subversions wxWidgets defines constants for).

      • Update code to work without warnings when using wxWidgets 3.1.0 (the current development version).

      • Make movie export code compatible with upcoming FFmpeg 3.5 release. It should still work with the older versions that worked before this change. Reported by James Cowgill in https://bugs.debian.org/888334

    • cavern:

      • Warn about 2 digit years. We can't change the assumption that these are 19xx without risking breaking existing datasets, but the further we get into this century, the more likely such an assumption is to catch someone out. The warning can easily be quashed by explicitly adding the assumed "19".

    • The Spanish translation is now up to date once more, thanks to updates from Evaristo Quiroga.

    • Merge French translation updates from Jean-Marc.

    • Fix transposed German Northing and Easting labels. Fixes #95, reported by milosch.

    • Fill in missing translations of "Easting", "Northing", "E" and "N" for Bulgarian, Greek, Hungarian, Polish and Russian based on other existing translated messages.

    • Align .pos file headings better with columns of coordinates below for Indonesian and Polish.

    • Fix handling of the message string "error" before messages loaded. If there's an error loading messages, we need this message to report it. Reported by Martin Sluka.

    • Fix a few compiler warnings.

    • img library: Fix extracting leaf survey name for survey title. When there are three or more levels of survey, we were taking everything after the first dot rather than everything after the last dot.

    • Fix problems with testsuite on macOS:

      • cavern.tst: Skip "ONELEG" testcase on case-insensitive filing systems - this test isn't meaningful unless the filing system is case-sensitive, but happens to fail if it isn't.

      • cavern.tst: Workaround limitations of Apple's sed.

      • aven.tst: Fix not to hang on macOS.

      • smoke.tst: Remove aven testcases which duplicate those in aven.tst.

    • Clean up handling of support files in relocatable installs - this is now detected at run time on macOS.

    • Split out macOS Aven.app creation into a make rule so it can be easily used by the homebrew formula.

    • buildmacosx.sh:

      • Fix when WX_CONFIG not specified - this was giving a confusing error like: ./buildmacosx.sh: line 163: --cc: command not found

      • Use wxWidgets 3.0.4.

    • Stop checking wx-config --ldflags as this option was removed in wxWidgets 2.6 and we currently require 2.8 or newer.

    Changes in 1.2.32 (2017-07-08):

    • aven:

      • Make splays on printouts a darker shade of grey. Reported by Erin Lynch and Anthony Day.

      • In export formats which include 3 dimensions (DXF, PLT, GPX, KML, JSON, POS), the value in the Z dimension was negated. Bug introduced by fixes for export of rotated plans and tilted elevations in 1.2.27. Reported by Erin Lynch in #89.

      • Ignore viewing angles for export formats which work in 3D. When the rotation and tilt controls are hidden in the export dialog we were still using their values to transform the data, so if you set them with for one export format which support them, then switched to an export format which doesn't, you'd get bogus coordinates in the exported file. Bug probably introduced in 1.2.27 by fixes for exports of rotated plans and tilted elevations.

      • Fix exporting to skencil and Survex .pos formats. When aven's export to .pos was added in 1.2.19, the ordering didn't match up and since then .pos export has produced skencil files and vice versa.

      • Don't leave terrain on if loading terrain data fails. Previously if you clicked the terrain icon (or via the menu) with no terrain loaded, but no terrain got loaded (e.g. because the survey data lacks an explicit coordinate system, or because the file failed to load, or because you cancelled the dialog) then the terrain icon/menu item was still changed to "on".

      • Disable texturing while drawing terrain. Previously the terrain got a bit darker when "Textured Walls" were enabled.

      • Force a refresh when "Textured Walls" are enabled or disabled. Previously the display wouldn't update right away.

    • Manual:

      • Document how to specify fixed point altitude in feet.

      • Explain why *fix warns about unused fixed points

    • Building from source now requires a compiler with decent support for C++11. If you're using GCC, then GCC 4.7 should suffice. This should not be an onerous requirement - e.g. Debian wheezy and Ubuntu trusty both have a recent enough GCC. If special options are needed, these should get probed for and automatically. Fixes building 1.2.31 with GCC < 6, reported by Wookey.

    Changes in 1.2.31 (2017-07-01):

    • aven:

      • Use superscript 'g' symbol instead of word 'grads' in status bar. This conserves the limited space available, and we already do this in the compass and clino indicators so it's more consistent too.

      • Show one decimal place on measure line bearing. Pointed out by Benedikt Hallinger on the therion list, though I'm sure this has been asked for before by others.

      • Show gradient of the measuring line when both ends are stations.

      • Allow selection of text in cavern log window. Selection was disabled in 1.2.28 because it seemed you couldn't actually copy selected text to the clipboard, but retesting this now actually works fine for me, both with current git master with the change reverted, and with code just before the original change.

      • More robust parsing of cavern output (cleanly handle context highlighting which extends beyond the end of the line).

      • Allow showing duplicate legs as dashed lines or hiding them entirely, with dashed now being the default. Implemented by Patrick Warren.

      • Also allow "Dashed" for splays and "Faded" for duplicate legs.

      • Splay legs in surface data are also shown faded.

      • Check environment variables VISUAL and EDITOR when looking for editor to use when a warning or error is clicked on in the cavern log window. The specified editor may have a GUI or need to run in a terminal, so we have to special-case each editor supported, and that means we can pass extra options needed to position the cursor on the appropriate line/column. Currently these editors are supported: gvim, nvim, vim, gedit, pluma, emacs, nano, jed, kate. Suggested by Wookey.

      • Fix handling of non-square terrain data files - the X and Y dimensions were swapped. Reported by detrito.

      • Improve parsing of DEM data with .hdr file. Use documented defaults for more values, and where we only support a subset of values (or a particular value) check for unsupported values in more cases.

      • When colouring by depth, fix colouring and texturing of polygons which cross depth bands. The previous problems were most obvious with high chambers and long legs down deep pitches, especially in for surveys without much vertical range.

      • Support for drawing blobs using point sprites was added in 1.2.28, but caching that this worked wasn't hooked up properly so the test to see if this worked would happen at the start of each run. This is now cached as intended which should reduce start up time a little when blobs are drawn in this way.

      • Fix drawing of crosses with lines. This is a fall-back case which is rarely used as most OpenGL setups will handle a better method, but it was resulting in crosses with a four-pixel square in the centre - now the centre should be a single pixel.

    • cavern:

      • Allow *data with no arguments to reset the current style - useful for entering passage data where there are side passages.

      • Fix hang processing file without newline at end. This bug was introduced by changes in 1.2.28. Reported by Mark Brown.

      • (Mac OS X and Microsoft Windows versions): Build with newer version of PROJ library which fixes buggy handling of *fix with lat-long coordinates. Also add a testcase to the testsuite to alert users building for themselves with an affected PROJ version on any platform. Reported by Ross Davidson.

      • Fix cavern to handle Compass .DAT with no survey team. Previously this resulted in the bogus error: Expecting numeric field, found "FROM" Reported by Erin Lynch.

      • Handle UTF-8 "BOM" at start of .svx files. Unicode doesn't recommend its use, but Microsoft stuff seems to like to create files with it in, and the error cavern currently reports for such files is very confusing, so it seems best to just handle it. Reported by Rob Eavis.

      • Change a couple of messages to use double quotes for consistency with all other messages.

    • extend:

      • Now runs a bit faster.

      • Splays are now carried over the extended survey. The current handling is simplistic, but should do a good enough job to be more useful than discarding splays. The splays at each station are all rotated together based on the bearing between the stations either side of the current one along the first path extended through that station. This nicely handles dead ends and the situation at the top or bottom of a pitch, and should tend to pick an angle close to the passage orientation along a traverse. It's weakest at junctions. Feedback (especially examples which could be handled better) most welcome.

    • French translation is now up to date again, thanks to Jean-Marc.

    • Remove erroneous menu shortcut markers from Polish translations.

    • Fill in some missing translations in several languages by using message translations from therion.

    • Add note to *fix documentation to clarify the coordinate order with *cs long-lat. Issue raised by Ross Davidson.

    • Fix errors in documentation of *units: "DEG" should be "DEGS", and "MINUTES" has been supported for ages but wasn't documented. Reported by Footleg.

    • Fix a few typos in the documentation.

    • Fix compilation warning with recent GCC.

    Changes in 1.2.30 (2016-10-03):

    • aven:

      • (Microsoft Windows version): Fix crash when trying to print or export (probably introduced in 1.2.28). Reported by Brian Clipstone.

      • Report error if terrain file contains no terrain data in area of survey. Suggested by detrito.

      • Errors when writing an export file were reported with the wrong filename - the .3d file, not the filename we were trying to write to.

      • Export to KML now supports exporting passages, walls and cross-sections. Addresses the remainder of ticket #4.

    • Add man page for dump3d.

    Changes in 1.2.29 (2016-09-27):

    • aven:

      • Fix SVG output with non-ASCII characters (the charset in the SVG file is now set to UTF-8 not ISO-8859-1).

      • (Microsoft Windows version): Fix error dialog on startup in pre-built version. Reported by Brian Clipstone.

    • Manual: Add link to TerrainData wiki page. Omission highlighted by Erin Lynch and "detrito".

    • Fix to build without FFmpeg/libav and with older versions, broken by changes in 1.2.28. Reported by James Begley.

    Changes in 1.2.28 (2016-09-24):

    • cavern:

      • Show the contents of the line after error and warning messages while processing survey data, and indicate the region of the line in many cases in the same style that compilers such as GCC and clang use (using the column number we already have, plus new width information). Based on a patch from Mateusz Golicz.

      • Add column and width information for many more error and warning messages.

      • Fix column for "Separator in survey name" warning.

      • Improve warnings when using a backclino with range 0-180 degrees (reusing the same machinery we already have for a forward clino with range 0-180 degrees).

    • aven:

      • Include LRUD in printout/export of extended elevations, broken by improvements to export of tilted elevations in 1.2.27. Reported by Anthony Day.

      • Name <trk> tags in GPX output, so Garmin GPS units name the imported track usefully. Reported by Anthony Day.

      • Remember scale from previous print or export operation in the same run of aven. Suggested by Stuart Bennett.

      • Convert range indication below shown line to a highlight on that region of the line in cavern log window.

      • Fix colouring of error/warning without column in cavern log window.

      • Fix click on error/warning without column in cavern log window.

      • Fix highlight of translations of "error" or "warning" containing non-ASCII characters. This fix for this only works with a Unicode build of wxWidgets, but as of wxWidgets 3.0, all builds are Unicode, so this shouldn't be much of a problem as wxWidgets 2.x is close to obsolete now. Reported by Mateusz Golicz.

      • Disable selection of text in cavern log window - you can't currently copy it to the clipboard, so until that's implemented it seems better to disable the ability to select it. Reported by Wookey.

      • Avoid special "1000" scale entry when exporting.

      • Show 1 page when "One Page" selected.

      • Reload processed data when restricting view. Fixes failure when restricting view on data just processed via aven. Spotted by Andrew Atkinson and myself.

      • Don't hide blobs and crosses behind terrain. Reported by Jenny Black.

      • Fix rendering of crosses using point sprites. The texture being used was misaligned relative to the image used for the visual fidelity check, so the check always failed and point sprites would never be used. Where point sprites are supported, they're probably the fastest option - on my netbook this change improves FPS by ~6 fold when displaying crosses for a large survey.

      • Support drawing blobs using point sprites. About 5 times faster than using lines on my netbook.

      • Recheck how best to draw crosses and blobs on the first run after Survex is upgraded (or downgraded) as the rendering code may have changed (we already recheck when the OpenGL hardware or driver changes).

      • Change "MPEG" export to be MPEG4 (.mp4) rather than MPEG1 (.mpg). MPEG4 produces smaller output of higher quality, and should be widely supported these days. And I can't get the MPEG1 output to work without buffer underflows, resulting in a file which doesn't play without glitches.

      • Add OGG video to the list of formats - it's more compact than the others we currently list, though slower to write.

      • Fix export to movie formats for which libav/FFmpeg needs to seek the file being written. This was broken by changes in 1.2.27.

      • Overhaul movie export for the current FFmpeg API, fixing deprecation warnings when building against a recent version.

      • (Microsoft Windows version): Fix corrupted exported movie files. 1.2.27 changed the movie export code to allow writing to files with non-ASCII characters in the names, but the new code failed to open the file in binary mode, leading to corrupt output. Fixes #81, reported by Erin Lynch. * (Microsoft Windows version): Pre-built version now uses FFmpeg 3.1.3 for movie export. * (Mac OS X version): Pre-built version now uses FFmpeg 3.1.3 for movie export.

    • Fix to build without FFmpeg/libav, broken by changes in 1.2.27. Reported by James Begley.

    • The Polish translation is now very close to being complete, thanks to a substantial update from Mateusz Golicz.

    • Merge catalan translation updates from Adolfo Jayme.

    • (Microsoft Windows version): Map LANG_CHINESE to zh_CN not zh so Chinese messages get used automatically.

    • cavern.tst: Remove random : from after ] - dash ignores the extra character, but it causes this test to fail if /bin/sh is a different shell (e.g. bash).

    • cavern.tst: Add expected output for more testcases.

    • Remove unwanted execute bit from some testcase data.

    • Use https for more URLs which support it.

    Changes in 1.2.27 (2016-06-06):

    • aven:

      • Right click on a survey in the survey tree now gives a pop-up menu with "Hide others", which restricts the view to just that survey and any subsurveys. Right click on the root of the survey tree gives a menu with "Show all" to undo any restriction in effect. (Currently these are implemented by reloading the file and using the same machinery as the --survey= command line option, but that will probably change in the future).

      • If there's a sub-survey restriction (from the --survey= command line option or the new UI described above) it is now shown in brackets after the survey tree root.

      • When reloading a survey, preserve the current view position (previously the view was recentred).

      • When reloading a survey, actually preserve the current scale factor (this was meant to happen, but the adjustment was applied in the wrong direction).

      • New "File->Extended Elevation..." menu item provides a way to generate extended elevations for simple cases without having to use the command line. Suggested by Fleur Loveridge.

      • Don't process key presses if accompanied by an unexpected modifier key. In particular, this means that aven no longer interferes with Alt+<function key> (which is typically handled by the desktop) and Alt+<letter> (which is typically a menu short cut). Reported by Владимир Георгиев.

      • Reduce file loading time by ~5%. The station name compare function was something of a hot spot, and optimising it yielded a nice improvement.

      • Allow splay legs to be disabled in when printing and exporting. Mostly addresses #60.

      • SVG export now shows splay legs thinner and in grey. See #60.

      • Fix export of rotated plans and tilted elevations - previously plans were always aligned with North up, and elevations which weren't exactly side on were exported as plans. Reported by Stuart Bennett.

      • Fix offset bounding box for exported elevations.

      • In print/export dialog the bearing value now wraps if you scroll up past 360 or down past 0.

      • Fix greying out of LRUD-based controls in the print/export dialog when the view is tilted (i.e. not plan or elevation). This stopped working in 1.2.18 when the pan and tilt spin controls were changed from integer- to real-valued ones.

      • Printouts now show LRUD as pale grey arrows from the station they are measured from. Based on patch from Michael Sargent. Closes #65.

      • Take LRUD into account for printout size. Fixes #72, reported by Erin Lynch.

      • Update movie export code to work with latest version of FFmpeg.

      • Make "Show Log" a toggle, so you can click on the button to take a look at the log, and a second click returns you to the survey view.

      • (Microsoft Windows version): Open the font file in binary mode - it looks like we were lucky and the font file (or at least its current version) would have loaded OK in text mode despite being binary data.

      • (Microsoft Windows version): Exporting to files with non-ASCII filenames should now work.

    • cavern:

      • Allow tape or backtape to be omitted. Reported by Erin Lynch.

      • Grid convergence is now corrected for when using automatically calculated declinations (*declination auto <X> <Y> <Z>). Requested by Mateusz Golicz on the mailing list.

      • Clear any cached calculated declination upon another *declination auto with different coordinates. Previously if the date stayed the same, a previously cached declination for the old coordinates was used.

      • Fix check for end of version number array in *required. We would check up to 12 version components, the last 9 being bogus. In practice, *require is only likely to be used with up to three components, so this wouldn't be an issue.

      • *begin with an invalid prefix could cause a crash in some cases. Fixed by patch from Colin Watson.

      • Report column locations for errors to do with readings.

    • Merge translation updates from Jean-Marc.

    • img library: Better document which members can be set when writing. Highlighted by email query about use of img API from Владимир Георгиев.

    • Document how *declination interacts with *calibrate declination if both are used in the same dataset.

    • doc/3dformat.htm: Update details of how changes to the current label buffer are encoded to reflect changes in v8. Reported by Angus Sawyer.

    • Use docbook2man instead of docbook-to-man to generated Unix man pages from SGML source. The latter seems to be no longer actively maintained, and docbook2man now does a similarly good job.

    • Use https for survex.com links, and for other sites which support it.

    Changes in 1.2.26 (2016-01-07):

    • aven:

      • (Microsoft Windows version): Fix to be able to process .svx files with cavern again.

    • (Microsoft Windows version): Simplify upgrading process with innosetup installer - if Survex is already installed, we now just install to the same location and use the same start menu folder.

    • (Linux version): survex.spec: Update for filetype metadata change in 1.2.25. Fixes #79, reported by James Begley.

    • (Linux version): survex.spec: Fix to work with RPM 4.13. Fixes #79, reported by James Begley.

    Changes in 1.2.25 (2016-01-05):

    • aven:

      • Drop broken code which attempts to fix 2D pitches. Fixes #73, reported by Erin Lynch. #76 tracks the issue the removed code was trying (but failing) to address.

      • When animating, don't try to update station info based on mouse movement over the survey tree.

      • Further improve code to handle cavern subprocess in aven.

      • Fix jump to error for filenames containing colons when the error location doesn't have a column number. Bug noted by Jenny Black.

      • If we encounter bad UTF-8 in cavern output, replace it with a red and white ? in a diamond (previously we gave up showing output at the first bad sequence). This can happen if you process a .svx file which isn't UTF-8 encoded.

      • (Unix version): Don't try to set the terminal window title when opening an editor from the cavern log window - gnome-terminal no longer supports this, and there doesn't seem to be a portable option for specifying the title for terminals which do still support this.

      • (Microsoft Windows version): Also quote for cmd.exe so that paths with spaces in work reliably. Reported by Marco Cotto.

    • cavern:

      • Improve error for mismatched fore/back-sight plumbs, reported by Andy Edwards (see #78).

      • Fix to use correct sd for backcompass. We were using zero instead, the most obvious effect of which was that the threshold for warning about differing COMPASS and BACKCOMPASS was about 71% of what it should have been, so we were warning in more cases than we should have been.

      • Implement support for specifying a length on backsights - if you're using something like a disto-x, you'll get a distance reading for the backsight too. Fixes #71, reported by Erin Lynch.

      • Make line counting more robust to mixed line ends. Noticed in example file from Pete Smart (see #69).

    • extend: New --show-breaks option which adds a leg flagged as surface survey between each points at which a loop has been broken. Suggested by Jenny Black.

    • (Unix version): Update filetype metadata to work with modern desktops.

    • Fix incorrect reporting of errors reading and writing processed survey data. Since 1.2.8, the error strings corresponding to IMG_CANTOPENOUT, IMG_BADFORMAT and IMG_DIRECTORY have been mixed up (this doesn't affect external programs using the img library, only Survex). Reported by Jenny Black.

    • Add missing options to extend man page and --help output. Noted by Jenny Black.

    • Document Document Ctrl+cursor keys for rotating and tilting in aven man page.

    • Fix broken SGML markup in manual.

    • Fix typo in manual reported by Jenny Black.

    • Update vim syntax file for newer commands, etc.

    • Minor translation updates. Thanks to Piotr StrÄ™bski and Jean-Marc.

    • Fix to compile with FFmpeg 2.9. Reported by Andreas Cadhalpun in https://bugs.debian.org/803863

    • Stop maintaining ChangeLog files. They make merging patches harder, and stop 'git cherry-pick' from working as it should. The git repo history should be sufficient for complying with GPLv2 2(a).

    • (Microsoft Windows version): The installer requires admin privileges on Vista and later and OS versions older than Vista are past end of life, so drop code which tries to set up the registry differently depending if we have admin privileges or not.

    Changes in 1.2.24 (2015-09-23):

    • aven:

      • (Microsoft Windows version): Fix the cavern log window. Reported by Brian Clipstone.

      • (Microsoft Windows version): Add workaround to avoid breakage in Therion. Reported by Jenny Black.

      • If wx was built with thread support, aven now runs cavern from a separate thread, which works much better under wxMSW (where we can't use select), and also seems a bit smoother on Linux.

      • Fix handling of encoding of filenames when the operating system has no locale installed corresponding to the language selected for Survex's messages.

      • Undo accidentally committed debugging code which was sending message to the terminal in 1.2.23.

    • (Linux version): configure now looks first for wx-config-3.0, which Fedora's wx3 packages have. Reported by James Begley.

    • Indonesian translation fully up to date again.

    • Manual: Document anonymous stations, based on the text from NEWS. Reported by Wookey.

    Changes in 1.2.23 (2015-09-06):

    • aven:

      • Updating the cavern log window is now much smoother, especially on slower machines.

      • Show "busy" mouse cursor while processing survey data.

      • Fix an assertion if you try to start processing a survex file while one is already being processed.

      • Processing a .svx file with an error now still adds it to the file history. Reported by Martin Green.

      • Fix the orientation of the starting end of tubes.

    • cavern:

      • New *ref command to allow specifying an external reference (e.g. where to find the original survey notes).

      • Drop support for showing percentage progress in cavern. It's confusing in a multiple-file dataset as it shows progress in the current file so jumps around. It also slows down processing, and on a slow machine you'd don't want that, while on a fast machine processing isn't slow enough for the progress display to be useful.

    • French translation is now completely up to date, thanks to Michel Bovey.

    • Bundle proj's EPSG and ESRI code lists in the installers for MS Windows and OS X so that things like "*cs EPSG:29903" work. Reported by Graham Mullan.

    • (Microsoft Windows version): Process survey data with aven rather than running cavern.

    • (Microsoft Windows version): Installer built with InnoSetup 5.5.6 (recent releases have been built with 5.5.3) to see if that solves Ray Duffy's reported issue with not having file associations for .svx files created.

    Changes in 1.2.22 (2015-08-17):

    • aven:

      • Ensure that the window has a depth buffer. Whether it does by default seems to vary depending on OS and maybe graphics card. Fixes #55 (terrain is no longer visible through itself), and also the rendering of passage tubes. Thanks to Martin Green for pointing me in the right direction for finding this fix.

    • cavern:

      • Fix *declination with an angle to actually work.

      • Fix assertion if we try to identify a hanging survey by an anonymous station.

      • Improve errors for invalid survey names in *begin, *end, *equate and *export.

    Changes in 1.2.21 (2015-07-28):

    • aven:

      • Fix exporting to KML and other text-based formats to always use "." for the decimal separator - previously "," would be used when the user's locale specified this for the decimal separator. Reported by Jan Schorn.

      • Implement exporting of survey legs in KML format.

      • Put "paddle" placemarker icons on stations in exported KML files, using the same colour coding for entrances, fixed points and exported points as aven does.

      • Remove the "Coordinate projection" field from the print dialog, as it isn't relevant there. Reported by Wookey.

      • Fix the initial scale for small caves (since 1.2.18 the initial scale has been too small). Reported by Wookey.

      • Don't rescale if the same file is reloaded, but adjust the volume diameter as appropriate.

      • Use wxGetenv() to read the SURVEXEDITOR variable, so we can accept Unicode values on Windows.

    • cavern:

      • Fix coordinate systems using latitude and longitude - PROJ.4 wants these in radians, but we were passing degrees, which would generally cause the conversion to the output coordinate system to fail. Reported by Wookey.

      • Fix *fix with standard deviations when *cs is in use, give an error for use of *fix with standard deviations before *cs.

      • Add new *declination command with support for setting the declination automatically from the IGRF model based on the survey date. Thanks to the Therion developers for the IGRF support code, which we're reusing. Fixes #54, reported by Wookey.

      • Allow the units for the zero error to be specified, making it easier to specify calibration with a scale if you measure the zero error externally (rather than using the instrument itself). Fixes #61, reported by Andrew Atkinson.

      • Report the error from PROJ when coordinate conversion fails as part of the actual error rather than on a separate line.

      • Fix use after free after *solve. This only occurs if a leg between the two exact same stations appears right before and right after the *solve, which is unlikely in real data, but the testsuite has an instance of this. This was introduced by the repeat leg averaging added in 1.2.17.

      • Fix small memory leak when solving network. This doesn't really matter when solving at the end of processing as cavern will exit after that, but if *solve is used we continue processing after solving.

    • Remove compatibility handling for specifying a country variant of a language in SURVEXLANG using "-" with a lower case country code (e.g. "en-us") - we changed to the standard "en_US" way back in 2001. This code was mangling character sets with a "-" in, and is no longer useful.

    • Ignore any "@<something>" modifier in the language code.

    • Improve documentation of magnetic declination handling, and cover the new "*DECLINATION" command.

    • Document aven's command line options in the manual and its man page. Reported by Jenny Black.

    • Point to '*case' and '*truncate' from the 'SEE ALSO' sections of each other's documentation.

    • Remove references to SpeleoGen from the documentation - it hasn't been updated for many years, and can't read recent versions of the .3d format.

    • Strip documentation references to obsolete versions of MS Windows.

    • doc/HACKING.htm: Update list of debian packages to install to build from git.

    Changes in 1.2.20 (2015-06-26):

    • aven:

      • When printing, use the top margin rather than the right margin to calculate the height of the printable area. In practice, the two values seem to be the same or very similar by default.

      • Avoid assertion if the about dialog image fails to load. Reported by Phil Maynard.

      • Optimise the size of the about dialog images.

      • Add support for reading terrain data which isn't in a .zip file.

      • Force a refresh after loading terrain data so that it gets displayed right away.

      • Make checks for terrain data extensions in zip files case insensitive.

      • If reading terrain data fails, always report an error and never try to display it.

    • cavern: Allow clino readings in diving style data, suggested by Andrew Atkinson. Currently these readings are ignored, but a future version will check that they're consistent with the angle given by the depth gauge and tape, and perform suitable averaging.

    • Remove lingering traces of svxedit.

    • configure: Fix to allow compiling without libav/ffmpeg, as was possible before 1.2.19.

    • (Unix version): Install the filetype and aven application icons under /usr/share/icons/hicolor, which is where they're expected to be these days.

    • (Unix version): Add %f to Exec in survex-aven.desktop.

    • (Mac OS X version): Remove useless extra copy of about box images from OS X disk image.

    • (Mac OS X version): Only ship one copy of each of the translations.

    • (Mac OS X version): Reduce the size of the aven binary by disabling a load of libav features we don't use.

    • (Microsoft Windows version): Reduce the size of the aven binary by disabling a load of libav features we don't use.

    • (Microsoft Windows version): Update message files to fix a missing Chinese message in the installer.

    Changes in 1.2.19 (2015-06-18):

    • aven:

      • Fix exporting to GPX, KML and HPGL, which all failed to write the header to the exported file in 1.2.18.

      • Add exporting to Survex .pos format.

      • If the measuring line isn't currently active, pressing "Escape" will now exit full screen mode.

      • (Mac OS X version): Change the shortcut for full screen mode to be the standard Ctrl+Command+F (rather than Shift+Command+F which we have been using since 1.2.7).

      • (Mac OS X version): When we centre the view on the station this can generate a mouse move event, so clear the variable which says we are dragging before we process a left click on a station. This avoids random rotations of the survey when clicking on a station, reported in #47 by Hugh St. Lawrence.

      • (Mac OS X version): Force use of a non-native toolbar to stop the toolbar icons from being rescaled and looking fuzzy.

      • (Mac OS X version): Remove code added in 1.2.18 which tries to set stop the toolbar icons from being rescaled, but which requires an unreleased version of wxWidgets, had a typo in, and doesn't actually seem to work anyway.

      • (Mac OS X version): Drop out of full screen mode if the mouse is mode to the top of the screen, since we can't seem to display the menu bar in this case like we do on other platforms.

      • (Mac OS X version): Enable aven's movie export feature.

      • (Mac OS X version): Enable wxDisplay when building wxWidgets to better support multi-monitor setups.

      • (Mac OS X version): Silence warning visible when aven is run from a terminal about a missing CFBundleTypeRole.

      • When reading terrain data from a .zip file, report an error if the .zip file is bad, or if it doesn't contain any terrain data we recognise.

      • Tweak error message in terrain reading code to distinguish two failure cases.

      • Add viewing angles and scale to footer, and shorten some of the other items to make room for this extra information. (Fixes ticket #52, reported by Erin Lynch)

      • If the footer is wider than the printout width, scale down the font used so that it exactly fits; if the footer is narrower, than space out the items in in so it uses the full width.

      • If the saved size for aven's window exceeds the current display size (mostly likely because we're now plugged into a smaller monitor), then reduce the size of the window to fit the display. If the saved size is < (480x320), increase it to at least that, as aven isn't usable in a smaller window.

      • Remove crude bodge which tries to pick a nicer initial window size when using wxWidgets without wxDisplay on a multi-monitor setup - aven now opens with the same size window it had when it was closed, so the initial size is only relevant on the first ever run.

    • Assorted translation updates. Notably Indonesian is at 100% again.

    • Stop trying to catch and report signals. The only real reason to do it is so we can say "Bug in program detected! Please report this to the authors" before we exit, but when the program crashes that's pretty obvious. In aven we try to pop up a message box for this message, which may fail due to whatever caused the signal, while with the command line tools there's no great benefit over just letting the shell report the signal.

    • Use pkg-config to probe for libav and proj, which sorts out the correct flags for building on OS X against a static install of libav.

    Changes in 1.2.18 (2015-06-03):

    • aven:

      • Add support for reading terrain data (from a zip file containing either an SRTM .hgt file, or an ESRI .bil file and associated metadata files), and rendering it as a transparent surface.

      • Remove actions from 'Orientation' and 'Rotation' menus which you wouldn't sanely want to perform from the menu.

      • Create a "Colour by" submenu of the "View" menu to house the various colouring options.

      • Add "Colour by Gradient" and "Colour by Length".

      • Make the button to dismiss the "About" dialog "OK" rather than "Close", which seems more logical, and also allows the dialog to be closed by pressing "Escape".

      • Destroy any existing clipping region before we write the page footer. Hopefully solves ticket #52, reported by Erin Lynch.

      • Don't round bearing and tilt angles to integers when printing and exporting.

      • Add passage export for EPS format. (Partly addresses ticket #4)

      • Add JSON export. This should be regarded as experimental, and the format is quite likely to change.

      • Pressing F6 now toggles the display of rendering stats, currently FPS (Frames Per Second) and the number of triangles in the terrain mesh.

      • Add a menu item and toolbar button to show the cavern log window if the currently shown survey data was processed by aven. Reported by Hugh St Lawrence in #47, and by Dave Clucas and others previously on the list.

      • Add "Save Log" button to Aven's cavern log window.

      • In cavern log window, highlight "error" markers in red and "warning" markers in orange.

      • Rework code to read cavern's output. In particular, we no longer mix buffered and non-buffered system calls.

      • Aven's support for reading colours and font sizes for printouts from print.ini has never worked - the contents of the ini files are ignored due to a bug which has been there since the code was added in 2005 - but nobody has ever complained. So just strip out that code entirely - we should support setting the colours and font sizes, but a GUI interface for setting them would be better.

      • Fix to compile with a Unicode build of wxWidgets 2.8. Reported by Bill Gee.

      • Take the width of the messages used above the compass and clino into account when calculating how much space to allow for them - now the labels won't overlap or be cut off in translations where they are long.

      • (Mac OS X version): Attempt to address the size of the toolbar icons.

    • cavern:

      • Reject *fix with SDs which aren't all positive. (fixes#2, reported by susscorfa).

      • Use the currently set units when outputting measurements in warnings, errors, and the stats at the end of the run. Requested by Bill Gee.

      • Include column number when a *include file isn't found.

      • Show 'error' in front of error messages, like we show 'warning' in front of warnings. Fixes #48, reported by Wookey.

      • Increase the threshold for warning that fore and back measurements differ from 2 SDs to 3 SDs.

    • findentrances: If the 3d file specifies the coordinate system, use it.

    • svxedit: Remove svxedit - while an editor with built-in knowledge of survex would be nice to have, svxedit doesn't really offer that, and it looks ugly in a modern desktop.

    • If we run out of memory while reading a processed survey data file, include the filename in the error message.

    • Many translation updates - notably Indonesian and Russian are now the two most complete translations.

    • (Microsoft Windows version): Add code page 1252 mappings for fancy quotes.

    • Transliterate gradient and infinity symbols if the current character set lacks them.

    • Add SVG version of .plt icon.

    • Manual:

      • Add complete list of quantities you can set SDs for. Thanks for Wookey for highlighting that the previous list was incomplete.

      • Document averaging of a group of repeated readings.

      • Add a link to the sample data from the manual.

      • Remove references to contact addresses which are no longer there. Remove offer to post people floppies, and references to a CD image which isn't available for download.

    • Remove non-breaking spaces from the diffpos and extend manual pages, as they actually make the output formatting worse (presumably these used to work around a since-fixed bug in one of the docbook processing tools).

    • doc/TODO.htm: Update.

    • Fix to compile without warnings with 'g++ --std=gnu++11'.

    Changes in 1.2.17 (2015-02-24):

    • MacOS X version:

      • Update INSTALL file with current status.

      • Aven.app now has a custom icon.

      • Add icons for all the filetypes supported.

      • Add Finder actions for .svx, .3d, .plt and .pos files.

      • aven: Hide the status bar and tool bar in Full Screen mode, as wx doesn't currently do this for us.

      • aven: Fix short-cut for toggling Full Screen mode.

      • aven: Make "About" menu item appear.

      • aven: Fix "Close" button in about dialog.

      • aven: Make custom cursors black with a white outline to match the standard OS X cursor.

      • svxedit: Now wrapped up in an application bundle as svxedit.app. It still doesn't really work like a standard app though - e.g. you can't load files from Finder (instead run svxedit.app and use File->Open), the font size of most menu items is wrong, the icon for the app is the wish icon rather than the svxedit icon, shortcuts use Ctrl not the Cmd key, and probably more. I'd probably recommend using another editor (OS X comes with TextEdit.app for example).

      • The documentation is now in a "Docs" directory alongside the apps, rather than in the rather less obvious "share/doc/survex" directory.

      • Default to building for x86_64, since all modern Macs are 64 bit.

      • Disable use of liblzma when building wxWidgets for OS X, which was preventing the build from working on OS X 10.6.8.

      • Download wx sources from SF via redirecting link. Thanks to David A. Riggs.

      • buildmacosx.sh: Handle the mount point for the disk image containing a space.

      • Link with a static build of PROJ for doing coordinate system conversions.

      • Build wx with --disable-webview to avoid a compilation failure on OS X 10.10.1.

      • Use wx-config --cc and --cxx to get the compilers to use for building everything else, as wx adds options to them which otherwise cause linking errors.

      • The diskimage (.dmg) file is now compressed with bzip2, which gives a smaller download. This means OS X 10.4 is required, but we probably already need at least 10.5 because that's the minimum version which the wxWidgets build supports by default.

      • Remove unused files and copies of files from the diskimage.

    • cavern: If the same leg is repeated consecutively, average the readings and treat as a single leg.

    • dump3d: Report SEPARATOR used by the file being read.

    • aven.svg: Fix visual glitch in SVG icon for aven. Noted by David A. Riggs.

    • aven:

      • Greatly reduce flicker when mouse is moved to the top of the screen in full screen mode and the menu bar reappears.

      • For export formats where scaling is supporting, aven now actually uses the scale specified in the export dialog (previously it ignored this and used 1:500).

      • Reimplement animation so that it's based on angular change per unit of elapsed time, rather than averaging the time take for the last two scene redraws. This gives smoother animation in the face of variable load and scene redraw time, and should be more consistent between platforms.

      • Switching to a point of the compass during auto-rotation now jumps straight there rather than the two animations fighting.

      • Reduce the maximum auto-rotation speed, as the previous limit was uselessly fast.

      • Disable stepping the rotation angle when animating (previously we only did when rotating).

      • Speed up start-up a bit - rather than loading icons from individual PNG files on disk, compile them into the aven binary.

    • (Unix version): Add "MimeType" field to desktop files so that file associations work out of the box with modern desktop environments.

    • Add start of Hungarian translation from Imre Balogh.

    • Merge in many updates to the Russian translation from "vsuhachev".

    • Assorted minor updates to other translations.

    • Create scalable (SVG) versions of file type icons.

    • doc/manual.sgml: Remove $Id and $Date markers, as they don't get expanded now we're using git.

    • tests/: Improve test coverage in a few places:

      • Extend tests of fore and back sights to test calibration of the back compass.

      • Test "Can't calibrate angular and length quantities together" error.

      • Check that "*set names ." works when "." is also the decimal point.

    Changes in 1.2.16 (2014-10-17):

    • aven: Add KML export (stations only currently).

    • aven: Allow measuring line to measure from anonymous stations. (Fixes #44)

    • aven: Fix corrupted names in exported files.

    • aven: Fix error log window under wxWidgets >= 2.9 to include the system information before the first log message like it does under wxWidgets 2.8.

    • cavern: Add support for "*cs JTSK" and "*cs JTSK03".

    • tests/: Improve test coverage.

    • Translation updates for many languages, plus the start of translations to Greek and Polish.

    • Fix to build against wxWidgets 3.0 built with assertions disabled. Reported by Martin Sluka.

    • Fix warnings when compiling with clang (which is the default compiler on Mac OS X). Reported by Martin Sluka.

    Changes in 1.2.15 (2014-08-14):

    • cavern: The *cs command now also supports "long-lat", "s-merc" (for "Web Mercator"), EPSG and ESRI codes, "eur79z30", "ijtsk" and "ijtsk03". This means that we now support all the coordinates systems which Therion does, except for a few which don't have X=East and Y=North. The documentation for *cs has also been improved.

    • aven: We no longer persist full screen mode between runs - it's not a standard behaviour of desktop programs, and it's too easy to go into full screen mode from the menu and then not be able to get out again because you don't know the required key shortcut. (ticket#39)

    • aven: When in full screen mode, moving the mouse to the top of the screen now makes the menu bar appear. This provides a non-shortcut way out of full screen mode, as well as making it easier to perform other operations while in full screen mode. The current implementation gives an annoyingly flickery transition, but hopefully we can improve this in future. (ticket#39)

    • (MacOS X version): If built with wxWidgets >= 3.1.0 (which is still in development), we now call EnableFullScreenView() which improves the full screen mode experience on OS X 10.7 and later.

    • img library: Improve documentation for img_ERROR_INFO.

    • tests/: Ship some missing .out files and compare.tst.

    • tests/: cavern.tst testcase back2 is now actually used. Fix a bug in this testcase, and extend it to cover a variant of the situation reported as a bug in therion by Bill Gee to the therion list.

    • (Linux version) survex.spec: Add run-time requirement on proj and proj-epsg for the survex package and on tk for the svxedit package.

    Changes in 1.2.14 (2014-07-05):

    • img library: Add ability to store a PROJ4 string describing the coordinate system in use in 3d v8 files.

    • aven: If the 3d file specifies a coordinate system, then use it for exporting to formats which need to know (currently GPX). If the input file doesn't specify the coordinate system, allow the user to enter a PROJ4 string in the export dialog.

    • aven: You can now quickly zoom to a particular area by holding down the "Shift" key and dragging with the left mouse button to create a rectangular "rubber band box" around the area you wish to zoom to. If you release the "Shift" key while still dragging, the box is centred on the start point rather than having one corner there.

    • aven: Fix exporting of passage tubes in elevations and extended elevations - previously up and down were getting drawn across the page!

    • aven: Fix "Cancel" to work on the print/export dialog, broken by changes in 1.2.13. (Reported by Brian Clipstone)

    • aven: Fix the conditions on which the menu item "Cancel measuring line" is enabled - previously it was hard to actually cancel it via the menu. Reported by Hugh St Lawrence.

    • aven: Fix wx assertion failures when showing hit test debug view on platforms such as 64-bit Linux.

    • aven: When viewing from above, show "Plan" above the "clino" which indicates the tilt angle (instead of "Elevation -90°").

    • aven: The extended font data now loads faster, and also uses less memory on 64-bit platforms.

    • aven: Dragging the vertical divider between the side panel and the 3D view now only updates when you finish the drag, as redrawing continuously just looks clunky except on an ultra-fast machine.

    • aven: (German translation) Abbreviate "Blickrichtung" so it doesn't overfill the space available in the aven UI.

    • cavern: Add a *cs command to allow setting the coordinate system for *fix commands, and the coordinate system used for processed survey data. The latter is now stored in 3d v8 format files.

    • cavern: Add support for 'L' flag (exclude from length) in Compass .dat files and handle it in the same way as the "DUPLICATE" flag in .svx files.

    • cavern: If there's more than one *fix command with coordinates, still actually fix the second and subsequent ones, to avoid triggering bogus errors about unconnected surveys.

    • cavern: If there's more than one *fix command with coordinates, report the station name of the previous one, plus the file and line number where it was.

    • cavern: Fix handling of the rather contrived case of *fix with no coordinates followed by *solve and then another *fix with no coordinates not to access freed memory.

    • dump3d: Report any specified coordinate system.

    • doc/3dformat.htm: Update to document how the coordinate system is stored.

    • (Microsoft Windows version): Include dump3d in the installer.

    • Fix a compiler warning.

    • Improve test coverage.

    Changes in 1.2.13 (2014-05-15):

    • aven: Fix --print option to wait for printing to happen before exiting (previously it would exit right after opening the print dialog, so you couldn't actually print anything out using it).

    • aven: Increase the threshold for how close the pointer needs to be to a station from 5 pixels to 7 to try to help touchscreen users. Reported by Hugh St Lawrence.

    • aven: Add "fat finger" mode, toggled by pressing F2, to allow investigating if increasing the minimum pointer to station threshold helps Hugh's problems with using aven on a touch screen device.

    • aven: The measuring line was unable to see stations which had just been revealed by toggling surface or underground legs on - this is now fixed.

    • aven: Add "hit test grid debug" mode, which shows the hit test grid and how many entries are in each box (toggled by F3).

    • aven: Pressing F4 now allows the user to toggle wxWidgets assertion messages off and back on.

    • aven: Create the empty hit-test grid data structure lazily, to reduce start up time a little.

    • cavern: Improve messages which talk about "tags" and/or "prefixes" in *begin and *end commands to instead talk about "survey names".

    • cavern: For ages cavern has warned if you reentered a survey, but this warning was suppressed if it occurred at the same line of the same file as the survey was first entered, but this can only happen if you include the same survey file more than once, which isn't a sensible thing to do for a file with actual survey data in (you might reasonably do it to set up survey grade details or something like that). The warning is now given in this situation too.

    • cavern: After 5 warnings about reentering a survey we give up warning about it, but we used to keep reporting where the survey was originally entered - this secondary diagnostic message is now silenced when the main message is.

    • (Microsoft Windows version): Compile C code with optimisation on.

    • Add the start of a Russian translation, with messages take from therion.

    • Minor translation updates to French.

    • Fix compiler warning from GCC.

    • Testsuite improvements:

      • Test that "..." anon station works.

      • cavern.tst: Check number of errors returned by all testcases which should fail and give an error count.

      • cavern.tst: Fix to actually fully test everything when builddir != srcdir.

    Changes in 1.2.12 (2014-04-14):

    • aven: Fix measuring line to show change in altitude rather than altitude itself (accidentally broken by changes in 1.2.11). Reported by Brian Clipstone.

    • aven: Fix printing when built with wxWidgets 3.0.

    • aven: Several visual improvements to printouts:

      • Move the numbers below the scale bar down a little so that they don't overlap the scale bar ticks.

      • Set the clipping region after we draw the page border and info box to avoid clipping the border in print preview.

      • Tidy up the appearance of the compass and elevation arrow.

    • aven: Fix to build with libav 10. Reported by Moritz Muehlenhoff in <http://bugs.debian.org/739332>.

    • aven: Fix to build with older libav where avcodec_free_frame() isn't available.

    • (Linux version) survex.spec: Update spec file used for building RPM packages.

    • (Unix version): Add "Keywords:" entry to .desktop files.

    • (Unix version): Enable large file support, mostly to support filing systems which return 64 bit inode values, such as CIFS mounts.

    • (Microsoft Windows version): Only allow "A-Z" or "a-z" for driver letters, rather than any character which is a letter in the current locale.

    • Various translation updates.

    Changes in 1.2.11 (2014-01-28):

    • aven: Fix wxWidgets assertion when double clicking on an anonymous station. Reported by Kevin Dixon.

    • aven: Embed the font data for the first 256 Unicode characters for use in the survey pane into the compiled aven binary to reduce start up overhead. Any additional characters needed are loaded from a data file only if/when a character >= U+100 is actually needed (as before).

    • aven: Fix display of Unicode characters above 256 when there's a character <= 256 earlier in the same string.

    • aven: Use the actual width of Unicode characters above 256 rather than assuming they are 16 pixels wide.

    • aven: If full screen, don't show the side panel when a new file is opened (e.g. via Ctrl+O).

    • aven: Don't give an assertion failure when showing passages for a cave with no vertical extent. Reported by Jonny Prouty.

    • aven: Change terminology in print dialog - say "legend" instead of "info box".

    • aven: Add option to show the tilt angle as a percentage gradient.

    • aven: Show the units (degrees, grads, or percent) for the tilt and bearing indicators.

    • aven: All length units are now translatable.

    • aven: Split log_fl_error helper function out of CHECK_GL_ERROR macro, which will reduce code size and also the number of deprecation warnings about gluErrorString on Mac OS X 10.9.

    • (Microsoft Windows version): aven: Try to work around redraw issues related to the measuring line by redrawing the whole window, which doesn't seem to be measurably slower.

    • cavern: If *units is used to try to set units for LEVEL, PLUMB, or POSITION, give an error rather than quietly ignoring the attempt.

    • cad3d: Make cad3d remap control characters and spaces in station names when generating PLT output in the same way aven does.

    • Various translation updates (particular thanks to Eric Madelaine and Dennis Baudys), including the start of a Bulgarian translation, with messages taken from Therion and elsewhere.

    • (Microsoft Windows version): On Microsoft Windows 2000 and newer, use GetUserDefaultUILanguage() to get the UI language to use. For older versions, continue to use GetUserDefaultLCID().

    • (Microsoft Windows version): The Indonesian translation will now be used automatically when the system language is set to Indonesian.

    • (Mac OS X version): Fix to build with wx 3.0.0 on OS X 10.9. Thanks to David A. Riggs for his work on this.

    • (Mac OS X version): Update buildmacosx.sh script to use wx 3.0.0, and add a checksum check for the downloaded wx sources.

    • Fix a lot of the compiler warnings when building with clang.

    • doc/manual.sgml: Add missing quantities to the list documented as accepted by *units: LEFT, RIGHT, UP/CEILING, DOWN/FLOOR (missing entirely); BACKCOMPASS/BACKBEARING, BACKCLINO/BACKGRADIENT (missing from the main list, mentioned in list of the units that can be set for them); COUNT (missing alternative name for COUNTER); DX/EASTING, DY/NORTHING, DZ/ALTITUDE (incorrectly listed as X, Y, Z). Reported by Jonny Prouty.

    • Test suite: Improve test coverage for cavern.

    Changes in 1.2.10 (2014-01-15):

    • aven: Fix assertion if two mouse buttons are held down at the same time. If dragging with more than one mouse button held down, releasing one causes another which is still held down to take effect. Reported by Brian Clipstone.

    • aven: If we fail to start the external editor when the user clicks on an error or warning from cavern, show an error box.

    • aven: If the survey has a title, add it as a top-level <title> element to exported SVG files.

    • aven: Escape '<', '>', and '&' in labels in exported SVG files.

    • aven: In GPX export, set the <time> element to the datestamp from the 3d file.

    • aven: Don't try to write the title if it isn't set or is empty when exporting GPX files.

    • aven: Don't bother looking up the printer page setup info when exporting.

    • (Microsoft Windows version): aven: Fix crash on "File->Print" or "File->Export" under Windows XP, reported by Brian Clipstone.

    • (Microsoft Windows version): aven: Fix error dialog about an incorrectly encoded filename which could occur if run without being asked to load a file on startup.

    • (Microsoft Windows version): aven: Compile with optimisation on.

    • img library, aven: Although processed CMAP data files are often referred to as "CMAP .XYZ files", it seems that actually, the extension .XYZ isn't used, rather .SHT (shot variant, produced by CMAP v16 and later), .UNA (unadjusted) and .ADJ (adjusted) extensions are. Since we've long checked for .XYZ, we continue to do so in case anyone is relying on it, but also check for the other extensions.

    • img library: Add new "datestamp_numeric" field to struct img giving the datestamp as a time_t in UTC (or (time_t)-1 if there's no datestamp or we failed to convert it). For .3d >= v8, this field is reliable. We attempt to convert date strings in .3d <= v7 and CMAP XYZ files, but may get the timezone wrong.

    • img library: Fix my_strcasecmp() to handle top-bit set characters better.

    • cavern: Fix NULL pointer dereference when processing Compass DAT file without 'SURVEY DATE:'.

    • doc/manual.sgml: Update references to Survex 1.1 which should be to 1.2.

    • doc/manual.sgml: Note the station length limit Smaps used.

    • Fix some compiler warnings if built with glibc's fortify source feature enabled.

    Changes in 1.2.9 (2014-01-08):

    • Document --3d-version in cavern man page and the manual.

    • aven: Fix compilation error in movie export code with recent libavi.

    • aven: Fix warning on stderr when export a movie as MPEG.

    • img library: In non-hosted mode, don't define GETC and PUTC if they're already defined, to allow easy overriding with getc_unlocked() and putc_unlocked() (which are significantly faster on Linux).

    • img library: In non-hosted mode, check that int is at least 32 bits, and if not, use long. In practice, platforms with 16 bit int are mostly obsolete, but it's not hard to be portable here.

    • img library: Add test that img.c and img.h compile in non-hosted mode (regression test for issue fixed in 1.2.8).

    • (Microsoft Windows version): aven is now built with wxWidgets 3.0.0.

    • Update translations from launchpad and from existing similar messages.

    • Fix some compiler warnings.

    Changes in 1.2.8 (2013-10-29):

    • cavern: Fix handling of anonymous wall stations ('..' by default) to implicitly set the SPLAY leg flag, as was intended. Reported by Thomas Holder.

    • cavern: Tweak .err file output not to lose the space in front of certain statistics when the value gets large.

    • cavern: Eliminate redundant progress message when solving simultaneous equations.

    • aven: Add a format drop down to the export dialog, and only show fields which are meaningful and supported for the currently selected export format. The format defaults to that used most recently. The "Elements" and "View" boxes have been swapped in the print and export dialogs as that layout works much better when the "View" box is hidden.

    • aven: Changing checkboxes in the print or export dialog didn't work in 1.2.7 - now works again. Reported by Anthony Day.

    • aven: Add GPX export (based on findentrances patch from Olaf Kähler). In this release the projection which the survey coordinates are in defaults to the BMN M31 grid used in the Totes Gebirge in Austria. On Unix, you can edit ~/.aven and add a new line setting 'input_projection' to a PROJ projection string. The ability to specify this projection in a better way is coming soon.

    • aven: New export options "Origin in centre" and "Full coordinates" - the latter fixes #10. GPX and PLT output implicitly force "full coordinates".

    • aven: The "Sketch" vector drawing program got renamed to "Skencil" some time ago, so update references.

    • aven: Make the Presentation->Play menu item a checkbox, to avoid a warning with wxMSW 2.9.5. Reported by Brian Clipstone.

    • aven: Make right click in an empty presentation mark the current position and open it to edit, instead of crashing.

    • aven: Update movie export code to work with latest libav API. Reported by Sebastian Ramacher.

    • aven: Improve reporting of errors during the process of exporting a movie.

    • aven: Don't try to close the movie if we aren't producing one.

    • aven: Fix assertion failure when double-clicking on the survey with wx2.9.

    • aven: Fix to build with wxMSW 2.9.5.

    • aven: Fix to build with wx 2.9.5 with wx2.8 compatibility disabled.

    • cad3d: The "Sketch" vector drawing program got renamed to "Skencil" some time ago, so add a new --skencil option to specify this output format. The old name (--sketch) is still recognised for compatibility.

    • cad3d: Make --marker-size work for Skencil and SVG output.

    • dump3d: Make --show-dates option show dates for XSECT.

    • img library:

      • Fix to work once more when used outside of Survex (missing definition of max() macro and a bad call to free() in img_close() for a file opened for reading).

      • Use lround() instead of round(), and make the tests around whether we use the library function or the our fallback implementation saner.

      • Fix // comments in C code for portability to pre-C99 compilers which don't support these as an extension.

      • Can now be compiled as C++ as well as as C.

    • (Microsoft Windows version): The installer is now built with a newer version of Innosetup, and includes translations for all the languages which Survex itself has any translations for.

    • (Microsoft Windows version): aven is now built with wxWidgets 2.9.5.

    • Minor translation updates.

    • tests/Makefile.am: Distribute files for "normal_bad" testcase.

    Changes in 1.2.7 (2013-07-27):

    • Add support for anonymous stations, which are indicated by one, two or three separator characters - with the default separator of '.', that means '.', '..', and '...' are anonymous stations. Single separator ('.' by default) is an anonymous non-wall point, double separator ('..' by default) is an anonymous wall point at the end of an implicit splay), and triple separator ('...' by default) is an anonymous point (with nothing special about the leg). A new *alias command allows '-' to be mapped to '..' for compatibility with pocket topo: *alias station - ..

    • New version 8 of the 3d format:

      • Supports new flags img_SFLAG_ANON and img_SFLAG_WALL.

      • New explicit file-wide flag for 'this is an extended elevation', rather than modifying the survey title to indicate this.

      • The survey prefix is often unchanged from one leg to the next, so use a spare flag to compactly indicate when there's no label change.

      • The data style of each leg is now stored.

      • The "processed at" time is stored as seconds since 1970 rather than a human-readable string.

      • Since 3d v8 features significant changes to the format, the format documentation for v7 and earlier has been split off into 3dformat-old.htm.

    • img library:

      • New station flags img_SFLAG_ANON and img_SFLAG_WALL.

      • Handle .pos files containing unnamed stations - don't suck the next line in as the station name, and set img_SFLAG_ANON for them.

      • Repurpose the long unused fBinary parameter to img_open_write() as a flags parameter, and add img_FFLAG_EXTENDED to specify that this is an extended elevation, in place of appending " (extended)" to the title. Internally we still append this to the title (and remove it upon reading) when writing 3d v7 or earlier, but for the new 3d v8 format, this flag is stored explicitly in the file.

      • img.h: Add comments for the lists of "Leg flags" and "Station flags".

    • aven:

      • We now require at least wxWidgets 2.8.0 - it was released over 6 years ago now, and the wx developers consider even 2.8 to be rather long in the tooth. We stopped testing building with wxWidgets 2.6 some time ago, and formally dropping support for older versions allows a number of workarounds to be removed from the aven source code. Also, features deprecated in wxWidgets 2.9 are no longer used in our code.

      • Don't run incremental search on every key-press, as on a slow machine the short initial search(es) will take a while but not be useful. Instead only actually run the search when we're told there are no more key-presses queued up.

      • Implement support for including cross-section information in exported SVG and DXF files (ticket#4). The DXF export is untested currently.

      • Show splay legs faded by default, with menu options to hide them or show them like other legs.

      • Speed up loading a .3d file with cross-sections by using a map to convert station names to positions.

      • In the cavern log window, don't highlight a file:linenumber if there's no message after it, which avoids highlighting the "Included from" lines wrongly.

      • Fix not to crash when trying to report an error while starting up.

      • (MacOS X version): Change the menu shortcut for "Full Screen Mode" to be the OS X standard shortcut Shift-Command-F (previously we used F11, but that's used by the desktop).

      • Add checks for errors when reading the font file.

      • Remove useless extra quoting when invoking vim to show the location of an error from cavern.

      • Include GL/gl.h before GL/glext.h (needed on Debian wheezy).

      • Use wxValidator to simplify keeping svxPrintDlg member variables and fields in the dialog in sync.

    • cavern:

      • Demote errors about invalid dates to warnings, since we've accepted *date for ages without any checks on the value, and so existing datasets probably contain invalid dates and dates in other formats. (ticket#19)

      • New *alias command allows '-' to be mapped to '..' for compatibility with pocket topo: *alias station - ..

      • We want to warn if there's a clino reading which it would be impossible to have read from the instrument (e.g. on a -90 to 90 degree scale you can't read "93" (it's probably a typo e.g. for "39"). However, the gradient reading from a topofil is typically in the range 0 to 180, with 90 being horizontal. Really we should allow the valid range to be explicitly specified, but for now we infer it from the zero error - if this is within 45 degrees of 90 then we assume the instrument can read between 0 and 180 degrees.

      • If the survey isn't all connected, still run survey tree checks and report errors and/or warnings which might suggest typo locations. Thanks to Kevin Dixon for the report which highlighted this issue.

      • Report a warning if *begin SURVEY has a separator character in SURVEY.

      • Report column numbers as well as line numbers for some cavern errors and warnings.

      • Adjust width of node stats table to fit longest count when there are more than 9999 of a particular order of node.

      • If the argument to *include has an opening double quote but the closing double quote is missing, then skip trying to open the file.

      • Move "Station X referred to just once" warning after non-existent survey check - if both fire, the non-existent survey error is likely to be more relevant.

      • We no longer follow an error for a bad reading in passage data with a bogus "End of line not blank" error, but instead check the remaining readings on the same line.

      • We no longer follow an error about OMIT for a required reading with a bogus "End of line not blank" error.

      • Report an error if the scale factor in *calibrate is zero - it doesn't make sense and probably means someone reversed the arguments to *calibrate.

      • Report the parent include files starting from the outermost, as that's more logical when there are multiple levels involved.

      • If we were expecting a numeric field and instead get something which starts with '+', '-', or '.' but which isn't a number, then fix the error to include that character in the token reported.

      • Simplify handling of quantity lists to only recognise 'DEFAULT' as the first item.

    • cad3d: Check for errors from img_rewind() and report them.

    • dump3d:

      • Build, install and package dump3d as standard - it's useful for grabbing info from 3d files in scripts.

      • Add --show-dates option.

      • Show only 2 decimal places on coordinates and passage dimensions.

      • Report the data style of legs.

      • Report if the file is an extended elevation.

      • Report img_STOP as STOP rather than CODE_0xffffffff.

    • Test suite:

      • cavern.tst: Fix equatenosuchstn testcase (added in 1.2.6) to normalise the expected output so it passes reliably.

      • cavern.tst: Run diffpos <expected> <actual> so the reports of 'Added' and 'Deleted' stations upon failure are the more natural way round.

      • Add more testcases, expand some existing testcases, and add expected output for more.

    • (Microsoft Windows version): Use wx-config's --cc and --cxx flags to find the appropriate C and C++ compilers to use, and link mingw build statically to avoid needing the libgcc DLL (which newer GCC seems to have by default).

    • (Unix version): When determining the character set for command-line tools, check environmental variable LANG after LC_ALL and LC_CTYPE.

    • When determining the language, check environmental variable LC_ALL before LC_MESSAGES and LANG (but after SURVEXLANG).

    • If we don't find the message file, only give an error if it was specified with SURVEXLANG, since that is an explicit instruction to Survex, whereas LANG, LC_ALL and LC_MESSAGES are essentially system "preferred locale" settings.

    • There are a handful of hard-coded English message strings for reporting errors trying loading message files, etc. These are all now ASCII, as if we fail trying to open a message file, it's more likely the encoding isn't set correctly.

    • Prune strings we are no longer using and are probably unlikely to use again into a new file po_codes_dead, so that translators don't get presented with them to translate.

    • Merge lots of translation updates. Most translations are now complete or close to complete.

    • Add start of Indonesian translation from Arief Setiadi Wibowo.

    • Fix various compiler warnings when building from source.

    • Include scripts gdtconvert and gen_img2aven in the source distribution.

    Changes in 1.2.6 (2012-02-23):

    • (Mac OS X version): Fix so that cavern finds its messages when run by aven.

    • (Microsoft Windows version): Include JPEG images for aven in the installer package (ticket#35).

    • cavern: If we have a reference to a station in a non-existent survey, give a helpful error rather than saying the station hasn't been exported from the survey. (Bug reported by Martin Green via email)

    • aven: Fix to build with a non-Unicode wxWidgets library. Patch from Olaf Kahler.

    • findentrances: Add findentrances utility from Olaf Kahler which produces a .gpx file with waypoints for entrances. This needs libproj so is disabled by default for this release - to enable it install the development stuff for libproj and build survex with: make FINDENTRANCES=findentrances make install FINDENTRANCES=findentrances

    • dump3d: Add support for showing img_ERROR_INFO items.

    • doc/3dformat.htm: Merge in some improvements from Mike McCombe.

    • Incorporate a French translation from launchpad I'd previously copied the English version of by mistake. Attempt to correct mistranslation of "survey file".

    Changes in 1.2.5 (2012-01-03):

    • aven:

      • The survey tree in the left panel is now in sorted order once more.

      • No longer fails with an assertion if used for a long time (we were leaking an OpenGL list each time one had to be regenerated).

      • Now builds with newer FFmpeg library.

      • Draw measuring line in front of the indicators rather than behind them.

      • Loading a new file (or reloading the current one) no longer invalidates the OpenGL lists for the compass and clino, so will be a fraction faster.

    • Improve handling of attempts to look up translated messages before the message subsystem is fully initialised (which only happens if there's an error early on).

    • Improve the survex(7) man page text, and fix it to be marked as section 7 in the man page source as well as in the filename.

    Changes in 1.2.4 (2012-01-01):

    • aven:

      • A change in 1.2.3 meant that aven tried to use OpenGL before it was initialised, which doesn't cause problems in some machines, but causes aven to abort on others. This is now fixed, and there's a check in place to help avoid similar issues in future. (ticket#34)

      • Always use metres or feet for the depth colour key, and chose a consistent precision by looking at the depth range. (ticket#30)

      • Show the depth units below the colour bar rather than after every value.

      • When zooming way in, stay in metres rather than switching to cm.

      • On the scale bar, say “1 mile†rather than “1 milesâ€.

    • Translation updates for Catalan, French and Slovak.

    Changes in 1.2.3 (2011-12-31):

    • Fix to build with wxWidgets 2.9.2.

    • (Mac OS X version):

      • Processing .svx files from aven now works.

      • Remove spurious blank lines from the licence text in "Get Info".

      • Don't create the help menu at all, as it is empty (because the "About" entry goes elsewhere) and sometimes seems to appear in the UI.

      • INSTALL.OSX: Update to reflect current status.

    • aven:

      • Fix Y coordinates of surface surveys on printouts. (Closes #32)

      • Improvements to text plotted on the survey pane: - Support plotting Unicode character points > 256 by lazily loading the data for them from the font file and plotting them with a direct call to glBitmap(), which is slower but doesn't require a display list per character. - Adjust the spacing from fixed width to putting a one pixel gap either side of each one character (so two between adjacent glyphs). Mostly this reduces the horizontal width, but it adds a pixel for characters like "m" and two in a few cases. - Fix .pixelfont file generation to correctly handle characters wider than 8 pixels.

      • Fix expected cross shape so don't always reject using texture mapping to draw crosses.

      • As we read a survey file, eliminate tubes consisting of zero XSECTs as well as those consisting of just one. Previously we would trip over the empty tube later. Such tubes can for example be created by extend if a splay shot is the start or end of a tube.

      • Make the green colour used for entrances in the survey tree the same (slightly darker than before) green used for the entrance blobs.

      • Report the version of the library we're actually running with if built against wx >= 2.9.2. Make it clear that the version reported is the version *built* with for wx < 2.9.2.

    • extend:

      • Copy the end markers for passage tubes.

      • Preserve left and right data for tubes (previously they were set to -1.0 which means "no info").

    • img library: Fix incorrect comment in img.h which claimed that img_XFLAG_END was no longer used - it certainly is!

    • Use curly double quotes instead of "`" and "'" to quote filenames, etc in messages, and curly single right quote instead of straight ASCII apostrophe. Fall back to using straight ASCII versions if we can't represent them in the current character set.

    • Translation updates for Catalan, French, Slovak and Spanish.

    • Test suite:

      • Add test coverage for interleaved diving data.

      • Add testcase for diving data with topofil-style distance.

    Changes in 1.2.2 (2011-10-06):

    • aven:

      • Replace the textured-mapped font drawing with an approach based on glBitmap. This doesn't suffer from the character alignment issues which the textured-mapped fonts had, and is actually significantly faster on some machines. The current font used is (mostly) fixed-width, but this isn't an inherent limitation - it was just the easiest font data to convert to a usable format.

      • Fix assertion failure due to rounding differences on loading certain .3d files. (ticket#26)

      • Fix assertion failure when turning on 3D passages if they stick out higher or lower than any station. (ticket#29)

      • Fix grid not to disappear when blobs are turned on and blobs are drawn using lines.

      • If a degree sign isn't available in the character set in use, transliterate it to 'dg' rather than skipping it.

      • Fix message which should have been a degree sign but got lost in the format change for 1.2.0 and then got reassigned in 1.2.1. Externally, this means that bearings in the status bar now have a degree sign after them if they are in degrees rather than nothing (1.2.0) or "&Hide Compass" (1.2.1).

      • Fix print dialog to calculate the scale required for "One page" right before it calculates how many pages are required, so we don't end up something other than 1x1 being shown when the user changes settings.

      • Update the calculations for picking a scale and for deciding how many pages are needed to take into account the change in info box height made in 1.2.1.

    Changes in 1.2.1 (2011-10-04):

    • Translation updates for US English.

    • aven:

      • Rename the "depth bar" to "colour key" in documentation, menus, etc since it now shows colours for dates and errors as well as depths.

      • In the colour key for "colour by date", change "No info" to "Undated".

      • Remove the dark grey background from the colour key and just put a single pixel black border around the colours. This is more in keeping with the other controls, and means the colours are now on a black background so more visually similar to the survey legs.

      • Move the colour key's "Undated"/"Not in loop" entry down a little to improve the appearance. Make each section a pixel taller.

      • Allow "Colour by X" to be selected even if there's no data for X or only a single value of X used (the colour key is much smaller in these cases, and does still provide some useful information).

      • Fix incorrect calculation of depth colouring for survey legs which straddle a depth band boundary.

      • The scale bar, compass, clino, and colour key now all have right click menus which allow related actions to be performed (especially handy in full-screen mode).

      • Improve the font used on the survey pane - it now contains the '-' character (so the clino now shows negative angles as negative, and dates in the colour key are now hyphenated). Also the spacing and alignment are a little better, though still not perfect.

      • PLT file export now handles spaces and control characters in station names by escaping them with '%' as in URLs.

      • Pressing "Enter" on a station in the tree control now centres the view on that station.

      • The scale bar is now cached in an OpenGL display list since it often gets redrawn exactly the same - for example, when rotating, panning, etc.

      • Pressing "F5" forces all cached OpenGL drawing lists to be invalidated and then forces a refresh of the survey pane. This is intended as a debugging aid - if pressing F5 changes the display at all then there's a missing case where a list should have been invalidated (please report if you find such a case as it is a bug).

      • We now automatically track which OpenGL display lists need to be invalidated on window width or height changes.

      • Increase scale bar maximum width from 65% of the window width to 75% as it was in 1.0.x (except that if that would overlap the clino we now reduce that proportion down until it reaches 50%). Make the limit of zooming in the same as in 1.0.x. (ticket#23)

      • (Linux version): Previously wxGTK didn't really handle showing a dialog if the application was fullscreen (the dialog got opened under the main window!) To work around this, aven would switch out of full screen mode temporarily while showing a dialog. This case works properly with recent wxGTK, so disable our workaround with versions we know work. Also, apply the workaround only for wxGTK, not everywhere except on Microsoft Windows as there's no reason to think we need it for other platforms.

      • Grey out the "View North" action when we're already viewing North, and similarly for other compass points.

      • (Mac OS X and Microsoft Windows versions): Fix missing newline to OpenGL info in the "About" dialog.

      • Fix to set the correct filename on the root of the survey tree - previously the filename of the previous file loaded was used!

      • The movie export code now works with newer versions of the FFmpeg libraries as well as still working with older versions.

      • Fix mixed up messages - the print dialog now says "View" on the left subgroup of controls rather than some unrelated message.

      • On printouts, combine the "Plan View"/"Elevation" info box field with the field which gives the bearing and reduce the height on the info box by the removed field, so it's now 3cm for plans and elevations, as for extended elevations. Report the tilt angle for tilted elevations which it seems has been missing for ages (it's not in recent 1.0.x either).

      • Tweak the exact positioning of informational text on printouts to look nicer and make better use of the available space.

      • Add keyboard mnemonics to the "Plan" and "Elevation" buttons in the print dialog.

      • Make the sign of the tilt angle for printouts consistent with the sign shown by the "clino" in the survey pane.

      • In the "Print" dialog, when in plan view disable the "Plan view" button, and similarly for the "Elevation" button.

      • (Microsoft Windows version): Sort out appearance of custom cursors.

      • If a label isn't valid UTF-8 or CP1252, fall back to ISO8859-1.

      • (Mac OS X version): F11 puts aven into full screen mode, but apparently you can't get out again easily, so add code to explicitly check for F11 being pressed and toggle full screen.

    • (Linux version): Fix the RPM .spec file for where man pages now get installed and package aven.svg and the vim support files. (Fixes from James Begley)

    • "make check" now performs several checks on the translation files.

    • More messages are now available to be translated.

    • cavern: Fix reporting of ranges of survey coordinates, which was broken by the message handling changes in 1.2.0.

    • Fix warning when compiling with GCC.

    • INSTALL: Mention building wxWidgets with --enable-unicode. Mention using sudo for installing on Unix.

    • In the manual, replace the instructions for building from source with a pointer to the clearer instructions in INSTALL.

    • In the manual, make it clear that installing with administrator rights also applies to newer platforms than XP.

    • doc/TODO.htm: Update.

    Changes in 1.2.0 (2011-09-20):

    • Translation updates for Catalan, French, Romanian, Spanish, Slovak, and US English.

    • tests/smoke.tst: aven no longer requires an X display for --help or --version, so replace skip of this check with a check that this remains the case.

    • We now use the standard .po and .pot file formats for storing translations (rather than the Survex-specific messages.txt format), and then translate these into Survex's .msg format.

    • (Unix version): Move survex man page to section 7 (since it isn't documenting an actual command).

    • (Unix version): Write each generated man page to a temporary file, then atomically rename, to avoid leaving an empty or partial man page behind if docbook-to-man dies (1.1.16 had an empty cad3d.1, and we want to avoid a recurrence of that).

    • (Unix version): Default to installing docs into /usr/share/doc/survex rather than /usr/doc/survex.

    • aven:

      • Fix handling of accented characters in the survey pane.

      • Aven icon redrawn in SVG format - it's now a vector image which looks nicer at larger sizes.

      • Explicitly request double-buffering, which seems to be needed for systems with GLX >= 1.3.

      • Fix crash while trying to load certain .3d files.

      • Movie export code updated to work with more recent versions of FFmpeg. Currently this is disabled in Microsoft Windows builds, pending getting the required libraries set up for building releases.

      • Reporting of errors during movie export improved.

      • Force playback speed to "x1" during movie export.

      • Use stock IDs for buttons where appropriate - such buttons may now be rendered with icons on some platforms.

      • If a label isn't valid UTF-8, treat it as CP1252 (the Microsoft superset of ISO8859-1).

      • (Unix version): Remove special handling for toggling "full screen" on wxGTK as it's no longer required with modern versions.

      • Don't redraw the survey on every mouse movement in the survey pane unless the measuring line is (or just was) active. (ticket #17)

    • cavern:

      • Drop "non-fatal" from the report of how many errors there were at the end of the run - it just confuses users - we won't even get here if there's a fatal error!

      • Add --3d-version option to allow the user to specify the version of the 3d format to output. (ticket#21)

    • img library:

      • Make the highest and lowest valid values for img_output_version available in img.h as IMG_VERSION_MIN and IMG_VERSION_MAX.

    • (Mac OS X version): Fix buildmacosx.sh script to check where the temporary volume actually gets mounted. Fix URL for downloading wxWidgets.

    Changes in 1.1.16 (2011-05-16):

    • Translation updates for German, Spanish, Italian, Portuguese, Brazilian Portuguese, and US English.

    • Use horizontal ellipses character rather than '...' and right arrow character rather than '->' where these characters are available.

    • (Unix version): Link with -lGL, if it exists, to support linking with gold or GNU ld --as-needed (Debian bug #615781).

    • img.c:

      • Fix code typo for IMG_API_VERSION == 0 case.

      • Fix code typo in code used when IMG_HOSTED isn't defined.

    • doc/TODO.htm: Remove entries which have now been done.

    • (Microsoft Windows version): aven: We now include all the available translations for messages from wxWidgets, which means that standard widgets will appear translated where available even if Survex messages aren't translated.

    Changes in 1.1.15 (2010-10-15):

    • aven:

      • In the cavern log window, change the "Rerun" button to "Reprocess" to follow terminology in manual and elsewhere. Fixes ticket#15.

      • When displaying output from cavern, don't update the window after every line, but only when we don't have data from cavern pending. Hopefully addresses ticket#12.

      • If we aren't using GL_POINTS for blobs, draw them using a series of abutting lines rather than with gluDisk which is faster and gives a consistent shape.

      • Check whether blobs and crosses actually render correctly as points/point sprites, and if they don't, fall back to drawing them with lines. The best method is cached on disk, and rechecked automatically if the graphics hardware is changed or the drivers upgraded.

      • Fix non-USE_FNT case to work again (it's limited to ISO-8859-1 characters though, so we still enable USE_FNT by default).

      • Don't offer "All files" wildcard in presentation save dialog.

      • (Microsoft Windows): Handle filenames with non-Latin1 characters in in more places.

      • (Microsoft Windows): Quote filenames with spaces and metacharacters in when running cavern from aven. Fixes ticket#11.

    • editwrap: (Microsoft Windows): Handle filenames with non-Latin1 characters.

    • diffpos: Handle files with duplicate labels in better - extend generates duplicate labels when it breaks a loop.

    • Enable eswap-break testcase now that diffpos handles duplicate station names.

    • New v7 of .3d format which stores survey dates as number of days since January 1st 1900, so we now support dates from 1900-2078 (rather than 1970-2037) with a smaller file size. The img API is now versioned - you can select the new "version 1" by compiling with -DIMG_API_VERSION=1, which gives the survey dates in days in days1 and days2 instead of as time_t values in date1 and date2. Fixes ticket#14.

    • Consistently use http://survex.com/ rather than http://www.survex.com/ - the former has been the canonical name for some time, with www.survex.com just redirecting to it.

    • (Unix version): Use unlocked file I/O if available, which can be much faster in some cases (we don't need the locking as we don't do multithreaded file I/O).

    • (Mac version): Fix compilation failure due to clash with Point in Mac OS X headers.

    • (Mac version): buildmacosx.sh now works again.

    • Most tests weren't actually running any testcases (looks like a sh portability issue). This is now fixed, and fortunately all tests still pass.

    • Include the extra .isl translation files for Innosetup in the source archive.

    Changes in 1.1.14 (2010-07-26):

    • Restore compatibility with wxWidgets 2.6 (1.1.13 required wxWidgets 2.8).

    • aven:

      • After processing survey data, if there were warnings or errors, add a "Rerun" button to allow easy reprocessing after fixing problems. If there were only warnings, also add an "OK" button to allow moving on to viewing the processed survey data (fixes ticket#13).

      • Optimise updating of the cavern log window (hopefully fixes ticket#12).

      • Fix links in cavern log window to link from exactly '<file>:<line>' (and not the ': ' after), and to make the title for the terminal the warning/error message. Avoid false positives by checking that '<line>' is a number.

      • Don't double escape the contents of href and target in links in the cavern log window.

      • Improve handling of the splitter window, fixing behavioural glitches in various cases.

      • Highlight stations matching any current search when a file is loaded. (ticket#9)

      • (Mac version): Fix build issue due to Mac OS X polluting the global namespace with its own "Point" class.

      • (Unix version): The Gnome print dialog has its own preview window so suppress ours if using the Gnome one.

      • (Unix version): Link aven with -lGLU which SuSE Linux needs.

      • (Microsoft Windows version): Fix handling of a double-click on the survey tree when built with wxWidgets >= 2.8.11.

    • cavern: Report relevant file and line number for three warnings which didn't give them before.

    • (Unix and Mac versions): configure: Update the wx-config probing code - wxmac-config etc aren't present with newer wxWidgets versions so there's no point looking for them now.

    • (Mac version): buildmacosx.sh: This script builds a diskimage with Survex in for easy installation. Update it to work with the latest Survex versions (use WX_CONFIG not WXCONFIG; use a Unicode build of wxWidgets; if building a private wxWidgets, use 2.8.11 not 2.7.0-1).

    • manual:

      • Correctly capitalise "GTK".

      • Note that on Linux we only regularly test builds with the GTK+ version (change taken from 1.0).

    • Fixed the cad3d man page, which was an empty file in 1.1.13.

    Changes in 1.1.13 (2010-06-16):

    • Say "wxWidgets" instead of "wxWindows" consistently.

    • img.c: Fix small memory leak (filename_opened member).

    • cad3d, aven: Fix export to SVG when a label contains a '%' character.

    • aven:

      • wxWidgets 2.6.0 or newer is now required.

      • A "Unicode" build of wxWidgets is now supported. An "ANSI" build may still work but hasn't been tested recently (all packaged versions of wxWidgets seem to be Unicode now).

      • Fix potential uses of uninitialised variables which may have been causing occasional glitches when loading a file on start-up.

      • Improvements to the handling of the font used for plotting labels and other text on the survey pane: - Loading the font file is more efficient. - Character spacing is improved. - Default font is now anti-aliased.

      • "About" dialog: - Add "Copy" button to copy the system info to the clipboard for easier bug reporting. - List OpenGL extensions last, since there are usually lots of them with a modern gfx card. - Fix 100% CPU usage while the "About" dialog is open.

      • Processing .svx files: - Passing a .svx file on the command line now works better. - Put the survey data log window in a splitter in the usual frame rather than opening a separate frame for it. - Auto-scroll the log window until we've reported a warning or error. - Fix small memory leak.

      • The presentation filename now defaults to using the basename of the currently loaded dataset, but we always prompt before we first save with such a name.

      • Reduce memory usage when saving a screenshot.

      • Allow "Toggle Fullscreen" to work even if no survey is loaded now that we persist the window size (and maximised or fullscreen state) between invocations.

      • Fix reporting of OpenGL errors.

      • Fix glitches when tilting while looking East.

      • Added Portuguese and Slovak translations of wxWidgets messages.

    • Documentation:

      • Rationalise manual formats - replace PostScript with PDF and drop RTF.

      • Drop the "alternative manual formats" self-extracting zip file - people will generally just want one of the formats, so downloading several together isn't very useful.

      • 3dformat.htm: Update for v6 format (thanks to Mike McCombe).

      • GPL.htm: Replace HTML version of licence with a link to the version on the FSF website.

      • ChngeLog.htm: Stop generating an HTML version of the ChangeLog - it's too low level to be of interest to non-developers, and developers can look at the source code.

    • (Unix version): configure: New preferred name for specifying wx-config script is WX_CONFIG. WXCONFIG still supported for compatibility.

    • (Linux version): Source RPM package dropped as you can just build an RPM package from the source tarball.

    • (Microsoft Windows version): The installer is now created with a newer version of InnoSetup, which gives a 10% smaller download.

    Changes in 1.1.12 (2007-02-07):

    • aven:

      • Remember the window size or maximised/fullscreen state between invocations.

      • Add options dialog to "Export" similar to the one for "Print".

      • The "number of pages required" in the print dialog now updates when you change what is to be shown (underground legs/surface legs/station names/crosses).

    Changes in 1.1.11 (2006-11-25):

    • Updated Czech, Spanish, and Slovak translations.

    • (MacOS X version): Assorted OS X specific tweaks and fixes.

    • aven:

      • Pick a smaller and clearer font for labels.

      • Fix character spacing.

      • Tweak display of bearing and elevation angles to look nicer with proportional fonts.

      • Use the title from the 3d (or plt, etc) file for the window title rather than the filename.

      • Show distances to 2 decimal places rather than the nearest integer.

      • Only consider underground legs when calculating the depth bands and depth colouring.

      • Add "Colour by Error".

      • Add entry for "white" in date and error keys.

      • When setting the view to a single point, don't change the scale.

      • If reloading the same file, don't change the view

      • Fix filetypes selector in open dialog.

      • Fix the charset we use for aven in certain cases.

      • Call msg_init before using msg_lang or it won't ever be set!

      • Pass wx the full language code to initialise the C library locale.

      • Fix bug in generating prefix tree view which could lead to a bogus leading dot on some survey names (bug probably introduced in 1.1.10).

      • "New Presentation" now ensures that the side panel is open

      • Fix updating of cached opengl lists when the view is reset to the default.

    • Ignore LANG if it starts with a digit to avoid problems with bogus value for LANG which AutoCAD installation seems to set on MS Windows.

    • (Unix version): configure: Allow SGMLTOOLS and DOCBOOK_TO_MAN to be specified. Either/both can be set to ":".

    • dump3d: Report unknown (to dump3d) codes returned by img.

    • img library: Flag all stations as underground in the old "ASCII" .3d format.

    Changes in 1.1.10 (2006-07-14):

    • aven: Clicking on a survey name in the survey tree now highlights it in the map view. Double-clicking zooms the view to show the clicked survey highlighted. Clicking the root clears the highlighting and double-clicking the root restores the default view. To expand/collapse a branch, click on the "[+]" or "[-]" icon to the left of the survey name.

    • aven: The measuring line can now measure to anywhere in plan or elevation view (not just to a station!) In plan view the horizontal distance and bearing are shown, while in elevation view the vertical distance is shown.

    • aven: Moving the mouse over a station in the survey view now highlights that station in the survey tree (though it may not be visible if the survey(s) it is in aren't expanded).

    • aven: Clicking on a station to centre the view now moves the mouse pointer to the new location of the station (except on Mac OS X where this isn't allowed).

    • aven: Fix which presentation toolbar buttons are shown as depressed.

    • Fix infinite loop reading 3d files with LRUD data (bug introduced in 1.1.9).

    • vim files are now installed with the correct paths (bug introduced in 1.1.9).

    Changes in 1.1.9 (2006-07-04):

    • (Unix version): Install desktop files for aven and svxedit contributed to the Ubuntu package by Phil Bull, and corresponding pixmaps.

    • Fix img to filter out cross-sections which don't match the subsurvey (if specified). The API now returns img_XSECT_END to mark the end of a passage rather than setting a flag on the last img_XSECT of the passage.

    • Enhance integration with the vim editor - this can now colour .err files, run cavern from vim and parse error output, and run aven from vim. Tweak the existing vim mode for .svx files to fix a few minor bugs and add support for the new "*data passage" style.

    • aven: fix drawing of the "blob" end of the measuring line on graphics cards which can't draw large enough blobs for us.

    • aven: sort out confusion about what encoding everything is in which means that the distance measured by the measuring line actually gets displayed and also fixes problems with empty menu items in non-English locales in some cases.

    • aven: redraw grey background after a menu is closed over the aven window with no survey loaded.

    • aven: fix bug which caused printing to crash (introduced in 1.1.8).

    • aven: avoid crash on some machines when opening "About" dialog before having loaded a survey.

    • aven: Translate "Plan" and "Elevation" buttons in print view dialog.

    • (Unix version): aven: Fix character set handling of cavern output.

    • cavern: Report an error if a cross-section is specified for a station which doesn't exist.

    • Updated French and Italian translations.

    • (Unix version): aven: Fix "Can't open message file `en_US' using path `${prefix}/share/survex'" error.

    • Fix bug in 3d file reading on 64 bit platforms when used in STANDALONE mode (doesn't affect Survex itself, but other applications which use img.c should update their copy).

    • (Unix version): Add checks that wxWidgets is a non-unicode version (wx 2.6 and later are caught by configure, whereas older wx versions are caught when trying to compile).

    Changes in 1.1.8 (2006.06.30):

    • Drop support for building with wxWidgets versions prior to 2.4.0 (which was released on 2003-01-07).

    • aven: Printing through aven now uses settings from the "[aven]" section of print.ini, and support for hierarchical sections (using "like=") has been disabled.

    • aven: Change mouse actions to be compatible with those in Survex 1.0. The mousewheel now zooms in/out (it doesn't do anything in 1.0) and left drag is now smart about not rotating and zooming at the same time.

    • aven: Highlighting stations now happens as you type, and pressing "Enter" or clicking the "Find" button now pans and zooms to show the highlighted stations.

    • aven: Left-clicking away from a station now cancels measuring line.

    • aven: Setting view to North, South, East, or West is now animated like the tilt from plan to elevation.

    • aven: Fix presentation saving to also write "." for decimal points and presentation loading to accept either "." or ",".

    • (Unix version): aven: Add text for all toolbar items so that aven will work with the Gnome desktop preference for displaying toolbars as icons with text or just text (wxWidgets needs fixing first though).

    • (Unix version): aven: Remove the ability to detach the menu bar (yell if you actually used it and I'll restore it!)

    • aven: Add "all survey files" option to the "open file" dialog.

    • (MS Windows version): aven: Fix cursor keys to pan survey.

    • (MS Windows version): Built with wxWidgets 2.6.3 instead of 2.6.2.

    • (MS Windows version): Fix installer to work on Windows 2000 or XP if run by an unprivileged user.

    • (MS Windows version): Upgrade to the latest version of InnoSetup (the installer builder we use) and include new installer translations for UK English, Spanish, Brazilian Portuguese, Italian, Romanian, and Slovak.

    • (MS Windows version): aven: Include Catalan and Brazilian Portuguese translations of messages for wxWidgets (the GUI library we use).

    • aven: Disable "Highlight exported points" if there aren't any.

    • Updates to French translation from Michel Bovey. Also updates to German, Italian, Catalan, Spanish, and Romanian translations.

    • (Unix version): test suite: fix smoke test to pass even without X running (it was meant to but the code had a bug).

    • aven: Check if OpenGL is available and exit cleanly with a helpful error if it isn't.

    • (Unix version): aven: Fix --help and --version to work without a working X display (provided it's built with wxWidgets 2.5.1 or newer).

    • aven: Automatically select the presentation tab of the notebook when the user selects "New Presentation" or "Open Presentation".

    • aven: Fix "Delete" in the presentation list to not get passed on (and so not reset to default view as well).

    • aven: Fix Ctrl+Insert in the presentation list not to segfault if the list is empty.

    • aven: Fix Cursor Up and Down in the presentation list to move the highlight up and down instead of being passed on and moving the survey.

    • aven: Improve SVG output compatibility. Tested with Mozilla Firefox 1.5, Adobe's SVG browser plugin, Gimp 2.2.8, Gqview 2.0.0, Opera 8.5, Safari 2.0.3, and InkScape 0.42.

    • aven: Put a 5mm border around exported SVG files to allow for station markers and non-zero width lines.

    • aven: Fix crash when exporting as SVG or Sketch if labels or surface data was turned on.

    • aven: Actually close the file we're exporting which fixes problems with it not always being fully written.

    Changes in 1.1.7 (2005.10.18):

    • cavern: Add validity checking for dates in *date commands (with feature test in testsuite). A date entered as just "year" or "year.month" now becomes a date range for the relevant period (previously it became a single date near the middle of that period).

    • extend: Fixed 2 uninitialised flags (should fix erratic behaviour on with MS Windows).

    • extend: Default output name for a file called input.3d is now input_extend.3d rather than just extend.3d (which was annoying if you wanted to extend several surveys in the same directory).

    • aven: OpenGL 2.0 always includes support for point sprites so rework our check for them to include that knowledge.

    • aven: Regenerate depth bar if user switches to/from metric units.

    • aven: Don't clear the "there" mark just because the mouse pointer has moved off a station.

    • aven: When processing a .svx file, put the resultant .3d file in the same directory (since that's where we then try to load it from).

    • aven: Fix labelling of date colouring on 32 bit platforms.

    • aven: If "colour by date" is on and we load a survey with no date info (or all surveyed on the same date) then set "colour by none".

    • aven: Make the error dialog modal and remove a signal handler once it has fired to prevent endless (or seemingly endless) cascades of error dialogs.

    • aven: Enforce a minimum object volume diameter of 1m to avoid problems if a survey file with only one station in is loaded.

    • aven: Fix problems with indicators disappearing when we're drawing blobs and/or crosses the slow (but always supported) way. (Problem introduced in 1.1.6).

    • (Unix version): aven: Really stop setting extra toolbar margin when using GTK2.0. The attempt to fix this in 1.1.3 failed because __WXGTK12__ is set for GTK+ 1.2 or *any later release* so is true for GTK+ 2.0 too!

    • (Unix version): aven: Add details of which of wxGTK, wxMotif, and wxX11 we've been compiled with, and which GTK+/Motif version where appropriate.

    • (Unix version): Fixed build on Fedora Core 3.

    • documentation: Updates to 3d file format specification from Mike McCombe.

    Changes in 1.1.6 (2005.10.10):

    • (MS Windows version): Distribution is about a third smaller than 1.1.5 (mostly because mingwm10.dll is no longer required).

    • aven: If aven is asked to load a .svx, .dat, or .mak file, run cavern on it, showing cavern's output in a window (with errors and warnings clickable to load the offending file into an editor), and then loading the resulting 3d file.

    • aven: Added "Colour by Date" option.

    • aven: Disable "Colour by Depth" option if there's no elevation variation.

    • aven: Don't crash if trying to load a survey with no elevation variation. Instead turn off depth colouring.

    • aven: Export as HPGL added.

    • aven: Improved update of mouse coordinates and measuring line (thanks to Martin Green).

    • aven: Show the coordinates of either the mouse pointer or the nearest survey station to it (if there is one near enough). Showing both was confusing and meant the status bar overflowed on smaller displays.

    • aven: When printing an extended elevation, don't show bearing and elevation.

    • aven: Don't lock "flat" surveys which aren't extended elevations - a flat survey with LRUD data isn't flat any more!

    • aven: When we have to draw blobs and crosses the slow way (because the graphics hardware doesn't support the fast way), draw them so that they should appear at the correct depth into the 3D scene instead of on top of everything else.

    • aven: Make "play presentation backwards" icon green to match the other presentation icons.

    • (MS Windows version): aven: Mouse clicks on the survey view now set the keyboard focus there.

    • (MS Windows version): aven: Fix first redraw of a newly loaded survey.

    • (MS Windows version): aven: Fix redrawing of measuring line.

    • cavern: Store dates for img_XSECT.

    • cavern: Fixed small one-off memory leak if you specify -o more than once.

    • (Unix version): Check environmental variable LC_MESSAGES when deciding what language to use for messages.

    • (MS Windows version): "Print" on a 3d file now prints through aven rather than the separate printer driver (Unix has done this for some time).

    • Removed old printer drivers.

    • img library: When creating a 3d file, ignore img_XSECT if we've been asked to write a file format version which doesn't support it.

    Changes in 1.1.5 (2005.09.20):

    • (MS Windows version): aven: Fixed crash on start-up (introduced in 1.1.4).

    • aven: Make blobs round like they are in Survex 1.0.

    • aven: If the graphics drivers don't support drawing blobs using OpenGL point markers, fall back to drawing filled circles.

    • aven: If the graphics drivers support it, draw crosses as texture mapped OpenGL point markers which is much faster.

    • aven: Cross size increased to match Survex 1.0.

    • aven: We must update which blobs are displayed if display of surface or underground legs is toggled.

    • cavern: Fix handling of a *solve followed by survey data, none of which is attached to the previous data.

    • cavern: Fixed "No survey data" error when a *solve is followed by another *solve (or the implicit solve at the end of processing) with no data between them.

    Changes in 1.1.4 (2005.09.19):

    • aven: Added Aven's icon to the "About" dialog.

    • aven: Use localised character for the decimal point (e.g. "," in most continental European countries).

    • aven: Previously the survey tree would get focus and then take keypresses (e.g. "P", "L", "Delete"). Now we pass most keypresses across so they operate on the cave, and transfer the input focus across when we do.

    • aven: Make pressing "Return" in the tree control expand/collapse a subtree.

    • aven: Speed up intialisation by delaying creation of OpenGL lists until they're needed.

    • aven: Added Mark Shinwell's bounding box with shadow of the survey.

    • aven: Disable the "Tubes" button/menu item when there's no LRUD data.

    • aven: Reworded "Restore Default Settings" as "Restore Default View".

    • (Unix version): aven: Set sensible default margins for printing and preserve any margin values the user specifies between runs (previously margins defaulted to 0 each time aven was run).

    • Documentation: Document *DATA PASSAGE in the manual.

    Changes in 1.1.3 (2005.09.07):

    • (Microsoft Windows version): Fixed build problems.

    • cavern: Allow OMIT character (-) for left/right/up/down.

    • aven: Remove an unnecessary menu separator.

    • aven: Fix "Find" and "Hide" toolbar buttons to work with GTK2.0.

    • aven: Make the tooltip for "Hide" show the number of found stations.

    • aven: If * or ? is used in a glob-style pattern, force a non-substring match.

    • aven: Enable "New Presentation" when there's a 3d file loaded, rather than when there's a presentation loaded.

    • aven: Make entrances green in side panel tree list to match green blobs used in cave view.

    • aven: Don't show surface labels if we're not showing surface data, etc.

    • aven: Merge "Start Rotation" and "Stop Rotation" into "Toggle Rotation" and make "Space" the key for this. Keep Return working "Stop Rotation" so existing users are happy, but don't advertise it.

    • aven: Normalise filename by adding any extension used, and use the normalised filename for file history and window title.

    • (Unix version): aven: Stop setting extra toolbar margin when using GTK2.0 as the toolbar buttons already have a sensible margin - the extra margin is only needed with GTK1.2.

    • aven: Fix handling of plumb legs in tube model.

    • aven: Fixed swapped L and R in tube model.

    • extend: Preserve UD cross-section information in extended elevation.

    • extend: Add new messages for John Pybus' enhancements.

    Changes in 1.1.2 (never formally released):

    • Added support for LRUD data in .svx files, in .3d files, and aven can now load and display it on screen and on printouts. The ability to "fake" LRUD data in aven is gone for now but will reappear in some form later.

    • cavern: Removed support for writing Chasm's 3dx format. We're going to fold any desirable missing chasm functionality into aven.

    • aven: Rearranged mouse actions as discussed on the mailing list. Added cursors for each different mouse action to help the user learn what each does. Also added cursors for the "compass" and "clino" as well as the scalebar to suggest to the user that they can be dragged to change the view.

    • (Unix version): aven: Don't segfault if LANG isn't a known language.

    • tests/smoketest.tst: If X windows is running, check that we can run aven with --help and --version.

    • tests/cavern.tst: Fixed cavern.tst to warn if it is skipping a test because no results are listed for it. This revealed that there was a "newline" test which should have been called "badnewline", and was a broken testcase too! Fixed all these problems.

    • cavern: Applied Simeon Warner's patch for handling backcompass, backclino, and omitted forward compass/clino readings in Compass DAT files. Added a feature test for this to the testsuite.

    • It no longer makes sense to have an option not to build aven or to build aven without OpenGL so remove old machinery for this from configure and the sources.

    • (Unix version): configure: Check if "-lXxf86vm" is needed.

    • configure: Better output for strcasecmp test.

    • aven: Fix crosses to work much better. Not a total fix - their position in the Z buffer isn't correct and they're rather slow to plot.

    • aven: Don't regenerate the hittest grid every time the mouse moves while animating, which solves the mysterious pausing effect (thanks go to Martin Green for spotting this!) Also clear all the status bar coordinates when animating.

    • aven: Sort out clashing menu shortcuts in some languages.

    • aven: Fixed compilation problem on x86_64

    • SPUD: Pruned out stuff which has been done or which is not actually relevant to this branch.

    • Merge various changes from 1.0 branch:

      • aven: Port over "printing from aven" functionality.

      • aven: Port over "export as" functionality,

      • Add David Loeffler's vim mode for .svx files.

    • aven: Fix check for whether a label is behind us in perspective view.

    • aven: Don't use an opengl list for drawing the indicators - we typically make a new list each time we plot them anyway.

    • Remove lingering traces of support for RISC OS and pre-386 MSDOS

    • aven: Set icon on non-Windows platforms too. This means that with WindowMaker on Unix you get an icon on the AppIcon by default.

    • configure: Update wxWindows checks to handle newer wx versions.

    • Make all maintainer perl scripts "use bytes;" to avoid utf-8 double encoding problems. They also all require Perl 5.8 now (hopefully this isn't an issue for anyone building from CVS).

    • acinclude.m4: Quote macro name for fix autotools warning.

    • Documentation: "tilt up" is "'" not ",".

    • aven: Add support for mousewheels (to tilt the cave).

    • aven: Fixed twisted transitions to and from pitches in certain cases.

    • aven: Pick a sensible initial window size when the user's desktop is spread over more than one monitor (works best with wx2.5 or newer, but try to do better with wx2.4 or earlier as well).

    • aven: Initialise GfxCore slightly later to avoid visual glitch from notebook contents being visible before any survey is loaded.

    • aven: Allow a coloured texture to be used

    • aven: Don't initialise until we have data (to the user, this means the window is default colour (grey for most systems) not black until a survey is loaded).

    • aven: Fixed weird "shadowed" icons.

    Changes in 1.1.1 (2004-10-06):

    • (Microsoft Windows version): aven: Hopefully fix loading a survey file at startup.

    • aven: Delay loading the bitmap for the "About" dialog until it is first needed. We want start up to be as quick as possible.

    Changes between 1.0.32 and 1.1.0 (never formally released):

    • NOTE: Survex 1.1.X releases are development snapshots made available for the purposes of allowing wider testing and getting more user feedback. Once the code has stabilised the version number will be raised to 1.2.0.

    • aven: Now uses OpenGL for 3d rendering - you may need to install drivers if you're using Windows 95 - these can be obtained from: http://download.microsoft.com/download/win95upg/info/1/W95/EN-US/Opengl95.exe

    • aven: Solid passages - passage dimensions are currently inferred from the leg length (pretty effective as you can measure longer legs in larger passages). Use of real LRUD data coming soon...

    • aven: Depth colouring is now continuously varying.

    • aven: Colour by depth can now be turned off (and there's the start of a framework for properly implementing colour by date, error, etc).

    • aven: Find stations moved onto the toolbar and now uses a simple wildcarded match (? matches any character, * matches any number of characters).

    • aven: We now use the status bar for coordinates, distances, etc to make better use of screen space.

    • aven: Full screen mode (F11).

    • aven: Perspective view.

    • aven: Context sensitive cursor shape - needs more work.

    • aven: Mouse actions changed (hopefully they're now more natural, but you may find the change disorientating - feedback wanted on this).

    • aven: Added "presentations" which allow you to set up fly-through paths and load/save/run them.

    • aven: A presentation can be exported as a movie file.

    • aven: Added Save screenshot facility.

    • aven: Depth fogging option.

    • aven: Added Smooth Lines option.

    • aven: Added Textured Walls option.

    • aven: If a survey has surface legs but no underground legs, default to showing the surface legs.

    • cavern: Dates given to *date are now stored in the 3d file.

    survex-1.4.4/doc/manual.txt0000664000175000017500000032360614367056046012607 00000000000000Survex 1.4.4 Manual Olly Betts Wookey Copyright © 1998-2018 Olly Betts This is the manual for Survex - an open-source software package for cave surveyors. __________________________________________________________ Table of Contents 1. Introduction 1.1. About Survex 1.2. About this Manual 1.2.1. Terminology 2. Getting Started 2.1. Obtaining Survex 2.2. Installing Survex 2.2.1. Linux 2.2.2. Other versions of UNIX 2.2.3. macOS 2.2.4. Microsoft Windows 2.3. Configuration 2.3.1. Selecting Your Preferred Language 2.4. Using Survex 3. Survex Programs 3.1. Standard Options 3.2. Short and Long Options 3.3. Filenames on the Command Line 3.4. Command Reference cavern -- process raw survey data aven -- sophisticated cave viewer for Unix and MS Windows diffpos -- compare the contents of two .3d files extend -- produce an extended elevation from a .3d file sorterr -- re-sort .err file by various criteria survexport -- convert a processed survey data file (such as a Survex .3d file) to another format. 4. Survex data files 4.1. Readings 4.2. Survey Station Names 4.2.1. Anonymous Stations 4.3. Numeric fields 4.4. Accuracy 4.5. Cavern Commands 4.5.1. ALIAS 4.5.2. BEGIN 4.5.3. CALIBRATE 4.5.4. CASE 4.5.5. COPYRIGHT 4.5.6. CS 4.5.7. DATA 4.5.8. DATE 4.5.9. DECLINATION 4.5.10. DEFAULT 4.5.11. END 4.5.12. ENTRANCE 4.5.13. EQUATE 4.5.14. EXPORT 4.5.15. FIX 4.5.16. FLAGS 4.5.17. INCLUDE 4.5.18. INFER 4.5.19. INSTRUMENT 4.5.20. PREFIX 4.5.21. REF 4.5.22. REQUIRE 4.5.23. SD 4.5.24. SET 4.5.25. SOLVE 4.5.26. TEAM 4.5.27. TITLE 4.5.28. TRUNCATE 4.5.29. UNITS 5. Contents of .svx files: How do I? 5.1. Specify surface survey data 5.2. Specify the ordering and type of data 5.3. Deal with Plumbs or Legs Across Static Water 5.4. Specify a BCRA grade 5.5. Specify different accuracy for a leg 5.6. Enter Repeated Readings 5.7. Enter Radiolocation Data 5.8. Enter Diving Data 5.9. Enter Theodolite data 6. General: How do I? 6.1. Create a new survey 6.2. Join surveys together 6.3. Organise my surveys 6.3.1. Fixed Points (Control Points) 6.3.2. More than one survey per trip 6.4. Add surface topography 6.5. Overlay a grid 6.6. Import data from other programs 6.6.1. Changing Meanings of Characters 6.7. Export data from Survex 6.8. See errors and warnings that have gone off the screen 6.9. Create an Extended Elevation 7. Working with Larry Fish's Compass 8. Mailing List 9. Future Developments 1. Introduction This section describes what Survex is, and outlines the scope of this manual. __________________________________________________________ 1.1. About Survex Survex is a multi-platform open-source cave surveying package. Versions 1.2 and later run on UNIX, Microsoft Windows, and macOS. We're investigating support for phones and tablets. We are well aware that not everyone has access to super hardware - often surveying projects are run on little or no budget and any computers used are donated. We aim to ensure that Survex is feasible to use on low-spec machines. Obviously it won't be as responsive, but we intend it to be usable. Please help us to achieve this by giving us some feedback if you use Survex on a slow machine. Survex is capable of processing extremely complex caves very quickly and has a very effective, real-time cave viewer which allows you to rotate, zoom, and pan the cave using mouse or keyboard. We have tested it extensively using CUCC and ARGE's surveys of the caves under the Loser Plateau in Austria (over 25,000 survey legs, and over 140km of underground survey data). This can all be processed in around 10 seconds on a low-end netbook. Survex is also used by many other survey projects around the world, including the Ogof Draenen survey, the Easegill resurvey project, the OFD survey, the OUCC Picos expeditions, and the Hong Meigui China expeditions. Survex is still actively being worked on. Version 1.0 was complete in some sense, but development continues - initially in reshaping Survex into a more integrated GUI package. We encourage feedback from users on important features or problems, which will help to direct future development. See the "Mailing List" section of this manual for the best way to contact us. __________________________________________________________ 1.2. About this Manual If there's a part of this manual you find hard to understand, please do let us know. We already know Survex well, so it can be hard for us to spot areas where the manual doesn't given enough information, or doesn't explain things clearly enough to follow when you don't know what's going on. It's helpful is you can suggest a better wording, but don't worry if you can't, just explain the problem as precisely as you can. The master version of this manual is an SGML document written using the docbook DTD, and automatically converted to a number of other formats. If you are going to send us major changes, it's much easier to include them if you work from this master. You can get it from the source archive (docs/manual.sgml) or from the Survex website. __________________________________________________________ 1.2.1. Terminology Throughout this document we use British terminology for surveying. station a point in the cave that you survey from and/or to leg a line joining two stations survey a group of legs surveyed on the same trip __________________________________________________________ 2. Getting Started This section covers how to obtain the software, and how to unpack and install it, and how to configure it. __________________________________________________________ 2.1. Obtaining Survex The latest version is available from the Survex website: https://survex.com/. It is also freely redistributable, so you welcome to get a copy from someone else who has already downloaded it. If you want some sample data to experiment with, you can download some from the Survex website too: https://survex.com/software/sample.tar.gz __________________________________________________________ 2.2. Installing Survex The details of installation depend greatly on what platform you are using, so there is a separate section below for each platform. __________________________________________________________ 2.2.1. Linux We supply pre-compiled versions for x86 Linux machines in RPM format (suitable for Redhat, Mandrake, and some other distributions). Survex Debian packages are available from Debian mirror sites in the usual way. You'll need root access to install these prebuilt packages. If you don't have root access you will need to build from source (see the next section). __________________________________________________________ 2.2.2. Other versions of UNIX For other UNIX versions you'll need to get the source code and compile it on your system. Unpack the sources and read the file called INSTALL in the top level for details about building from source. __________________________________________________________ 2.2.3. macOS The easiest way to install a recent release of Survex on macOS is by using the Homebrew package manager. If you don't already use Homebrew, you'll need to install it first. See the macOS download page on the website for installation instructions. __________________________________________________________ 2.2.4. Microsoft Windows This version comes packaged with an installation wizard. Just run the downloaded package and it will lead you through the installation process. If you want the file associations to be set up for all user, run the installer as administrator, or as a user with administrator rights. The survey viewer that's part of Survex is called aven, and uses OpenGL for 3d rendering. If you find that 3D rendering is sometimes very slow (e.g. one user reported very slow performance when running full screen, while running in a window was fine) then try installing the OpenGL driver supplied by the manufacturer of your graphics card rather than the driver Microsoft supply. The installer creates a Survex group in the Programs sub-menu of the Start menu containing the following items: * Aven * Documentation * Uninstall Survex Icons are installed for .svx, .3d, .err, and .pos files, and also for Compass Plot files (.plt and .plf) (which Survex can read). Double-clicking on a .svx file loads it for editing. To process it to produce a .3d file, right click and choose "Process" from the menu - this runs aven to process the .svx file and automatically load the resultant .3d file. All the Survex file types can be right clicked on to give a menu of possible actions. .svx Process Process file with aven to produce .3d file (and .err file) .3d Open Load file into Aven Print Print the file via Aven Extend Produce extended elevation Convert to DXF This entry used to be provided to allow converting to a DXF file (suitable for importing into many CAD packages) but this functionality is now available from inside Aven with the ability to control what is exported, and this entry was dropped in 1.2.35. Convert for hand plotting This entry used to be provided to allow converting to a .pos file listing all the stations and their coordinates, but this functionality is now available from inside Aven with the ability to control what is exported. and this entry was dropped in 1.2.35. .err Open Load file into Notepad Sort by Error Sort .err file by the error in each traverse Sort by Horizontal Error Sort .err file by the horizontal error in each traverse Sort by Vertical Error Sort .err file by the vertical error in each traverse Sort by Percentage Error Sort .err file by the percentage error in each traverse Sort by Error per Leg Sort .err file by the error per leg in each traverse __________________________________________________________ 2.3. Configuration 2.3.1. Selecting Your Preferred Language Survex has extensive internationalisation capabilities. The language used for messages from Survex and most of the library calls it uses can be changed. By default this is picked up from the language the operating system is set to use (from "Regional Settings" in Control Panel on Microsoft Windows, from the LANG environment variable on UNIX If no setting is found, or Survex hasn't been translated into the requested language, UK English is used. However you may want to override the language manually - for example if Survex isn't available in your native language you'll want to choose the supported language you understand best. To do this, you set the SURVEXLANG environment variable. Here's a list of the codes currently supported: Code Language en International English en_US US English bg Bulgarian ca Catalan de German de_CH Swiss German el Greek es Spanish fr French hu Hungarian id Indonesian it Italian pl Polish pt Portuguese pt_BR Brazillian Portuguese ro Romanian ru Russian sk Slovak zh_CN Chinese (Simplified) Here are examples of how to set this environment variable to give messages in French (language code fr): Microsoft Windows For MS Windows proceed as follows (this description was written from MS Windows 2000, but it should be fairly similar in other versions): Open the Start Menu, navigate to the Settings sub-menu, and open Control Panel. Open System (picture of a computer) and click on the Advanced tab. Choose `Environmental Variables', and create a new one: name SURVEXLANG, value fr. Click OK and the new value should be effective immediately. UNIX - csh/tcsh setenv SURVEXLANG fr UNIX - sh/bash SURVEXLANG=fr ; export SURVEXLANG If Survex isn't available in your language, you could help out by providing a translation. The initial translation is likely to be about a day's work; after that translations for new or changed messages are occasionally required. Contact us for details if you're interested. __________________________________________________________ 2.4. Using Survex Most common tasks can now be accomplished through Aven - processing survey data, viewing the processed data, printing, exporting to other formats, and producing simple extended elevations. A few tasks still require you to use the command line. And some functionality is available both via aven and from the command line, which allows it to be scripted. The command line programs that come with Survex are: extend Produces extended elevations - this is probably the most useful of these command line tools. Since version 1.2.27 you can produce simple extended elevations from Aven using the "Extended Elevation" function. However the command line tool allows you to specify a spec file to control how the survey is extended, which you can't currently do via Aven. diffpos Compares the positions of stations in two .3d, .pos, etc files. sorterr Sorts a .err file by a specified field. survexport Provides access to Aven's "Export" functionality from the command line, which can be useful in scripts. cavern Processes survey data, but since version 1.2.3 you can process .svx files by simply opening them with Aven, so you no longer need to run cavern from the command line. The main reason to run cavern directly is for use in scripts. dump3d Dumps out a list of the items in a .3d file - it's mainly useful for debugging. __________________________________________________________ 3. Survex Programs __________________________________________________________ 3.1. Standard Options All Survex programs respond to the following command line options: --help display option summary and exit --version output version information and exit __________________________________________________________ 3.2. Short and Long Options Options have two forms: short (a dash followed by a single letter e.g. cavern -q) and long (two dashes followed by one or more words e.g. cavern --quiet). The long form is generally easier to remember, while the short form is quicker to type. Options are often available in both forms. Note Command line options are case sensitive, so "-B" and "-b" are different (this didn't used to be the case before Survex 0.90). Case sensitivity doubles the number of available short options (and is also the norm on UNIX). __________________________________________________________ 3.3. Filenames on the Command Line Filenames with spaces can be processed (provided your operating system supports them - UNIX does, and so do modern versions of Microsoft Windows). You need to enclose the filename in quotes like so: cavern "Spider Cave" A file specified on the command line of any of the Survex suite of programs will be looked for as specified. If it is not found, then the file is looked for with the appropriate extension appended. So cavern survey will look first for survey, then for survey.svx. __________________________________________________________ 3.4. Command Reference Table of Contents cavern -- process raw survey data aven -- sophisticated cave viewer for Unix and MS Windows diffpos -- compare the contents of two .3d files extend -- produce an extended elevation from a .3d file sorterr -- re-sort .err file by various criteria survexport -- convert a processed survey data file (such as a Survex .3d file) to another format. cavern Name cavern -- process raw survey data Synopsis cavern [options] {survex data file...} Description Cavern is the Survex data processing engine. If multiple survey data files are listed on the command line, they are processed in order from left to right. Settings are reset to their defaults before processing each file. Options -o, --output=OUTPUT Sets location for output files. -q, --quiet Only show a brief summary (--quiet --quiet or -qq will display warnings and errors only). -s, --no-auxiliary-files do not create .err file. -w, --warnings-are-errors turn warnings into errors. --log Send screen output to a .log file. -v, --3d-version Specify the 3d file format version to output. By default the latest version is written, but you can override this to produce a 3d file which can be read by software which doesn't understand the latest 3d file format version. Note that any information which the specified format version didn't support will be omitted. Output Cavern reads in text files containing the survey data .svx) and outputs two files, with the extensions .3d and .err. By default these files are put in the current directory, with the same base filename as the first .svx file read, but a different extension. You can change the directory and/or base filename using the --output command line option. E.g. if you process the data file entrance.svx with the command cavern entrance then the files entrance.3d and entrance.err will be created. Cavern also gives a range of statistics at the end of a successful run: * The highest and lowest stations and the height difference between them * The total length of the survey (before and after adjustment). This total excludes survey legs flagged as SURFACE, DUPLICATE, or SPLAY. * The number of stations and legs. Note that a *EQUATE is counted as a leg in this statistic. * The East-West and North-South ranges, and the North-most, South-most, East-most, and West-most stations. * The number of each size of node in the network (where size is number of connections to a station) i.e. a one node is the end of a dead-end traverse, a two-node is a typical station in the middle of a traverse, a three-node is a T-junction etc. * How long the processing took and how much CPU time was used. .3d - data describing the loop-closed centre line This file contains details of the stations and legs, and any flags associated with them. .err - loop closure statistics (percentage errors, etc) This file contains statistics about each traverse in the survey which is part of a loop. It includes various statistics for each traverse, such as the percentage error per leg. You should study this information to determine if any parts of the survey are of lower quality or contain gross errors. Error Messages There are a number of error messages that you may get when processing data. Most of these are self explanatory, and will be caused by such problems as typing mistakes, or by your survey data not being attached to fixed points (in this situation, Survex will list some of the stations that are not connected). Along with the error message, the filename and line number of the offending line will be printed (or the filename for errors such as `file not found'). The format of the filename and line number is that used by gcc, so if your editor can parse errors from gcc, you should be able to set it to allow you to jump to the file and line of each error. Cavern will stop after more than 50 errors. This usually indicates something like the incorrect data order being specified. Deluging the user with error messages makes the actual problem less clear. aven Name aven -- sophisticated cave viewer for Unix and MS Windows Synopsis aven [--survey=SURVEY] [--print] {.3d file} Description Aven displays processed cave surveys in a window and allows you to manipulate the view. Note that there is no perspective in the view. This means that it is impossible to tell which way round a cave is rotating, or whether you are viewing something from behind, or in front. So if you think the direction of rotation in wrong, or changes as you watch, this is just your brain being confused, not a bug! Mouse Control The best way to move the cave is with the mouse. We suggest you try each of these out after reading this section to get a feel for how they work. If you hold down the right button then the cave is dragged when you move the mouse. If you hold down the left button, then the cave is rotated if you move left or right, and zoomed if you move up and down. If you hold down Ctrl while dragging with the left mouse button, then the cave rotates and tilts at the same time instead. If your mouse has a middle button then holding it down and moving the mouse up and down tilts the cave. Moving the mouse left and right has no effect. And if you have a scrollwheel, this can be used to zoom in/out. By default the mouse moves the cave, but if you press Ctrl-R, then the mouse will move the viewpoint instead (i.e. everything will go in the opposite direction). Apparently this feels more natural to some people. Keyboard Control P and L select Plan and eLevation respectively. Changing between plan to elevation is animated to help you see where you are and how things relate. This animation is automatically disabled on slow machines to avoid user frustration. Comma ', and Slash / tilt up and down respectively. Tilt goes 180 degrees from plan view to a view from directly below (upside down plan). Space toggles automatic rotation about a vertical axis on and off. The speed of rotation for this, and animated transitions between plan and elevation, is controlled by Z and X. Crosses and/or labels can be displayed at survey stations. Ctrl-X toggles crosses and Ctrl-N station names. Ctrl-L toggles the display of survey legs. Delete is useful if you get lost - it resets the scale, position, and rotation speed, so that the cave returns to the centre of the screen. There are also keyboard controls to use instead of the mouse - Shift helps here as it accelerates all movements: Z, X : Faster/Slower Rotation R: Reverse direction of rotation Enter, Space: Start and stop auto-rotation Ctrl-Cursor Left, Ctrl-Cursor Right: Rotate cave one step clockwise/anti -clockwise (also: C, V) Ctrl-Cursor Up , Ctrl-Cursor Down: Higher/Lower Viewpoint (also: ' , /) ] , [: Zoom in/Out U, D: Set view to Up/Down N, S, E, W: Set view to North, South, East, West Delete: Reset to default scale, rotation rate, etc P, L: Plan, Elevation Cursor Left, Cursor Right: Pan survey Left/Right (on screen) Cursor Up, Cursor Down: Pan survey Up/Down (on screen) Ctrl-N: Toggle display of station names Ctrl-X: Toggle display of crosses at stations Ctrl-L: Toggle display of survey legs Ctrl-F: Toggle display of surface legs Ctrl-G: Toggle display of grid Ctrl-B: Toggle display of bounding box O: Toggle display of non-overlapping/all names Ctrl-R: reverse sense of controls Shift: accelerates all movement keys A little experimentation should give a better understanding of how this works. There is an auto-resizing scale bar along the bottom of the screen which varies in length as you zoom in or out. In the lower right corner is a compass pointer showing which way is North, and a clino pointer showing the angle of tilt. And in the upper right is a colour key showing the correspondence between colour and depth (by default - you can also colour by date or by error). Options -p, --print Print the specified file and exit. -s, --survey=SURVEY Only load the sub-survey 'SURVEY'. diffpos Name diffpos -- compare the contents of two .3d files Synopsis diffpos {.3d file} {.3d file} [threshold] Description Diffpos reports stations which are in one file but not the other, and also stations which have moved by more than a specified threshold distance in X, Y, or Z. The threshold distance is given in metres and defaults to 0.01m if not specified. For backward compatibility diffpos will also read the .pos files produced by earlier versions of cavern, by the (now removed) 3dtopos tool, by survexport, or by aven's export feature (requires 1.2.19 or later). extend Name extend -- produce an extended elevation from a .3d file Synopsis extend [--survey=SURVEY] [--specfile=ESPEC_FILE] [--show-breaks] {INPUT_3D_FILE} [OUTPUT_3D_FILE] Description Note The extend program can also work on Compass .plt (as can aven and any other Survex program which reads .3d files). If no specfile is given, extend starts with the highest station marked as an entrance which has at least one underground survey leg attached to it. If there are no such stations, the highest deadend station in the survey (or the highest station if there are no deadends) is used. Extend puts the first station on the left, then folds each leg out individually to the right, breaking loops arbitrarily (usually at junctions). If the output filename is not specified, extend bases the output filename on the input filename, but ending "_extend.3d". For example, extend deep_pit.3d produces an extended elevation called deep_pit_extend.3d. If you pass --show-breaks then a leg flagged as "surface survey" will be added between each point at which a loop has been broken - this can be very useful for visualising the result in aven. This approach suffices for simple caves or sections of cave, but for more complicated situations human intervention is required. More complex sections of cave can be handled with a specfile giving directions to switch the direction of extension between left and right, to explicitly specify the start station, or to break the extension at particular stations or legs. The specfile is in a format similar to cavern's data format: ;This is a comment ; start the elevation at station entrance.a *start entrance.a ;this is a comment after a command ; start extending leftwards from station half-way-down.5 *eleft half-way-down.5 ; change direction of extension at further-down.8 *eswap further-down.8 ; extend right from further-down.junction, but only for ; the leg joining it to very-deep.1, other legs continuing ; as before *eright further-down.junction very-deep.1 ; break the survey at station side-loop.4 *break side-loop.4 ; break survey at station side-loop.junction but only ; for leg going to complex-loop.2 *break side-loop.junction complex-loop.2 This approach requires some trial and error, but gives useful results for many caves. The most complex systems would benefit from an interactive interface to select and view the breaks and switches of direction. sorterr Name sorterr -- re-sort .err file by various criteria Synopsis sorterr [options] {.err file} [how many] Description Sorterr re-sorts a .err file by the specified criterion (or by the error ratio by default). Output is sent to stdout, or if --replace is specified the input file is replaced with the sorted version. By default all entries in the file are included - if a second parameter is given then only the top entries after sorting are returned. survexport Name survexport -- convert a processed survey data file (such as a Survex .3d file) to another format. Synopsis survexport [options] {.3d file} [output file] Options -s, --survey=SURVEY only load the sub-survey with this prefix --scale=SCALE scale (50, 0.02, 1:50 and 2:100 all mean 1:50) --bearing=BEARING bearing (90, 90d, 100g all mean 90°) --tilt=TILT tilt (45, 45d, 50g, 100% all mean 45°) --plan plan view (equivalent to --tilt=-90) --elevation elevation view (equivalent to --tilt=0) --legs underground survey legs --surface-legs surface survey legs --splays splay legs --crosses station markers --station-names station labels --entrances entrances --fixes fixed points --exports exported stations --cross-sections cross-sections --walls walls --passages passages --origin-in-centre origin in centre --full-coordinates full coordinates --clamp-to-ground clamp to ground --defaults include items exported by default -g, --grid[=GRID] generate grid (default 100m) -t, --text-height=TEXT-HEIGHT station labels text height (default 0.6) -m, --marker-size=MARKER-SIZE station marker size (default 0.8) --csv produce CSV output --dxf produce DXF output --eps produce EPS output --gpx produce GPX output --hpgl produce HPGL output --json produce JSON output --kml produce KML output --plt produce Compass PLT output for Carto --skencil produce Skencil output --pos produce Survex POS output --svg produce SVG output --help display short help and exit --version output version information and exit Description The input formats supports are all those supported by Survex's "img" library - Survex .3d, Survex .pos, Compass PLT and CMAP XYZ files. Currently the output formats supported are CSV, DXF, EPS (Encapsulated PostScript), GPX, HPGL for plotters, JSON, KML, Survex POS files, Skencil, and SVG. Also survexport can produce Compass .plt files, which are primarily intended for importing into Carto, but can also be used with Compass itself. POS Format The POS format is a Survex-specific format containing a list of stations with coordinates (ordered x,y,z [East, North, Up]) and complete names. The stations are sorted by name such that numbers occur in the correct order (so ``2'' before ``10''). Numbers with a prefix and/or suffix are sorted by the number part first, so you'd get: 040.sv8 040.sv8a 040.sv8b 040.sv8c 040.sv9 040.sv10 040.sv11 40_entrance_tag 40b_entrance_tag DXF Export DXF export separates Splays, Surface legs, Surface points, survey legs, and survey stations onto separate layers. Splays will export dotted, and surface legs dashed. This is not configurable. __________________________________________________________ 4. Survex data files Survey data is entered in the form of text files. You can use any text editor you like for this, so long as it has the capability of writing a plain ASCII text file. The data format is very flexible; unlike some other cave surveying software, Survex does not require survey legs to be rearranged to suit the computer, and the ordering of instrument readings on each line is fully specifiable. So you can enter your data much as it appears on the survey notes, which is important in reducing the opportunities for transcription errors. Also all the special characters are user-definable - for example, the separators can be spaces and tabs, or commas (e.g. when exporting from a spreadsheet), etc; the decimal point can be a slash (for clarity), a comma (as used in continental Europe), or anything else you care to choose. This flexibility means that it should be possible to read in data from almost any sort of survey data file without much work. Survex places no restrictions on you in terms of the ordering of survey legs. You can enter or process data in any order and Survex will read it all in before determining how it is connected. You can also use the hierarchical naming so that you do not need to worry about using the same station name twice. The usual arrangement is to have one file which lists all the others that are included (e.g., 161.svx). Then cavern 161 will process all your data. To just process a section use the filename for that section, e.g. cavern dtime will process the dreamtime file/section of Kaninchenhöhle. To help you out, if all legs in a survey are connected to one another but the survey has no fixed points, cavern will 'invent' a fixed point and print a warning message to this effect. It is up to you what data you put in which files. You can have one file per trip, or per area of the cave, or just one file for the whole cave if you like. On a large survey project it makes sense to group related surveys in the same file or directory. __________________________________________________________ 4.1. Readings Blank lines (i.e. lines consisting solely of BLANK characters) are ignored. The last line in the file need not be terminated by an end of line character. All fields on a line must be separated by at least one BLANK character. An OMIT character (default '-') indicates that a field is unused. If the field is not optional, then an error is given. __________________________________________________________ 4.2. Survey Station Names Survex has a powerful system for naming stations. It uses a hierarchy of survey names, similar to the nested folders your computer stores files in. So point 6 in the entrance survey of Kaninchenhöhle (cave number 161) is referred to as: 161.entrance.6 This seems a natural way to refer to station names. It also means that it is very easy to include more levels, for example if you want to plot all the caves in the area you just list them all in another file, specifying a new prefix. So to group 3 nearby caves on the Loser Plateau you would use a file like this: *begin Loser *include 161 *include 2YrGest *include 145 *end Loser The entrance series point mentioned above would now be referred to as: Loser.161.entrance.6 You do not have to use this system at all, and can just give all stations unique identifiers if you like: 1, 2, 3, 4, 5, ... 1381, 1382 or AA06, AA07, P34, ZZ6, etc. Station and survey names may contain any alphanumeric characters and additionally any characters in NAMES (default `_' and `-'). Alphabetic characters may be forced to upper or lower case by using the *case command. Station names may be any length - if you want to only treat the first few characters as significant you can get cavern to truncate the names using the *truncate command. __________________________________________________________ 4.2.1. Anonymous Stations Survex supports the concept of anonymous survey stations. That is survey stations without a name. Each time an anonymous station name is used it represents a different point. Currently three types of anonymous station are supported, referred to by one, two or three separator characters - with the default separator of '.', that means '.', '..', and '...' are anonymous stations. Their meanings are: Single separator ('.' by default) An anonymous non-wall point at the end of an implicit splay. Double separator ('..' by default) An anonymous wall point at the end of an implicit splay. Triple separator ('...' by default) an anonymous point with no implicit flags on the leg (intended for cases like a disto leg along a continuing passage). You can map '-' to '..' (for compatibility with data from pocket topo) using the command: *alias station - .. Support for anonymous stations and for '*alias station - ..' was added in Survex 1.2.7. __________________________________________________________ 4.3. Numeric fields [|] [ [ ] ] or [|] i.e. optional PLUS or MINUS sign in front, with optional DECIMAL character (default '.'), which may be embedded, leading or trailing. No spaces are allowed between the various elements. All of these are valid examples: +47, 23, -22, +4.5, 1.3, -0.7, +.15, .4, -.05 __________________________________________________________ 4.4. Accuracy Accuracy assessments may be provided or defaulted for any survey leg. These determine the distribution of loop closure errors over the legs in the loop. See *SD for more information. __________________________________________________________ 4.5. Cavern Commands Commands in .svx files are introduced by an asterisk (by default - this can be changed using the set command). The commands are documented in a common format: * Command Name * Syntax * Example * Validity * Description * Caveats * See Also __________________________________________________________ 4.5.1. ALIAS Syntax *alias station [] Example *begin parsons_nose *alias station - .. 1 2 12.21 073 -12 2 - 4.33 011 +02 2 - 1.64 180 +03 2 3 6.77 098 -04 *end parsons_nose Description *alias allows you to map a station name which appears in the survey data to a different name internally. At present, you can only create an alias of '-' to '..', which is intended to support the pocket topo style notation of '-' being a splay to an anonymous point on the cave wall. And you can unalias '-' with '*alias station -'. Aliases are scoped by *begin/*end blocks - when a *end is reached, the aliases in force at the corresponding begin are restored. *alias was added in Survex 1.2.7. See Also *begin, *end __________________________________________________________ 4.5.2. BEGIN Syntax *begin [] Example *begin littlebit 1 2 10.23 106 -02 2 3 1.56 092 +10 *end littlebit ; length of leg across shaft estimated *begin *sd tape 2 metres 9 10 6. 031 -07 *end Description *begin stores the current values of the current settings such as instrument calibration, data format, and so on. These stored values are restored after the corresponding *end. If a survey name is given, this is used inside the *begin/*end block, and the corresponding *end should have the same survey name. *begin/*end blocks may be nested to indefinite depth. See Also *end, *prefix __________________________________________________________ 4.5.3. CALIBRATE Syntax *calibrate [] *calibrate [] *calibrate default Example *calibrate tape +0.3 Description *calibrate is used to specify instrument calibrations, via a zero error and an optional scale factor (which defaults to 1.0 if not specified). Without an explicit calibration the zero error is 0.0 and the scale factor is 1.0. is one or more of: Quantity Aliases LENGTH TAPE BEARING COMPASS GRADIENT CLINO BACKLENGTH BACKTAPE BACKBEARING BACKCOMPASS BACKGRADIENT BACKCLINO COUNT COUNTER LEFT RIGHT UP CEILING DOWN FLOOR DEPTH DECLINATION EASTING DX NORTHING DY ALTITUDE DZ DECLINATION The specified calibration is applied to each quantity in the list, which is handy if you use the same instrument to measure several things, for example: *calibrate left right up down +0.1 You need to be careful about the sign of the ZeroError. Survex follows the convention used with scientific instruments - the ZeroError is what the instrument reads when measuring a reading which should be zero. So for example, if your tape measure has the end missing, and you are using the 30cm mark to take all measurements from, then a zero distance would be measured as 30cm and you would correct this with: *CALIBRATE tape +0.3 If you tape was too long, starting at -20cm (it does happen!) then you can correct it with: *CALIBRATE tape -0.2 Note: ZeroError is irrelevant for Topofil counters and depth gauges since pairs of readings are subtracted. In the first form in the synopsis above, the zero error is measured by the instrument itself (e.g. reading off the number where a truncated tape now ends) and any scale factor specified applies to it, like so: Value = ( Reading - ZeroError ) * Scale (Scale defaults to 1.0) In the second form above (supported since Survex 1.2.21), the zero error has been measured externally (e.g. measuring how much too long your tape is with a ruler) - the units of the zero error are explicitly specified and any scale factor isn't applied to it: Value = ( Reading * Scale ) - ZeroError (Scale defaults to 1.0) If the scale factor is 1.0, then the two forms are equivalent, though they still allow you to differentiate between how the zero error has been determined. With older Survex versions, you would specify the magnetic declination (difference between True North and Magnetic North) by using *calibrate declination to set an explicit value (with no scale factor allowed). Since Survex 1.2.22, it's recommended to instead use the new *declination command instead - see the documentation of that command for more details. See Also *declination, *units __________________________________________________________ 4.5.4. CASE Syntax *case preserve|toupper|tolower Example *begin bobsbit ; Bob insists on using case sensitive station names *case preserve 1 2 10.23 106 -02 2 2a 1.56 092 +10 2 2A 3.12 034 +02 2 3 8.64 239 -01 *end bobsbit Description *case determines how the case of letters in survey names is handled. By default all names are forced to lower case (which gives a case insensitive match, but you can tell cavern to force to upper case, or leave the case as is (in which case '2a' and '2A' will be regarded as different). See Also *truncate __________________________________________________________ 4.5.5. COPYRIGHT Syntax *copyright Example *begin littlebit *copyright 1983 CUCC 1 2 10.23 106 -02 2 3 1.56 092 +10 *end littlebit Validity valid at the start of a *begin/*end block. Description *copyright allows the copyright information to be stored in a way that can be automatically collated. See Also *begin __________________________________________________________ 4.5.6. CS Syntax *cs [out] Example *cs UTM60S *fix beehive 313800 5427953 20 ; Output in the coordinate system used in the Totes Gebirge in Austria *cs out custom "+proj=tmerc +lat_0=0 +lon_0=13d20 +k=1 +x_0=0 +y_0=-5200 000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.42 32" Description *cs allows the coordinate systems used for fixed points and for processed survey data to be specified. The "input" coordinate system is set with *cs and you can change it between fixed points if you have some fixed points in different coordinate systems to others. The "output" coordinate system is set with *cs out and is what the survey data is processed in and the coordinate system used for resultant .3d file. The output coordinate system must be in metres with axis order (East, North, Up), so for example *cs out long-lat isn't valid. *cs was added in Survex 1.2.14, but handling of fixed points specified with latitude and longitude didn't work until 1.2.21. Also *fix with standard deviations specified also didn't work until 1.2.21. The currently supported coordinate systems are: CUSTOM followed by a PROJ string (like in the example above). EPSG: followed by a positive integer code. EPSG codes cover most coordinate systems in use, and PROJ supports many of these. The website https://epsg.io/ is a useful resource for finding the EPSG code you want. For example, EPSG:4167 is NZGD2000. Supported since Survex 1.2.15. ESRI: followed by a positive integer code. ESRI codes are used by ArcGIS to specify coordinate systems (in a similar way to EPSG codes), and PROJ supports many of them. Supported since Survex 1.2.15. EUR79Z30 for UTM zone 30, EUR79 datum. Supported since Survex 1.2.15. IJTSK for the modified version of the Czechoslovak S-JTSK system where the axes point East and North. Supported since Survex 1.2.15. IJTSK03 for a variant of IJTSK. Supported since Survex 1.2.15. JTSK for the Czechoslovak S-JTSK system. Its axes point West and South, so it's not supported as an output coordinate system. Supported since Survex 1.2.16. JTSK03 for a variant of JTSK. Supported since Survex 1.2.16. LONG-LAT for longitude/latitude. The WGS84 datum is assumed. NB *fix expects the coordinates in the order x,y,z which means longitude (i.e. E/W), then latitude (i.e. N/S), then altitude. Supported since Survex 1.2.15. OSGB: followed by a two letter code for the UK Ordnance Survey National Grid. The first letter should be 'H', 'N', 'O', 'S' or 'T'; the second any letter except 'I'. For example, OSGB:SD. Supported since Survex 1.2.15. S-MERC for the "Web Mercator" spherical mercator projection, used by online map sites like OpenStreetMap, Google maps, Bing maps, etc. Supported since Survex 1.2.15. UTM followed by a zone number (1-60), optionally followed by "N" or "S" (default is North). The WGS84 datum is assumed. By default, Survex works in an unspecified coordinate system (and this was the only option before *cs was added). However, it's useful for the coordinate system which the processed survey data is in to be specified if you want to use the processed data in ways which required knowing the coordinate system (such as exporting a list of entrances for use in a GPS). You can now do this by using "*cs out". It is also useful to be able to take coordinates for fixed points in whatever coordinate system you receive them in and put them directly into Survex, rather than having to convert with an external tool. For example, you may have your GPS set to show coordinates in UTM with the WGS84 datum, even though you want the processed data to be in some local coordinate system. And someone else may provide GPS coordinates in yet another coordinate system. You just need to set the appropriate coordinate system with "*cs" before each group of "*fix" commands in a particular coordinate system. If you're going to make use of "*cs", then the coordinate system must be specified for everything, so a coordinate system must be in effect for all "*fix" commands, and you must set the output coordinate system before any points are fixed. Also, if "*cs" is in use, then you can't omit the coordinates in a "*fix" command, and a fixed point won't be invented if none exists. If you use "*cs out" more than once, the second and subsequent commands are silently ignored - this makes it possible to combine two datasets with different "*cs out" settings without having to modify either of them. Something to be aware of with "*cs" is that altitudes are currently assumed to be "height above the ellipsoid", whereas GPS units typically give you "height above sea level", or more accurately "height above a particular geoid". This is something we're looking at how best to address, but you shouldn't need to worry about it if your fixed points are in the same coordinate system as your output, or if they all use the same ellipsoid. For a more detailed discussion of this, please see: http://expo.survex.com/handbook/survey/coord.htm See Also *fix __________________________________________________________ 4.5.7. DATA Syntax *data absolute 174.77670004,-41.27839998,30.00 174.77788868,-41.27842294,21.28 174.77788868,-41.27842294,21.28e 174.77670004,-41.27839998,30.00bh survex-1.4.4/tests/3sdfixbug.svx0000644000175000017500000000017514335226135013606 00000000000000; pos=yes warn=0 ; bug fixed in 1.0.2 - if no covariances, cov(x,y) was infinity *fix 1 0 0 0 1 1 1 *fix 2 1 1 0 1 2 1 000 0 survex-1.4.4/tests/end_no_begin_nest.svx0000644000175000017500000000006414335226135015344 00000000000000; pos=fail error=2 *begin *include end_no_begin.svx survex-1.4.4/tests/cmd_declination.out0000644000175000017500000000117114141575516015015 00000000000000 Removing trailing traverses... Concatenating traverses... Simplifying network... Calculating network... Calculating traverses... Calculating trailing traverses... Calculating statistics... Survey contains 7 survey stations, joined by 6 legs. There are 0 loops. Total length of survey legs = 30.00m ( 30.00m adjusted) Total plan length of survey legs = 30.00m Total vertical length of survey legs = 0.00m Vertical range = 0.00m (from c.2 at 0.00m to c.2 at 0.00m) North-South range = 10.00m (from c.1 at 10.00m to c.2 at 0.00m) East-West range = 10.00m (from c.2 at 10.00m to a.1 at 0.00m) 2 1-nodes. 5 2-nodes. survex-1.4.4/tests/exporterr4.svx0000644000175000017500000000011214335226135014015 00000000000000; pos=fail warn=0 error=1 *begin fred 1 2 1.23 045 -6 *export 2 *end fred survex-1.4.4/tests/cmd_solve.pos0000644000175000017500000000014411701006570013631 00000000000000( Easting, Northing, Altitude ) ( 0.00, 0.00, 0.00 ) 1 ( 0.00, 1.00, 0.00 ) 2 survex-1.4.4/tests/quadrant_bearing.svx0000644000175000017500000000053314335226135015214 00000000000000; pos=yes warn=0 *units compass quadrants *data normal from to tape compass clino a b 10.0 N 0 b c 30.0 S51W 0 c d 20.0 N12E 0 d e 40.0 E 0 e f 10.0 S17E 0 f g 13.0 N73W 0 g h 05.0 S8E 0 h i 12.0 W 0 i j 23.0 S 0 a 1 10.0 n 0 a 2 10.0 s 0 a 3 10.0 e 0 a 4 10.0 w 0 a 5 10.0 n45e 0 a 6 10.0 s45w 0 a 7 10.0 N45w 0 a 8 10.0 s45E 0 a pit 23.0 - down survex-1.4.4/tests/cmd_prefix_bad.out0000644000175000017500000000152014141575516014625 00000000000000./cmd_prefix_bad.svx:3:2: warning: *prefix is deprecated - use *begin and *end instead *prefix ^~~~~~ ./cmd_prefix_bad.svx:3:8: error: Expecting survey name *prefix ^ Removing trailing traverses... Concatenating traverses... Simplifying network... Calculating network... Calculating traverses... Calculating trailing traverses... Calculating statistics... Survey contains 2 survey stations, joined by 1 leg. There are 0 loops. Total length of survey legs = 1.00m ( 1.00m adjusted) Total plan length of survey legs = 1.00m Total vertical length of survey legs = 0.00m Vertical range = 0.00m (from 2 at 0.00m to 2 at 0.00m) North-South range = 1.00m (from 2 at 1.00m to 1 at 0.00m) East-West range = 0.00m (from 2 at 0.00m to 2 at 0.00m) 2 1-nodes. There were 1 warning(s) and 1 error(s) - no output files produced. survex-1.4.4/tests/cslonglat.svx0000644000175000017500000000052514335226135013675 00000000000000; pos=no warn=0 ; Initial *cs support failed to convert latitude and longitude to radians, ; which PROJ requires, so coordinate systems using them didn't work until ; Survex 1.2.21. This is a regression test for that bug. *cs out UTM33 *cs LONG-LAT *fix 1 reference 13.5 47.5 1623 *cs out UTM60S *fix 2 reference +70.738907 +39.993570 1100 survex-1.4.4/tests/badinc2.svx0000644000175000017500000000012114335226135013201 00000000000000; pos=fail ; include of a file which includes a nonexistent file *include badinc survex-1.4.4/tests/cmd_alias.out0000644000175000017500000000126314205553447013617 00000000000000 Removing trailing traverses... Concatenating traverses... Simplifying network... Calculating network... Calculating traverses... Calculating trailing traverses... Calculating statistics... Survey contains 4 survey stations, joined by 3 legs. There are 0 loops. Total length of survey legs = 2.00m ( 2.00m adjusted) Total plan length of survey legs = 2.00m Total vertical length of survey legs = 0.00m Vertical range = 0.00m (from 2 at 0.00m to 2 at 0.00m) North-South range = 1.00m (from - at 0.00m to 2 at -1.00m) East-West range = 2.00m (from 2 at 1.00m to anonymous station at -1.00m) East-West range = 1.00m (from 2 at 1.00m to 1 at 0.00m) 2 1-nodes. 2 2-nodes. survex-1.4.4/tests/cmd_solve_nothing.svx0000644000175000017500000000021714335226135015406 00000000000000; pos=no warn=0 ; Regression test *fix A.1 0 0 0 *begin A 1 2 1.23 123 12 *end A *solve *solve *begin B 1 2 2.34 234 23 *end B *equate A.1 B.1 survex-1.4.4/tests/exporterr5.svx0000644000175000017500000000013214335226135014020 00000000000000; pos=fail warn=0 error=1 *begin example *export 1 *export 1 1 2 1.24 045 -6 *end example survex-1.4.4/tests/anonstn.pos0000644000175000017500000000020414205553447013347 00000000000000( Easting, Northing, Altitude ) ( 0.00, 0.00, -10.00 ) ( 0.00, 2.00, 0.00 ) ( 0.00, 0.00, 0.00 ) 1 survex-1.4.4/tests/gpxexport.svx0000644000175000017500000000012414335226135013742 00000000000000; pos=gpx warn=0 *cs long-lat *cs out UTM60S *fix bh reference 174.7767 -41.2784 30 survex-1.4.4/tests/singlefixerr.pos0000644000175000017500000000010211701006570014351 00000000000000( Easting, Northing, Altitude ) ( 0.00, 0.00, 0.00 ) 1 survex-1.4.4/tests/leandroclino.svx0000644000175000017500000000014114335226135014352 00000000000000; pos=yes warn=0 *fix 1 0 0 0 *data normal station newline tape compass clino 1 2.00 000 +30 2 survex-1.4.4/tests/inferunknown.svx0000644000175000017500000000010214335226135014421 00000000000000; pos=fail warn=0 error=1 *fix 1 reference 0 0 0 *infer qwerty on survex-1.4.4/tests/v2.3d0000644000175000017500000000103011701006570011705 00000000000000Survex 3D Image File v2 3dtopostst Sat,2001.09.15 17:14:35 BST €ýþÿÿÅÝÿÿÿ€ÛþÿÿÓÃÿÿÿ€¸þÿÿG™ÿÿÿÛþÿÿÓÃÿÿÿ€ÆþÿÿDµÿÿÿýþÿÿÅÝÿÿÿ€úþÿÿýÖÿÿÿýþÿÿÅÝÿÿÿ€ýþÿÿ)Ýÿÿÿ€ýþÿÿÝÿÿÿ€ýþÿÿñÝÿÿÿýþÿÿÅÝÿÿÿ€ÿÿÿ(ÝÿÿÿýþÿÿÅÝÿÿÿ€ýþÿÿ• Bsurvey.2_9a ýþÿÿ• Bsurvey.2_a ÿÿÿ(ÝÿÿÿBsurvey.2_10 ýþÿÿñÝÿÿÿBsurvey.2_9 ýþÿÿÝÿÿÿBsurvey.2 ýþÿÿ)ÝÿÿÿBsurvey.001 úþÿÿýÖÿÿÿBsurvey.0a ÆþÿÿDµÿÿÿBsurvey.00 ¸þÿÿG™ÿÿÿBsurvey.0 ÛþÿÿÓÃÿÿÿJsurvey.1 ýþÿÿÅÝÿÿÿB2 ýþÿÿÅÝÿÿÿR1 survex-1.4.4/tests/csbadsdfix.out0000644000175000017500000000470314142356022014005 00000000000000./csbadsdfix.svx:2: error: Station "1" fixed before CS command first used ./csbadsdfix.svx:3:5: error: Unknown coordinate system *cs EPSG:-1 ^~~~~~~ ./csbadsdfix.svx:4:5: error: Unknown coordinate system *cs ERSI:1234 ^~~~~~~~~ ./csbadsdfix.svx:5:5: error: Unknown coordinate system *cs EUR79Z31 ^~~~~~~~ ./csbadsdfix.svx:6:11: error: End of line not blank *cs IJTSK 03 ^ ./csbadsdfix.svx:7:5: error: Unknown coordinate system *cs IJTSK04 ^~~~~~~ ./csbadsdfix.svx:8:5: error: Unknown coordinate system *cs IJTSK99 ^~~~~~~ ./csbadsdfix.svx:9:5: error: Unknown coordinate system *cs IJTSK3 ^~~~~~ ./csbadsdfix.svx:10:5: error: Unknown coordinate system *cs IJTSK032 ^~~~~~~~ ./csbadsdfix.svx:11:5: error: Unknown coordinate system *cs IJTSK03a ^~~~~~~~ ./csbadsdfix.svx:12:5: error: Unknown coordinate system *cs lat-lat ^~~~~~~ ./csbadsdfix.svx:13:5: error: Unknown coordinate system *cs Long-LONG ^~~~~~~~~ ./csbadsdfix.svx:14:5: error: Unknown coordinate system *cs OSGB:ZZ ^~~~~~~ ./csbadsdfix.svx:15:5: error: Unknown coordinate system *cs OSGB:HI ^~~~~~~ ./csbadsdfix.svx:16:5: error: Unknown coordinate system *cs S-LONG ^~~~~~ ./csbadsdfix.svx:17:5: error: Unknown coordinate system *cs UTM0 ^~~~ ./csbadsdfix.svx:18:5: error: Unknown coordinate system *cs UTM61N ^~~~~~ ./csbadsdfix.svx:19:5: error: Unknown coordinate system *cs UTM61S ^~~~~~ ./csbadsdfix.svx:20:12: error: Invalid coordinate system: Invalid value for an argument *cs custom "+proj=ection" ^~~~~~~~~~~~~~ ./csbadsdfix.svx:21:9: error: Unknown coordinate system *cs out lat-long ^~~~~~~~ ./csbadsdfix.svx:22:9: error: Coordinate system unsuitable for output *cs out long-lat ^~~~~~~~ ./csbadsdfix.svx:23:9: error: Coordinate system unsuitable for output *cs out jtsk ^~~~ ./csbadsdfix.svx:24:9: error: Coordinate system unsuitable for output *cs out jtsk03 ^~~~~~ Removing trailing traverses... Concatenating traverses... Simplifying network... Calculating network... Calculating traverses... Calculating trailing traverses... Calculating statistics... Survey contains 1 survey station, joined by 0 legs. There are 0 loops. Total length of survey legs = 0.00m ( 0.00m adjusted) Total plan length of survey legs = 0.00m Total vertical length of survey legs = 0.00m 1 0-node. There were 0 warning(s) and 23 error(s) - no output files produced. survex-1.4.4/tests/lengthunits.pos0000644000175000017500000000031213130011613014207 00000000000000( Easting, Northing, Altitude ) ( 0.00, 0.00, 0.00 ) 1 ( 0.00, 10.00, 0.00 ) 2 ( 0.00, 13.05, 0.00 ) 3 ( 0.00, 23.05, 0.00 ) 4 ( 0.00, 32.19, 0.00 ) 5 survex-1.4.4/tests/bug4.svx0000644000175000017500000000051214335226135012544 00000000000000; pos=no warn=0 ; the omittable data for topofil and diving styles were reversed in 0.95 *fix 1 123 456 789 *data topofil from to fromcount tocount compass 1 2 12345 67890 090 *data diving from to tape compass fromdepth todepth 2 3 2.00 090 0.0 1.2 *data diving from to tape compass fromdepth todepth clino 3 4 2.00 090 0.0 1.2 - survex-1.4.4/tests/csfeet.pos0000644000175000017500000000021414141575516013141 00000000000000( Easting, Northing, Altitude ) (36000.00, 83000.00, 1600.00 ) 1 (36000.00, 83000.00, 1600.20 ) 1ft (36000.00, 83000.00, 1596.00 ) 1usft survex-1.4.4/tests/delatend.out0000644000175000017500000000001312266626516013456 00000000000000Deleted: 1 survex-1.4.4/tests/cmd_alias.svx0000644000175000017500000000030314335226135013615 00000000000000; pos=yes *fix 1 0 0 0 ; This '-' is an actual station 1 - 1.00 090 0 *alias station - .. ; This '-' is an anon station 1 - 1.00 270 0 *alias station - ; An back to the actual one - 2 1.00 180 0 survex-1.4.4/tests/3dcorner.svx0000644000175000017500000000122614335226135013425 00000000000000; pos=yes warn=0 *begin reallylongprefixtogetusstarted *begin 1 *begin 2 *begin 3 *begin 4 *begin 5 *begin 6 *begin 7 *begin 8 *begin 9 *begin 10 *begin 11 *begin 12 *begin 13 *begin fourteen *fix 1234567 reference 0 0 0 *end fourteen *end 13 *begin 14 *begin xxxxxxxx *fix 12345678 reference 0 0 0 *end xxxxxxxx *end 14 *begin 15 *begin yxxxxxxx *fix 123456 reference 0 0 0 *end yxxxxxxx *end 15 *begin 16 *begin z *fix 1234567812345678234567812345678 reference 0 0 0 *end z *end 16 *end 12 *end 11 *end 10 *end 9 *end 8 *end 7 *end 6 *end 5 *end 4 *end 3 *end 2 *fix fred reference 0 0 0 *end 1 *end reallylongprefixtogetusstarted *fix Z reference 0 0 0 survex-1.4.4/tests/diving.svx0000644000175000017500000000115714335226135013171 00000000000000; pos=yes warn=0 *fix 1 0 0 0 *data diving from to fromdepth todepth tape compass 1 2 0.0 0.0 1.00 000 2 3 0.0 0.0 1.00 090 *data diving to from fromdepth todepth tape compass 4 3 1.0 1.0 1.00 180 5 4 1.0 1.0 1.00 270 *data diving to from depthchange tape compass 6 5 0.0 1.00 000 7 6 0.0 1.00 090 *data diving from fromcount fromdepth compass to tocount todepth ; 3:4:5 triangle... 7 123 5.0 270 8 128 2.0 *data diving station count depth newline compass ; 5:12:13 triangle... 8 128 2.0 000 9 141 -3.0 ; check diving leg with clino *data diving from to fromdepth todepth tape compass clino 9 10 0 -4.0 8.0 090 -30 survex-1.4.4/tests/multinormalbad.svx0000644000175000017500000000032714335226135014721 00000000000000; pos=fail warn=0 error=1 *fix 1 0 0 0 *data normal station newline tape compass clino 1 1.00 000 0 2 1.00 090 0 3 1.00 000 -45 *data normal station newline tape compass clino 3 1.00 180 0 4 1.00 270 0 5 survex-1.4.4/tests/normignall.pos0000644000175000017500000000031211701006570014015 00000000000000( Easting, Northing, Altitude ) ( 0.00, 0.00, 0.00 ) 1 ( 0.00, 1.00, 0.00 ) 2 ( 1.00, 1.00, 0.00 ) 3 ( 1.00, 0.00, 0.00 ) 4 ( 0.00, -0.00, 0.00 ) 5 survex-1.4.4/compile0000755000175000017500000001635014367066627011401 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: survex-1.4.4/ChangeLog0000644000175000017500000101073414141575516011566 00000000000000This ChangeLog file is no longer maintained - see the git repo history for more recent changes: https://survex.com/cvs.html Thu Sep 24 22:10:49 GMT 2015 Olly Betts * doc/aven.sgml: Document Ctrl+cursor keys for rotating and tilting. Thu Sep 24 21:01:01 GMT 2015 Olly Betts * src/cavernlog.cc: On wxMSW, also quote for cmd.exe so that paths with spaces in work reliably. Reported by Marco Cotto. Thu Sep 24 21:00:03 GMT 2015 Olly Betts * src/aventreectrl.cc,src/mainfrm.h: If we're animating, don't try to update station info based on mouse movement over the survey tree. Wed Sep 23 05:16:53 GMT 2015 Olly Betts * survex.iss.in: On Vista or later, the installer requires admin privileges, so don't try to set up the registry conditional on whether we are or not. Wed Sep 23 00:45:38 GMT 2015 Olly Betts * src/cavernlog.cc: Fix compiler warning. Wed Sep 23 00:31:40 GMT 2015 Olly Betts * NEWS,configure.ac,doc/manual.sgml: Update for 1.2.24. Wed Sep 23 00:23:19 GMT 2015 Olly Betts * src/aven.cc: Add workaround for therion's assumptions about the "Process" file association. Tue Sep 22 20:59:41 GMT 2015 Olly Betts * lib/sk.po: Fix clashing menu accelerators. Tue Sep 22 20:52:33 GMT 2015 Olly Betts * doc/manual.sgml: Update stats for CUCC dataset. Tue Sep 22 20:42:02 GMT 2015 Olly Betts * src/mainfrm.cc: Add FIXME for wording of "Full Screen Mode" menu item on OS X. Mon Sep 21 07:25:37 GMT 2015 Olly Betts * src/cavernlog.cc,src/cavernlog.h: If wx was built with thread support, aven now runs cavern from a separate thread, which works better under wxMSW (where we can't use select), and seems a bit smoother on Linux. Sun Sep 20 06:50:53 GMT 2015 Olly Betts * doc/manual.sgml: Document anonymous stations in the manual, based on the text from NEWS. Reported by Wookey. Sat Sep 19 03:54:39 GMT 2015 Olly Betts * src/mainfrm.cc: Use utf8_str() instead of fn_str() for the filename to pass to the img library. Sat Sep 19 03:08:28 GMT 2015 Olly Betts * src/mainfrm.cc: Hide the OpenGL window when we show the log window, to fix issues with the OpenGL window still showing up under wxMSW. Fri Sep 18 09:22:11 GMT 2015 Olly Betts * src/aventreectrl.cc,src/aventreectrl.h: Back out accidentally committed debugging code which sends output to stdout from the tree control. Thu Sep 17 21:50:35 GMT 2015 Olly Betts * lib/id.po: Update Indonesian translation. Tue Sep 15 20:57:58 GMT 2015 Olly Betts * configure.ac: Look for wx-config-3.0, which Fedora's wx3 packages have. Reported by James Begley. Tue Sep 15 07:26:53 GMT 2015 Olly Betts * src/cavernlog.cc: Fix the cavern log under WXMSW. Reported by Brian Clipstone. Tue Sep 15 06:57:00 GMT 2015 Olly Betts * lib/sk.po: Translate "Help". Wed Sep 09 07:16:51 GMT 2015 Olly Betts * src/mainfrm.cc: Fix handling of encoding of filename when there's no corresponding locale on the system. Wed Sep 09 07:08:04 GMT 2015 Olly Betts * buildmacosx.sh: Fix locations proj 'epsg' and 'esri' files get installed to (script version used to build 1.2.23). Sun Sep 06 04:25:13 GMT 2015 Olly Betts * src/cavernlog.cc: Fix compiler warnings. Sun Sep 06 03:50:08 GMT 2015 Olly Betts * NEWS,doc/HACKING.htm: Now using InnoSetup 5.5.6 rather than 5.5.3. Sun Sep 06 03:23:47 GMT 2015 Olly Betts * doc/manual.sgml: Improve wording. Sun Sep 06 03:23:30 GMT 2015 Olly Betts * NEWS,configure.ac,doc/manual.sgml: Update for 1.2.23. Sun Sep 06 03:18:12 GMT 2015 Olly Betts * lib/fr.po: Fill in missing translations. Sun Sep 06 00:03:38 GMT 2015 Olly Betts * buildmacosx.sh: Building libav with --disable-decoders --disable-demuxers causes a link failure when linking aven, so drop those options for now. Tue Sep 01 08:49:59 GMT 2015 Olly Betts * Makefile.am,src/Makefile.am,src/aven.cc,src/message.c: Fix up the handling of bundled epsg and esri files to work. Tue Sep 01 08:32:34 GMT 2015 Olly Betts * tests/cmd_export_bad.out,tests/cmd_export_bad.svx: Add more new files missed from earlier commit. Tue Sep 01 08:28:41 GMT 2015 Olly Betts * tests/cmd_equate_bad.out,tests/cmd_equate_bad.svx: Add new files missed from earlier commit. Sun Aug 30 01:32:13 GMT 2015 Olly Betts * src/commands.c: Fix potential crash in *ref. Sat Aug 29 05:41:47 GMT 2015 Olly Betts * NEWS: Update. Sat Aug 29 04:09:43 GMT 2015 Olly Betts * src/commands.c,tests/cmd_dummy.svx: Check syntax on *ref. Sat Aug 29 00:53:16 GMT 2015 Olly Betts * doc/manual.sgml,src/commands.c,tests/cmd_dummy.svx, tests/doubleinc.out: Add *ref command to allow specifying an external reference. Fri Aug 28 23:15:13 GMT 2015 Olly Betts * Makefile.am,buildmacosx.sh,src/,survex.iss.in: Bundle proj's EPSG and ESRI code lists in the installers for MS Windows and OS X so that things like "*cs EPSG:29903" work. Reported by Graham Mullan. Fri Aug 28 21:47:15 GMT 2015 Olly Betts * src/gfxcore.cc: Fix the orientation of the starting end of tubes. Fri Aug 28 21:21:28 GMT 2015 Olly Betts * lib/po-to-msg.pl: Only check C format strings in messages with the c-format flag. Fri Aug 28 21:11:24 GMT 2015 Olly Betts * NEWS: Update. Fri Aug 28 21:03:26 GMT 2015 Olly Betts * src/cavernlog.cc: Show "busy" mouse cursor while processing survey data. Fri Aug 28 19:09:44 GMT 2015 Olly Betts * src/cavernlog.cc,src/cavernlog.h,src/mainfrm.cc: Use idle events rather than wxYield to give much smoother update of the cavern log window, especially on slower machines. Also fixes an assertion if you try to start processing a survex file while one is already being processed. Fri Aug 28 18:10:00 GMT 2015 Olly Betts * doc/cavern.sgml: Fix broken SGML from previous commit. Fri Aug 28 05:53:00 GMT 2015 Olly Betts * doc/cavern.sgml,doc/manual.sgml,lib/,src/: Drop support for showing percentage progress in cavern. It's confusing in a multiple-file dataset as it shows progress in the current file so jumps around. It also slows down processing, and on a slow machine you'd don't want that, while on a fast machine processing isn't slow enough for the progress display to be useful. Fri Aug 28 05:28:38 GMT 2015 Olly Betts * doc/manual.sgml,survex.iss.in: Process survey data with aven rather than running cavern. Sat Aug 22 21:14:40 GMT 2015 Olly Betts * lib/fr.po: Use fancy quotes. Wed Aug 19 14:08:14 GMT 2015 Olly Betts * lib/fr.po: Merge translation updates from Michel Bovey. Mon Aug 17 08:32:18 GMT 2015 Olly Betts * NEWS,configure.ac,doc/manual.sgml: Update for 1.2.22. Thu Aug 13 16:12:06 GMT 2015 Olly Betts * lib/: Update source references and merge po files. Thu Aug 13 16:11:03 GMT 2015 Olly Betts * src/commands.c: Correct an example in a TRANSLATORS comment. Wed Aug 12 19:46:34 GMT 2015 Olly Betts * src/readval.c: Anonymous stations can't be exported, so we don't need to set them up ready for implicit exports. Tue Aug 11 21:31:44 GMT 2015 Olly Betts * src/commands.c,tests/Makefile.am,tests/cavern.tst, tests/cmd_set_bad.out: Improve errors for invalid survey names in *equate and *export. Tue Aug 11 20:34:05 GMT 2015 Olly Betts * src/commands.c,tests/cmd_begin_bad.out,tests/cmd_begin_bad.svx: Improve error when *begin is followed by an invalid survey name. Tue Aug 11 20:02:31 GMT 2015 Olly Betts * src/commands.c,tests/: Improve error when *begin is followed by an invalid survey name. Tue Aug 11 19:44:40 GMT 2015 Olly Betts * NEWS: Update. Fri Aug 07 14:19:04 GMT 2015 Olly Betts * src/aven.cc,src/gla-gl.cc: Ensure that the window has a depth buffer. Whether it does by default seems to vary depending on OS and maybe graphics card. Fixes #55 (terrain is no longer visible through itself), and also the rendering of passage tubes. Thanks to Martin Green for pointing me in the right direction for finding this fix. Fri Aug 07 11:13:19 GMT 2015 Olly Betts * doc/manual.sgml: Update to reflect *declination with a number not working in 1.2.21. Fri Aug 07 10:55:42 GMT 2015 Olly Betts * src/netartic.c,tests/: Fix assertion if we try to identify a hanging survey by an anonymous station. Fri Aug 07 10:33:38 GMT 2015 Olly Betts * src/commands.c,tests/: Fix *declination with an angle to actually work. Tue Jul 28 19:18:37 GMT 2015 Olly Betts * src/Makefile.am: Ship thgeomag.h. Tue Jul 28 19:10:52 GMT 2015 Olly Betts * src/Makefile.am: Distribute igrf coefficients file and script to generate C header from it. Tue Jul 28 18:57:43 GMT 2015 Olly Betts * doc/HACKING.htm: Document where the unofficial Innosetup translations came from. Tue Jul 28 18:57:15 GMT 2015 Olly Betts * doc/HACKING.htm: wx2.8-i18n -> wx3.0-i18n. Tue Jul 28 18:56:46 GMT 2015 Olly Betts * NEWS: Update. Tue Jul 28 18:35:03 GMT 2015 Olly Betts * src/datain.c: Add FIXME for actually looking at clino readings in diving data. Tue Jul 28 18:23:07 GMT 2015 Olly Betts * doc/aven.sgml: Document the command line options. Reported by Jenny Black. Tue Jul 28 18:17:51 GMT 2015 Olly Betts * doc/manual.sgml: Point to '*case' and '*truncate' from the 'SEE ALSO' sections of each other. Tue Jul 28 18:17:16 GMT 2015 Olly Betts * doc/manual.sgml: Fix broken markup introduced by recent changes. Tue Jul 28 15:55:23 GMT 2015 Olly Betts * NEWS: Update. Tue Jul 28 15:54:05 GMT 2015 Olly Betts * doc/manual.sgml: Next release will be 1.2.21 not 1.2.22. Tue Jul 28 15:52:31 GMT 2015 Olly Betts * doc/manual.sgml,src/commands.c,tests/: Allow the units for the zero error to be specified, making it easier to specify calibration with a scale if you measure the zero error externally (rather than using the instrument itself). Fixes #61, reported by Andrew Atkinson. Tue Jul 28 12:15:20 GMT 2015 Olly Betts * src/datain.c,src/date.c,src/date.h: Calculate the Julian date to use for the declination properly. Tue Jul 28 11:44:05 GMT 2015 Olly Betts * lib/survex.pot,src/,tests/: Warn if we see an undated compass reading when 'declination auto' is active. Cache the computed declination as that saves 5-6% of the run time when processing CUCC's big dataset. Tue Jul 28 11:43:27 GMT 2015 Olly Betts * lib/ru.po: Add missing ellipses to translated message. Tue Jul 28 10:33:37 GMT 2015 Olly Betts * NEWS: Update. Tue Jul 28 09:22:44 GMT 2015 Olly Betts * src/export.cc: Set LC_NUMERIC to the C locale while exporting so that "." is used for the decimal separator in KML and other textual formats. Reported by Jan Schorn. Mon Jul 27 22:13:54 GMT 2015 Olly Betts * src/commands.c: Fix comment typo. Mon Jul 27 22:13:33 GMT 2015 Olly Betts * lib/zh_CN.po: Add missing ellipses to translated message. Mon Jul 27 22:13:16 GMT 2015 Olly Betts * doc/manual.sgml: Fix doc typo. Mon Jul 27 22:11:09 GMT 2015 Olly Betts * doc/TODO.htm,doc/manual.sgml,lib/survex.pot,src/cavern.h, src/commands.c,src/datain.c: Add new *declination command with support for setting the declination automatically based on the survey date. Mon Jul 27 20:48:21 GMT 2015 Olly Betts * lib/,src/commands.c,tests/csbad.out,tests/csbad.svx: Report error from PROJ when coordinate conversion fails as part of the actual error rather than on a separate line. Mon Jul 27 20:07:30 GMT 2015 Olly Betts * src/thgeomag.c,src/thgeomag.h: Make thgeomag() return declination in radians, since that's what we want and it's more consistent with it taking lat and lon in radians. Mon Jul 27 20:04:38 GMT 2015 Olly Betts * src/cavern.h: Document what days1 and days2 members of meta_data struct are. Mon Jul 27 15:15:53 GMT 2015 Olly Betts * src/: Clean up support for repeat readings (currently disabled) to only expect them for survey readings. Mon Jul 27 13:25:28 GMT 2015 Olly Betts * doc/manual.sgml: Add example of using "*CALIBRATE DECLINATION". Mon Jul 27 13:24:52 GMT 2015 Olly Betts * doc/manual.sgml: Consistently say "magnetic declination" instead of "magnetic deviation". Mon Jul 27 13:05:58 GMT 2015 Olly Betts * src/Makefile.am: Add thgeomag code to the build system. Mon Jul 27 13:04:54 GMT 2015 Olly Betts * src/thgeomag.c,src/thgeomag.cxx: Tweak thgeomag.cxx to be valid C code. Mon Jul 27 12:54:19 GMT 2015 Olly Betts * src/thgeomag.cxx: Fix "set but not used" warning. Mon Jul 27 12:42:47 GMT 2015 Olly Betts * src/: Add IGRF handling code from therion 5.3.16. Mon Jul 27 08:08:11 GMT 2015 Olly Betts * src/commands.c,tests/: Extend check for *fix before *cs to catch *fix with standard deviations too. Sun Jul 26 11:36:36 GMT 2015 Olly Betts * src/printing.cc: Remove the "Coordinate projection" field from the print dialog, as it isn't relevant there. Sun Jul 26 11:21:33 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Fix initial scale for small caves (since 1.2.18 the initial scale has been too small). Don't rescale if the same file is reloaded, but adjust the volume diameter as appropriate. Wed Jul 15 09:10:50 GMT 2015 Olly Betts * doc/HACKING.htm: Update list of debian packages to install to build from git. Wed Jul 15 08:16:44 GMT 2015 Olly Betts * NEWS,configure.ac,doc/manual.sgml: Update for 1.2.21. Wed Jul 15 08:15:20 GMT 2015 Olly Betts * doc/manual.sgml: Document that 1.2.21 is needed for *fix using latitude and longitude, or with standard deviations. Tue Jul 14 17:53:21 GMT 2015 Olly Betts * NEWS: Update. Tue Jul 14 17:46:38 GMT 2015 Olly Betts * src/commands.c,tests/: Fix *fix with standard deviations when *cs is in use. Wed Jul 08 09:42:14 GMT 2015 Olly Betts * src/commands.c,tests/: Fix coordinate systems using latitude and longitude - PROJ.4 wants these in radians, but we were passing degrees, which would generally cause the conversion to the output coordinate system to fail. Reported by Wookey. Wed Jul 01 10:15:49 GMT 2015 Olly Betts * doc/manual.sgml: Strip references to obsolete versions of MS Windows. Tue Jun 30 12:22:55 GMT 2015 Olly Betts * src/kml.cc: Put all the elements into a , rather than having each in a separate . Tue Jun 30 09:32:17 GMT 2015 Olly Betts * src/: Whitespace cleanup. Mon Jun 29 12:27:49 GMT 2015 Olly Betts * doc/cad3d.sgml,doc/manual.sgml: Remove references to SpeleoGen, which hasn't been updated for many years, and which can't read current the recent versions of the .3d format. Mon Jun 29 03:14:52 GMT 2015 Olly Betts * NEWS: Update. Sun Jun 28 13:35:47 GMT 2015 Olly Betts * NEWS: Update. Sun Jun 28 11:43:11 GMT 2015 Olly Betts * src/message.c: Ignore any "@" modifier in the language code. Sun Jun 28 11:40:06 GMT 2015 Olly Betts * src/message.c: Remove compatibility handling for specifying a country variant of a language in SURVEXLANG using "-" with a lower case country code (e.g. "en-us") - we changed to the standard "en_US" way back in 2001. Sun Jun 28 09:28:56 GMT 2015 Olly Betts * src/kml.cc: Use the "paddle" placemarkers rather than push pins. Sun Jun 28 07:25:12 GMT 2015 Olly Betts * src/kml.cc,src/kml.h,src/printing.cc: Implement exporting of survey legs in KML format. Sun Jun 28 07:20:09 GMT 2015 Olly Betts * src/kml.h: Whitespace tweak. Sun Jun 28 07:18:42 GMT 2015 Olly Betts * src/kml.cc: Put coloured "pin" icons into KML files, like we do for GPX files. Sat Jun 27 12:46:03 GMT 2015 Olly Betts * src/cavernlog.cc: Use wxSystem() rather than conditionally calling system() or _wsystem() depending on the platform. Sat Jun 27 12:45:22 GMT 2015 Olly Betts * src/mainfrm.cc: Use wxAtof() to get double from wxString. Sat Jun 27 12:44:04 GMT 2015 Olly Betts * src/cavernlog.cc,src/mainfrm.cc: Use wxFopen() rather than conditionally calling fopen() or _wfopen() depending on the platform. Sat Jun 27 12:42:57 GMT 2015 Olly Betts * src/gfxcore.cc: Create wxFileInputStream directly, avoiding intermediate file descriptor. Sat Jun 27 12:41:32 GMT 2015 Olly Betts * src/cavernlog.cc: Use wxGetenv() to read the SURVEXEDITOR variable, so we can accept Unicode values on Windows. Sat Jun 27 06:51:29 GMT 2015 Olly Betts * src/netskel.c: Fix use after free after *solve. This only occurs if a leg between the two exact same stations appears right before and right after the *solve, which is unlikely in real data, but the testsuite has an instance of this. This was introduced by the repeat leg averaging added in 1.2.17. Sat Jun 27 06:49:38 GMT 2015 Olly Betts * src/netartic.c: Fix small memory leak when solving network. This doesn't really matter when solving at the end of processing as cavern will exit after that, but if *solve is used we continue processing after solving. Sat Jun 27 04:36:39 GMT 2015 Olly Betts * src/message.c: Fix comment typo. Fri Jun 26 00:42:07 GMT 2015 Olly Betts * NEWS: More updates for 1.2.20. Fri Jun 26 00:05:51 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h,src/mainfrm.cc: Add support for reading DEM data which isn't in a .zip file. Thu Jun 25 21:58:38 GMT 2015 Olly Betts * src/gfxcore.cc: Force a refresh after loading terrain data so that it gets displayed right away. Thu Jun 25 05:16:10 GMT 2015 Olly Betts * lib/icons/Makefile.am: Fix install directories for filetype icons. Wed Jun 24 12:51:10 GMT 2015 Olly Betts * lib/icons/Makefile.am: Fix for VPATH build and to create directories to install icons to if necessary. Wed Jun 24 12:45:52 GMT 2015 Olly Betts * NEWS,configure.ac,doc/manual.sgml: Update for 1.2.20. Wed Jun 24 12:45:06 GMT 2015 Olly Betts * lib/unlaunchpad-po: Fix regex to clean up transifex source refs. Wed Jun 24 12:24:31 GMT 2015 Olly Betts * src/gfxcore.cc: Add a FIXME about problem reading zip files with wxZipInputStream on __WXMSW__. Wed Jun 24 12:23:44 GMT 2015 Olly Betts * src/gfxcore.cc: When reading .hgt files, flag a read error if we can't read any data. Wed Jun 24 12:22:53 GMT 2015 Olly Betts * src/gfxcore.cc: If we reading terrain data fails, don't continue and try to display it. Wed Jun 24 12:21:44 GMT 2015 Olly Betts * src/gfxcore.cc: Avoid unnecessary call to OpenEntry() if we're already on the zip entry we want to read. Mon Jun 22 05:00:49 GMT 2015 Olly Betts * src/gfxcore.cc: Lowercase filenames of .zip entries before checking extensions. Mon Jun 22 04:36:26 GMT 2015 Olly Betts * src/commands.c: Define MASK_PASSAGE after MASK_NOSURVEY to match order of mask[] array. Mon Jun 22 04:35:57 GMT 2015 Olly Betts * doc/manual.sgml: Document that clino is now allowed in diving data. Mon Jun 22 02:14:08 GMT 2015 Olly Betts * src/commands.c,src/datain.c,tests/bug4.svx,tests/diving.pos, tests/diving.svx: Allow clino readings in diving style data, suggested by Andrew Atkinson. Currently these readings are ignored, but a future version will check that they're consistent with the angle given by the depth gauge and tape, and perform suitable averaging. Mon Jun 22 00:40:39 GMT 2015 Olly Betts * buildmacosx.sh: Hardlink the .msg files in the .dmg rather than shipping two copies of each. Fri Jun 19 12:20:00 GMT 2015 Olly Betts * NEWS: Update. Fri Jun 19 11:46:10 GMT 2015 Olly Betts * src/printing.cc: Fix to use top margin rather than right margin when calculating the page height. Fri Jun 19 11:44:50 GMT 2015 Olly Betts * src/avenprcore.cc,src/avenprcore.h,src/printing.cc: Factor out the height of the footer we put on each printout page into a constant. Fri Jun 19 10:59:21 GMT 2015 Olly Betts * src/avenprcore.cc: Cleaner code to calculate printable area. Fri Jun 19 10:54:13 GMT 2015 Olly Betts * src/avenprcore.cc: Note why we seem to have to create a temporary wxPrinterDC or wxPostScriptDC in a comment. Fri Jun 19 08:27:08 GMT 2015 Olly Betts * src/avenprcore.cc: Add back in header required in mingw build. Fri Jun 19 08:22:57 GMT 2015 Olly Betts * buildmacosx.sh: Remove useless extra copy of about box images from OS X disk image. Fri Jun 19 08:22:20 GMT 2015 Olly Betts * Makefile.am,lib/images/,src/aboutdlg.cc,survex.iss.in: Optimise the size of the about dialog images. Fri Jun 19 05:12:59 GMT 2015 Olly Betts * buildmacosx.sh,lib/icons/Makefile.am,survex.spec.in: Install the filetype and app icons under /usr/share/icons/hicolor, which is where they're expected to be these days. Fri Jun 19 04:39:04 GMT 2015 Olly Betts * lib/survex-aven.desktop: Add %f to Exec. Fri Jun 19 03:46:48 GMT 2015 Olly Betts * .gitignore,configure.ac,desc-svxedit.txt,doc/,lib/,src/Makefile.am, src/svxedit.rc: Remove lingering traces of svxedit. Fri Jun 19 01:01:08 GMT 2015 Olly Betts * src/aboutdlg.cc: Avoid assertion if the about dialog image fails to load. Reported by Phil Maynard. Thu Jun 18 12:04:31 GMT 2015 Olly Betts * configure.ac: Fix to allow compiling without libav. Thu Jun 18 12:02:46 GMT 2015 Olly Betts * src/avenprcore.cc,src/avenprcore.h: Clean up unused header includes. Thu Jun 18 11:04:29 GMT 2015 Olly Betts * buildmacosx.sh: Disable a load of libav features we don't use. Thu Jun 18 11:01:37 GMT 2015 Olly Betts * doc/HACKING.htm: Fix typo. Thu Jun 18 11:00:33 GMT 2015 Olly Betts * doc/HACKING.htm: Update recipe for building libav for mingw to disable a load of features we don't use, reducing the size of aven significantly. Thu Jun 18 10:58:58 GMT 2015 Olly Betts * doc/HACKING.htm,lib/,survex.iss.in: Update innosetup translations - minor updates for zh_CN and an unofficial translation for en_GB from the issrc repo (which is identical to mine in content). Thu Jun 18 05:04:04 GMT 2015 Olly Betts * NEWS: Bump release date for 1.2.19. Thu Jun 18 00:07:46 GMT 2015 Olly Betts * configure.ac: pkg-config support in proj seems quite new, so probe directly if not found. Wed Jun 17 11:02:40 GMT 2015 Olly Betts * lib/: Update line number references. Wed Jun 17 10:59:38 GMT 2015 Olly Betts * lib/pl.po: Keep the "illegal option" message as a fuzzy translation of the "invalid option" message. Wed Jun 17 10:57:42 GMT 2015 Olly Betts * lib/,src/getopt.c: #if 0 out the support for -W longopt (which we don't use) and the posixly_correct "illegal option" message ("invalid option" is clearer). Wed Jun 17 10:18:12 GMT 2015 Olly Betts * src/getopt.c,src/gettexttomsg.pl: Take preprocessor directives into account to avoid converting gettext() uses which won't be used. Wed Jun 17 02:06:12 GMT 2015 Olly Betts * lib/INSTALL.OSX: Update. Wed Jun 17 02:02:46 GMT 2015 Olly Betts * lib/hu.po: Translate a couple more messages. Wed Jun 17 01:18:20 GMT 2015 Olly Betts * NEWS: Update. Wed Jun 17 01:12:12 GMT 2015 Olly Betts * lib/,src/mainfrm.cc,src/printing.cc: Use "..." rather than Unicode ellipses in menu items and button labels, as that's conventional (but keep using Unicode ellipses in other messages). Tue Jun 16 22:29:49 GMT 2015 Olly Betts * src/guicontrol.cc,src/mainfrm.cc: If the measuring line isn't currently active, exit full screen mode if "Escape" is pressed. Tue Jun 16 22:28:52 GMT 2015 Olly Betts * make_release: Update for change to use pkg-config to find libav and proj. Tue Jun 16 07:31:35 GMT 2015 Olly Betts * src/mainfrm.cc: Fix OS X shortcut for full screen mode to be Ctrl+Command+F as that's the standard one, not Shift+Command+F which we have been using since 1.2.7. Tue Jun 16 07:28:50 GMT 2015 Olly Betts * buildmacosx.sh,configure.ac,src/Makefile.am,src/moviemaker.cc, src/moviemaker.h: Use pkg-config to probe for libav and proj. This sorts out the correct flags for building on OS X against a static install of libav. Mon Jun 15 01:54:03 GMT 2015 Olly Betts * doc/manual.sgml: Update version in manual. Mon Jun 15 01:31:01 GMT 2015 Olly Betts * NEWS,configure.ac: Update for 1.2.19. Mon Jun 15 01:26:18 GMT 2015 Olly Betts * doc/survex.ent: Remove SGML entities which are no longer used. Mon Jun 15 01:25:56 GMT 2015 Olly Betts * doc/3dtopos.sgml,doc/diffpos.sgml: Add notes that aven can now export .pos files. Mon Jun 15 01:16:11 GMT 2015 Olly Betts * lib/INSTALL.OSX: Update status and list the command line tools. Mon Jun 15 01:07:17 GMT 2015 Olly Betts * buildmacosx.sh: Just use "tar xf" - GNU tar automatically detects any decompressor needed in the versions we'll encounter on OS X. Mon Jun 15 01:06:16 GMT 2015 Olly Betts * buildmacosx.sh,lib/INSTALL.OSX: Build OS X version with libav to enable aven's movie export feature. Mon Jun 15 01:04:22 GMT 2015 Olly Betts * buildmacosx.sh: Move compression used for disk image into variable dmg_format. Mon Jun 15 01:03:23 GMT 2015 Olly Betts * buildmacosx.sh: Improve documentation of wx --enable-unicode. Sun Jun 14 13:17:15 GMT 2015 Olly Betts * src/: Mark all single-argument constructors as 'explicit'. Sun Jun 14 12:59:37 GMT 2015 Olly Betts * lib/: Update source references and fill in translations for new message. Sun Jun 14 12:50:07 GMT 2015 Olly Betts * lib/survex.pot,src/printing.cc: "pos files" reads better than "POS files". Sun Jun 14 12:34:05 GMT 2015 Olly Betts * NEWS: Update. Sun Jun 14 12:31:32 GMT 2015 Olly Betts * src/gfxcore.cc: When reading terrain data from a .zip file, report an error if the .zip file is bad, or if it doesn't contain any terrain data we recognise. Sun Jun 14 12:30:36 GMT 2015 Olly Betts * buildmacosx.sh: Enable wxDisplay to better support multi-monitor setups. Sun Jun 14 12:11:11 GMT 2015 Olly Betts * buildmacosx.sh: No need for --enable-unicode with wx3. Sun Jun 14 11:33:46 GMT 2015 Olly Betts * src/: Use the correct separator for sorting stations when exporting a .pos file. Sun Jun 14 11:09:49 GMT 2015 Olly Betts * lib/survex.pot,src/: Add exporting to Survex POS format to aven. Sat Jun 13 13:48:09 GMT 2015 Olly Betts * NEWS: Update. Sat Jun 13 13:29:01 GMT 2015 Olly Betts * src/printing.cc: Remove code to workaround wxMac opening the preview window at minimum size, as this no longer happens with wxWidgets 3.0.2. We currently disable this preview window anyway, as OS X has its own print preview, which is slicker than the generic wxWidgets one. Sat Jun 13 13:20:54 GMT 2015 Olly Betts * src/mainfrm.cc: We need to call Layout() when we come out of FullScreen mode under OS X so the sizer adjusts to show the toolbar. Sat Jun 13 13:17:47 GMT 2015 Olly Betts * src/: Fix exporting to GPX, KML and HPGL, which all failed to write the header to the exported file in 1.2.18. Sat Jun 13 11:00:29 GMT 2015 Olly Betts * src/mainfrm.cc,src/mainfrm.h: Now we're using a non-native toolbar for OS X, GetToolBar() returns NULL, and we need to do a bit of extra work to get the toolbar. Sat Jun 13 10:18:07 GMT 2015 Olly Betts * lib/de_CH.po: Add missing "fuzzy" marker. Sat Jun 13 07:54:07 GMT 2015 Olly Betts * src/mainfrm.cc: On OS X, drop out of full screen mode if the mouse is mode to the top of the screen, since we can't seem to display the menu bar in this case. Sat Jun 13 07:27:27 GMT 2015 Olly Betts * src/aven.cc: Remove crude bodge which tries to pick a suitable initial window size when using wxWidgets without wxDisplay on a multi-monitor setup. It was based on the setup I had at the time, and might not work well in every situation, and now we persist the window size between runs, picking a nice initial size isn't so important. Sat Jun 13 07:24:07 GMT 2015 Olly Betts * src/aven.cc: If the saved size for aven's window exceeds the current display size (mostly likely because we're now plugged into a smaller monitor), then reduce the size of the window to fit the display. If the saved size is < (480x320), increase it to at least that, as aven isn't usable in a smaller window. Fri Jun 12 11:28:46 GMT 2015 Olly Betts * lib/,src/mainfrm.cc: Add another TRANSLATORS comment. Fri Jun 12 10:43:27 GMT 2015 Olly Betts * src/aven.cc: Remove unused '#include '. Fri Jun 12 10:34:37 GMT 2015 Olly Betts * configure.ac,lib/,src/message.c,src/msvc/config.h.in: Stop trying to catch and report signals. The only real reason to do it is so we can say "Bug in program detected! Please report this to the authors" before we exit, but when the program crashes that's pretty obvious. In aven we try to pop up a message box for this message, which may fail due to whatever caused the signal, while with the command line tools there's no great benefit over just letting the shell report the signal. Fri Jun 12 10:30:11 GMT 2015 Olly Betts * lib/: Translation updates. Fri Jun 12 06:13:04 GMT 2015 Olly Betts * src/Makefile.am: Use $(COMMONSRC) in aven_SOURCES. Thu Jun 11 02:22:11 GMT 2015 Olly Betts * lib/: Assorted translation updates. Thu Jun 11 02:06:25 GMT 2015 Olly Betts * lib/,src/cmdline.c: Fix typo in TRANSLATORS comment (--verbose -> --version). Thu Jun 11 01:39:34 GMT 2015 Olly Betts * src/mainfrm.cc: Stop trying to scale toolbar icons by the content scale factor on OS X, as this doesn't seem to achieve what we want, requires an as-yet unreleased version of wx, and forcing a non-native toolbar works with current releases. Thu Jun 11 00:55:50 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/mainfrm.cc: Force use of a non-native toolbar on OS X to stop the toolbar icons from getting rescaled and looking fuzzy. Wed Jun 10 11:23:03 GMT 2015 Olly Betts * src/guicontrol.cc: On OS X, when we centre the view on the station this can generate a mouse move event, so clear the variable which says we are dragging before we process a left click on a station. This avoids random rotations of the survey when clicking on a station, reported in #47 by Hugh St. Lawrence. Wed Jun 10 11:22:02 GMT 2015 Olly Betts * lib/Info.plist.in: Add missing CFBundleTypeRole to silence warning on stderr. Wed Jun 10 06:18:08 GMT 2015 Olly Betts * lib/id.po: Merge updates from launchpad. Wed Jun 10 06:17:22 GMT 2015 Olly Betts * lib/en_US.po: Remove extra blank line. Tue Jun 09 02:16:44 GMT 2015 Olly Betts * lib/id.po: Merge translation updates from launchpad. Tue Jun 09 01:18:18 GMT 2015 Olly Betts * lib/: Update .pot and merge changes to .po files. Tue Jun 09 01:09:43 GMT 2015 Olly Betts * lib/extract-msgs.pl: Recognise %.0f as a C printf format string. Tue Jun 09 01:06:04 GMT 2015 Olly Betts * lib/generate-po-todo: Add code to update the todo files on the website. Tue Jun 09 01:04:43 GMT 2015 Olly Betts * src/printing.cc: Redo the code which rescales the footer so that the right end aligns exactly, like it does in the non-rescaling case. Tue Jun 09 00:48:52 GMT 2015 Olly Betts * lib/survex.pot,src/printing.cc: Shorten the datestamp by dropping any day name and timezone, and add "Processed: " before it so it is clear what it is the date and time of. Tue Jun 09 00:05:54 GMT 2015 Olly Betts * lib/survex.pot,src/printing.cc: Mark printouts of extended elevations in the footer appropriately. Mon Jun 08 13:13:20 GMT 2015 Olly Betts * lib/survex.pot,src/printing.cc: Also include the scale in the footer of printouts. Mon Jun 08 13:00:55 GMT 2015 Olly Betts * lib/survex.pot,src/printing.cc: Add view details to footer of printouts. (ticket #52) Mon Jun 08 12:00:47 GMT 2015 Olly Betts * src/: Rename printwx.cc to printing.cc, etc - we only have wx-based printing now. Sun Jun 07 14:40:23 GMT 2015 Olly Betts * lib/survex.pot,src/printwx.cc: Simplify the page footer on printouts. If the footer is too long to fit the page width, reduce the font size so it exactly fits; otherwise space out the elements evenly to fill the width. Sun Jun 07 06:38:14 GMT 2015 Olly Betts * src/gfxcore.cc: Tweak error message in terrain reading code to distinguish two failure cases. Thu Jun 04 05:37:23 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/mainfrm.cc: Only try to scale the OS X toolbar icons for wx >= 3.1.0, as current releases don't have the required API methods. Also, correct "GetClientScaleFactor" to "GetContentScaleFactor". Thu Jun 04 01:19:31 GMT 2015 Olly Betts * make_release: Tag releases with message "Survex $VERSION". Thu Jun 04 01:19:16 GMT 2015 Olly Betts * buildmacosx.sh: Fix comment typo. Wed Jun 03 08:23:27 GMT 2015 Olly Betts * survex.iss.in: No more .ini files to install. Wed Jun 03 07:34:16 GMT 2015 Olly Betts * src/mainfrm.cc: Fix WXMSW build. Wed Jun 03 07:28:37 GMT 2015 Olly Betts * doc/Makefile.am: Fix manual version check to work in a VPATH build. Wed Jun 03 07:10:50 GMT 2015 Olly Betts * NEWS,configure.ac: Update for 1.2.18. Wed Jun 03 07:09:54 GMT 2015 Olly Betts * lib/: Update survex.pot and merge pos. Wed May 20 13:52:06 GMT 2015 Olly Betts * src/: Fix to compile without warnings with 'g++ --std=gnu++11'. Tue Apr 14 06:58:16 GMT 2015 Olly Betts * NEWS: Update. Tue Apr 14 00:27:12 GMT 2015 Olly Betts * src/mainfrm.cc: Moan if there's no coordinate system before allowing the user to pick a terrain file. Mon Apr 13 11:37:57 GMT 2015 Olly Betts * src/export.cc: Adjust 'creator' in EPS output. Mon Apr 13 11:20:04 GMT 2015 Olly Betts * src/export.cc,src/printwx.cc: Add passage export for EPS format. (see #4) Mon Apr 13 03:06:48 GMT 2015 Olly Betts * src/commands.c,tests/cmd_fix_bad.out,tests/cmd_fix_bad.svx: Reject *fix with SDs which aren't all positive. (fixes#2, reported by susscorfa). Mon Apr 13 02:34:03 GMT 2015 Olly Betts * tests/cmd_entrance_bad.svx: Fix not to accidentally specify sd of 0. Sun Apr 12 13:00:37 GMT 2015 Olly Betts * src/avenprcore.cc,src/avenprcore.h,src/printwx.cc: Working towards supporting "skip blank pages". Sun Apr 12 10:22:13 GMT 2015 Olly Betts * src/printwx.cc: Eliminate Init() and Pre() methods of svxPrintout class. Sun Apr 12 10:08:42 GMT 2015 Olly Betts * src/printwx.cc: Comment clean-ups. Sun Apr 12 10:02:31 GMT 2015 Olly Betts * src/printwx.cc: Eliminate unused return value of svxPrintout::Pre(). Sun Apr 12 10:01:08 GMT 2015 Olly Betts * src/avenprcore.cc,src/avenprcore.h,src/printwx.cc: Eliminate footer member of layout. Sun Apr 12 09:50:24 GMT 2015 Olly Betts * src/printwx.cc: Eliminate 4 file global variables. Sun Apr 12 09:49:58 GMT 2015 Olly Betts * src/printwx.cc: Make a couple of arrays const. Sun Apr 12 09:38:49 GMT 2015 Olly Betts * src/avenprcore.h,src/printwx.cc: Make clip rectangle part of the svxPrintout class. Sun Apr 12 09:32:54 GMT 2015 Olly Betts * src/avenprcore.h: Remove unused header. Sun Apr 12 09:04:09 GMT 2015 Olly Betts * src/avenprcore.h: Remove dead code. Sun Apr 12 08:54:16 GMT 2015 Olly Betts * make_release: Add comment documenting the purpose of this script. Sun Apr 12 08:51:16 GMT 2015 Olly Betts * tests/back.out,tests/back2.out,tests/lengthunits.out: Add missing testcase output files. Sun Apr 12 08:37:31 GMT 2015 Olly Betts * src/dump3d.c: Remove some commented out code from development. Sun Apr 12 08:24:54 GMT 2015 Olly Betts * lib/: Remove unused message 166. Sun Apr 12 08:23:24 GMT 2015 Olly Betts * src/avenprcore.cc: Clean up the currently unused code for skipping blank pages, by removing parts we definitely don't want. Sun Apr 12 08:08:28 GMT 2015 Olly Betts * src/avenprcore.h,src/printwx.cc: Simplify setting of pen colours while printing. Sun Apr 12 07:57:22 GMT 2015 Olly Betts * src/avenprcore.h,src/printwx.cc: Simplify setting of text colour. Sun Apr 12 07:56:48 GMT 2015 Olly Betts * src/avenprcore.h: Remove unused constants. Sun Apr 12 07:22:34 GMT 2015 Olly Betts * src/avenprcore.h,src/printwx.cc: Simplify font handling when printing. Sun Apr 12 07:04:38 GMT 2015 Olly Betts * src/printwx.cc: Use DC::GetCharHeight() to get the height of the font, rather than calling DC::GetTextExtent("My"). Sat Apr 11 23:30:42 GMT 2015 Olly Betts * src/printwx.cc: Destroy any existing clipping region before we write the page footer. Hopefully solves #52, reported by Erin Lynch. Sat Apr 11 00:50:03 GMT 2015 Olly Betts * NEWS: Update. Fri Apr 10 20:31:56 GMT 2015 Olly Betts * lib/en_US.po: Say "control point" more consistently. Fri Apr 10 10:34:57 GMT 2015 Olly Betts * src/: Pressing F6 toggles the display of rendering stats, currently FPS (Frames Per Second) and the number of triangles in the terrain mesh. Tue Apr 07 21:52:29 GMT 2015 Olly Betts * lib/en_US.po: Remove fuzzy markers from a couple of messages. Tue Apr 07 06:03:01 GMT 2015 Olly Betts * src/gfxcore.cc: Fix printf format/type mismatch. Tue Apr 07 06:02:24 GMT 2015 Olly Betts * src/gfxcore.cc: Report an error if the survey data has no coordinate system and you try to load terrain. Mon Apr 06 15:33:11 GMT 2015 Olly Betts * lib/en_US.po: Tweak accelerators to match recent tweaks to the master strings. Mon Apr 06 15:30:55 GMT 2015 Olly Betts * lib/en_US.po: Add translation of new message. Mon Apr 06 15:22:02 GMT 2015 Olly Betts * lib/po-to-msg.pl: Fix off-by-one in count of untranslated messages. Mon Apr 06 15:21:34 GMT 2015 Olly Betts * lib/po-to-msg.pl: Report if there are fuzzy strings for a language. Mon Apr 06 15:17:54 GMT 2015 Olly Betts * lib/,src/mainfrm.cc: Update pot and merge pos. Mon Apr 06 14:03:44 GMT 2015 Olly Betts * lib/survex.pot,src/: Add UI for loading terrain files. Mon Apr 06 11:28:57 GMT 2015 Olly Betts * src/gfxcore.h: Remove method which is never defined. Sun Apr 05 10:58:34 GMT 2015 Olly Betts * doc/TODO.htm,doc/manual.sgml: Update for addition of terrain support. Sun Apr 05 09:50:09 GMT 2015 Olly Betts * src/gla-gl.cc: Tweak code for drawing crosses to be more like the code for drawing blobs. Sun Apr 05 09:49:39 GMT 2015 Olly Betts * src/gfxcore.cc: Fix reversed check for endian-ness of .bil files. Sun Apr 05 09:48:39 GMT 2015 Olly Betts * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Plot the terrain with a Z-prepass so that we don't see the terrain through itself. Sun Apr 05 09:46:31 GMT 2015 Olly Betts * src/gfxcore.cc: Increase volume diameter so that terrain doesn't get clipped. Sun Apr 05 06:36:56 GMT 2015 Olly Betts * src/gfxcore.cc: Show busy cursor while building the terrain model. Sun Apr 05 04:36:51 GMT 2015 Olly Betts * lib/checkshortcut.pl: Strip off accelerator before looking at shortcuts, and don't offer ellipses as a potential shortcut. Sun Apr 05 04:25:32 GMT 2015 Olly Betts * lib/checkshortcut.pl: Treat a missing shortcut as an error too. Sun Apr 05 04:24:07 GMT 2015 Olly Betts * lib/checkshortcut.pl: If there's a shortcut clash, report letters used in strings in the menu which aren't used for shortcuts, and separately any ASCII letters which aren't used in the menu strings at all. Sun Apr 05 04:22:39 GMT 2015 Olly Betts * lib/deadmessages.txt,lib/merge-po: Fix extra "" on msgid when adding to deadmessages.txt. Sun Apr 05 03:59:42 GMT 2015 Olly Betts * lib/: Merge messages and resolve clashing menu accelarators. Sun Apr 05 03:40:13 GMT 2015 Olly Betts * lib/survex.pot,src/mainfrm.cc: Fix clashing menu accelarators. Sun Apr 05 03:34:52 GMT 2015 Olly Betts * lib/survex.pot,src/: Create a "Colour by" submenu of the "View" menu. Sun Apr 05 03:04:00 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Add support for reading DEM data from SRTM .hgt files. Sun Apr 05 02:22:03 GMT 2015 Olly Betts * src/gfxcore.cc: Remove header which is no longer used. Sun Apr 05 01:25:59 GMT 2015 Olly Betts * src/: Remove actions from 'Orientation' menu which you wouldn't sanely want to perform from the menu. Sat Apr 04 23:24:13 GMT 2015 Olly Betts * src/: Remove actions from 'Rotation' menu which you wouldn't sanely want to perform from the menu. Sat Apr 04 23:06:26 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Factor out DEM loading into a separate method. Sat Apr 04 22:30:03 GMT 2015 Olly Betts * src/gfxcore.cc: Draw terrain before crosses/blobs. Sat Apr 04 22:01:29 GMT 2015 Olly Betts * src/gfxcore.cc: Support 'SKIPBYTES' in the DEM data. Sat Apr 04 21:58:59 GMT 2015 Olly Betts * src/gfxcore.cc: Remove unused macros. Sat Apr 04 13:04:04 GMT 2015 Olly Betts * src/gfxcore.cc: Fix DEM reading for big-endian platforms. Sat Apr 04 03:17:32 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Render terrain as a transparent mesh of triangles. Fri Apr 03 04:26:34 GMT 2015 Olly Betts * src/gfxcore.cc: Test with the void-filled 3-arc second SRTM data. Thu Apr 02 11:17:01 GMT 2015 Olly Betts * NEWS: Update. Thu Apr 02 11:13:24 GMT 2015 Olly Betts * lib/ru.po: Fix accelerator clash. Thu Apr 02 10:43:37 GMT 2015 Olly Betts * lib/id.po,lib/ru.po: Merge translation updates. Wed Apr 01 11:53:26 GMT 2015 Olly Betts * src/gfxcore.cc: Make stats read from DEM file static. Wed Apr 01 07:33:18 GMT 2015 Olly Betts * src/gfxcore.cc: Process all of the DEM data. Tue Mar 31 11:46:25 GMT 2015 Olly Betts * src/gfxcore.cc: Read terrain data directly from the zip file. Tue Mar 31 11:37:21 GMT 2015 Olly Betts * src/gfxcore.cc: Make terrain white with 30% alpha rather than light grey and opaque. Mon Mar 23 04:41:11 GMT 2015 Olly Betts * buildmacosx.sh: Remove packaging of svxedit for OS X. Mon Mar 23 02:30:39 GMT 2015 Olly Betts * survex.spec.in: Drop svxedit from RPM spec file. Mon Mar 23 02:27:52 GMT 2015 Olly Betts * .gitignore,Makefile.am,configure.ac,lib/INSTALL.OSX, lib/icons/Makefile.am,src/,survex.iss.in: Remove editwrap - while an editor with built-in knowledge of survex would be nice to have, svxedit doesn't really offer that, and it looks ugly in a modern desktop. Mon Mar 23 00:55:24 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/mainfrm.cc: Attempt to address the size of the toolbar icons on Mac OS X. Sun Mar 22 10:10:21 GMT 2015 Olly Betts * doc/manual.sgml: not ?> to terminate. Sun Mar 22 04:39:39 GMT 2015 Olly Betts * doc/manual.sgml: Fix bugs in the markup. Sun Mar 22 04:07:53 GMT 2015 Olly Betts * .gitignore,configure.ac,doc/: Eliminate most of the SGML entities we define. Sat Mar 21 20:51:54 GMT 2015 Olly Betts * NEWS: Update. Sat Mar 21 02:43:48 GMT 2015 Olly Betts * doc/diffpos.sgml,doc/extend.sgml: Remove   which actually make the output formatting worse (presumably these used to work around a bug in one of the docbook processing tools. Sat Mar 21 02:26:59 GMT 2015 Olly Betts * doc/: Eliminate uses of Null End Tag, as a step towards making the docs valid XML rather than just SGML. Thu Mar 19 11:57:14 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h,src/mainfrm.h: Terrain data work in progress. Thu Mar 19 10:32:48 GMT 2015 Olly Betts * lib/icons/Makefile.am,lib/icons/solid-surface.png, lib/icons/solid_surface.xpm,lib/survex.pot,src/: Add UI for toggling terrain on and off. Wed Mar 18 04:11:49 GMT 2015 Olly Betts * lib/bg.po,lib/el.po: A few updates. Wed Mar 18 03:22:09 GMT 2015 Olly Betts * doc/manual.sgml: Add a link to the sample data from the manual too. Wed Mar 18 03:12:09 GMT 2015 Olly Betts * doc/manual.sgml: Remove references to contact addresses which are no longer there. Remove offer to post people floppies, and references to a fictional CD image. Sun Mar 15 03:38:32 GMT 2015 Olly Betts * lib/: Merge po changes. Sun Mar 15 03:35:48 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Take the width of the messages used above the compass and clino into account when calculating how wide they are. Sun Mar 15 03:35:07 GMT 2015 Olly Betts * src/gla-gl.cc,src/gla.h: Make GLACanvas::GetTextExtent() const. Sun Mar 15 03:34:26 GMT 2015 Olly Betts * src/commands.c,src/gfxcore.cc: Add and enhance some TRANSLATORS comments. Sun Mar 15 03:33:13 GMT 2015 Olly Betts * lib/survex.pot: Add TRANSLATORS comments for a couple of messages which aren't yet used. Sun Mar 15 02:47:30 GMT 2015 Olly Betts * lib/id.po: Merge translation updates. Fri Mar 13 21:28:07 GMT 2015 Olly Betts * NEWS: Update. Fri Mar 13 11:27:54 GMT 2015 Olly Betts * src/findentrances.cc: If the 3d file specifies the coordinate system, use it. Fri Mar 13 03:49:45 GMT 2015 Olly Betts * lib/hu.po: Merged adjusted versions of some suggestions, marked as "fuzzy". Thu Mar 12 22:30:14 GMT 2015 Olly Betts * lib/: Update source references. Thu Mar 12 22:27:13 GMT 2015 Olly Betts * lib/survex.pot: Add message ready for future use. Thu Mar 12 01:51:31 GMT 2015 Olly Betts * lib/ru.po: Juggle menu shortcuts. Thu Mar 12 01:42:09 GMT 2015 Olly Betts * lib/de.po,lib/de_CH.po: Adapt some translations. Thu Mar 12 01:12:51 GMT 2015 Olly Betts * lib/fr.po: Adapt a couple of translations. Wed Mar 11 06:12:09 GMT 2015 Olly Betts * lib/ro.po,lib/sk.po: Fix some shortcut clashes. Wed Mar 11 05:00:26 GMT 2015 Olly Betts * lib/,src/: Add "Colour by Gradient". Wed Mar 11 04:55:38 GMT 2015 Olly Betts * lib/fr.po: Juggle menu shortcuts. Wed Mar 11 04:54:57 GMT 2015 Olly Betts * lib/fr.po: Add translation. Wed Mar 11 04:38:52 GMT 2015 Olly Betts * lib/fr.po: Fix typo. Wed Mar 11 04:30:17 GMT 2015 Olly Betts * src/gfxcore.cc: Minor refactor. Wed Mar 11 04:27:04 GMT 2015 Olly Betts * src/gfxcore.cc: Refactor code to dispatch drawing of the colour key. Wed Mar 11 03:59:57 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Factor out function to pick the colour pen based on a value between 0 and 1. Wed Mar 11 03:15:46 GMT 2015 Olly Betts * src/gfxcore.h: Invalidate the length key when "Metric" is toggled. Wed Mar 11 03:14:30 GMT 2015 Olly Betts * src/gfxcore.cc: Context menu on length key now allows toggling "Metric", like it does on the depth key. Wed Mar 11 03:12:54 GMT 2015 Olly Betts * src/gfxcore.cc: Put units below length key (like we do for depth key) and only show one decimal place on the lengths. Wed Mar 11 03:11:11 GMT 2015 Olly Betts * lib/de.po,lib/de_CH.po,lib/fr.po: Attempt to update some translations. Tue Mar 10 12:30:42 GMT 2015 Olly Betts * NEWS: Update. Tue Mar 10 00:54:10 GMT 2015 Olly Betts * lib/: Update source references and TRANSLATORS comments. Tue Mar 10 00:50:44 GMT 2015 Olly Betts * src/: Add more TRANSLATORS comments. Tue Mar 10 00:49:03 GMT 2015 Olly Betts * lib/pt.po,lib/pt_BR.po: Add missing "fuzzy" marker to two translations. Tue Mar 10 00:46:55 GMT 2015 Olly Betts * lib/id.po,lib/ru.po: Merge translation updates. Tue Mar 10 00:45:15 GMT 2015 Olly Betts * lib/launchpad-merge-po: Sync merging at blank lines between messages. Tue Mar 10 00:05:29 GMT 2015 Olly Betts * lib/: Update po files for new message. Sun Mar 08 13:20:00 GMT 2015 Olly Betts * NEWS: Update. Sun Mar 08 13:12:10 GMT 2015 Olly Betts * doc/manual.sgml: Document averaging of a group of repeated readings. Sun Mar 08 10:09:04 GMT 2015 Olly Betts * src/gfxcore.cc: Remove unnecessary clamping when colouring by date or error, due to cut-and-pasting code from the colour by depth case. Sun Mar 08 09:35:59 GMT 2015 Olly Betts * lib/survex.pot,src/: Add "Colour by Length". Sun Mar 08 09:30:16 GMT 2015 Olly Betts * src/datain.c: Fix amended message in source from the output units commit. Sun Mar 08 04:22:29 GMT 2015 Olly Betts * doc/TODO.htm: "Save cavern log from aven" now implemented. Sun Mar 08 02:22:33 GMT 2015 Olly Betts * src/commands.c: Slightly simplify handling of the units scaling factor. Sun Mar 08 02:21:09 GMT 2015 Olly Betts * src/cavern.h: Reorder the Q_ enum values so that those used in bitmasks tests are together and first. Sun Mar 08 02:20:30 GMT 2015 Olly Betts * src/datain.c: Add FIXME about warnings when the backclino has range 0-180 degrees. Sun Mar 08 02:16:39 GMT 2015 Olly Betts * doc/TODO.htm,lib/,src/,tests/: In cavern, use the currently set units when outputting measurements in warnings, errors, and the stats at the end of the run. Sun Mar 08 02:10:03 GMT 2015 Olly Betts * src/message.c: Document the CP-1250 and CP-1252 mappings are complete, and which positions are unused in these character sets. Sun Mar 08 02:07:39 GMT 2015 Olly Betts * src/message.c: Add commented out mappings for the CP-1252 characters we don't currently make use of. Sun Mar 08 02:06:29 GMT 2015 Olly Betts * src/message.c: Add CP-1252 mappings for fancy quotes. Sun Mar 08 02:03:43 GMT 2015 Olly Betts * src/message.c: Improve debug message for a missing transliteration to report the codepoint in question, and note why 169 isn't handled here. Sun Mar 08 00:55:56 GMT 2015 Olly Betts * src/message.c: Transliterate gradient and infinity symbols if the current character set lacks them. Sat Mar 07 10:36:43 GMT 2015 Olly Betts * src/message.c: Don't dynamically generate a message string for a message requested before messages are read or for an out of range message number - instead return a fixed string and write the message number to STDERR. Sat Mar 07 10:03:37 GMT 2015 Olly Betts * src/avenprcore.cc,src/message.c,src/message.h: msg() has returned a persistent copy of the message for decades, so the code's bound to rely on that in some places. And there's no real reason it shouldn't continue to as the messages are under 20KB of UTF-8 text for any language, so lazy loading isn't worth the complication. So remove msgPerm() and the unused msgFree() macro, and document that msg() returns a persistent copy. Sat Mar 07 00:01:50 GMT 2015 Olly Betts * src/commands.c: Make data tables const where possible. Fri Mar 06 22:06:41 GMT 2015 Olly Betts * lib/: More minor translation updates. Fri Mar 06 21:48:58 GMT 2015 Olly Betts * lib/bg.po: Minor update. Fri Mar 06 12:39:29 GMT 2015 Olly Betts * lib/INSTALL.OSX,lib/icons/Makefile.am,lib/icons/plt.svg: Add SVG version of .plt icon. Fri Mar 06 12:38:48 GMT 2015 Olly Betts * src/datain.c: Improve wording of FIXME comment. Fri Mar 06 11:48:08 GMT 2015 Olly Betts * NEWS: Update. Fri Mar 06 10:30:26 GMT 2015 Olly Betts * .gitignore: Update. Fri Mar 06 10:15:16 GMT 2015 Olly Betts * .gitignore,Makefile.am,debian/survex.install,doc/,lib/,src/: Aven's support for reading colours and font sizes for printouts from print.ini has never worked - the contents of the ini files are ignored due to a bug which has been there since the code was added in 2005 - but nobody has ever complained. So just strip out that code entirely - we should support setting the colours and font sizes, but a GUI interface for setting them would be better. Fri Mar 06 07:00:35 GMT 2015 Olly Betts * src/avenprcore.h: Remove prototypes for functions we no longer declare. Fri Mar 06 05:08:28 GMT 2015 Olly Betts * src/datain.c: Warn if fore and back measurements differ by more than 3 SDs, rather than just by 2 SDs. Fri Mar 06 05:01:24 GMT 2015 Olly Betts * lib/: More translation updates. Fri Mar 06 04:33:21 GMT 2015 Olly Betts * lib/: Update and merge translations. Fri Mar 06 04:30:33 GMT 2015 Olly Betts * src/cavernlog.cc: Fix TRANSLATORS comment in source to match .pot file. Fri Mar 06 04:00:54 GMT 2015 Olly Betts * src/cavernlog.cc: Avoid hardcoding numeric value of LOG_REPROCESS. Fri Mar 06 03:56:13 GMT 2015 Olly Betts * lib/survex.pot,src/cavernlog.cc,src/cavernlog.h: Add "Save Log" button to Aven's cavern log window. Fri Mar 06 03:24:54 GMT 2015 Olly Betts * lib/icons/Makefile.am,lib/icons/log.xpm,lib/survex.pot,src/: Add a menu item and toolbar button to show the cavern log window if the currently shown survey data was processed by aven. Reported by Hugh St Lawrence in #47, and by Dave Clucas and others previously on the list. Fri Mar 06 01:24:57 GMT 2015 Olly Betts * doc/manual.sgml: Add complete list of quantities you can set SDs for. Thanks for Wookey for highlighting that the previous list was incomplete. Fri Mar 06 01:24:13 GMT 2015 Olly Betts * lib/id.po,lib/pl.po: More translation updates. Fri Mar 06 00:49:09 GMT 2015 Olly Betts * src/cavernlog.cc: Require ':' after error/warning marker. Fri Mar 06 00:42:43 GMT 2015 Olly Betts * lib/el.po: Fix language code in file to be 'el'. Fri Mar 06 00:42:21 GMT 2015 Olly Betts * lib/po-to-msg.pl: Add check that language code in file matches the filename. Thu Mar 05 23:53:33 GMT 2015 Olly Betts * lib/: Add translations for "error" based on existing translations. Thu Mar 05 23:42:33 GMT 2015 Olly Betts * .gitignore,doc/manual.sgml,lib/Makefile.am,src/message.c: There's no need to duplicate de.msg to de_DE.msg, as the code will fall-back to de from de_DE anyway. Thu Mar 05 04:32:13 GMT 2015 Olly Betts * src/gfxcore.h: Fix (C) year typo. Thu Mar 05 04:30:56 GMT 2015 Olly Betts * src/aboutdlg.cc,src/aboutdlg.h: Make the button to dismiss the "About" dialog "OK" rather than "Close", which seems more logical, and also allows the dialog to be closed by pressing "Escape". Thu Mar 05 03:21:45 GMT 2015 Olly Betts * src/avenprcore.h,src/printwx.cc,src/printwx.h: Don't round bearing and tilt angles to integers when printing and exporting. Thu Mar 05 02:19:25 GMT 2015 Olly Betts * lib/survex.pot: Update line number references, and reorder messages a bit so some which are lower priority to translate are later in the file. * lib/: Merge .pot changes. Thu Mar 05 01:05:24 GMT 2015 Olly Betts * lib/extract-msgs.pl: Whitespace tweak. Thu Mar 05 01:04:44 GMT 2015 Olly Betts * lib/extract-msgs.pl: Preserve any header from the existing .pot file. Thu Mar 05 00:51:17 GMT 2015 Olly Betts * lib/survex.pot,src/img_hosted.c: Include the filename when we run out of memory while reading a file with img, which avoids the %.0s hack and is more helpful for users. Wed Mar 04 12:30:39 GMT 2015 Olly Betts * src/cavernlog.cc: Highlight "error" marker in red and "warning" marker in orange. Wed Mar 04 09:47:56 GMT 2015 Olly Betts * src/datain.c,src/readval.c,tests/badinc.out,tests/badinc2.out, tests/badinc3.out: Include column number when a *include file isn't found. Wed Mar 04 09:22:14 GMT 2015 Olly Betts * src/datain.c: Fix compile_error() and friends not to segfault if passed a negative message number when no file is open. Wed Mar 04 08:16:44 GMT 2015 Olly Betts * src/json.cc,src/json.h: Add new files for JSON export. Tue Mar 03 12:14:22 GMT 2015 Olly Betts * lib/survex.pot,src/message.c,tests/: Show 'error' in front of error messages, like we show 'warning' in front of warnings. Fixes #48, reported by Wookey. Tue Mar 03 11:05:17 GMT 2015 Olly Betts * lib/survex.pot: Add new message "JSON files". Tue Mar 03 10:03:21 GMT 2015 Olly Betts * src/cavernlog.cc: Rework code to read cavern's output. In particular, we no longer mix buffered I/O with select() on the file descriptor. Mon Mar 02 11:45:41 GMT 2015 Olly Betts * src/gfxcore.cc,src/guicontrol.cc,src/mainfrm.cc: More tweaks to compile with a unicode build of wx2.8. Mon Mar 02 09:24:59 GMT 2015 Olly Betts * src/labelinfo.h: Fix to compile with a unicode build of wxwidgets 2.8. Mon Mar 02 07:43:47 GMT 2015 Olly Betts * lib/hu.po: Change '...' to ellipses. Mon Mar 02 07:43:31 GMT 2015 Olly Betts * lib/hu.po: Add missing quotes. Mon Mar 02 07:42:38 GMT 2015 Olly Betts * lib/hu.po: Use curly double quotes. Mon Mar 02 07:40:07 GMT 2015 Olly Betts * lib/hu.po: Remove erroneous quotes from message. Mon Mar 02 07:32:48 GMT 2015 Olly Betts * lib/id.po: Add missing '#~'. Mon Mar 02 07:32:22 GMT 2015 Olly Betts * lib/id.po: Resolve clashing menu shortcuts. Mon Mar 02 07:13:01 GMT 2015 Olly Betts * src/: Add JSON export. Mon Mar 02 07:11:53 GMT 2015 Olly Betts * doc/TODO.htm: Update. Mon Mar 02 06:02:58 GMT 2015 Olly Betts * lib/ru.po: Resolve clashing menu shortcuts. Mon Mar 02 05:58:42 GMT 2015 Olly Betts * lib/ru.po: Merge more translation updates from "vsuhachev". Mon Mar 02 05:57:25 GMT 2015 Olly Betts * lib/id.po: Merged translation updates from "Cave ID" - all messages are now translated into Indonesian! Sat Feb 28 12:38:09 GMT 2015 Olly Betts * src/export.cc: Eliminate more static variables. Sat Feb 28 12:05:54 GMT 2015 Olly Betts * src/export.cc: Eliminate static double factor. Sat Feb 28 11:26:52 GMT 2015 Olly Betts * src/export.cc: Eliminate use of static for text_height. Sat Feb 28 11:06:25 GMT 2015 Olly Betts * src/export.cc,src/exportfilter.h: Pass bounding box as parameters to header() method rather than storing them as static data. Wed Feb 25 06:34:53 GMT 2015 Olly Betts * lib/icons/Makefile.am,lib/icons/xpm2png,src/mainfrm.cc: Fix display of icons for toolbar and notebook under WXMSW. Tue Feb 24 22:10:00 GMT 2015 Olly Betts * src/mainfrm.cc: Work around GetIcon() not working under OS X. Tue Feb 24 20:24:47 GMT 2015 Olly Betts * buildmacosx.sh: Note that UDCO is larger still. Tue Feb 24 20:24:16 GMT 2015 Olly Betts * buildmacosx.sh: Move the instructions about specifying the architecture to the top of the file with the other instructions. Tue Feb 24 20:23:19 GMT 2015 Olly Betts * Makefile.am: Fail building the MS Windows installer if the 'doc' subdirectory somehow fails to exist. Tue Feb 24 20:22:13 GMT 2015 Olly Betts * Makefile.am: Copy PNG and JPG images from their new location. Remove the code to strip out PNG images with .ico versions, as those are now in a separate directory to the images that are PNG format cross-platform. Tue Feb 24 19:26:48 GMT 2015 Olly Betts * src/Makefile.am: Fix include path to .ico files. Tue Feb 24 19:04:01 GMT 2015 Olly Betts * NEWS,configure.ac: Update for 1.2.17. Tue Feb 24 04:44:41 GMT 2015 Olly Betts * NEWS: Update. Tue Feb 24 04:35:58 GMT 2015 Olly Betts * lib/ru.po: Copy a couple of messages which only differ in the accelerator character. Tue Feb 24 04:30:14 GMT 2015 Olly Betts * lib/hu.po: Another Hungarian message translated. Tue Feb 24 04:28:00 GMT 2015 Olly Betts * lib/ru.po: Merge in many updates to the Russian translation from "vsuhachev". Sat Feb 21 04:52:26 GMT 2015 Olly Betts * tests/cmd_set.pos,tests/cmd_set.svx,tests/Makefile.am: Check that '*set names .' works when '.' is also the decimal point. Sat Feb 21 04:48:45 GMT 2015 Olly Betts * lib/: A few translation updates. Mon Feb 16 00:46:53 GMT 2015 Olly Betts * lib/: Merge changes from sources to .pot and .po files. Mon Feb 16 00:46:01 GMT 2015 Olly Betts * lib/extract-msgs.pl: Report file:line for issues we spot. Mon Feb 16 00:13:55 GMT 2015 Olly Betts * lib/survex.pot,src/: Add more TRANSLATOR comments. Mon Feb 16 00:12:32 GMT 2015 Olly Betts * tests/badcalibrate.out,tests/badcalibrate.svx: Add test coverage for "Can't calibrate angular and length quantities together". Sun Feb 15 23:47:35 GMT 2015 Olly Betts * lib/po-to-msg.pl: Report file and line number for warnings. Sun Feb 15 23:46:12 GMT 2015 Olly Betts * doc/manual.sgml,lib/Makefile.am,lib/hu.po,src/message.c, survex.iss.in: Add start of Hungarian translation from Imre Balogh. Sun Feb 01 04:53:22 GMT 2015 Olly Betts * lib/INSTALL.OSX,lib/icons/Makefile.am,lib/icons/err.svg: Add SVG version of .err file icon. Sun Feb 01 04:49:06 GMT 2015 Olly Betts * lib/INSTALL.OSX,lib/icons/Makefile.am,lib/icons/pos.svg: Add SVG version of .pos file icon. Sat Jan 31 14:39:32 GMT 2015 Olly Betts * src/aboutdlg.cc,src/aboutdlg.h: Put the wxIcon into the wxStaticBitmap directly, rather than converting it to a wxBitmap. Sat Jan 31 13:09:07 GMT 2015 Olly Betts * lib/icons/Makefile.am,lib/icons/svx.svg: Add SVG version of .svx file icon. Sat Jan 31 13:03:12 GMT 2015 Olly Betts * lib/icons/Makefile.am: Ship 3d.svg. Sat Jan 31 12:25:06 GMT 2015 Olly Betts * lib/icons/svg2iconsetzip: Fix hard-coded icon name. Sat Jan 31 10:45:17 GMT 2015 Olly Betts * buildmacosx.sh,configure.ac,debian/survex-aven.install, debian/survex.install,lib/Makefile.am,lib/icons/,lib/images/, src/aboutdlg.cc,src/aboutdlg.h,src/gla-gl.cc,survex.iss.in: Split out the images which aren't icons into an "images" directory. Sat Jan 31 09:28:38 GMT 2015 Olly Betts * lib/icons/Makefile.am: solid-surface.png isn't currently used, so don't install it. Sat Jan 31 09:19:48 GMT 2015 Olly Betts * Makefile.am,lib/icons/Makefile.am,lib/icons/aven.png, lib/icons/aven.xpm,src/: Compile in the "aven" icon on all platforms, not just MSW, and use this icon for the about dialog instead of loading it from disk. Sat Jan 31 03:44:48 GMT 2015 Olly Betts * lib/survex-aven.desktop,lib/survex-svxedit.desktop: Add "MimeType" field to desktop files. Sat Jan 31 03:43:03 GMT 2015 Olly Betts * lib/icons/3d.svg,lib/icons/Makefile.am: Add SVG version of 3d file icon, and use it to generate icon for OS X. Fri Jan 30 21:59:07 GMT 2015 Olly Betts * NEWS: Update. Fri Jan 30 21:58:05 GMT 2015 Olly Betts * buildmacosx.sh: Allow specifying arch to build for on the command line, and update comments documenting usage. Fri Jan 30 21:50:48 GMT 2015 Olly Betts * buildmacosx.sh: Make the directory we build wx in 'BUILD', as the source tree already has a 'build' subdirectory. Use 'BUILD' for proj too for consistency. Fri Jan 30 11:07:46 GMT 2015 Olly Betts * NEWS: Update. Fri Jan 30 10:28:38 GMT 2015 Olly Betts * lib/icons/png2winicon: Clean up - use set -e, create temporary files in current directory, and quote filenames. Fri Jan 30 10:12:14 GMT 2015 Olly Betts * .gitignore,lib/icons/,src/aven.rc,src/mainfrm.cc: Rather than loading all the toolbar and notebook icons from PNG files on disk, compile them into the aven binary. On most platforms, as XPMs; on MSW as .ico files via a generated .rc file. Wed Jan 28 13:46:50 GMT 2015 Olly Betts * configure.ac: Note in comment that libav is an alternative to ffmpeg. Wed Jan 28 09:45:29 GMT 2015 Olly Betts * lib/svxedit_Info.plist.in: Update to run svxedit_wrap. Wed Jan 28 09:45:01 GMT 2015 Olly Betts * buildmacosx.sh: Remove empty share/doc directory from OS X disk image. Wed Jan 28 09:44:21 GMT 2015 Olly Betts * .gitignore,configure.ac: Actually generate lib/svxedit_Info.plist. Wed Jan 28 07:17:56 GMT 2015 Olly Betts * lib/INSTALL.OSX: Update. Wed Jan 28 07:09:38 GMT 2015 Olly Betts * lib/Makefile.am: Fix typo from 0f5d06e9. Wed Jan 28 07:05:49 GMT 2015 Olly Betts * configure.ac: Fix typo from c1a94492. Wed Jan 28 07:00:59 GMT 2015 Olly Betts * buildmacosx.sh: Remove unused files and copies of files. Wed Jan 28 07:00:41 GMT 2015 Olly Betts * lib/Makefile.am: Don't install preload_font.h. Wed Jan 28 06:59:22 GMT 2015 Olly Betts * .gitignore,buildmacosx.sh,configure.ac,src/Makefile.am, src/editwrap_osx.c: Add compiled C wrapper for svxedit on OS X as OS X won't run the Tcl script for some reason. Wed Jan 28 04:19:52 GMT 2015 Olly Betts * lib/icons/: Rename helper scripts to match the names used in Makefile.am. Wed Jan 28 04:05:13 GMT 2015 Olly Betts * buildmacosx.sh,lib/INSTALL.OSX,lib/svxedit_Info.plist.in: Create app bundle for svxedit. Wed Jan 28 03:26:00 GMT 2015 Olly Betts * lib/INSTALL.OSX,lib/Info.plist.in: Add icons for other filetypes, and run actions to load "plt" and "pos" into aven. Wed Jan 28 03:22:41 GMT 2015 Olly Betts * lib/icons/Makefile.am: Whitespace fix. Wed Jan 28 03:22:08 GMT 2015 Olly Betts * buildmacosx.sh,lib/icons/Makefile.am: Generate OS X .icns files for all the filetypes and svxedit. Wed Jan 28 03:13:36 GMT 2015 Olly Betts * lib/icons/Makefile.am,lib/icons/png2iconset,lib/icons/svg2iconset: Factor out conversion from png and svg to iconset.zip into helper scripts. Wed Jan 28 00:36:24 GMT 2015 Olly Betts * NEWS: Update. Tue Jan 27 23:23:26 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/aven.cc,src/aven.h: Add handlers so that files can be loaded and printed from the finder on OS X. Tue Jan 27 23:05:48 GMT 2015 Olly Betts * src/dump3d.c: Report SEPARATOR used by the file being read. Tue Jan 27 12:26:08 GMT 2015 Olly Betts * lib/INSTALL.OSX: Add svxedit issue. Tue Jan 27 12:20:14 GMT 2015 Olly Betts * buildmacosx.sh,lib/INSTALL.OSX,lib/Info.plist.in,lib/icons/Makefile.am: Add icon and file associations for .svx files, and add missing and tags so the .3d association works better. Tue Jan 27 09:57:41 GMT 2015 Olly Betts * lib/icons/Makefile.am: Remove .iconset.zip files on maintainer-clean. Mon Jan 26 13:35:46 GMT 2015 Olly Betts * lib/icons/Makefile.am: Convert SVG to PNG with inkscape, as "convert" loses transparency information. Mon Jan 26 13:08:21 GMT 2015 Olly Betts * lib/icons/aven.svg: Fix visual glitch in SVG icon for aven. Noted by David A. Riggs. Mon Jan 26 13:05:59 GMT 2015 Olly Betts * buildmacosx.sh: Use bzip2 to compress the disk image, which gives a smaller download. This means OS X 10.4 is required, but we probably already need 10.5 because that's the minimum version which the wxWidgets build supports by default. Mon Jan 26 13:03:54 GMT 2015 Olly Betts * buildmacosx.sh: Fix location of Aven.icns inside Aven.app. * buildmacosx.sh,lib/Info.plist.in,lib/icons/Makefile.am: Attempt to add filetype info for 3d files. Mon Jan 26 10:50:00 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/mainfrm.cc: On OS X, hide the status bar and tool bar in full screen mode, as wx doesn't currently do this for us. Mon Jan 26 08:44:17 GMT 2015 Olly Betts * buildmacosx.sh: Use mkdir -p. Mon Jan 26 08:33:14 GMT 2015 Olly Betts * src/mainfrm.cc: Reduce flicker when mouse is moved to the top of the screen in full screen mode and the menu bar reappears. Mon Jan 26 08:31:17 GMT 2015 Olly Betts * buildmacosx.sh,lib/INSTALL.OSX,lib/icons/Makefile.am: Add a custom icon for the Mac OS X application bundle. Mon Jan 26 04:55:39 GMT 2015 Olly Betts * src/export.cc,src/export.h,src/printwx.cc: For export formats where scaling is supporting, aven now actually uses the scale specified in the export dialog (previously it ignored this and used 1:500). Sat Jan 24 22:32:31 GMT 2015 Olly Betts * buildmacosx.sh: Disable use of liblzma when building wxWidgets for OS X, as this prevents the build from working on OS X 10.6.8. Sat Jan 24 13:01:22 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Factor out MAX_FRAMERATE. Sat Jan 24 11:28:58 GMT 2015 Olly Betts * src/gfxcore.cc: Fix presentation playback to work after the animation changes. Sat Jan 24 07:32:29 GMT 2015 Olly Betts * src/: Merge OnStepOnceAnticlockwiseUpdate() and OnStepOnceClockwiseUpdate(). Sat Jan 24 06:50:19 GMT 2015 Olly Betts * src/guicontrol.cc: Disable stepping the rotation angle if animating, not just if rotating. Sat Jan 24 06:22:04 GMT 2015 Olly Betts * src/gfxcore.cc,src/gfxcore.h: Reimplement animation so that it's based on angular change per unit of elapsed time, rather than averaging the time take for the last two scene redraws. This gives a more even animation in the face of variable load and scene redraw time, and should be more consistent between platforms. * src/gfxcore.cc: Switch to a point of the compass during auto-rotation now jumps straight there rather than the two animations fighting. * src/gfxcore.cc: Reduce the maximum auto-rotation speed, as the previous limit was uselessly fast. Sat Jan 24 04:49:33 GMT 2015 Olly Betts * src/gfxcore.cc: Wrap the rotation angle to the range [0,360) properly, rather than only if it's off by at most 360 either way. Fri Jan 23 10:54:40 GMT 2015 Olly Betts * buildmacosx.sh: Download wx from SF via redirecting link. Thanks to David A. Riggs. Fri Jan 23 05:21:13 GMT 2015 Olly Betts * src/gfxcore.cc: Fix comment typo. Wed Jan 21 11:25:12 GMT 2015 Olly Betts * buildmacosx.sh: The pathname of the mount point for the disk image may a space. Wed Jan 21 10:48:00 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/gfxcore.cc: On OS X, make custom cursors black with a white outline to match the standard OS X cursor. Wed Jan 21 10:18:50 GMT 2015 Olly Betts * lib/INSTALL.OSX: Update status. Wed Jan 21 10:15:02 GMT 2015 Olly Betts * buildmacosx.sh: Build a static version of PROJ and use it. Get wx tarball from a sourceforge mirror as the wx ftp site has a permissions problem. Build wx with --disable-webview to avoid a compilation failure. Use wx-config --cc and --cxx to get the compilers to use for building everything else, as wx adds options to them which otherwise cause linking errors. Wed Jan 21 09:41:10 GMT 2015 Olly Betts * src/aboutdlg.cc: Fix "Close" button in about dialog under OS X. Wed Jan 21 04:16:12 GMT 2015 Olly Betts * configure.ac,debian/copyright,doc/manual.sgml: Update copyright years. Wed Jan 21 04:13:45 GMT 2015 Olly Betts * NEWS: Update. Tue Jan 20 20:36:02 GMT 2015 Olly Betts * lib/INSTALL.OSX: Update for current status. Tue Jan 20 20:33:52 GMT 2015 Olly Betts * lib/INSTALL.OSX,src/mainfrm.cc: Make "About" menu item appear on OS X. Tue Jan 20 20:29:27 GMT 2015 Olly Betts * src/mainfrm.cc: Fix short-cut for Full Screen mode on OS X. Tue Jan 20 20:26:10 GMT 2015 Olly Betts * src/datain.c,src/netbits.c,src/netbits.h,tests/: If the same leg is repeated consecutively, average the readings and treat as a single leg. Sun Nov 23 18:49:52 GMT 2014 Olly Betts * src/message.c: Avoid needless dropping of const qualifier via strchr(). Sat Nov 15 10:43:36 GMT 2014 Olly Betts * buildmacosx.sh: Default to building for x86_64, since modern Macs are all 64 bit. Tue Nov 11 08:50:18 GMT 2014 Olly Betts * doc/manual.sgml: Remove $Id and $Date markers, as they don't get expanded now we're using git. Tue Nov 11 08:36:09 GMT 2014 Olly Betts * tests/: Move the annotations for each test case out of cavern.tst and into a comment in the first line of the .svx file which is the input for the test. Tue Nov 11 04:07:04 GMT 2014 Olly Betts * tests/.gitignore: Ignore files produced by automake test machinery. Tue Nov 11 04:05:16 GMT 2014 Olly Betts * tests/back2.pos,tests/back2.svx,tests/cavern.tst: Extend test of fore and back sights to test calibration of the back compass. Fri Oct 17 00:55:04 GMT 2014 Olly Betts * NEWS: Bump release date. Fri Oct 17 00:53:25 GMT 2014 Olly Betts * src/gettexttomsg.pl: Fix typo in generated code to suppress compiler warnings, added since last release. Fri Oct 17 00:38:21 GMT 2014 Olly Betts * src/Makefile.am: Ship kml.h. Fri Oct 17 00:25:53 GMT 2014 Olly Betts * buildmacosx.sh: Update comment to note that wx3 is Unicode only. Fri Oct 17 00:25:35 GMT 2014 Olly Betts * buildmacosx.sh: Update to use wxWidgets 3.0.2. Thu Oct 16 23:59:43 GMT 2014 Olly Betts * lib/en_US.po: Translate new message. Thu Oct 16 23:57:46 GMT 2014 Olly Betts * lib/: Merge changes from survex.pot to *.po. Thu Oct 16 23:56:51 GMT 2014 Olly Betts * lib/survex.pot: Update source file references. Thu Oct 16 23:48:31 GMT 2014 Olly Betts * src/labelinfo.h,src/mainfrm.cc: Factor out code to show station name or "anonymous station". Thu Oct 16 23:47:50 GMT 2014 Olly Betts * lib/survex.pot: Fix TRANSLATORS comment punctuation to match source code. Thu Oct 16 23:47:08 GMT 2014 Olly Betts * src/extend.c,src/mainfrm.cc,src/sorterr.c: Fix message references which I failed to update. Thu Oct 16 11:15:24 GMT 2014 Olly Betts * src/commands.c: Tweak code so one side of comparison is a constant. Thu Oct 16 11:02:17 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.16. Thu Oct 16 10:03:48 GMT 2014 Olly Betts * lib/survex.pot,src/: Make measuring line work from anonymous stations properly. (Fixes #44) Wed Oct 15 10:21:42 GMT 2014 Olly Betts * src/mainfrm.h: Drop unnecessary forward declaration of class LabelPlotCmp. Fri Sep 19 11:05:26 GMT 2014 Olly Betts * src/aboutdlg.cc,src/mainfrm.cc,src/printwx.cc: Calling Fit() on a sizer is redundant where we also call SetSizeHints() on it. Sat Sep 13 20:59:34 GMT 2014 Olly Betts * lib/ca.po,lib/es.po: Apply translation updates from Adolfo Jayme via launchpad. Tue Sep 09 16:26:07 GMT 2014 Olly Betts * NEWS: Update. Tue Sep 09 16:13:00 GMT 2014 Olly Betts * src/datain.c: Tiny code simplification. Sun Sep 07 14:16:40 GMT 2014 Olly Betts * survex.iss.in: More 'ru' to the list of official innosetup translations. Sat Sep 06 12:43:29 GMT 2014 Olly Betts * survex.iss.in: Include Greek and Polish translations for the installer. Sun Aug 31 03:22:15 GMT 2014 Olly Betts * doc/manual.sgml: Update list of codes for supported translations in the manual. Sun Aug 31 02:12:50 GMT 2014 Olly Betts * src/message.c: Add handling for automatically selecting Greek and Polish translations on Microsoft Windows. Tue Aug 26 22:27:03 GMT 2014 Olly Betts * lib/Makefile.am,lib/el.po,lib/pl.po: Add the start of translations to Greek and Polish. Sun Aug 24 12:49:31 GMT 2014 Olly Betts * NEWS: Update from ChangeLog. Sun Aug 24 06:13:10 GMT 2014 Olly Betts * tests/: Add expected outputs for tests of nosurvey data style. Sun Aug 24 06:06:54 GMT 2014 Olly Betts * tests/: Add expected outputs for tests of cartesian data style. Sat Aug 24 05:52:06 GMT 2014 Olly Betts * lib/ru.po: More updates. Thu Aug 21 02:22:41 GMT 2014 Olly Betts * lib/ru.po: More updates. Thu Aug 21 01:49:09 GMT 2014 Olly Betts * lib/,src/cavern.c,tests/: Eliminate the "Done." message which cavern outputs near the end - it doesn't really serve a useful purpose. Thu Aug 21 01:28:43 GMT 2014 Olly Betts * lib/merge-po: Add dropped messages with translations to deadmessages.txt. Thu Aug 21 01:08:50 GMT 2014 Olly Betts * lib/: More translation updates. Wed Aug 20 07:31:40 GMT 2014 Olly Betts * lib/: More translation updates. Wed Aug 20 05:28:20 GMT 2014 Olly Betts * lib/,src/datain.c,src/img_hosted.c,src/printwx.cc,tests/badinc.out, tests/badinc2.out,tests/badinc3.out: Merge two very similar messages. Wed Aug 20 01:50:07 GMT 2014 Olly Betts * lib/ru.po,lib/zh_CN.po: Fill in some translations from the wxWidgets po files. Wed Aug 20 01:49:06 GMT 2014 Olly Betts * lib/id.po: Adapt an existing translation in obvious way. Wed Aug 20 00:02:59 GMT 2014 Olly Betts * lib/: Merge changes from template. Tue Aug 19 23:51:15 GMT 2014 Olly Betts * lib/survex.pot: Update source references. Tue Aug 19 12:21:49 GMT 2014 Olly Betts * lib/survex.pot,src/: Add KML export (stations only currently). Tue Aug 19 11:24:46 GMT 2014 Olly Betts * src/export.cc: Take a const ref to the wxString for the label name when exporting, to ensure the object is still valid when we call mb_str() on it. Tue Aug 19 08:26:11 GMT 2014 Olly Betts * src/commands.c: Fix compiler warnings caused by previous change. Sat Aug 17 01:36:50 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/cs.svx,tests/csbad.out: Add support for "*cs JTSK" and "*cs JTSK03". Thu Aug 14 23:39:27 GMT 2014 Olly Betts * src/guicontrol.cc: Fix to build against wxWidgets built with assertions disabled. Reported by Martin Sluka. Thu Aug 14 23:29:20 GMT 2014 Olly Betts * src/moviemaker.cc,src/moviemaker.h: Fix warnings from clang. Reported by Martin Sluka. Thu Aug 14 23:28:01 GMT 2014 Olly Betts * src/: Rename methods which hide virtual methods in the parent class. Reported by Martin Sluka. Thu Aug 14 23:27:08 GMT 2014 Olly Betts * src/gfxcore.cc: Remove constants which are no longer used. Reported by Martin Sluka. Thu Aug 14 22:30:41 GMT 2014 Olly Betts * src/getopt.h,src/gettexttomsg.pl: Fix warnings when compiling with clang. Reported by Martin Sluka. Thu Aug 14 22:29:25 GMT 2014 Olly Betts * src/log.cc,src/log.h: Fix log window under wxWidgets >= 2.9 to include the system information before the first log message like it does under wxWidgets 2.8. Thu Aug 14 11:48:09 GMT 2014 Olly Betts * doc/TODO.htm: Update for *cs being added. Thu Aug 14 11:03:58 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.15. Thu Aug 14 10:34:58 GMT 2014 Olly Betts * doc/HACKING.htm,make_release: Update for building with latest Debian packaged mingw cross compiler. Mon Aug 04 10:34:19 GMT 2014 Olly Betts * src/img.h: Improve documentation for img_ERROR_INFO. Sun Aug 03 09:54:39 GMT 2014 Olly Betts * survex.spec.in: Add run-time requirement on proj and proj-epsg for survex package and on tk for svxedit package. Fri Aug 01 19:42:00 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/: Add support for "*cs osgb:". Sun Jul 27 14:25:17 GMT 2014 Olly Betts * tests/cs.svx: Test that IJTSK and IJTSK03 are accepted as output coordinate systems. Sun Jul 27 12:17:47 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/: Add support for "*cs ijtsk" and "*cs ijtsk03". Sun Jul 27 10:11:13 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/cs.svx: Add support for "*cs eur79z30" and *cs with epsg and esri codes. Sun Jul 27 09:47:55 GMT 2014 Olly Betts * src/commands.c: Make sure all proj strings have "+no_defs". Sun Jul 27 09:46:53 GMT 2014 Olly Betts * src/commands.c: Fix incorrect codes in proj string for S-MERC (all are set to zero, so this change has no actual effect). Sun Jul 27 07:09:41 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/cs.svx: Add support for for "*cs s-merc". Sun Jul 27 06:27:50 GMT 2014 Olly Betts * doc/manual.sgml,src/commands.c,tests/cs.svx,tests/csbad.out: Add support for "*cs long-lat". Sat Jul 26 07:06:50 GMT 2014 Olly Betts * src/mainfrm.cc: Call EnableFullScreenView() if built with wx >= 3.1.0 - this improves the full screen mode experience on OS X 10.7 and later. Sat Jul 26 02:01:23 GMT 2014 Olly Betts * src/: When in full screen mode, moving the mouse to the top of the screen now makes the menu bar appear (and moving the mouse down again makes it disappear). This provides a non-shortcut way out of full screen mode, as well as making it easier to perform other operations while in full screen mode. Fri Jul 25 08:47:01 GMT 2014 Olly Betts * src/aven.cc: Don't persist full screen mode between runs - it's not a standard behaviour of desktop programs, and it's too easy to go into full screen mode from the menu and then not be able to get out again because you don't know the required key shortcut. Tue Jul 22 04:57:13 GMT 2014 Olly Betts * tests/Makefile.am: Ship some missing .out files and compare.tst. Tue Jul 22 04:52:44 GMT 2014 Olly Betts * tests/inferplumbs.svx: Remove unused file containing the start of a testcase for "*infer plumbs" - this isn't useful as we already test this in cmd_infer.svx. Tue Jul 22 04:50:23 GMT 2014 Olly Betts * tests/: cavern.tst testcase back2 is now actually used. Fix a bug in this testcase, and extend it to cover a variant of the situation reported as a bug in therion by Bill Gee to the therion list. Fri Jul 11 21:58:11 GMT 2014 Olly Betts * doc/manual.sgml: Note what coordinate systems *cs currently actually supports. Sun Jul 06 12:14:04 GMT 2014 Olly Betts * doc/manual.sgml: Add missing "custom" to "*cs out" example. Sat Jul 05 12:27:17 GMT 2014 Olly Betts * src/glbitmapfont.cc: Fix to build on mingw. Sat Jul 05 12:00:55 GMT 2014 Olly Betts * configure.ac,src/Makefile.am: Error out in configure is PROJ isn't found, and sort out how we pass -lproj to the linker properly. Sat Jul 05 11:21:39 GMT 2014 Olly Betts * src/commands.c: Fix '//' comment in C source. Sat Jul 05 11:20:34 GMT 2014 Olly Betts * make_release: Report correct line number for a // comment in a C source file. Sat Jul 05 02:11:07 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.14. Fri Jul 04 12:57:12 GMT 2014 Olly Betts * lib/: Merge changes from pot to po files. Fri Jul 04 12:52:58 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c,tests/csbad.out: If proj fails to handle a custom cs description, report pj_strerrno(). Fri Jul 04 12:41:40 GMT 2014 Olly Betts * lib/,src/commands.c: Fix typo in two recently added messages; drop message which is no longer used. Fri Jul 04 12:33:33 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c,tests/cavern.tst,tests/cs.svx, tests/csbad.out: Issue an error is a station has already been fixed when *cs is first used. Fri Jul 04 11:18:33 GMT 2014 Olly Betts * lib/: Update translations. Fri Jul 04 10:53:34 GMT 2014 Olly Betts * tests/cavern.tst: Use "cmp -s" in another case to quietly compare files. Fri Jul 04 10:47:44 GMT 2014 Olly Betts * tests/cavern.tst: Shows a diff of expected to actual output, not actual to expected, as the latter is confusing (at least to me). Fri Jul 04 10:37:27 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c,tests/cavern.tst, tests/omitfixaroundsolve.out,tests/omitfixaroundsolve.svx: In the case of more than one *fix without coordinates, still actually fix the second and subsequent ones, to avoid then triggering bogus errors about unconnected surveys. Thu Jul 03 12:57:00 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c,tests/cavern.tst, tests/omitfixaroundsolve.out,tests/omitfixaroundsolve.svx: If there's more than one *fix command with coordinates, the station name of the previous one, plus the file and line number where it was. Thu Jul 03 12:12:05 GMT 2014 Olly Betts * src/: Add compile_error() and compiler_warning() variants which take a filename and line number, or a prefix to get the filename and line number from. Thu Jul 03 06:39:45 GMT 2014 Olly Betts * lib/en_US.po: Update for new messages. Thu Jul 03 06:33:12 GMT 2014 Olly Betts * lib/: Merge changes for survex.pot. Thu Jul 03 06:31:49 GMT 2014 Olly Betts * lib/extract-msgs.pl: Handle TRANSLATORS comments spread over multiple '//' comments. Thu Jul 03 06:30:35 GMT 2014 Olly Betts * lib/survex.pot: Update from sources. Wed Jul 02 23:21:30 GMT 2014 Olly Betts * src/findentrances.cc: Add TRANSLATORS comment. Wed Jul 02 13:20:16 GMT 2014 Olly Betts * NEWS: Update. Wed Jul 02 13:14:17 GMT 2014 Olly Betts * lib/survex.pot,src/: If the 3d file specifies a coordinate system, then use it for exporting to formats which need to know (currently GPX). If the input file doesn't specify, allow the user to enter one in the export dialog. Wed Jul 02 12:03:19 GMT 2014 Olly Betts * src/netskel.c: If there's an output coordinate system set, write it to the 3d file. Wed Jul 02 09:32:39 GMT 2014 Olly Betts * src/dump3d.c: If there's a coordinate system specified, report it. Wed Jul 02 09:31:48 GMT 2014 Olly Betts * doc/3dformat.htm: Update format doc to mention coordinate system. Wed Jul 02 08:59:07 GMT 2014 Olly Betts * src/img.c,src/img.h: Add ability to store a proj string describing the coordinate system in use in 3d v8 files. Tue Jul 01 12:15:37 GMT 2014 Olly Betts * NEWS: Update. Tue Jul 01 12:14:56 GMT 2014 Olly Betts * doc/manual.sgml: Expand documentation for *CS. Tue Jul 01 09:54:52 GMT 2014 Olly Betts * src/commands.c,tests/: Fix handling of *fix with no coordinates followed by *solve and then another *fix with no coorindates not to access freed memory. Tue Jul 01 07:47:55 GMT 2014 Olly Betts * .gitignore: Update. Sun Jun 29 13:28:19 GMT 2014 Olly Betts * src/netskel.c: If a coordinate system has been specified, don't invent a fixed point if none exists like we do if the coordinate system isn't specified. Sun Jun 29 10:29:58 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c: Reject *fix without coordinates when a coordinate system has been specified - defaulting to (0,0,0) in this case doesn't make sense. Thu Jun 26 14:57:00 GMT 2014 Olly Betts * lib/survex.pot,src/,tests/: More work on *cs. Tue Jun 24 12:01:32 GMT 2014 Olly Betts * src/commands.c: Check !p->next before comparing with p->next->meta. Tue Jun 24 11:58:06 GMT 2014 Olly Betts * src/commands.c: Fix comment typo. Sun Jun 22 07:37:26 GMT 2014 Olly Betts * src/commands.c: Fix warning in recently added code for "*cs". Sun Jun 22 07:36:50 GMT 2014 Olly Betts * NEWS,src/export.cc: Fix exporting of passage tubes in elevations and extended elevations - previously up and down were getting drawn across the page! Sun Jun 15 11:39:15 GMT 2014 Olly Betts * NEWS: Update. Sun Jun 15 11:33:25 GMT 2014 Olly Betts * doc/manual.sgml: Update stats about CUCC Austria data. Sun Jun 15 11:26:43 GMT 2014 Olly Betts * src/commands.c: Fix comment typo. Sun Jun 15 08:52:37 GMT 2014 Olly Betts * src/: Add ability to zoom to a rubber-banded box - use Shift+Left mouse button drag. Releasing the left mouse button after the drag is started changes the box to be centred on the start point. Sat Jun 14 11:57:39 GMT 2014 Olly Betts * doc/manual.sgml,lib/survex.pot,src/commands.c: Add a *cs command to set the coordinate system. Currently only the parsing part is implemented. Thu Jun 12 14:23:00 GMT 2014 Olly Betts * src/gla-gl.cc: Support alpha in SetColour(gla_colour), since we use that in some cases. Mon Jun 09 07:48:34 GMT 2014 Olly Betts * src/mainfrm.cc: Turn off live-update while dragging the sash - it just looks clunky except on an ultra-fast machine. Also, turn off the 3D border for the splitter window (though it wasn't being shown as such under wxGTK anyway). Sun Jun 08 14:44:17 GMT 2014 Olly Betts * NEWS: Update. Sun Jun 08 12:13:43 GMT 2014 Olly Betts * src/gfxcore.cc: Fix the conditions on which "Cancel measuring line" is enabled - previously it was hard to actually cancel it via the menu. Reported by Hugh St Lawrence. Sat Jun 07 07:03:59 GMT 2014 Olly Betts * src/datain.c: Move comments next to the code that they relate to. Sat Jun 07 07:03:09 GMT 2014 Olly Betts * src/datain.c: Set pcs->infer for Compass DAT in terms of INFER_* constants rather than to the literal 7. Sat Jun 07 06:55:55 GMT 2014 Olly Betts * src/datain.c: Remove superfluous call to skipblanks() before get_token(). Sat Jun 07 06:35:21 GMT 2014 Olly Betts * src/commands.c,src/commands.h: Refactor to provide new get_token_no_blanks() function which is like get_token() but doesn't skip blanks first. Wed Jun 04 08:49:30 GMT 2014 Olly Betts * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Use col_WHITE to specify we want to draw something in white. Wed Jun 04 07:14:41 GMT 2014 Olly Betts * src/datain.c,tests/: Add support for 'L' flag (exclude from length) in Compass .dat files - this handled in the same way as the "DUPLICATE" flag in .svx files. Mon Jun 02 12:21:43 GMT 2014 Olly Betts * doc/cad3d.sgml: Add link to "Related Tools" section of the Survex web site in the section about SpeloGen. Mon Jun 02 12:18:30 GMT 2014 Olly Betts * NEWS: Update. Mon Jun 02 12:08:39 GMT 2014 Olly Betts * Makefile.am: (Microsoft Windows version) Include dump3d in the installer. Sun Jun 01 11:45:36 GMT 2014 Olly Betts * src/mainfrm.h: Remove unused default parameter value from MainFrm::LoadData(). Sun Jun 01 11:35:56 GMT 2014 Olly Betts * src/mainfrm.cc,src/mainfrm.h: Pass wxString by const reference in a couple of places where we weren't. Sat May 31 00:47:36 GMT 2014 Olly Betts * src/gfxcore.cc: Re-wrap two comments. Mon May 26 11:07:58 GMT 2014 Olly Betts * lib/: Translate "Plan" in languages where we already have a suitable similar translation. Sun May 25 10:42:53 GMT 2014 Olly Betts * lib/survex.pot,src/gfxcore.cc: Show special for views from above and below in Aven, instead of always saying "Elevation". Wed May 21 07:19:52 GMT 2014 Olly Betts * lib/de.po,lib/de_CH.po: Abbreviate "Blickrichtung" so it doesn't overfill the space available in the aven UI. Tue May 20 02:03:08 GMT 2014 Olly Betts * NEWS: Update. Tue May 20 01:59:27 GMT 2014 Olly Betts * NEWS: Correct "SURVEX_LANG" to "SURVEXLANG" in old NEWS entry. Tue May 20 01:55:39 GMT 2014 Olly Betts * tests/smoke.tst: Add regression test for aven segfault when used on a system set to use a language which aven doesn't support (this bug was fixed some time ago, but we want to ensure it doesn't reappear). Tue May 20 01:44:59 GMT 2014 Olly Betts * tests/smoke.tst: Check that --help and --version don't produce output on stderr. Mon May 19 21:43:08 GMT 2014 Olly Betts * src/printwx.cc: Fix cancel to work on print/export dialog, broken by changes in 1.2.13. (Reported by Brian Clipstone) Sun May 18 12:03:05 GMT 2014 Olly Betts * configure.ac,src/glbitmapfont.cc,src/glbitmapfont.h: For platforms which support mmap(), just mmap the extra font data, which on Linux seems to typically be about twice as quick as loading it via fread() or read(). For other platforms, use read() instead of fread(), since that seems fractionally faster, and means more code in common with the mmap case. Sun May 18 07:01:23 GMT 2014 Olly Betts * src/glbitmapfont.cc: Fix signed/unsigned comparison warning. Sat May 17 06:36:29 GMT 2014 Olly Betts * src/glbitmapfont.cc,src/glbitmapfont.h: Use an array of offsets to each character, rather than a array of pointers, since offsets can be 32 bit which saves 256KB on 64 bit platforms. Thu May 15 06:20:07 GMT 2014 Olly Betts * src/gfxcore.cc: Fix wx assertion failures when showing hit test debug view on platforms such as 64-bit Linux. Thu May 15 04:45:23 GMT 2014 Olly Betts * tests/cavern.tst: Fix cavern.tst to run under valgrind during "make distcheck". Thu May 15 03:00:27 GMT 2014 Olly Betts * tests/equatenosuchstn.out,tests/surveytypo.out: Update expected output to match recent changes to messages. Thu May 15 02:28:19 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.13. Wed May 14 04:02:58 GMT 2014 Olly Betts * lib/Bulgarian.isl,lib/Makefile.am,survex.iss.in: (Microsoft Windows version) Include Bulgarian and Russian translations in the installer. Tue May 13 12:21:32 GMT 2014 Olly Betts * NEWS: Update from ChangeLog. Tue May 13 12:13:21 GMT 2014 Olly Betts * src/: Fix aven --print to wait for printing to happen before exiting (previously it would exit right after opening the print dialog, so you couldn't actually print anything out). Tue May 13 11:44:09 GMT 2014 Olly Betts * src/printwx.h: Fix test for libgnomeprint, and add test for GtkPrint. Mon May 12 13:13:55 GMT 2014 Olly Betts * src/gfxcore.cc,src/gfxcore.h,src/guicontrol.cc: Add "fat finger mode", toggled by pressing F2, to allow investigating if increasing the minimum pointer-station threshold helps Hugh's problems with using aven on a touch screen device. Mon May 12 06:38:01 GMT 2014 Olly Betts * NEWS: Update from ChangeLog. Sun May 11 08:24:23 GMT 2014 Olly Betts * src/gfxcore.cc: Use wxString::Format() instead of sprintf(). Sun May 11 06:03:01 GMT 2014 Olly Betts * src/gfxcore.cc: Create the empty hit-test grid datastructure lazily, to minimising start-up time. Sun May 11 06:01:24 GMT 2014 Olly Betts * src/guicontrol.cc: Pressing F4 now allows the user to toggle wxWidgets assertion messages off and back on. Sat May 10 23:22:37 GMT 2014 Olly Betts * make_release: Compile C files in mingw build with optimisation on. Sat May 10 03:29:48 GMT 2014 Olly Betts * lib/,src/listpos.c: Change another "prefix" in a message to "survey name". Sat May 10 02:58:26 GMT 2014 Olly Betts * tests/cavern.tst: Check number of errors returned by all testcases expected to fail which give an error count. Sat May 10 02:21:42 GMT 2014 Olly Betts * tests/cavern.tst: Fix tests to work when builddir != srcdir. Sat May 10 02:20:19 GMT 2014 Olly Betts * src/glbitmapfont.cc: Fix compiler warning from GCC. Sat May 10 00:08:15 GMT 2014 Olly Betts * tests/: Add regression test 'reenterlots' for the fix in e1a66da. Fri May 09 12:58:26 GMT 2014 Olly Betts * tests/doubleinc.out: Fix testsuite for change to message in last commit but one. Fri May 09 12:54:41 GMT 2014 Olly Betts * lib/: Merge changes from survex.pot to the po files. Fri May 09 12:50:16 GMT 2014 Olly Betts * lib/survex.pot,src/commands.c: Say "survey" instead of "prefix level" in the warning about reentering one. * lib/survex.pot,src/commands.c: After 5 warnings about reentering a survey we give up warning about that, but we used to keep reporting where the survey was originally entered - this secondary diagnostic message is now silenced when the main message is. Fri May 09 11:49:29 GMT 2014 Olly Betts * src/commands.c,tests/: For ages cavern has warned if you reentered a survey, but this warning was suppressed if it occurred at the same line of the same file as the survey was first entered, which can only happen if you include the same survey file more than once, which isn't a sensible thing to do for a file with actual survey data in (you might reasonably do it to set up survey grade details or something like that). The warning is now given in this situation too. Fri May 09 11:42:43 GMT 2014 Olly Betts * tests/anonstn.out,tests/anonstn.pos,tests/anonstn.svx: Test that "..." anon station works. Fri May 09 09:42:11 GMT 2014 Olly Betts * src/message.c: Add handling for MS Windows LANG_RUSSIAN code. Fri May 09 09:41:23 GMT 2014 Olly Betts * lib/de.po,lib/de_CH.po: Attempt to update "Präfix" to "Vermessungsnamen" in fuzzy messages. Fri May 09 07:53:12 GMT 2014 Olly Betts * src/gfxcore.cc,src/gfxcore.h,src/guicontrol.cc: Add "hit test debug" mode, which shows the hit test grid and how many entries are in each box (toggled by F3). Fri May 09 07:50:15 GMT 2014 Olly Betts * src/gfxcore.cc: Increase the threshold for how close the pointer needs to be to a station from 5 pixels to 7 to try to help touchscreen users. Reported by Hugh St Lawrence. Fri May 09 07:46:12 GMT 2014 Olly Betts * src/gfxcore.cc: Divide evenly over the full number of hittest grid boxes, rather than not really using the final box in each direction. Fri May 09 07:44:26 GMT 2014 Olly Betts * src/gfxcore.cc: Invalidate the hit-test grid when surface or underground legs are toggled on or off. Fri May 09 03:31:55 GMT 2014 Olly Betts * src/cad3d.c: Whitespace tweak. Fri May 09 03:30:53 GMT 2014 Olly Betts * lib/merge-po: If a msgid has changed, use the old msgstr for that msgno and automatically mark it as fuzzy. Fri May 09 03:27:00 GMT 2014 Olly Betts * lib/,src/cavern.h,src/commands.c,tests/badbegin.out: Improve cavern messages which talk about "tags" and/or "prefixes" in *begin and *end commands to instead talk about "survey names". Fri May 09 00:30:14 GMT 2014 Olly Betts * lib/: Merge template changes into .po files. Fri May 09 00:15:46 GMT 2014 Olly Betts * lib/extract-msgs.pl,lib/survex.pot,src/: Insert "TRANSLATORS" comments into source code. Mon May 05 05:53:01 GMT 2014 Olly Betts * .gitignore,lib/Makefile.am,lib/ru.po: Add the start of a Russian translation, with messages take from therion. Mon May 05 00:01:19 GMT 2014 Olly Betts * lib/fr.po: Minor updates. Mon Apr 14 04:22:03 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.12. Mon Apr 14 04:15:58 GMT 2014 Olly Betts * src/printwx.cc: Tidy up the appearance of the "compass" and "elevation on" arrow. Mon Apr 14 04:15:07 GMT 2014 Olly Betts * src/printwx.cc: Move the numbers below the scale bar down a little so that they don't overlap the scale bar ticks. Mon Apr 14 04:03:05 GMT 2014 Olly Betts * src/printwx.cc: Set the clipping region after we draw the page border and info box to avoid clipping the border in print preview. Mon Apr 14 03:40:54 GMT 2014 Olly Betts * src/printwx.cc: Fix printing with wx3.0 - 0 width lines don't appear (before they would be as thin as possible) and we need to reset the brush after setting it to transparent to draw a non-filled ellipse. Mon Apr 14 00:58:47 GMT 2014 Olly Betts * lib/survex-aven.desktop,lib/survex-svxedit.desktop: Add "Keywords:" entry to .desktop files. Sat Mar 15 11:37:32 GMT 2014 Olly Betts * src/Makefile.am: Update findentrances comment. Sat Mar 15 11:26:12 GMT 2014 Olly Betts * NEWS: Update. Sat Mar 15 11:23:54 GMT 2014 Olly Betts * survex.spec.in: Update dependencies to wxWidgets3 packages. Sat Mar 15 10:21:17 GMT 2014 Olly Betts * survex.spec.in: Add proj-devel to BuildRequires. Thu Feb 27 23:15:19 GMT 2014 Olly Betts * configure.ac: Enable large file support, mostly to support filing systems which return 64 bit inode values, such as CIFS mounts. Mon Feb 17 22:48:33 GMT 2014 Olly Betts * configure.ac,src/moviemaker.cc: Fix to work with libav 10. Reported by Moritz Muehlenhoff in . Mon Feb 10 22:48:50 GMT 2014 Olly Betts * src/osdepend.c: Don't use isalpha() for checking drive letters as it's locale dependent. Mon Feb 10 22:48:29 GMT 2014 Olly Betts * lib/de.po,lib/de_CH.po: Translation updates. Mon Feb 10 21:23:12 GMT 2014 Olly Betts * src/mainfrm.cc: Fix measuring line to show change in altitude rather than altitude (broken in 1.2.11). Reported by Brian Clipstone. Thu Jan 30 02:10:41 GMT 2014 Olly Betts * src/filename.c: Comment tweak. Thu Jan 30 02:10:21 GMT 2014 Olly Betts * lib/bg.po,lib/de_CH.po,lib/id.po: Translation updates. Wed Jan 29 21:42:58 GMT 2014 Olly Betts * lib/: Translation updates. Wed Jan 29 21:03:14 GMT 2014 Olly Betts * src/moviemaker.cc: Fix to build when avcodec_free_frame() isn't available. Tue Jan 28 01:57:57 GMT 2014 Olly Betts * NEWS: More changes for 1.2.11. Tue Jan 28 01:34:15 GMT 2014 Olly Betts * lib/Makefile.am,lib/make-pixel-font,src/glbitmapfont.cc, src/glbitmapfont.h: Embed the font data for the first 256 Unicode codepoints into the compiled aven binary to reduce start up overhead. Any additional codepoints are loaded from a data file only if/when a character >= U+100 is actually needed (as before). Tue Jan 28 00:08:18 GMT 2014 Olly Betts * src/gfxcore.cc,src/gfxcore.h: No need to dynamically allocate m_Pens. Mon Jan 27 20:25:39 GMT 2014 Olly Betts * src/gfxcore.cc: Don't default to percent gradient. Mon Jan 27 11:44:49 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.11. Mon Jan 27 11:16:27 GMT 2014 Olly Betts * make_release: Run "make check" under valgrind. Mon Jan 27 11:15:17 GMT 2014 Olly Betts * src/cad3d.c,src/str.c,src/str.h: Rename s_cat_len() to s_catlen() for consistency with s_catchar(). Mon Jan 27 11:13:31 GMT 2014 Olly Betts * make_release: Add simple check for // comments in C sources. * make_release: Before release, build with -Werror to catch any warnings which may have been missed. Mon Jan 27 10:25:02 GMT 2014 Olly Betts * src/: Make cad3d remap control characters and spaces in station names when generating PLT output in the same way aven does. Mon Jan 27 07:43:27 GMT 2014 Olly Betts * NEWS: Update. Mon Jan 27 06:01:15 GMT 2014 Olly Betts * lib/,src/: Add support for showing percentage gradient in the tilt indicator in aven. Show the units (degrees, grads, or percent) for the tilt and bearing indicators. Mon Jan 27 05:40:04 GMT 2014 Olly Betts * src/mainfrm.cc: Fix GCC warnings. Mon Jan 27 05:37:02 GMT 2014 Olly Betts * src/glbitmapfont.cc,src/glbitmapfont.h: BitmapFont::get_text_extent() now uses the width of all glyphs, rather than assuming all those > BITMAPFONT_MAX_CHAR have width 16. Mon Jan 27 05:32:12 GMT 2014 Olly Betts * src/glbitmapfont.cc: Fix writing of Unicode characters above BITMAPFONT_MAX_CHAR (which is 256 currently). Mon Jan 27 00:44:30 GMT 2014 Olly Betts * src/gfxcore.cc: Try to work around measuring line redraw issues on Microsoft Windows by redrawing the whole window, which doesn't seem to be measurably slower. Mon Jan 27 00:21:30 GMT 2014 Olly Betts * lib/: Translation updates. Sun Jan 26 23:50:31 GMT 2014 Olly Betts * doc/manual.sgml: Add missing quantities to the list documented as accepted by *units: LEFT, RIGHT, UP/CEILING, DOWN/FLOOR (missing entirely); BACKCOMPASS/BACKBEARING, BACKCLINO/BACKGRADIENT (missing from the main list, mentioned in list of the units that can be set for them); COUNT (missing alternative name for COUNTER); DX/EASTING, DY/NORTHING, DZ/ALTITUDE (incorrectly listed as X, Y, Z). Reported by Jonny Prouty. Sun Jan 26 23:48:19 GMT 2014 Olly Betts * src/commands.c: If *units is used to set units for LEVEL, PLUMB, or POSITION, give an error rather than quietly ignore the attempt. * tests/: New regression testcase bad_units_qlist. Sun Jan 26 23:35:18 GMT 2014 Olly Betts * tests/bad_units_factor.svx,tests/cavern.tst: Test that "*units backclino 0 percent" gives an error about the factor being zero. * tests/Makefile.am,tests/bad_units_factor.out: Add expected output to make sure we're getting the errors we expect, not just the expected number of errors. Fri Jan 24 06:20:49 GMT 2014 Olly Betts * lib/de.po,lib/de_CH.po: Update. Fri Jan 24 05:08:19 GMT 2014 Olly Betts * src/gfxcore.cc: Don't crash with assertion failure when showing passages for a cave with no vertical extent. Reported by Jonny Prouty. Fri Jan 24 05:07:34 GMT 2014 Olly Betts * src/moviemaker.cc: Fix to build again with libav/ffmpeg. Tue Jan 23 19:52:21 GMT 2014 Olly Betts * src/gfxcore.cc: Simplify accounting for size of blobs on measuring line. Thu Jan 23 11:42:01 GMT 2014 Olly Betts * src/moviemaker.cc,src/moviemaker.h: Fix to actually build without libav/ffmpeg. Thu Jan 23 11:34:30 GMT 2014 Olly Betts * lib/,src/: Make all uses of unit names translatable. Tue Jan 21 12:23:06 GMT 2014 Olly Betts * lib/fr.po: Merge translation updates from Eric Madelaine. Tue Jan 21 11:31:22 GMT 2014 Olly Betts * lib/: More translation updates. Tue Jan 21 10:32:08 GMT 2014 Olly Betts * lib/Makefile.am,lib/generate-po-todo: Add script and makefile target to pick out the messages from each po file which need attention. Tue Jan 21 10:30:45 GMT 2014 Olly Betts * lib/survex.pot,src/mainfrm.cc: Allow "m" and "ft" suffixes to be translated. Tue Jan 21 04:14:55 GMT 2014 Olly Betts * doc/TODO.htm: Remove things which have now been done, and reorganise the rest. Tue Jan 21 03:48:07 GMT 2014 Olly Betts * src/message.c: On Microsoft Windows 2000 and newer, use GetUserDefaultUILanguage() to get the UI language to use. For older versions, continue to use GetUserDefaultLCID(). Tue Jan 21 02:29:06 GMT 2014 Olly Betts * lib/,src/avenprcore.cc,src/printwx.cc: Change term "info box" to "legend". Tue Jan 21 02:15:38 GMT 2014 Olly Betts * src/mainfrm.cc,src/mainfrm.h: If full screen, don't recreate the side panel when a new file is opened (e.g. via Ctrl+O). Mon Jan 20 05:33:04 GMT 2014 Olly Betts * NEWS: Update. Mon Jan 20 04:54:28 GMT 2014 Olly Betts * lib/bg.po,lib/de.po,lib/de_CH.po: More translation updates. Sun Jan 19 01:44:44 GMT 2014 Olly Betts * lib/,src/netskel.c,tests/: Drop "between nodes" from the progress messages while solving the survey network, as the extra words don't make the meaning clearer, and "node" doesn't mean exactly the same here as the summary of nodes printed at the end of processing, which is a bit confusing. Sun Jan 19 01:31:54 GMT 2014 Olly Betts * lib/: More translation updates. Sun Jan 19 00:51:33 GMT 2014 Olly Betts * lib/po-to-msg.pl: Fix menu shortcut check to allow for non-ASCII shortcuts. Remove code to check for menu shortcuts marked with '@' as we no longer do that. Sat Jan 18 23:24:47 GMT 2014 Olly Betts * buildmacosx.sh: Update to use wx 3.0.0, and add a checksum check for the downloaded wx sources. Thanks to David A. Riggs for his work on getting the Mac OS X build going with wx 3.0.0. Sat Jan 18 23:09:12 GMT 2014 Olly Betts * src/gla-gl.cc: Split log_fl_error helper function out of CHECK_GL_ERROR, which will reduce code size and also the number of deprecation warnings about gluErrorString on Mac OS X 10.9. Sat Jan 18 22:49:02 GMT 2014 Olly Betts * lib/en_US.po: Translate "elevation" to "profile" in a couple of places where we weren't. Sat Jan 18 22:48:01 GMT 2014 Olly Betts * src/message.c: Hook up Indonesian translation to be used when Windows is set to Indonesian. Sat Jan 18 22:47:20 GMT 2014 Olly Betts * lib/checkshortcut.pl: Fix shortcut checking to allow for non-ASCII shortcuts. Sat Jan 18 22:45:50 GMT 2014 Olly Betts * lib/Makefile.am,lib/bg.po,src/message.c: Add start of bulgarian translation, with messages take from therion. Fri Jan 17 07:39:48 GMT 2014 Olly Betts * src/printwx.cc: Include wx headers before ISO C/C++ ones, to try to fix build failure on OS X 10.9 with wx 3.0.0. Fri Jan 17 07:27:34 GMT 2014 Olly Betts * src/moviemaker.h: If we don't have libav or ffmpeg, omit all the member variables from class MovieMaker, to avoid "unused private field" warnings from clang. Fri Jan 17 07:22:32 GMT 2014 Olly Betts * src/: Use cast to void rather than assignment to self to suppress unused parameter warnings, as clang warns about the latter. Fri Jan 17 07:12:47 GMT 2014 Olly Betts * src/aboutdlg.cc: Use string::erase() rather than assigning the result of string::substr(). Thu Jan 16 03:58:18 GMT 2014 Olly Betts * lib/: Update pot and po files with current linenumber references. Thu Jan 16 03:57:55 GMT 2014 Olly Betts * src/printwx.cc: Fix incorrect message in comment. Thu Jan 16 03:46:23 GMT 2014 Olly Betts * lib/extract-msgs.pl: Fix to handle there being a comment before the comment with the message in. Thu Jan 16 03:17:24 GMT 2014 Olly Betts * lib/: Various translation updates. Thu Jan 16 03:15:10 GMT 2014 Olly Betts * lib/de.po,lib/de_CH.po: Move menu accelerator on "Farbschlüssel" from "ü" to "F", since the latter isn't used in that menu. Wed Jan 15 21:00:14 GMT 2014 Olly Betts * lib/: Fill in some missing translations from existing similar translations. Wed Jan 15 10:55:44 GMT 2014 Olly Betts * src/mainfrm.cc,src/mainfrm.h: Fix wxWidgets assertion when double clicking on an anonymous station. Reported by Kevin Dixon. Wed Jan 15 07:11:30 GMT 2014 Olly Betts * NEWS,configure.ac: Update for 1.2.10. Wed Jan 15 07:07:25 GMT 2014 Olly Betts * lib/ca.po,lib/de.po: Mark altered message as fuzzy in languages I failed to before. Wed Jan 15 06:25:10 GMT 2014 Olly Betts * NEWS: Update. Wed Jan 15 06:13:44 GMT 2014 Olly Betts * src/img.c: Simplify reading of labels in 3d v1 and v2 files. Wed Jan 15 06:11:12 GMT 2014 Olly Betts * lib/,src/cavernlog.cc: If we fail to start the external editor, throw up an error box. Wed Jan 15 05:58:31 GMT 2014 Olly Betts * src/img.c: Pass pimg->buf_len rather than literal 257. Wed Jan 15 00:23:34 GMT 2014 Olly Betts * src/img.c: Remove pointless "future expansion" comment from img_read_item_ancient(). Wed Jan 15 00:22:22 GMT 2014 Olly Betts * src/img.c: Tweak recursive calls in img_read_item_ancient() and img_write_item_ancient() to directly call the same function. Wed Jan 15 00:15:30 GMT 2014 Olly Betts * src/img.c,src/useful.h: Fix some glibc fortify source warnings. Wed Jan 15 00:13:27 GMT 2014 Olly Betts * src/img.c: Make 4 internal functions static. Tue Jan 14 21:57:03 GMT 2014 Olly Betts * src/printwx.cc: Minor code refactor. Tue Jan 14 21:51:58 GMT 2014 Olly Betts * NEWS: Update. Tue Jan 14 21:39:34 GMT 2014 Olly Betts * lib/en_US.po: Add missing translation. Tue Jan 14 21:25:01 GMT 2014 Olly Betts * src/printwx.cc: Fix crash on "File->Print" or "File->Export" under Windows XP, reported by Brian Clipstone. Tue Jan 14 21:23:10 GMT 2014 Olly Betts * src/aven.cc: Simplify handling of command line under __WXMSW__, fixing error if run with no parameters. Tue Jan 14 21:17:38 GMT 2014 Olly Betts * configure.ac,src/img.c: Only use _putenv_s() under MSVC - mingw doesn't provide it. Tue Jan 14 21:14:51 GMT 2014 Olly Betts * make_release: Turn on optimisation when building aven for Microsoft Windows. Tue Jan 14 04:17:10 GMT 2014 Olly Betts * src/guicontrol.cc: If dragging with more than one mouse button held down, releasing one causes another which is still held down to take effect. Tue Jan 14 03:33:38 GMT 2014 Olly Betts * src/guicontrol.cc: Fix assertion if two mouse buttons are held down at the same time. Reported by Brian Clipstone. Tue Jan 14 03:22:54 GMT 2014 Olly Betts * src/img.c,src/mainfrm.cc: Although these are often referred to as "CMAP .XYZ files", it seems that actually, the extension .XYZ isn't used, rather .SHT (shot variant, produced by CMAP v16 and later), .UNA (unadjusted) and .ADJ (adjusted) extensions are. Since we've long checked for .XYZ, we continue to do so in case anyone is relying on it, but also check for the other extensions. Tue Jan 14 03:20:03 GMT 2014 Olly Betts * buildmacosx.sh,configure.ac,doc/manual.sgml: Update references to Survex 1.1 which should be to 1.2. Tue Jan 14 03:14:31 GMT 2014 Olly Betts * doc/manual.sgml: Note the station length limit Smaps used. Tue Jan 14 02:55:02 GMT 2014 Olly Betts * tests/expobug.svx: Fix comment typo. Tue Jan 14 02:52:52 GMT 2014 Olly Betts * src/imgtest.c: Fix printf format to actually match types of parameters. Tue Jan 14 02:52:31 GMT 2014 Olly Betts * src/gpx.cc: Fix comment typo. Tue Jan 14 02:48:59 GMT 2014 Olly Betts * src/: Pass the numeric datestamp to ExportFilter::header(), and use it to set a timestamp in exported GPX files. Tue Jan 14 01:18:42 GMT 2014 Olly Betts * src/datain.c: Fix NULL pointer dereference when processing Compass DAT file without 'SURVEY DATE:'. Tue Jan 14 00:40:06 GMT 2014 Olly Betts * src/: Add new "datestamp_numeric" field to struct img giving the datestamp as a time_t in UTC (or (time_t)-1 if there's no datestamp or we failed to convert it). For .3d >= v8, this field is reliable. We attempt to convert date strings in .3d <= v7 and CMAP XYZ files, but may get the timezone wrong. Tue Jan 14 00:29:35 GMT 2014 Olly Betts * src/img.c: Fix my_strcasecmp() to handle top-bit set characters better. Mon Jan 13 04:20:11 GMT 2014 Olly Betts * src/gpx.cc: Don't try to write the title if it isn't set or is empty. Mon Jan 13 04:09:27 GMT 2014 Olly Betts * src/export.cc: If the survey has a title, add it as a top-level element to exported SVG files. Mon Jan 13 04:08:11 GMT 2014 Olly Betts <olly@survex.com> * src/export.cc: Escape '<', '>', and '&' in labels in exported SVG files. Mon Jan 13 04:02:26 GMT 2014 Olly Betts <olly@survex.com> * src/: Pass the datestamp from the 3d file to the export code. Mon Jan 13 04:00:54 GMT 2014 Olly Betts <olly@survex.com> * src/avenprcore.cc,src/printwx.cc: Don't bother looking up the printer page setup info when exporting. Wed Jan 08 04:50:10 GMT 2014 Olly Betts <olly@survex.com> * doc/HACKING.htm: Document how to configure wxWidgets 3.0.0 for mingw cross-build. Wed Jan 08 04:11:32 GMT 2014 Olly Betts <olly@survex.com> * NEWS,configure.ac: Update for 1.2.9. Wed Jan 08 03:57:39 GMT 2014 Olly Betts <olly@survex.com> * lib/: Add "Language:" headers to .po files. Wed Jan 08 02:17:44 GMT 2014 Olly Betts <olly@survex.com> * src/img.c: In non-hosted mode, don't define GETC and PUTC if they're already defined, to allow easy overriding with getc_unlocked() and putc_unlocked(). Wed Jan 08 02:13:27 GMT 2014 Olly Betts <olly@survex.com> * src/Makefile.am,src/imgtest.c: Add compile test that img.c and img.h work in non-hosted mode. Wed Jan 08 01:14:42 GMT 2014 Olly Betts <olly@survex.com> * doc/cavern.sgml: Document --3d-version in cavern man page. Wed Jan 08 01:05:34 GMT 2014 Olly Betts <olly@survex.com> * src/moviemaker.cc: Set rc_buffer_size to avoid warning from libav when exporting MPEG. Tue Jan 07 23:09:53 GMT 2014 Olly Betts <olly@survex.com> * src/moviemaker.cc: Fix GCC warnings. Tue Jan 07 23:08:21 GMT 2014 Olly Betts <olly@survex.com> * src/img.c: In non-hosted mode, check that int is at least 32 bits, and if not, use long. In practice, platforms with 16 bit int are mostly obsolete, but it's not hard to be portable here. Tue Jan 07 22:05:58 GMT 2014 Olly Betts <olly@survex.com> * src/msvc/config.h.in: Update to INT16_T to int16_t and INT32_T to int32_t. AFAIK, building with MSVC hasn't been tested for a long time, so it's likely more fixes will be needed. Tue Jan 07 21:55:27 GMT 2014 Olly Betts <olly@survex.com> * configure.ac: Don't call AC_C_CONST - C compilers without 'const' support haven't been relevant for years. Thu Oct 31 12:08:07 GMT 2013 Olly Betts <olly@survex.com> * lib/: Update translations from launchpad and from existing similar messages. Tue Oct 29 23:47:57 GMT 2013 Olly Betts <olly@survex.com> * src/moviemaker.cc: Fix to call avcodec_free_frame() correctly. Tue Oct 29 08:58:56 GMT 2013 Olly Betts <olly@survex.com> * NEWS,configure.ac: Update for 1.2.8. Tue Oct 29 08:10:45 GMT 2013 Olly Betts <olly@survex.com> * src/: Hook up to pass "input_projection" from .aven config file through to GPX export code. Sat Oct 26 06:35:52 GMT 2013 Olly Betts <olly@survex.com> * src/gfxcore.cc: Another tweak to use RefreshRect() rather than Refresh() for slightly simpler code. Fri Oct 25 21:08:53 GMT 2013 Olly Betts <olly@survex.com> * src/gpx.cc: Use fputs rather than fprintf for constant strings. Fri Oct 25 21:07:57 GMT 2013 Olly Betts <olly@survex.com> * src/gpx.cc,src/gpx.h,src/printwx.cc: Add support for exporting legs as tracks in GPX. Fri Oct 25 06:14:38 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: Swap the "Elements" and "View" boxes in the print and export dialogs, as that works much better when the "View" box is hidden. Fri Oct 25 06:11:59 GMT 2013 Olly Betts <olly@survex.com> * lib/survex.pot,src/export.cc,src/export.h,src/printwx.cc: Add "Origin in centre" and "Full coordinates" options to export - the latter fixes #10. GPX and PLT output force "full coordinates". Wed Oct 23 21:47:07 GMT 2013 Olly Betts <olly@survex.com> * src/gfxcore.cc: Tweak to use RefreshRect() rather than Refresh() for slightly simpler code. Wed Oct 23 21:46:13 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c: Show dates for XSECT. Wed Oct 23 06:46:39 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: Fix export and (the built-in) print preview to actually use the options selected in the dialog rather than those set when the dialog was created. Wed Oct 23 06:30:05 GMT 2013 Olly Betts <olly@survex.com> * src/: Hook up GPX export options to export entrances, fixed points, and/or exported points, and specify coloured pin symbols for these types of stations. These options now default to what's being shown in the survey view, like other export options. GPX export "creator" how includes the Survex version and website URL, and the survey title is includes as a <name> tag inside the <gpx> tag. Wed Oct 23 04:38:31 GMT 2013 Olly Betts <olly@survex.com> * src/guicontrol.cc: Fix assertion failure when double-clicking on the survey with wx2.9. Tue Oct 22 06:01:05 GMT 2013 Olly Betts <olly@survex.com> * src/: Rename internal references to "show splays" to just "splays" to reflect the change in the menu item name. Tue Oct 22 05:55:55 GMT 2013 Olly Betts <olly@survex.com> * lib/survex.pot,src/: Hide the "View" box for GPX export. Add checkboxes for "Entrances", "Fixed Points" and "Exported Stations" for GPX export (currently non-functional). Prepare for allowing text height, marker size, and grid spacing to be set from aven (as cad3d allows). Mon Oct 21 01:10:04 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc: Update to call img_error2msg() on the error code returned by img_error(). Sat Oct 19 18:28:49 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: Fix segfault in "File->Export" if an export format isn't stored in ".aven". Sat Oct 19 17:39:49 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/img.c: Use lround() instead of round(), and make the tests around whether we use the library function or the our fallback implementation saner. Wed Sep 18 00:26:33 GMT 2013 Olly Betts <olly@survex.com> * src/aven.cc: Fix to build with wx 2.9.5 with wx2.8 compatibility disabled. Tue Sep 17 23:57:02 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc: Make the Presentation->Play menu item a checkbox, to avoid a warning with wxMSW 2.9.5. Reported by Brian Clipstone. Tue Sep 17 23:56:06 GMT 2013 Olly Betts <olly@survex.com> * src/guicontrol.cc,src/guicontrol.h: Rename scale/rotate lock constants to have a "lock_" prefix. Tue Sep 17 23:38:10 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc: Make right click in an empty presentation mark the current position and open it to edit, instead of crashing. Tue Sep 17 23:37:00 GMT 2013 Olly Betts <olly@survex.com> * src/gfxcore.cc: Don't try to close the movie if we aren't producing one. Tue Sep 10 00:21:53 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/moviemaker.cc: Use avcodec_free_frame() if it's available. Mon Sep 09 11:36:00 GMT 2013 Olly Betts <olly@survex.com> * src/cad3d.c: Correct long option names in code comment. Mon Sep 09 11:33:20 GMT 2013 Olly Betts <olly@survex.com> * src/cad3d.c: Make --marker-size work for Skencil and SVG output. Mon Sep 09 07:01:57 GMT 2013 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/moviemaker.cc,src/moviemaker.h: Improve reporting of errors during the process of exporting a movie. Mon Sep 09 06:38:33 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/moviemaker.cc,src/moviemaker.h: Update movie export code to work with latest libav API. Mon Sep 09 05:14:24 GMT 2013 Olly Betts <olly@survex.com> * Makefile.am,doc/HACKING.htm,lib/,survex.iss.in: Upgrade to newer innosetup version. Upgrade details of how to do a Microsoft Windows build. Mon Sep 09 04:19:36 GMT 2013 Olly Betts <olly@survex.com> * make_release: Prefer a hand-installed 2.9 mingw build of wx to a packaged 2.8 build. Mon Sep 09 04:18:18 GMT 2013 Olly Betts <olly@survex.com> * src/img.c,src/netbits.c: Fix // comments in C code for portability to pre-C99 compilers which don't support these as an extension. Mon Sep 09 04:12:57 GMT 2013 Olly Betts <olly@survex.com> * src/aven.cc: Fix to build with wxMSW 2.9.5. Mon Sep 09 04:10:48 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/Makefile.am: Probe for libproj. Fri Sep 06 04:18:23 GMT 2013 Olly Betts <olly@survex.com> * NEWS,doc/cad3d.sgml,lib/,src/: The "Sketch" vector drawing program got renamed to "Skencil" some time ago, so update all references in code and documentation. cad3d has a new --skencil option to specify this output format, but --sketch is still recognised for compatibility. Fri Sep 06 03:39:16 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: Default to exporting in the export format used last time. Fri Sep 06 03:27:21 GMT 2013 Olly Betts <olly@survex.com> * lib/de_CH.po,lib/it.po,lib/sk.po: Minor translation updates. Thu Sep 05 09:50:23 GMT 2013 Olly Betts <olly@survex.com> * lib/,src/: Add a format drop down to the export dialog, and only show fields which are meaningful and supported for a particular export format. Thu Sep 05 04:21:40 GMT 2013 Olly Betts <olly@survex.com> * survex.iss.in: Newer innosetup no longer supports MinVersion. Thu Sep 05 04:20:36 GMT 2013 Olly Betts <olly@survex.com> * lib/,survex.iss.in: Add translations for the Windows installer for all the languages we have any translations of Survex itself for. Mon Sep 02 21:03:50 GMT 2013 Olly Betts <olly@survex.com> * lib/,src/: Rework findentrances into GPX export for aven. Mon Sep 02 02:17:49 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Improve fputsnl() for non-HOSTED mode to return a value. Mon Sep 02 02:17:18 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Use osnew() to simplify code a little. Mon Sep 02 01:45:52 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Don't segfault on img_close() in non-hosted mode. Mon Sep 02 00:27:29 GMT 2013 Olly Betts <olly@survex.com> * NEWS,src/img.c: img.c can now be compiled as C++ as well as as C. Mon Sep 02 00:17:36 GMT 2013 Olly Betts <olly@survex.com> * NEWS,src/img.c: Add missing definition of max() macro when built for use outside of Survex. Mon Sep 02 00:11:36 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Don't duplicate the IMG_API_VERSION defaulting logic from img.h as we get it just by including img.h first. Mon Sep 02 00:10:34 GMT 2013 Olly Betts <olly@survex.com> * src/: IMG_HOSTED no longer affects the img API at all. Fri Aug 23 08:06:18 GMT 2013 Olly Betts <olly@survex.com> * NEWS,lib/,src/netskel.c: Tweak cavern .err file output to not lose the space in front of certain statistics when the value gets large. Wed Aug 21 21:14:03 GMT 2013 Olly Betts <olly@survex.com> * NEWS,lib/,src/matrix.c,src/out.h,tests/calibrate_clino.out: Don't report "Solving to find x coordinates" as we actually find y and z in the same operation, and as a progress message it is redundant with "Solving %d simultaneous equations" anyway. Fri Aug 09 10:23:24 GMT 2013 Olly Betts <olly@survex.com> * NEWS,src/printwx.cc: Need to call TransferDataFromWindow() for the validators to get called and update the boolean flag settings mask. Fri Aug 02 13:04:39 GMT 2013 Olly Betts <olly@survex.com> * NEWS,src/readval.c,tests/cmd_alias.out: Fix handling of anonymous wall stations ('..' by default) to implicitly set the SPLAY leg flag, as was intended. Sat Jul 27 10:08:46 GMT 2013 Olly Betts <olly@survex.com> * tests/Makefile.am: Distribute files for normal_bad testcase. Sat Jul 27 09:41:34 GMT 2013 Olly Betts <olly@survex.com> * NEWS,configure.ac: Update for 1.2.7. Sun Jul 21 18:03:58 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc: Speed up loading a .3d file with cross-sections by using a map to convert station names to positions. Sun Jul 21 16:12:25 GMT 2013 Olly Betts <olly@survex.com> * doc/TODO.htm: Note that dump3d needs documenting. Sun Jul 21 16:09:24 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,debian/survex.install,src/Makefile.am: Build and package dump3d as standard - it's useful for grabbing info from 3d files in scripts. Thu Jul 18 03:54:45 GMT 2013 Olly Betts <olly@survex.com> * lib/de.po: Merge German translation updates from launchpad. Wed Jul 17 12:38:39 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm,src/img.c: Move the DATE and ERROR codes in 3d v8 to leave a large contiguous block of codes available. Wed Jul 17 12:29:33 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Mask out the bit used to indicate no label change from the returned leg flags. Wed Jul 17 11:13:37 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm,src/img.c: The prefix is often unchanged from one leg to the next, so use a spare flag to compactly indicate that there's no label change. Tue Jul 16 12:04:55 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm,src/img.c: More work toward v8 of 3d format. Tue Jul 16 11:33:34 GMT 2013 Olly Betts <olly@survex.com> * doc/TODO.htm: The data style of legs is now stored in the 3d file, so remove "flag nosurvey legs in .3d file" from todo list. Tue Jul 16 11:33:04 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c: Report the data style of legs. Tue Jul 16 11:32:13 GMT 2013 Olly Betts <olly@survex.com> * src/cad3d.c: Check for errors from img_rewind() and report them. Tue Jul 16 07:54:52 GMT 2013 Olly Betts <olly@survex.com> * tests/cavern.tst: Run diffpos <expected> <actual> so the reports of 'Added' and 'Deleted' stations are the more natural way round. Tue Jul 09 22:59:48 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm: Formatting tweaks. Tue Jul 09 13:36:35 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm,doc/TODO.htm,src/img.c: Add an explicit flag for 'this is an extended elevation' to 3d v8. Tue Jul 09 13:24:29 GMT 2013 Olly Betts <olly@survex.com> * doc/3dformat.htm,doc/TODO.htm,src/img.h: Start on v8 of the 3d format - the timestamp is stored as seconds since 1970. Tue Jul 09 12:41:51 GMT 2013 Olly Betts <olly@survex.com> * src/commands.c: Fix ordering of the style masks to reflect swapping of STYLE_NOSURVEY and STYLE_PASSAGE. Tue Jul 09 11:14:28 GMT 2013 Olly Betts <olly@survex.com> * doc/TODO.htm: Update. Tue Jul 09 10:31:50 GMT 2013 Olly Betts <olly@survex.com> * src/img.h: Remove unnecessary include of "useful.h" in IMG_HOSTED mode. Tue Jul 09 08:48:35 GMT 2013 Olly Betts <olly@survex.com> * src/cavern.h,src/img.h: Renumber STYLE_PASSAGE and STYLE_NOSURVEY so that the style constants we want to pass to img are contiguously numbered. Sun Jul 07 13:03:56 GMT 2013 Olly Betts <olly@survex.com> * src/img.h: Just make fRead always int, eliminating IMG_HOSTED conditional. Sun Jul 07 12:45:11 GMT 2013 Olly Betts <olly@survex.com> * src/extend.c,src/img.c,src/img.h: Repurpose the long unused fBinary parameter to img_open_write() as a flags parameter, and add img_FFLAG_EXTENDED to specify that this is an extended elevation, in place of appending " (extended)" to the title. Internally we still append this to the title (and remove it upon reading), but in the 3d v8 format, the flags will be stored explicitly in the file. Sun Jul 07 12:22:32 GMT 2013 Olly Betts <olly@survex.com> * src/img.h: Add comments for the lists of "Leg flags" and "Station flags". Sun Jul 07 12:20:29 GMT 2013 Olly Betts <olly@survex.com> * NEWS,src/dump3d.c,src/img.h: Drop img_FLAG_NOSURVEY - it's redundant now we're going to store the style of each leg, and it hasn't yet been in a release. Sun Jul 07 12:14:23 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c: Report if the file is an extended elevation. Sun Jul 07 12:12:24 GMT 2013 Olly Betts <olly@survex.com> * src/: Track the data style of each leg, and pass it in to img - it's not yet stored in the .3d file, but now it is easily available so it can be. Fri Jul 05 13:17:24 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,doc/3dformat-old.htm: Split off a copy of the current 3dformat document - v8 will feature significant changes, so it will be clearer to document it separately. Fri Jul 05 13:11:25 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c,src/netskel.c: The fBinary parameter of img_open_write() has been unused for years, so stop passing fTrue. Tue Jul 02 12:04:09 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Revert to putting a human readable timestamp string in v7 and older files. Tue Jul 02 11:01:41 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c: Show only 2 decimal places on coordinates and passage dimensions. Wed Jun 12 13:35:21 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: Implement a copy ctor for BitValidator in the same way that wxGenericValidator does. Older GCC seems to need such a copy ctor to exist to compile the uses of BitValidator in printwx.cc. Wed Jun 12 13:34:52 GMT 2013 Olly Betts <olly@survex.com> * src/Makefile.am: Ship gdtconvert and gen_img2aven. Wed Jun 12 13:33:38 GMT 2013 Olly Betts <olly@survex.com> * make_release: Tweak 'mingw' building to look for a suitable wx-config and get the C and C++ compilers to use using its --cc and --cxx flags. Tue Jun 11 12:06:08 GMT 2013 Olly Betts <olly@survex.com> * src/printwx.cc: wxValidator subclasses shouldn't have a copy ctor, so give BitValidator an unimplemented private copy ctor, and use the normal ctor instead to implement the Clone() method. Tue Jun 11 11:51:13 GMT 2013 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Mon Jun 10 11:50:18 GMT 2013 Olly Betts <olly@survex.com> * lib/launchpad-merge-po: New script to eliminate unwanted differences introduced by launchpad. * lib/Makefile.am: Make launchpad-diff target use launchpad-merge-po and skip files missing in the launchpad export. Mon Jun 10 11:47:37 GMT 2013 Olly Betts <olly@survex.com> * lib/unlaunchpad-po: Normalise dates in PO headers. Mon Jun 10 07:23:07 GMT 2013 Olly Betts <olly@survex.com> * lib/Makefile.am,lib/unlaunchpad-po: Add "launchpad-diff" make target to assist with merging in translation changes from launchpad. Sun Jun 09 00:04:37 GMT 2013 Olly Betts <olly@survex.com> * src/img.c: Handle .pos files containing unnamed stations - don't suck the next line in as the station name, and set img_SFLAG_ANON for them. Sat Jun 08 15:12:25 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix mapping of flags when loading a .3d file. Sat Jun 08 15:07:05 GMT 2013 Olly Betts <olly@survex.com> * .gitignore,src/gen_img2aven: Commit script to generate img2aven.h. Sat Jun 08 14:20:45 GMT 2013 Olly Betts <olly@survex.com> * lib/: Update line number references and merge message changes from survex.pot to the .po files. Sat Jun 08 14:17:52 GMT 2013 Olly Betts <olly@survex.com> * lib/Makefile.am,lib/merge-po: Add "merge-pos" target to merge in new messages and updates to comments from survex.pot to the .po files. Sat Jun 08 14:10:16 GMT 2013 Olly Betts <olly@survex.com> * tests/: Commit files for new tests. Sat Jun 08 13:40:38 GMT 2013 Olly Betts <olly@survex.com> * src/img.c,src/img.h,src/mainfrm.cc: Store the 'processed at' timestamp in the .3d file as seconds since 1970 rather than as a human readable string. Sat Jun 08 06:19:17 GMT 2013 Olly Betts <olly@survex.com> * src/commands.c: Correct comment about *alias. Sat Jun 08 06:01:38 GMT 2013 Olly Betts <olly@survex.com> * lib/de.po,lib/de_CH.po,lib/en_US.po: Update translations. Thu Jun 06 10:56:22 GMT 2013 Olly Betts <olly@survex.com> * lib/,src/: Show splay legs faded by default, with menu options to hide them or show them like other legs. Tue Jun 04 12:37:03 GMT 2013 Olly Betts <olly@survex.com> * doc/manual.sgml,lib/survex.pot,src/,tests/Makefile.am, tests/cavern.tst: Add more anonymous station types - a double separator ('..' by default) is an anonymous wall point at the end of an implicit splay (c.f. '.' being a non-wall point), and a triple separator ('...' by default) is an anonymous point (with nothing special about the leg). New *alias command allows '-' to be mapped to '..' to match pocket topo conventions. 3d file format now support a 'WALL' station flag. Tue Jun 04 12:19:31 GMT 2013 Olly Betts <olly@survex.com> * src/Makefile.am: Regenerate gradient.pov is gdtconvert changes. Sun Jun 02 12:51:46 GMT 2013 Olly Betts <olly@survex.com> * src/readval.c,tests/: Report column numbers as well as line numbers for more cavern errors and warnings. Add more testcases. If the argument to *include has an opening double quote but the closing double quote is missing, then skip trying to open the file. Sun Jun 02 10:52:26 GMT 2013 Olly Betts <olly@survex.com> * src/cavernlog.cc: Remove useless extra quoting when invoking vim. Fri May 31 13:51:16 GMT 2013 Olly Betts <olly@survex.com> * src/netskel.c: Use fputs not printf to write literal string to avoid GCC format security warning (the string can never contain a '%' but the compiler can't see that). Fri May 31 13:08:01 GMT 2013 Olly Betts <olly@survex.com> * src/datain.c: Variable 'len' in compile_error_token was static for no good reason. Fri May 31 12:32:22 GMT 2013 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/mainfrm.h: Skip anonymous stations. Fri May 31 12:17:56 GMT 2013 Olly Betts <olly@survex.com> * src/,tests/: Anonymous stations no longer have a made up unique name, and are marked with a new ANON flag in .3d files. Mon May 27 11:24:18 GMT 2013 Olly Betts <olly@survex.com> * configure.ac: Update copyright date. Sun May 26 13:05:34 GMT 2013 Olly Betts <olly@survex.com> * src/: New station flag SFLAGS_USED to mark a station as "used" so we don't issue "unused fixed point" warnings about it - previously we set 'shape' to be negative to indicate this, but that required us to handle that whenever we looked at or updated shape. Sun May 26 11:47:06 GMT 2013 Olly Betts <olly@survex.com> * configure.ac: Fix sizeof(wxChar) test to work for wx2.9. Fri May 10 05:55:54 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/gla-gl.cc,src/glbitmapfont.h: It seems we need to include GL/gl.h before we can safely include GL/glext.h (at least on Debian wheezy). Fri May 10 05:43:09 GMT 2013 Olly Betts <olly@survex.com> * configure.ac: Fix wxChar test to work in a non-cross-compiled build. Wed May 08 22:38:56 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/glbitmapfont.cc: Check sizeof(wxChar) at configure time, so we can avoid a warning when sizeof(wxChar)==2 (which is the case under mingw). Wed May 08 05:54:23 GMT 2013 Olly Betts <olly@survex.com> * lib/en_US.po,lib/survex.pot: Update. Tue May 07 23:30:26 GMT 2013 Olly Betts <olly@survex.com> * src/aven.cc: Don't crash trying to report an error after the app object has been created but before the frame window has. Sun Jan 06 19:31:30 GMT 2013 Olly Betts <olly@survex.com> * doc/manual.sgml: "surface topology" -> "surface topography". Sun Jan 06 08:07:22 GMT 2013 Olly Betts <olly@survex.com> * lib/Makefile.am: Remove launchpad-tarball target - changes now get picked up by launchpad automatically via a bzr mirror of the git repo. Sun Jan 06 05:45:10 GMT 2013 Olly Betts <olly@survex.com> * lib/survex.pot,src/dump3d.c: Add --show-dates/-d to --help output. Sun Jan 06 05:42:07 GMT 2013 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Fix matching quote check to really allow for using « and » in a translation. Sun Jan 06 05:23:48 GMT 2013 Olly Betts <olly@survex.com> * src/dump3d.c: Report img_STOP as STOP rather than CODE_0xffffffff. Thu Jan 03 01:08:28 GMT 2013 Olly Betts <olly@survex.com> * src/: Use wxValidator to simplify keeping svxPrintDlg member variables and fields in the dialog in sync. Wed Jan 02 20:49:20 GMT 2013 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/glbitmapfont.cc: Add checks for errors when reading the font file. Wed Jan 02 20:48:22 GMT 2013 Olly Betts <olly@survex.com> * configure.ac,src/img.c: Avoid warning about redeclaration of round(). Wed Jan 02 09:11:41 GMT 2013 Olly Betts <olly@survex.com> * src/readval.c: Whitespace tweak. Wed Jan 02 09:10:57 GMT 2013 Olly Betts <olly@survex.com> * src/netartic.c: Use TSTBIT(w, x) instead of w & BIT(x). Wed Jan 02 09:10:30 GMT 2013 Olly Betts <olly@survex.com> * src/listpos.c: Fix compiler warning. Wed Jan 02 09:04:58 GMT 2013 Olly Betts <olly@survex.com> * lib/survex.pot,src/,tests/: Add support for anonymous stations, which are indicated by a station name of '.'. Sat Dec 29 18:50:07 GMT 2012 Olly Betts <olly@survex.com> * src/export.cc: Implement export of passage info for DXF (untested). Sat Dec 29 05:29:31 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/printwx.cc,src/printwx.h: Default the export/print settings for passage related things to the "tubes" setting in the OpenGL view. Sat Dec 29 05:11:20 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Export of passage detail now works before we have displayed tubes in the OpenGL view. Sat Dec 29 05:09:54 GMT 2012 Olly Betts <olly@survex.com> * src/avenprcore.cc,src/avenprcore.h,src/printwx.cc: Do away with the separate bool flags for each thing we can show in printing and export and just use the "show_mask" flags. Fri Dec 28 23:30:55 GMT 2012 Olly Betts <olly@survex.com> * lib/: Fill in new messages from existing translations where possible. Fri Dec 28 21:03:33 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge from survex.pot to .po files. Fri Dec 28 22:21:50 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Update locations. Fri Dec 28 22:19:14 GMT 2012 Olly Betts <olly@survex.com> * src/printwx.cc: Disable passage-related export options when in a tilted view. Hook up "Cross-sections" to printing on left and right markers. Fri Dec 28 06:30:17 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot,src/: Add options to export dialog to control showing cross-sections, walls and passages. Fri Dec 28 05:53:56 GMT 2012 Olly Betts <olly@survex.com> * src/: Implement exporting of passages (ticket#4) for SVG. Currently it is always on (I'll update the Export dialog shortly). Wed Dec 26 22:21:10 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot,src/commands.c,src/readval.c,src/readval.h,tests/: Add new warning if *begin SURVEY has a separator character in SUVERY. Wed Dec 26 07:29:42 GMT 2012 Olly Betts <olly@survex.com> * lib/en_US.po: Fix clashing menu accelerator. Wed Dec 26 01:46:06 GMT 2012 Olly Betts <olly@survex.com> * src/readval.c: Fix typo in previous change. Tue Dec 25 23:04:06 GMT 2012 Olly Betts <olly@survex.com> * src/readval.c,tests/: Demote errors about invalid dates to warnings, since we've accepted *date for ages without any checks on the value, and so existing datasets probably contain invalid dates and dates in other formats. (ticket#19) Tue Dec 25 22:03:20 GMT 2012 Olly Betts <olly@survex.com> * src/listpos.c: But always leave space for at least 4 digits, so we give exactly the same output as before unless we need the extra width. Mon Dec 24 08:44:04 GMT 2012 Olly Betts <olly@survex.com> * src/listpos.c: Adjust width of node stats table to fit longest count. Sun Dec 23 07:20:53 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Wrap TRANSLATORS comment. Sun Dec 23 07:20:19 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Add missing "c-format" annotation. Sun Dec 23 07:19:22 GMT 2012 Olly Betts <olly@survex.com> * lib/sk.po: Resolve a couple of inconsistencies in translation of similar messages by asking Martin Sluka. Sun Dec 23 05:36:38 GMT 2012 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Thu Dec 20 04:31:22 GMT 2012 Olly Betts <olly@survex.com> * lib/zh_CN.po: Translate another message. Thu Dec 20 03:28:02 GMT 2012 Olly Betts <olly@survex.com> * lib/zh_CN.po: Add space after colon. Thu Dec 20 03:26:15 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Add more TRANSLATORS comments about terminology. Thu Dec 20 03:25:45 GMT 2012 Olly Betts <olly@survex.com> * lib/it.po: Merge two new translations from launchpad. Thu Dec 20 03:24:52 GMT 2012 Olly Betts <olly@survex.com> * lib/en_US.po: Correct "leg" to "shot" in a few places, and translate "Anticlockwise" to "Counterclockwise". Wed Dec 19 10:41:55 GMT 2012 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Remove commented out code to find uses, which is now handled by a separate script. Wed Dec 19 10:36:59 GMT 2012 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Update to read message numbers from references. Tue Dec 18 12:00:40 GMT 2012 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/gla.h: Update to use wxGLContext to avoid deprecation warnings from wx 2.9. Tue Dec 18 11:40:34 GMT 2012 Olly Betts <olly@survex.com> * src/moviemaker.cc: Fix unused parameter warnings when we don't have libavformat available. Tue Dec 18 11:39:40 GMT 2012 Olly Betts <olly@survex.com> * src/glbitmapfont.cc: Fix warning about ambiguous else from wxLogError macro. Tue Dec 18 11:32:32 GMT 2012 Olly Betts <olly@survex.com> * INSTALL,lib/INSTALL.OSX,src/,survex.spec.in: Require at least wxWidgets 2.8.0 - it was released just over 6 years ago now, and the wx developers consider even 2.8 to be rather long in the tooth. I haven't test build with wx 2.6 for more than a year and it's no longer packaged for Debian. Dropping support for older wx allows a number of workarounds to be removed. Tue Dec 18 11:05:24 GMT 2012 Olly Betts <olly@survex.com> * src/: Fix uses of some wx features which are deprecated in wx2.9. Tue Dec 18 10:50:28 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Fix OnSize handling so we can just call event.Skip() (which is the intended approach) rather than explicitly calling the parent class OnSize() method from the subclass OnSize() method. Tue Dec 18 08:23:14 GMT 2012 Olly Betts <olly@survex.com> * src/aven.cc: Fix MSW build to not rely on a GCC extension. Tue Dec 18 07:20:16 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge changes from template. Tue Dec 18 07:06:41 GMT 2012 Olly Betts <olly@survex.com> * lib/,src/Makefile.am,src/gettexttomsg.pl: Eliminate po_codes and just store the message numbers as the line number in a fake source reference to file 'n'. Tue Dec 18 04:13:18 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes,lib/survex.pot: Merge in updated source line numbers. Tue Dec 18 04:11:09 GMT 2012 Olly Betts <olly@survex.com> * lib/extract-msgs.pl,src/Makefile.am: Don't include version in 'Project-Id-Version'. Tue Dec 18 03:13:16 GMT 2012 Olly Betts <olly@survex.com> * lib/: Set Project-Id-Version to just "survex" - the version part just complicates things unnecessarily for our usage. Tue Dec 18 03:00:04 GMT 2012 Olly Betts <olly@survex.com> * tests/Makefile.am,tests/aven.tst: Add new testsuite script (aven.tst) which currently has regression tests for the recently fixed segfault when aven didn't have messages for the requested language. Tue Dec 18 02:19:08 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: Only use ASCII for the handful of hardcoded messages we need for errors loading message files, as it's probably more likely the wrong encoding will be set in such cases. Tue Dec 18 02:02:57 GMT 2012 Olly Betts <olly@survex.com> * src/,tests/: Report column numbers as well as line numbers for some cavern errors and warnings, and update aven's cavern log parser to handle these. Simplify handling of quantity lists to only recognise 'DEFAULT' as the first item. Add more testcases, expand some existing testcases, and expected output for more. Mon Dec 17 22:19:21 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: If we don't find the message file, only give an error if it was specified with SURVEX_LANG, since that is an explicit instruction to Survex, whereas LANG, LC_ALL and LC_MESSAGES are essentially system "preferred locale" settings. * src/aven.cc: Fix reporting of errors from message.c not to crash if the wxApp object hasn't yet been intitialised, and to convert the character encoding correctly. Mon Dec 17 22:17:00 GMT 2012 Olly Betts <olly@survex.com> * lib/Makefile.am: Install zh_CN (Chinese) messages. Mon Dec 17 22:02:43 GMT 2012 Olly Betts <olly@survex.com> * lib/zh_CN.po: Reuse existing translation of "Presentation" for the top level menu name - now all the whole menu bar is translated! Mon Dec 17 11:07:00 GMT 2012 Olly Betts <olly@survex.com> * src/cavernlog.cc: Don't highlight a file:linenumber if there's no message after it, which avoids highlighting the "Included from" lines wrongly. Mon Dec 17 11:04:36 GMT 2012 Olly Betts <olly@survex.com> * tests/: Rename testcase badinc3 to badinc4 and actually run it, and add new badinc3 which tests multiple levels of *include. Add expect output for all the badinc testcases. Mon Dec 17 11:01:02 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: Report the parent include files starting from the outermost, as that's more logical when there are multiple levels involved. Mon Dec 17 10:39:14 GMT 2012 Olly Betts <olly@survex.com> * lib/fr.po: Add translation for new message, adapted from two similar existing messages. Mon Dec 17 10:37:12 GMT 2012 Olly Betts <olly@survex.com> * lib/it.po: Merge a translation from launchpad. Mon Dec 17 09:11:09 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge changes from .pot to .po files. Mon Dec 17 06:37:10 GMT 2012 Olly Betts <olly@survex.com> * lib/,src/datain.c: Move the <filename>:<line> into the message when reporting the include route to the file with the error in it, which allows a more natural translation into German. Mon Dec 17 03:26:40 GMT 2012 Olly Betts <olly@survex.com> * .gitignore: Add src/dump3d. Mon Dec 17 03:24:22 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes,lib/po_codes_dead: Prune strings we aren't using and are probably unlikely to use again into a new file po_codes_dead, so that translators don't get presented with them to translate. * lib/survex.pot: Regenerate. Tue Dec 11 23:07:31 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c,tests/: We want to warn if there's a clino reading which it would be impossible to have read from the instrument (e.g. on a -90 to 90 degree scale you can't read "96" (it's probably a typo for "69"). However, the gradient reading from a topofil is typically in the range 0 to 180, with 90 being horizontal. Really we should allow the valid range to be specified, but for now we infer it from the zero error - if this is within 45 degrees of 90 then we assume the range is 0 to 180. Tue Dec 11 22:29:35 GMT 2012 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Report unused message numbers. Tue Dec 11 22:22:20 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes,lib/survex.pot,src/commands.c,tests/: If the scale factor in *calibrate is zero, flag that as an error - it doesn't make sense and probably means someone reversed the arguments to *calibrate. Mon Dec 03 06:52:22 GMT 2012 Olly Betts <olly@survex.com> * src/readval.c: If we were expecting a numeric field and instead get something which starts with '+', '-', or '.' but which isn't a number, then fix the error to include that character in the token reported. * tests/: Add regression test badreadingdotplus. Mon Dec 03 06:50:51 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst,tests/equatenosuchstn.out,tests/surveytypo.out: Stop trimming output header when we get to copyright line, as there may be an error before the first blank line. Mon Dec 03 06:34:20 GMT 2012 Olly Betts <olly@survex.com> * tests/badinc3.svx: Add new test file, missed in earlier commit. Mon Dec 03 04:18:34 GMT 2012 Olly Betts <olly@survex.com> * src/cavern.c: Use /* */ comments, not //. Mon Dec 03 04:16:40 GMT 2012 Olly Betts <olly@survex.com> * tests/Makefile.am: Add new test suite files. Mon Dec 03 04:13:32 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c,tests/cavern.tst: Fix handling after reporting an error for a bad reading in passage data to not then complain "End of line not blank" but instead check other readings on the same line. * tests/passagebad.svx: Add regression testcase. Mon Dec 03 02:55:33 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst,tests/extend.tst,tests/smoke.tst: Add valgrind hooks to the rest of the tests scripts. Mon Dec 03 02:53:56 GMT 2012 Olly Betts <olly@survex.com> * configure.ac: Fix package name, broken during modernisation of autotools use. Mon Dec 03 02:32:01 GMT 2012 Olly Betts <olly@survex.com> * tests/: Run tools under valgrind in most test scripts if VALGRIND is set. Mon Dec 03 02:29:56 GMT 2012 Olly Betts <olly@survex.com> * tests/smoke.tst: Remove variables which aren't ever used. Mon Dec 03 02:28:45 GMT 2012 Olly Betts <olly@survex.com> * tests/: Make all test scripts report "Test passed" at the end if VERBOSE is set and all testcases in the script passed. Mon Dec 03 01:59:04 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst: If VALGRIND is set, run cavern under valgrind and fail the test if there's an error. Mon Dec 03 01:29:39 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: Refactor to avoid duplicating code for handling clino and backclino. Mon Dec 03 01:29:05 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: Check r is valid before using it at all. Sun Dec 02 23:48:05 GMT 2012 Olly Betts <olly@survex.com> * src/str.c,src/str.h: Inline s_zero() and s_free() since they should optimise down to similar or less code than a function call would. Sun Dec 02 23:47:21 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: s_zero() on a NULL pointer is a no-op, so remove. Sun Dec 02 22:53:34 GMT 2012 Olly Betts <olly@survex.com> * lib/de_CH.po: Consistently use Swiss quoting style. Sun Dec 02 22:51:53 GMT 2012 Olly Betts <olly@survex.com> * src/readval.c: If we're about to longjmp to jbSkipLine, then we can just call compile_error() instead of compile_error_skip(). Sun Dec 02 22:40:07 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: Always skip the current line if we longjmp to jbSkipLine. * tests/cavern.tst,tests/skipafterbadomit.svx: We weren't skipping after complaining about OMIT for a required reading, which the change to always skip fixes, so add a regression test for that. Sat Dec 01 23:42:22 GMT 2012 Olly Betts <olly@survex.com> * src/readval.c: Add a "const". Fri Nov 30 00:31:16 GMT 2012 Olly Betts <olly@survex.com> * lib/it.po,lib/sk.po: Merge more updates from launchpad. Wed Nov 28 06:11:11 GMT 2012 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Wed Nov 28 05:02:26 GMT 2012 Olly Betts <olly@survex.com> * lib/de.po: A few more translations from launchpad. Wed Nov 28 01:56:49 GMT 2012 Olly Betts <olly@survex.com> * lib/,src/sorterr.c: Change "HOW MANY" to "HOW_MANY" to make it clearer this is a placeholder for one argument. Wed Nov 28 01:52:16 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: Don't force Latin 1 if setlocale(LC_MESSAGES, ...) fails. Wed Nov 28 01:51:11 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: Transliterate « and » to " if we don't have them in the current character set (previously we mapped them to << and >>). Wed Nov 28 01:00:53 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge translations from launchpad. Wed Nov 28 00:44:36 GMT 2012 Olly Betts <olly@survex.com> * lib/de_CH.po: Fill gaps from de.po. Wed Nov 28 00:44:05 GMT 2012 Olly Betts <olly@survex.com> * lib/de.po: Merge in new "TRANSLATORS" comments. Wed Nov 28 00:43:39 GMT 2012 Olly Betts <olly@survex.com> * lib/es.po,lib/fr.po,lib/it.po: Merge translations from launchpad. Wed Nov 28 00:11:07 GMT 2012 Olly Betts <olly@survex.com> * lib/pt_BR.po: Merge translations from launchpad. Wed Nov 28 00:00:18 GMT 2012 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Add FIXME to only check % formats for messages which have the "c-format" flag set. Tue Nov 27 23:57:25 GMT 2012 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Fix quote check to handle Ҡvs »«. Tue Nov 27 23:40:06 GMT 2012 Olly Betts <olly@survex.com> * lib/de.po,lib/po_codes,lib/survex.pot: Reorder messages so the ones in the "View" menu are together in order. Adjust menu accelerators for the German translation to avoid clashes in the View menu. Tue Nov 27 23:14:05 GMT 2012 Olly Betts <olly@survex.com> * lib/de.po: Merge more updates from launchpad. Tue Nov 27 22:30:36 GMT 2012 Olly Betts <olly@survex.com> * lib/de.po: Merge updates from launchpad. Wed Nov 14 05:50:47 GMT 2012 Olly Betts <olly@survex.com> * lib/fr.po: Merge in new translator comments. Sun Nov 04 21:26:29 GMT 2012 Olly Betts <olly@survex.com> * lib/sk.po: Merge changes from Martin Sluka. Sun Nov 04 21:26:01 GMT 2012 Olly Betts <olly@survex.com> * lib/ca.po: Merge in TRANSLATOR comments. Sun Nov 04 21:25:40 GMT 2012 Olly Betts <olly@survex.com> * lib/fr.po: Fix clashing menu accelerator. Fri Nov 02 04:02:16 GMT 2012 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Fri Nov 02 03:58:12 GMT 2012 Olly Betts <olly@survex.com> * lib/mailmsgs.pl: Remove obsolete script. * lib/Makefile.am,lib/po-to-msg.pl: Remove references to *.todo, which we no longer generate. Fri Nov 02 03:46:59 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Add another TRANSLATORS comment. Fri Nov 02 03:25:52 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot: Add TRANSLATORS comments to clarify messages which Eric asked about. Fri Nov 02 03:06:00 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge translation updates. Fri Nov 02 00:32:35 GMT 2012 Olly Betts <olly@survex.com> * src/guicontrol.cc,src/mainfrm.cc: On OS X, F11 is used by the desktop so change the menu shortcut for "Full Screen Mode" to be the OS X standard shortcut Shift-Command-F. Sun Oct 28 04:21:27 GMT 2012 Olly Betts <olly@survex.com> * lib/sk.po: Merge updates from Martin Sluka. Mon Oct 15 04:19:57 GMT 2012 Olly Betts <olly@survex.com> * Makefile.am,configure.ac: Modern automake seems to cope with files required by GNU being generated during the build, so we no longer need to use the "foreign" automake mode. Also use -Werror with automake. Mon Oct 15 02:28:46 GMT 2012 Olly Betts <olly@survex.com> * src/Makefile.am: Remove workaround for GCC 2.95 failing to compile gfxcore.cc - GCC 2.95 is obsolete now. Mon Oct 15 02:27:04 GMT 2012 Olly Betts <olly@survex.com> * src/Makefile.am: Use AM_CPPFLAGS instead of obsolete INCLUDES. Mon Oct 15 02:21:53 GMT 2012 Olly Betts <olly@survex.com> * Makefile.am,buildmacosx.sh,configure.ac,lib/mailmsgs.pl: Update configure.ac from passing version to AM_INIT_AUTOMAKE to passing it to AC_INIT, and fix places which grep out the version. Mon Oct 15 02:08:23 GMT 2012 Olly Betts <olly@survex.com> * buildmacosx.sh,configure.ac,configure.in,doc/Makefile.am, lib/mailmsgs.pl: Rename configure.in to configure.ac to make modern autotools usage. Thu Sep 27 10:41:56 GMT 2012 Olly Betts <olly@survex.com> * src/: Switch read_prefix_*() family of functions to be a single read_prefix() function which tags a bitmask of flags. Thu Sep 27 09:23:41 GMT 2012 Olly Betts <olly@survex.com> * lib/id.po: Resolve clashing menu accelerators. Thu Sep 27 05:37:18 GMT 2012 Olly Betts <olly@survex.com> * src/namecompare.cc: Fix to build with wx2.8. Thu Sep 27 05:25:49 GMT 2012 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Thu Sep 27 05:12:22 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: For determining character set on Unix, check LANG after LC_ALL and LC_CTYPE. For determining language, check LC_ALL before LC_MESSAGES and LANG. Thu Sep 27 04:48:34 GMT 2012 Olly Betts <olly@survex.com> * lib/id.po: Add more translations and fix marking of unused messages. Thu Sep 27 04:07:24 GMT 2012 Olly Betts <olly@survex.com> * lib/Indonesian-5.1.11.isl,lib/Makefile.am,lib/id.po: Add start of Indonesian translation from launchpad. Thu Sep 27 03:56:22 GMT 2012 Olly Betts <olly@survex.com> * lib/: Merge translation updates from launchpad. Thu Sep 27 00:31:24 GMT 2012 Olly Betts <olly@survex.com> * lib/: Remove scripts and data files which are no longer used. Sat Sep 22 05:06:23 GMT 2012 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/mainfrm.h: Don't run incremental search on every key-press, as on a slow machine the short initial search(es) will take a while but not be useful. Instead set a flag, and actually run the search when MainFrm next receives an idle event. Fri Sep 21 06:24:32 GMT 2012 Olly Betts <olly@survex.com> * src/img.h: New leg flag img_FLAG_NOSURVEY. * src/netskel.c: Set img_FLAG_NOSURVEY for nosurvey legs. * src/dump3d.c: Report NOSURVEY leg flag. Fri Sep 21 06:22:29 GMT 2012 Olly Betts <olly@survex.com> * src/Makefile.am: dump3d now needs date.c. Wed Sep 19 22:12:35 GMT 2012 Olly Betts <olly@survex.com> * src/dump3d.c: Add --show-dates option. Fri Sep 07 11:39:06 GMT 2012 Olly Betts <olly@survex.com> * src/namecompare.cc,src/namecompare.h: Add two new files which were in the last release but I failed to commit. Tue Aug 14 09:42:43 GMT 2012 Olly Betts <olly@survex.com> * lib/Makefile.am: Create de_DE.po as a symlink if it doesn't exist. Mon May 28 16:56:27 GMT 2012 Olly Betts <olly@survex.com> * configure.in: -W no longer seems to cause problems with wxWidgets. Mon May 28 16:49:37 GMT 2012 Olly Betts <olly@survex.com> * src/: Remove unused parameter names. Sun May 27 12:24:17 GMT 2012 Olly Betts <olly@survex.com> * src/export.cc: Include "export.h". Fri May 25 14:20:24 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst,test/equatenosuchstn.out: Drop line reporting time taken when comparing output, as that can vary. * src/listpos.c,tests/equatenosuchstn.out: Move "Station X referred to just once" warning after non-existent survey check. * src/,tests/: If survey isn't all connected, still run survey tree checks and report errors and/or warnings which might suggest typo locations. Tue Feb 28 00:41:15 GMT 2012 Olly Betts <olly@survex.com> * tests/diffpos.tst: Force English messages for diffpos tests too. Tue Feb 28 00:39:45 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst: Force English messages so comparing expected output works whatever the current language setting. Fri Feb 24 00:43:04 GMT 2012 Olly Betts <olly@survex.com> * tests/cavern.tst,tests/equatenosuchstn.out: Fix test failure due to Survex version number appearing in expected output. Thu Feb 23 22:34:52 GMT 2012 Olly Betts <olly@survex.com> * make_release: Link mingw build statically to avoid needing libgcc DLL. Wed Feb 22 23:39:25 GMT 2012 Olly Betts <olly@survex.com> * configure.in,src/gla-gl.cc: The Debian mingw-w64 packages lack GL/glext.h so test for it in configure. Wed Feb 22 23:29:29 GMT 2012 Olly Betts <olly@survex.com> * src/cavernlog.cc: Remove variable which is only assigned to and never read. Wed Feb 22 22:09:02 GMT 2012 Olly Betts <olly@survex.com> * NEWS,src/Makefile.am: Disable building findentrances by default so I can get 1.2.6 out without further delays as it fixes processing .svx files from aven under Mac OS X. Wed Feb 22 11:35:40 GMT 2012 Olly Betts <olly@survex.com> * src/datain.c: Remove return type from data_normal() etc as we never use it. Wed Feb 22 05:11:53 GMT 2012 Olly Betts <olly@survex.com> * make_release: Update to work with Debian mingw-w64 packages. Mon Feb 20 05:08:26 GMT 2012 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.6. Sun Feb 19 10:48:37 GMT 2012 Olly Betts <olly@survex.com> * doc/3dformat.htm: Merge in some improvements from Mike McCombe. Fri Feb 17 03:49:59 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: Fix so that cavern run by aven finds its messages. Thu Feb 16 01:36:54 GMT 2012 Olly Betts <olly@survex.com> * Makefile.am,survex.iss.in: Include JPG images in Innosetup installer. (ticket#35) Fri Jan 27 13:30:54 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes,lib/survex.pot,src/Makefile.am,src/findentrances.cc: Make all messages in findentrances translatable. Fri Jan 27 11:03:28 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes,lib/survex.pot,src/listpos.c,tests/: If we have a reference to a station in a non-existent survey, give a helpful error rather than saying the station hasn't been exported from the survey. Tue Jan 24 23:03:10 GMT 2012 Olly Betts <olly@survex.com> * src/cavern.c: Remove TRANSLATE comment which has already been addressed. Tue Jan 24 10:56:14 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Add commenting noting precision of lat and lon. Tue Jan 24 10:55:19 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Don't include carriage returns in .gpx output. Tue Jan 24 10:42:41 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Add GPL licence boilerplate (Olaf OKed this in <20120111115239.1b162450@ghost>). Tue Jan 24 04:53:30 GMT 2012 Olly Betts <olly@survex.com> * src/Makefile.am,src/findentrances.cc: Build findentrances in the buildsystem. Tue Jan 24 04:41:03 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Update examples of usage to reflect "-s" change. Tue Jan 24 04:38:11 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Use string::assign() rather than constructing a temporary string object and assigning that. Tue Jan 24 04:35:25 GMT 2012 Olly Betts <olly@survex.com> * src/cmdline.c: Allow help argument to cmdline_init() to be NULL. Tue Jan 24 04:35:04 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Support --help and --version options. Tue Jan 24 04:27:15 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: "using namespace std;" Tue Jan 24 04:25:09 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Give error if required -d option is not specified. Tue Jan 24 04:19:29 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Other survex tools use -s for "limit operation to this survey prefix" and just take the .3d file to operate on as a command line argument, so for consistency just take the .3d file as a command line argument here too. Tue Jan 24 04:18:41 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Reindent with 4 space indent, tab width 8. Tue Jan 24 04:12:19 GMT 2012 Olly Betts <olly@survex.com> * src/findentrances.cc: Add findentrances utility from Olaf. Tue Jan 10 12:57:08 GMT 2012 Olly Betts <olly@survex.com> * lib/survex.pot,lib/zh_CN.po: Update. Tue Jan 10 12:56:33 GMT 2012 Olly Betts <olly@survex.com> * lib/po_codes: Update locations. Tue Jan 10 12:55:25 GMT 2012 Olly Betts <olly@survex.com> * lib/Makefile.am: When generating survex.pot from po_codes, drop the codes from commented out messages too. Mon Jan 09 12:21:28 GMT 2012 Olly Betts <olly@survex.com> * src/aven.cc: Fix to build with a non-Unicode wxWidgets library. Patch from Olaf Kahler. Fri Jan 06 11:47:59 GMT 2012 Olly Betts <olly@survex.com> * lib/: Touch all the .po files. Fri Jan 06 11:47:10 GMT 2012 Olly Betts <olly@survex.com> * lib/touch-po.pl: New script to "touch" a .po file by updating "PO-Revision-Date:". Fri Jan 06 11:34:16 GMT 2012 Olly Betts <olly@survex.com> * lib/,src/Makefile.am,src/gettexttomsg.pl: Rename codes.po to po_codes so it doesn't get picked up by tools looking for .po files. Add survex.pot to the repo so launchpad's auto translation syncing can work. Fri Jan 06 11:25:23 GMT 2012 Olly Betts <olly@survex.com> * make_release: Update to use git rather than SVN. Fri Jan 06 11:19:37 GMT 2012 Olly Betts <olly@survex.com> * doc/HACKING.htm: Update mention of "SVN tree" to "source tree" as the files mentioned are shipped in releases too. Wed Jan 04 05:22:32 GMT 2012 Olly Betts <olly@survex.com> * lib/Makefile.am: Make the containing directory in the launchpad tarball “survex-transâ€. Wed Jan 04 03:41:40 GMT 2012 Olly Betts <olly@survex.com> * src/dump3d.c: Add support for showing img_ERROR_INFO items. Tue Jan 03 23:54:26 GMT 2012 Olly Betts <olly@survex.com> * lib/fr.po: Incorporate a translation from launchpad I'd previously copied the English version of by mistake. Attempt to correct mistranslation of "survey file". Tue Jan 03 13:21:09 GMT 2012 Olly Betts <olly@survex.com> * make_release: Need to set VERSION before we first use it! Tue Jan 03 12:39:38 GMT 2012 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.5. Tue Jan 03 12:11:14 GMT 2012 Olly Betts <olly@survex.com> * doc/survex.7.in: Make a few minor improvements to the text. Tue Jan 03 12:07:31 GMT 2012 Olly Betts <olly@survex.com> * doc/survex.7.in: Update section in .TH macro to 7 too. Tue Jan 03 12:04:54 GMT 2012 Olly Betts <olly@survex.com> * src/moviemaker.cc: Further fix. Tue Jan 03 11:05:11 GMT 2012 Olly Betts <olly@survex.com> * configure.in,src/moviemaker.cc: Fix to work with newer ffmpeg. Mon Jan 02 13:10:42 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc: Draw measuring line above indicators rather than underneath them. Mon Jan 02 12:52:47 GMT 2012 Olly Betts <olly@survex.com> * src/message.c: Improve handling of messages before the message subsystem is fully initialised. Mon Jan 02 12:37:18 GMT 2012 Olly Betts <olly@survex.com> * src/Makefile.am,src/mainfrm.cc,src/namecmp.h: Add a version of the station name comparing algorithm which works with the Unicode strings directly, which fixes the issue with random ordering of the prefix tree control in aven due to the converted strings we were comparing getting invalidated before we actually compared them. Mon Jan 02 12:12:35 GMT 2012 Olly Betts <olly@survex.com> * src/gla-gl.cc: If glGenLists() fails, flag the list as NEVER_CACHE as there's unlikely to be much point calling glGenLists() again. * src/gla-gl.cc,src/gla.h: Replace GLAList methods test_flag() and InvalidateList() with an invalidate_if() method. Mon Jan 02 11:54:38 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc: No need to invalidate the display lists for the compass and clino when a new survey is loaded as they don't depend on the survey data. Mon Jan 02 11:17:51 GMT 2012 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/gla.h: Rework list caching code to not call glDeleteLists() and glGenLists() when a list is invalidated, as that results in a fresh list number being allocated (at least with the OpenGL implementation I'm using) which would eventually result in aven hitting an assertion which is there to catch if we leak lists. Sun Jan 01 13:29:03 GMT 2012 Olly Betts <olly@survex.com> * lib/Makefile.am: Put translation files in a sub-directory in the tarball, and print the path to it so it can be cut-and-pasted to upload to launchpad. Sun Jan 01 10:48:01 GMT 2012 Olly Betts <olly@survex.com> * lib/it.po: Add "translation" for degree symbol. Sun Jan 01 10:33:55 GMT 2012 Olly Betts <olly@survex.com> * lib/en_US.po: Merge template changes into en_US.po (no user-visible changes). Sun Jan 01 04:45:03 GMT 2012 Olly Betts <olly@survex.com> * make_release: Fix typo in filename to copy to webserver. Show the SHA1 checksums for the uploaded files. Sun Jan 01 02:56:04 GMT 2012 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.4. Sun Jan 01 02:53:03 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Update copyright years. Sun Jan 01 02:32:59 GMT 2012 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Improve labelling of depth colour key to avoid sub-picometre precision on near-zero values (ticket#30). We now always use metres or feet for the depth with a consistent precision chosen from the depth range, and show the units below the colour bar rather than after every value. * src/gfxcore.cc,src/gfxcore.h: When zooming way in, stay in metres rather than switching to cm. Say “1 mile†rather than “1 milesâ€. Sat Dec 31 22:40:07 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix not to make OpenGL calls before we've initialised OpenGL, as this can cause segmentation faults (e.g. on Fedora 16). Extend CHECK_GL_ERROR() to check that we don't make such calls in future. Sat Dec 31 22:37:47 GMT 2011 Olly Betts <olly@survex.com> * lib/es.po: Fix "Last-Translator:" header and merge in translation of a message which is not currently used. Sat Dec 31 15:04:23 GMT 2011 Olly Betts <olly@survex.com> * lib/: Merge remaining .po files. Sat Dec 31 14:46:20 GMT 2011 Olly Betts <olly@survex.com> * lib/: Merge more .po files. Sat Dec 31 14:24:25 GMT 2011 Olly Betts <olly@survex.com> * lib/ca.po,lib/de_CH.po,lib/en_US.po: Merge template changes into .po files. Sat Dec 31 13:13:55 GMT 2011 Olly Betts <olly@survex.com> * lib/fr.po: More translation updates from launchpad. Sat Dec 31 12:51:53 GMT 2011 Olly Betts <olly@survex.com> * lib/ca.po,lib/sk.po: Fix unattached acute accents. Sat Dec 31 12:45:36 GMT 2011 Olly Betts <olly@survex.com> * lib/: Update Project-Id-Version in .po files to match that in survex.pot. Sat Dec 31 12:43:52 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Add launchpad-tarball target to make a tarball of the translations suitable for uploading to launchpad. Sat Dec 31 12:23:39 GMT 2011 Olly Betts <olly@survex.com> * make_release: Echo the commands to copy the new release to the web server at the end. * copy-prerelease,copy-release: Remove old scripts which are no longer useful. Sat Dec 31 11:13:11 GMT 2011 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.3. Sat Dec 31 10:58:34 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: As we build the data structure, eliminate tubes consisting of zero XSECTs as well as those consisting of just one. Sat Dec 31 10:36:24 GMT 2011 Olly Betts <olly@survex.com> * src/img.h: Fix incorrect comment which claimed that img_XFLAG_END was no longer used. * src/img.c: Use img_XFLAG_END constant rather than assuming it is 1. Sat Dec 31 10:32:44 GMT 2011 Olly Betts <olly@survex.com> * src/extend.c: Copy the end markers for passage tubes, and preserve left and right data for tubes (previously they were set to -1.0 which means "no info"). Sat Dec 31 08:17:08 GMT 2011 Olly Betts <olly@survex.com> * lib/extract-msgs.pl: New script to allow developers to update codes.po from source code. * lib/Makefile.am: Ship it. * src/Makefile.am: Add rule to run it on all used sources and generate newcodes.po which can then be compared with current version. Sat Dec 31 08:14:06 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po: Update source locations, add a missing c-format marker. Sat Dec 31 08:13:26 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix a message in the source code which I missed in the previous batch. Sat Dec 31 08:12:23 GMT 2011 Olly Betts <olly@survex.com> * lib/po-to-msg.pl: Removed unused remains of check that messages are in numerically ascending order, which we no longer want to enforce. Sat Dec 31 07:48:20 GMT 2011 Olly Betts <olly@survex.com> * src/sorterr.c: Fix a message in the source code which I missed in the previous batch. Sat Dec 31 05:54:45 GMT 2011 Olly Betts <olly@survex.com> * src/message.c: Transliterate curly right single quote to ASCII apostrophe if we can't represent it in the current character set. Sat Dec 31 05:44:47 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/: Use curly apostrophe instead of "'" in messages. Correct messages in source code which didn't match those in the message file (no visible effects to end-users). * lib/codes.po: Update file:lineno locations where messages are used. * lib/po-to-msg.pl: Warn about different numbers of opening or closing curly double quotes in message vs translation. * lib/ca.po,lib/es.po: Fix minor typo in one message caught by this new warning. Sat Dec 31 05:23:46 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Thu Dec 29 03:37:04 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/: Use curly double quotes instead of "`" and "'" to quote literals and filenames in messages. Thu Dec 29 03:21:49 GMT 2011 Olly Betts <olly@survex.com> * src/message.c: Transliterate curly double quotes to ASCII straight double quotes if we can't represent them in the current character set. Thu Dec 29 03:14:52 GMT 2011 Olly Betts <olly@survex.com> * src/message.c: Convert source code to UTF-8. Thu Dec 29 00:52:44 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix typo in CHECK_GL_ERROR() change in previous commit. Thu Dec 29 00:49:31 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: We already keep track of the GL canvas size in x_size and y_size so use those rather than re-requesting them. Wed Dec 28 11:45:40 GMT 2011 Olly Betts <olly@survex.com> * lib/fr.po: Merge in updated translations from launchpad. Sun Nov 27 12:30:31 GMT 2011 Olly Betts <olly@survex.com> * src/tr.c,src/tr.h: Committing original versions of tr tiled rendering code. Thu Nov 24 12:59:24 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Remove GLACanvas::SetBackgroundColour() since we only ever set it to black and opaque. Thu Nov 24 12:28:07 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Add note to pick the fastest method for crosses/blobs if multiple ones pass the visual fidelity check. Thu Nov 24 12:27:33 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Add disabled code to show the visual fidelity check on stdout. Thu Nov 24 12:24:49 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix screenshot and movie generation to read from the front buffer in the usual case of being double buffered. Thu Nov 24 12:02:22 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Add CHECK_GL_ERROR for glReadPixels calls. Thu Nov 24 11:59:23 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Undefine o and I after we're done with them. Thu Nov 24 11:56:57 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix expected cross shape so don't always reject using texture mapping to draw crosses. Wed Nov 02 15:40:45 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Don't create the help menu at all on OS X. Wed Nov 02 15:38:54 GMT 2011 Olly Betts <olly@survex.com> * lib/INSTALL.OSX: Update to reflect current status. Wed Nov 02 15:37:58 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Remove duplicate call to PopupMenu(). Tue Nov 01 23:24:23 GMT 2011 Olly Betts <olly@survex.com> * src/namecmp.h: Fix to build with wx 2.9.2. Tue Nov 01 23:17:52 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Remove assertion which uses deprecated wx method. Tue Nov 01 23:14:09 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/mainfrm.h: Make separator wxChar not int. Tue Nov 01 18:54:32 GMT 2011 Olly Betts <olly@survex.com> * lib/sk.po: Update a translation from launchpad. Tue Nov 01 18:32:24 GMT 2011 Olly Betts <olly@survex.com> * src/log.cc,src/log.h: Fix to build with wx 2.9.2. Tue Nov 01 18:15:20 GMT 2011 Olly Betts <olly@survex.com> * src/export.cc: Fix to build with wx 2.9.2. Tue Nov 01 18:14:13 GMT 2011 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Fix code conditionally used on 2.9.2 and later to actually compile. Tue Nov 01 18:12:42 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Fix how we pass on events from right-click menus of indicators. The previous code seemed to work, but wasn't correct as highlighted by trying to build it with 2.9.2 which now refuses to build to avoid people getting this wrong. Tue Nov 01 18:11:55 GMT 2011 Olly Betts <olly@survex.com> * src/aven.h: Need to forward declare class wxPageSetupDialogData for wx 2.9.2. Tue Nov 01 18:11:22 GMT 2011 Olly Betts <olly@survex.com> * src/glbitmapfont.h: Fix to build with wx 2.9.2. Tue Nov 01 18:10:51 GMT 2011 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix to build with wx 2.9.2. Tue Nov 01 18:06:12 GMT 2011 Olly Betts <olly@survex.com> * lib/INSTALL.OSX,src/mainfrm.cc: Make the green colour used for entrances in the survey tree the same (slightly darker than before) green used for the entrance blobs. Tue Nov 01 18:04:47 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix warning when building with wx2.9.2. Tue Nov 01 12:32:30 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Fix Y coordinates of surface surveys on printouts. (Closes #32) Sun Oct 23 06:20:14 GMT 2011 Olly Betts <olly@survex.com> * lib/Info.plist.in: Remove spurious blank lines from licence text in OS X "Get Info". Sat Oct 22 17:39:07 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Opening dialogs while in full screen mode now works better in wxGTK. Sat Oct 22 17:36:01 GMT 2011 Olly Betts <olly@survex.com> * lib/INSTALL.OSX: Processing .svx files from aven now works. Sat Oct 22 07:27:43 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.h: Update comment - Mac OS X does indeed provide its own preview menu. Fri Oct 21 23:47:16 GMT 2011 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix openiof .svx file when user clicks on cavern warning or error. Fri Oct 21 23:43:21 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Include a hardlinked cavern alongside aven in the app so that processing .svx files in aven works. Wed Oct 19 22:51:18 GMT 2011 Olly Betts <olly@survex.com> * tests/diving.pos,tests/diving.svx: Add test coverage for interleaved diving data. Wed Oct 19 13:04:25 GMT 2011 Olly Betts <olly@survex.com> * tests/diving.pos,tests/diving.svx: Add testcase for diving data with topofil-style distance. Wed Oct 12 03:45:13 GMT 2011 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Report the version of the library we're actually running with if built against wx >= 2.9.2. Make it clear that the the version reported is the version built with for wx < 2.9.2. Wed Oct 12 03:06:05 GMT 2011 Olly Betts <olly@survex.com> * lib/make-pixel-font,src/glbitmapfont.cc,src/glbitmapfont.h: Space the glyphs to leave a one pixel gap either side of each one (so two between adjacent glyphs). Mostly this reduces the horizontal width, but it adds a pixel for characters like "m" and two in a few cases. Fri Oct 07 07:20:55 GMT 2011 Olly Betts <olly@survex.com> * src/glbitmapfont.cc,src/glbitmapfont.h: Support plotting Unicode character points > 256 on the survey pane by lazily loading the data for them from the font file and plotting them with a direct call to glBitmap() rather than using a display list. Fri Oct 07 04:09:58 GMT 2011 Olly Betts <olly@survex.com> * lib/make-pixel-font: Fix .pixelfont file to correctly handle characters wider than 8 pixels when run on a little-endian platform. Thu Oct 06 13:23:05 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Another update for 1.2.2. Thu Oct 06 13:21:20 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Fix grid not to disappear when blobs are turned on if blobs are drawn using lines. Thu Oct 06 13:17:19 GMT 2011 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.2. Thu Oct 06 12:11:20 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Fix to calculate the scale required for "One page" right before we calculate how many pages are required, so we don't end up something other than 1x1 being shown when the user changes settings. Thu Oct 06 12:07:10 GMT 2011 Olly Betts <olly@survex.com> * src/avenprcore.cc: The info box is now always 30mm high (if present) so update the code which picks a scale and which decides how many pages are required to use this height. Thu Oct 06 11:34:51 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.h: SomethingChanged() method doesn't need to be public, so make it private. Thu Oct 06 04:13:24 GMT 2011 Olly Betts <olly@survex.com> * src/gettexttomsg.pl: Update for the message.txt -> codes.po change. Thu Oct 06 03:01:45 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Passage tubes can stick out above the highest survey station or below the lowest, so clamp the value used to calculate the colour in these cases, like we already do elsewhere. Thu Oct 06 02:52:13 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Avoid a different assertion failure due to rounding differences. Thu Oct 06 02:49:03 GMT 2011 Olly Betts <olly@survex.com> * src/glbitmapfont.cc,src/glbitmapfont.h: Actually add the new glBitmap-based font code. Thu Oct 06 02:36:47 GMT 2011 Olly Betts <olly@survex.com> * survex.iss.in: Update for font changes. Thu Oct 06 02:35:41 GMT 2011 Olly Betts <olly@survex.com> * Makefile.am,buildmacosx.sh,lib/Makefile.am,lib/afm2txf.pl, lib/make-pixel-font,src/: Replace the textured-mapped font drawing with an approach based on glBitmap. This doesn't suffer from the character alignment issues which the textured-mapped fonts had, and is actually significantly faster on some machines. The current font used is (mostly) fixed-width, but this isn't an inherent limitation - it was just the easiest font data to convert to a usable format. Wed Oct 05 13:49:15 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Avoid assertion failure due to rounding differences. Wed Oct 05 08:19:46 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Fix not to pass wxString through varargs (issue introduced in the previous commit). Tue Oct 04 04:49:19 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Use degree sign from message file rather than a literal one. Tue Oct 04 04:08:57 GMT 2011 Olly Betts <olly@survex.com> * src/message.c: If degree sign isn't available, transliterate it to 'dg' rather than skipping it. Tue Oct 04 03:59:29 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/gfxcore.cc,src/mainfrm.cc: Fix message code 344 which should have been a degree sign but got lost in the format change for 1.2.0 and then got reassigned in 1.2.1. Externally, this means that bearing in the status bar now have a degree sign after them if they are in degrees rather than nothing (1.2.0) or "&Hide Compass" (1.2.1). Tue Oct 04 02:55:11 GMT 2011 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.1. Tue Oct 04 02:45:47 GMT 2011 Olly Betts <olly@survex.com> * src/Makefile.am: Don't ship the removed hand_mask.xpm. Tue Oct 04 02:44:37 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Sort out inverted cursor mask on __WXMSW__. * src/hand.xbm: Invert the dragging hand cursor black vs white so it better matches the other cursors. Mon Oct 03 23:42:00 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Add back svxPrintout methods GetPageInfo() and HasPage() which are actually virtual methods called by the parent class. Mon Oct 03 02:40:56 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Fix check of .po files not to create messages.mo. Mon Oct 03 02:22:55 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Fix new translation checking rules to work in a VPATH build. Mon Oct 03 02:12:23 GMT 2011 Olly Betts <olly@survex.com> * lib/de.po,lib/de_CH.po,lib/sk.po: Fix classes menu accelerators. Mon Oct 03 02:00:38 GMT 2011 Olly Betts <olly@survex.com> * lib/en_US.po: Fix problem with translation of new message. Mon Oct 03 00:50:52 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Sun Oct 02 20:25:01 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/printwx.cc: Add mnemonics to the "Plan" and "Elevation" buttons in the print dialog. Sun Oct 02 12:17:34 GMT 2011 Olly Betts <olly@survex.com> * src/guicontrol.cc: Try processing F11 explicitly for __WXMAC__ to avoiding getting stuck in full screen mode forever. Sun Oct 02 12:01:25 GMT 2011 Olly Betts <olly@survex.com> * src/: Make the sign of the tilt angle for printouts consistent with the sign in the UI. Sun Oct 02 10:00:08 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,lib/en_US.po,src/printwx.cc: On printouts, combine the "Plan View"/"Elevation" info box field with the field which gives the bearing and reduce the height on the info box by the removed field, so it's now 3cm for plans and elevations, as for extended elevations. Report the tilt angle for tilted elevations which it seems has been missing for ages (it's not in recent 1.0.x either). Sat Oct 01 12:28:35 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Fix commented message in source. Sat Oct 01 12:11:37 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.h: svxPrintDlg members don't need to be protected, so make the private. Sat Oct 01 11:28:34 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc,src/printwx.h: When in plan view disable the "Plan" button, and similarly for the "Elevation" button. Sat Oct 01 11:20:03 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Remove more unused methods and members. Sat Oct 01 10:48:24 GMT 2011 Olly Betts <olly@survex.com> * src/avenprcore.cc,src/printwx.cc,src/printwx.h: Eliminate some unused methods and member variables. Sat Oct 01 00:33:24 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Move the footer to start at the left side of the page. Fri Sep 30 23:49:24 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc:svxPrintout::ShowPage() is an empty method, so just remove it and all the code to calculate values to pass to it and then call it. This is just a left-over from the 1.0 printing code. Fri Sep 30 13:40:29 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc,src/gfxcore.cc,src/mainfrm.cc: Use standard C++ true and false instead of wx aliases TRUE and FALSE (which even wx seems to have shifted away from using now). Fri Sep 30 13:33:37 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: Tweak exact positioning of text to look nicer. Fri Sep 30 03:49:16 GMT 2011 Olly Betts <olly@survex.com> * INSTALL: Mention building wxWidgets with --enable-unicode. Mention using sudo for the install. Capitalise Survex when talking about the package. + doc/manual.sgml: Replace building from source instructions with a pointer to the clearer instructions in INSTALL. Make it clear that installing with administrator rights applies to NT, 2000, XP *or newer*. Fri Sep 30 03:31:00 GMT 2011 Olly Betts <olly@survex.com> * src/guicontrol.cc: Don't disable a colour by option unless there's no survey loaded. It feels inconsistent now we are showing a key even when there's no "interesting" data. Fri Sep 30 03:28:59 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: The different colour keys get cached so switching back to one that's already been shown for the current survey doesn't redraw it and key_lowerleft wasn't getting updated. We now track key_lowerleft for each key type separately. Fri Sep 30 02:48:00 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: If "Colour by X" is selected, always show the colour key, even if it only contains one colour, or just the entry for white. Thu Sep 29 22:33:06 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Don't segfault on a flat survey. Fix incorrect addition and corresponding subtraction of GetDepthExtent() when calculating splits over depth band boundaries. Thu Sep 29 21:56:19 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla.h: Fix zoom in limit to be the same distance regardless of the extent of the survey. Thu Sep 29 20:57:41 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Now that we don't have the key background, just remove KEY_MARGIN entirely. Thu Sep 29 20:37:09 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Remove the dark grey background from the colour key and just put a single pixel black border around the colours. This is more in keeping with the other controls, and means the colours are now on a black background so more visually similar to the survey legs. Thu Sep 29 13:02:22 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fall back to ISO8859-1 if CP1252 fails to convert the string. Thu Sep 29 12:22:34 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Upon loading a survey which lacks the information for the current "Colour by" mode, don't change to "Colour by none" - we already do no colouring and hide the key when there's nothing to colour by, and it's annoying to have the actual mode changed if you then load a survey which does have the information to colour by. Thu Sep 29 12:20:07 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Rename COLOUR_KEY_* constants to KEY_*. Thu Sep 29 10:16:30 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Make COLOUR_KEY_OFFSET_X and COLOUR_KEY_OFFSET_Y the actual offsets, rather than taking COLOUR_KEY_MARGIN off them. Thu Sep 29 05:08:20 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix tooltip for open to say "survey file" not "3D file". Thu Sep 29 05:03:37 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h,src/mainfrm.cc: Add right click menu to the colour key too. Wed Sep 28 14:47:15 GMT 2011 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Add a kludge to prefer to round values up when generating the .txf file which empirically results in better horizontal spacing (this should be fixed properly, but this is at least an easy improvement for now). Wed Sep 28 14:00:14 GMT 2011 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Rather than special-casing the character with PostScript name 'space', just omit characters with zero width and height from the texture. Wed Sep 28 12:41:42 GMT 2011 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Put the digits first in the font texture to help ensure they are all on the same line and will exactly align vertically when rendered - a slight discrepancy here is particularly visible in the colour key legends and compass bearing. Wed Sep 28 12:30:03 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Regenerate aven.txf if the script which generates it has been modified. Wed Sep 28 11:15:08 GMT 2011 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Fix handling of PostScript character names which are used by more than one Unicode value ("space" and "hyphen" are the current examples). This fixes the colour key for date to have dashes in the dates. Fix not to bother writing empty space into the texture map for spaces - just set width and height to 0 and skip to the width. * src/fnt.cc: Remove special case kludge for if space isn't defined, which is no longer needed thanks to the above fix. Wed Sep 28 10:19:07 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/printwx.cc: Fix mixed up messages - the print dialog now says "View" on the left subgroup of controls. Improve the display of the bearing on printouts. Add message for "Colour &Key" to translations. Wed Sep 28 02:02:09 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc: Fix #ifdef to #if in previous change. Wed Sep 28 01:09:09 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc: Fix for non-Unicode build. Mon Sep 26 12:25:59 GMT 2011 Olly Betts <olly@survex.com> * src/export.cc: PLT file output now handles spaces and control characters in station names by escaping them with '%' as in URLs. Mon Sep 26 11:58:05 GMT 2011 Olly Betts <olly@survex.com> * src/aventreectrl.cc: Improve comment about WXK_PRIOR and WXK_NEXT. Mon Sep 26 11:51:01 GMT 2011 Olly Betts <olly@survex.com> * src/aventreectrl.cc: Pressing "Enter" on a station in the tree control now centres the view on that station. Mon Sep 26 11:42:17 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.h,src/guicontrol.cc: Pressing "F5" forces all GLAList objects to be invalidated and then forces a refresh of the display. This is intended as a debugging aid - if pressing F5 changes the display at all then there's a missing case where a list should have been invalidated. Mon Sep 26 11:35:29 GMT 2011 Olly Betts <olly@survex.com> * src/: Push survey pane size tracking down into GLACanvas, and automatically track which lists should be invalidated on a changes in the width or the height of the pane. Mon Sep 26 10:44:22 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/gla.h: Move GLAList flags out of the header as they are internal details. Mon Sep 26 10:42:50 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Cache the scale bar in a GLAList since it often gets redrawn exactly the same - for example, when rotating, panning, etc. Mon Sep 26 09:40:32 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: More "colour key" related internal nomenclature changes. Mon Sep 26 09:34:01 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Factor out the code to draw the colour key into DrawColourKey(). Mon Sep 26 04:23:10 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Apply COLOUR_KEY_OFFSET_Y by moving the point where we plot the key rather than including it in the calculations of the key's coordinates. Mon Sep 26 04:17:16 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Apply COLOUR_KEY_OFFSET_X by moving the point where we plot the key rather than including it in the calculations of the key's coordinates. Sat Sep 24 13:15:22 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Increase scale bar maximum width from 65% of the window width to 75% as it was in 1.0.x, but if that would overlap the clino then reduce it down until it reaches 50%. Allow zooming in a little further to match what was possible in 1.0.x. (ticket#23) Sat Sep 24 12:45:04 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Update (--help messages can now be translated). Sat Sep 24 12:21:45 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Note oddity with FullScreen and side panel. Sat Sep 24 12:14:52 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.h: We don't need the "un-fullscreen to show dialog" hack with recent wxGTK. Also, there's no reason to think we need it for other platforms (it was enabled everywhere except Microsoft Windows before). Sat Sep 24 10:42:29 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.cc: "delete foo;" not "delete(foo);" Sat Sep 24 10:41:00 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc,src/gfxcore.cc: No point checking for NULL before calling delete. Sat Sep 24 10:18:22 GMT 2011 Olly Betts <olly@survex.com> * src/: Remove empty destructors. Sat Sep 24 06:43:33 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm,src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Eliminate the last few OpenGL calls from gfxcore.cc. Sat Sep 24 06:32:02 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: New type GLATexCoord to avoid using GLint outside of the OpenGL-specific code. Sat Sep 24 06:08:13 GMT 2011 Olly Betts <olly@survex.com> * src/: Move glTexCoord2i() calls out of gfxcore.cc and into gla-gl.cc. Use BeginQuadrilaterals() rather than BeginPolygon() when the shape will definitely have 4 sides. Sat Sep 24 02:09:48 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.h,src/guicontrol.cc: Disable "View North" when we're already viewing North, and similarly for other compass points. Sat Sep 24 01:57:06 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Update. Fri Sep 23 15:38:36 GMT 2011 Olly Betts <olly@survex.com> * doc/aven.sgml,lib/codes.po,src/: Rename the "depth bar" to "colour key", which better describes it now that it might show dates or errors. Fri Sep 23 15:19:33 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h,src/guicontrol.cc: Fix the conditions under which colour by date can be enabled to fully match what we now intend. Fri Sep 23 15:04:35 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/mainfrm.cc: Enable "colour by date" if there are any surveys with date information. Move the "Undated" / "Not in loop" entry down a little to improve the appearance. Make each entry in the colour keys a pixel taller so it's an even number of pixels and will divide by two exactly. Fri Sep 23 14:59:33 GMT 2011 Olly Betts <olly@survex.com> * src/fnt.cc: Remove "*1.25" fudge factor from font size for texture mapped fonts. Fri Sep 23 12:44:18 GMT 2011 Olly Betts <olly@survex.com> * lib/en_US.po: Update for new messages. Fri Sep 23 12:41:16 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Expand context menu for compass to include "View North", etc; Similarly add "Plan" and "Elevation" to clino context menu. Fri Sep 23 12:25:10 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Use += to make code clearer. Fri Sep 23 12:16:36 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/gfxcore.cc,src/gfxcore.h,src/guicontrol.cc: Add pop-up menus for right clicks on scale bar, compass, and clino. Fri Sep 23 11:17:31 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Use HasRangeOfDates() consistently. Thu Sep 22 23:56:06 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Add missing newline to OpenGL info when GLX info isn't reported. Thu Sep 22 13:51:55 GMT 2011 Olly Betts <olly@survex.com> * survex.spec.in: Man pages are no longer installed in /usr/man so no need to move them from there. Package aven.svg. Package files for vim support. (Fixes from James Begley) Thu Sep 22 12:45:58 GMT 2011 Olly Betts <olly@survex.com> * lib/: Updates from launchpad. Thu Sep 22 07:12:22 GMT 2011 Olly Betts <olly@survex.com> * lib/: Update .po files from template. Thu Sep 22 07:12:01 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po: Improvements to "TRANSLATORS" comments. Thu Sep 22 02:47:33 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Add check that numeric codes haven't escaped into the translated .po files. Wed Sep 21 14:38:16 GMT 2011 Olly Betts <olly@survex.com> * lib/es.po: Update with new msgids. Wed Sep 21 14:37:53 GMT 2011 Olly Betts <olly@survex.com> * lib/en_US.po: Fix typo (doubled "). Wed Sep 21 14:37:14 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Check format of .po files with msgfmt -c --check-accelerators. Wed Sep 21 13:49:05 GMT 2011 Olly Betts <olly@survex.com> * lib/en_US.po: Update en_US translation. Wed Sep 21 13:47:36 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/cad3d.c: Tweak wording of a message. Remove "unused" messages which have actually just been adapted slightly, add back a removed unused message, and mark an unused message as unused. ` Wed Sep 21 13:20:58 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/mainfrm.cc: Make more messages translatable. Wed Sep 21 12:53:02 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/: cmdline_set_syntax_message() now takes message numbers, plus an optional string argument. Wed Sep 21 12:17:19 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix to set the correct filename on the root of the survey tree. Wed Sep 21 11:25:53 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/log.cc,src/mainfrm.cc,src/printwx.cc: Make more messages translatable. Wed Sep 21 07:30:28 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/dump3d.c,src/gfxcore.cc,src/mainfrm.cc: Make more messages translatable. In the colour key for "colour by date", change "No info" to "Undated". Wed Sep 21 04:20:52 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/cavernlog.cc: Allow the "Reprocess" button label in aven's cavern log window to be translated. Wed Sep 21 04:07:29 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/: Extract all the help strings in --help output and make them available for translation. Wed Sep 21 04:04:31 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Check there are no duplicate message codes in codes.po as part of "make check". Wed Sep 21 02:29:21 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Eliminate glReadPixels() call from src/gfxcore.cc. Wed Sep 21 02:28:21 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,lib/en_US.po,src/aboutdlg.cc: Make all strings in src/aboutdlg.cc translatable. Wed Sep 21 01:56:15 GMT 2011 Olly Betts <olly@survex.com> * doc/manual.sgml: Tweak text about Debian packages. Tue Sep 20 11:31:03 GMT 2011 Olly Betts <olly@survex.com> * tests/: Update FSF address. Tue Sep 20 11:28:50 GMT 2011 Olly Betts <olly@survex.com> * lib/print.ini: Update reference to Survex 1.1; update FSF address. Tue Sep 20 06:43:56 GMT 2011 Olly Betts <olly@survex.com> * src/img.c: Only define INT32_T if it isn't already defined (it will be for 1.0.x). Tue Sep 20 06:43:23 GMT 2011 Olly Betts <olly@survex.com> * src/cavern.c: Remove unused function left over from recent change to how coordinate ranges get reported. Tue Sep 20 06:42:31 GMT 2011 Olly Betts <olly@survex.com> * make_release: Use the URL field from svn info in the command we give to take this release rather than hard-coding the URL for trunk. Tue Sep 20 05:43:11 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Building on 10.6 should work on 10.7, so update comment to more clearly reflect that. Tue Sep 20 05:39:50 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/cavern.c: Fix reporting of ranges of survey coordinates, which was broken by the message handling changes in 1.2.0. Tue Sep 20 04:30:14 GMT 2011 Olly Betts <olly@survex.com> * configure.in,src/moviemaker.cc: Fix to build with FFmpeg library versions in Debian unstable, as well as those in Debian stable. Tue Sep 20 03:51:40 GMT 2011 Olly Betts <olly@survex.com> * src/moviemaker.cc: Updates towards compatibility with newer FFmpeg libraries without breaking build with those in Debian stable. Tue Sep 20 03:41:58 GMT 2011 Olly Betts <olly@survex.com> * src/avenprcore.h: Declare border as "struct border" rather than as a typedef to avoid a -Wshadow warning. Tue Sep 20 00:15:07 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Perhaps the final update for 1.2.0. Tue Sep 20 00:09:42 GMT 2011 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Fix to correctly handle non-ASCII glyphs by using glyphshow in the generated PostScript code rather than relying on the numeric encoding order of the font to match Unicode (which doesn't generally seem to be the case). Tweak to process files without slurping them all into memory where that's easy to do. Mon Sep 19 23:15:46 GMT 2011 Olly Betts <olly@survex.com> * src/fnt.cc: Use FNT_MAXCHAR instead of literal 256. Mon Sep 19 21:58:50 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Revert CPP=cpp change - it's not required. Revert to using wx 2.8.11 and 2.8.12 seems to fail to build. Output of hdid can contain spaces as well as tabs (man page only documents tabs) so update regexps to take this into account. Mon Sep 19 11:52:50 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Add comment noting that Xcode is probably required. Since wxWidgets only supports building for a single arch at a time, build for i386 by default, which should also work on x86_64. Pass CPP=cpp to wxWidgets configure (not certain if this is actually needed, or was something tried on the way to discovering that only one -arch option can be passed). Sun Sep 18 12:24:41 GMT 2011 Olly Betts <olly@survex.com> * make_release: No need to force disabling of libavcodec for mingw - it gets automatically disable if not present. Sun Sep 18 12:23:39 GMT 2011 Olly Betts <olly@survex.com> * src/moviemaker.cc: Fix disabling of libavcodec-using code when libavcodec isn't present. Sun Sep 18 11:50:06 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Update 1.2.0 release date. Sun Sep 18 11:49:46 GMT 2011 Olly Betts <olly@survex.com> * make_release: Disable use of libavcodec for mingw for now. Sun Sep 18 02:51:52 GMT 2011 Olly Betts <olly@survex.com> * make_release: Fix comment typo. Sun Sep 18 02:50:30 GMT 2011 Olly Betts <olly@survex.com> * doc/TODO.htm: Update in preparation for releasing 1.2. Sun Sep 18 02:49:53 GMT 2011 Olly Betts <olly@survex.com> * src/gla-gl.cc: Only try to read the GLX version on platforms which use GLX. Sun Sep 18 02:03:13 GMT 2011 Olly Betts <olly@survex.com> * Makefile.am,doc/Makefile.am: Don't list other .in files explicitly in EXTRA_DIST. Sun Sep 18 01:59:49 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: survex.keys.in will get shipped because it is used by AC_CONFIG_FILES so there's no need to list it explicitly in EXTRA_DIST. Sun Sep 18 01:56:18 GMT 2011 Olly Betts <olly@survex.com> * configure.in,lib/Makefile.am,lib/po-to-msg.pl: Fix .msg file generation to work when srcdir != builddir. Drop the "dontextract" mechanism which automatically generates headers to allows building a version with translations for the messages for errors in loading the messages file, as it doesn't seem worth the effort to get it working again. It's easy to write such a header by hand if you really want to do this. Fri Sep 16 14:26:43 GMT 2011 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.2.0. Fri Sep 16 14:22:20 GMT 2011 Olly Betts <olly@survex.com> * lib/icons/Makefile.am,lib/icons/aven.png,lib/icons/aven.svg: Add new version of aven icon, redrawn in SVG so it displays nicely at larger sizes. Fri Sep 16 12:55:05 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/cavern.c: Add --3d-version option to allow the user to specify the version of the 3d format to output. (ticket#21) Fri Sep 16 12:52:55 GMT 2011 Olly Betts <olly@survex.com> * src/img.c,src/img.h: Make the highest and lowest valid values for img_output_version available in img.h as IMG_VERSION_MIN and IMG_VERSION_MAX. Fri Sep 16 05:49:12 GMT 2011 Olly Betts <olly@survex.com> * src/aventreectrl.cc,src/guicontrol.cc,src/mainfrm.cc: Don't use deprecated members or methods of wxKeyEvent. Fri Sep 16 03:36:54 GMT 2011 Olly Betts <olly@survex.com> * lib/map.png: Remove scan of map which isn't used and we probably don't have rights to redistribute. Fri Sep 16 03:16:01 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: If a label isn't valid UTF-8, treat it as CP1252 (the Microsoft superset of ISO8859-1). Fri Sep 16 03:00:51 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Remove special handling for toggling "full screen" on wxGTK as it's no longer required with modern versions. Fri Sep 16 02:05:12 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h,src/mainfrm.cc: Don't redraw the survey on every mouse movement in the survey pane unless the measuring line is (or just was) active. (ticket #17) Thu Sep 15 03:58:59 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc: Comment improvements. Thu Sep 15 03:51:27 GMT 2011 Olly Betts <olly@survex.com> * tests/smoke.tst: aven no longer requires an X display for --help or --version, so replace skip of this check with a check that this remains the case. Thu Sep 15 02:27:57 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Thu Sep 15 02:11:28 GMT 2011 Olly Betts <olly@survex.com> * lib/Makefile.am: Distribute codes.po. Thu Sep 15 02:08:35 GMT 2011 Olly Betts <olly@survex.com> * configure.in,survex.spec.in: Default to installing docs into /usr/share/doc/survex rather than /usr/doc/survex. Wed Sep 14 01:57:45 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix another potential read beyond the end of a string. Wed Sep 14 01:35:20 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix potential reading off end of string - fix from Stuart Bennett. Wed Sep 14 00:33:16 GMT 2011 Olly Betts <olly@survex.com> * lib/es.po: Update from launchpad. Tue Sep 13 22:05:59 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Use wx 2.8.12. Tue Sep 13 11:32:18 GMT 2011 Olly Betts <olly@survex.com> * src/aven.cc,src/aven.h,src/gla-gl.cc: Explicitly request double-buffering, which seems to be needed for systems with GLX >= 1.3. Report GLX version and whether double-buffering is in use in the about dialog. Sun Jun 19 11:19:51 GMT 2011 Olly Betts <olly@survex.com> * src/: Try to report errors from generating movie more helpfully. Fri Jun 17 06:33:38 GMT 2011 Olly Betts <olly@survex.com> * src/moviemaker.cc: Eliminate use of deprecated function av_alloc_format_context(). Fri Jun 17 06:32:50 GMT 2011 Olly Betts <olly@survex.com> * src/moviemaker.cc: Simplify the loop to flip the image vertically. Fri Jun 17 06:17:20 GMT 2011 Olly Betts <olly@survex.com> * configure.in,src/moviemaker.cc,src/moviemaker.h: Use libswscale to convert images to add to the video. Movie export now working again! Fri Jun 17 06:16:46 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: No need to specify true to PlayPres - that's the default. Fri Jun 17 06:15:34 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc: Set the play speed to "x1" during video recording. Fri Jun 17 05:43:12 GMT 2011 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gfxcore.h: Rename 'mpeg' member to 'movie'. Fri Jun 17 04:30:12 GMT 2011 Olly Betts <olly@survex.com> * configure.in,src/moviemaker.cc,src/moviemaker.h: Mostly update movie making code to work with current FFmpeg. Still TODO: convert call to img_convert() to use sws_scale() - currently you just get an all green movie! Mon May 30 07:40:12 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Fix URL for downloading wxWidgets tarball. Sat May 28 12:39:11 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Build for x86_64 as well as i386. Sat May 28 06:14:09 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Fix comment typo. Sat May 28 06:08:10 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Don't assume the volume gets mounted on /Volumes/Survex as it won't be if that mount point is already in use. Thu May 26 16:09:05 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po,src/aven.cc,src/mainfrm.cc,src/mainfrm.h: Use more stock IDs. Thu May 26 14:52:00 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/printwx.cc: Use stock wx button IDs wxID_PRINT and wxID_PREVIEW where appropriate. Thu May 26 14:47:52 GMT 2011 Olly Betts <olly@survex.com> * lib/codes.po: Mark unused messages by commenting out with '#~'. Thu May 26 14:34:29 GMT 2011 Olly Betts <olly@survex.com> * src/printwx.h: Fix comment typo. Thu May 26 12:47:44 GMT 2011 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/printwx.cc: When using a standard wxID_xxx id with wxButton, use the implicit default label, as the wx documentation recommends. Thu May 26 12:28:11 GMT 2011 Olly Betts <olly@survex.com> * src/: Remove the unused preferences dialog code - we can easily fish it back out of SVN should we want it later, so no point having it sitting there making every checkout bigger. Tue May 24 05:21:52 GMT 2011 Olly Betts <olly@survex.com> * configure.in,doc/Makefile.am,doc/survex.1.in: Move survex man page to section 7 (since it isn't documenting an actual command). Tue May 24 05:17:53 GMT 2011 Olly Betts <olly@survex.com> * doc/Makefile.am: Write generated man page to a temporary file, then atomically rename, to avoid leaving an empty or partial man page behind if docbook-to-man dies (I managed to ship an empty cad3d.1 in 1.1.16). Sat May 21 22:05:04 GMT 2011 Olly Betts <olly@survex.com> * lib/fr.po: Fold in addition of accent from launchpad. Sat May 21 22:04:31 GMT 2011 Olly Betts <olly@survex.com> * lib/: Remove comments which are only relevant for other languages from .po files. Add more clarifying comments. Thu May 19 05:23:03 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Remove as no longer used. Wed May 18 09:06:19 GMT 2011 Olly Betts <olly@survex.com> * lib/,src/mainfrm.cc,src/mainfrm.h: We now use .po and .pot files as the master format for storing translations in (rather than messages.txt), and then translate these into Survex's .msg format. Wed May 18 08:37:01 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fix variant en-us message which ought not be different. Wed May 18 05:50:07 GMT 2011 Olly Betts <olly@survex.com> * make_release: Print out the commands needed to tag the release. Tue May 17 01:24:59 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt,src/cavern.c: Drop "non-fatal" from the report of how many errors there were at the end of the run - it just confuses users - we won't even get here if there's a fatal error! * lib/messages.txt: Add missing translations of two "Export" variants for ca, sk, and ro. Tue May 17 01:03:06 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Fix typo. Mon May 16 22:18:53 GMT 2011 Olly Betts <olly@survex.com> * buildmacosx.sh: Extract tarball quietly, and just say we're doing it. Add missing quoting to variable expansions. Mon May 16 05:59:32 GMT 2011 Olly Betts <olly@survex.com> * NEWS: Another pre-1.1.16 update. Mon May 16 05:54:30 GMT 2011 Olly Betts <olly@survex.com> * Makefile.am: Include all the available wxstd.mo files into the Microsoft Windows installer, rather than trying to just include those which we have translations for. This avoids having to maintain a list of which to include, and gives users translations of wxWidgets messages even if they don't get Survex messages translated. Mon May 16 05:53:49 GMT 2011 Olly Betts <olly@survex.com> * doc/HACKING.htm: Update version of InnoSetup used. Note the packages needed on Debian to build the Microsoft Windows installer. Mon May 16 05:22:03 GMT 2011 Olly Betts <olly@survex.com> * doc/HACKING.htm: Note Debian packages to install for docs. Mon May 16 05:21:27 GMT 2011 Olly Betts <olly@survex.com> * survex.iss.in: Add comment noting that AppVerName isn't required by newer InnoSetup. Sun May 15 04:11:34 GMT 2011 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.1.16. Sun May 15 03:44:17 GMT 2011 Olly Betts <olly@survex.com> * lib/fixmsgs.pl: Update to fix UTF-8 rather than ISO8859-1. Sun May 15 03:43:46 GMT 2011 Olly Betts <olly@survex.com> * lib/named-entities.txt: Add hellip and rarr. Sun May 15 03:39:02 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fix clashing menu shortcuts from recent translation updates. Sun May 15 03:20:50 GMT 2011 Olly Betts <olly@survex.com> * src/message.c: 0x2026 (…): Handle for WINCP1252, and transliterate to '...' for charsets which don't have it. 0x2192 (→): Transliterate to '->' for charsets which don't have it. Handle Š, š, Ž, ž for WINCP1252. * lib/messages.txt: Use '→' instead of '->' and '…' instead of '...'. Sun May 15 02:59:42 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fix literal accented characters. Sun May 15 02:55:50 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fold in de updates from launchpad. Sun May 15 02:36:02 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fold in es updates from launchpad. Sun May 15 02:19:45 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fold in it updates from launchpad. Sun May 15 02:00:45 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fold in pt-br updates from launchpad. Sun May 15 01:53:22 GMT 2011 Olly Betts <olly@survex.com> * lib/messages.txt: Fold in pt updates from launchpad. Mon Mar 14 01:58:10 GMT 2011 Olly Betts <olly@survex.com> * configure.in: Link with -lGL, if it exists to support linking with gold or GNU ld --as-needed (Debian bug #615781). Thu Mar 03 13:16:19 GMT 2011 Olly Betts <olly@survex.com> * src/img.c: Fix code typo for IMG_API_VERSION == 0 case. Thu Mar 03 12:32:57 GMT 2011 Olly Betts <olly@survex.com> * src/img.c: Fix typo in code used when IMG_HOSTED isn't defined. Wed Oct 20 09:53:56 GMT 2010 Olly Betts <olly@survex.com> * lib/messages.txt: "Colour" -> "Color" in en-us. Sun Oct 17 14:10:21 GMT 2010 Olly Betts <olly@survex.com> * lib/messages.txt: Assorted comment improvements and tweaks. Sat Oct 16 11:12:42 GMT 2010 Olly Betts <olly@survex.com> * src/moviemaker.h: Remove unused <stdio.h>. Shouldn't include <config.h> in headers, only sources. Sat Oct 16 10:13:10 GMT 2010 Olly Betts <olly@survex.com> * doc/TODO.htm: Remove entries which have now been done. Fri Oct 15 06:57:46 GMT 2010 Olly Betts <olly@survex.com> * tests/extend.tst: Fix to file .espec files when srcdir != builddir. Fri Oct 15 05:48:09 GMT 2010 Olly Betts <olly@survex.com> * NEWS: Final update fro 1.1.15. Fri Oct 15 05:20:40 GMT 2010 Olly Betts <olly@survex.com> * src/editwrap.c: Convert to use wide-character Unicode. Fri Oct 15 05:20:04 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix to work on Microsoft Windows. Thu Oct 14 22:50:09 GMT 2010 Olly Betts <olly@survex.com> * tests/extend.tst: Enable eswap-break testcase now that diffpos is fixed. Thu Oct 14 22:48:06 GMT 2010 Olly Betts <olly@survex.com> * src/diffpos.c: Handle files with duplicate labels in better - extend generates duplicate labels when it breaks a loop. Wed Oct 13 15:39:04 GMT 2010 Olly Betts <olly@survex.com> * make_release: -Dunix when running make distcheck with the preprocessor in C89 mode. Wed Oct 13 15:33:23 GMT 2010 Olly Betts <olly@survex.com> * src/cavern.c: Fix C++ comment. Wed Oct 13 15:07:31 GMT 2010 Olly Betts <olly@survex.com> * NEWS,configure.in: 1.1.15. Wed Oct 13 15:00:51 GMT 2010 Olly Betts <olly@survex.com> * configure.in,src/: Define GETC() in config.h and use it everywhere. Similarly define PUTC() to use putc_unlocked() where available and use that everywhere too. Wed Oct 13 13:41:17 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Remove superfluous nested declaration. Wed Oct 13 11:19:29 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: mingw doesn't have _get_wpgmptr() so use the deprecated _wpgmptr instead. mingw doesn't have errno_t so use int instead. Wed Oct 13 10:49:18 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: (Microsoft Windows) Quote for any meta characters, not just space. Wed Oct 13 10:27:38 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: (Microsoft Windows) Use _get_wpgmptr() to get wide path to aven rather for running cavern. Thu Oct 07 22:38:43 GMT 2010 Olly Betts <olly@survex.com> * src/datain.h,src/useful.c: Use getc_unlocked() if available. Thu Oct 07 14:25:13 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Use _wfopen() on Microsoft Windows when loading and saving presentations so that paths with non-Latin1 characters in can be processed. Thu Oct 07 12:52:22 GMT 2010 Olly Betts <olly@survex.com> * configure.in,src/cavernlog.cc: Use getc_unlocked() if available. Thu Oct 07 12:42:21 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Don't call Update() after every line, but only when we don't have data from cavern pending. Hopefully addresses ticket#12. Wed Oct 06 02:25:31 GMT 2010 Olly Betts <olly@survex.com> * make_release: Never set CFLAGS or CXXFLAGS in the environment. Build mingw version in an unpacked source tree from the release tarball. Wed Oct 06 02:09:33 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix code indentation. Wed Oct 06 02:08:38 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Revert to using mb_str() for popen() and system() on Unix. Wed Oct 06 02:02:54 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Use _wpopen() and _wsystem() on Microsoft Windows so that paths with non-Latin1 characters in can be processed. Wed Oct 06 01:16:03 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Need to quote filenames with spaces in for Microsoft Windows. Wed Oct 06 00:54:44 GMT 2010 Olly Betts <olly@survex.com> * lib/Makefile.am: Ship the extra .isl translation files for Innosetup. Wed Oct 06 00:49:18 GMT 2010 Olly Betts <olly@survex.com> * src/datain.c: Add missing include of date.h. Wed Oct 06 00:48:28 GMT 2010 Olly Betts <olly@survex.com> * src/date.c,src/date.h: Add files for date handling. Tue Oct 05 12:48:19 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/gla.h: Check whether blobs and crosses actually render correctly as points/point sprites, and if they don't, fall back to drawing them with lines. Tue Oct 05 10:53:56 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc,src/gla.h: Cache the best method for drawing blobs and crosses, and recheck automatically if the graphics hardware or drivers are changed or upgraded. Mon Oct 04 11:18:22 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Add \n to commented out debug message. Mon Oct 04 09:58:17 GMT 2010 Olly Betts <olly@survex.com> * doc/index.htm.in,doc/manual.sgml,doc/survex.ent,lib/print.ini, src/printwx.cc,survex.iss.in: Use http://survex.com/ rather than http://www.survex.com/ - the former is the canonical name and www.survex.com just redirects. Mon Oct 04 09:46:24 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Don't offer "All files" wildcard in presentation save dialog. Mon Oct 04 08:19:40 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Pass GL_TRUE to OpenGL functions, rather than true. Sun Oct 03 06:46:03 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.cc,src/gla-gl.cc,src/gla.h: Use double instead of Double in cases where the value isn't being passed to OpenGL. Sun Aug 22 13:30:54 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: If we aren't using GL_POINTS for blobs, draw them using a series of abutting lines rather than with gluDisk which is faster and gives a consistent shape. Sat Aug 21 14:33:54 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix another use of GL_POINT_SIZE_RANGE to GL_SMOOTH_POINT_SIZE_RANGE. Sat Aug 21 14:30:56 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Fix non-USE_FNT case to work again (it's limited to ISO-8859-1 characters though). Sat Aug 21 13:31:17 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Use GL_SMOOTH_POINT_SIZE_RANGE and GL_SMOOTH_POINT_SIZE_GRANULARITY instead of GL_POINT_SIZE_RANGE and GL_POINT_SIZE_GRANULARITY (unless they aren't defined) as the latter two are deprecated in OpenGL >= 1.2. If GL_ALIASED_POINT_SIZE_RANGE is available (OpenGL >= 1.2 again) then report its value in the about box. Fri Aug 20 12:26:40 GMT 2010 Olly Betts <olly@survex.com> * doc/3dformat.htm,lib/messages.txt,src/,tests/: New v7 of .3d format which stores survey dates as number of days since Jan 1st 1900, so we now support dates from 1900-2078 (rather than 1970-2037) with a smaller file size. The img API is now versioned - you can select the new "version 1" by compiling with -DIMG_API_VERSION=1, which gives the survey dates in days in days1 and days2 instead of as time_t values in date1 and date2. Fixes ticket#14. Fri Aug 20 12:12:54 GMT 2010 Olly Betts <olly@survex.com> * src/printwx.cc: Remove unused '#include <time.h>'. Fri Aug 20 12:10:55 GMT 2010 Olly Betts <olly@survex.com> * src/avenprcore.cc: Remove unused '#include <time.h>'. Fri Aug 20 10:10:05 GMT 2010 Olly Betts <olly@survex.com> * src/export.cc: Explicit #include <time.h> for strftime(). Wed Aug 18 13:59:30 GMT 2010 Olly Betts <olly@survex.com> * src/osdepend.h: Remove workaround for DOS Turbo C compiler. Wed Aug 18 02:03:39 GMT 2010 Olly Betts <olly@survex.com> * buildmacosx.sh,configure.in,lib/Info.plist.in: Make buildmacosx.sh work. Tue Aug 17 01:43:24 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.h: "using svx::Point;" gives an error, so use a macro instead. Wed Aug 04 03:27:22 GMT 2010 Olly Betts <olly@survex.com> * src/img.c: Fix cast in get16() to be to short not long. Wed Aug 04 02:32:16 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc,src/cavernlog.h: "Rerun" -> "Reprocess" to follow terminology in manual, etc. Fixes ticket#15. Wed Jul 28 17:06:49 GMT 2010 Olly Betts <olly@survex.com> * tests/: Most tests weren't actually running and testcases (looks like a sh portability issue). Fixed, and fortunately all tests still pass. Mon Jul 26 12:30:43 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: Fix typo "of" -> "on". Mon Jul 26 11:59:59 GMT 2010 Olly Betts <olly@survex.com> * NEWS,configure.in: Update for 1.1.14. Mon Jul 26 11:53:01 GMT 2010 Olly Betts <olly@survex.com> * lib/messages.txt,src/: Remove things we no longer need now we've dropped support for RISC OS and DOS. Mon Jul 26 11:19:40 GMT 2010 Olly Betts <olly@survex.com> * src/cmdline.c: Remove reference to MSDOS. Mon Jul 26 10:23:07 GMT 2010 Olly Betts <olly@survex.com> * src/: Strip out "Far" and "Huge" which we no longer need now that DOS memory models are no longer relevant. Mon Jul 26 09:57:37 GMT 2010 Olly Betts <olly@survex.com> * configure.in: No need for AC_PROG_MAKE_SET when using automake. Mon Jul 26 09:48:10 GMT 2010 Olly Betts <olly@survex.com> * configure.in,src/useful.h: On little-endian architectures, make get16() and get32() inline functions, rather than macros which use a global variable. Mon Jul 26 09:31:14 GMT 2010 Olly Betts <olly@survex.com> * src/useful.c: Remove commented out code. Mon Jul 26 09:19:19 GMT 2010 Olly Betts <olly@survex.com> * configure.in,src/img.c,src/useful.c,src/useful.h: Use AC_TYPE_INT16_T and AC_TYPE_INT32_T instead of home-brew equivalents. Mon Jul 26 08:40:43 GMT 2010 Olly Betts <olly@survex.com> * src/listpos.c: In "Station X referred to just once, with an explicit prefix - typo?" warning, give file and linenumber where the *equate occurred. Mon Jul 26 08:37:46 GMT 2010 Olly Betts <olly@survex.com> * src/readval.c: Fix comment typo. Mon Jul 26 08:29:41 GMT 2010 Olly Betts <olly@survex.com> * src/listpos.c: In "Station X referred to by *entrance or *export but never used" warning, give file and linenumber where the *entrance or *export occurred. Mon Jul 26 07:44:26 GMT 2010 Olly Betts <olly@survex.com> * src/aventreectrl.cc: Fix double-click handling for survey tree on wxMSW >= 2.8.11. Mon Jul 26 07:25:59 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Stop passing wxNO_FULL_REPAINT_ON_RESIZE as it is 0 on all versions of wxWidgets we support (i.e. 2.6 and later). Mon Jul 26 07:21:35 GMT 2010 Olly Betts <olly@survex.com> * INSTALL,src/: Restore compatibility with wxWidgets 2.6. Mon Jul 26 06:29:03 GMT 2010 Olly Betts <olly@survex.com> * src/netskel.c: In "Unused fixed point" warning, give file and linenumber where the "*fix" occurred. Mon Jul 26 06:24:35 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix highlighting of links in CavernLog window to highlight just <file>:<line> (and not the ': ' after), and to make the title for the terminal the warning/error message. Make the checking stricter by checking that the linenumber is a number, to avoid false positives. Mon Jul 26 04:48:12 GMT 2010 Olly Betts <olly@survex.com> * Revert this change, as it appears wxMotif does support wxGLCanvas: * doc/manual.sgml: wxMotif apparently doesn't support wxGLCanvas, which is required by Aven in 1.1.x, so remove mention of Motif from manual. Mon Jul 26 03:24:38 GMT 2010 Olly Betts <olly@survex.com> * src/: Add "Rerun" and "OK" buttons to the CavernLog window (as appropriate). (Addition of "OK" button fixes ticket#13). Fix up handling of splitter window to fix poor handling of various cases. Sun Jul 25 15:32:42 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/mainfrm.h: Clean up code which sorts out loading a file (and processing it first if necessary). Sun Jul 25 07:20:05 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.h: Fix filename in comment at top. Sun Jul 25 07:17:20 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Don't double escape the contents of href and target in links in the log. Sun Jul 25 06:32:24 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Remove commented out calls to set the input encoding of the HTML parser - we now always escape non-ASCII characters as HTML entities. Fri Jul 23 14:15:25 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.h: Improve doc comment for process() method. Fri Jul 23 12:38:43 GMT 2010 Olly Betts <olly@survex.com> * src/printwx.cc,src/printwx.h: Don't compile in the preview code when we disable the preview feature. Fri Jul 23 12:15:31 GMT 2010 Olly Betts <olly@survex.com> * src/printwx.cc: The Gnome print dialog has its own preview window so suppress ours if using the Gnome one. Fri Jul 23 11:21:52 GMT 2010 Olly Betts <olly@survex.com> * configure.in: Update the wx-config probing code - wxmac-config etc aren't present with newer wxWidgets versions. Fri Jul 23 05:55:37 GMT 2010 Olly Betts <olly@survex.com> * buildmacosx.sh: Update to use WX_CONFIG not WXCONFIG. Update to use a Unicode build. If building a private wx, use wx 2.8.11 not 2.7.0-1 (and don't replace carbon-glcanvas.cpp with our own version). Sat Jul 10 12:15:23 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Set the select timeout before calling wxYield() when waiting for output from cavern to 0.1s instead of 0.00001s to avoid yielding excessively on slower machines where this is likely to really slow things down. Call Scroll() only once per line in the case where we are updating the scrollbar position. Call Update() instead of wxYield() after each line, since that's enough to get the window updated. Remove unused assignment "ch = left;" at end of loop. Fri Jul 09 14:42:47 GMT 2010 Olly Betts <olly@survex.com> * configure.in: Link aven with -lGLU which SuSE Linux needs. Fri Jul 09 14:31:39 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Highlight stations matching any current search when a file is loaded. (ticket#9) Thu Jul 01 12:20:58 GMT 2010 Olly Betts <olly@survex.com> * survex.iss.in: Clean up comments from over-enthusiastic search and replace which modified comments as well as code. Thu Jul 01 10:15:06 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.h: Work around Mac OS X polluting the global namespace with a "Point" class. Thu Jul 01 10:10:45 GMT 2010 Olly Betts <olly@survex.com> * src/Makefile.am: Remove FIXME which has already been resolved. Fri Jun 18 11:04:35 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: wxMotif apparently doesn't support wxGLCanvas, which is required by Aven in 1.1.x, so remove mention of Motif from manual. Fri Jun 18 03:03:55 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml,src/aventreectrl.cc,src/gfxcore.cc,src/mainfrm.h: Correctly capitalise "GTK". Fri Jun 18 02:58:06 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: Note that on Linux we only regularly test builds with the GTK+ version (change taken from 1.0). Wed Jun 16 04:44:26 GMT 2010 Olly Betts <olly@survex.com> * doc/Makefile.am: Use stampfile to stop unwanted rebuilds of the HTML version of the manual. Wed Jun 16 02:59:48 GMT 2010 Olly Betts <olly@survex.com> * configure.in: Only ask for core, gl, and html wx libs to avoid linking to a load of others we don't use. Tue Jun 15 17:01:41 GMT 2010 Olly Betts <olly@survex.com> * INSTALL: Update. Tue Jun 15 16:53:28 GMT 2010 Olly Betts <olly@survex.com> * src/aven.cc: Fix to work with wxWidgets 2.6 too. Tue Jun 15 15:38:49 GMT 2010 Olly Betts <olly@survex.com> * lib/survex-aven.desktop,lib/survex-svxedit.desktop: Merge in .desktop file updates from 1.0.39.1-4 Debian package. Tue Jun 15 14:40:04 GMT 2010 Olly Betts <olly@survex.com> * doc/Makefile.am: Fix lingering references to @DOCS_OTHER@. Tue Jun 15 14:32:55 GMT 2010 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog. Tue Jun 15 14:09:29 GMT 2010 Olly Betts <olly@survex.com> * Makefile.am,configure.in,doc/Makefile.am,make_release: Scrap the "alternative manual formats" zip file - people will generally just want one of them, so downloading several together isn't very useful. Replace PostScript version of manual with a PDF version (more compact and more people will have software to read PDF). Don't generate RTF format by default as PDF is more useful if you want a formatted version to print. Tue Jun 15 13:36:30 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: Merge the "Contributing" section into the "Mailing List" section. Tue Jun 15 12:57:13 GMT 2010 Olly Betts <olly@survex.com> * Makefile.am,make_release: Just produce a zip file with the alternative manual formats - a self-extracting .exe is harder to use on other platforms, and most people have a zip file extractor installed. Tue Jun 15 12:36:13 GMT 2010 Olly Betts <olly@survex.com> * survex.spec.in: Update survex.com URLs to drop "www.". Update wxGTK dependency to >= 2.6.0. Reenable "BuildRequires:" as the issue with building the package on Debian is no longer relevant. Tue Jun 15 12:35:19 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: Update (C) years. "MacOS X" -> "Mac OS X". Tue Jun 15 12:13:42 GMT 2010 Olly Betts <olly@survex.com> * doc/manual.sgml: Remove out of date postal addresses - we can probably safely assume people have email these days. Direct people to the mailing list since they are likely to get a quicker response rather than mailing individuals. Remove mention of a paper mailing list. Remove mention of sending us a floppy (!) or blank CDR to get a version as I can't recall the last time I gave someone a copy on physical media. Tue Jun 15 11:22:56 GMT 2010 Olly Betts <olly@survex.com> * Makefile.am,make_release: I can't persuade rpmbuild to work sanely, and people can just as easily build binary RPMs from the source tarball as from the srpm, so just remove the rpm target from the makefile and code which uses it from make_release - it's less to have to maintain too. Tue Jun 15 10:59:12 GMT 2010 Olly Betts <olly@survex.com> * make_release: Use "set -e" rather than checking the exit codes of commands. -t no longer disables targets - set mk to do that. Tue Jun 15 09:41:11 GMT 2010 Olly Betts <olly@survex.com> * make_release: Fix defaulting of list of things to do. Tue Jun 15 09:12:00 GMT 2010 Olly Betts <olly@survex.com> * src/gdtconvert: Add "Generated" comment to output file. Tue Jun 15 09:10:02 GMT 2010 Olly Betts <olly@survex.com> * src/gdtconvert: Add GPL license boilerplate. Tue Jun 15 08:53:28 GMT 2010 Olly Betts <olly@survex.com> * src/gettexttomsg.pl,src/wx.h: Add GPL boilerplate to files which were missing it. Tue Jun 15 08:46:28 GMT 2010 Olly Betts <olly@survex.com> * src/: Update FSF address in licence notices. Tue Jun 15 08:06:09 GMT 2010 Olly Betts <olly@survex.com> * src/guicontrol.cc: Allow "Toggle Fullscreen" to work even if no survey is loaded now that we persist the window size between invocations. Tue Jun 15 08:03:53 GMT 2010 Olly Betts <olly@survex.com> * src/gla-gl.cc: Use GL_BLEND rather than GL_ALPHA to work better with anti-aliased TXF files. Tue Jun 15 07:59:09 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Use font size from txf file rather than trying to calculate it from the texture fragment sizes. Tue Jun 15 07:48:13 GMT 2010 Olly Betts <olly@survex.com> * lib/Makefile.am,lib/TexFont.h,lib/gentexfont.c: Generate aven.txf with afm2txf.pl instead of gentexfont because gentexfont's licence doesn't allow distribution of modified versions. Tue Jun 15 07:43:48 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Add support for -o option to specify output .txf file. Tue Jun 15 07:10:16 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Sanitise $FONT to ensure it doesn't contain a '/'. Remove the temporary .ppm file at the end. Tue Jun 15 06:13:30 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Fix alignment of characters, backported from PLIB SVN. Tue Jun 15 05:05:05 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Quote $FONT when passing to external commands. Tue Jun 15 04:24:33 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Change character 96 from "grave" to "quoteleft". Tue Jun 15 04:22:59 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Extend to cover ISO-8859-1, not just ASCII. Tue Jun 15 04:08:34 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Clean up trailing whitespace. Tue Jun 15 04:02:40 GMT 2010 Olly Betts <olly@survex.com> * lib/afm2txf.pl: Add GPL script for creating txf files. Mon Jun 14 06:33:11 GMT 2010 Olly Betts <olly@survex.com> * lib/splash.png: Remove now unused graphical splash screen (it has hardcoded (C) details, which wasn't a good approach). Mon Jun 14 05:20:44 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Handle the left bearing and character width correctly. Mon Jun 14 04:44:22 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Change back to not using GL_COLOR_INDEX, but with still being able to set the font texture from a byte array. Mon Jun 14 04:23:22 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.h,src/gla-gl.cc: Pass the length of the string to fntTexFont::puts() rather than recalculating it inside the method. Sun Jun 13 12:57:08 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix switching to and from the CavernLogWindow pane to use wxSplitterWindow::ReplaceWindow() which fixes various issues with sizing and resizing of the panes. Sun Jun 13 12:23:23 GMT 2010 Olly Betts <olly@survex.com> * src/: Add wmsg_cfgpth() which caches the result of msg_cfgpth() as a wxString. Sun Jun 13 06:57:07 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc,src/gla-gl.cc,src/mainfrm.cc: wxString::fn_str() on wxmsw returns a wide string, which doesn't work with fopen(), etc, so call char_str() instead for now. Sun Jun 13 05:41:30 GMT 2010 Olly Betts <olly@survex.com> * src/printwx.cc: Use wxString::FromAscii() for the units on the scale bar which we know to be ASCII. No need to use msgPerm() for a message we assign to a wxString. Sun Jun 13 04:44:30 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc,src/printwx.cc: Use wxFileName::SplitPath() instead of baseleaf_from_fnm(). Sun Jun 13 00:57:11 GMT 2010 Olly Betts <olly@survex.com> * src/export.cc,src/gfxcore.cc: wxString::fn_str() on wxmsw returns a wide string, which doesn't work with fopen(), etc, so call char_str() instead for now. Sat Jun 12 15:07:54 GMT 2010 Olly Betts <olly@survex.com> * src/aven.cc: We can rely on our message catalog being UTF-8 so use wxString::FromUTF8() instead of wxConvUTF8. Sat Jun 12 14:26:32 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.cc: Use wxString::FromAscii() to convert date to wxString. Sun Jun 06 09:36:06 GMT 2010 Olly Betts <olly@survex.com> * src/Makefile.am: Use wx-config's --rescomp option to get the command and options needed to turn .rc files into object files. Fri Jun 04 15:32:27 GMT 2010 Olly Betts <olly@survex.com> * survex.iss.in: Specify "LZMANumFastBytes=273" which shaves a small amount of the installer size. Specify "DisableWelcomePage=yes" which is apparently in line with what other modern installers do. Fri Jun 04 14:32:04 GMT 2010 Olly Betts <olly@survex.com> * configure.in,make_release,make_release.in: We no longer need VERSION in make_release, so no need to generate it from configure. Fri Jun 04 14:00:58 GMT 2010 Olly Betts <olly@survex.com> * Makefile.am,xvfb-run: We no longer need an X display to run ISCC under Wine, so just run wine directly and removed version of Debian's xvfb-run script. * make_release.in: Pass variables to configure on the command line rather than in the enviornment. Running "make distcheck" no longer fails extend.tst, so remove comment about that. Use case rather than expr to check what we've been asked to build. Update to use unicode wx-config script for wxmsw. The wxmsw build spews warnings about aliasing issues, so turn on -fno-strict-aliasing to avoid any potential bugs from that. Enable -Werror for the wxmsw build. * Makefile.am: Update list of wxstd.mo files we package for wxmsw (add pt and sk) and where we copy them from. Copy the unofficial InnoSetup i18n files (.isl) from lib. Fri Jun 04 13:40:35 GMT 2010 Olly Betts <olly@survex.com> * doc/HACKING.htm: Update InnoSetup info. Fri Jun 04 13:07:01 GMT 2010 Olly Betts <olly@survex.com> * survex.iss.in: Update for InnoSetup 5.3.9. * lib/English_GB.isl,lib/Romanian-7-5.1.11.isl: Check in the unofficial i18n files for InnoSetup which we use. Fri Jun 04 13:05:18 GMT 2010 Olly Betts <olly@survex.com> * src/Makefile.am: Update path to wx RC file. Fri Jun 04 12:44:39 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Explicitly construct temporary wxString() which is needed to avoid overload ambiguity under __WXMSW__. Fri Jun 04 12:41:59 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Add missing wxT() to string and character constants only used in __WXMSW__ build. Fri Jun 04 12:19:18 GMT 2010 Olly Betts <olly@survex.com> * src/aven.cc: wxWidgets now has a Slovak translation, so remove the kludge to substitute Czech if Slovak isn't found. Fri Jun 04 05:08:14 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Fix character constant to be a string constant when building under WXMSW. Thu Jun 03 13:53:57 GMT 2010 Olly Betts <olly@survex.com> * NEWS: Update from ChangeLog for 1.1.13. Thu Jun 03 12:25:14 GMT 2010 Olly Betts <olly@survex.com> * Makefile.am,configure.in,debian/Makefile.am,debian/changelog: Remove .deb building machinery from upstream Makefile. Thu Jun 03 12:14:16 GMT 2010 Olly Betts <olly@survex.com> * make_release.in: Remove ancient workaround for getting wine to work. Remove .deb building machinery. Reenable distcheck to see if the problem with extend.tst has gone away. Update mingw cross-building machinery. Wed Jun 02 13:30:28 GMT 2010 Olly Betts <olly@survex.com> * configure.in,doc/GPL.htm,doc/index.htm.in: Remove HTML version of GPL - just link to the FSF's page. Wed Jun 02 13:26:55 GMT 2010 Olly Betts <olly@survex.com> * configure.in,make_release,make_release.in,update-debcl.pl: Use dch to update debian/changelog. Wed Jun 02 12:59:33 GMT 2010 Olly Betts <olly@survex.com> * configure.in,doc/Makefile.am,doc/cl2html.pl,doc/index.htm.in: Stop generating an HTML version of the ChangeLog - it's too low level to be of interest to non-developers, and developers can look at the source code. Wed Jun 02 09:38:25 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Whitespace tweaks. Wed Jun 02 09:28:37 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc,src/aboutdlg.h: Use standard button for "Copy" in About dialog. Change "OK" button to "Close" since nothing is being confirmed by clicking it. Call "Flush()" in wxTheClipboard to try to make the copied text persist after aven is closed, though this seems to currently do nothing on wxGTK at least. Tue May 18 12:59:00 GMT 2010 Olly Betts <olly@survex.com> * doc/HACKING.htm: Note jadetex needed. Note autoconf 2.64 works well. Tue May 18 02:06:00 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Remove now superfluous (). Mon May 17 14:33:00 GMT 2010 Olly Betts <olly@survex.com> * debian/Makefile.am: Update EXTRA_DIST Mon May 17 05:38:00 GMT 2010 Olly Betts <olly@survex.com> * src/cavernlog.cc: Fix small memory leak Mon May 17 05:33:00 GMT 2010 Olly Betts <olly@survex.com> * src/img.c: Don't leak filename_opened member. Mon May 17 05:13:00 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.cc: Initialise all GfxCore's member variables so we don't use them uninitialised. Mon May 17 05:11:00 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.h: Declare constants with enum rather than #define so they automatically get allocated unique values, and so they show up in the debugger. Mon May 17 02:39:00 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Make the map array static const Mon May 17 02:30:00 GMT 2010 Olly Betts <olly@survex.com> * src/fnt.cc: Set the font texture with GL_COLOR_INDEX so we can use a "byte format" font file without any translation, while a "bitmap format" font file needs a temporary array half the size. Mon May 17 00:56:00 GMT 2010 Olly Betts <olly@survex.com> * src/gfxcore.cc: Initialise 3 flags when we load a survey to avoid using them potentially uninitialised. Sun May 16 14:39:00 GMT 2010 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix cavern log window to behave if passed a .svx file on the command line. Sun May 16 14:27:00 GMT 2010 Olly Betts <olly@survex.com> * configure.in: Update copyright years. Sun May 16 14:23:00 GMT 2010 Olly Betts <olly@survex.com> * configure.in, src/aboutdlg.cc, src/aboutdlg.h, src/aven.cc, src/aven.h, src/avenprcore.cc, src/avenprcore.h, src/cavernlog.cc, src/cavernlog.h, src/export.cc, src/fnt.h, src/gfxcore.cc, src/gla-gl.cc, src/gla.h, src/guicontrol.cc, src/log.cc, src/mainfrm.cc, src/mainfrm.h, src/namecmp.h, src/printwx.cc, src/printwx.h: + Fix to build with a "unicode" build of wx. + Add "Copy" button to the About dialog to copy the system info to the clipboard. + List OpenGL extensions last, since there are usually lots of them with a modern gfx card. + When processing survey data, auto-scroll the log window until we've reported a warning or error. + Put the survey data log window in a splitter in the standard frame rather than having a separate frame for it. Sat Apr 17 12:13:00 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Add case for "GTK+ >= 2.6". Sat Apr 17 12:12:00 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Build string using preprocessor string concatenation rather than runtime appending, where possible. Sat Apr 17 12:00:00 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc: Update (C) date. Sat Apr 17 11:59:00 GMT 2010 Olly Betts <olly@survex.com> * src/aboutdlg.cc, src/aboutdlg.h: Use a wxTimer instead of idle events to avoid spinning on the CPU. Sat Apr 17 11:41:00 GMT 2010 Olly Betts <olly@survex.com> * configure.in: New preferred env var for wx-config script is WX_CONFIG. WXCONFIG still supported for compatibility. Tue Jul 28 08:16:00 GMT 2009 Olly Betts <olly@survex.com> * src/mainfrm.cc: The presentation filename now defaults to using the basename of the currently loaded dataset, but we always prompt before we first save with such a name. Tue Jul 28 04:37:00 GMT 2009 Olly Betts <olly@survex.com> * configure.in: Add comment to explain why we call wx-config twice. Tue Jul 28 04:36:00 GMT 2009 Olly Betts <olly@survex.com> * src/datain.c: Use fputs(m, f) instead of fprintf(f, m) in case m contains '%' (m comes from the messages file, so this isn't exploitable by sending someone a "bad" .svx or .3d file). Mon Jul 27 03:29:00 GMT 2009 Olly Betts <olly@survex.com> * src/mainfrm.cc: Fix to open rather than save when doing "open presentation" with wxmotif. Thu Mar 05 01:45:00 GMT 2009 Olly Betts <olly@survex.com> * doc/3dformat.htm: Document that this is version 6 and when we started to use it. Mon Dec 15 10:34:00 GMT 2008 Olly Betts <olly@survex.com> * src/gla-gl.cc: When saving a screenshot, perform the vertical flip of the image data in-place rather than using wxImage::Mirror() which creates a whole new wxImage object. Fri Dec 12 11:12:00 GMT 2008 Olly Betts <olly@survex.com> * src/cad3d.c, src/export.cc: Fix export to SVG when a label contains a '%' character. Fri Dec 12 06:30:00 GMT 2008 Olly Betts <olly@survex.com> * configure.in: Add AM_PROG_CC_C_O which newer autoreconf warns is needed. Fri Dec 12 06:28:00 GMT 2008 Olly Betts <olly@survex.com> * configure.in: Remove AC_SUBST of CRLIB and CROBJX which are no longer set or used. Fri Dec 12 06:03:00 GMT 2008 Olly Betts <olly@survex.com> * NEWS, buildmacosx.sh, configure.in, desc-aven.txt, doc/TODO.htm, doc/manual.sgml, doc/survex.ent, lib/messages.txt, src/aboutdlg.cc, src/aven.cc, src/aven.h, src/gfxcore.cc, src/mainfrm.cc, src/printwx.cc, src/printwx.h, src/wx.h: Say "wxWidgets" instead of "wxWindows" consistently. Require wxWidgets 2.6.0 or newer - 2.4 is really old now. Mon Mar 31 01:53:00 GMT 2008 Olly Betts <olly@survex.com> * doc/3dformat.htm: Update for v6 format from Mike McCombe Fri Sep 07 18:29:00 GMT 2007 Olly Betts <olly@survex.com> * src/gla-gl.cc: Calling glGetError() resets the error state, so we need to store the value in a variable rather than calling it twice! Fri Sep 07 13:54:00 GMT 2007 Olly Betts <olly@survex.com> * src/gla-gl.cc: Add missing CHECK_GL_ERROR() calls and correct some which had the wrong descriptions. Use GL_POINT_SPRITE and GL_COORD_REPLACE instead of GL_POINT_SPRITE_ARB and GL_COORD_REPLACE_ARB. They have the same numeric values, so the shorter (now official) names are better. Fri Sep 07 13:31:00 GMT 2007 Olly Betts <olly@survex.com> * src/Makefile.am, src/gfxcore.cc, src/gfxcore.h, src/gla-gl.cc, src/gla.h, src/matrix4.cc, src/matrix4.h, src/quaternion.cc, src/quaternion.h: Just set the pan and tilt directly as OpenGL rotations rather than messing around setting up and then decoding a quaternion. This fixes some glitches when tilting while looking east, and eliminates 2 source files and 2 headers! Sat Feb 10 13:56:00 GMT 2007 Olly Betts <olly@survex.com> * NEWS, configure.in, src/aven.cc, src/wx.h: (Unix version): aven: Fix display of degree symbol in status bar and messages with accented characters in. (Mac OS X version): Require at least wxWidgets 2.5.1. Sat Feb 10 13:46:00 GMT 2007 Olly Betts <olly@survex.com> * src/message.c: Test S_ISREG since that's what we use here Sat Feb 10 13:37:00 GMT 2007 Olly Betts <olly@survex.com> * src/message.c: Always use utf-8 for aven on unix ������������������������������������survex-1.4.4/vim/�����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067016�010662� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/ftplugin/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067016�012512� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/ftplugin/survex.vim����������������������������������������������������������������0000644�0001750�0001750�00000001666�14141575516�014513� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������" Copyright (C) 2006 Thomas Holder " " This program is free software; you can redistribute it and/or modify " it under the terms of the GNU General Public License as published by " the Free Software Foundation; either version 2 of the License, or " (at your option) any later version. " " This program is distributed in the hope that it will be useful, " but WITHOUT ANY WARRANTY; without even the implied warranty of " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " GNU General Public License for more details. " " You should have received a copy of the GNU General Public License " along with this program; if not, write to the Free Software " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 setlocal tabstop=8 compiler survex map <buffer> <F5> :!aven %<.3d<CR> map <buffer> <F7> :write<CR>:make<CR> map <buffer> <F9> :sview %<.err<CR> ��������������������������������������������������������������������������survex-1.4.4/vim/ftdetect/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067016�012464� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/ftdetect/survex.vim����������������������������������������������������������������0000644�0001750�0001750�00000000124�14141575516�014451� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������au BufRead,BufNewFile *.svx setf survex au BufRead,BufNewFile *.err setf survex-err ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/Makefile.am������������������������������������������������������������������������0000644�0001750�0001750�00000000404�14141575516�012633� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The caller can override this easily, e.g.: # make -C vim vimdir=/usr/share/vim/vimfiles install vimdir = $(datadir)/vim nobase_dist_vim_DATA = \ syntax/survex.vim \ syntax/survex-err.vim \ ftdetect/survex.vim \ ftplugin/survex.vim \ compiler/survex.vim ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/syntax/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067016�012210� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/syntax/survex.vim������������������������������������������������������������������0000644�0001750�0001750�00000015064�14141575516�014206� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������" Vim syntax file " Language: Survex " Maintainer: David Loeffler <dave@cucc.survex.com> " Last Change: 2016-01-01 " Filenames: *.svx " URL: [NONE] " Note: The definitions below are taken from the Survex user manual as of February 2005, for version 1.0.34; several inconsistencies discovered in the process were clarified by reference to source code. Since updated for version 1.1.8. " " Copyright (C) 2005 David Loeffler " Copyright (C) 2006,2016,2017 Olly Betts " " This program is free software; you can redistribute it and/or modify " it under the terms of the GNU General Public License as published by " the Free Software Foundation; either version 2 of the License, or " (at your option) any later version. " " This program is distributed in the hope that it will be useful, " but WITHOUT ANY WARRANTY; without even the implied warranty of " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " GNU General Public License for more details. " " You should have received a copy of the GNU General Public License " along with this program; if not, write to the Free Software " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " Always ignore case syn case ignore " * introduces a command syn match svxAsterisk "^\s*\*" nextgroup=SvxCmd,SvxCmdDeprecated skipwhite " Fudgery - this is used to mask out anything else from matching. syn match svxAnything ".*" contained " Command names: these first few take no interesting arguments syn keyword svxCmd contained alias begin cs date declination syn keyword svxCmd contained end entrance equate export syn keyword svxCmd contained include ref require syn keyword svxCmd contained solve title truncate syn keyword svxCmdDeprecated contained default prefix " These commands accept the whole of the rest of the line as argument, irrespective of whitespace. syn keyword svxCmd contained copyright instrument team nextgroup=svxAnything syn keyword svxCmd calibrate sd units contained nextgroup=svxQty skipwhite syn keyword svxQty contained altitude backbearing backclino backlength nextgroup=svxQty,svxUnit skipwhite syn keyword svxQty contained backcompass backgradient backtape bearing clino nextgroup=svxQty,svxUnit skipwhite syn keyword svxQty contained compass count counter declination nextgroup=svxQty,svxUnit skipwhite syn keyword svxQty contained default depth dx dy dz easting gradient nextgroup=svxQty,svxUnit skipwhite syn keyword svxQty contained length level northing plumb position nextgroup=svxQty,svxUnit skipwhite syn keyword svxQty contained tape nextgroup=svxQty,svxUnit skipwhite syn keyword svxCmd case contained nextgroup=svxCase skipwhite syn keyword svxCase contained preserve toupper tolower contained syn keyword svxCmd data contained nextgroup=svxStyle skipwhite syn keyword svxStyle contained default normal diving topofil nextgroup=svxField skipwhite syn keyword svxStyle contained cartesian cylpolar nosurvey nextgroup=svxField skipwhite syn keyword svxStyle contained passage nextgroup=svxField skipwhite syn keyword svxField contained nextgroup=svxField skipwhite altitude backbearing backclino backlength syn keyword svxField contained nextgroup=svxField skipwhite backcompass backgradient backtape bearing clino syn keyword svxField contained nextgroup=svxField skipwhite compass count counter depth depthchange syn keyword svxField contained nextgroup=svxField skipwhite direction dx dy dz easting from syn keyword svxField contained nextgroup=svxField skipwhite fromcount fromdepth gradient ignore syn keyword svxField contained nextgroup=svxField skipwhite ignoreall length newline northing syn keyword svxField contained nextgroup=svxField skipwhite station tape to tocount todepth syn keyword svxField contained nextgroup=svxField skipwhite left right up down ceiling floor syn keyword svxCmd contained nextgroup=svxFlag skipwhite flags syn keyword svxFlag contained nextgroup=svxFlag skipwhite not duplicate surface splay syn keyword svxCmd contained nextgroup=svxInferrable skipwhite infer syn keyword svxInferrable contained nextgroup=svxOnOff skipwhite plumbs equates exports syn keyword svxOnOff contained on off syn keyword svxCmd contained nextgroup=svxVar,svxVarDeprecated skipwhite set syn keyword svxVar contained blank comment decimal eol keyword minus syn keyword svxVar contained names omit plus separator syn keyword svxVarDeprecated contained root syn keyword svxCmd contained nextgroup=svxQty skipwhite units syn keyword svxUnit contained yards feet metric metres meters syn keyword svxUnit contained degs degrees grads mils minutes syn keyword svxUnit contained percent percentage syn keyword svxCmd contained nextgroup=svxRef skipwhite fix syn keyword svxRef contained reference " Miscellaneous things that are spotted everywhere syn keyword svxMisc - down up " Comments syn match svxComment ";.*" " Strings (double-quote) syn region svxString start=+"+ end=+"+ " Catch errors caused by filenames containing whitespace " This is just an example really, to show the kind of " error-trapping that's possible syn match svxFilenameError "\*include\s*[^"]\+\s\+[^\s"]\+" " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_survex_syn_inits") if version < 508 let did_survex_syn_inits = 1 command -nargs=+ HiLink hi link <args> else command -nargs=+ HiLink hi def link <args> endif HiLink svxString String HiLink svxComment Comment HiLink svxCmd Statement HiLink svxStyle Type HiLink svxUnit Identifier HiLink svxQty Identifier HiLink svxCase Identifier HiLink svxField Identifier HiLink svxFlag Identifier HiLink svxInferrable Identifier HiLink svxOnOff Special HiLink svxVar Identifier HiLink svxMisc Special HiLink svxAsterisk Statement HiLink svxFilenameError Error HiLink svxCmdDeprecated Todo HiLink svxVarDeprecated Todo delcommand HiLink endif let b:current_syntax = "survex" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/syntax/survex-err.vim��������������������������������������������������������������0000644�0001750�0001750�00000002521�14141575516�014766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������" Vim syntax file " Language: Survex loop closure errors " " Copyright (C) 2006 Thomas Holder " " This program is free software; you can redistribute it and/or modify " it under the terms of the GNU General Public License as published by " the Free Software Foundation; either version 2 of the License, or " (at your option) any later version. " " This program is distributed in the hope that it will be useful, " but WITHOUT ANY WARRANTY; without even the implied warranty of " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " GNU General Public License for more details. " " You should have received a copy of the GNU General Public License " along with this program; if not, write to the Free Software " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA syn match svxPErrSmall /Error\s\+\d\.\d\{2\}%/ syn match svxPErrBig /Error\s\+\d\{2,\}\.\d\{2\}%/ syn match svxErrSmall /^\d\.\d*$/ syn match svxErrBig /^\d\{2,\}\.\d*$/ syn match svxHVErrSmall /\<[HV]: \d\.\d*\>/ syn match svxHVErrBig /\<[HV]: \d\{2,\}\.\d*\>/ syn match svxPolygon /^[-_.a-zA-Z0-9]\+\( [-=] [-_.a-zA-Z0-9]\+\)\+$/ hi link svxPErrSmall Statement hi link svxErrSmall Statement hi link svxHVErrSmall Statement hi link svxPErrBig Error hi link svxErrBig Error hi link svxHVErrBig Error hi link svxPolygon Identifier map <buffer> <F9> :quit<CR> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/compiler/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067016�012474� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/compiler/survex.vim����������������������������������������������������������������0000644�0001750�0001750�00000001530�14141575516�014463� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������" Copyright (C) 2006 Thomas Holder " " This program is free software; you can redistribute it and/or modify " it under the terms of the GNU General Public License as published by " the Free Software Foundation; either version 2 of the License, or " (at your option) any later version. " " This program is distributed in the hope that it will be useful, " but WITHOUT ANY WARRANTY; without even the implied warranty of " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " GNU General Public License for more details. " " You should have received a copy of the GNU General Public License " along with this program; if not, write to the Free Software " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if exists("current_compiler") finish endif let current_compiler = "survex" lchdir %:p:h setlocal makeprg=cavern\ % ������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/vim/Makefile.in������������������������������������������������������������������������0000644�0001750�0001750�00000035374�14367066627�012672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = vim ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(nobase_dist_vim_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(vimdir)" DATA = $(nobase_dist_vim_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVEN_COPYRIGHT_MSG = @AVEN_COPYRIGHT_MSG@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMMAVERSION = @COMMAVERSION@ COPYRIGHT_MSG = @COPYRIGHT_MSG@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_TEXT = @EXTRA_TEXT@ HAVE_CXX11 = @HAVE_CXX11@ HTMLFILES = @HTMLFILES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JW = @JW@ LDFLAGS = @LDFLAGS@ LIBAV_CFLAGS = @LIBAV_CFLAGS@ LIBAV_LIBS = @LIBAV_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDOCDIR = @PKGDOCDIR@ PKGDOCDIR_EXPANDED = @PKGDOCDIR_EXPANDED@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRETTYPACKAGE = @PRETTYPACKAGE@ PROJ_CFLAGS = @PROJ_CFLAGS@ PROJ_LIBS = @PROJ_LIBS@ RELEASE = @RELEASE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WXCONFIG = @WXCONFIG@ WX_CFLAGS = @WX_CFLAGS@ WX_CONFIG = @WX_CONFIG@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_LIBS = @WX_LIBS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # The caller can override this easily, e.g.: # make -C vim vimdir=/usr/share/vim/vimfiles install vimdir = $(datadir)/vim nobase_dist_vim_DATA = \ syntax/survex.vim \ syntax/survex-err.vim \ ftdetect/survex.vim \ ftplugin/survex.vim \ compiler/survex.vim all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu vim/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu vim/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-nobase_dist_vimDATA: $(nobase_dist_vim_DATA) @$(NORMAL_INSTALL) @list='$(nobase_dist_vim_DATA)'; test -n "$(vimdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(vimdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(vimdir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(vimdir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(vimdir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(vimdir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(vimdir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_vimDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_vim_DATA)'; test -n "$(vimdir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(vimdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(vimdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nobase_dist_vimDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nobase_dist_vimDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nobase_dist_vimDATA \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-nobase_dist_vimDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/src/�����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14367067015�010655� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/src/getopt1.c��������������������������������������������������������������������������0000644�0001750�0001750�00000010651�13346142325�012321� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "getopt.h" #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include <stdio.h> /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #include <gnu-versions.h> #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include <stdlib.h> #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include <stdio.h> int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ���������������������������������������������������������������������������������������survex-1.4.4/src/readval.c��������������������������������������������������������������������������0000644�0001750�0001750�00000044341�14142042211�012343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readval.c * Routines to read a prefix or number from the current input file * Copyright (C) 1991-2003,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018,2019 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <limits.h> #include <stddef.h> /* for offsetof */ #include "cavern.h" #include "commands.h" /* For match_tok(), etc */ #include "date.h" #include "debug.h" #include "filename.h" #include "message.h" #include "readval.h" #include "datain.h" #include "netbits.h" #include "osalloc.h" #include "str.h" #ifdef HAVE_SETJMP_H # define LONGJMP(JB) longjmp((JB), 1) #else # define LONGJMP(JB) exit(1) #endif int root_depr_count = 0; static prefix * new_anon_station(void) { prefix *name = osnew(prefix); name->pos = NULL; name->ident = NULL; name->shape = 0; name->stn = NULL; name->up = pcs->Prefix; name->down = NULL; name->filename = file.filename; name->line = file.line; name->min_export = name->max_export = 0; name->sflags = BIT(SFLAGS_ANON); /* Keep linked list of anon stations for node stats. */ name->right = anon_list; anon_list = name; return name; } /* if prefix is omitted: if PFX_OPT set return NULL, otherwise use longjmp */ extern prefix * read_prefix(unsigned pfx_flags) { bool f_optional = !!(pfx_flags & PFX_OPT); bool fSurvey = !!(pfx_flags & PFX_SURVEY); bool fSuspectTypo = !!(pfx_flags & PFX_SUSPECT_TYPO); prefix *back_ptr, *ptr; char *name; size_t name_len = 32; size_t i; bool fNew; bool fImplicitPrefix = fTrue; int depth = -1; filepos fp_firstsep; skipblanks(); #ifndef NO_DEPRECATED if (isRoot(ch)) { if (!(pfx_flags & PFX_ALLOW_ROOT)) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*ROOT is deprecated*/25); LONGJMP(file.jbSkipLine); } if (root_depr_count < 5) { compile_diagnostic(DIAG_WARN|DIAG_COL, /*ROOT is deprecated*/25); if (++root_depr_count == 5) compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } nextch(); ptr = root; if (!isNames(ch)) { if (!isSep(ch)) return ptr; /* Allow optional SEPARATOR after ROOT */ get_pos(&fp_firstsep); nextch(); } fImplicitPrefix = fFalse; #else if (0) { #endif } else { if ((pfx_flags & PFX_ANON) && (isSep(ch) || (pcs->dash_for_anon_wall_station && ch == '-'))) { int first_ch = ch; filepos here; get_pos(&here); nextch(); if (isBlank(ch) || isEol(ch)) { if (!isSep(first_ch)) goto anon_wall_station; /* A single separator alone ('.' by default) is an anonymous * station which is on a point inside the passage and implies * the leg to it is a splay. */ if (TSTBIT(pcs->flags, FLAGS_ANON_ONE_END)) { set_pos(&here); compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Can't have a leg between two anonymous stations*/3); LONGJMP(file.jbSkipLine); } pcs->flags |= BIT(FLAGS_ANON_ONE_END) | BIT(FLAGS_IMPLICIT_SPLAY); return new_anon_station(); } if (isSep(first_ch) && ch == first_ch) { nextch(); if (isBlank(ch) || isEol(ch)) { /* A double separator ('..' by default) is an anonymous station * which is on the wall and implies the leg to it is a splay. */ prefix * pfx; anon_wall_station: if (TSTBIT(pcs->flags, FLAGS_ANON_ONE_END)) { set_pos(&here); compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Can't have a leg between two anonymous stations*/3); LONGJMP(file.jbSkipLine); } pcs->flags |= BIT(FLAGS_ANON_ONE_END) | BIT(FLAGS_IMPLICIT_SPLAY); pfx = new_anon_station(); pfx->sflags |= BIT(SFLAGS_WALL); return pfx; } if (ch == first_ch) { nextch(); if (isBlank(ch) || isEol(ch)) { /* A triple separator ('...' by default) is an anonymous * station, but otherwise not handled specially (e.g. for * a single leg down an unexplored side passage to a station * which isn't refindable). */ if (TSTBIT(pcs->flags, FLAGS_ANON_ONE_END)) { set_pos(&here); compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Can't have a leg between two anonymous stations*/3); LONGJMP(file.jbSkipLine); } pcs->flags |= BIT(FLAGS_ANON_ONE_END); return new_anon_station(); } } } set_pos(&here); } ptr = pcs->Prefix; } i = 0; name = NULL; do { fNew = fFalse; if (name == NULL) { /* Need a new name buffer */ name = osmalloc(name_len); } /* i==0 iff this is the first pass */ if (i) { i = 0; nextch(); } while (isNames(ch)) { if (i < pcs->Truncate) { /* truncate name */ name[i++] = (pcs->Case == LOWER ? tolower(ch) : (pcs->Case == OFF ? ch : toupper(ch))); if (i >= name_len) { name_len = name_len + name_len; name = osrealloc(name, name_len); } } nextch(); } if (isSep(ch)) { fImplicitPrefix = fFalse; get_pos(&fp_firstsep); } if (i == 0) { osfree(name); if (!f_optional) { if (isEol(ch)) { if (fSurvey) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Expecting survey name*/89); } else { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Expecting station name*/28); } } else { /* TRANSLATORS: Here "station" is a survey station, not a train station. */ compile_diagnostic(DIAG_ERR|DIAG_COL, /*Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)*/7, ch); } LONGJMP(file.jbSkipLine); } return (prefix *)NULL; } name[i++] = '\0'; back_ptr = ptr; ptr = ptr->down; if (ptr == NULL) { /* Special case first time around at each level */ name = osrealloc(name, i); ptr = osnew(prefix); ptr->ident = name; name = NULL; ptr->right = ptr->down = NULL; ptr->pos = NULL; ptr->shape = 0; ptr->stn = NULL; ptr->up = back_ptr; ptr->filename = file.filename; ptr->line = file.line; ptr->min_export = ptr->max_export = 0; ptr->sflags = BIT(SFLAGS_SURVEY); if (fSuspectTypo && !fImplicitPrefix) ptr->sflags |= BIT(SFLAGS_SUSPECTTYPO); back_ptr->down = ptr; fNew = fTrue; } else { /* Use caching to speed up adding an increasing sequence to a * large survey */ static prefix *cached_survey = NULL, *cached_station = NULL; prefix *ptrPrev = NULL; int cmp = 1; /* result of strcmp ( -ve for <, 0 for =, +ve for > ) */ if (cached_survey == back_ptr) { cmp = strcmp(cached_station->ident, name); if (cmp <= 0) ptr = cached_station; } while (ptr && (cmp = strcmp(ptr->ident, name))<0) { ptrPrev = ptr; ptr = ptr->right; } if (cmp) { /* ie we got to one that was higher, or the end */ prefix *newptr; name = osrealloc(name, i); newptr = osnew(prefix); newptr->ident = name; name = NULL; if (ptrPrev == NULL) back_ptr->down = newptr; else ptrPrev->right = newptr; newptr->right = ptr; newptr->down = NULL; newptr->pos = NULL; newptr->shape = 0; newptr->stn = NULL; newptr->up = back_ptr; newptr->filename = file.filename; newptr->line = file.line; newptr->min_export = newptr->max_export = 0; newptr->sflags = BIT(SFLAGS_SURVEY); if (fSuspectTypo && !fImplicitPrefix) newptr->sflags |= BIT(SFLAGS_SUSPECTTYPO); ptr = newptr; fNew = fTrue; } cached_survey = back_ptr; cached_station = ptr; } depth++; f_optional = fFalse; /* disallow after first level */ if (isSep(ch)) get_pos(&fp_firstsep); } while (isSep(ch)); if (name) osfree(name); /* don't warn about a station that is referred to twice */ if (!fNew) ptr->sflags &= ~BIT(SFLAGS_SUSPECTTYPO); if (fNew) { /* fNew means SFLAGS_SURVEY is currently set */ SVX_ASSERT(TSTBIT(ptr->sflags, SFLAGS_SURVEY)); if (!fSurvey) { ptr->sflags &= ~BIT(SFLAGS_SURVEY); if (TSTBIT(pcs->infer, INFER_EXPORTS)) ptr->min_export = USHRT_MAX; } } else { /* check that the same name isn't being used for a survey and station */ if (fSurvey ^ TSTBIT(ptr->sflags, SFLAGS_SURVEY)) { /* TRANSLATORS: Here "station" is a survey station, not a train station. * * Here "survey" is a "cave map" rather than list of questions - it should be * translated to the terminology that cavers using the language would use. */ compile_diagnostic(DIAG_ERR, /*“%s†can’t be both a station and a survey*/27, sprint_prefix(ptr)); } if (!fSurvey && TSTBIT(pcs->infer, INFER_EXPORTS)) ptr->min_export = USHRT_MAX; } /* check the export level */ #if 0 printf("R min %d max %d depth %d pfx %s\n", ptr->min_export, ptr->max_export, depth, sprint_prefix(ptr)); #endif if (ptr->min_export == 0 || ptr->min_export == USHRT_MAX) { if (depth > ptr->max_export) ptr->max_export = depth; } else if (ptr->max_export < depth) { prefix *survey = ptr; char *s; const char *p; int level; for (level = ptr->max_export + 1; level; level--) { survey = survey->up; SVX_ASSERT(survey); } s = osstrdup(sprint_prefix(survey)); p = sprint_prefix(ptr); if (survey->filename) { compile_diagnostic_pfx(DIAG_ERR, survey, /*Station “%s†not exported from survey “%sâ€*/26, p, s); } else { compile_diagnostic(DIAG_ERR, /*Station “%s†not exported from survey “%sâ€*/26, p, s); } osfree(s); #if 0 printf(" *** pfx %s warning not exported enough depth %d " "ptr->max_export %d\n", sprint_prefix(ptr), depth, ptr->max_export); #endif } if (!fImplicitPrefix && (pfx_flags & PFX_WARN_SEPARATOR)) { filepos fp_tmp; get_pos(&fp_tmp); set_pos(&fp_firstsep); compile_diagnostic(DIAG_WARN|DIAG_COL, /*Separator in survey name*/392); set_pos(&fp_tmp); } return ptr; } /* if numeric expr is omitted: if f_optional return HUGE_REAL, else longjmp */ static real read_number(bool f_optional, bool f_unsigned) { bool fPositive = fTrue, fDigits = fFalse; real n = (real)0.0; filepos fp; int ch_old; get_pos(&fp); ch_old = ch; if (!f_unsigned) { fPositive = !isMinus(ch); if (isSign(ch)) nextch(); } while (isdigit(ch)) { n = n * (real)10.0 + (char)(ch - '0'); nextch(); fDigits = fTrue; } if (isDecimal(ch)) { real mult = (real)1.0; nextch(); while (isdigit(ch)) { mult *= (real).1; n += (char)(ch - '0') * mult; fDigits = fTrue; nextch(); } } /* !'fRead' => !fDigits so fDigits => 'fRead' */ if (fDigits) return (fPositive ? n : -n); /* didn't read a valid number. If it's optional, reset filepos & return */ set_pos(&fp); if (f_optional) { return HUGE_REAL; } if (isOmit(ch_old)) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Field may not be omitted*/8); } else { compile_diagnostic_token_show(DIAG_ERR, /*Expecting numeric field, found “%sâ€*/9); } LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } static real read_quadrant(bool f_optional) { enum { POINT_N = 0, POINT_E = 1, POINT_S = 2, POINT_W = 3, POINT_NONE = -1 }; static const sztok pointtab[] = { {"E", POINT_E }, {"N", POINT_N }, {"S", POINT_S }, {"W", POINT_W }, {NULL, POINT_NONE } }; static const sztok pointewtab[] = { {"E", POINT_E }, {"W", POINT_W }, {NULL, POINT_NONE } }; if (f_optional && isOmit(ch)) { return HUGE_REAL; } const int quad = 90; filepos fp; get_pos(&fp); get_token_no_blanks(); int first_point = match_tok(pointtab, TABSIZE(pointtab)); if (first_point == POINT_NONE) { set_pos(&fp); if (isOmit(ch)) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Field may not be omitted*/8); } compile_diagnostic_token_show(DIAG_ERR, /*Expecting quadrant bearing, found “%sâ€*/483); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } real r = read_number(fTrue, fTrue); if (r == HUGE_REAL) { if (isSign(ch) || isDecimal(ch)) { /* Give better errors for S-0E, N+10W, N.E, etc. */ set_pos(&fp); compile_diagnostic_token_show(DIAG_ERR, /*Expecting quadrant bearing, found “%sâ€*/483); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } /* N, S, E or W. */ return first_point * quad; } if (first_point == POINT_E || first_point == POINT_W) { set_pos(&fp); compile_diagnostic_token_show(DIAG_ERR, /*Expecting quadrant bearing, found “%sâ€*/483); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } get_token_no_blanks(); int second_point = match_tok(pointewtab, TABSIZE(pointewtab)); if (second_point == POINT_NONE) { set_pos(&fp); compile_diagnostic_token_show(DIAG_ERR, /*Expecting quadrant bearing, found “%sâ€*/483); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } if (r > quad) { set_pos(&fp); compile_diagnostic_token_show(DIAG_ERR|DIAG_COL, /*Suspicious compass reading*/59); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } if (first_point == POINT_N) { if (second_point == POINT_W) { r = quad * 4 - r; } } else { if (second_point == POINT_W) { r += quad * 2; } else { r = quad * 2 - r; } } return r; } extern real read_numeric(bool f_optional) { skipblanks(); return read_number(f_optional, fFalse); } extern real read_numeric_multi(bool f_optional, bool f_quadrants, int *p_n_readings) { size_t n_readings = 0; real tot = (real)0.0; skipblanks(); if (!isOpen(ch)) { real r = 0; if (!f_quadrants) r = read_number(f_optional, fFalse); else r = read_quadrant(f_optional); if (p_n_readings) *p_n_readings = (r == HUGE_REAL ? 0 : 1); return r; } nextch(); skipblanks(); do { if (!f_quadrants) tot += read_number(fFalse, fFalse); else tot += read_quadrant(fFalse); ++n_readings; skipblanks(); } while (!isClose(ch)); nextch(); if (p_n_readings) *p_n_readings = n_readings; /* FIXME: special averaging for bearings ... */ /* And for percentage gradient */ return tot / n_readings; } /* read numeric expr or omit (return HUGE_REAL); else longjmp */ extern real read_bearing_multi_or_omit(bool f_quadrants, int *p_n_readings) { real v; v = read_numeric_multi(fTrue, f_quadrants, p_n_readings); if (v == HUGE_REAL) { if (!isOmit(ch)) { compile_diagnostic_token_show(DIAG_ERR, /*Expecting numeric field, found “%sâ€*/9); LONGJMP(file.jbSkipLine); return 0.0; /* for brain-fried compilers */ } nextch(); } return v; } /* Don't skip blanks, variable error code */ static unsigned int read_uint_internal(int errmsg, const filepos *fp) { unsigned int n = 0; if (!isdigit(ch)) { if (fp) set_pos(fp); compile_diagnostic_token_show(DIAG_ERR, errmsg); LONGJMP(file.jbSkipLine); } while (isdigit(ch)) { n = n * 10 + (char)(ch - '0'); nextch(); } return n; } extern unsigned int read_uint(void) { skipblanks(); return read_uint_internal(/*Expecting numeric field, found “%sâ€*/9, NULL); } extern void read_string(char **pstr, int *plen) { s_zero(pstr); skipblanks(); if (ch == '\"') { /* String quoted in "" */ nextch(); while (1) { if (isEol(ch)) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Missing \"*/69); LONGJMP(file.jbSkipLine); } if (ch == '\"') break; s_catchar(pstr, plen, ch); nextch(); } if (!*pstr) { /* Return empty string for "", not NULL. */ s_catchar(pstr, plen, '\0'); } nextch(); } else { /* Unquoted string */ while (1) { if (isEol(ch) || isComm(ch)) { if (!*pstr || !(*pstr)[0]) { compile_diagnostic(DIAG_ERR|DIAG_COL, /*Expecting string field*/121); LONGJMP(file.jbSkipLine); } return; } if (isBlank(ch)) break; s_catchar(pstr, plen, ch); nextch(); } } } extern void read_date(int *py, int *pm, int *pd) { unsigned int y = 0, m = 0, d = 0; filepos fp_date; skipblanks(); get_pos(&fp_date); y = read_uint_internal(/*Expecting date, found “%sâ€*/198, &fp_date); /* Two digit year is 19xx. */ if (y < 100) { filepos fp_save; get_pos(&fp_save); y += 1900; set_pos(&fp_date); /* TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 */ compile_diagnostic(DIAG_WARN|DIAG_UINT, /*Assuming 2 digit year is %d*/76, y); set_pos(&fp_save); } if (y < 1900 || y > 2078) { set_pos(&fp_date); compile_diagnostic(DIAG_WARN|DIAG_UINT, /*Invalid year (< 1900 or > 2078)*/58); LONGJMP(file.jbSkipLine); return; /* for brain-fried compilers */ } if (ch == '.') { filepos fp; nextch(); get_pos(&fp); m = read_uint_internal(/*Expecting date, found “%sâ€*/198, &fp_date); if (m < 1 || m > 12) { set_pos(&fp); compile_diagnostic(DIAG_WARN|DIAG_UINT, /*Invalid month*/86); LONGJMP(file.jbSkipLine); return; /* for brain-fried compilers */ } if (ch == '.') { nextch(); get_pos(&fp); d = read_uint_internal(/*Expecting date, found “%sâ€*/198, &fp_date); if (d < 1 || d > last_day(y, m)) { set_pos(&fp); /* TRANSLATORS: e.g. 31st of April, or 32nd of any month */ compile_diagnostic(DIAG_WARN|DIAG_UINT, /*Invalid day of the month*/87); LONGJMP(file.jbSkipLine); return; /* for brain-fried compilers */ } } } if (py) *py = y; if (pm) *pm = m; if (pd) *pd = d; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/src/brotate.xbm������������������������������������������������������������������������0000644�0001750�0001750�00000001576�14141575516�012756� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define brotate_width 32 #define brotate_height 32 static unsigned char brotate_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xff, 0x00, 0x08, 0x02, 0x82, 0x00, 0x08, 0x01, 0x84, 0x00, 0x08, 0x02, 0x82, 0x00, 0x08, 0xfc, 0x81, 0x00, 0x28, 0x00, 0xa0, 0x00, 0xd8, 0x00, 0xd0, 0x00, 0x08, 0x03, 0x88, 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }; ����������������������������������������������������������������������������������������������������������������������������������survex-1.4.4/src/export.cc��������������������������������������������������������������������������0000644�0001750�0001750�00000137272�14312176075�012436� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* export.cc * Export to CAD-like formats (DXF, Skencil, SVG, EPS) and also Compass PLT. */ /* Copyright (C) 1994-2022 Olly Betts * Copyright (C) 2004 John Pybus (SVG Output code) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "export.h" #include "wx.h" #include <wx/utils.h> #include "export3d.h" #include "exportfilter.h" #include "gpx.h" #include "hpgl.h" #include "json.h" #include "kml.h" #include "mainfrm.h" #include "pos.h" #include <float.h> #include <locale.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #if defined(HAVE_GETPWUID) && !defined(__DJGPP__) # include <pwd.h> # include <sys/types.h> # include <unistd.h> #endif #include <utility> #include <vector> #include "cmdline.h" #include "debug.h" #include "filename.h" #include "hash.h" #include "img_hosted.h" #include "message.h" #include "useful.h" #define POINTS_PER_INCH 72.0 #define POINTS_PER_MM (POINTS_PER_INCH / MM_PER_INCH) #define SQRT_2 1.41421356237309504880168872420969 // Order here needs to match order of export_format enum in export.h. const format_info export_format_info[] = { { ".3d", /*Survex 3d files*/207, LABELS|LEGS|SURF|SPLAYS|ENTS|FIXES|EXPORTS, /* FIXME: expand... */ LABELS|LEGS|SURF|SPLAYS|ENTS|FIXES|EXPORTS }, { ".csv", /*CSV files*/101, LABELS|ENTS|FIXES|EXPORTS, LABELS }, { ".dxf", /*DXF files*/411, LABELS|LEGS|SURF|SPLAYS|STNS|PASG|XSECT|WALLS|MARKER_SIZE|TEXT_HEIGHT|GRID|FULL_COORDS|ORIENTABLE, LABELS|LEGS|STNS }, { ".eps", /*EPS files*/412, LABELS|LEGS|SURF|SPLAYS|STNS|PASG|XSECT|WALLS|ORIENTABLE, LABELS|LEGS|STNS }, { ".gpx", /*GPX files*/413, LABELS|LEGS|SURF|SPLAYS|ENTS|FIXES|EXPORTS|PROJ, LABELS }, /* TRANSLATORS: Here "plotter" refers to a machine which draws a printout * on a (usually large) sheet of paper using a pen mounted in a motorised * mechanism. */ { ".hpgl", /*HPGL for plotters*/414, LABELS|LEGS|SURF|SPLAYS|STNS|CENTRED|ORIENTABLE, LABELS|LEGS|STNS }, { ".json", /*JSON files*/445, LEGS|SPLAYS|CENTRED, LEGS }, { ".kml", /*KML files*/444, LABELS|LEGS|SPLAYS|PASG|XSECT|WALLS|ENTS|FIXES|EXPORTS|PROJ|CLAMP_TO_GROUND, LABELS|LEGS }, /* TRANSLATORS: "Compass" and "Carto" are the names of software packages, * so should not be translated: * http://www.fountainware.com/compass/ * http://www.psc-cavers.org/carto/ */ { ".plt", /*Compass PLT for use with Carto*/415, LABELS|LEGS|SURF|SPLAYS|ORIENTABLE, LABELS|LEGS }, /* TRANSLATORS: "Skencil" is the name of a software package, so should not be * translated: http://www.skencil.org/ */ { ".sk", /*Skencil files*/416, LABELS|LEGS|SURF|SPLAYS|STNS|MARKER_SIZE|GRID|SCALE|ORIENTABLE, LABELS|LEGS|STNS }, /* TRANSLATORS: Survex is the name of the software, and "pos" refers to a * file extension, so neither should be translated. */ { ".pos", /*Survex pos files*/166, LABELS|ENTS|FIXES|EXPORTS, LABELS }, { ".svg", /*SVG files*/417, LABELS|LEGS|SURF|SPLAYS|STNS|PASG|XSECT|WALLS|MARKER_SIZE|TEXT_HEIGHT|SCALE|ORIENTABLE, LABELS|LEGS|STNS }, }; static_assert(sizeof(export_format_info) == FMT_MAX_PLUS_ONE_ * sizeof(export_format_info[0]), "export_format_info[] matches enum export_format"); static void html_escape(FILE *fh, const char *s) { while (*s) { switch (*s) { case '<': fputs("<", fh); break; case '>': fputs(">", fh); break; case '&': fputs("&", fh); break; default: PUTC(*s, fh); } ++s; } } // Used by Skencil and SVG. static const char *layer_name(int mask) { switch (mask) { case LEGS: case LEGS|SURF: return "Legs"; case SURF: return "Surface"; case STNS: return "Stations"; case LABELS: return "Labels"; case XSECT: return "Cross-sections"; case WALL1: case WALL2: case WALLS: return "Walls"; case PASG: return "Passages"; } return ""; } static double marker_size; /* for station markers */ static double grid; /* grid spacing (or 0 for no grid) */ const int * ExportFilter::passes() const { static const int default_passes[] = { LEGS|SURF|STNS|LABELS, 0 }; return default_passes; } class DXF : public ExportFilter { const char * to_close; /* for station labels */ double text_height; char pending[1024]; public: explicit DXF(double text_height_) : to_close(0), text_height(text_height_) { pending[0] = '\0'; } const int * passes() const; bool fopen(const wxString& fnm_out); void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void cross(const img_point *, bool); void xsect(const img_point *, double, double, double); void wall(const img_point *, double, double); void passage(const img_point *, double, double, double); void tube_end(); void footer(); }; const int * DXF::passes() const { static const int dxf_passes[] = { PASG, XSECT, WALL1, WALL2, LEGS|SURF|STNS|LABELS, 0 }; return dxf_passes; } bool DXF::fopen(const wxString& fnm_out) { // DXF gets written as text rather than binary. fh = wxFopen(fnm_out.fn_str(), wxT("w")); return (fh != NULL); } void DXF::header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z) { fprintf(fh, "0\nSECTION\n" "2\nHEADER\n"); fprintf(fh, "9\n$EXTMIN\n"); /* lower left corner of drawing */ fprintf(fh, "10\n%#-.2f\n", min_x); /* x */ fprintf(fh, "20\n%#-.2f\n", min_y); /* y */ fprintf(fh, "30\n%#-.2f\n", min_z); /* min z */ fprintf(fh, "9\n$EXTMAX\n"); /* upper right corner of drawing */ fprintf(fh, "10\n%#-.2f\n", max_x); /* x */ fprintf(fh, "20\n%#-.2f\n", max_y); /* y */ fprintf(fh, "30\n%#-.2f\n", max_z); /* max z */ fprintf(fh, "9\n$PDMODE\n70\n3\n"); /* marker style as CROSS */ fprintf(fh, "9\n$PDSIZE\n40\n%6.2f\n", marker_size); /* marker size */ fprintf(fh, "0\nENDSEC\n"); fprintf(fh, "0\nSECTION\n" "2\nTABLES\n"); fprintf(fh, "0\nTABLE\n" /* Define CONTINUOUS and DASHED line types. */ "2\nLTYPE\n" "70\n10\n" "0\nLTYPE\n" "2\nCONTINUOUS\n" "70\n64\n" "3\nContinuous\n" "72\n65\n" "73\n0\n" "40\n0.0\n" "0\nLTYPE\n" "2\nDASHED\n" "70\n64\n" "3\nDashed\n" "72\n65\n" "73\n2\n" "40\n2.5\n" "49\n1.25\n" "49\n-1.25\n" "0\nLTYPE\n" /* define DOT line type */ "2\nDOT\n" "70\n64\n" "3\nDotted\n" "72\n65\n" "73\n2\n" "40\n1\n" "49\n0\n" "49\n1\n" "0\nENDTAB\n"); fprintf(fh, "0\nTABLE\n" "2\nLAYER\n"); fprintf(fh, "70\n10\n"); /* max # off layers in this DXF file : 10 */ /* First Layer: CentreLine */ fprintf(fh, "0\nLAYER\n2\nCentreLine\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n5\n"); /* color: kept the same used by SpeleoGen */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ /* Next Layer: Stations */ fprintf(fh, "0\nLAYER\n2\nStations\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n7\n"); /* color: kept the same used by SpeleoGen */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ /* Next Layer: Labels */ fprintf(fh, "0\nLAYER\n2\nLabels\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n7\n"); /* color: kept the same used by SpeleoGen */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ /* Next Layer: Surface */ fprintf(fh, "0\nLAYER\n2\nSurface\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n5\n"); /* color */ fprintf(fh, "6\nDASHED\n"); /* linetype */ /* Next Layer: SurfaceStations */ fprintf(fh, "0\nLAYER\n2\nSurfaceStations\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n7\n"); /* color */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ /* Next Layer: SurfaceLabels */ fprintf(fh, "0\nLAYER\n2\nSurfaceLabels\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n7\n"); /* color */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ /* Next Layer: Splays */ fprintf(fh, "0\nLAYER\n2\nSplays\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n5\n"); /* color */ fprintf(fh, "6\nDOT\n"); /* linetype; */ if (grid > 0) { /* Next Layer: Grid */ fprintf(fh, "0\nLAYER\n2\nGrid\n"); fprintf(fh, "70\n64\n"); /* shows layer is referenced by entities */ fprintf(fh, "62\n7\n"); /* color: kept the same used by SpeleoGen */ fprintf(fh, "6\nCONTINUOUS\n"); /* linetype */ } fprintf(fh, "0\nENDTAB\n" "0\nENDSEC\n"); fprintf(fh, "0\nSECTION\n" "2\nENTITIES\n"); if (grid > 0) { double x, y; x = floor(min_x / grid) * grid + grid; y = floor(min_y / grid) * grid + grid; while (x < max_x) { /* horizontal line */ fprintf(fh, "0\nLINE\n"); fprintf(fh, "8\nGrid\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", x); fprintf(fh, "20\n%6.2f\n", min_y); fprintf(fh, "30\n0\n"); fprintf(fh, "11\n%6.2f\n", x); fprintf(fh, "21\n%6.2f\n", max_y); fprintf(fh, "31\n0\n"); x += grid; } while (y < max_y) { /* vertical line */ fprintf(fh, "0\nLINE\n"); fprintf(fh, "8\nGrid\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", min_x); fprintf(fh, "20\n%6.2f\n", y); fprintf(fh, "30\n0\n"); fprintf(fh, "11\n%6.2f\n", max_x); fprintf(fh, "21\n%6.2f\n", y); fprintf(fh, "31\n0\n"); y += grid; } } } void DXF::line(const img_point *p1, const img_point *p, unsigned flags, bool fPendingMove) { bool fSurface = (flags & SURF); bool fSplay = (flags & SPLAYS); (void)fPendingMove; /* unused */ fprintf(fh, "0\nLINE\n"); if (fSurface) { /* select layer */ fprintf(fh, "8\nSurface\n" ); } else if (fSplay) { fprintf(fh, "8\nSplays\n"); } else { fprintf(fh, "8\nCentreLine\n"); } fprintf(fh, "10\n%6.2f\n", p1->x); fprintf(fh, "20\n%6.2f\n", p1->y); fprintf(fh, "30\n%6.2f\n", p1->z); fprintf(fh, "11\n%6.2f\n", p->x); fprintf(fh, "21\n%6.2f\n", p->y); fprintf(fh, "31\n%6.2f\n", p->z); } void DXF::label(const img_point *p, const char *s, bool fSurface, int) { /* write station label to dxf file */ fprintf(fh, "0\nTEXT\n"); fprintf(fh, fSurface ? "8\nSurfaceLabels\n" : "8\nLabels\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", p->x); fprintf(fh, "20\n%6.2f\n", p->y); fprintf(fh, "30\n%6.2f\n", p->z); fprintf(fh, "40\n%6.2f\n", text_height); fprintf(fh, "1\n%s\n", s); } void DXF::cross(const img_point *p, bool fSurface) { /* write station marker to dxf file */ fprintf(fh, "0\nPOINT\n"); fprintf(fh, fSurface ? "8\nSurfaceStations\n" : "8\nStations\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", p->x); fprintf(fh, "20\n%6.2f\n", p->y); fprintf(fh, "30\n%6.2f\n", p->z); } void DXF::xsect(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "0\nLINE\n"); fprintf(fh, "8\nCross-sections\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", p->x + s * d1); fprintf(fh, "20\n%6.2f\n", p->y + c * d1); fprintf(fh, "30\n%6.2f\n", p->z); fprintf(fh, "11\n%6.2f\n", p->x - s * d2); fprintf(fh, "21\n%6.2f\n", p->y - c * d2); fprintf(fh, "31\n%6.2f\n", p->z); } void DXF::wall(const img_point *p, double angle, double d) { if (!to_close) { fprintf(fh, "0\nPOLYLINE\n"); fprintf(fh, "8\nWalls\n"); /* Layer */ fprintf(fh, "70\n0\n"); /* bit 0 == 0 => Open polyline */ to_close = "0\nSEQEND\n"; } double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "0\nVERTEX\n"); fprintf(fh, "8\nWalls\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", p->x + s * d); fprintf(fh, "20\n%6.2f\n", p->y + c * d); fprintf(fh, "30\n%6.2f\n", p->z); } void DXF::passage(const img_point *p, double angle, double d1, double d2) { fprintf(fh, "0\nSOLID\n"); fprintf(fh, "8\nPassages\n"); /* Layer */ double s = sin(rad(angle)); double c = cos(rad(angle)); double x1 = p->x + s * d1; double y1 = p->y + c * d1; double x2 = p->x - s * d2; double y2 = p->y - c * d2; if (*pending) { fputs(pending, fh); fprintf(fh, "12\n%6.2f\n22\n%6.2f\n32\n%6.2f\n" "13\n%6.2f\n23\n%6.2f\n33\n%6.2f\n", x1, y1, p->z, x2, y2, p->z); } sprintf(pending, "10\n%6.2f\n20\n%6.2f\n30\n%6.2f\n" "11\n%6.2f\n21\n%6.2f\n31\n%6.2f\n", x1, y1, p->z, x2, y2, p->z); } void DXF::tube_end() { *pending = '\0'; if (to_close) { fputs(to_close, fh); to_close = NULL; } } void DXF::footer() { fprintf(fh, "000\nENDSEC\n"); fprintf(fh, "000\nEOF\n"); } class Skencil : public ExportFilter { double factor; public: explicit Skencil(double scale) : factor(POINTS_PER_MM * 1000.0 / scale) { } const int * passes() const; void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void start_pass(int layer); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void cross(const img_point *, bool); void footer(); }; const int * Skencil::passes() const { static const int skencil_passes[] = { LEGS|SURF, STNS, LABELS, 0 }; return skencil_passes; } void Skencil::header(const char *, const char *, time_t, double min_x, double min_y, double /*min_z*/, double max_x, double max_y, double /*max_z*/) { fprintf(fh, "##Sketch 1 2\n"); /* File format version */ fprintf(fh, "document()\n"); fprintf(fh, "layout((%.3f,%.3f),0)\n", (max_x - min_x) * factor, (max_y - min_y) * factor); } void Skencil::start_pass(int layer) { fprintf(fh, "layer('%s',1,1,0,0,(0,0,0))\n", layer_name(layer)); } void Skencil::line(const img_point *p1, const img_point *p, unsigned flags, bool fPendingMove) { (void)flags; /* unused */ if (fPendingMove) { fprintf(fh, "b()\n"); fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p1->x * factor, p1->y * factor, 0.0); } fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p->x * factor, p->y * factor, 0.0); } void Skencil::label(const img_point *p, const char *s, bool fSurface, int) { (void)fSurface; /* unused */ fprintf(fh, "fp((0,0,0))\n"); fprintf(fh, "le()\n"); fprintf(fh, "Fn('Times-Roman')\n"); fprintf(fh, "Fs(5)\n"); fprintf(fh, "txt('"); while (*s) { int ch = *s++; if (ch == '\'' || ch == '\\') PUTC('\\', fh); PUTC(ch, fh); } fprintf(fh, "',(%.3f,%.3f))\n", p->x * factor, p->y * factor); } void Skencil::cross(const img_point *p, bool fSurface) { (void)fSurface; /* unused */ fprintf(fh, "b()\n"); fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p->x * factor - marker_size, p->y * factor - marker_size, 0.0); fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p->x * factor + marker_size, p->y * factor + marker_size, 0.0); fprintf(fh, "bn()\n"); fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p->x * factor + marker_size, p->y * factor - marker_size, 0.0); fprintf(fh, "bs(%.3f,%.3f,%.3f)\n", p->x * factor - marker_size, p->y * factor + marker_size, 0.0); } void Skencil::footer(void) { fprintf(fh, "guidelayer('Guide Lines',1,0,0,1,(0,0,1))\n"); if (grid) { fprintf(fh, "grid((0,0,%.3f,%.3f),1,(0,0,1),'Grid')\n", grid * factor, grid * factor); } } typedef struct point { img_point p; const char *label; struct point *next; } point; #define HTAB_SIZE 0x2000 static point **htab; static void set_name(const img_point *p, const char *s) { int hash; point *pt; union { char data[sizeof(int) * 3]; int x[3]; } u; u.x[0] = (int)(p->x * 100); u.x[1] = (int)(p->y * 100); u.x[2] = (int)(p->z * 100); hash = (hash_data(u.data, sizeof(int) * 3) & (HTAB_SIZE - 1)); for (pt = htab[hash]; pt; pt = pt->next) { if (pt->p.x == p->x && pt->p.y == p->y && pt->p.z == p->z) { /* already got name for these coordinates */ /* FIXME: what about multiple names for the same station? */ return; } } pt = osnew(point); pt->label = osstrdup(s); pt->p = *p; pt->next = htab[hash]; htab[hash] = pt; return; } static const char * find_name(const img_point *p) { int hash; point *pt; union { char data[sizeof(int) * 3]; int x[3]; } u; wxASSERT(p); u.x[0] = (int)(p->x * 100); u.x[1] = (int)(p->y * 100); u.x[2] = (int)(p->z * 100); hash = (hash_data(u.data, sizeof(int) * 3) & (HTAB_SIZE - 1)); for (pt = htab[hash]; pt; pt = pt->next) { if (pt->p.x == p->x && pt->p.y == p->y && pt->p.z == p->z) return pt->label; } return "?"; } class SVG : public ExportFilter { const char * to_close; bool close_g; double factor; /* for station labels */ double text_height; char pending[1024]; public: SVG(double scale, double text_height_) : to_close(NULL), close_g(false), factor(1000.0 / scale), text_height(text_height_) { pending[0] = '\0'; } const int * passes() const; void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void start_pass(int layer); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void cross(const img_point *, bool); void xsect(const img_point *, double, double, double); void wall(const img_point *, double, double); void passage(const img_point *, double, double, double); void tube_end(); void footer(); }; const int * SVG::passes() const { static const int svg_passes[] = { PASG, LEGS|SURF, XSECT, WALL1, WALL2, LABELS, STNS, 0 }; return svg_passes; } void SVG::header(const char * title, const char *, time_t, double min_x, double min_y, double /*min_z*/, double max_x, double max_y, double /*max_z*/) { const char *unit = "mm"; const double SVG_MARGIN = 5.0; // In units of "unit". htab = (point **)osmalloc(HTAB_SIZE * ossizeof(point *)); for (size_t i = 0; i < HTAB_SIZE; ++i) htab[i] = NULL; fprintf(fh, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); double width = (max_x - min_x) * factor + SVG_MARGIN * 2; double height = (max_y - min_y) * factor + SVG_MARGIN * 2; fprintf(fh, "<svg version=\"1.1\" baseProfile=\"full\"\n" "xmlns=\"http://www.w3.org/2000/svg\"\n" "xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n" "xmlns:ev=\"http://www.w3.org/2001/xml-events\"\n" "width=\"%.3f%s\" height=\"%.3f%s\"\n" "viewBox=\"0 0 %0.3f %0.3f\">\n", width, unit, height, unit, width, height); if (title && title[0]) { fputs("<title>", fh); html_escape(fh, title); fputs("\n", fh); } fprintf(fh, "\n", SVG_MARGIN - min_x * factor, SVG_MARGIN + max_y * factor); to_close = NULL; close_g = false; } void SVG::start_pass(int layer) { if (to_close) { fputs(to_close, fh); to_close = NULL; } if (close_g) { fprintf(fh, "\n"); } fprintf(fh, "\n"); close_g = true; } void SVG::line(const img_point *p1, const img_point *p, unsigned flags, bool fPendingMove) { bool splay = (flags & SPLAYS); if (fPendingMove) { if (to_close) { fputs(to_close, fh); } fprintf(fh, "x * factor, p1->y * -factor); } fprintf(fh, "L%.3f %.3f", p->x * factor, p->y * -factor); to_close = "\"/>\n"; } void SVG::label(const img_point *p, const char *s, bool fSurface, int) { (void)fSurface; /* unused */ fprintf(fh, "", p->x * factor, p->y * -factor); html_escape(fh, s); fputs("\n", fh); set_name(p, s); } void SVG::cross(const img_point *p, bool fSurface) { (void)fSurface; /* unused */ fprintf(fh, "\n", find_name(p), p->x * factor, p->y * -factor, marker_size * SQRT_2); fprintf(fh, "\n", p->x * factor - marker_size, p->y * -factor - marker_size, p->x * factor + marker_size, p->y * -factor + marker_size, p->x * factor + marker_size, p->y * -factor - marker_size, p->x * factor - marker_size, p->y * -factor + marker_size); } void SVG::xsect(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "\n", (p->x + s * d1) * factor, (p->y + c * d1) * -factor, (p->x - s * d2) * factor, (p->y - c * d2) * -factor); } void SVG::wall(const img_point *p, double angle, double d) { if (!to_close) { fprintf(fh, "\n"; } else { fprintf(fh, "L"); } double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "%.3f %.3f", (p->x + s * d) * factor, (p->y + c * d) * -factor); } void SVG::passage(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); double x1 = (p->x + s * d1) * factor; double y1 = (p->y + c * d1) * -factor; double x2 = (p->x - s * d2) * factor; double y2 = (p->y - c * d2) * -factor; if (*pending) { fputs(pending, fh); fprintf(fh, "L%.3f %.3fL%.3f %.3fZ\"/>\n", x2, y2, x1, y1); } sprintf(pending, "\n"); close_g = false; } fprintf(fh, "\n\n"); } class PLT : public ExportFilter { string escaped; const char * find_name_plt(const img_point *p); double min_N, max_N, min_E, max_E, min_A, max_A; public: PLT() { } const int * passes() const; void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void footer(); }; const int * PLT::passes() const { static const int plt_passes[] = { LABELS, LEGS|SURF, 0 }; return plt_passes; } void PLT::header(const char *title, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z) { // FIXME: allow survey to be set from aven somehow! const char *survey = NULL; htab = (point **)osmalloc(HTAB_SIZE * ossizeof(point *)); for (size_t i = 0; i < HTAB_SIZE; ++i) htab[i] = NULL; /* Survex is E, N, Alt - PLT file is N, E, Alt */ min_N = min_y / METRES_PER_FOOT; max_N = max_y / METRES_PER_FOOT; min_E = min_x / METRES_PER_FOOT; max_E = max_x / METRES_PER_FOOT; min_A = min_z / METRES_PER_FOOT; max_A = max_z / METRES_PER_FOOT; fprintf(fh, "Z %.3f %.3f %.3f %.3f %.3f %.3f\r\n", min_N, max_N, min_E, max_E, min_A, max_A); fprintf(fh, "N%s D 1 1 1 C%s\r\n", survey ? survey : "X", (title && title[0]) ? title : "X"); } void PLT::line(const img_point *p1, const img_point *p, unsigned flags, bool fPendingMove) { (void)flags; /* unused */ if (fPendingMove) { /* Survex is E, N, Alt - PLT file is N, E, Alt */ fprintf(fh, "M %.3f %.3f %.3f ", p1->y / METRES_PER_FOOT, p1->x / METRES_PER_FOOT, p1->z / METRES_PER_FOOT); /* dummy passage dimensions are required to avoid compass bug */ fprintf(fh, "S%s P -9 -9 -9 -9\r\n", find_name_plt(p1)); } /* Survex is E, N, Alt - PLT file is N, E, Alt */ fprintf(fh, "D %.3f %.3f %.3f ", p->y / METRES_PER_FOOT, p->x / METRES_PER_FOOT, p->z / METRES_PER_FOOT); /* dummy passage dimensions are required to avoid compass bug */ fprintf(fh, "S%s P -9 -9 -9 -9\r\n", find_name_plt(p)); } const char * PLT::find_name_plt(const img_point *p) { const char * s = find_name(p); escaped.resize(0); // PLT format can't handle spaces or control characters, so escape them // like in URLs (an arbitrary choice of escaping, but at least a familiar // one and % isn't likely to occur in station names). const char * q; for (q = s; *q; ++q) { unsigned char ch = *q; if (ch <= ' ' || ch == '%') { escaped.append(s, q - s); escaped += '%'; escaped += "0123456789abcdef"[ch >> 4]; escaped += "0123456789abcdef"[ch & 0x0f]; s = q + 1; } } if (!escaped.empty()) { escaped.append(s, q - s); return escaped.c_str(); } return s; } void PLT::label(const img_point *p, const char *s, bool fSurface, int) { (void)fSurface; /* unused */ set_name(p, s); } void PLT::footer(void) { /* Survex is E, N, Alt - PLT file is N, E, Alt */ fprintf(fh, "X %.3f %.3f %.3f %.3f %.3f %.3f\r\n", min_N, max_N, min_E, max_E, min_A, max_A); /* Yucky DOS "end of textfile" marker */ PUTC('\x1a', fh); } class EPS : public ExportFilter { double factor; bool first; vector> psg; public: explicit EPS(double scale) : factor(POINTS_PER_MM * 1000.0 / scale) { } const int * passes() const; void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void start_pass(int layer); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void cross(const img_point *, bool); void xsect(const img_point *, double, double, double); void wall(const img_point *, double, double); void passage(const img_point *, double, double, double); void tube_end(); void footer(); }; const int * EPS::passes() const { static const int eps_passes[] = { PASG, XSECT, WALL1, WALL2, LEGS|SURF|STNS|LABELS, 0 }; return eps_passes; } void EPS::header(const char *title, const char *, time_t, double min_x, double min_y, double /*min_z*/, double max_x, double max_y, double /*max_z*/) { const char * fontname_labels = "helvetica"; // FIXME int fontsize_labels = 10; // FIXME fputs("%!PS-Adobe-2.0 EPSF-1.2\n", fh); fputs("%%Creator: Survex " VERSION " EPS Export Filter\n", fh); if (title && title[0]) fprintf(fh, "%%%%Title: %s\n", title); char buf[64]; time_t now = time(NULL); if (strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z\n", localtime(&now))) { fputs("%%CreationDate: ", fh); fputs(buf, fh); } string name; #if defined(HAVE_GETPWUID) && !defined(__DJGPP__) struct passwd * ent = getpwuid(getuid()); if (ent && ent->pw_gecos[0]) name = ent->pw_gecos; #endif if (name.empty()) { name = ::wxGetUserName().mb_str(); if (name.empty()) { name = ::wxGetUserId().mb_str(); } } if (!name.empty()) { fprintf(fh, "%%%%For: %s\n", name.c_str()); } fprintf(fh, "%%%%BoundingBox: %d %d %d %d\n", int(floor(min_x * factor)), int(floor(min_y * factor)), int(ceil(max_x * factor)), int(ceil(max_y * factor))); fprintf(fh, "%%%%HiResBoundingBox: %.4f %.4f %.4f %.4f\n", min_x * factor, min_y * factor, max_x * factor, max_y * factor); fputs("%%LanguageLevel: 1\n" "%%PageOrder: Ascend\n" "%%Pages: 1\n" "%%Orientation: Portrait\n", fh); fprintf(fh, "%%%%DocumentFonts: %s\n", fontname_labels); fputs("%%EndComments\n" "%%Page 1 1\n" "save countdictstack mark\n", fh); /* this code adapted from a2ps */ fputs("%%BeginResource: encoding ISO88591Encoding\n" "/ISO88591Encoding [\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs( "/space /exclam /quotedbl /numbersign\n" "/dollar /percent /ampersand /quoteright\n" "/parenleft /parenright /asterisk /plus\n" "/comma /minus /period /slash\n" "/zero /one /two /three\n" "/four /five /six /seven\n" "/eight /nine /colon /semicolon\n" "/less /equal /greater /question\n" "/at /A /B /C /D /E /F /G\n" "/H /I /J /K /L /M /N /O\n" "/P /Q /R /S /T /U /V /W\n" "/X /Y /Z /bracketleft\n" "/backslash /bracketright /asciicircum /underscore\n" "/quoteleft /a /b /c /d /e /f /g\n" "/h /i /j /k /l /m /n /o\n" "/p /q /r /s /t /u /v /w\n" "/x /y /z /braceleft\n" "/bar /braceright /asciitilde /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs("/.notdef /.notdef /.notdef /.notdef\n", fh); fputs( "/space /exclamdown /cent /sterling\n" "/currency /yen /brokenbar /section\n" "/dieresis /copyright /ordfeminine /guillemotleft\n" "/logicalnot /hyphen /registered /macron\n" "/degree /plusminus /twosuperior /threesuperior\n" "/acute /mu /paragraph /bullet\n" "/cedilla /onesuperior /ordmasculine /guillemotright\n" "/onequarter /onehalf /threequarters /questiondown\n" "/Agrave /Aacute /Acircumflex /Atilde\n" "/Adieresis /Aring /AE /Ccedilla\n" "/Egrave /Eacute /Ecircumflex /Edieresis\n" "/Igrave /Iacute /Icircumflex /Idieresis\n" "/Eth /Ntilde /Ograve /Oacute\n" "/Ocircumflex /Otilde /Odieresis /multiply\n" "/Oslash /Ugrave /Uacute /Ucircumflex\n" "/Udieresis /Yacute /Thorn /germandbls\n" "/agrave /aacute /acircumflex /atilde\n" "/adieresis /aring /ae /ccedilla\n" "/egrave /eacute /ecircumflex /edieresis\n" "/igrave /iacute /icircumflex /idieresis\n" "/eth /ntilde /ograve /oacute\n" "/ocircumflex /otilde /odieresis /divide\n" "/oslash /ugrave /uacute /ucircumflex\n" "/udieresis /yacute /thorn /ydieresis\n" "] def\n" "%%EndResource\n", fh); /* this code adapted from a2ps */ fputs( "/reencode {\n" /* def */ "dup length 5 add dict begin\n" "{\n" /* forall */ "1 index /FID ne\n" "{ def }{ pop pop } ifelse\n" "} forall\n" "/Encoding exch def\n" /* Use the font's bounding box to determine the ascent, descent, * and overall height; don't forget that these values have to be * transformed using the font's matrix. * We use `load' because sometimes BBox is executable, sometimes not. * Since we need 4 numbers and not an array avoid BBox from being executed */ "/FontBBox load aload pop\n" "FontMatrix transform /Ascent exch def pop\n" "FontMatrix transform /Descent exch def pop\n" "/FontHeight Ascent Descent sub def\n" /* Define these in case they're not in the FontInfo (also, here * they're easier to get to. */ "/UnderlinePosition 1 def\n" "/UnderlineThickness 1 def\n" /* Get the underline position and thickness if they're defined. */ "currentdict /FontInfo known {\n" "FontInfo\n" "dup /UnderlinePosition known {\n" "dup /UnderlinePosition get\n" "0 exch FontMatrix transform exch pop\n" "/UnderlinePosition exch def\n" "} if\n" "dup /UnderlineThickness known {\n" "/UnderlineThickness get\n" "0 exch FontMatrix transform exch pop\n" "/UnderlineThickness exch def\n" "} if\n" "} if\n" "currentdict\n" "end\n" "} bind def\n", fh); fprintf(fh, "/lab ISO88591Encoding /%s findfont reencode definefont pop\n", fontname_labels); fprintf(fh, "/lab findfont %d scalefont setfont\n", int(fontsize_labels)); #if 0 /* C changes colour */ /* FIXME: read from ini */ { size_t i; for (i = 0; i < sizeof(colour) / sizeof(colour[0]); ++i) { fprintf(fh, "/C%u {stroke %.3f %.3f %.3f setrgbcolor} def\n", i, (double)(colour[i] & 0xff0000) / 0xff0000, (double)(colour[i] & 0xff00) / 0xff00, (double)(colour[i] & 0xff) / 0xff); } } fputs("C0\n", fh); #endif /* Postscript definition for drawing a cross */ fprintf(fh, "/X {stroke moveto %.2f %.2f rmoveto %.2f %.2f rlineto " "%.2f 0 rmoveto %.2f %.2f rlineto %.2f %.2f rmoveto} def\n", -marker_size, -marker_size, marker_size * 2, marker_size * 2, -marker_size * 2, marker_size * 2, -marker_size * 2, -marker_size, marker_size ); /* define some functions to keep file short */ fputs("/M {stroke moveto} def\n" "/P {stroke newpath moveto} def\n" "/F {closepath gsave 0.8 setgray fill grestore} def\n" "/L {lineto} def\n" "/R {rlineto} def\n" "/S {show} def\n", fh); fprintf(fh, "gsave %.8f dup scale\n", factor); #if 0 if (grid > 0) { double x, y; x = floor(min_x / grid) * grid + grid; y = floor(min_y / grid) * grid + grid; while (x < max_x) { /* horizontal line */ fprintf(fh, "0\nLINE\n"); fprintf(fh, "8\nGrid\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", x); fprintf(fh, "20\n%6.2f\n", min_y); fprintf(fh, "30\n0\n"); fprintf(fh, "11\n%6.2f\n", x); fprintf(fh, "21\n%6.2f\n", max_y); fprintf(fh, "31\n0\n"); x += grid; } while (y < max_y) { /* vertical line */ fprintf(fh, "0\nLINE\n"); fprintf(fh, "8\nGrid\n"); /* Layer */ fprintf(fh, "10\n%6.2f\n", min_x); fprintf(fh, "20\n%6.2f\n", y); fprintf(fh, "30\n0\n"); fprintf(fh, "11\n%6.2f\n", max_x); fprintf(fh, "21\n%6.2f\n", y); fprintf(fh, "31\n0\n"); y += grid; } } #endif } void EPS::start_pass(int layer) { first = true; switch (layer) { case LEGS|SURF|STNS|LABELS: fprintf(fh, "0.1 setlinewidth\n"); break; case PASG: case XSECT: case WALL1: case WALL2: fprintf(fh, "0.01 setlinewidth\n"); break; } } void EPS::line(const img_point *p1, const img_point *p, unsigned flags, bool fPendingMove) { (void)flags; /* unused */ if (fPendingMove) { fprintf(fh, "%.2f %.2f M\n", p1->x, p1->y); } fprintf(fh, "%.2f %.2f L\n", p->x, p->y); } void EPS::label(const img_point *p, const char *s, bool /*fSurface*/, int) { fprintf(fh, "%.2f %.2f M\n", p->x, p->y); PUTC('(', fh); while (*s) { unsigned char ch = *s++; switch (ch) { case '(': case ')': case '\\': /* need to escape these characters */ PUTC('\\', fh); PUTC(ch, fh); break; default: PUTC(ch, fh); break; } } fputs(") S\n", fh); } void EPS::cross(const img_point *p, bool fSurface) { (void)fSurface; /* unused */ fprintf(fh, "%.2f %.2f X\n", p->x, p->y); } void EPS::xsect(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "%.2f %.2f M %.2f %.2f R\n", p->x - s * d2, p->y - c * d2, s * (d1 + d2), c * (d1 + d2)); } void EPS::wall(const img_point *p, double angle, double d) { double s = sin(rad(angle)); double c = cos(rad(angle)); fprintf(fh, "%.2f %.2f %c\n", p->x + s * d, p->y + c * d, first ? 'M' : 'L'); first = false; } void EPS::passage(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); double x1 = p->x + s * d1; double y1 = p->y + c * d1; double x2 = p->x - s * d2; double y2 = p->y - c * d2; fprintf(fh, "%.2f %.2f %c\n", x1, y1, first ? 'P' : 'L'); first = false; psg.push_back(make_pair(x2, y2)); } void EPS::tube_end() { if (!psg.empty()) { vector>::const_reverse_iterator i; for (i = psg.rbegin(); i != psg.rend(); ++i) { fprintf(fh, "%.2f %.2f L\n", i->first, i->second); } fputs("F\n", fh); psg.clear(); } } void EPS::footer(void) { fputs("stroke showpage grestore\n" "%%Trailer\n" "cleartomark countdictstack exch sub { end } repeat restore\n" "%%EOF\n", fh); } class UseNumericCLocale { char * current_locale; public: UseNumericCLocale() { current_locale = osstrdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); } ~UseNumericCLocale() { setlocale(LC_NUMERIC, current_locale); osfree(current_locale); } }; static void transform_point(const Point& pos, const Vector3* pre_offset, double COS, double SIN, double COST, double SINT, img_point* p) { double x = pos.GetX(); double y = pos.GetY(); double z = pos.GetZ(); if (pre_offset) { x += pre_offset->GetX(); y += pre_offset->GetY(); z += pre_offset->GetZ(); } p->x = x * COS - y * SIN; double tmp = x * SIN + y * COS; p->y = z * COST - tmp * SINT; p->z = -(z * SINT + tmp * COST); } bool Export(const wxString &fnm_out, const wxString &title, const wxString &datestamp, const Model& model, const SurveyFilter* filter, double pan, double tilt, int show_mask, export_format format, double grid_, double text_height, double marker_size_, double scale) { UseNumericCLocale dummy; int fPendingMove = 0; img_point p, p1; const int *pass; double SIN = sin(rad(pan)); double COS = cos(rad(pan)); double SINT = sin(rad(tilt)); double COST = cos(rad(tilt)); grid = (show_mask & GRID) ? grid_ : 0.0; marker_size = marker_size_; // Do we need to calculate min and max for each dimension? bool need_bounds = true; ExportFilter * filt; switch (format) { case FMT_3D: filt = new Export3D(model.GetSeparator()); show_mask |= FULL_COORDS; need_bounds = false; break; case FMT_CSV: filt = new POS(model.GetSeparator(), true); show_mask |= FULL_COORDS; need_bounds = false; break; case FMT_DXF: filt = new DXF(text_height); break; case FMT_EPS: filt = new EPS(scale); break; case FMT_GPX: filt = new GPX(model.GetCSProj().c_str()); show_mask |= FULL_COORDS; need_bounds = false; break; case FMT_HPGL: filt = new HPGL; // factor = POINTS_PER_MM * 1000.0 / scale; // HPGL doesn't use the bounds itself, but they are needed to set // the origin to the centre of lower left. break; case FMT_JSON: filt = new JSON; break; case FMT_KML: { bool clamp_to_ground = (show_mask & CLAMP_TO_GROUND); filt = new KML(model.GetCSProj().c_str(), clamp_to_ground); show_mask |= FULL_COORDS; need_bounds = false; break; } case FMT_PLT: filt = new PLT; show_mask |= FULL_COORDS; break; case FMT_POS: filt = new POS(model.GetSeparator(), false); show_mask |= FULL_COORDS; need_bounds = false; break; case FMT_SK: filt = new Skencil(scale); break; case FMT_SVG: filt = new SVG(scale, text_height); break; default: return false; } if (!filt->fopen(fnm_out)) { delete filt; return false; } const Vector3* pre_offset = NULL; if (show_mask & FULL_COORDS) { pre_offset = &(model.GetOffset()); } /* Get bounding box */ double min_x, min_y, min_z, max_x, max_y, max_z; min_x = min_y = min_z = HUGE_VAL; max_x = max_y = max_z = -HUGE_VAL; if (need_bounds) { for (int f = 0; f != 8; ++f) { if ((show_mask & (f & img_FLAG_SURFACE) ? SURF : LEGS) == 0) { // Not showing traverse because of surface/underground status. continue; } if ((f & img_FLAG_SPLAY) && (show_mask & SPLAYS) == 0) { // Not showing because it's a splay. continue; } list::const_iterator trav = model.traverses_begin(f, filter); list::const_iterator tend = model.traverses_end(f); for ( ; trav != tend; trav = model.traverses_next(f, filter, trav)) { vector::const_iterator pos = trav->begin(); vector::const_iterator end = trav->end(); for ( ; pos != end; ++pos) { transform_point(*pos, pre_offset, COS, SIN, COST, SINT, &p); if (p.x < min_x) min_x = p.x; if (p.x > max_x) max_x = p.x; if (p.y < min_y) min_y = p.y; if (p.y > max_y) max_y = p.y; if (p.z < min_z) min_z = p.z; if (p.z > max_z) max_z = p.z; } } } list::const_iterator pos = model.GetLabels(); list::const_iterator end = model.GetLabelsEnd(); for ( ; pos != end; ++pos) { if (filter && !filter->CheckVisible((*pos)->GetText())) continue; transform_point(**pos, pre_offset, COS, SIN, COST, SINT, &p); if (p.x < min_x) min_x = p.x; if (p.x > max_x) max_x = p.x; if (p.y < min_y) min_y = p.y; if (p.y > max_y) max_y = p.y; if (p.z < min_z) min_z = p.z; if (p.z > max_z) max_z = p.z; } if (grid > 0) { min_x -= grid / 2; max_x += grid / 2; min_y -= grid / 2; max_y += grid / 2; } } /* Handle empty file and gracefully, and also zero for the !need_bounds * case. */ if (min_x > max_x) { min_x = min_y = min_z = 0; max_x = max_y = max_z = 0; } double x_offset, y_offset, z_offset; if (show_mask & FULL_COORDS) { // Full coordinates - offset is applied before rotations. x_offset = y_offset = z_offset = 0.0; } else if (show_mask & CENTRED) { // Centred. x_offset = (min_x + max_x) * -0.5; y_offset = (min_y + max_y) * -0.5; z_offset = (min_z + max_z) * -0.5; } else { // Origin at lowest SW corner. x_offset = -min_x; y_offset = -min_y; z_offset = -min_z; } if (need_bounds) { min_x += x_offset; max_x += x_offset; min_y += y_offset; max_y += y_offset; min_z += z_offset; max_z += z_offset; } /* Header */ filt->header(title.utf8_str(), datestamp.utf8_str(), model.GetDateStamp(), min_x, min_y, min_z, max_x, max_y, max_z); p1.x = p1.y = p1.z = 0; /* avoid compiler warning */ for (pass = filt->passes(); *pass; ++pass) { int pass_mask = show_mask & *pass; if (!pass_mask) continue; filt->start_pass(*pass); if (pass_mask & (LEGS|SURF)) { for (int f = 0; f != 8; ++f) { unsigned flags = (f & img_FLAG_SURFACE) ? SURF : LEGS; if ((pass_mask & flags) == 0) { // Not showing traverse because of surface/underground status. continue; } if ((f & img_FLAG_SPLAY) && (show_mask & SPLAYS) == 0) { // Not showing because it's a splay. continue; } if (f & img_FLAG_SPLAY) flags |= SPLAYS; list::const_iterator trav = model.traverses_begin(f, filter); list::const_iterator tend = model.traverses_end(f); for ( ; trav != tend; trav = model.traverses_next(f, filter, trav)) { assert(trav->size() > 1); vector::const_iterator pos = trav->begin(); vector::const_iterator end = trav->end(); for ( ; pos != end; ++pos) { transform_point(*pos, pre_offset, COS, SIN, COST, SINT, &p); p.x += x_offset; p.y += y_offset; p.z += z_offset; if (pos == trav->begin()) { // First point is move... fPendingMove = 1; } else { filt->line(&p1, &p, flags, fPendingMove); fPendingMove = 0; } p1 = p; } } } } if (pass_mask & (STNS|LABELS|ENTS|FIXES|EXPORTS)) { list::const_iterator pos = model.GetLabels(); list::const_iterator end = model.GetLabelsEnd(); for ( ; pos != end; ++pos) { if (filter && !filter->CheckVisible((*pos)->GetText())) continue; transform_point(**pos, pre_offset, COS, SIN, COST, SINT, &p); p.x += x_offset; p.y += y_offset; p.z += z_offset; int type = 0; if ((pass_mask & ENTS) && (*pos)->IsEntrance()) { type = ENTS; } else if ((pass_mask & FIXES) && (*pos)->IsFixedPt()) { type = FIXES; } else if ((pass_mask & EXPORTS) && (*pos)->IsExportedPt()) { type = EXPORTS; } else if (pass_mask & LABELS) { type = LABELS; } /* Use !UNDERGROUND as the criterion - we want stations where a * surface and underground survey meet to be in the underground * layer */ bool f_surface = !(*pos)->IsUnderground(); if (type) { const wxString & text = (*pos)->GetText(); filt->label(&p, text.utf8_str(), f_surface, type); } if (pass_mask & STNS) filt->cross(&p, f_surface); } } if (pass_mask & (XSECT|WALLS|PASG)) { bool elevation = (tilt == 0.0); list>::const_iterator tube = model.tubes_begin(); list>::const_iterator tube_end = model.tubes_end(); for ( ; tube != tube_end; ++tube) { vector::const_iterator pos = tube->begin(); vector::const_iterator end = tube->end(); size_t active_tube_len = 0; for ( ; pos != end; ++pos) { const XSect & xs = *pos; // FIXME: This filtering can create tubes containing a single // cross-section, which otherwise don't exist in aven (the // Model class currently filters them out). Perhaps we // should just always include these - a single set of LRUD // measurements is useful even if a single cross-section // 3D tube perhaps isn't. if (filter && !filter->CheckVisible(xs.GetLabel())) { // Close any active tube. if (active_tube_len > 0) { active_tube_len = 0; filt->tube_end(); } continue; } ++active_tube_len; transform_point(xs.GetPoint(), pre_offset, COS, SIN, COST, SINT, &p); p.x += x_offset; p.y += y_offset; p.z += z_offset; if (elevation) { if (pass_mask & XSECT) filt->xsect(&p, 90, xs.GetU(), xs.GetD()); if (pass_mask & WALL1) filt->wall(&p, 90, xs.GetU()); if (pass_mask & WALL2) filt->wall(&p, 270, xs.GetD()); if (pass_mask & PASG) filt->passage(&p, 90, xs.GetU(), xs.GetD()); } else { // Should only be enabled in plan or elevation mode. double angle = xs.get_right_bearing() - pan; if (pass_mask & XSECT) filt->xsect(&p, angle + 180, xs.GetL(), xs.GetR()); if (pass_mask & WALL1) filt->wall(&p, angle + 180, xs.GetL()); if (pass_mask & WALL2) filt->wall(&p, angle, xs.GetR()); if (pass_mask & PASG) filt->passage(&p, angle + 180, xs.GetL(), xs.GetR()); } } if (active_tube_len > 0) { filt->tube_end(); } } } } filt->footer(); delete filt; osfree(htab); htab = NULL; return true; } survex-1.4.4/src/hand.xbm0000644000175000017500000000156514141575516012226 00000000000000#define hand_width 32 #define hand_height 32 static unsigned char hand_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x80, 0x73, 0x00, 0x00, 0x40, 0x92, 0x00, 0x00, 0x40, 0x92, 0x00, 0x00, 0x70, 0x92, 0x00, 0x00, 0x48, 0x92, 0x00, 0x00, 0x48, 0x92, 0x00, 0x00, 0x48, 0x92, 0x00, 0x00, 0x48, 0x92, 0x06, 0x00, 0x48, 0x80, 0x09, 0x00, 0x08, 0x80, 0x08, 0x00, 0x08, 0x80, 0x04, 0x00, 0x08, 0x00, 0x02, 0x00, 0x08, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x80, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/diffpos.c0000644000175000017500000001647014141575516012403 00000000000000/* diffpos.c */ /* Utility to compare two SURVEX .pos or .3d files */ /* Copyright (C) 1994,1996,1998-2003,2010,2011,2013,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "cmdline.h" #include "debug.h" #include "filelist.h" #include "hash.h" #include "img_hosted.h" #include "namecmp.h" #include "useful.h" /* Don't complain if values mismatch by a tiny amount (1e-6m i.e. 0.001mm) */ #define TOLERANCE 1e-6 /* default threshold is 1cm */ #define DFLT_MAX_THRESHOLD 0.01 static double threshold = DFLT_MAX_THRESHOLD; static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"survey", required_argument, 0, 's'}, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "s:" static struct help_msg help[] = { /* <-- */ {HLP_ENCODELONG(0), /*only load the sub-survey with this prefix*/199, 0}, {0, 0, 0} }; /* We use a hashtable with linked list buckets - this is how many hash table * entries we have. 0x2000 with sizeof(void *) == 4 uses 32K. */ #define TREE_SIZE 0x2000 typedef struct station { struct station *next; char *name; img_point pt; } station; typedef struct added { struct added *next; char *name; } added; static int old_separator, new_separator, sort_separator; static int cmp_pname(const void *a, const void *b) { return name_cmp(*(const char **)a, *(const char **)b, sort_separator); } static station **htab; static bool fChanged = fFalse; static added *added_list = NULL; static OSSIZE_T c_added = 0; static void tree_init(void) { size_t i; htab = osmalloc(TREE_SIZE * ossizeof(station *)); for (i = 0; i < TREE_SIZE; i++) htab[i] = NULL; } static void tree_insert(const char *name, const img_point *pt) { int v = hash_string(name) & (TREE_SIZE - 1); station * stn = osnew(station); stn->name = osstrdup(name); stn->pt = *pt; stn->next = htab[v]; htab[v] = stn; } static int close_enough(const img_point * p1, const img_point * p2) { return fabs(p1->x - p2->x) - threshold <= TOLERANCE && fabs(p1->y - p2->y) - threshold <= TOLERANCE && fabs(p1->z - p2->z) - threshold <= TOLERANCE; } static void tree_remove(const char *name, const img_point *pt) { /* We need to handle duplicate labels - normal .3d files shouldn't have them * (though some older ones do due to a couple of bugs in earlier versions of * Survex) but extended .3d files repeat the label where a loop is broken, * and data read from foreign formats might repeat labels. */ int v = hash_string(name) & (TREE_SIZE - 1); station **prev; station *p; station **found = NULL; bool was_close_enough = fFalse; for (prev = &htab[v]; *prev; prev = &((*prev)->next)) { if (strcmp((*prev)->name, name) == 0) { /* Handle stations with the same name. Stations are inserted at the * start of the linked list, so pick the *last* matching station in * the list as then we match the first stations with the same name in * each file. */ if (close_enough(pt, &((*prev)->pt))) { found = prev; was_close_enough = fTrue; } else if (!was_close_enough) { found = prev; } } } if (!found) { added *add = osnew(added); add->name = osstrdup(name); add->next = added_list; added_list = add; c_added++; fChanged = fTrue; return; } if (!was_close_enough) { /* TRANSLATORS: for diffpos: */ printf(msg(/*Moved by (%3.2f,%3.2f,%3.2f): %s*/500), pt->x - (*found)->pt.x, pt->y - (*found)->pt.y, pt->z - (*found)->pt.z, name); putnl(); fChanged = fTrue; } osfree((*found)->name); p = *found; *found = p->next; osfree(p); } static int tree_check(void) { size_t c = 0; char **names; size_t i; if (c_added) { names = osmalloc(c_added * ossizeof(char *)); for (i = 0; i < c_added; i++) { added *old; SVX_ASSERT(added_list); names[i] = added_list->name; old = added_list; added_list = old->next; osfree(old); } SVX_ASSERT(added_list == NULL); sort_separator = new_separator; qsort(names, c_added, sizeof(char *), cmp_pname); for (i = 0; i < c_added; i++) { /* TRANSLATORS: for diffpos: */ printf(msg(/*Added: %s*/501), names[i]); putnl(); osfree(names[i]); } osfree(names); } for (i = 0; i < TREE_SIZE; i++) { station *p; for (p = htab[i]; p; p = p->next) c++; } if (c == 0) return fChanged; names = osmalloc(c * ossizeof(char *)); c = 0; for (i = 0; i < TREE_SIZE; i++) { station *p; for (p = htab[i]; p; p = p->next) names[c++] = p->name; } sort_separator = old_separator; qsort(names, c, sizeof(char *), cmp_pname); for (i = 0; i < c; i++) { /* TRANSLATORS: for diffpos: */ printf(msg(/*Deleted: %s*/502), names[i]); putnl(); } return fTrue; } static int parse_file(const char *fnm, const char *survey, void (*tree_func)(const char *, const img_point *)) { img_point pt; int result; int separator; img *pimg = img_open_survey(fnm, survey); if (!pimg) fatalerror(img_error2msg(img_error()), fnm); separator = pimg->separator; do { result = img_read_item(pimg, &pt); switch (result) { case img_MOVE: case img_LINE: break; case img_LABEL: tree_func(pimg->label, &pt); break; case img_BAD: img_close(pimg); fatalerror(img_error2msg(img_error()), fnm); } } while (result != img_STOP); img_close(pimg); return separator; } int main(int argc, char **argv) { char *fnm1, *fnm2; const char *survey = NULL; msg_init(argv); /* TRANSLATORS: Part of diffpos --help */ cmdline_set_syntax_message(/*FILE1 FILE2 [THRESHOLD]*/218, /* TRANSLATORS: Part of diffpos --help */ /*FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)*/255, STRING(DFLT_MAX_THRESHOLD)); cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 2, 3); while (1) { int opt = cmdline_getopt(); if (opt == EOF) break; if (opt == 's') survey = optarg; } fnm1 = argv[optind++]; fnm2 = argv[optind++]; if (argv[optind]) { optarg = argv[optind]; threshold = cmdline_double_arg(); } tree_init(); old_separator = parse_file(fnm1, survey, tree_insert); new_separator = parse_file(fnm2, survey, tree_remove); return tree_check() ? EXIT_FAILURE : EXIT_SUCCESS; } survex-1.4.4/src/aventreectrl.cc0000644000175000017500000003747014366637444013625 00000000000000// // aventreectrl.cc // // Tree control used for the survey tree. // // Copyright (C) 2001, Mark R. Shinwell. // Copyright (C) 2001-2003,2005,2006,2016,2018 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "aventreectrl.h" #include "mainfrm.h" #include using namespace std; // STATE_BLANK is used for stations which are siblings of surveys which have // select checkboxes. enum { STATE_BLANK = 0, STATE_OFF, STATE_ON }; /* XPM */ static const char *blank_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 1 1", " c None", /* pixels */ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }; /* XPM */ static const char *off_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 2 1", ". c #000000", " c None", /* pixels */ " ", " ", " ............ ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " ............ ", " " }; /* XPM */ static const char *on_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", ". c #000000", "X c #007F28", " c None", /* pixels */ " ", " ", " ............XX", " . XXX", " . XXXX", " . XXXX ", " . XXXX ", " . XXXX. ", " . XX XXXX . ", " . XXXXXXX . ", " . XXXXX . ", " . XXX . ", " . X . ", " ............ ", " " }; BEGIN_EVENT_TABLE(AvenTreeCtrl, wxTreeCtrl) EVT_MOTION(AvenTreeCtrl::OnMouseMove) EVT_LEAVE_WINDOW(AvenTreeCtrl::OnLeaveWindow) EVT_TREE_SEL_CHANGED(-1, AvenTreeCtrl::OnSelChanged) EVT_TREE_ITEM_ACTIVATED(-1, AvenTreeCtrl::OnItemActivated) EVT_CHAR(AvenTreeCtrl::OnKeyPress) EVT_TREE_ITEM_MENU(-1, AvenTreeCtrl::OnMenu) EVT_MENU(menu_SURVEY_SHOW_ALL, AvenTreeCtrl::OnRestrict) EVT_MENU(menu_SURVEY_RESTRICT, AvenTreeCtrl::OnRestrict) EVT_MENU(menu_SURVEY_HIDE, AvenTreeCtrl::OnHide) EVT_MENU(menu_SURVEY_SHOW, AvenTreeCtrl::OnShow) EVT_MENU(menu_SURVEY_HIDE_SIBLINGS, AvenTreeCtrl::OnHideSiblings) EVT_TREE_STATE_IMAGE_CLICK(-1, AvenTreeCtrl::OnStateClick) END_EVENT_TABLE() AvenTreeCtrl::AvenTreeCtrl(MainFrm* parent, wxWindow* window_parent) : wxTreeCtrl(window_parent, -1), m_Parent(parent), m_Enabled(false), m_LastItem(), m_BackgroundColour(), m_SelValid(false), menu_data(NULL) { wxImageList* img_list = new wxImageList(15, 15, 2); img_list->Add(wxBitmap(blank_xpm)); img_list->Add(wxBitmap(off_xpm)); img_list->Add(wxBitmap(on_xpm)); AssignStateImageList(img_list); } void AvenTreeCtrl::FillTree(const wxString& root_name) { Freeze(); m_Enabled = false; m_LastItem = wxTreeItemId(); m_SelValid = false; DeleteAllItems(); const wxChar separator = m_Parent->GetSeparator(); filter.clear(); filter.SetSeparator(separator); // Create the root of the tree. wxTreeItemId treeroot = AddRoot(root_name); // Fill the tree of stations and prefixes. stack previous_ids; wxString current_prefix; wxTreeItemId current_id = treeroot; list::const_iterator pos = m_Parent->GetLabels(); while (pos != m_Parent->GetLabelsEnd()) { LabelInfo* label = *pos++; if (label->IsAnon()) continue; // Determine the current prefix. wxString prefix = label->GetText().BeforeLast(separator); // Determine if we're still on the same prefix. if (prefix == current_prefix) { // no need to fiddle with branches... } // If not, then see if we've descended to a new prefix. else if (prefix.length() > current_prefix.length() && prefix.StartsWith(current_prefix) && (prefix[current_prefix.length()] == separator || current_prefix.empty())) { // We have, so start as many new branches as required. int current_prefix_length = current_prefix.length(); current_prefix = prefix; size_t next_dot = current_prefix_length; if (!next_dot) --next_dot; do { size_t prev_dot = next_dot + 1; // Extract the next bit of prefix. next_dot = prefix.find(separator, prev_dot + 1); wxString bit = prefix.substr(prev_dot, next_dot - prev_dot); // Sigh, therion can produce files with empty components in // station names! // assert(!bit.empty()); // Add the current tree ID to the stack. previous_ids.push(current_id); // Append the new item to the tree and set this as the current branch. current_id = AppendItem(current_id, bit); SetItemData(current_id, new TreeData(prefix.substr(0, next_dot))); } while (next_dot != wxString::npos); } // Otherwise, we must have moved up, and possibly then down again. else { size_t count = 0; bool ascent_only = (prefix.length() < current_prefix.length() && current_prefix.StartsWith(prefix) && (current_prefix[prefix.length()] == separator || prefix.empty())); if (!ascent_only) { // Find out how much of the current prefix and the new prefix // are the same. // Note that we require a match of a whole number of parts // between dots! size_t n = min(prefix.length(), current_prefix.length()); size_t i; for (i = 0; i < n && prefix[i] == current_prefix[i]; ++i) { if (prefix[i] == separator) count = i + 1; } } else { count = prefix.length() + 1; } // Extract the part of the current prefix after the bit (if any) // which has matched. // This gives the prefixes to ascend over. wxString prefixes_ascended = current_prefix.substr(count); // Count the number of prefixes to ascend over. int num_prefixes = prefixes_ascended.Freq(separator); // Reverse up over these prefixes. for (int i = 1; i <= num_prefixes; i++) { previous_ids.pop(); } current_id = previous_ids.top(); previous_ids.pop(); if (!ascent_only) { // Add branches for this new part. size_t next_dot = count - 1; do { size_t prev_dot = next_dot + 1; // Extract the next bit of prefix. next_dot = prefix.find(separator, prev_dot + 1); wxString bit = prefix.substr(prev_dot, next_dot - prev_dot); // Sigh, therion can produce files with empty components in // station names! // assert(!bit.empty()); // Add the current tree ID to the stack. previous_ids.push(current_id); // Append the new item to the tree and set this as the current branch. current_id = AppendItem(current_id, bit); SetItemData(current_id, new TreeData(prefix.substr(0, next_dot))); } while (next_dot != wxString::npos); } current_prefix = prefix; } // Now add the leaf. wxString bit = label->GetText().AfterLast(separator); // Sigh, therion can produce files with empty components in station // names! // assert(!bit.empty()); wxTreeItemId id = AppendItem(current_id, bit); SetItemData(id, new TreeData(label)); label->tree_id = id; // Set the colour for an item in the survey tree. if (label->IsEntrance()) { // Entrances are green (like entrance blobs). SetItemTextColour(id, wxColour(0, 255, 40)); } else if (label->IsSurface()) { // Surface stations are dark green. SetItemTextColour(id, wxColour(49, 158, 79)); } } Expand(treeroot); m_Enabled = true; Thaw(); } constexpr auto TREE_MASK = wxTREE_HITTEST_ONITEMLABEL | wxTREE_HITTEST_ONITEMRIGHT | wxTREE_HITTEST_ONITEMSTATEICON; void AvenTreeCtrl::OnMouseMove(wxMouseEvent& event) { if (!m_Enabled || m_Parent->Animating()) return; int flags; wxTreeItemId pos = HitTest(event.GetPosition(), flags); if (!(flags & TREE_MASK)) { pos = wxTreeItemId(); } if (pos == m_LastItem) return; if (pos.IsOk()) { const TreeData* data = static_cast(GetItemData(pos)); m_Parent->DisplayTreeInfo(data); if (data && !data->IsStation()) { // For stations, MainFrm calls back to SetHere(), but for surveys // we need to do that ourselves. SetHere(pos); } } else { m_Parent->DisplayTreeInfo(); } } void AvenTreeCtrl::SetHere(wxTreeItemId pos) { if (pos == m_LastItem) return; if (m_LastItem.IsOk()) { SetItemBackgroundColour(m_LastItem, m_BackgroundColour); } if (pos.IsOk()) { m_BackgroundColour = GetItemBackgroundColour(pos); SetItemBackgroundColour(pos, wxColour(180, 180, 180)); } m_LastItem = pos; } void AvenTreeCtrl::OnLeaveWindow(wxMouseEvent&) { if (m_LastItem.IsOk()) { SetItemBackgroundColour(m_LastItem, m_BackgroundColour); m_LastItem = wxTreeItemId(); } m_Parent->DisplayTreeInfo(); } void AvenTreeCtrl::OnSelChanged(wxTreeEvent&) { m_SelValid = true; } void AvenTreeCtrl::OnItemActivated(wxTreeEvent& e) { if (!m_Enabled) return; m_Parent->TreeItemSelected(GetItemData(e.GetItem())); } void AvenTreeCtrl::OnMenu(wxTreeEvent& e) { if (!m_Enabled) return; const TreeData* data = static_cast(GetItemData(e.GetItem())); menu_data = data; menu_item = e.GetItem(); if (!data) { // Root: wxMenu menu; /* TRANSLATORS: In aven's survey tree, right-clicking on the root * gives a pop-up menu and this is an option (but only enabled if * the view is restricted to a subsurvey). It reloads the current * survey file with the who survey visible. */ menu.Append(menu_SURVEY_SHOW_ALL, wmsg(/*Show all*/245)); if (m_Parent->GetSurvey().empty()) menu.Enable(menu_SURVEY_SHOW_ALL, false); PopupMenu(&menu); } else if (data->GetLabel()) { // Station: name is data->GetLabel()->GetText() } else { // Survey: wxMenu menu; /* TRANSLATORS: In aven's survey tree, right-clicking on a survey * name gives a pop-up menu and this is an option. It reloads the * current survey file with the view restricted to the survey * clicked upon. */ menu.Append(menu_SURVEY_RESTRICT, wmsg(/*Hide others*/246)); menu.AppendSeparator(); //menu.Append(menu_SURVEY_HIDE, wmsg(/*&Hide*/407)); menu.Append(menu_SURVEY_SHOW, wmsg(/*&Show*/409)); //menu.Append(menu_SURVEY_HIDE_SIBLINGS, wmsg(/*Hide si&blings*/388)); switch (GetItemState(menu_item)) { case STATE_ON: // Currently shown. menu.Enable(menu_SURVEY_SHOW, false); break; #if 0 case STATE_HIDDEN: // Currently hidden. menu.Enable(menu_SURVEY_RESTRICT, false); menu.Enable(menu_SURVEY_HIDE, false); menu.Enable(menu_SURVEY_HIDE_SIBLINGS, false); break; case STATE_OFF: menu.Enable(menu_SURVEY_HIDE, false); menu.Enable(menu_SURVEY_HIDE_SIBLINGS, false); break; #endif } PopupMenu(&menu); } menu_data = NULL; e.Skip(); } bool AvenTreeCtrl::GetSelectionData(wxTreeItemData** data) const { assert(m_Enabled); assert(data); if (!m_SelValid) { return false; } wxTreeItemId id = GetSelection(); if (id.IsOk()) { *data = GetItemData(id); } return id.IsOk() && *data; } void AvenTreeCtrl::UnselectAll() { m_SelValid = false; wxTreeCtrl::UnselectAll(); } void AvenTreeCtrl::OnKeyPress(wxKeyEvent &e) { switch (e.GetKeyCode()) { case WXK_ESCAPE: m_Parent->ClearTreeSelection(); break; case WXK_RETURN: { wxTreeItemId id = GetSelection(); if (id.IsOk()) { if (ItemHasChildren(id)) { // If on a branch, expand/contract it. if (IsExpanded(id)) { Collapse(id); } else { Expand(id); } } else { // If on a station, centre on it by selecting it twice. m_Parent->TreeItemSelected(GetItemData(id)); m_Parent->TreeItemSelected(GetItemData(id)); } } break; } case WXK_LEFT: case WXK_RIGHT: case WXK_UP: case WXK_DOWN: case WXK_HOME: case WXK_END: case WXK_PAGEUP: case WXK_PAGEDOWN: e.Skip(); break; default: // Pass key event to MainFrm which will pass to GfxCore which will // pass to GUIControl. m_Parent->OnKeyPress(e); break; } } void AvenTreeCtrl::OnRestrict(wxCommandEvent&) { m_Parent->RestrictTo(menu_data ? menu_data->GetSurvey() : wxString()); } void AvenTreeCtrl::OnHide(wxCommandEvent&) { // Shouldn't be available for the root item. wxASSERT(menu_data); // Hide should be disabled unless the item is explicitly shown. wxASSERT(GetItemState(menu_item) == STATE_ON); SetItemState(menu_item, STATE_OFF); filter.remove(menu_data->GetSurvey()); #if 0 Freeze(); // Show siblings if not already shown or hidden. wxTreeItemId i = menu_item; while ((i = GetPrevSibling(i)).IsOk()) { if (GetItemState(i) == wxTREE_ITEMSTATE_NONE) SetItemState(i, 1); } i = menu_item; while ((i = GetNextSibling(i)).IsOk()) { if (GetItemState(i) == wxTREE_ITEMSTATE_NONE) SetItemState(i, 1); } Thaw(); #endif m_Parent->ForceFullRedraw(); } void AvenTreeCtrl::OnShow(wxCommandEvent&) { // Shouldn't be available for the root item. wxASSERT(menu_data); auto old_state = GetItemState(menu_item); // Show should be disabled for an explicitly shown item. wxASSERT(old_state != STATE_ON); Freeze(); SetItemState(menu_item, STATE_ON); filter.add(menu_data->GetSurvey()); if (old_state == wxTREE_ITEMSTATE_NONE) { // Hide siblings if not already shown or hidden. wxTreeItemId i = menu_item; while ((i = GetPrevSibling(i)).IsOk()) { if (GetItemState(i) == wxTREE_ITEMSTATE_NONE) { const TreeData* data = static_cast(GetItemData(i)); SetItemState(i, data->IsStation() ? STATE_BLANK : STATE_OFF); } } i = menu_item; while ((i = GetNextSibling(i)).IsOk()) { if (GetItemState(i) == wxTREE_ITEMSTATE_NONE) { const TreeData* data = static_cast(GetItemData(i)); SetItemState(i, data->IsStation() ? STATE_BLANK : STATE_OFF); } } } Thaw(); m_Parent->ForceFullRedraw(); } void AvenTreeCtrl::OnHideSiblings(wxCommandEvent&) { // Shouldn't be available for the root item. wxASSERT(menu_data); Freeze(); SetItemState(menu_item, STATE_ON); filter.add(menu_data->GetSurvey()); wxTreeItemId i = menu_item; while ((i = GetPrevSibling(i)).IsOk()) { const TreeData* data = static_cast(GetItemData(i)); filter.remove(data->GetSurvey()); SetItemState(i, data->IsStation() ? STATE_BLANK : STATE_OFF); } i = menu_item; while ((i = GetNextSibling(i)).IsOk()) { const TreeData* data = static_cast(GetItemData(i)); filter.remove(data->GetSurvey()); SetItemState(i, data->IsStation() ? STATE_BLANK : STATE_OFF); } Thaw(); m_Parent->ForceFullRedraw(); } void AvenTreeCtrl::OnStateClick(wxTreeEvent& e) { auto item = e.GetItem(); const TreeData* data = static_cast(GetItemData(item)); switch (GetItemState(item)) { case STATE_BLANK: // Click on blank state icon for a station - let the tree handle // this in the same way as a click on the label. return; case STATE_ON: filter.remove(data->GetSurvey()); SetItemState(item, STATE_OFF); break; case STATE_OFF: filter.add(data->GetSurvey()); SetItemState(item, STATE_ON); break; } e.Skip(); m_Parent->ForceFullRedraw(); } survex-1.4.4/src/whichos.h0000644000175000017500000000271214141575516012414 00000000000000/* whichos.h Detect which OS we're compiling for. * Copyright (C) 2005 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SURVEX_WHICHOS_H #define SURVEX_WHICHOS_H /* Attempt to auto-detect OS. */ #if (defined(unix) || defined(UNIX)) # define OS_UNIX 1 #elif defined(__GNUC__) && defined(__APPLE_CC__) /* macOS is Unix for most purposes. */ # define OS_UNIX 1 # define OS_UNIX_MACOS 1 #endif #if !OS_UNIX # if defined WIN32 || defined _WIN32 || defined __WIN32 || defined __WIN32__ # define OS_WIN32 1 # endif #endif #ifndef OS_UNIX # define OS_UNIX 0 #endif #ifndef OS_UNIX_MACOS # define OS_UNIX_MACOS 0 #endif #ifndef OS_WIN32 # define OS_WIN32 0 #endif /* Check that we detected an OS! */ # if !(OS_UNIX+OS_WIN32) # error Failed to detect which os to compile for # endif #endif survex-1.4.4/src/hash.c0000644000175000017500000000275113346142325011663 00000000000000/* hash.c */ /* String hashing function */ /* Copyright (C) 1995-2002 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "debug.h" #include "hash.h" /* some (preferably prime) number for the hashing function */ #define HASH_PRIME 29363 int hash_string(const char *p) { int hash; SVX_ASSERT(p); for (hash = 0; *p; p++) hash = (hash * HASH_PRIME + *(const unsigned char*)p) & 0x7fff; return hash; } int hash_lc_string(const char *p) { int hash; SVX_ASSERT(p); for (hash = 0; *p; p++) hash = (hash * HASH_PRIME + tolower(*(const unsigned char*)p)) & 0x7fff; return hash; } int hash_data(const char *p, size_t len) { int hash; SVX_ASSERT(p); for (hash = 0; len--; p++) hash = (hash * HASH_PRIME + *(const unsigned char*)p) & 0x7fff; return hash; } survex-1.4.4/src/gla.h0000644000175000017500000002203714240572467011517 00000000000000// // gla.h // // Header file for the GLA abstraction layer. // // Copyright (C) 2002 Mark R. Shinwell. // Copyright (C) 2003,2004,2005,2006,2007,2011,2012,2014,2017,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef gla_h #define gla_h #include #include using namespace std; #include "wx.h" #include "aventypes.h" #include "vector3.h" #include "glbitmapfont.h" class GfxCore; string GetGLSystemDescription(); // #define GLA_DEBUG typedef Double glaCoord; typedef GLfloat glaTexCoord; // Colours for drawing. Don't reorder these! enum gla_colour { col_BLACK = 0, col_GREY, col_LIGHT_GREY, col_LIGHT_GREY_2, col_DARK_GREY, col_WHITE, col_TURQUOISE, col_GREEN, col_INDICATOR_1, col_INDICATOR_2, col_YELLOW, col_RED, col_BLUE, col_MAGENTA, col_LAST // must be the last entry here }; class GLAPen { friend class GLACanvas; // allow direct access to components double components[3]; // red, green, blue public: GLAPen(); void SetColour(double red, double green, double blue); // arguments in range 0 to 1.0 void Interpolate(const GLAPen&, double how_far); double GetRed() const; double GetGreen() const; double GetBlue() const; }; class GLAList { GLuint gl_list; unsigned int flags; public: GLAList() : gl_list(0), flags(0) { } GLAList(GLuint gl_list_, unsigned int flags_) : gl_list(gl_list_), flags(flags_) { } operator bool() { return gl_list != 0; } bool need_to_generate(); void finalise(unsigned int list_flags); bool DrawList() const; void invalidate_if(unsigned int mask) { // If flags == NEVER_CACHE, the list won't be invalidated (unless // mask is 0, which isn't a normal thing to pass). if (flags & mask) flags = 0; } }; class GLACanvas : public wxGLCanvas { friend class GLAList; // For flag values. wxGLContext ctx; #ifdef GLA_DEBUG int m_Vertices; #endif GLdouble modelview_matrix[16]; GLdouble projection_matrix[16]; GLint viewport[4]; // Viewing volume diameter: glaCoord m_VolumeDiameter; // Parameters for plotting data: Double m_Pan, m_Tilt; Double m_Scale; Vector3 m_Translation; BitmapFont m_Font; GLUquadric* m_Quadric; GLuint m_Texture; GLuint m_BlobTexture; GLuint m_CrossTexture; Double alpha; bool m_SmoothShading; bool m_Textured; bool m_Perspective; bool m_Fog; bool m_AntiAlias; bool save_hints; enum { UNKNOWN = 0, POINT = 'P', LINES = 'L', SPRITE = 'S' }; int blob_method; int cross_method; int x_size; int y_size; #ifdef wxHAS_DPI_INDEPENDENT_PIXELS double content_scale_factor = 1.0; #else static constexpr unsigned content_scale_factor = 1; #endif vector drawing_lists; enum { INVALIDATE_ON_SCALE = 1, INVALIDATE_ON_X_RESIZE = 2, INVALIDATE_ON_Y_RESIZE = 4, INVALIDATE_ON_HIDPI = 8, NEVER_CACHE = 16, CACHED = 32 }; mutable unsigned int list_flags; wxString vendor, renderer; bool CheckVisualFidelity(const unsigned char * target) const; public: GLACanvas(wxWindow* parent, int id); ~GLACanvas(); static bool check_visual(); void FirstShow(); void Clear(); void ClearNative(); void StartDrawing(); void FinishDrawing(); void SetVolumeDiameter(glaCoord diameter); void SetDataTransform(); void SetIndicatorTransform(); void DrawList(unsigned int l); void DrawListZPrepass(unsigned int l); void DrawList2D(unsigned int l, glaCoord x, glaCoord y, Double rotation); void InvalidateList(unsigned int l) { if (l < drawing_lists.size()) { // Invalidate any existing cached list. drawing_lists[l].invalidate_if(CACHED); } } virtual void GenerateList(unsigned int l) = 0; void SetColour(const GLAPen& pen, double rgb_scale); void SetColour(const GLAPen& pen); void SetColour(gla_colour colour, double rgb_scale); void SetColour(gla_colour colour); void SetAlpha(double new_alpha) { alpha = new_alpha; } void DrawText(glaCoord x, glaCoord y, glaCoord z, const wxString& str); void DrawIndicatorText(int x, int y, const wxString& str); void GetTextExtent(const wxString& str, int * x_ext, int * y_ext) const; void BeginQuadrilaterals(); void EndQuadrilaterals(); void BeginLines(); void EndLines(); void BeginTriangleStrip(); void EndTriangleStrip(); void BeginTriangles(); void EndTriangles(); void BeginPolyline(); void EndPolyline(); void BeginPolyloop(); void EndPolyloop(); void BeginPolygon(); void EndPolygon(); void BeginBlobs(); void EndBlobs(); void BeginCrosses(); void EndCrosses(); void DrawRectangle(gla_colour fill, gla_colour edge, glaCoord x0, glaCoord y0, glaCoord w, glaCoord h); void DrawShadedRectangle(const GLAPen & fill_bot, const GLAPen & fill_top, glaCoord x0, glaCoord y0, glaCoord w, glaCoord h); void DrawCircle(gla_colour edge, gla_colour fill, glaCoord cx, glaCoord cy, glaCoord radius); void DrawSemicircle(gla_colour edge, gla_colour fill, glaCoord cx, glaCoord cy, glaCoord radius, glaCoord start); void DrawBlob(glaCoord x, glaCoord y, glaCoord z); void DrawBlob(glaCoord x, glaCoord y); void DrawCross(glaCoord x, glaCoord y, glaCoord z); void DrawRing(glaCoord x, glaCoord y); void PlaceVertex(const Vector3 & v, glaTexCoord tex_x, glaTexCoord tex_y) { PlaceVertex(v.GetX(), v.GetY(), v.GetZ(), tex_x, tex_y); } void PlaceVertex(const Vector3 & v) { PlaceVertex(v.GetX(), v.GetY(), v.GetZ()); } void PlaceVertex(glaCoord x, glaCoord y, glaCoord z); void PlaceVertex(glaCoord x, glaCoord y, glaCoord z, glaTexCoord tex_x, glaTexCoord tex_y); void PlaceIndicatorVertex(glaCoord x, glaCoord y); void PlaceNormal(const Vector3 &v); void EnableDashedLines(); void DisableDashedLines(); void EnableSmoothPolygons(bool filled); void DisableSmoothPolygons(); void SetRotation(double pan, double tilt) { m_Pan = pan; m_Tilt = tilt; } void SetScale(Double); void SetTranslation(const Vector3 &v) { m_Translation = v; } void AddTranslation(const Vector3 &v) { m_Translation += v; } const Vector3 & GetTranslation() const { return m_Translation; } void AddTranslationScreenCoordinates(int dx, int dy); bool Transform(const Vector3 & v, double* x_out, double* y_out, double* z_out) const; void ReverseTransform(Double x, Double y, double* x_out, double* y_out, double* z_out) const; int GetFontSize() const { return m_Font.get_font_size(); } void ToggleSmoothShading(); bool GetSmoothShading() const { return m_SmoothShading; } Double SurveyUnitsAcrossViewport() const; void ToggleTextured(); bool GetTextured() const { return m_Textured; } void TogglePerspective() { m_Perspective = !m_Perspective; } bool GetPerspective() const { return m_Perspective; } void ToggleFog() { m_Fog = !m_Fog; } bool GetFog() const { return m_Fog; } void ToggleAntiAlias() { m_AntiAlias = !m_AntiAlias; } bool GetAntiAlias() const { return m_AntiAlias; } bool SaveScreenshot(const wxString & fnm, wxBitmapType type) const; void ReadPixels(int width, int height, unsigned char * buf) const; void PolygonOffset(bool on) const; int GetXSize() const { list_flags |= INVALIDATE_ON_X_RESIZE; return x_size; } int GetYSize() const { list_flags |= INVALIDATE_ON_Y_RESIZE; return y_size; } #ifdef wxHAS_DPI_INDEPENDENT_PIXELS double GetContentScaleFactor() const { list_flags |= INVALIDATE_ON_HIDPI; return content_scale_factor; } void UpdateContentScaleFactor(); void OnMove(wxMoveEvent & event); #else // wxWindow::GetContentScaleFactor() will always return 1.0, so arrange // things so it's a compile-time constant the compiler can optimise away. // // Dummy parameter here avoids an error due to mismatched return type // compared to the wxWidgets method. unsigned GetContentScaleFactor(bool = false) const { return 1; } void UpdateContentScaleFactor() { } #endif void OnSize(wxSizeEvent & event); glaCoord GetVolumeDiameter() const { return m_VolumeDiameter; } void ScaleMouseEvent(wxMouseEvent& e) const { e.SetX(e.GetX() * content_scale_factor); e.SetY(e.GetY() * content_scale_factor); } private: DECLARE_EVENT_TABLE() }; #endif survex-1.4.4/src/moviemaker.cc0000644000175000017500000002567114206031737013250 00000000000000// // moviemaker.cc // // Class for writing movies from Aven. // // Copyright (C) 2004,2011,2012,2013,2014,2015,2016,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // /* Based on output-example.c: * * Libavformat API example: Output a media file in any supported * libavformat format. The default codecs are used. * * Copyright (c) 2003 Fabrice Bellard * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifdef HAVE_CONFIG_H #include #endif #define __STDC_CONSTANT_MACROS #include #include #include #include "moviemaker.h" #ifdef WITH_LIBAV extern "C" { # include # include # include # include # include } #endif // Handle the "no libav/FFmpeg" case in this file. #if !defined WITH_LIBAV || LIBAVCODEC_VERSION_MAJOR >= 57 #ifdef WITH_LIBAV enum { MOVIE_NO_SUITABLE_FORMAT = 1, MOVIE_AUDIO_ONLY, MOVIE_FILENAME_TOO_LONG }; #endif MovieMaker::MovieMaker() #ifdef WITH_LIBAV : oc(0), video_st(0), context(0), frame(0), pixels(0), sws_ctx(0), averrno(0) #endif { #ifdef WITH_LIBAV static bool initialised_ffmpeg = false; if (initialised_ffmpeg) return; #if LIBAVCODEC_VERSION_MAJOR < 58 avcodec_register_all(); av_register_all(); #endif initialised_ffmpeg = true; #endif } #ifdef WITH_LIBAV static int write_packet(void *opaque, uint8_t *buf, int buf_size) { FILE * fh = (FILE*)opaque; size_t res = fwrite(buf, 1, buf_size, fh); return res > 0 ? res : -1; } static int64_t seek_stream(void *opaque, int64_t offset, int whence) { FILE * fh = (FILE*)opaque; return fseek(fh, offset, whence); } #endif #define MAX_EXTENSION_LEN 8 bool MovieMaker::Open(FILE* fh, const char * ext, int width, int height) { #ifdef WITH_LIBAV fh_to_close = fh; /* Allocate the output media context. */ char dummy_filename[MAX_EXTENSION_LEN + 3] = "x."; oc = NULL; if (strlen(ext) <= MAX_EXTENSION_LEN) { // Use "x." + extension for format detection to avoid having to deal // with wide character filenames. strcpy(dummy_filename + 2, ext); avformat_alloc_output_context2(&oc, NULL, NULL, dummy_filename); } if (!oc) { averrno = MOVIE_NO_SUITABLE_FORMAT; return false; } auto fmt = oc->oformat; if (fmt->video_codec == AV_CODEC_ID_NONE) { averrno = MOVIE_AUDIO_ONLY; return false; } /* find the video encoder */ auto codec = avcodec_find_encoder(fmt->video_codec); if (!codec) { // FIXME : Erm - internal ffmpeg library problem? averrno = AVERROR(ENOMEM); return false; } // Add the video stream. video_st = avformat_new_stream(oc, NULL); if (!video_st) { averrno = AVERROR(ENOMEM); return false; } context = avcodec_alloc_context3(codec); context->codec_id = fmt->video_codec; context->width = width; context->height = height; video_st->time_base.den = 25; // Frames per second. video_st->time_base.num = 1; context->time_base = video_st->time_base; context->bit_rate = width * height * (4 * 0.07) * context->time_base.den / context->time_base.num; context->bit_rate_tolerance = context->bit_rate; context->global_quality = 4; context->rc_buffer_size = 2 * 1024 * 1024; context->rc_max_rate = context->bit_rate * 8; context->gop_size = 50; /* Twice the framerate */ context->pix_fmt = AV_PIX_FMT_YUV420P; if (context->has_b_frames) { // B frames are backwards predicted - they can improve compression, // but may slow encoding and decoding. context->max_b_frames = 4; } /* Some formats want stream headers to be separate. */ if (oc->oformat->flags & AVFMT_GLOBALHEADER) context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; int retval; retval = avcodec_open2(context, codec, NULL); if (retval < 0) { averrno = retval; return false; } /* Allocate the encoded raw picture. */ frame = av_frame_alloc(); if (!frame) { averrno = AVERROR(ENOMEM); return false; } frame->format = context->pix_fmt; frame->width = width; frame->height = height; frame->pts = 0; retval = av_frame_get_buffer(frame, 32); if (retval < 0) { averrno = retval; return false; } if (frame->format != AV_PIX_FMT_YUV420P) { // FIXME need to allocate another frame for this case if we stop // hardcoding AV_PIX_FMT_YUV420P. abort(); } /* copy the stream parameters to the muxer */ retval = avcodec_parameters_from_context(video_st->codecpar, context); if (retval < 0) { averrno = retval; return false; } pixels = (unsigned char *)av_malloc(width * height * 6); if (!pixels) { averrno = AVERROR(ENOMEM); return false; } // Show the format we've ended up with (for debug purposes). // av_dump_format(oc, 0, dummy_filename, 1); av_free(sws_ctx); sws_ctx = sws_getContext(width, height, AV_PIX_FMT_RGB24, width, height, context->pix_fmt, SWS_BICUBIC, NULL, NULL, NULL); if (sws_ctx == NULL) { fprintf(stderr, "Cannot initialize the conversion context!\n"); averrno = AVERROR(ENOMEM); return false; } if (!(fmt->flags & AVFMT_NOFILE)) { const int buf_size = 8192; void * buf = av_malloc(buf_size); oc->pb = avio_alloc_context(static_cast(buf), buf_size, 1, fh, NULL, write_packet, seek_stream); if (!oc->pb) { averrno = AVERROR(ENOMEM); return false; } } // Write the stream header, if any. retval = avformat_write_header(oc, NULL); if (retval < 0) { averrno = retval; return false; } averrno = 0; return true; #else (void)fh; (void)ext; (void)width; (void)height; return false; #endif } unsigned char * MovieMaker::GetBuffer() const { #ifdef WITH_LIBAV return pixels + GetWidth() * GetHeight() * 3; #else return NULL; #endif } int MovieMaker::GetWidth() const { #ifdef WITH_LIBAV assert(video_st); return video_st->codecpar->width; #else return 0; #endif } int MovieMaker::GetHeight() const { #ifdef WITH_LIBAV assert(video_st); return video_st->codecpar->height; #else return 0; #endif } #ifdef WITH_LIBAV // Call with frame=NULL when done. int MovieMaker::encode_frame(AVFrame* frame_or_null) { int ret = avcodec_send_frame(context, frame_or_null); if (ret < 0) return ret; AVPacket *pkt = av_packet_alloc(); pkt->size = 0; while ((ret = avcodec_receive_packet(context, pkt)) == 0) { // Rescale output packet timestamp values from codec to stream timebase. av_packet_rescale_ts(pkt, context->time_base, video_st->time_base); pkt->stream_index = video_st->index; // Write the compressed frame to the media file. ret = av_interleaved_write_frame(oc, pkt); if (ret < 0) { av_packet_free(&pkt); release(); return ret; } } av_packet_free(&pkt); return 0; } #endif bool MovieMaker::AddFrame() { #ifdef WITH_LIBAV int ret = av_frame_make_writable(frame); if (ret < 0) { averrno = ret; return false; } enum AVPixelFormat pix_fmt = context->pix_fmt; if (pix_fmt != AV_PIX_FMT_YUV420P) { // FIXME convert... abort(); } int len = 3 * GetWidth(); { // Flip image vertically int h = GetHeight(); unsigned char * src = pixels + h * len; unsigned char * dest = src - len; while (h--) { memcpy(dest, src, len); src += len; dest -= len; } } sws_scale(sws_ctx, &pixels, &len, 0, GetHeight(), frame->data, frame->linesize); ++frame->pts; // Encode this frame. ret = encode_frame(frame); if (ret < 0) { averrno = ret; return false; } #endif return true; } bool MovieMaker::Close() { #ifdef WITH_LIBAV if (video_st && averrno == 0) { // Flush out any remaining data. int ret = encode_frame(NULL); if (ret < 0) { averrno = ret; return false; } av_write_trailer(oc); } release(); #endif return true; } #ifdef WITH_LIBAV void MovieMaker::release() { // Close codec. avcodec_free_context(&context); av_frame_free(&frame); av_free(pixels); pixels = NULL; sws_freeContext(sws_ctx); sws_ctx = NULL; // Free the stream. avformat_free_context(oc); oc = NULL; if (fh_to_close) { fclose(fh_to_close); fh_to_close = NULL; } } #endif MovieMaker::~MovieMaker() { #ifdef WITH_LIBAV release(); #endif } const char * MovieMaker::get_error_string() const { #ifdef WITH_LIBAV switch (averrno) { case AVERROR(EIO): return "I/O error"; case AVERROR(EDOM): return "Number syntax expected in filename"; case AVERROR_INVALIDDATA: /* same as AVERROR_UNKNOWN: return "unknown error"; */ return "invalid data found"; case AVERROR(ENOMEM): return "not enough memory"; case AVERROR(EILSEQ): return "unknown format"; case AVERROR(ENOSYS): return "Operation not supported"; case AVERROR(ENOENT): return "No such file or directory"; case AVERROR_EOF: return "End of file"; case AVERROR_PATCHWELCOME: return "Not implemented in FFmpeg"; case 0: return "No error"; case MOVIE_NO_SUITABLE_FORMAT: return "Couldn't find a suitable output format"; case MOVIE_AUDIO_ONLY: return "Audio-only format specified"; case MOVIE_FILENAME_TOO_LONG: return "Filename too long"; } #endif return "Unknown error"; } #else #include "moviemaker-legacy.cc" #endif survex-1.4.4/src/z_getopt.c0000664000175000017500000010370614205545366012606 00000000000000/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #ifdef HAVE_CONFIG_H # include #endif #include "message.h" #define _ #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifndef _ # define _(msgid) gettext (msgid) # endif # else # define _(msgid) (msgid) # endif # if defined _LIBC && defined USE_IN_LIBIO # include # endif #endif #ifndef attribute_hidden # define attribute_hidden #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized attribute_hidden; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else # if HAVE_STRING_H # include # else # include # endif /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv /* avoid "warning C4273: 'getenv' : inconsistent dll linkage." */ #ifndef __WIN32__ extern char *getenv (); #endif #endif static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { (void)argc; (void)argv; /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (posixly_correct == NULL && argc == __libc_argc && argv == __libc_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { int print_errors = opterr; if (optstring[0] == ':') print_errors = 0; if (argc < 1) return -1; optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, msg(/*%s: option “%s†is ambiguous\n*/300), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[optind - 1][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); #else fprintf (stderr, msg(/*%s: option “--%s†doesn’t allow an argument\n*/303), argv[0], pfound->name); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); #else fprintf (stderr, msg(/*%s: option “%c%s†doesn’t allow an argument\n*/302), argv[0], argv[optind - 1][0], pfound->name); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, msg(/*%s: option “%s†requires an argument\n*/305), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[optind][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); #else fprintf (stderr, msg(/*%s: unrecognized option “--%sâ€\n*/307), argv[0], nextchar); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); #else fprintf (stderr, msg(/*%s: unrecognized option “%c%sâ€\n*/308), argv[0], argv[optind][0], nextchar); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif #if 0 if (posixly_correct) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: illegal option -- %c\n"), argv[0], c); #else fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); #endif } else #endif { #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: invalid option -- %c\n"), argv[0], c); #else fprintf (stderr, msg(/*%s: invalid option -- %c\n*/310), argv[0], c); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } optopt = c; return '?'; } #if 0 /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option requires an argument -- %c\n"), argv[0], c) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } #endif if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option requires an argument -- %c\n"), argv[0], c) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, msg(/*%s: option requires an argument -- %c\n*/306), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ survex-1.4.4/src/strftime.c0000644000175000017500000002327214141575516012604 00000000000000/* * strftime.c * * Public-domain relatively quick-and-dirty implemenation of * ANSI library routine for System V Unix systems. * * It's written in old-style C for maximal portability. * However, since I'm used to prototypes, I've included them too. * * If you want stuff in the System V ascftime routine, add the SYSV_EXT define. * For stuff needed to implement the P1003.2 date command, add POSIX2_DATE. * For complete POSIX semantics, add POSIX_SEMANTICS. * * The code for %c, %x, and %X is my best guess as to what's "appropriate". * This version ignores LOCALE information. * It also doesn't worry about multi-byte characters. * So there. * * Arnold Robbins * January, February, March, 1991 * Updated March 1992 * * Fixes from ado@elsie.nci.nih.gov * February 1991 * * Fixed compiler warnings from GCC * Olly Betts 2005-01-12 * * Fix memory leak if realloc() fails * Olly Betts 2010-12-21 * * Fix compilation error with GCC * Olly Betts 2010-12-21 */ #include #include #include #include #include #ifndef __STDC__ #define const /**/ extern void *malloc(); extern void *realloc(); extern void free(); extern void tzset(); extern char *strchr(); extern char *getenv(); static int weeknumber(); #else #include extern void tzset(void); static int weeknumber(const struct tm *timeptr, int firstweekday); #endif #ifdef __GNUC__ #define inline __inline__ #else #define inline /**/ #endif #define range(low, item, hi) max(low, min(item, hi)) extern char *tzname[2]; extern int daylight; #define SYSV_EXT 1 /* stuff in System V ascftime routine */ #define POSIX2_DATE 1 /* stuff in Posix 1003.2 date command */ #define VMS_EXT 1 /* include %V for VMS date format */ #define POSIX_SEMANTICS 1 /* call tzset() if TZ changes */ #if defined(POSIX2_DATE) && ! defined(SYSV_EXT) #define SYSV_EXT 1 #endif /* min --- return minimum of two numbers */ #ifndef __STDC__ static inline int min(a, b) int a, b; #else static inline int min(int a, int b) #endif { return (a < b ? a : b); } /* max --- return maximum of two numbers */ #ifndef __STDC__ static inline int max(a, b) int a, b; #else static inline int max(int a, int b) #endif { return (a > b ? a : b); } /* strftime --- produce formatted time */ #ifndef __STDC__ size_t strftime(s, maxsize, format, timeptr) char *s; size_t maxsize; const char *format; const struct tm *timeptr; #else size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr) #endif { char *endp = s + maxsize; char *start = s; char tbuf[100]; int i; static short first = 1; static char *savetz = NULL; static int savetzlen = 0; char *tz; int tzlen; /* various tables, useful in North America */ static const char *days_a[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", }; static const char *days_l[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", }; static const char *months_a[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", }; static const char *months_l[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", }; static const char *ampm[] = { "AM", "PM", }; if (s == NULL || format == NULL || timeptr == NULL || maxsize == 0) return 0; if (strchr(format, '%') == NULL && strlen(format) + 1 >= maxsize) return 0; #ifndef POSIX_SEMANTICS if (first) { tzset(); first = 0; } #else /* POSIX_SEMANTICS */ tz = getenv("TZ"); tzlen = strlen(tz); if (first) { if (tz != NULL) { savetz = (char *) malloc(tzlen + 1); if (savetz != NULL) { savetzlen = tzlen + 1; strcpy(savetz, tz); } } tzset(); first = 0; } /* if we have a saved TZ, and it is different, recapture and reset */ if (tz && savetz && (tz[0] != savetz[0] || strcmp(tz, savetz) != 0)) { i = strlen(tz) + 1; if (i > savetzlen) { char * newsavetz = (char *) realloc(savetz, i); if (newsavetz) { savetzlen = i; strcpy(newsavetz, tz); } else { free(savetz); } savetz = newsavetz; } else strcpy(savetz, tz); tzset(); } #endif /* POSIX_SEMANTICS */ for (; *format && s < endp - 1; format++) { tbuf[0] = '\0'; if (*format != '%') { *s++ = *format; continue; } again: switch (*++format) { case '\0': *s++ = '%'; goto out; case '%': *s++ = '%'; continue; case 'a': /* abbreviated weekday name */ if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6) strcpy(tbuf, "?"); else strcpy(tbuf, days_a[timeptr->tm_wday]); break; case 'A': /* full weekday name */ if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6) strcpy(tbuf, "?"); else strcpy(tbuf, days_l[timeptr->tm_wday]); break; #ifdef SYSV_EXT case 'h': /* abbreviated month name */ #endif case 'b': /* abbreviated month name */ if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11) strcpy(tbuf, "?"); else strcpy(tbuf, months_a[timeptr->tm_mon]); break; case 'B': /* full month name */ if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11) strcpy(tbuf, "?"); else strcpy(tbuf, months_l[timeptr->tm_mon]); break; case 'c': /* appropriate date and time representation */ sprintf(tbuf, "%s %s %2d %02d:%02d:%02d %d", days_a[range(0, timeptr->tm_wday, 6)], months_a[range(0, timeptr->tm_mon, 11)], range(1, timeptr->tm_mday, 31), range(0, timeptr->tm_hour, 23), range(0, timeptr->tm_min, 59), range(0, timeptr->tm_sec, 61), timeptr->tm_year + 1900); break; case 'd': /* day of the month, 01 - 31 */ i = range(1, timeptr->tm_mday, 31); sprintf(tbuf, "%02d", i); break; case 'H': /* hour, 24-hour clock, 00 - 23 */ i = range(0, timeptr->tm_hour, 23); sprintf(tbuf, "%02d", i); break; case 'I': /* hour, 12-hour clock, 01 - 12 */ i = range(0, timeptr->tm_hour, 23); if (i == 0) i = 12; else if (i > 12) i -= 12; sprintf(tbuf, "%02d", i); break; case 'j': /* day of the year, 001 - 366 */ sprintf(tbuf, "%03d", timeptr->tm_yday + 1); break; case 'm': /* month, 01 - 12 */ i = range(0, timeptr->tm_mon, 11); sprintf(tbuf, "%02d", i + 1); break; case 'M': /* minute, 00 - 59 */ i = range(0, timeptr->tm_min, 59); sprintf(tbuf, "%02d", i); break; case 'p': /* am or pm based on 12-hour clock */ i = range(0, timeptr->tm_hour, 23); if (i < 12) strcpy(tbuf, ampm[0]); else strcpy(tbuf, ampm[1]); break; case 'S': /* second, 00 - 61 */ i = range(0, timeptr->tm_sec, 61); sprintf(tbuf, "%02d", i); break; case 'U': /* week of year, Sunday is first day of week */ sprintf(tbuf, "%d", weeknumber(timeptr, 0)); break; case 'w': /* weekday, Sunday == 0, 0 - 6 */ i = range(0, timeptr->tm_wday, 6); sprintf(tbuf, "%d", i); break; case 'W': /* week of year, Monday is first day of week */ sprintf(tbuf, "%d", weeknumber(timeptr, 1)); break; case 'x': /* appropriate date representation */ sprintf(tbuf, "%s %s %2d %d", days_a[range(0, timeptr->tm_wday, 6)], months_a[range(0, timeptr->tm_mon, 11)], range(1, timeptr->tm_mday, 31), timeptr->tm_year + 1900); break; case 'X': /* appropriate time representation */ sprintf(tbuf, "%02d:%02d:%02d", range(0, timeptr->tm_hour, 23), range(0, timeptr->tm_min, 59), range(0, timeptr->tm_sec, 61)); break; case 'y': /* year without a century, 00 - 99 */ i = timeptr->tm_year % 100; sprintf(tbuf, "%d", i); break; case 'Y': /* year with century */ sprintf(tbuf, "%d", 1900 + timeptr->tm_year); break; case 'Z': /* time zone name or abbrevation */ i = 0; if (daylight && timeptr->tm_isdst) i = 1; strcpy(tbuf, tzname[i]); break; #ifdef SYSV_EXT case 'n': /* same as \n */ tbuf[0] = '\n'; tbuf[1] = '\0'; break; case 't': /* same as \t */ tbuf[0] = '\t'; tbuf[1] = '\0'; break; case 'D': /* date as %m/%d/%y */ strftime(tbuf, sizeof tbuf, "%m/%d/%y", timeptr); break; case 'e': /* day of month, blank padded */ sprintf(tbuf, "%2d", range(1, timeptr->tm_mday, 31)); break; case 'r': /* time as %I:%M:%S %p */ strftime(tbuf, sizeof tbuf, "%I:%M:%S %p", timeptr); break; case 'R': /* time as %H:%M */ strftime(tbuf, sizeof tbuf, "%H:%M", timeptr); break; case 'T': /* time as %H:%M:%S */ strftime(tbuf, sizeof tbuf, "%H:%M:%S", timeptr); break; #endif #ifdef VMS_EXT case 'V': /* date as dd-bbb-YYYY */ sprintf(tbuf, "%2d-%3.3s-%4d", range(1, timeptr->tm_mday, 31), months_a[range(0, timeptr->tm_mon, 11)], timeptr->tm_year + 1900); for (i = 3; i < 6; i++) if (islower(tbuf[i])) tbuf[i] = toupper(tbuf[i]); break; #endif #ifdef POSIX2_DATE case 'C': sprintf(tbuf, "%02d", (timeptr->tm_year + 1900) / 100); break; case 'E': case 'O': /* POSIX locale extensions, ignored for now */ goto again; #endif default: tbuf[0] = '%'; tbuf[1] = *format; tbuf[2] = '\0'; break; } i = strlen(tbuf); if (i) { if (s + i < endp - 1) { strcpy(s, tbuf); s += i; } else return 0; } } out: if (s < endp && *format == '\0') { *s = '\0'; return (s - start); } else return 0; } /* weeknumber --- figure how many weeks into the year */ /* With thanks and tip of the hatlo to ado@elsie.nci.nih.gov */ /* Modified byMichal Jaegermann */ #ifndef __STDC__ static int weeknumber(timeptr, firstweekday) const struct tm *timeptr; int firstweekday; #else static int weeknumber(const struct tm *timeptr, int firstweekday) #endif /* * firstweekday is 0 if starting in Sunday, non-zero if in Monday */ { return (timeptr->tm_yday - timeptr->tm_wday + (firstweekday ? (timeptr->tm_wday ? 8 : 1) : 7)) / 7; } survex-1.4.4/src/avenprcore.cc0000644000175000017500000001113214141575516013246 00000000000000/* avenprcore.cc * Printer independent parts of Survex printer drivers * Copyright (C) 1993-2002,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016 Olly Betts * Copyright (C) 2004 Philip Underwood * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "useful.h" #include "avenprcore.h" #if defined __WXMSW__ || defined __WXMAC__ # include #else # include #endif #include layout::layout(wxPageSetupDialogData* data) : show_mask(0), SkipBlank(false), Border(true), Cutlines(true), Legend(true), title(), datestamp(), Scale(0), rot(0), tilt(0), view(PLAN), scX(1), scY(1), xMin(0), xMax(-1), yMin(0), yMax(-1), pagesX(1), pagesY(1), pages(1), xOrg(0), yOrg(0) { if (data) { // Printing. // Create a temporary wxPrinterDC/wxPostScriptDC so we can get access // to the size of the printable area in mm to allow us to calculate how // many pages will be needed. // // It may seem like data->GetPaperSize() would tell us this page size // without having to construct a temporary DC, but that just returns // (0, 0) for the size, at least with wxGTK 3.0.2. #if defined __WXMSW__ || defined __WXMAC__ wxPrinterDC pdc(data->GetPrintData()); #else wxPostScriptDC pdc(data->GetPrintData()); #endif // Calculate the size of the printable area in mm to allow us to work // out how many pages will be needed for a given scale. wxSize size = pdc.GetSizeMM(); size.DecBy(data->GetMarginBottomRight()); size.DecBy(data->GetMarginTopLeft()); PaperWidth = size.x; // Allow for our footer. PaperDepth = size.y - FOOTER_HEIGHT_MM; } else { // Exporting. PaperWidth = PaperDepth = 0; } } void layout::pages_required() { double image_dx, image_dy; double image_centre_x, image_centre_y; double paper_centre_x, paper_centre_y; double allow = 21.0; if (Legend) allow += 30.0; double Sc = 1000 / Scale; image_dx = (xMax - xMin) * Sc; if (PaperWidth > 0.0) { pagesX = (int)ceil((image_dx + 19.0) / PaperWidth); } else { /* paperwidth not fixed (eg window or roll printer/plotter) */ pagesX = 1; PaperWidth = image_dx + 19.0; } paper_centre_x = (pagesX * PaperWidth) / 2; image_centre_x = Sc * (xMax + xMin) / 2; xOrg = paper_centre_x - image_centre_x; image_dy = (yMax - yMin) * Sc; if (PaperDepth > 0.0) { pagesY = (int)ceil((image_dy + allow) / PaperDepth); } else { /* paperdepth not fixed (eg window or roll printer/plotter) */ pagesY = 1; PaperDepth = image_dy + allow; } paper_centre_y = 20 + (pagesY * PaperDepth) / 2; image_centre_y = Sc * (yMax + yMin) / 2; yOrg = paper_centre_y - image_centre_y; pages = pagesX * pagesY; } #define DEF_RATIO (1.0/(double)DEFAULT_SCALE) /* pick a scale which will make it fit in the desired size */ void layout::pick_scale(int x, int y) { pagesX = x; pagesY = y; pages = x * y; double Sc_x, Sc_y; /* pagesY = ceil((image_dy+allow)/PaperDepth) * so (image_dy+allow)/PaperDepth <= pagesY < (image_dy+allow)/PaperDepth+1 * so image_dy <= pagesY*PaperDepth-allow < image_dy+PaperDepth * and Sc = image_dy / (yMax-yMin) * so Sc <= (pagesY*PaperDepth-allow)/(yMax-yMin) < Sc+PaperDepth/(yMax-yMin) */ Sc_x = Sc_y = DEF_RATIO; if (PaperWidth > 0.0 && xMax > xMin) Sc_x = (x * PaperWidth - 19.0) / (xMax - xMin); if (PaperDepth > 0.0 && yMax > yMin) { double allow = 21.0; if (Legend) allow += 30.0; Sc_y = (y * PaperDepth - allow) / (yMax - yMin); } Sc_x = std::min(Sc_x, Sc_y) * 0.99; /* shrink by 1% so we don't cock up */ #if 0 /* this picks a nice (in some sense) ratio, but is too stingy */ double E = pow(10.0, floor(log10(Sc_x))); Sc_x = floor(Sc_x / E) * E; #endif double Scale_exact = 1000.0 / Sc_x; /* trim to 2 s.f. (rounding up) */ double w = pow(10.0, floor(log10(Scale_exact) - 1.0)); Scale = ceil(Scale_exact / w) * w; } survex-1.4.4/src/glbitmapfont.cc0000644000175000017500000002071614214236745013577 00000000000000// // glbitmapfont.cc // // Draw text using glBitmap. // // Copyright (C) 2011-2022 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "glbitmapfont.h" #include "aventypes.h" #include "gllogerror.h" #include "useful.h" #include "wx.h" #include #include #ifdef HAVE_MMAP #include #else #include #endif using namespace std; #include "../lib/preload_font.h" BitmapFont::~BitmapFont() { if (!gllist_base) return; glDeleteLists(gllist_base, BITMAPFONT_MAX_CHAR); CHECK_GL_ERROR("BitmapFont::~BitmapFont", "glDeleteLists"); } static uint16_t* tab_2x = NULL; static uint16_t* fontdata_2x = NULL; static uint16_t* fontdata_2x_extra = NULL; bool BitmapFont::load(const wxString & font_file_, bool double_size) { font_file = font_file_; font_size = double_size ? 32 : 16; if (!gllist_base) { gllist_base = glGenLists(BITMAPFONT_MAX_CHAR); CHECK_GL_ERROR("BitmapFont::load", "glGenLists"); } if (double_size && !tab_2x) { tab_2x = new uint16_t[256]; for (unsigned i = 0; i < 256; ++i) { unsigned v = (i & 1) << 8 | (i & 2) << 9 | (i & 4) << 10 | (i & 8) << 11 | (i & 16) >> 4 | (i & 32) >> 3 | (i & 64) >> 2 | (i & 128) >> 1; tab_2x[i] = 3 * v; } fontdata_2x = new uint16_t[sizeof(fontdata_preloaded) * 2]; } const unsigned char * p = fontdata_preloaded; const unsigned char * end = p + sizeof(fontdata_preloaded); uint16_t* out = fontdata_2x; for (int ch = 0; ch < BITMAPFONT_MAX_CHAR; ++ch) { glNewList(gllist_base + ch, GL_COMPILE); CHECK_GL_ERROR("BitmapFont::load", "glNewList"); if (p == end) { return false; } unsigned int byte_width = *p++; char_width[ch] = (byte_width & 0x0f) + 2; byte_width >>= 6; int start = 0; unsigned int n = 0; if (byte_width) { if (p == end) { return false; } unsigned int start_and_n = *p++; start = start_and_n >> 4; n = (start_and_n & 15) + 1; if (unsigned(end - p) < n * byte_width) { return false; } } // Note that even if there's nothing to display, we still call // glBitmap() to advance the raster position. if (double_size) { const GLubyte* q = reinterpret_cast(out); for (unsigned i = 0; i != n; ++i) { for (unsigned j = 0; j != byte_width; ++j) { *out++ = tab_2x[*p++]; } memcpy(out, out - byte_width, byte_width * sizeof(uint16_t)); out += byte_width; } char_width[ch] *= 2; glBitmap(2 * 8 * byte_width, 2 * n, 0, -2 * start, char_width[ch], 0, q); } else { glBitmap(8 * byte_width, n, 0, -start, char_width[ch], 0, p); p += n * byte_width; } CHECK_GL_ERROR("BitmapFont::load", "glBitmap"); glEndList(); CHECK_GL_ERROR("BitmapFont::load", "glEndList"); } return true; } inline void call_lists(GLsizei n, const GLvoid * lists) { #if SIZEOF_WXCHAR == 1 glCallLists(n, GL_UNSIGNED_BYTE, lists); #elif SIZEOF_WXCHAR == 2 glCallLists(n, GL_UNSIGNED_SHORT, lists); #elif SIZEOF_WXCHAR == 4 glCallLists(n, GL_UNSIGNED_INT, lists); #else # error "sizeof(wxChar) not 1, 2 or 4" #endif } void BitmapFont::init_extra_chars() const { bool double_size = (tab_2x != NULL); int fd = wxOpen(font_file, #ifdef __WXMSW__ _O_RDONLY|_O_SEQUENTIAL|_O_BINARY, #else O_RDONLY, #endif 0); int data_len = 0; unsigned char * data = NULL; if (fd >= 0) { struct stat sb; if (fstat(fd, &sb) >= 0) { data_len = sb.st_size; } } #if HAVE_MMAP if (data_len) { void * p = mmap(NULL, data_len, PROT_READ, MAP_SHARED, fd, 0); if (p == MAP_FAILED) { data_len = 0; } else { extra_data = data = static_cast(p); } } #else data = new unsigned char[data_len]; extra_data = data; if (data_len) { size_t c = data_len; unsigned char * p = data; while (c) { ssize_t n = read(fd, p, c); if (n <= 0) { if (errno == EINTR) continue; data_len = 0; // FIXME: do something better. wxGetApp().ReportError(m); // We have this message available: Error in format of font file “%s†// fprintf(stderr, "Couldn't load extended font.\n"); break; } p += n; c -= n; } } #endif if (fd >= 0) close(fd); extra_chars = new int[0x10000 - BITMAPFONT_MAX_CHAR]; int ch = 0; if (double_size) { // The bitmap data will increase 4*, while the metadata will increase // 2*, so we can use 4* the total size as an overestimate. fontdata_2x_extra = new uint16_t[data_len * 2]; uint16_t* out = fontdata_2x_extra; int data_ch = 0; while (data_ch < data_len) { extra_chars[ch++] = out - fontdata_2x_extra; unsigned int b = data[data_ch++]; *out++ = b; unsigned int byte_width = b >> 6; if (byte_width) { unsigned int start_and_n = data[data_ch++]; *out++ = start_and_n; unsigned int n = (start_and_n & 15) + 1; for (unsigned i = 0; i != n; ++i) { for (unsigned j = 0; j != byte_width; ++j) { *out++ = tab_2x[data[data_ch++]]; if (out - fontdata_2x_extra >= data_len * 2) abort(); } memcpy(out, out - byte_width, byte_width * sizeof(uint16_t)); out += byte_width; if (out - fontdata_2x_extra >= data_len * 2) abort(); } } } } else { int data_ch = 0; while (data_ch < data_len) { extra_chars[ch++] = data_ch; unsigned int byte_width = data[data_ch++]; byte_width >>= 6; if (byte_width) { unsigned int start_and_n = data[data_ch]; int n = (start_and_n & 15) + 1; data_ch += n * byte_width + 1; } } } while (ch < 0x10000 - BITMAPFONT_MAX_CHAR) { extra_chars[ch++] = -1; } } int BitmapFont::glyph_width(wxChar ch) const { #if SIZEOF_WXCHAR > 2 if (ch >= 0x10000) return 0; #endif if (!extra_chars) init_extra_chars(); int char_idx = extra_chars[ch - BITMAPFONT_MAX_CHAR]; if (char_idx < 0) { return tab_2x ? 16 : 8; } if (tab_2x) { unsigned int byte_width = fontdata_2x_extra[char_idx]; return ((byte_width & 0x0f) + 2) << 1; } else { unsigned int byte_width = extra_data[char_idx]; return (byte_width & 0x0f) + 2; } } void BitmapFont::write_glyph(wxChar ch) const { #if SIZEOF_WXCHAR > 2 if (ch >= 0x10000) return; #endif if (!extra_chars) init_extra_chars(); unsigned int byte_width = 0; int start = 0; int n = 0; int width = 8; int char_idx = extra_chars[ch - BITMAPFONT_MAX_CHAR]; const unsigned char* data = NULL; if (char_idx >= 0) { if (tab_2x) { const uint16_t* p = fontdata_2x_extra + char_idx; byte_width = *p++; width = (byte_width & 0x0f) + 2; byte_width >>= 6; if (byte_width) { byte_width <<= 1; unsigned int start_and_n = *p++; start = (start_and_n >> 4) << 1; n = ((start_and_n & 15) + 1) << 1; } width <<= 1; data = reinterpret_cast(p); } else { const unsigned char * p = extra_data + char_idx; byte_width = *p++; width = (byte_width & 0x0f) + 2; byte_width >>= 6; if (byte_width) { unsigned int start_and_n = *p++; start = start_and_n >> 4; n = (start_and_n & 15) + 1; } data = p; } } // Even if there's nothing to display, we want to advance the // raster position. glBitmap(8 * byte_width, n, 0, -start, width, 0, data); CHECK_GL_ERROR("BitmapFont::write_glyph", "glBitmap"); } void BitmapFont::write_string(const wxChar *s, size_t len) const { if (!gllist_base) return; glListBase(gllist_base); #if SIZEOF_WXCHAR == 1 call_lists(len, s); #elif SIZEOF_WXCHAR == 2 || SIZEOF_WXCHAR == 4 while (len) { size_t n; for (n = 0; n < len; ++n) if (int(s[n]) >= BITMAPFONT_MAX_CHAR) break; call_lists(n, s); s += n; len -= n; while (len && int(*s) >= BITMAPFONT_MAX_CHAR) { write_glyph(*s); ++s; --len; } } #else # error "sizeof(wxChar) not 1, 2 or 4" #endif } survex-1.4.4/src/buttontaghandler.cc0000644000175000017500000000310614141575516014451 00000000000000/* buttontaghandler.cc * Handle avenbutton tags * * Copyright (C) 2010 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "aven.h" #include #include #include FORCE_LINK_ME(buttontaghandler) TAG_HANDLER_BEGIN(AVENBUTTON, "AVENBUTTON") TAG_HANDLER_PROC(tag) { int id; if (!tag.GetParamAsInt(wxT("id"), &id)) id = -1; wxHtmlContainerCell * cells = m_WParser->GetContainer(); cells->SetAlignHor(wxHTML_ALIGN_RIGHT); wxWindow * win = m_WParser->GetWindowInterface()->GetHTMLWindow(); wxButton * but = new wxButton(win, id, tag.GetParam(wxT("name"))); if (tag.HasParam(wxT("default"))) but->SetDefault(); cells->InsertCell(new wxHtmlWidgetCell(but)); return false; } TAG_HANDLER_END(TITLE) TAGS_MODULE_BEGIN(CavernLog) TAGS_MODULE_ADD(AVENBUTTON) TAGS_MODULE_END(CavernLog) survex-1.4.4/src/sorterr.c0000644000175000017500000001547014141575516012450 00000000000000/* sorterr.c */ /* Sort a survex .err file */ /* Copyright (C) 2001,2002,2005,2010,2011,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "cmdline.h" #include "filename.h" #include "message.h" #include "osalloc.h" #include "whichos.h" static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"horizontal", no_argument, 0, 'h'}, {"vertical", no_argument, 0, 'v'}, {"percentage", no_argument, 0, 'p'}, {"per-leg", no_argument, 0, 'l'}, {"replace", no_argument, 0, 'r'}, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "hvplr" static struct help_msg help[] = { /* <-- */ /* TRANSLATORS: --help output for sorterr --horizontal option */ {HLP_ENCODELONG(0), /*sort by horizontal error factor*/179, 0}, /* TRANSLATORS: --help output for sorterr --vertical option */ {HLP_ENCODELONG(1), /*sort by vertical error factor*/180, 0}, /* TRANSLATORS: --help output for sorterr --percentage option */ {HLP_ENCODELONG(2), /*sort by percentage error*/181, 0}, /* TRANSLATORS: --help output for sorterr --per-leg option */ {HLP_ENCODELONG(3), /*sort by error per leg*/182, 0}, /* TRANSLATORS: --help output for sorterr --replace option */ {HLP_ENCODELONG(4), /*replace .err file with resorted version*/183, 0}, {0, 0, 0} }; typedef struct { double err; long fpos; } trav; static void skipline(const char *fnm, FILE *fh) { int ch; do { ch = GETC(fh); } while (ch != '\n' && ch != EOF); if (ch == EOF) { if (ferror(fh)) fatalerror_in_file(fnm, 0, /*Error reading file*/18); fatalerror_in_file(fnm, 0, /*Couldn’t parse .err file*/112); } } static void printline(const char *fnm, FILE *fh, FILE *fh_out) { int ch; do { ch = GETC(fh); if (ch != EOF && ch != '\r' && ch != '\n') PUTC(ch, fh_out); } while (ch != '\n' && ch != EOF); PUTC('\n', fh_out); if (ch == EOF) { if (ferror(fh)) fatalerror_in_file(fnm, 0, /*Error reading file*/18); fatalerror_in_file(fnm, 0, /*Couldn’t parse .err file*/112); } } static int cmp_trav(const void *a, const void *b) { double diff = ((const trav *)a)->err - ((const trav *)b)->err; if (diff < 0) return -1; if (diff > 0) return 1; return 0; } int main(int argc, char **argv) { char *fnm; FILE *fh; char sortby = 'A'; size_t len = 1024; trav *blk = osmalloc(1024 * sizeof(trav)); size_t next = 0; size_t howmany = 0; FILE *fh_out = stdout; char *fnm_out = NULL; msg_init(argv); /* TRANSLATORS: Part of sorterr --help */ cmdline_set_syntax_message(/*ERR_FILE [HOW_MANY]*/268, 0, NULL); cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 1, 2); while (1) { int opt = cmdline_getopt(); if (opt == EOF) break; switch (opt) { case 'h': case 'v': case 'p': case 'l': sortby = toupper(opt); break; case 'r': fh_out = NULL; break; } } fnm = argv[optind++]; if (argv[optind]) howmany = atoi(argv[optind]); fh = fopen(fnm, "rb"); if (!fh) fatalerror(/*Couldn’t open file “%sâ€*/24, fnm); /* 4 line paragraphs, separated by blank lines... * 041.verhall.12 - 041.verhall.13 * Original length 2.97m ( 1 legs), moved 0.04m ( 0.04m/leg). Error 1.19% * 0.222332 * H: 0.224749 V: 0.215352 * */ while (1) { int ch; if (next == len) { len += len; blk = osrealloc(blk, len * ossizeof(trav)); } blk[next].fpos = ftell(fh); ch = GETC(fh); if (ch == EOF) break; skipline(fnm, fh); switch (sortby) { case 'A': skipline(fnm, fh); if (fscanf(fh, "%lf", &blk[next].err) != 1) { baderrfile: fatalerror_in_file(fnm, 0, /*Couldn’t parse .err file*/112); } skipline(fnm, fh); skipline(fnm, fh); break; case 'H': case 'V': skipline(fnm, fh); skipline(fnm, fh); do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (ch != sortby); if (fscanf(fh, ":%lf", &blk[next].err) != 1) goto baderrfile; skipline(fnm, fh); break; case 'P': do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (ch != ')'); do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (ch != ')'); do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (!isdigit(ch)); ungetc(ch, fh); if (fscanf(fh, "%lf", &blk[next].err) != 1) goto baderrfile; skipline(fnm, fh); skipline(fnm, fh); skipline(fnm, fh); break; case 'L': do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (ch != ')'); do { ch = GETC(fh); if (ch == '\n' || ch == EOF) goto baderrfile; } while (ch != '('); if (fscanf(fh, "%lf", &blk[next].err) != 1) goto baderrfile; skipline(fnm, fh); skipline(fnm, fh); skipline(fnm, fh); break; } skipline(fnm, fh); next++; } if (next == 0) { /* no entries - nothing more to do whether -r is specified or not */ exit(EXIT_SUCCESS); } qsort(blk, next, sizeof(trav), cmp_trav); if (fh_out == NULL) { char *base = base_from_fnm(fnm); fnm_out = add_ext(base, "tmp"); osfree(base); fh_out = safe_fopen(fnm_out, "w"); } do { --next; if (fseek(fh, blk[next].fpos, SEEK_SET) == -1) fatalerror_in_file(fnm, 0, /*Error reading file*/18); printline(fnm, fh, fh_out); printline(fnm, fh, fh_out); printline(fnm, fh, fh_out); printline(fnm, fh, fh_out); PUTC('\n', fh_out); if (howmany && --howmany == 0) break; } while (next); fclose(fh); if (fnm_out) { safe_fclose(fh_out); #if OS_WIN32 /* UNIX rename atomically replaces, so doesn't need this. * WIN32 won't overwrite (from tests) so needs this code. */ remove(fnm); #endif rename(fnm_out, fnm); } return 0; } survex-1.4.4/src/cavern.c0000644000175000017500000003434414206074437012225 00000000000000/* cavern.c * SURVEX Cave surveying software: data reduction main and related functions * Copyright (C) 1991-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #define MSG_SETUP_PROJ_SEARCH_PATH 1 #include #include #include #include "cavern.h" #include "cmdline.h" #include "commands.h" #include "date.h" #include "datain.h" #include "debug.h" #include "message.h" #include "filename.h" #include "filelist.h" #include "img_hosted.h" #include "listpos.h" #include "netbits.h" #include "netskel.h" #include "osdepend.h" #include "out.h" #include "str.h" #include "validate.h" #include "whichos.h" #if OS_WIN32 # include /* for _kbhit() and _getch() */ #endif /* For funcs which want to be immune from messing around with different * calling conventions */ #ifndef CDECL # define CDECL #endif /* Globals */ node *stnlist = NULL; settings *pcs; prefix *root; prefix *anon_list = NULL; long cLegs, cStns; long cComponents; bool fExportUsed = fFalse; char * proj_str_out = NULL; PJ * pj_cached = NULL; FILE *fhErrStat = NULL; img *pimg = NULL; bool fQuiet = fFalse; /* just show brief summary + errors */ bool fMute = fFalse; /* just show errors */ bool fSuppress = fFalse; /* only output 3d file */ static bool fLog = fFalse; /* stdout to .log file */ static bool f_warnings_are_errors = fFalse; /* turn warnings into errors */ nosurveylink *nosurveyhead; real totadj, total, totplan, totvert; real min[6], max[6]; prefix *pfxHi[6], *pfxLo[6]; char *survey_title = NULL; int survey_title_len; bool fExplicitTitle = fFalse; char *fnm_output_base = NULL; int fnm_output_base_is_dir = 0; lrudlist * model = NULL; lrud ** next_lrud = NULL; static void do_stats(void); static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"percentage", no_argument, 0, 'p'}, /* Ignore for compatibility with older versions. */ {"no-percentage", no_argument, 0, 0}, {"output", required_argument, 0, 'o'}, {"quiet", no_argument, 0, 'q'}, {"no-auxiliary-files", no_argument, 0, 's'}, {"warnings-are-errors", no_argument, 0, 'w'}, {"log", no_argument, 0, 1}, {"3d-version", required_argument, 0, 'v'}, #if OS_WIN32 {"pause", no_argument, 0, 2}, #endif {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "pao:qsv:wz:" static struct help_msg help[] = { /* <-- */ /* TRANSLATORS: --help output for cavern --output option */ {HLP_ENCODELONG(2), /*set location for output files*/162, 0}, /* TRANSLATORS: --help output for cavern --quiet option */ {HLP_ENCODELONG(3), /*only show brief summary (-qq for errors only)*/163, 0}, /* TRANSLATORS: --help output for cavern --no-auxiliary-files option */ {HLP_ENCODELONG(4), /*do not create .err file*/164, 0}, /* TRANSLATORS: --help output for cavern --warnings-are-errors option */ {HLP_ENCODELONG(5), /*turn warnings into errors*/165, 0}, /* TRANSLATORS: --help output for cavern --log option */ {HLP_ENCODELONG(6), /*log output to .log file*/170, 0}, /* TRANSLATORS: --help output for cavern --3d-version option */ {HLP_ENCODELONG(7), /*specify the 3d file format version to output*/171, 0}, /*{'z', "set optimizations for network reduction"},*/ {0, 0, 0} }; /* atexit functions */ static void delete_output_on_error(void) { if (msg_errors || (f_warnings_are_errors && msg_warnings)) filename_delete_output(); } #if OS_WIN32 static void pause_on_exit(void) { while (_kbhit()) _getch(); _getch(); } #endif int current_days_since_1900; static void discarding_proj_logger(void *ctx, int level, const char *message) { (void)ctx; (void)level; (void)message; } extern CDECL int main(int argc, char **argv) { int d; time_t tmUserStart = time(NULL); clock_t tmCPUStart = clock(); { /* FIXME: localtime? */ struct tm * t = localtime(&tmUserStart); int y = t->tm_year + 1900; current_days_since_1900 = days_since_1900(y, t->tm_mon + 1, t->tm_mday); } /* Always buffer by line for aven's benefit. */ setvbuf(stdout, NULL, _IOLBF, 0); /* Prevent stderr spew from PROJ. */ proj_log_func(PJ_DEFAULT_CTX, NULL, discarding_proj_logger); msg_init(argv); pcs = osnew(settings); pcs->next = NULL; pcs->Translate = ((short*) osmalloc(ossizeof(short) * 257)) + 1; pcs->meta = NULL; pcs->proj_str = NULL; pcs->declination = HUGE_REAL; pcs->convergence = 0.0; pcs->dec_filename = NULL; pcs->dec_line = 0; pcs->dec_context = NULL; pcs->dec_lat = HUGE_VAL; pcs->dec_lon = HUGE_VAL; pcs->dec_alt = HUGE_VAL; pcs->min_declination = HUGE_VAL; pcs->max_declination = -HUGE_VAL; /* Set up root of prefix hierarchy */ root = osnew(prefix); root->up = root->right = root->down = NULL; root->stn = NULL; root->pos = NULL; root->ident = NULL; root->min_export = root->max_export = 0; root->sflags = BIT(SFLAGS_SURVEY); root->filename = NULL; nosurveyhead = NULL; stnlist = NULL; cLegs = cStns = cComponents = 0; totadj = total = totplan = totvert = 0.0; for (d = 0; d < 6; d++) { min[d] = HUGE_REAL; max[d] = -HUGE_REAL; pfxHi[d] = pfxLo[d] = NULL; } /* at least one argument must be given */ cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 1, -1); while (1) { int opt = cmdline_getopt(); if (opt == EOF) break; switch (opt) { case 'p': /* Ignore for compatibility with older versions. */ break; case 'o': { osfree(fnm_output_base); /* in case of multiple -o options */ /* can be a directory (in which case use basename of leaf input) * or a file (in which case just trim the extension off) */ if (fDirectory(optarg)) { /* this is a little tricky - we need to note the path here, * and then add the leaf later on (in datain.c) */ fnm_output_base = base_from_fnm(optarg); fnm_output_base_is_dir = 1; } else { fnm_output_base = base_from_fnm(optarg); } break; } case 'q': if (fQuiet) fMute = 1; fQuiet = 1; break; case 's': fSuppress = 1; break; case 'v': { int v = atoi(optarg); if (v < IMG_VERSION_MIN || v > IMG_VERSION_MAX) fatalerror(/*3d file format versions %d to %d supported*/88, IMG_VERSION_MIN, IMG_VERSION_MAX); img_output_version = v; break; } case 'w': f_warnings_are_errors = 1; break; case 'z': { /* Control which network optimisations are used (development tool) */ static int first_opt_z = 1; char c; if (first_opt_z) { optimize = 0; first_opt_z = 0; } /* Lollipops, Parallel legs, Iterate mx, Delta* */ while ((c = *optarg++) != '\0') if (islower((unsigned char)c)) optimize |= BITA(c); break; case 1: fLog = fTrue; break; #if OS_WIN32 case 2: atexit(pause_on_exit); break; #endif } } } if (fLog) { char *fnm; if (!fnm_output_base) { char *p; p = baseleaf_from_fnm(argv[optind]); fnm = add_ext(p, EXT_LOG); osfree(p); } else if (fnm_output_base_is_dir) { char *p; fnm = baseleaf_from_fnm(argv[optind]); p = use_path(fnm_output_base, fnm); osfree(fnm); fnm = add_ext(p, EXT_LOG); osfree(p); } else { fnm = add_ext(fnm_output_base, EXT_LOG); } if (!freopen(fnm, "w", stdout)) fatalerror(/*Failed to open output file “%sâ€*/47, fnm); osfree(fnm); } if (!fMute) { const char *p = COPYRIGHT_MSG; puts(PRETTYPACKAGE" "VERSION); while (1) { const char *q = p; p = strstr(p, "(C)"); if (p == NULL) { puts(q); break; } fwrite(q, 1, p - q, stdout); fputs(msg(/*©*/0), stdout); p += 3; } } atexit(delete_output_on_error); /* end of options, now process data files */ while (argv[optind]) { const char *fnm = argv[optind]; if (!fExplicitTitle) { char *lf; lf = baseleaf_from_fnm(fnm); if (survey_title) s_catchar(&survey_title, &survey_title_len, ' '); s_cat(&survey_title, &survey_title_len, lf); osfree(lf); } /* Select defaults settings */ default_all(pcs); data_file(NULL, fnm); /* first argument is current path */ optind++; } validate(); report_declination(pcs); solve_network(/*stnlist*/); /* Find coordinates of all points */ validate(); /* close .3d file */ if (!img_close(pimg)) { char *fnm = add_ext(fnm_output_base, EXT_SVX_3D); fatalerror(img_error2msg(img_error()), fnm); } if (fhErrStat) safe_fclose(fhErrStat); out_current_action(msg(/*Calculating statistics*/120)); if (!fMute) do_stats(); if (!fQuiet) { /* clock() typically wraps after 72 minutes, but there doesn't seem * to be a better way. Still 72 minutes means some cave! * We detect if clock() could have wrapped and suppress CPU time * printing in this case. */ double tmUser = difftime(time(NULL), tmUserStart); double tmCPU; clock_t now = clock(); #define CLOCK_T_WRAP \ (sizeof(clock_t)= tmCPU + CLOCK_T_WRAP / (double)CLOCKS_PER_SEC) tmCPU = 0; /* tmUser is integer, tmCPU not - equivalent to (ceil(tmCPU) >= tmUser) */ if (tmCPU + 1 > tmUser) { printf(msg(/*CPU time used %5.2fs*/140), tmCPU); } else if (tmCPU == 0) { if (tmUser != 0.0) { printf(msg(/*Time used %5.2fs*/141), tmUser); } else { fputs(msg(/*Time used unavailable*/142), stdout); } } else { printf(msg(/*Time used %5.2fs (%5.2fs CPU time)*/143), tmUser, tmCPU); } putnl(); } if (msg_warnings || msg_errors) { if (msg_errors || (f_warnings_are_errors && msg_warnings)) { printf(msg(/*There were %d warning(s) and %d error(s) - no output files produced.*/113), msg_warnings, msg_errors); putnl(); return EXIT_FAILURE; } printf(msg(/*There were %d warning(s).*/16), msg_warnings); putnl(); } return EXIT_SUCCESS; } static void do_range(int d, int msgno, real length_factor, const char * units) { if (d < 3) { /* If the bound including anonymous stations is at an anonymous station * but the bound only considering named stations is the same, use the * named station for the anonymous bound too. */ if (TSTBIT(pfxHi[d]->sflags, SFLAGS_ANON) && max[d] == max[d + 3]) { pfxHi[d] = pfxHi[d + 3]; } if (TSTBIT(pfxLo[d]->sflags, SFLAGS_ANON) && min[d] == min[d + 3]) { pfxLo[d] = pfxLo[d + 3]; } } /* sprint_prefix uses a single buffer, so to report two stations in one * message we need to make a temporary copy of the string for one of them. */ char * pfx_hi = osstrdup(sprint_prefix(pfxHi[d])); char * pfx_lo = sprint_prefix(pfxLo[d]); real hi = max[d] * length_factor; real lo = min[d] * length_factor; printf(msg(msgno), hi - lo, units, pfx_hi, hi, units, pfx_lo, lo, units); osfree(pfx_hi); putnl(); /* Range without anonymous stations at offset 3. */ if (d < 3 && (pfxHi[d] != pfxHi[d + 3] || pfxLo[d] != pfxLo[d + 3])) { do_range(d + 3, msgno, length_factor, units); } } static void do_stats(void) { long cLoops = cComponents + cLegs - cStns; int length_units = get_length_units(Q_LENGTH); const char * units = get_units_string(length_units); real length_factor = 1.0 / get_units_factor(length_units); putnl(); if (cStns == 1) { fputs(msg(/*Survey contains 1 survey station,*/172), stdout); } else { printf(msg(/*Survey contains %ld survey stations,*/173), cStns); } if (cLegs == 1) { fputs(msg(/* joined by 1 leg.*/174), stdout); } else { printf(msg(/* joined by %ld legs.*/175), cLegs); } putnl(); if (cLoops == 1) { fputs(msg(/*There is 1 loop.*/138), stdout); } else { printf(msg(/*There are %ld loops.*/139), cLoops); } putnl(); if (cComponents != 1) { /* TRANSLATORS: "Connected component" in the graph theory sense - it * means there are %ld bits of survey with no connections between them. * This message is only used if there are more than 1. */ printf(msg(/*Survey has %ld connected components.*/178), cComponents); putnl(); } printf(msg(/*Total length of survey legs = %7.2f%s (%7.2f%s adjusted)*/132), total * length_factor, units, totadj * length_factor, units); putnl(); printf(msg(/*Total plan length of survey legs = %7.2f%s*/133), totplan * length_factor, units); putnl(); printf(msg(/*Total vertical length of survey legs = %7.2f%s*/134), totvert * length_factor, units); putnl(); /* If there's no underground survey, we've no ranges */ if (pfxHi[0]) { /* TRANSLATORS: numbers are altitudes of highest and lowest stations */ do_range(2, /*Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)*/135, length_factor, units); /* TRANSLATORS: c.f. previous message */ do_range(1, /*North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)*/136, length_factor, units); /* TRANSLATORS: c.f. previous two messages */ do_range(0, /*East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)*/137, length_factor, units); } print_node_stats(); /* Also, could give: * # nodes stations (ie have other than two references or are fixed) * # fixed stations (list of?) */ } survex-1.4.4/src/printing.h0000644000175000017500000000511314367053307012577 00000000000000/* printing.h */ /* Aven printing code */ /* Copyright (C) 2004 Philip Underwood * Copyright (C) 2004,2005,2006,2011,2012,2013,2014,2015 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "wx.h" #include #include #include #include "avenprcore.h" // The GtkPrint dialog provides its own preview, as does macOS. #if !(defined wxUSE_GTKPRINT && wxUSE_GTKPRINT) && \ !defined __WXMAC__ # define AVEN_PRINT_PREVIEW #endif class MainFrm; class wxComboBox; class wxStaticText; class wxSpinCtrlDouble; class wxSpinEvent; // This dialog is also use for Export as well as Print. class svxPrintDlg : public wxDialog { layout m_layout; wxComboBox* m_scale; wxBoxSizer* m_scalebox; wxBoxSizer* m_viewbox; wxChoice* m_format; wxStaticText* m_printSize; wxSpinCtrlDouble* m_bearing; wxSpinCtrlDouble* m_tilt; // wxCheckBox* m_blanks; wxString m_File; MainFrm* mainfrm; bool close_after; void LayoutToUI(); void UIToLayout(); void RecalcBounds(); void SomethingChanged(int control_id); public: svxPrintDlg(MainFrm* parent, const wxString & filename, const wxString & title, const wxString & datestamp, double angle, double tilt_angle, bool labels, bool crosses, bool legs, bool surf, bool splays, bool tubes, bool ents, bool fixes, bool exports, bool printing, bool close_after_ = false); ~svxPrintDlg() { if (close_after) mainfrm->Close(); } void OnPrint(wxCommandEvent& event); void OnExport(wxCommandEvent& event); #ifdef AVEN_PRINT_PREVIEW void OnPreview(wxCommandEvent& event); #endif void OnPlan(wxCommandEvent&); void OnElevation(wxCommandEvent&); void OnPlanUpdate(wxUpdateUIEvent& e); void OnElevationUpdate(wxUpdateUIEvent& e); void OnChangeSpin(wxSpinDoubleEvent& event); void OnChange(wxCommandEvent& event); void OnChangeScale(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); private: DECLARE_EVENT_TABLE() }; survex-1.4.4/src/extend.c0000644000175000017500000005414114141575516012235 00000000000000/* extend.c * Produce an extended elevation * Copyright (C) 1995-2002,2005,2010,2011,2013,2014,2016,2017 Olly Betts * Copyright (C) 2004,2005 John Pybus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "cmdline.h" #include "debug.h" #include "filelist.h" #include "filename.h" #include "hash.h" #include "img_hosted.h" #include "message.h" #include "useful.h" /* To save memory we should probably use the prefix hash for the prefix on * point labels (FIXME) */ typedef struct stn { const char *label; int flags; const struct stn *next; } stn; typedef struct splay { struct POINT *pt; struct splay *next; } splay; typedef struct POINT { img_point p; double X; const stn *stns; unsigned int order; char dir; char fDone; char fBroken; splay *splays; struct POINT *next; } point; typedef struct LEG { point *fr, *to; const char *prefix; char dir; char fDone; char broken; int flags; struct LEG *next; } leg; /* Values for leg.broken: */ #define BREAK_FR 0x01 #define BREAK_TO 0x02 /* Values for point.dir and leg.dir: */ #define ELEFT 0x01 #define ERIGHT 0x02 #define ESWAP 0x04 static point headpoint = {{0, 0, 0}, 0, NULL, 0, 0, 0, 0, NULL, NULL}; static leg headleg = {NULL, NULL, NULL, 0, 0, 0, 0, NULL}; static img *pimg_out; static int show_breaks = 0; static void do_stn(point *, double, const char *, int, int, double, double); typedef struct pfx { const char *label; struct pfx *next; } pfx; static pfx **htab; #define HTAB_SIZE 0x2000 static const char * find_prefix(const char *prefix) { pfx *p; int hash; SVX_ASSERT(prefix); hash = hash_string(prefix) & (HTAB_SIZE - 1); for (p = htab[hash]; p; p = p->next) { if (strcmp(prefix, p->label) == 0) return p->label; } p = osnew(pfx); p->label = osstrdup(prefix); p->next = htab[hash]; htab[hash] = p; return p->label; } static point * find_point(const img_point *pt) { point *p; for (p = headpoint.next; p != NULL; p = p->next) { if (pt->x == p->p.x && pt->y == p->p.y && pt->z == p->p.z) { return p; } } p = osmalloc(ossizeof(point)); p->p = *pt; p->X = HUGE_VAL; p->stns = NULL; p->order = 0; p->dir = 0; p->fDone = 0; p->fBroken = 0; p->splays = NULL; p->next = headpoint.next; headpoint.next = p; return p; } static void add_leg(point *fr, point *to, const char *prefix, int flags) { leg *l; fr->order++; to->order++; l = osmalloc(ossizeof(leg)); l->fr = fr; l->to = to; if (prefix) l->prefix = find_prefix(prefix); else l->prefix = NULL; l->next = headleg.next; l->dir = 0; l->fDone = 0; l->broken = 0; l->flags = flags; headleg.next = l; } static void add_label(point *p, const char *label, int flags) { stn *s = osnew(stn); s->label = osstrdup(label); s->flags = flags; s->next = p->stns; p->stns = s; } /* Read in config file */ /* lifted from img.c Should be put somewhere common? JPNP*/ static char * getline_alloc(FILE *fh, size_t ilen) { int ch; size_t i = 0; size_t len = ilen; char *buf = xosmalloc(len); if (!buf) return NULL; ch = GETC(fh); while (ch != '\n' && ch != '\r' && ch != EOF) { buf[i++] = ch; if (i == len - 1) { char *p; len += len; p = xosrealloc(buf, len); if (!p) { osfree(buf); return NULL; } buf = p; } ch = GETC(fh); } if (ch == '\n' || ch == '\r') { int otherone = ch ^ ('\n' ^ '\r'); ch = GETC(fh); /* if it's not the other eol character, put it back */ if (ch != otherone) ungetc(ch, fh); } buf[i++] = '\0'; return buf; } static int lineno = 0; static point *start = NULL; static char* delimword(char *ln, char** lr) { char *le; while (*ln == ' ' || *ln == '\t' || *ln == '\n' || *ln == '\r') ln++; le = ln; while (*le != ' ' && *le != '\t' && *le != '\n' && *le != '\r' && *le != ';' && *le != '\0') le++; if (*le == '\0' || *le == ';') { *lr = le; } else { *lr = le + 1; } *le = '\0'; return ln; } static void parseconfigline(const char *fnm, char *ln) { point *p; const stn *s; const stn *t; leg *l; char *lc = NULL; ln = delimword(ln, &lc); if (*ln == '\0') return; if (strcmp(ln, "*start")==0) { ln = delimword(lc, &lc); if (*ln == 0) /* TRANSLATORS: Here "station" is a survey station, not a train station. */ fatalerror_in_file(fnm, lineno, /*Expecting station name*/28); for (p = headpoint.next; p != NULL; p = p->next) { for (s = p->stns; s; s = s->next) { if (strcmp(s->label, ln)==0) { start = p; /* TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s */ printf(msg(/*Starting from station %s*/512),ln); putnl(); goto loopend; } } } /* TRANSLATORS: for extend: the user specified breaking a loop or * changing extend direction at this station, but we didn’t find it in * the 3d file */ warning_in_file(fnm, lineno, /*Failed to find station %s*/510, ln); } else if (strcmp(ln, "*eleft")==0) { char *ll = delimword(lc, &lc); if (*ll == 0) fatalerror_in_file(fnm, lineno, /*Expecting station name*/28); ln = delimword(lc, &lc); if (*ln == 0) { /* One argument - look for station to switch at. */ for (p = headpoint.next; p != NULL; p = p->next) { for (s = p->stns; s; s = s->next) { if (strcmp(s->label, ll)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Extending to the left from station %s*/513), ll); putnl(); p->dir = ELEFT; goto loopend; } } } warning_in_file(fnm, lineno, /*Failed to find station %s*/510, ll); } else { /* Two arguments - look for a specified leg. */ for (l = headleg.next; l; l=l->next) { point * fr = l->fr; point * to = l->to; if (fr && to) { for (s=fr->stns; s; s=s->next) { int b = 0; if (strcmp(s->label,ll)==0 || (strcmp(s->label, ln)==0 && (b = 1)) ) { char * lr = (b ? ll : ln); for (t=to->stns; t; t=t->next) { if (strcmp(t->label,lr)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Extending to the left from leg %s → %s*/515), s->label, t->label); putnl(); l->dir = ELEFT; goto loopend; } } } } } } /* TRANSLATORS: for extend: the user specified breaking a loop or * changing extend direction at this leg, but we didn’t find it in the * 3d file */ warning_in_file(fnm, lineno, /*Failed to find leg %s → %s*/511, ll, ln); } } else if (strcmp(ln, "*eright")==0) { char *ll = delimword(lc, &lc); if (*ll == 0) fatalerror_in_file(fnm, lineno, /*Expecting station name*/28); ln = delimword(lc, &lc); if (*ln == 0) { /* One argument - look for station to switch at. */ for (p = headpoint.next; p != NULL; p = p->next) { for (s = p->stns; s; s = s->next) { if (strcmp(s->label, ll)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Extending to the right from station %s*/514), ll); putnl(); p->dir = ERIGHT; goto loopend; } } } warning_in_file(fnm, lineno, /*Failed to find station %s*/510, ll); } else { /* Two arguments - look for a specified leg. */ for (l = headleg.next; l; l=l->next) { point * fr = l->fr; point * to = l->to; if (fr && to) { for (s=fr->stns; s; s=s->next) { int b = 0; if (strcmp(s->label,ll)==0 || (strcmp(s->label, ln)==0 && (b = 1)) ) { char * lr = (b ? ll : ln); for (t=to->stns; t; t=t->next) { if (strcmp(t->label,lr)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Extending to the right from leg %s → %s*/516), s->label, t->label); putnl(); l->dir=ERIGHT; goto loopend; } } } } } } warning_in_file(fnm, lineno, /*Failed to find leg %s → %s*/511, ll, ln); } } else if (strcmp(ln, "*eswap")==0) { char *ll = delimword(lc, &lc); if (*ll == 0) fatalerror_in_file(fnm, lineno, /*Expecting station name*/28); ln = delimword(lc, &lc); if (*ln == 0) { /* One argument - look for station to switch at. */ for (p = headpoint.next; p != NULL; p = p->next) { for (s = p->stns; s; s = s->next) { if (strcmp(s->label, ll)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Swapping extend direction from station %s*/519),ll); putnl(); p->dir = ESWAP; goto loopend; } } } warning_in_file(fnm, lineno, /*Failed to find station %s*/510, ll); } else { /* Two arguments - look for a specified leg. */ for (l = headleg.next; l; l=l->next) { point * fr = l->fr; point * to = l->to; if (fr && to) { for (s=fr->stns; s; s=s->next) { int b = 0; if (strcmp(s->label,ll)==0 || (strcmp(s->label, ln)==0 && (b = 1)) ) { char * lr = (b ? ll : ln); for (t=to->stns; t; t=t->next) { if (strcmp(t->label,lr)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Swapping extend direction from leg %s → %s*/520), s->label, t->label); putnl(); l->dir = ESWAP; goto loopend; } } } } } } warning_in_file(fnm, lineno, /*Failed to find leg %s → %s*/511, ll, ln); } } else if (strcmp(ln, "*break")==0) { char *ll = delimword(lc, &lc); if (*ll == 0) fatalerror_in_file(fnm, lineno, /*Expecting station name*/28); ln = delimword(lc, &lc); if (*ln == 0) { /* One argument - look for specified station to break at. */ for (p = headpoint.next; p != NULL; p = p->next) { for (s = p->stns; s; s = s->next) { if (strcmp(s->label, ll)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Breaking survey loop at station %s*/517), ll); putnl(); p->fBroken = 1; goto loopend; } } } warning_in_file(fnm, lineno, /*Failed to find station %s*/510, ll); } else { /* Two arguments - look for specified leg and disconnect it at the * first station. */ for (l = headleg.next; l; l=l->next) { point * fr = l->fr; point * to = l->to; if (fr && to) { for (s=fr->stns; s; s=s->next) { int b = 0; if (strcmp(s->label,ll)==0 || (strcmp(s->label, ln)==0 && (b = 1)) ) { char * lr = (b ? ll : ln); for (t=to->stns; t; t=t->next) { if (strcmp(t->label,lr)==0) { /* TRANSLATORS: for extend: */ printf(msg(/*Breaking survey loop at leg %s → %s*/518), s->label, t->label); putnl(); l->broken = (b ? BREAK_TO : BREAK_FR); goto loopend; } } } } } } warning_in_file(fnm, lineno, /*Failed to find leg %s → %s*/511, ll, ln); } } else { fatalerror_in_file(fnm, lineno, /*Unknown command “%sâ€*/12, ln); } loopend: ln = delimword(lc, &lc); if (*ln != 0) { fatalerror_in_file(fnm, lineno, /*End of line not blank*/15); /* FIXME: give ln as context? */ } } static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"survey", required_argument, 0, 's'}, {"specfile", required_argument, 0, 'p'}, {"show-breaks", no_argument, 0, 'b' }, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "s:p:b" static struct help_msg help[] = { /* <-- */ {HLP_ENCODELONG(0), /*only load the sub-survey with this prefix*/199, 0}, /* TRANSLATORS: --help output for extend --specfile option */ {HLP_ENCODELONG(1), /*.espec file to control extending*/90, 0}, /* TRANSLATORS: --help output for extend --show-breaks option */ {HLP_ENCODELONG(2), /*show breaks with surface survey legs in output*/91, 0}, {0, 0, 0} }; static point * pick_start_stn(void) { point * best = NULL; double zMax = -DBL_MAX; point *p; /* Start at the highest entrance with some legs attached. */ for (p = headpoint.next; p != NULL; p = p->next) { if (p->order > 0 && p->p.z > zMax) { const stn *s; for (s = p->stns; s; s = s->next) { if (s->flags & img_SFLAG_ENTRANCE) { zMax = p->p.z; return p; } } } } if (best) return best; /* If no entrances with legs, start at the highest 1-node. */ for (p = headpoint.next; p != NULL; p = p->next) { if (p->order == 1 && p->p.z > zMax) { best = p; zMax = p->p.z; } } if (best) return best; /* of course we may have no 1-nodes... */ for (p = headpoint.next; p != NULL; p = p->next) { if (p->order != 0 && p->p.z > zMax) { best = p; zMax = p->p.z; } } if (best) return best; /* There are no legs - just pick the highest station... */ for (p = headpoint.next; p != NULL; p = p->next) { if (p->p.z > zMax) { best = p; zMax = p->p.z; } } return best; } int main(int argc, char **argv) { const char *fnm_in, *fnm_out; char *desc; img_point pt; int result; point *fr = NULL, *to; const char *survey = NULL; const char *specfile = NULL; img *pimg; int xsections = 0, splays = 0; msg_init(argv); /* TRANSLATORS: Part of extend --help */ cmdline_set_syntax_message(/*INPUT_3D_FILE [OUTPUT_3D_FILE]*/267, 0, NULL); cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 1, 2); while (1) { int opt = cmdline_getopt(); if (opt == EOF) break; switch (opt) { case 'b': show_breaks = 1; break; case 's': survey = optarg; break; case 'p': specfile = optarg; break; } } fnm_in = argv[optind++]; if (argv[optind]) { fnm_out = argv[optind]; } else { char * base_in = base_from_fnm(fnm_in); char * base_out = osmalloc(strlen(base_in) + 8); strcpy(base_out, base_in); strcat(base_out, "_extend"); fnm_out = add_ext(base_out, EXT_SVX_3D); osfree(base_in); osfree(base_out); } /* try to open image file, and check it has correct header */ pimg = img_open_survey(fnm_in, survey); if (pimg == NULL) fatalerror(img_error2msg(img_error()), fnm_in); putnl(); puts(msg(/*Reading in data - please wait…*/105)); htab = osmalloc(ossizeof(pfx*) * HTAB_SIZE); { int i; for (i = 0; i < HTAB_SIZE; ++i) htab[i] = NULL; } do { result = img_read_item(pimg, &pt); switch (result) { case img_MOVE: fr = find_point(&pt); break; case img_LINE: if (!fr) { result = img_BAD; break; } to = find_point(&pt); if (!(pimg->flags & img_FLAG_SURFACE)) { if (pimg->flags & img_FLAG_SPLAY) { ++splays; } else { add_leg(fr, to, pimg->label, pimg->flags); } } fr = to; break; case img_LABEL: to = find_point(&pt); add_label(to, pimg->label, pimg->flags); break; case img_BAD: (void)img_close(pimg); fatalerror(img_error2msg(img_error()), fnm_in); break; case img_XSECT: case img_XSECT_END: ++xsections; break; } } while (result != img_STOP); if (splays) { img_rewind(pimg); fr = NULL; do { result = img_read_item(pimg, &pt); switch (result) { case img_MOVE: fr = find_point(&pt); break; case img_LINE: if (!fr) { result = img_BAD; break; } to = find_point(&pt); if (!(pimg->flags & img_FLAG_SURFACE)) { if (pimg->flags & img_FLAG_SPLAY) { splay *sp = osmalloc(ossizeof(splay)); --splays; if (fr->order) { if (to->order == 0) { sp->pt = to; sp->next = fr->splays; fr->splays = sp; } else { printf("Splay without a dead end from %s to %s\n", fr->stns->label, to->stns->label); osfree(sp); } } else if (to->order) { sp->pt = fr; sp->next = to->splays; to->splays = sp; } else { printf("Isolated splay from %s to %s\n", fr->stns->label, to->stns->label); osfree(sp); } } } fr = to; break; } } while (splays && result != img_STOP); } desc = osstrdup(pimg->title); if (specfile) { FILE *fs = NULL; char *fnm_used; /* TRANSLATORS: for extend: */ printf(msg(/*Applying specfile: “%sâ€*/521), specfile); putnl(); fs = fopenWithPthAndExt("", specfile, NULL, "r", &fnm_used); if (fs == NULL) fatalerror(/*Couldn’t open file “%sâ€*/24, specfile); while (!feof(fs)) { char *lbuf = getline_alloc(fs, 32); lineno++; if (!lbuf) fatalerror_in_file(fnm_used, lineno, /*Error reading file*/18); parseconfigline(fnm_used, lbuf); osfree(lbuf); } osfree(fnm_used); } if (start == NULL) { /* *start wasn't specified in specfile. */ start = pick_start_stn(); if (!start) fatalerror(/*No survey data*/43); } /* TRANSLATORS: for extend: * Used to tell the user that a file is being written - %s is the filename */ printf(msg(/*Writing %s…*/522), fnm_out); putnl(); pimg_out = img_open_write(fnm_out, desc, img_FFLAG_EXTENDED); /* Only does single connected component currently. */ do_stn(start, 0.0, NULL, ERIGHT, 0, 0.0, 0.0); if (xsections) { img_rewind(pimg); /* Read ahead on pimg before writing pimg_out so we find out if an * img_XSECT_END comes next. */ char * label = NULL; int flags = 0; do { result = img_read_item(pimg, &pt); if (result != img_XSECT && result != img_XSECT_END) continue; --xsections; if (label) { if (result == img_XSECT_END) flags |= img_XFLAG_END; img_write_item(pimg_out, img_XSECT, flags, label, 0, 0, 0); osfree(label); label = NULL; } if (result == img_XSECT) { label = osstrdup(pimg->label); flags = pimg->flags; pimg_out->l = pimg->l; pimg_out->r = pimg->r; pimg_out->u = pimg->u; pimg_out->d = pimg->d; } } while (xsections && result != img_STOP); } (void)img_close(pimg); if (!img_close(pimg_out)) { (void)remove(fnm_out); fatalerror(img_error2msg(img_error()), fnm_out); } return EXIT_SUCCESS; } static int adjust_direction(int dir, int by) { if (by == ESWAP) return dir ^ (ELEFT|ERIGHT); if (by) return by; return dir; } static void do_splays(point *p, double X, int dir, double tdx, double tdy) { const splay *sp; double a; double C, S; if (!p->splays) return; if (tdx == 0 && tdy == 0) { /* Two adjacent plumbs, or a pair of legs that exactly cancel. */ return; } /* Bearing in radians. */ a = atan2(tdx, tdy); if (dir == ELEFT) { a = -M_PI_2 - a; } else { a = M_PI_2 - a; } C = cos(a); S = sin(a); for (sp = p->splays; sp; sp = sp->next) { double x = X; double z = p->p.z; img_write_item(pimg_out, img_MOVE, 0, NULL, x, 0, z); double dx = sp->pt->p.x - p->p.x; double dy = sp->pt->p.y - p->p.y; double dz = sp->pt->p.z - p->p.z; double tmp = dx * C + dy * S; dy = dy * C - dx * S; dx = tmp; img_write_item(pimg_out, img_LINE, img_FLAG_SPLAY, NULL, x + dx, dy, z + dz); } p->splays = NULL; } static void do_stn(point *p, double X, const char *prefix, int dir, int labOnly, double odx, double ody) { leg *l, *lp; double dX; const stn *s; int odir = dir; int try_all; int order = p->order; for (s = p->stns; s; s = s->next) { img_write_item(pimg_out, img_LABEL, s->flags, s->label, X, 0, p->p.z); } if (show_breaks && p->X != HUGE_VAL && p->X != X) { /* Draw "surface" leg between broken stations. */ img_write_item(pimg_out, img_MOVE, 0, NULL, p->X, 0, p->p.z); img_write_item(pimg_out, img_LINE, img_FLAG_SURFACE, NULL, X, 0, p->p.z); } p->X = X; if (labOnly || p->fBroken) { return; } if (order == 0) { /* We've reached a dead end. */ do_splays(p, X, dir, odx, ody); return; } /* It's better to follow legs along a survey, so make two passes and only * follow legs in the same survey for the first pass. */ for (try_all = 0; try_all != 2; ++try_all) { lp = &headleg; for (l = lp->next; l; lp = l, l = lp->next) { dir = odir; if (l->fDone) { /* this case happens iff a recursive call causes the next leg to be * removed, leaving our next pointing to a leg which has been dealt * with... */ continue; } if (!try_all && l->prefix != prefix) { continue; } int break_flag; point *p2; if (l->to == p) { break_flag = BREAK_TO; p2 = l->fr; } else if (l->fr == p) { break_flag = BREAK_FR; p2 = l->to; } else { continue; } if (l->broken & break_flag) continue; lp->next = l->next; /* adjust direction of extension if necessary */ dir = adjust_direction(dir, p->dir); dir = adjust_direction(dir, l->dir); double dx = p2->p.x - p->p.x; double dy = p2->p.y - p->p.y; dX = hypot(dx, dy); double X2 = X; if (dir == ELEFT) { X2 -= dX; } else { X2 += dX; } if (p->splays) { do_splays(p, X, dir, odx + dx, ody + dy); } img_write_item(pimg_out, img_MOVE, 0, NULL, X, 0, p->p.z); img_write_item(pimg_out, img_LINE, l->flags, l->prefix, X2, 0, p2->p.z); /* We arrive at p2 via a leg, so that's one down right away. */ --p2->order; l->fDone = 1; /* l->broken doesn't have break_flag set as we checked that above. */ do_stn(p2, X2, l->prefix, dir, l->broken, dx, dy); l = lp; if (--order == 0) return; } } } survex-1.4.4/src/message.c0000644000175000017500000011123114206254357012363 00000000000000/* message.c * Fairly general purpose message and error routines * Copyright (C) 1993-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*#define DEBUG 1*/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "cmdline.h" #include "whichos.h" #include "filename.h" #include "message.h" #include "osdepend.h" #include "filelist.h" #include "debug.h" #include "str.h" #ifdef AVEN # include "aven.h" #endif #if OS_WIN32 # define WIN32_LEAN_AND_MEAN # include #elif OS_UNIX # include #endif #include /* For funcs which want to be immune from messing around with different * calling conventions */ #ifndef CDECL # define CDECL #endif int msg_warnings = 0; /* keep track of how many warnings we've given */ int msg_errors = 0; /* and how many (non-fatal) errors */ /* in case osmalloc() fails before appname_copy is set up */ static const char *appname_copy = "anonymous program"; /* Path to use to look for executables (used by aven to find cavern). */ static const char *exe_pth = ""; /* error code for failed osmalloc and osrealloc calls */ static void outofmem(OSSIZE_T size) { /* TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex * was trying to allocate space for. */ fatalerror(/*Out of memory (couldn’t find %lu bytes).*/1, (unsigned long)size); } #ifdef TOMBSTONES #define TOMBSTONE_SIZE 16 static const char tombstone[TOMBSTONE_SIZE] = "012345\xfftombstone"; #endif /* malloc with error catching if it fails. Also allows us to write special * versions easily eg for MS Windows. */ void * osmalloc(OSSIZE_T size) { void *p; #ifdef TOMBSTONES size += TOMBSTONE_SIZE * 2; p = malloc(size); #else p = xosmalloc(size); #endif if (p == NULL) outofmem(size); #ifdef TOMBSTONES printf("osmalloc truep=%p truesize=%d\n", p, size); memcpy(p, tombstone, TOMBSTONE_SIZE); memcpy(p + size - TOMBSTONE_SIZE, tombstone, TOMBSTONE_SIZE); *(size_t *)p = size; p += TOMBSTONE_SIZE; #endif return p; } /* realloc with error catching if it fails. */ void * osrealloc(void *p, OSSIZE_T size) { /* some pre-ANSI realloc implementations don't cope with a NULL pointer */ if (p == NULL) { p = xosmalloc(size); } else { #ifdef TOMBSTONES int true_size; size += TOMBSTONE_SIZE * 2; p -= TOMBSTONE_SIZE; true_size = *(size_t *)p; printf("osrealloc (in truep=%p truesize=%d)\n", p, true_size); if (memcmp(p + sizeof(size_t), tombstone + sizeof(size_t), TOMBSTONE_SIZE - sizeof(size_t)) != 0) { printf("start tombstone for block %p, size %d corrupted!", p + TOMBSTONE_SIZE, true_size - TOMBSTONE_SIZE * 2); } if (memcmp(p + true_size - TOMBSTONE_SIZE, tombstone, TOMBSTONE_SIZE) != 0) { printf("end tombstone for block %p, size %d corrupted!", p + TOMBSTONE_SIZE, true_size - TOMBSTONE_SIZE * 2); } p = realloc(p, size); if (p == NULL) outofmem(size); printf("osrealloc truep=%p truesize=%d\n", p, size); memcpy(p, tombstone, TOMBSTONE_SIZE); memcpy(p + size - TOMBSTONE_SIZE, tombstone, TOMBSTONE_SIZE); *(size_t *)p = size; p += TOMBSTONE_SIZE; #else p = xosrealloc(p, size); #endif } if (p == NULL) outofmem(size); return p; } char * osstrdup(const char *str) { char *p; OSSIZE_T len; len = strlen(str) + 1; p = osmalloc(len); memcpy(p, str, len); return p; } /* osfree is usually just a macro in osalloc.h */ #ifdef TOMBSTONES void osfree(void *p) { int true_size; if (!p) return; p -= TOMBSTONE_SIZE; true_size = *(size_t *)p; printf("osfree truep=%p truesize=%d\n", p, true_size); if (memcmp(p + sizeof(size_t), tombstone + sizeof(size_t), TOMBSTONE_SIZE - sizeof(size_t)) != 0) { printf("start tombstone for block %p, size %d corrupted!", p + TOMBSTONE_SIZE, true_size - TOMBSTONE_SIZE * 2); } if (memcmp(p + true_size - TOMBSTONE_SIZE, tombstone, TOMBSTONE_SIZE) != 0) { printf("end tombstone for block %p, size %d corrupted!", p + TOMBSTONE_SIZE, true_size - TOMBSTONE_SIZE * 2); } free(p); } #endif static int default_charset(void) { if (getenv("SURVEX_UTF8")) return CHARSET_UTF8; #if OS_WIN32 # ifdef AVEN # define CODEPAGE GetACP() # else # define CODEPAGE GetConsoleOutputCP() # endif switch (CODEPAGE) { case 0: return CHARSET_UTF8; case 1252: return CHARSET_WINCP1252; case 1250: return CHARSET_WINCP1250; case 850: return CHARSET_DOSCP850; } return CHARSET_USASCII; #elif OS_UNIX #ifdef AVEN return CHARSET_UTF8; #else const char *p = getenv("LC_ALL"); if (p == NULL || p[0] == '\0') { p = getenv("LC_CTYPE"); if (p == NULL || p[0] == '\0') { p = getenv("LANG"); /* Something (AutoCAD?) on Microsoft Windows sets LANG to a number. */ if (p == NULL || !isalpha((unsigned char)p[0])) p = msg_lang; } } if (p) { const char *q = strchr(p, '.'); if (q) p = q + 1; } if (p) { const char *chset = p; size_t name_len; while (*p != '\0' && *p != '@') p++; name_len = p - chset; if (name_len) { int only_digit = 1; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha((unsigned char)chset[cnt])) { only_digit = 0; break; } if (only_digit) goto iso; switch (tolower(chset[0])) { case 'i': if (tolower(chset[1]) == 's' && tolower(chset[2]) == 'o') { chset += 3; iso: if (strncmp(chset, "8859", 4) == 0) { chset += 4; while (chset < p && *chset && !isdigit((unsigned char)*chset)) chset++; switch (atoi(chset)) { case 1: return CHARSET_ISO_8859_1; case 2: return CHARSET_ISO_8859_2; case 15: return CHARSET_ISO_8859_15; default: return CHARSET_USASCII; } } } break; case 'u': if (tolower(chset[1]) == 't' && tolower(chset[2]) == 'f') { chset += 3; while (chset < p && *chset && !isdigit((unsigned char)*chset)) chset++; switch (atoi(chset)) { case 8: return CHARSET_UTF8; default: return CHARSET_USASCII; } } } } } return CHARSET_USASCII; #endif #else # error Do not know operating system! #endif } /* It seems that Swedish and maybe some other scandanavian languages don't * transliterate ä to ae - but it seems there may be conflicting views * on this... */ #define umlaut_to_e() 1 /* values <= 127 already dealt with */ static int add_unicode(int charset, unsigned char *p, int value) { #ifdef DEBUG fprintf(stderr, "add_unicode(%d, %p, %d)\n", charset, p, value); #endif if (value == 0) return 0; switch (charset) { case CHARSET_USASCII: if (value < 0x80) { *p = value; return 1; } break; case CHARSET_ISO_8859_1: if (value < 0x100) { *p = value; return 1; } break; case CHARSET_ISO_8859_2: if (value >= 0xa0) { int v = 0; switch (value) { case 0xa0: case 0xa4: case 0xa7: case 0xa8: case 0xad: case 0xb0: case 0xb4: case 0xb8: case 0xc1: case 0xc2: case 0xc4: case 0xc7: case 0xc9: case 0xcb: case 0xcd: case 0xce: case 0xd3: case 0xd4: case 0xd6: case 0xd7: case 0xda: case 0xdc: case 0xdd: case 0xdf: case 0xe1: case 0xe2: case 0xe4: case 0xe7: case 0xe9: case 0xeb: case 0xed: case 0xee: case 0xf3: case 0xf4: case 0xf6: case 0xf7: case 0xfa: case 0xfc: case 0xfd: v = value; break; case 0x104: v = '\xa1'; break; case 0x2d8: v = '\xa2'; break; case 0x141: v = '\xa3'; break; case 0x13d: v = '\xa5'; break; case 0x15a: v = '\xa6'; break; case 0x160: v = '\xa9'; break; case 0x15e: v = '\xaa'; break; /* Scedil */ case 0x164: v = '\xab'; break; case 0x179: v = '\xac'; break; case 0x17d: v = '\xae'; break; case 0x17b: v = '\xaf'; break; case 0x105: v = '\xb1'; break; case 0x2db: v = '\xb2'; break; case 0x142: v = '\xb3'; break; case 0x13e: v = '\xb5'; break; case 0x15b: v = '\xb6'; break; case 0x2c7: v = '\xb7'; break; case 0x161: v = '\xb9'; break; case 0x15f: v = '\xba'; break; /* scedil */ case 0x165: v = '\xbb'; break; case 0x17a: v = '\xbc'; break; case 0x2dd: v = '\xbd'; break; case 0x17e: v = '\xbe'; break; case 0x17c: v = '\xbf'; break; case 0x154: v = '\xc0'; break; case 0x102: v = '\xc3'; break; case 0x139: v = '\xc5'; break; case 0x106: v = '\xc6'; break; case 0x10c: v = '\xc8'; break; case 0x118: v = '\xca'; break; case 0x11a: v = '\xcc'; break; case 0x10e: v = '\xcf'; break; case 0x110: v = '\xd0'; break; case 0x143: v = '\xd1'; break; case 0x147: v = '\xd2'; break; case 0x150: v = '\xd5'; break; case 0x158: v = '\xd8'; break; case 0x16e: v = '\xd9'; break; case 0x170: v = '\xdb'; break; case 0x162: v = '\xde'; break; /* Ţ */ case 0x155: v = '\xe0'; break; case 0x103: v = '\xe3'; break; case 0x13a: v = '\xe5'; break; case 0x107: v = '\xe6'; break; case 0x10d: v = '\xe8'; break; case 0x119: v = '\xea'; break; case 0x11b: v = '\xec'; break; case 0x10f: v = '\xef'; break; case 0x111: v = '\xf0'; break; case 0x144: v = '\xf1'; break; case 0x148: v = '\xf2'; break; case 0x151: v = '\xf5'; break; case 0x159: v = '\xf8'; break; case 0x16f: v = '\xf9'; break; case 0x171: v = '\xfb'; break; case 0x163: v = '\xfe'; break; /* tcedil */ case 0x2d9: v = '\xff'; break; } if (v == 0) break; value = v; } *p = value; return 1; case CHARSET_ISO_8859_15: switch (value) { case 0xa4: case 0xa6: case 0xb0: case 0xc4: case 0xd0: case 0xd4: case 0xd5: case 0xd6: goto donthave; case 0x152: value = 0xd4; break; /* Œ */ case 0x153: value = 0xd5; break; /* œ */ #if 0 case 0x0: value = 0xa4; break; /* euro */ #endif case 0x160: value = 0xa6; break; /* Scaron */ case 0x161: value = 0xb0; break; /* scaron */ case 0x17d: value = 0xc4; break; /* Zcaron */ case 0x17e: value = 0xd0; break; /* zcaron */ #if 0 case 0x0: value = 0xd6; break; /* Ydiersis */ #endif } if (value < 0x100) { *p = value; return 1; } donthave: break; #if OS_WIN32 case CHARSET_WINCP1250: /* MS Windows rough equivalent to ISO-8859-2 */ if (value >= 0x80) { int v = 0; /* This mapping is complete - there are 5 unused positions: * 0x81 0x83 0x88 0x90 0x98 */ switch (value) { case 0xa0: case 0xa4: case 0xa6: case 0xa7: case 0xa8: case 0xa9: case 0xab: case 0xac: case 0xad: case 0xae: case 0xb0: case 0xb1: case 0xb4: case 0xb5: case 0xb6: case 0xb7: case 0xb8: case 0xbb: case 0xc1: case 0xc2: case 0xc4: case 0xc7: case 0xc9: case 0xcb: case 0xcd: case 0xce: case 0xd3: case 0xd4: case 0xd6: case 0xd7: case 0xda: case 0xdc: case 0xdd: case 0xdf: case 0xe1: case 0xe2: case 0xe4: case 0xe7: case 0xe9: case 0xeb: case 0xed: case 0xee: case 0xf3: case 0xf4: case 0xf6: case 0xf7: case 0xfa: case 0xfc: case 0xfd: v = value; break; case 0x20ac: v = '\x80'; break; case 0x201a: v = '\x82'; break; case 0x201e: v = '\x84'; break; case 0x2026: v = '\x85'; break; case 0x2020: v = '\x86'; break; case 0x2021: v = '\x87'; break; case 0x2030: v = '\x89'; break; case 0x0160: v = '\x8a'; break; case 0x2039: v = '\x8b'; break; case 0x015a: v = '\x8c'; break; case 0x0164: v = '\x8d'; break; case 0x017d: v = '\x8e'; break; case 0x0179: v = '\x8f'; break; case 0x2018: v = '\x91'; break; case 0x2019: v = '\x92'; break; case 0x201c: v = '\x93'; break; case 0x201d: v = '\x94'; break; case 0x2022: v = '\x95'; break; case 0x2013: v = '\x96'; break; case 0x2014: v = '\x97'; break; case 0x2122: v = '\x99'; break; case 0x0161: v = '\x9a'; break; case 0x203a: v = '\x9b'; break; case 0x015b: v = '\x9c'; break; case 0x0165: v = '\x9d'; break; case 0x017e: v = '\x9e'; break; case 0x017a: v = '\x9f'; break; case 0x02c7: v = '\xa1'; break; case 0x02d8: v = '\xa2'; break; case 0x0141: v = '\xa3'; break; case 0x0104: v = '\xa5'; break; case 0x015e: v = '\xaa'; break; /* Scedil */ case 0x017b: v = '\xaf'; break; case 0x02db: v = '\xb2'; break; case 0x0142: v = '\xb3'; break; case 0x0105: v = '\xb9'; break; case 0x015f: v = '\xba'; break; /* scedil */ case 0x013d: v = '\xbc'; break; case 0x02dd: v = '\xbd'; break; case 0x013e: v = '\xbe'; break; case 0x017c: v = '\xbf'; break; case 0x0154: v = '\xc0'; break; case 0x0102: v = '\xc3'; break; case 0x0139: v = '\xc5'; break; case 0x0106: v = '\xc6'; break; case 0x010c: v = '\xc8'; break; case 0x0118: v = '\xca'; break; case 0x011a: v = '\xcc'; break; case 0x010e: v = '\xcf'; break; case 0x0110: v = '\xd0'; break; case 0x0143: v = '\xd1'; break; case 0x0147: v = '\xd2'; break; case 0x0150: v = '\xd5'; break; case 0x0158: v = '\xd8'; break; case 0x016e: v = '\xd9'; break; case 0x0170: v = '\xdb'; break; case 0x0162: v = '\xde'; break; /* Ţ */ case 0x0155: v = '\xe0'; break; case 0x0103: v = '\xe3'; break; case 0x013a: v = '\xe5'; break; case 0x0107: v = '\xe6'; break; case 0x010d: v = '\xe8'; break; case 0x0119: v = '\xea'; break; case 0x011b: v = '\xec'; break; case 0x010f: v = '\xef'; break; case 0x0111: v = '\xf0'; break; case 0x0144: v = '\xf1'; break; case 0x0148: v = '\xf2'; break; case 0x0151: v = '\xf5'; break; case 0x0159: v = '\xf8'; break; case 0x016f: v = '\xf9'; break; case 0x0171: v = '\xfb'; break; case 0x0163: v = '\xfe'; break; /* tcedil */ case 0x02d9: v = '\xff'; break; } if (v == 0) break; value = v; } *p = value; return 1; case CHARSET_WINCP1252: /* MS Windows extensions to ISO-8859-1 */ /* This mapping is complete - there are 5 unused positions: * 0x81 0x8d 0x8f 0x90 0x9d */ switch (value) { case 0x2026: value = 0x85; break; /* hellip */ case 0x0160: value = 0x8a; break; /* Scaron */ case 0x0152: value = 0x8c; break; /* OElig */ case 0x017d: value = 0x8e; break; /* Zcaron */ case 0x2019: value = 0x92; break; /* rsquo */ case 0x201c: value = 0x93; break; /* ldquo */ case 0x201d: value = 0x94; break; /* rdquo */ case 0x0161: value = 0x9a; break; /* scaron */ case 0x0153: value = 0x9c; break; /* oelig */ case 0x017e: value = 0x9e; break; /* zcaron */ #if 0 /* there are a few other obscure ones we don't currently need */ case 0x20ac: value = 0x80; break; /* euro */ case 0x201a: value = 0x82; break; /* sbquo */ case 0x0192: value = 0x83; break; /* fnof */ case 0x201e: value = 0x84; break; /* bdquo */ case 0x2020: value = 0x86; break; /* dagger */ case 0x2021: value = 0x87; break; /* Dagger */ case 0x02c6: value = 0x88; break; /* circ */ case 0x2030: value = 0x89; break; /* permil */ case 0x2039: value = 0x8b; break; /* lsaquo */ case 0x2018: value = 0x91; break; /* lsquo */ case 0x2022: value = 0x95; break; /* bull */ case 0x2013: value = 0x96; break; /* ndash */ case 0x2014: value = 0x97; break; /* mdash */ case 0x02dc: value = 0x98; break; /* tilde */ case 0x2122: value = 0x99; break; /* trade */ case 0x203a: value = 0x9b; break; /* rsaquo */ case 0x0178: value = 0x9f; break; /* Yuml */ #endif } if (value < 0x100) { *p = value; return 1; } break; #endif #if OS_WIN32 case CHARSET_DOSCP850: { static const unsigned char uni2dostab[] = { 255, 173, 189, 156, 207, 190, 221, 245, 249, 184, 166, 174, 170, 240, 169, 238, 248, 241, 253, 252, 239, 230, 244, 250, 247, 251, 167, 175, 172, 171, 243, 168, 183, 181, 182, 199, 142, 143, 146, 128, 212, 144, 210, 211, 222, 214, 215, 216, 209, 165, 227, 224, 226, 229, 153, 158, 157, 235, 233, 234, 154, 237, 232, 225, 133, 160, 131, 198, 132, 134, 145, 135, 138, 130, 136, 137, 141, 161, 140, 139, 208, 164, 149, 162, 147, 228, 148, 246, 155, 151, 163, 150, 129, 236, 231, 152 }; if (value >= 160 && value < 256) { *p = (int)uni2dostab[value - 160]; return 1; } #if 0 if (value == 305) { /* LATIN SMALL LETTER DOTLESS I */ *p = 213; /* "Modified CP850" has the Euro sign here. */ return 1; } if (value == 402) { /* LATIN SMALL LETTER F WITH HOOK */ *p = 159; return 1; } #endif break; } #endif } /* Transliterate characters we can't represent */ #ifdef DEBUG fprintf(stderr, "transliterate “%c†0x%x\n", value, value); #endif switch (value) { case 160: *p = ' '; return 1; case 161 /* ¡ */: *p = '!'; return 1; case 176 /* ° */: *p = 'd'; p[1] = 'g'; return 2; case 191 /* ¿ */: *p = '?'; return 1; case 192 /* À */: case 193 /* à */: case 194 /*  */: case 195 /* à */: *p = 'A'; return 1; case 197 /* Ã… */: p[1] = *p = 'A'; return 2; case 196 /* Ä */: /* Ä */ *p = 'A'; if (!umlaut_to_e()) return 1; p[1] = 'E'; return 2; case 198 /* Æ */: *p = 'A'; p[1] = 'E'; return 2; case 199 /* Ç */: case 268: /* Č */ *p = 'C'; return 1; case 270: /* Ď */ *p = 'D'; return 1; case 200 /* È */: case 201 /* É */: case 202 /* Ê */: case 203 /* Ë */: *p = 'E'; return 1; case 204 /* ÃŒ */: case 205 /* à */: case 206 /* ÃŽ */: case 207 /* à */: *p = 'I'; return 1; case 208 /* à */: case 222 /* Þ */: *p = 'T'; p[1] = 'H'; return 2; case 315: /* Ĺ */ case 317: /* Ľ */ *p = 'L'; return 1; case 209 /* Ñ */: *p = 'N'; return 1; case 210 /* Ã’ */: case 211 /* Ó */: case 212 /* Ô */: case 213 /* Õ */: *p = 'O'; return 1; case 214 /* Ö */: /* Ö */ case 0x152: /* Œ */ *p = 'O'; p[1] = 'E'; return 2; case 352: /* Š */ case 0x15e: /* Ş */ *p = 'S'; return 1; case 0x162: /* Ţ */ case 0x164: /* Ť */ *p = 'T'; return 1; case 217 /* Ù */: case 218 /* Ú */: case 219 /* Û */: *p = 'U'; return 1; case 220 /* Ü */: /* Ü */ *p = 'U'; p[1] = 'E'; return 2; case 221 /* à */: *p = 'Y'; return 1; case 381: /* Ž */ *p = 'Z'; return 1; case 223 /* ß */: p[1] = *p = 's'; return 2; case 224 /* à */: case 225 /* á */: case 226 /* â */: case 227 /* ã */: case 259: /* ă */ *p = 'a'; return 1; case 228 /* ä */: /* ä */ case 230 /* æ */: *p = 'a'; p[1] = 'e'; return 2; case 229 /* Ã¥ */: p[1] = *p = 'a'; return 2; case 231 /* ç */: case 269 /* č */: *p = 'c'; return 1; case 271: /* ď */ *p = 'd'; return 1; case 232 /* è */: case 233 /* é */: case 234 /* ê */: case 235 /* ë */: case 283 /* ě */: *p = 'e'; return 1; case 236 /* ì */: case 237 /* í */: case 238 /* î */: case 239 /* ï */: *p = 'i'; return 1; case 316 /* ĺ */: case 318 /* ľ */: *p = 'l'; return 1; case 241 /* ñ */: case 328 /* ň */: *p = 'n'; return 1; case 345: /* ř */ *p = 'r'; return 1; case 353: /* š */ case 0x15f: /* ş */ *p = 's'; return 1; case 357: /* ť */ case 0x163: /* ţ */ *p = 't'; return 1; case 240 /* ð */: case 254 /* þ */: *p = 't'; p[1] = 'h'; return 2; case 242 /* ò */: case 243 /* ó */: case 244 /* ô */: case 245 /* õ */: *p = 'o'; return 1; case 246 /* ö */: /* ö */ case 0x153: /* œ */ *p = 'o'; p[1] = 'e'; return 2; case 249 /* ù */: case 250 /* ú */: case 251 /* û */: case 367 /* ů */: *p = 'u'; return 1; case 252 /* ü */: /* ü */ *p = 'u'; p[1] = 'e'; return 2; case 253 /* ý */: case 255 /* ÿ */: *p = 'y'; return 1; case 382: /* ž */ *p = 'z'; return 1; case 0x2019: /* ‘ */ *p = '\''; return 1; case 171: /* « */ case 187: /* » */ case 0x201c: /* “ */ case 0x201d: /* ” */ *p = '"'; return 1; case 0x2026: /* … */ *p = '.'; p[1] = '.'; p[2] = '.'; return 3; case 0x2192: /* → */ *p = '-'; p[1] = '>'; return 2; case 0x1d4d: /* gradient symbol */ *p = 'g'; p[1] = 'r'; p[2] = 'd'; return 3; case 0x221e: /* infinity symbol */ *p = 'i'; p[1] = 'n'; p[2] = 'f'; return 3; } #ifdef DEBUG /* 169 is reported (copyright symbol), but there isn't a good <= 2 ASCII * character transliteration for that, so we handle that elsewhere. */ fprintf(stderr, "failed to transliterate codepoint %d\n", value); #endif return 0; } #if OS_UNIX && defined DATADIR && defined PACKAGE /* Under Unix, we compile in the configured path */ static const char *pth_cfg_files = DATADIR "/" PACKAGE; #else /* On other platforms, we fall back on looking in the current directory */ static const char *pth_cfg_files = ""; #endif static int num_msgs = 0; static char **msg_array = NULL; static bool msg_lang_explicit = fFalse; const char *msg_lang = NULL; const char *msg_lang2 = NULL; static char ** parse_msgs(int n, unsigned char *p, int charset_code) { int i; char **msgs = osmalloc(n * sizeof(char *)); for (i = 0; i < n; i++) { unsigned char *to = p; int ch; msgs[i] = (char *)p; /* If we want UTF8 anyway, we just need to find the start of each * message */ if (charset_code == CHARSET_UTF8) { p += strlen((char *)p) + 1; continue; } while ((ch = *p++) != 0) { /* A byte in the range 0x80-0xbf or 0xf0-0xff isn't valid in * this state, (0xf0-0xfd mean values > 0xffff) so treat as * literal and try to resync so we cope better when fed * non-utf-8 data. Similarly we abandon a multibyte sequence * if we hit an invalid character. */ if (ch >= 0xc0 && ch < 0xf0) { int ch1 = *p; if ((ch1 & 0xc0) != 0x80) goto resync; if (ch < 0xe0) { /* 2 byte sequence */ ch = ((ch & 0x1f) << 6) | (ch1 & 0x3f); p++; } else { /* 3 byte sequence */ int ch2 = p[1]; if ((ch2 & 0xc0) != 0x80) goto resync; ch = ((ch & 0x1f) << 12) | ((ch1 & 0x3f) << 6) | (ch2 & 0x3f); p += 2; } } resync: if (ch < 127) { *to++ = (char)ch; } else { /* We assume an N byte UTF-8 code never transliterates to more * than N characters (so we can't transliterate © to (C) or * ® to (R) for example) */ to += add_unicode(charset_code, to, ch); } } *to++ = '\0'; } return msgs; } /* This is the name of the default language, which can be set like so: * ./configure --enable-defaultlang=fr */ #ifdef DEFAULTLANG /* No point extracting these errors as they won't get used if file opens */ # include "../lib/defaultlang.h" #else #define N_DONTEXTRACTMSGS 5 static unsigned char dontextractmsgs[] = "Can't open message file \"%s\" using path \"%s\"\0"/*1000*/ "Problem with message file \"%s\"\0"/*1001*/ "I don't understand this message file version\0"/*1002*/ "Message file truncated?\0"/*1003*/ "Out of memory (couldn't find %lu bytes).\0"/*1004*/; #endif static char **dontextract = NULL; static void parse_msg_file(int charset_code) { FILE *fh; unsigned char header[20]; int i; unsigned len; unsigned char *p; char *fnm, *s; int n; #ifdef DEBUG fprintf(stderr, "parse_msg_file(%d)\n", charset_code); #endif /* sort out messages we need to print if we can't open the message file */ dontextract = parse_msgs(N_DONTEXTRACTMSGS, dontextractmsgs, charset_code); fnm = osstrdup(msg_lang); /* trim off charset from stuff like "de_DE.iso8859_1" */ s = strchr(fnm, '.'); if (s) *s = '\0'; /* trim off any "@" modifier. */ s = strchr(fnm, '@'); if (s) *s = '\0'; fh = fopenWithPthAndExt(pth_cfg_files, fnm, EXT_SVX_MSG, "rb", NULL); if (!fh && strlen(fnm) > 3 && fnm[2] == '_') { /* e.g. if 'en_GB' is unknown, see if we know 'en' */ fnm[2] = '\0'; fh = fopenWithPthAndExt(pth_cfg_files, fnm, EXT_SVX_MSG, "rb", NULL); if (!fh) fnm[2] = '_'; /* for error reporting */ } if (!fh && !msg_lang_explicit) { /* If msg_lang wasn't specified using environment variable SURVEXLANG, * then default to 'en' if we don't find messages for language msg_lang. */ if (fnm[0] && fnm[1]) { strcpy(fnm, "en"); } else { osfree(fnm); fnm = osstrdup("en"); } fh = fopenWithPthAndExt(pth_cfg_files, fnm, EXT_SVX_MSG, "rb", NULL); } if (!fh) { fatalerror(/*Can't open message file “%s†using path “%sâ€*/1000, fnm, pth_cfg_files); } if (fread(header, 1, 20, fh) < 20 || memcmp(header, "Svx\nMsg\r\n\xfe\xff", 12) != 0) { fatalerror(/*Problem with message file “%sâ€*/1001, fnm); } if (header[12] != 0) fatalerror(/*I don't understand this message file version*/1002); n = (header[14] << 8) | header[15]; len = 0; for (i = 16; i < 20; i++) len = (len << 8) | header[i]; p = osmalloc(len); if (fread(p, 1, len, fh) < len) fatalerror(/*Message file truncated?*/1003); fclose(fh); #ifdef DEBUG fprintf(stderr, "fnm = “%sâ€, n = %d, len = %d\n", fnm, n, len); #endif osfree(fnm); msg_array = parse_msgs(n, p, charset_code); num_msgs = n; } const char * msg_cfgpth(void) { return pth_cfg_files; } const char * msg_exepth(void) { return exe_pth; } const char * msg_appname(void) { return appname_copy; } void (msg_init)(char * const *argv) { char *p; #if OS_UNIX_MACOS int msg_macos_relocatable = 0; #endif SVX_ASSERT(argv); /* Point to argv[0] itself so we report a more helpful error if the * code to work out the clean appname generates a signal */ appname_copy = argv[0]; #if OS_UNIX /* use name as-is on Unix - programs run from path get name as supplied */ appname_copy = osstrdup(argv[0]); #else /* use the lower-cased leafname on other platforms */ p = leaf_from_fnm(argv[0]); appname_copy = p; while (*p) { *p = tolower(*p); ++p; } #endif /* shortcut --version so you can check the version number even when the * correct message file can't be found... */ if (argv[1] && strcmp(argv[1], "--version") == 0) { cmdline_version(); exit(0); } if (argv[0]) { exe_pth = path_from_fnm(argv[0]); #if OS_UNIX && defined DATADIR && defined PACKAGE bool free_pth = fFalse; char *pth = getenv("srcdir"); if (!pth || !pth[0]) { pth = path_from_fnm(argv[0]); free_pth = fTrue; } if (pth[0]) { struct stat buf; #if OS_UNIX_MACOS # ifndef AVEN /* On macOS the programs may be installed anywhere, with the * share directory and the binaries in the same directory. */ p = use_path(pth, "share/survex/en.msg"); if (stat(p, &buf) == 0 && S_ISREG(buf.st_mode)) { pth_cfg_files = use_path(pth, "share/survex"); msg_macos_relocatable = 1; goto macos_got_msg; } osfree(p); # endif /* In the diskimage package, this case is used for aven, and for * the hardlinked copies of cavern and extend alongside the aven * binary, which are the ones which aven runs. */ p = use_path(pth, "../Resources/en.msg"); if (stat(p, &buf) == 0 && S_ISREG(buf.st_mode)) { pth_cfg_files = use_path(pth, "../Resources"); msg_macos_relocatable = 1; goto macos_got_msg; } osfree(p); #endif /* If we're run with an explicit path, check if "../lib/en.msg" * from the program's path exists, and if so look there for * support files - this allows us to test binaries in the build * tree easily. */ p = use_path(pth, "../lib/en.msg"); if (stat(p, &buf) == 0) { #ifdef S_ISREG /* POSIX way */ if (S_ISREG(buf.st_mode)) { pth_cfg_files = use_path(pth, "../lib"); } #else /* BSD way */ if ((buf.st_mode & S_IFMT) == S_IFREG) { pth_cfg_files = use_path(pth, "../lib"); } #endif } #if defined(__GNUC__) && defined(__APPLE_CC__) macos_got_msg: #endif osfree(p); } if (free_pth) osfree(pth); #elif OS_WIN32 DWORD len = 256; char *buf = NULL, *modname; while (1) { DWORD got; buf = osrealloc(buf, len); got = GetModuleFileName(NULL, buf, len); if (got < len) break; len += len; } modname = buf; /* Strange Win32 nastiness - strip prefix "\\?\" if present */ if (strncmp(modname, "\\\\?\\", 4) == 0) modname += 4; pth_cfg_files = path_from_fnm(modname); osfree(buf); #else /* Get the path to the support files from argv[0] */ pth_cfg_files = path_from_fnm(argv[0]); #endif } msg_lang = getenv("SURVEXLANG"); #ifdef DEBUG fprintf(stderr, "msg_lang = %p (= \"%s\")\n", msg_lang, msg_lang?msg_lang:"(null)"); #endif msg_lang_explicit = fTrue; if (!msg_lang || !*msg_lang) { msg_lang_explicit = fFalse; msg_lang = getenv("LC_ALL"); } if (!msg_lang || !*msg_lang) { msg_lang = getenv("LC_MESSAGES"); if (!msg_lang || !*msg_lang) { msg_lang = getenv("LANG"); /* Something (AutoCAD?) on Microsoft Windows sets LANG to a number. */ if (msg_lang && !isalpha(msg_lang[0])) msg_lang = NULL; } if (!msg_lang || !*msg_lang) { #if OS_WIN32 LCID locid; #endif #ifdef DEFAULTLANG msg_lang = STRING(DEFAULTLANG); #else msg_lang = "en"; #endif #if OS_WIN32 /* GetUserDefaultUILanguage() requires Microsoft Windows 2000 or * newer, but we don't support anything earlier than Vista. */ locid = GetUserDefaultUILanguage(); if (locid) { WORD langid = LANGIDFROMLCID(locid); switch (PRIMARYLANGID(langid)) { case LANG_BULGARIAN: msg_lang = "bg"; break; /* older mingw compilers don't seem to supply this value */ #ifndef LANG_CATALAN # define LANG_CATALAN 0x03 #endif case LANG_CATALAN: msg_lang = "ca"; break; case LANG_CHINESE: msg_lang = "zh_CN"; break; case LANG_ENGLISH: if (SUBLANGID(langid) == SUBLANG_ENGLISH_US) msg_lang = "en_US"; else msg_lang = "en"; break; case LANG_FRENCH: msg_lang = "fr"; break; case LANG_GERMAN: switch (SUBLANGID(langid)) { case SUBLANG_GERMAN_SWISS: msg_lang = "de_CH"; break; default: msg_lang = "de"; } break; case LANG_GREEK: msg_lang = "el"; break; case LANG_HUNGARIAN: msg_lang = "hu"; break; case LANG_INDONESIAN: msg_lang = "id"; break; case LANG_ITALIAN: msg_lang = "it"; break; case LANG_POLISH: msg_lang = "pl"; break; case LANG_PORTUGUESE: if (SUBLANGID(langid) == SUBLANG_PORTUGUESE_BRAZILIAN) msg_lang = "pt_BR"; else msg_lang = "pt"; break; case LANG_ROMANIAN: msg_lang = "ro"; break; case LANG_RUSSIAN: msg_lang = "ru"; break; case LANG_SLOVAK: msg_lang = "sk"; break; case LANG_SPANISH: msg_lang = "es"; break; } } #endif } } #ifdef DEBUG fprintf(stderr, "msg_lang = %p (= \"%s\")\n", msg_lang, msg_lang?msg_lang:"(null)"); #endif /* On Mandrake LANG defaults to C */ if (strcmp(msg_lang, "C") == 0) msg_lang = "en"; { /* If msg_lang has a country code, snip it out to give msg_lang2. */ size_t b = 0; while (isalpha((unsigned char)msg_lang[b])) { ++b; } if (msg_lang[b] == '_') { char * tmp; size_t e = b + 1; while (isalpha((unsigned char)msg_lang[e])) { ++e; } tmp = osstrdup(msg_lang); memmove(tmp + b, tmp + e, strlen(tmp + e) + 1); msg_lang2 = tmp; } } #ifdef LC_MESSAGES /* try to setlocale() appropriately too */ if (!setlocale(LC_MESSAGES, msg_lang)) { if (msg_lang2) { (void)setlocale(LC_MESSAGES, msg_lang2); } } #endif select_charset(default_charset()); } #ifndef AVEN /* Return message if messages available, else a fallback value. */ static const char * msg_opt(int en, const char * fallback) { /* NB can't use SVX_ASSERT here! */ if (!msg_array || en <= 0 || en >= num_msgs) { return fallback; } return msg_array[en]; } #endif const char * msg(int en) { /* NB can't use SVX_ASSERT here! */ if (dontextract && en >= 1000 && en < 1000 + N_DONTEXTRACTMSGS) return dontextract[en - 1000]; if (!msg_array) { if (en != 1) { fprintf(STDERR, "Message %d requested before fully initialised\n", en); return "Message requested before fully initialised\n"; } /* this should be the only other message which can be requested before * the message file is opened and read... */ if (!dontextract) return "Out of memory (couldn't find %lu bytes)."; return dontextract[(/*Out of memory (couldn't find %lu bytes).*/1004) - 1000]; } if (en < 0 || en >= num_msgs) { fprintf(STDERR, "Message %d out of range\n", en); return "Message out of range\n"; } if (en == 0) { const char *p = msg_array[0]; if (!*p) p = "(C)"; return p; } return msg_array[en]; } void v_report(int severity, const char *fnm, int line, int col, int en, va_list ap) { #ifdef AVEN (void)col; aven_v_report(severity, fnm, line, en, ap); #else const char * level; if (fnm) { fputs(fnm, STDERR); if (line) fprintf(STDERR, ":%d", line); if (col > 0) fprintf(STDERR, ":%d", col); } else { fputs(appname_copy, STDERR); } fputs(": ", STDERR); switch (severity) { case DIAG_INFO: /* TRANSLATORS: Indicates a informational message e.g.: * "spoon.svx:12: info: Declination: [...]" */ level = msg_opt(/*info*/485, "info"); break; case DIAG_WARN: /* TRANSLATORS: Indicates a warning message e.g.: * "spoon.svx:12: warning: *prefix is deprecated" */ level = msg_opt(/*warning*/4, "warning"); break; default: /* TRANSLATORS: Indicates an error message e.g.: * "spoon.svx:13:4: error: Field may not be omitted" */ level = msg_opt(/*error*/93, "error"); break; } fputs(level, STDERR); fputs(": ", STDERR); vfprintf(STDERR, msg(en), ap); fputnl(STDERR); #endif switch (severity) { case DIAG_WARN: msg_warnings++; break; case DIAG_ERR: msg_errors++; if (msg_errors == 50) fatalerror_in_file(fnm, 0, /*Too many errors - giving up*/19); break; case DIAG_FATAL: exit(EXIT_FAILURE); } } void diag(int severity, int en, ...) { va_list ap; va_start(ap, en); v_report(severity, NULL, 0, 0, en, ap); va_end(ap); } void diag_in_file(int severity, const char *fnm, int line, int en, ...) { va_list ap; va_start(ap, en); v_report(severity, fnm, line, 0, en, ap); va_end(ap); } /* Code to support switching character set at runtime (e.g. for a printer * driver to support different character sets on screen and on the printer) */ typedef struct charset_li { struct charset_li *next; int code; char **msg_array; } charset_li; static charset_li *charset_head = NULL; static int charset = CHARSET_BAD; int select_charset(int charset_code) { int old_charset = charset; charset_li *p; #ifdef DEBUG fprintf(stderr, "select_charset(%d), old charset = %d\n", charset_code, charset); #endif charset = charset_code; /* check if we've already parsed messages for new charset */ for (p = charset_head; p; p = p->next) { #ifdef DEBUG printf("%p: code %d msg_array %p\n", p, p->code, p->msg_array); #endif if (p->code == charset) { msg_array = p->msg_array; return old_charset; } } /* nope, got to reparse message file */ parse_msg_file(charset_code); /* add to list */ p = osnew(charset_li); p->code = charset; p->msg_array = msg_array; p->next = charset_head; charset_head = p; return old_charset; } survex-1.4.4/src/aboutdlg.cc0000644000175000017500000001501314141575516012705 00000000000000// // aboutdlg.cc // // About box handling for Aven. // // Copyright (C) 2001-2003 Mark R. Shinwell. // Copyright (C) 2001,2002,2003,2004,2005,2006,2010,2014,2015,2017 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "aboutdlg.h" #include "aven.h" #include "gla.h" #include "message.h" #include #include #include BEGIN_EVENT_TABLE(AboutDlg, wxDialog) EVT_TIMER(about_TIMER, AboutDlg::OnTimer) EVT_BUTTON(wxID_COPY, AboutDlg::OnCopy) END_EVENT_TABLE() void AboutDlg::OnTimer(wxTimerEvent &) { bitmap.LoadFile(img_path + wxT("osterei.png"), wxBITMAP_TYPE_PNG); ((wxStaticBitmap*)FindWindowById(501, this))->SetBitmap(bitmap); } void AboutDlg::OnCopy(wxCommandEvent &) { if (wxTheClipboard->Open()) { wxTheClipboard->SetData(new wxTextDataObject(info)); wxTheClipboard->Close(); // (Try to) make the selection persist after aven exits. (void)wxTheClipboard->Flush(); } } AboutDlg::AboutDlg(wxWindow* parent, const wxIcon & app_icon) : /* TRANSLATORS: for the title of the About box */ wxDialog(parent, 500, wxString::Format(wmsg(/*About %s*/205), APP_NAME)), timer(this, about_TIMER) { img_path = wxString(wmsg_cfgpth()); img_path += wxCONFIG_PATH_SEPARATOR; img_path += wxT("images"); img_path += wxCONFIG_PATH_SEPARATOR; wxBoxSizer* horiz = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* vert = new wxBoxSizer(wxVERTICAL); if (!bitmap.Ok()) { bitmap.LoadFile(img_path + APP_ABOUT_IMAGE, wxBITMAP_TYPE_PNG); } if (bitmap.Ok()) { wxStaticBitmap* static_bitmap = new wxStaticBitmap(this, 501, bitmap); horiz->Add(static_bitmap, 0 /* horizontally unstretchable */, wxALL, 2 /* border width */); } horiz->Add(vert, 0, wxALL, 2); wxString id(APP_NAME wxT(" " VERSION "\n")); /* TRANSLATORS: Here "survey" is a "cave map" rather than list of questions * - it should be translated to the terminology that cavers using the * language would use. * * This string is used in the about box (summarising the purpose of aven). */ id += wmsg(/*Survey visualisation tool*/209); wxBoxSizer* title = new wxBoxSizer(wxHORIZONTAL); wxStaticBitmap* static_bitmap = new wxStaticBitmap(this, 599, wxBitmap()); static_bitmap->SetIcon(app_icon); title->Add(static_bitmap, 0, wxALIGN_CENTRE_VERTICAL|wxRIGHT, 8); title->Add(new wxStaticText(this, 502, id), 0, wxALL, 2); wxStaticText* copyright = new wxStaticText(this, 503, wxT(COPYRIGHT_MSG_UTF8 "\n" AVEN_COPYRIGHT_MSG_UTF8)); wxString licence_str; /* TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for * some languages here: * https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html */ wxString l(wmsg(/*This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.*/219)); wxClientDC dc(this); dc.SetFont(this->GetFont()); do { unsigned int a = 72; if (a >= l.length()) { a = l.length(); } else { while (a > 1 && l[a] != ' ') --a; } while (a > 1) { wxCoord w, h; dc.GetTextExtent(l.substr(0, a), &w, &h); if (w <= 380) break; do { --a; } while (a > 1 && l[a] != ' '); } if (!licence_str.empty()) licence_str += '\n'; licence_str += l.substr(0, a); if (a < l.length() && l[a] == ' ') ++a; l.erase(0, a); } while (!l.empty()); wxStaticText* licence = new wxStaticText(this, 504, licence_str); vert->Add(10, 5, 0, wxTOP, 5); vert->Add(title, 0, wxLEFT | wxRIGHT, 20); vert->Add(10, 5, 0, wxTOP, 5); vert->Add(copyright, 0, wxLEFT | wxRIGHT, 20); vert->Add(10, 5, 0, wxTOP, 5); vert->Add(licence, 0, wxLEFT | wxRIGHT, 20); vert->Add(10, 5, 0, wxTOP, 5); // TRANSLATORS: for about box: vert->Add(new wxStaticText(this, 505, wmsg(/*System Information:*/390)), 0, wxLEFT | wxRIGHT, 20); info = wxGetOsDescription(); info += wxT("\n"); wxString version = wxGetLibraryVersionInfo().GetVersionString(); info += version; if (version != wxVERSION_STRING) info += wxT(" (built with ") wxVERSION_STRING wxT(")"); info += #ifdef __WXGTK__ # if defined __WXGTK3__ wxT(" (GTK+ 3)\n"); # elif defined __WXGTK20__ wxT(" (GTK+ 2)\n"); # elif defined __WXGTK12__ wxT(" (GTK+ 1.2)\n"); # else wxT(" (GTK+ < 1.2)\n"); # endif #elif defined __WXMOTIF__ # if defined __WXMOTIF20__ wxT(" (Motif >= 2.0)\n"); # else wxT(" (Motif < 2.0)\n"); # endif #elif defined __WXX11__ wxT(" (X11)\n"); #else wxT("\n"); #endif int bpp = wxDisplayDepth(); /* TRANSLATORS: bpp is "Bits Per Pixel" */ info += wxString::Format(wmsg(/*Display Depth: %d bpp*/196), bpp); /* TRANSLATORS: appended to previous message if the display is colour */ if (wxColourDisplay()) info += wmsg(/* (colour)*/197); info += wxT('\n'); info += wxString(GetGLSystemDescription().c_str(), wxConvUTF8); // Use a readonly multiline text edit for the system info so users can // easily cut and paste it into an email when reporting bugs. vert->Add(new wxTextCtrl(this, 506, info, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY), 1, wxLEFT | wxRIGHT | wxEXPAND, 20); vert->Add(10, 5, 0, wxTOP, 5); wxBoxSizer* bottom = new wxBoxSizer(wxHORIZONTAL); bottom->Add(5, 5, 1); bottom->Add(new wxButton(this, wxID_COPY), 0, wxRIGHT | wxBOTTOM, 6); wxButton* close = new wxButton(this, wxID_OK); bottom->Add(close, 0, wxRIGHT | wxBOTTOM, 15); vert->Add(bottom, 0, wxEXPAND | wxLEFT | wxRIGHT, 0); if (bitmap.Ok()) { vert->SetMinSize(0, bitmap.GetHeight()); } SetSizer(horiz); close->SetDefault(); horiz->SetSizeHints(this); timer.Start(42000); } survex-1.4.4/src/rotatezoom.xbm0000644000175000017500000000160714141575516013514 00000000000000#define rotatezoom_width 32 #define rotatezoom_height 32 static unsigned char rotatezoom_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xf9, 0x07, 0x40, 0x90, 0x12, 0x04, 0x40, 0x48, 0x24, 0x04, 0x40, 0x90, 0x12, 0x04, 0x40, 0xe0, 0x0e, 0x04, 0x40, 0x01, 0x00, 0x05, 0xc0, 0x06, 0xc0, 0x06, 0x40, 0x18, 0x30, 0x04, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x3e, 0xf8, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/vector3.cc0000644000175000017500000000442214141575516012473 00000000000000// // vector3.cc // // C++ class for 3-element vectors // // Copyright (C) 2000-2001, Mark R. Shinwell. // Copyright (C) 2002-2003 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "vector3.h" #include void Vector3::normalise() { double mag = magnitude(); if (mag != 0.0) { x /= mag; y /= mag; z /= mag; } } double dot(const Vector3& left, const Vector3& right) { return left.x*right.x + left.y*right.y + left.z*right.z; } Vector3& Vector3::operator*=(const double f) { x *= f; y *= f; z *= f; return *this; } Vector3& Vector3::operator/=(const double f) { x /= f; y /= f; z /= f; return *this; } Vector3& Vector3::operator+=(const Vector3 &v) { x += v.x; y += v.y; z += v.z; return *this; } Vector3& Vector3::operator-=(const Vector3 &v) { x -= v.x; y -= v.y; z -= v.z; return *this; } Vector3 operator*(const double f, const Vector3& v) { Vector3 o; o.x = v.x * f; o.y = v.y * f; o.z = v.z * f; return o; } Vector3 operator*(const Vector3& v1, const Vector3& v2) { // Cross product. Vector3 o; o.x = v1.y*v2.z - v1.z*v2.y; o.y = v1.z*v2.x - v1.x*v2.z; o.z = v1.x*v2.y - v1.y*v2.x; return o; } Vector3 operator+(const Vector3& v1, const Vector3& v2) { Vector3 o; o.x = v1.x + v2.x; o.y = v1.y + v2.y; o.z = v1.z + v2.z; return o; } Vector3 operator-(const Vector3& v1, const Vector3& v2) { Vector3 o; o.x = v1.x - v2.x; o.y = v1.y - v2.y; o.z = v1.z - v2.z; return o; } survex-1.4.4/src/gen_img2aven0000755000175000017500000000140514141575516013064 00000000000000#!/usr/bin/perl -w use strict; sub img_SFLAG_SURFACE() { 0x01 } sub img_SFLAG_UNDERGROUND { 0x02 } sub img_SFLAG_ENTRANCE { 0x04 } sub img_SFLAG_EXPORTED { 0x08 } sub img_SFLAG_FIXED { 0x10 } sub img_SFLAG_ANON { 0x20 } sub img_SFLAG_WALL { 0x40 } my @tab; for (0 .. 0x7f) { my @f; push @f, "LFLAG_SURFACE" if ($_ & img_SFLAG_SURFACE); push @f, "LFLAG_UNDERGROUND" if ($_ & img_SFLAG_UNDERGROUND); push @f, "LFLAG_ENTRANCE" if ($_ & img_SFLAG_ENTRANCE); push @f, "LFLAG_EXPORTED" if ($_ & img_SFLAG_EXPORTED); push @f, "LFLAG_FIXED" if ($_ & img_SFLAG_FIXED); push @f, "LFLAG_NOT_ANON" unless ($_ & img_SFLAG_ANON); push @f, "LFLAG_NOT_WALL" unless ($_ & img_SFLAG_WALL); push @f, "0" if @f == 0; print "\t".join("|", @f).",\n"; } survex-1.4.4/src/netartic.c0000644000175000017500000003572214142042211012541 00000000000000/* netartic.c * Split up network at articulation points * Copyright (C) 1993-2003,2005,2012,2014,2015 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if 0 # define DEBUG_INVALID 1 # define DEBUG_ARTIC #endif #ifdef HAVE_CONFIG_H # include #endif #include "debug.h" #include "cavern.h" #include "filename.h" #include "listpos.h" #include "message.h" #include "netartic.h" #include "netbits.h" #include "matrix.h" #include "out.h" /* We want to split station list into a list of components, each of which * consists of a list of "articulations" - the first has all the fixed points * in that component, and the others attach sequentially to produce the whole * component */ typedef struct articulation { struct articulation *next; node *stnlist; } articulation; typedef struct component { struct component *next; articulation *artic; } component; static component *component_list; static articulation *articulation_list; static node *artlist; static node *fixedlist; static long colour; /* The goto iter/uniter avoids using recursion which could lead to stack * overflow. Instead we use 5 bytes of memory per iteration in malloc-ed * blocks which will probably use an awful lot less memory on most platforms. */ /* This is the number of station in stnlist which is a ceiling on how * deep visit will recurse */ static unsigned long cMaxVisits; static unsigned char *dirn_stack = NULL; static long *min_stack = NULL; static unsigned long visit(node *stn, int back) { long min_colour; int i; unsigned long tos = 0; SVX_ASSERT(dirn_stack && min_stack); #ifdef DEBUG_ARTIC printf("visit(%p, %d) called\n", stn, back); #endif iter: min_colour = stn->colour = ++colour; #ifdef DEBUG_ARTIC printf("visit: stn [%p] ", stn); print_prefix(stn->name); printf(" set to colour %ld -> min\n", colour); #endif for (i = 0; i <= 2 && stn->leg[i]; i++) { if (i != back) { node *to = stn->leg[i]->l.to; long col = to->colour; if (col == 0) { SVX_ASSERT(tos < cMaxVisits); dirn_stack[tos] = back; min_stack[tos] = min_colour; tos++; back = reverse_leg_dirn(stn->leg[i]); stn = to; goto iter; uniter: SVX_ASSERT(tos > 0); --tos; i = reverse_leg_dirn(stn->leg[back]); to = stn; stn = to->leg[back]->l.to; back = dirn_stack[tos]; if (min_stack[tos] < min_colour) min_colour = min_stack[tos]; #ifdef DEBUG_ARTIC printf("unwind: stn [%p] ", stn); print_prefix(stn->name); printf(" colour %d, min %d, station after %d\n", stn->colour, min_colour, to->colour); printf("Putting stn "); print_prefix(to->name); printf(" on artlist\n"); #endif remove_stn_from_list(&stnlist, to); add_stn_to_list(&artlist, to); if (to->colour <= min_colour) { articulation *art; min_colour = to->colour; /* FIXME: note down leg (<-), remove and replace: * /\ / /\ * [fixed point(s)] *-* -> [..] ) * \/ \ \/ * stn to */ /* flag leg as an articulation for loop error reporting */ to->leg[dirn_stack[tos]]->l.reverse |= FLAG_ARTICULATION; stn->leg[i]->l.reverse |= FLAG_ARTICULATION; /* start new articulation */ art = osnew(articulation); art->stnlist = artlist; art->next = articulation_list; articulation_list = art; artlist = NULL; #ifdef DEBUG_ARTIC printf("Articulate *-"); print_prefix(stn->name); printf("-"); print_prefix(to->name); printf("-...\n"); #endif } } else { /* back edge case */ if (col < 0) { /* we've found a fixed point */ col = -col; to->colour = col; #if 0 /* Removing this solves Graham Mullan's problem and makes more * sense since it means we'll recheck this point for further * legs. */ #ifdef DEBUG_ARTIC printf("Putting FOUND FIXED stn "); print_prefix(to->name); printf(" on artlist\n"); #endif remove_stn_from_list(&fixedlist, to); add_stn_to_list(&artlist, to); #endif } if (col < min_colour) min_colour = col; } } } SVX_ASSERT(!stn->leg[0] || stn->leg[0]->l.to->colour > 0); SVX_ASSERT(!stn->leg[1] || stn->leg[1]->l.to->colour > 0); SVX_ASSERT(!stn->leg[2] || stn->leg[2]->l.to->colour > 0); if (tos > 0) goto uniter; #ifdef DEBUG_ARTIC printf("Putting stn "); print_prefix(stn->name); printf(" on artlist\n"); #endif remove_stn_from_list(&stnlist, stn); add_stn_to_list(&artlist, stn); return min_colour; } extern void articulate(void) { node *stn, *stnStart; int i; long cFixed; component_list = NULL; articulation_list = NULL; artlist = NULL; fixedlist = NULL; /* find articulation points and components */ colour = 0; stnStart = NULL; cMaxVisits = 0; FOR_EACH_STN(stn, stnlist) { if (fixed(stn)) { remove_stn_from_list(&stnlist, stn); add_stn_to_list(&fixedlist, stn); colour++; stn->colour = -colour; #ifdef DEBUG_ARTIC printf("Putting stn "); print_prefix(stn->name); printf(" on fixedlist\n"); #endif } else { cMaxVisits++; stn->colour = 0; } } dirn_stack = osmalloc(cMaxVisits); min_stack = osmalloc(cMaxVisits * sizeof(long)); /* fixedlist can be NULL here if we've had a *solve followed by survey * which is all hanging. */ cFixed = colour; while (fixedlist) { int c; stnStart = fixedlist; stn = stnStart; /* see if this is a fresh component - it may not be, we may be * processing the other way from a fixed point cut-line */ if (stn->colour < 0) { #ifdef DEBUG_ARTIC printf("new component\n"); #endif stn->colour = -stn->colour; /* fixed points are negative until we colour from them */ cComponents++; /* FIXME: logic to count components isn't the same as the logic * to start a new one - we should start a new one for a fixed point * cut-line (see below) */ if (artlist) { component *comp; articulation *art; art = osnew(articulation); art->stnlist = artlist; art->next = articulation_list; articulation_list = art; artlist = NULL; comp = osnew(component); comp->next = component_list; comp->artic = articulation_list; component_list = comp; articulation_list = NULL; } #ifdef DEBUG_ARTIC print_prefix(stn->name); printf(" [%p] is root of component %ld\n", stn, cComponents); printf(" and colour = %d/%d\n", stn->colour, cFixed); #endif } c = 0; for (i = 0; i <= 2 && stn->leg[i]; i++) { node *stn2 = stn->leg[i]->l.to; if (stn2->colour < 0) { stn2->colour = -stn2->colour; } else if (stn2->colour == 0) { /* Special case to check if start station is an articulation point * which it is iff we have to colour from it in more than one dirn * * We're looking for articulation legs - these are those where * colouring from here doesn't reach a fixed point (including * stn - the fixed point we've started from) * * FIXME: this is a "fixed point cut-line" case where we could * start a new component. */ long col = visit(stn2, reverse_leg_dirn(stn->leg[i])); #ifdef DEBUG_ARTIC print_prefix(stn->name); printf(" -> "); print_prefix(stn2->name); printf(" col %d cFixed %d\n", col, cFixed); #endif if (col > cFixed) { /* start new articulation - FIXME - overeager */ articulation *art = osnew(articulation); art->stnlist = artlist; art->next = articulation_list; articulation_list = art; artlist = NULL; c |= 1 << i; } } } switch (c) { /* had to colour in 2 or 3 directions from start point */ case 3: case 5: case 6: case 7: #ifdef DEBUG_ARTIC print_prefix(stn->name); printf(" is a special case start articulation point [%d]\n", c); #endif for (i = 0; i <= 2 && stn->leg[i]; i++) { if (TSTBIT(c, i)) { /* flag leg as an articulation for loop error reporting */ stn->leg[i]->l.reverse |= FLAG_ARTICULATION; #ifdef DEBUG_ARTIC print_prefix(stn->leg[i]->l.to->name); putnl(); #endif reverse_leg(stn->leg[i])->l.reverse |= FLAG_ARTICULATION; } } } #ifdef DEBUG_ARTIC printf("Putting FIXED stn "); print_prefix(stn->name); printf(" on artlist\n"); #endif remove_stn_from_list(&fixedlist, stn); add_stn_to_list(&artlist, stn); if (stnStart->colour == 1) { #ifdef DEBUG_ARTIC printf("%ld components\n",cComponents); #endif break; } } osfree(dirn_stack); dirn_stack = NULL; osfree(min_stack); min_stack = NULL; if (artlist) { articulation *art = osnew(articulation); art->stnlist = artlist; art->next = articulation_list; articulation_list = art; artlist = NULL; } if (articulation_list) { component *comp = osnew(component); comp->next = component_list; comp->artic = articulation_list; component_list = comp; articulation_list = NULL; } if (stnlist) { /* Any stations still in stnlist are unfixed, which is means we have * one or more hanging surveys. * * The cause of the problem is pretty likely to be a typo, so run the * checks which report errors and warnings about issues which such a * typo is likely to result in. */ check_node_stats(); /* Actually this error is fatal, but we want to list the survey * stations which aren't connected, so we report it as an error * and die after listing them... */ bool fNotAttached = fFalse; /* TRANSLATORS: At the end of processing (or if a *SOLVE command is used) * cavern will issue this error if there are any sections of the survey * network which are hanging. */ error(/*Survey not all connected to fixed stations*/45); FOR_EACH_STN(stn, stnlist) { /* Anonymous stations must be at the end of a trailing traverse (since * the same anonymous station can't be referred to more than once), * and trailing traverses have been removed at this point. * * However, we may removed a trailing traverse back to an anonymous * station. FIXME: It's not helpful to fail to point to a station * in such a case - it would be much nicer to look through the list * of trailing traverses in such a case to find a relevant traverse * and then report a station name from there. */ /* SVX_ASSERT(!TSTBIT(stn->name->sflags, SFLAGS_ANON)); */ if (stn->name->ident) { if (!fNotAttached) { fNotAttached = fTrue; /* TRANSLATORS: Here "station" is a survey station, not a train * station. */ puts(msg(/*The following survey stations are not attached to a fixed point:*/71)); } puts(sprint_prefix(stn->name)); } } exit(EXIT_FAILURE); } { component *comp = component_list; #ifdef DEBUG_ARTIC printf("\nDump of %d components:\n", cComponents); #endif while (comp) { node *list = NULL, *listend = NULL; articulation *art; component * old_comp; #ifdef DEBUG_ARTIC printf("Component:\n"); #endif SVX_ASSERT(comp->artic); art = comp->artic; while (art) { articulation * old_art; #ifdef DEBUG_ARTIC printf(" Articulation (%p):\n", art->stnlist); #endif SVX_ASSERT(art->stnlist); if (listend) { listend->next = art->stnlist; art->stnlist->prev = listend; } else { list = art->stnlist; } FOR_EACH_STN(stn, art->stnlist) { #ifdef DEBUG_ARTIC printf(" %d %p (", stn->colour, stn); print_prefix(stn->name); printf(")\n"); #endif listend = stn; } old_art = art; art = art->next; osfree(old_art); } #ifdef DEBUG_ARTIC putnl(); FOR_EACH_STN(stn, list) { printf("MX: %c %p (", fixed(stn)?'*':' ', stn); print_prefix(stn->name); printf(")\n"); } #endif solve_matrix(list); #ifdef DEBUG_ARTIC putnl(); FOR_EACH_STN(stn, list) { printf("%c %p (", fixed(stn)?'*':' ', stn); print_prefix(stn->name); printf(")\n"); } #endif listend->next = stnlist; if (stnlist) stnlist->prev = listend; stnlist = list; old_comp = comp; comp = comp->next; osfree(old_comp); } #ifdef DEBUG_ARTIC printf("done articulating\n"); #endif } #ifdef DEBUG_ARTIC /* test articulation */ FOR_EACH_STN(stn, stnlist) { int d; int f; if (stn->name->ident && TSTBIT(stn->name->sflags, SFLAGS_FIXED)) { stn->colour = 1; } else { stn->colour = 0; } f = 0; for (d = 0; d < 3; d++) { if (stn->leg[d]) { if (f) { printf("awooga - gap in legs\n"); } if (stn->leg[d]->l.reverse & FLAG_ARTICULATION) { if (!(reverse_leg(stn->leg[d])->l.reverse & FLAG_ARTICULATION)) { printf("awooga - bad articulation (one way art)\n"); } } else { if (reverse_leg(stn->leg[d])->l.reverse & FLAG_ARTICULATION) { printf("awooga - bad articulation (one way art)\n"); } } } else { f = 1; } } } colour = 2; while (1) { int c; int f; do { c = 0; FOR_EACH_STN(stn, stnlist) { int d; f = 0; for (d = 0; d < 3; d++) { if (stn->leg[d]) { node *stn2 = stn->leg[d]->l.to; if (f) { printf("awooga - gap in legs\n"); } if (stn2->colour) { if (!(stn->leg[d]->l.reverse & FLAG_ARTICULATION)) { if (stn->colour == 0) { stn->colour = stn2->colour; c++; } } } } else { f = 1; } } } } while (c); /* colour bits */ FOR_EACH_STN(stn, stnlist) { if (stn->colour == 0) break; } if (!stn) break; /* all coloured */ stn->colour = colour++; } FOR_EACH_STN(stn, stnlist) { int d; int f; f = 0; for (d = 0; d < 3; d++) { if (stn->leg[d]) { if (f) { printf("awooga - gap in legs\n"); } #ifdef DEBUG_ARTIC if (stn->leg[d]->l.reverse & FLAG_ARTICULATION) { node *stn2 = stn->leg[d]->l.to; printf("art: %ld %ld [%p] ", stn->colour, stn2->colour, stn); print_prefix(stn->name); printf(" - [%p] ", stn2); print_prefix(stn2->name); printf("\n"); } #endif } else { f = 1; } } } #endif FOR_EACH_STN(stn, stnlist) { SVX_ASSERT(fixed(stn)); } } survex-1.4.4/src/useful.h0000644000175000017500000001056214141575516012255 00000000000000/* useful.h * Lots of oddments that come in handy generally * Copyright (C) 1993-2003,2004,2010,2011,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* only include once */ #ifndef USEFUL_H #define USEFUL_H #include #if HAVE_STDINT_H # include #endif #include /* for Borland C which #defines max() & min() there */ #include #include #include "osalloc.h" /* Macro to allow easy building of macros contain multiple statements, such * that the likes of “if (x == y) macro1(x); else x = 2;†works properly */ #define BLK(X) do {X} while(0) /* Macro to do nothing, but avoid compiler warnings about empty if bodies &c */ #define NOP (void)0 /* In C++ code, #include and use std::max and std::min instead. */ #ifndef __cplusplus /* Return max/min of two numbers. */ /* May be defined already (e.g. by Borland C in stdlib.h) */ /* NB Bad news if X or Y has side-effects... */ # ifndef max # define max(X, Y) ((X) > (Y) ? (X) : (Y)) # endif # ifndef min # define min(X, Y) ((X) < (Y) ? (X) : (Y)) # endif #endif /* M_PI, etc may be defined in math.h */ #ifndef M_PI # ifdef PI /* MSVC defines PI IIRC */ # define M_PI PI # else # define M_PI 3.14159265358979323846264338327950288419716939937510582097494459 # endif #endif #ifndef M_PI_2 # define M_PI_2 (M_PI / 2.0) #endif #ifndef M_PI_4 # define M_PI_4 (M_PI / 4.0) #endif #define MM_PER_INCH 25.4 /* exact value */ #define METRES_PER_FOOT 0.3048 /* exact value */ /* DJGPP needs these: */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #endif /* !EXIT_FAILURE */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* !EXIT_SUCCESS */ #ifndef SEEK_SET # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_END 2 #endif /* !SEEK_SET */ /* Older UNIX libraries and DJGPP libraries have HUGE instead of HUGE_VAL */ #ifndef HUGE_VAL # ifdef HUGE # define HUGE_VAL HUGE # else # error Neither HUGE_VAL nor HUGE is defined # endif #endif #include "ostypes.h" #define putnl() putchar('\n') /* print a newline char */ #define fputnl(FH) PUTC('\n', (FH)) /* print a newline char to a file */ /* print a line followed by a newline char to a file */ #define fputsnl(SZ, FH) BLK(fputs((SZ), (FH)); PUTC('\n', (FH));) #define sqrd(X) ((X) * (X)) /* macro to square things */ /* 2D Euclidean distance */ #ifndef HAVE_HYPOT # define hypot(X, Y) sqrt(sqrd((double)(X)) + sqrd((double)(Y))) #endif #define rad(X) ((M_PI / 180.0) * (X)) /* convert from degrees to radians */ #define deg(X) ((180.0 / M_PI) * (X)) /* convert from radians to degrees */ /* macro to convert argument to a string literal */ #define STRING(X) STRING_(X) #define STRING_(X) #X #include "osdepend.h" #ifndef WORDS_BIGENDIAN # define put16(W, FH) BLK(int16_t w = (W); fwrite(&w, 2, 1, (FH));) # define put32(W, FH) BLK(int32_t w = (W); fwrite(&w, 4, 1, (FH));) static inline int16_t get16(FILE *fh) { int16_t w; if (fread(&w, 2, 1, fh) == 0) { /* We check feof() and ferror() afterwards, so checking the return * value achieves nothing, but we get a warning from glibc's * _FORTIFY_SOURCE if we don't pretend to. */ } return w; } static inline int32_t get32(FILE *fh) { int32_t w; if (fread(&w, 4, 1, fh) == 0) { /* We check feof() and ferror() afterwards, so checking the return * value achieves nothing, but we get a warning from glibc's * _FORTIFY_SOURCE if we don't pretend to. */ } return w; } #else void useful_put16(int16_t, FILE *); void useful_put32(int32_t, FILE *); int16_t useful_get16(FILE *); int32_t useful_get32(FILE *); # define put16(W, FH) useful_put16(W, FH) # define put32(W, FH) useful_put32(W, FH) # define get16(FH) useful_get16(FH) # define get32(FH) useful_get32(FH) #endif #endif /* !USEFUL_H */ survex-1.4.4/src/rotate.xbm0000644000175000017500000000157314141575516012611 00000000000000#define rotate_width 32 #define rotate_height 32 static unsigned char rotate_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xf8, 0x07, 0x40, 0x10, 0x10, 0x04, 0x40, 0x08, 0x20, 0x04, 0x40, 0x10, 0x10, 0x04, 0x40, 0xe0, 0x0f, 0x04, 0x40, 0x01, 0x00, 0x05, 0xc0, 0x06, 0xc0, 0x06, 0x40, 0x18, 0x30, 0x04, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/network.h0000644000175000017500000000154113346142325012432 00000000000000/* network.h * SURVEX Network reduction routines * Copyright (C) 1994,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void remove_subnets(void); void replace_subnets(void); survex-1.4.4/src/netskel.h0000644000175000017500000000152613346142325012411 00000000000000/* netskel.h * SURVEX Network reduction routines * Copyright (C) 1994,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void solve_network(void /*node *stnlist*/); survex-1.4.4/src/igrf13coeffs.txt0000644000175000017500000011727714141575516013636 00000000000000# 13th Generation International Geomagnetic Reference Field Schmidt semi-normalised spherical harmonic coefficients, degree n=1,13 # in units nanoTesla for IGRF and definitive DGRF main-field models (degree n=1,8 nanoTesla/year for secular variation (SV)) c/s deg ord IGRF IGRF IGRF IGRF IGRF IGRF IGRF IGRF IGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF IGRF SV g/h n m 1900.0 1905.0 1910.0 1915.0 1920.0 1925.0 1930.0 1935.0 1940.0 1945.0 1950.0 1955.0 1960.0 1965.0 1970.0 1975.0 1980.0 1985.0 1990.0 1995.0 2000.0 2005.0 2010.0 2015.0 2020.0 2020-25 g 1 0 -31543 -31464 -31354 -31212 -31060 -30926 -30805 -30715 -30654 -30594 -30554 -30500 -30421 -30334 -30220 -30100 -29992 -29873 -29775 -29692 -29619.4 -29554.63 -29496.57 -29441.46 -29404.8 5.7 g 1 1 -2298 -2298 -2297 -2306 -2317 -2318 -2316 -2306 -2292 -2285 -2250 -2215 -2169 -2119 -2068 -2013 -1956 -1905 -1848 -1784 -1728.2 -1669.05 -1586.42 -1501.77 -1450.9 7.4 h 1 1 5922 5909 5898 5875 5845 5817 5808 5812 5821 5810 5815 5820 5791 5776 5737 5675 5604 5500 5406 5306 5186.1 5077.99 4944.26 4795.99 4652.5 -25.9 g 2 0 -677 -728 -769 -802 -839 -893 -951 -1018 -1106 -1244 -1341 -1440 -1555 -1662 -1781 -1902 -1997 -2072 -2131 -2200 -2267.7 -2337.24 -2396.06 -2445.88 -2499.6 -11.0 g 2 1 2905 2928 2948 2956 2959 2969 2980 2984 2981 2990 2998 3003 3002 2997 3000 3010 3027 3044 3059 3070 3068.4 3047.69 3026.34 3012.20 2982.0 -7.0 h 2 1 -1061 -1086 -1128 -1191 -1259 -1334 -1424 -1520 -1614 -1702 -1810 -1898 -1967 -2016 -2047 -2067 -2129 -2197 -2279 -2366 -2481.6 -2594.50 -2708.54 -2845.41 -2991.6 -30.2 g 2 2 924 1041 1176 1309 1407 1471 1517 1550 1566 1578 1576 1581 1590 1594 1611 1632 1663 1687 1686 1681 1670.9 1657.76 1668.17 1676.35 1677.0 -2.1 h 2 2 1121 1065 1000 917 823 728 644 586 528 477 381 291 206 114 25 -68 -200 -306 -373 -413 -458.0 -515.43 -575.73 -642.17 -734.6 -22.4 g 3 0 1022 1037 1058 1084 1111 1140 1172 1206 1240 1282 1297 1302 1302 1297 1287 1276 1281 1296 1314 1335 1339.6 1336.30 1339.85 1350.33 1363.2 2.2 g 3 1 -1469 -1494 -1524 -1559 -1600 -1645 -1692 -1740 -1790 -1834 -1889 -1944 -1992 -2038 -2091 -2144 -2180 -2208 -2239 -2267 -2288.0 -2305.83 -2326.54 -2352.26 -2381.2 -5.9 h 3 1 -330 -357 -389 -421 -445 -462 -480 -494 -499 -499 -476 -462 -414 -404 -366 -333 -336 -310 -284 -262 -227.6 -198.86 -160.40 -115.29 -82.1 6.0 g 3 2 1256 1239 1223 1212 1205 1202 1205 1215 1232 1255 1274 1288 1289 1292 1278 1260 1251 1247 1248 1249 1252.1 1246.39 1232.10 1225.85 1236.2 3.1 h 3 2 3 34 62 84 103 119 133 146 163 186 206 216 224 240 251 262 271 284 293 302 293.4 269.72 251.75 245.04 241.9 -1.1 g 3 3 572 635 705 778 839 881 907 918 916 913 896 882 878 856 838 830 833 829 802 759 714.5 672.51 633.73 581.69 525.7 -12.0 h 3 3 523 480 425 360 293 229 166 101 43 -11 -46 -83 -130 -165 -196 -223 -252 -297 -352 -427 -491.1 -524.72 -537.03 -538.70 -543.4 0.5 g 4 0 876 880 884 887 889 891 896 903 914 944 954 958 957 957 952 946 938 936 939 940 932.3 920.55 912.66 907.42 903.0 -1.2 g 4 1 628 643 660 678 695 711 727 744 762 776 792 796 800 804 800 791 782 780 780 780 786.8 797.96 808.97 813.68 809.5 -1.6 h 4 1 195 203 211 218 220 216 205 188 169 144 136 133 135 148 167 191 212 232 247 262 272.6 282.07 286.48 283.54 281.9 -0.1 g 4 2 660 653 644 631 616 601 584 565 550 544 528 510 504 479 461 438 398 361 325 290 250.0 210.65 166.58 120.49 86.3 -5.9 h 4 2 -69 -77 -90 -109 -134 -163 -195 -226 -252 -276 -278 -274 -278 -269 -266 -265 -257 -249 -240 -236 -231.9 -225.23 -211.03 -188.43 -158.4 6.5 g 4 3 -361 -380 -400 -416 -424 -426 -422 -415 -405 -421 -408 -397 -394 -390 -395 -405 -419 -424 -423 -418 -403.0 -379.86 -356.83 -334.85 -309.4 5.2 h 4 3 -210 -201 -189 -173 -153 -130 -109 -90 -72 -55 -37 -23 3 13 26 39 53 69 84 97 119.8 145.15 164.46 180.95 199.7 3.6 g 4 4 134 146 160 178 199 217 234 249 265 304 303 290 269 252 234 216 199 170 141 122 111.3 100.00 89.40 70.38 48.0 -5.1 h 4 4 -75 -65 -55 -51 -57 -70 -90 -114 -141 -178 -210 -230 -255 -269 -279 -288 -297 -297 -299 -306 -303.8 -305.36 -309.72 -329.23 -349.7 -5.0 g 5 0 -184 -192 -201 -211 -221 -230 -237 -241 -241 -253 -240 -229 -222 -219 -216 -218 -218 -214 -214 -214 -218.8 -227.00 -230.87 -232.91 -234.3 -0.3 g 5 1 328 328 327 327 326 326 327 329 334 346 349 360 362 358 359 356 357 355 353 352 351.4 354.41 357.29 360.14 363.2 0.5 h 5 1 -210 -193 -172 -148 -122 -96 -72 -51 -33 -12 3 15 16 19 26 31 46 47 46 46 43.8 42.72 44.58 46.98 47.7 0.0 g 5 2 264 259 253 245 236 226 218 211 208 194 211 230 242 254 262 264 261 253 245 235 222.3 208.95 200.26 192.35 187.8 -0.6 h 5 2 53 56 57 58 58 58 60 64 71 95 103 110 125 128 139 148 150 150 154 165 171.9 180.25 189.01 196.98 208.3 2.5 g 5 3 5 -1 -9 -16 -23 -28 -32 -33 -33 -20 -20 -23 -26 -31 -42 -59 -74 -93 -109 -118 -130.4 -136.54 -141.05 -140.94 -140.7 0.2 h 5 3 -33 -32 -33 -34 -38 -44 -53 -64 -75 -67 -87 -98 -117 -126 -139 -152 -151 -154 -153 -143 -133.1 -123.45 -118.06 -119.14 -121.2 -0.6 g 5 4 -86 -93 -102 -111 -119 -125 -131 -136 -141 -142 -147 -152 -156 -157 -160 -159 -162 -164 -165 -166 -168.6 -168.05 -163.17 -157.40 -151.2 1.3 h 5 4 -124 -125 -126 -126 -125 -122 -118 -115 -113 -119 -122 -121 -114 -97 -91 -83 -78 -75 -69 -55 -39.3 -19.57 -0.01 15.98 32.3 3.0 g 5 5 -16 -26 -38 -51 -62 -69 -74 -76 -76 -82 -76 -69 -63 -62 -56 -49 -48 -46 -36 -17 -12.9 -13.55 -8.03 4.30 13.5 0.9 h 5 5 3 11 21 32 43 51 58 64 69 82 80 78 81 81 83 88 92 95 97 107 106.3 103.85 101.04 100.12 98.9 0.3 g 6 0 63 62 62 61 61 61 60 59 57 59 54 47 46 45 43 45 48 53 61 68 72.3 73.60 72.78 69.55 66.0 -0.5 g 6 1 61 60 58 57 55 54 53 53 54 57 57 57 58 61 64 66 66 65 65 67 68.2 69.56 68.69 67.57 65.5 -0.3 h 6 1 -9 -7 -5 -2 0 3 4 4 4 6 -1 -9 -10 -11 -12 -13 -15 -16 -16 -17 -17.4 -20.33 -20.90 -20.61 -19.1 0.0 g 6 2 -11 -11 -11 -10 -10 -9 -9 -8 -7 6 4 3 1 8 15 28 42 51 59 68 74.2 76.74 75.92 72.79 72.9 0.4 h 6 2 83 86 89 93 96 99 102 104 105 100 99 96 99 100 100 99 93 88 82 72 63.7 54.75 44.18 33.30 25.1 -1.6 g 6 3 -217 -221 -224 -228 -233 -238 -242 -246 -249 -246 -247 -247 -237 -228 -212 -198 -192 -185 -178 -170 -160.9 -151.34 -141.40 -129.85 -121.5 1.3 h 6 3 2 4 5 8 11 14 19 25 33 16 33 48 60 68 72 75 71 69 69 67 65.1 63.63 61.54 58.74 52.8 -1.3 g 6 4 -58 -57 -54 -51 -46 -40 -32 -25 -18 -25 -16 -8 -1 4 2 1 4 4 3 -1 -5.9 -14.58 -22.83 -28.93 -36.2 -1.4 h 6 4 -35 -32 -29 -26 -22 -18 -16 -15 -15 -9 -12 -16 -20 -32 -37 -41 -43 -48 -52 -58 -61.2 -63.53 -66.26 -66.64 -64.5 0.8 g 6 5 59 57 54 49 44 39 32 25 18 21 12 7 -2 1 3 6 14 16 18 19 16.9 14.58 13.10 13.14 13.5 0.0 h 6 5 36 32 28 23 18 13 8 4 0 -16 -12 -12 -11 -8 -6 -4 -2 -1 1 1 0.7 0.24 3.02 7.35 8.9 0.0 g 6 6 -90 -92 -95 -98 -101 -103 -104 -106 -107 -104 -105 -107 -113 -111 -112 -111 -108 -102 -96 -93 -90.4 -86.36 -78.09 -70.85 -64.7 0.9 h 6 6 -69 -67 -65 -62 -57 -52 -46 -40 -33 -39 -30 -24 -17 -7 1 11 17 21 24 36 43.8 50.94 55.40 62.41 68.1 1.0 g 7 0 70 70 71 72 73 73 74 74 74 70 65 65 67 75 72 71 72 74 77 77 79.0 79.88 80.44 81.29 80.6 -0.1 g 7 1 -55 -54 -54 -54 -54 -54 -54 -53 -53 -40 -55 -56 -56 -57 -57 -56 -59 -62 -64 -72 -74.0 -74.46 -75.00 -75.99 -76.7 -0.2 h 7 1 -45 -46 -47 -48 -49 -50 -51 -52 -52 -45 -35 -50 -55 -61 -70 -77 -82 -83 -80 -69 -64.6 -61.14 -57.80 -54.27 -51.5 0.6 g 7 2 0 0 1 2 2 3 4 4 4 0 2 2 5 4 1 1 2 3 2 1 0.0 -1.65 -4.55 -6.79 -8.2 0.0 h 7 2 -13 -14 -14 -14 -14 -14 -15 -17 -18 -18 -17 -24 -28 -27 -27 -26 -27 -27 -26 -25 -24.2 -22.57 -21.20 -19.53 -16.9 0.6 g 7 3 34 33 32 31 29 27 25 23 20 0 1 10 15 13 14 16 21 24 26 28 33.3 38.73 45.24 51.82 56.5 0.7 h 7 3 -10 -11 -12 -12 -13 -14 -14 -14 -14 2 0 -4 -6 -2 -4 -5 -5 -2 0 4 6.2 6.82 6.54 5.59 2.2 -0.8 g 7 4 -41 -41 -40 -38 -37 -35 -34 -33 -31 -29 -40 -32 -32 -26 -22 -14 -12 -6 -1 5 9.1 12.30 14.00 15.07 15.8 0.1 h 7 4 -1 0 1 2 4 5 6 7 7 6 10 8 7 6 8 10 16 20 21 24 24.0 25.35 24.96 24.45 23.5 -0.2 g 7 5 -21 -20 -19 -18 -16 -14 -12 -11 -9 -10 -7 -11 -7 -6 -2 0 1 4 5 4 6.9 9.37 10.46 9.32 6.4 -0.5 h 7 5 28 28 28 28 28 29 29 29 29 28 36 28 23 26 23 22 18 17 17 17 14.8 10.93 7.03 3.27 -2.2 -1.1 g 7 6 18 18 18 19 19 19 18 18 17 15 5 9 17 13 13 12 11 10 9 8 7.3 5.42 1.64 -2.88 -7.2 -0.8 h 7 6 -12 -12 -13 -15 -16 -17 -18 -19 -20 -17 -18 -20 -18 -23 -23 -23 -23 -23 -23 -24 -25.4 -26.32 -27.61 -27.50 -27.2 0.1 g 7 7 6 6 6 6 6 6 6 6 5 29 19 18 8 1 -2 -5 -2 0 0 -2 -1.2 1.94 4.92 6.61 9.8 0.8 h 7 7 -22 -22 -22 -22 -22 -21 -20 -19 -19 -22 -16 -18 -17 -12 -11 -12 -10 -7 -4 -6 -5.8 -4.64 -3.28 -2.32 -1.8 0.3 g 8 0 11 11 11 11 11 11 11 11 11 13 22 11 15 13 14 14 18 21 23 25 24.4 24.80 24.41 23.98 23.7 0.0 g 8 1 8 8 8 8 7 7 7 7 7 7 15 9 6 5 6 6 6 6 5 6 6.6 7.62 8.21 8.89 9.7 0.1 h 8 1 8 8 8 8 8 8 8 8 8 12 5 10 11 7 7 6 7 8 10 11 11.9 11.20 10.84 10.04 8.4 -0.2 g 8 2 -4 -4 -4 -4 -3 -3 -3 -3 -3 -8 -4 -6 -4 -4 -2 -1 0 0 -1 -6 -9.2 -11.73 -14.50 -16.78 -17.6 -0.1 h 8 2 -14 -15 -15 -15 -15 -15 -15 -15 -14 -21 -22 -15 -14 -12 -15 -16 -18 -19 -19 -21 -21.5 -20.88 -20.03 -18.26 -15.3 0.6 g 8 3 -9 -9 -9 -9 -9 -9 -9 -9 -10 -5 -1 -14 -11 -14 -13 -12 -11 -11 -10 -9 -7.9 -6.88 -5.59 -3.16 -0.5 0.4 h 8 3 7 7 6 6 6 6 5 5 5 -12 0 5 7 9 6 4 4 5 6 8 8.5 9.83 11.83 13.18 12.8 -0.2 g 8 4 1 1 1 2 2 2 2 1 1 9 11 6 2 0 -3 -8 -7 -9 -12 -14 -16.6 -18.11 -19.34 -20.56 -21.1 -0.1 h 8 4 -13 -13 -13 -13 -14 -14 -14 -15 -15 -7 -21 -23 -18 -16 -17 -19 -22 -23 -22 -23 -21.5 -19.71 -17.41 -14.60 -11.7 0.5 g 8 5 2 2 2 3 4 4 5 6 6 7 15 10 10 8 5 4 4 4 3 9 9.1 10.17 11.61 13.33 15.3 0.4 h 8 5 5 5 5 5 5 5 5 5 5 2 -8 3 4 4 6 6 9 11 12 15 15.5 16.22 16.71 16.16 14.9 -0.3 g 8 6 -9 -8 -8 -8 -7 -7 -6 -6 -5 -10 -13 -7 -5 -1 0 0 3 4 4 6 7.0 9.36 10.85 11.76 13.7 0.3 h 8 6 16 16 16 16 17 17 18 18 19 18 17 23 23 24 21 18 16 14 12 11 8.9 7.61 6.96 5.69 3.6 -0.4 g 8 7 5 5 5 6 6 7 8 8 9 7 5 6 10 11 11 10 6 4 2 -5 -7.9 -11.25 -14.05 -15.98 -16.5 -0.1 h 8 7 -5 -5 -5 -5 -5 -5 -5 -5 -5 3 -4 -4 1 -3 -6 -10 -13 -15 -16 -16 -14.9 -12.76 -10.74 -9.10 -6.9 0.5 g 8 8 8 8 8 8 8 8 8 7 7 2 -1 9 8 4 3 1 -1 -4 -6 -7 -7.0 -4.87 -3.54 -2.02 -0.3 0.4 h 8 8 -18 -18 -18 -18 -19 -19 -19 -19 -19 -11 -17 -13 -20 -17 -16 -17 -15 -11 -10 -4 -2.1 -0.06 1.64 2.26 2.8 0.0 g 9 0 8 8 8 8 8 8 8 8 8 5 3 4 4 8 8 7 5 5 4 4 5.0 5.58 5.50 5.33 5.0 0.0 g 9 1 10 10 10 10 10 10 10 10 10 -21 -7 9 6 10 10 10 10 10 9 9 9.4 9.76 9.45 8.83 8.4 0.0 h 9 1 -20 -20 -20 -20 -20 -20 -20 -20 -21 -27 -24 -11 -18 -22 -21 -21 -21 -21 -20 -20 -19.7 -20.11 -20.54 -21.77 -23.4 0.0 g 9 2 1 1 1 1 1 1 1 1 1 1 -1 -4 0 2 2 2 1 1 1 3 3.0 3.58 3.45 3.02 2.9 0.0 h 9 2 14 14 14 14 14 14 14 15 15 17 19 12 12 15 16 16 16 15 15 15 13.4 12.69 11.51 10.76 11.0 0.0 g 9 3 -11 -11 -11 -11 -11 -11 -12 -12 -12 -11 -25 -5 -9 -13 -12 -12 -12 -12 -12 -10 -8.4 -6.94 -5.27 -3.22 -1.5 0.0 h 9 3 5 5 5 5 5 5 5 5 5 29 12 7 2 7 6 7 9 9 11 12 12.5 12.67 12.75 11.74 9.8 0.0 g 9 4 12 12 12 12 12 12 12 11 11 3 10 2 1 10 10 10 9 9 9 8 6.3 5.01 3.13 0.67 -1.1 0.0 h 9 4 -3 -3 -3 -3 -3 -3 -3 -3 -3 -9 2 6 0 -4 -4 -4 -5 -6 -7 -6 -6.2 -6.72 -7.14 -6.74 -5.1 0.0 g 9 5 1 1 1 1 1 1 1 1 1 16 5 4 4 -1 -1 -1 -3 -3 -4 -8 -8.9 -10.76 -12.38 -13.20 -13.2 0.0 h 9 5 -2 -2 -2 -2 -2 -2 -2 -3 -3 4 2 -2 -3 -5 -5 -5 -6 -6 -7 -8 -8.4 -8.16 -7.42 -6.88 -6.3 0.0 g 9 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -3 -5 1 -1 -1 0 -1 -1 -1 -2 -1 -1.5 -1.25 -0.76 -0.10 1.1 0.0 h 9 6 8 8 8 8 9 9 9 9 9 9 8 10 9 10 10 10 9 9 9 8 8.4 8.10 7.97 7.79 7.8 0.0 g 9 7 2 2 2 2 2 2 3 3 3 -4 -2 2 -2 5 3 4 7 7 7 10 9.3 8.76 8.43 8.68 8.8 0.0 h 9 7 10 10 10 10 10 10 10 11 11 6 8 7 8 10 11 11 10 9 8 5 3.8 2.92 2.14 1.04 0.4 0.0 g 9 8 -1 0 0 0 0 0 0 0 1 -3 3 2 3 1 1 1 2 1 1 -2 -4.3 -6.66 -8.42 -9.06 -9.3 0.0 h 9 8 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 -11 -6 0 -4 -2 -3 -6 -7 -7 -8 -8.2 -7.73 -6.08 -3.89 -1.4 0.0 g 9 9 -1 -1 -1 -1 -1 -1 -2 -2 -2 -4 8 5 -1 -2 -1 -2 -5 -5 -6 -8 -8.2 -9.22 -10.08 -10.54 -11.9 0.0 h 9 9 2 2 2 2 2 2 2 2 2 8 -7 5 5 1 1 1 2 2 2 3 4.8 6.01 7.01 8.44 9.6 0.0 g 10 0 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -8 -3 1 -2 -3 -3 -4 -4 -3 -3 -2.6 -2.17 -1.94 -2.01 -1.9 0.0 g 10 1 -4 -4 -4 -4 -4 -4 -4 -4 -4 11 4 -5 -3 -3 -3 -3 -4 -4 -4 -6 -6.0 -6.12 -6.24 -6.26 -6.2 0.0 h 10 1 2 2 2 2 2 2 2 2 2 5 13 -4 4 2 1 1 1 1 2 1 1.7 2.19 2.73 3.28 3.4 0.0 g 10 2 2 2 2 2 2 2 2 2 2 1 -1 -1 4 2 2 2 2 3 2 2 1.7 1.42 0.89 0.17 -0.1 0.0 h 10 2 1 1 1 1 1 1 1 1 1 1 -2 0 1 1 1 1 0 0 1 0 0.0 0.10 -0.10 -0.40 -0.2 0.0 g 10 3 -5 -5 -5 -5 -5 -5 -5 -5 -5 2 13 2 0 -5 -5 -5 -5 -5 -5 -4 -3.1 -2.35 -1.07 0.55 1.7 0.0 h 10 3 2 2 2 2 2 2 2 2 2 -20 -10 -8 0 2 3 3 3 3 3 4 4.0 4.46 4.71 4.55 3.6 0.0 g 10 4 -2 -2 -2 -2 -2 -2 -2 -2 -2 -5 -4 -3 -1 -2 -1 -2 -2 -2 -2 -1 -0.5 -0.15 -0.16 -0.55 -0.9 0.0 h 10 4 6 6 6 6 6 6 6 6 6 -1 2 -2 2 6 4 4 6 6 6 5 4.9 4.76 4.44 4.40 4.8 0.0 g 10 5 6 6 6 6 6 6 6 6 6 -1 4 7 4 4 6 5 5 5 4 4 3.7 3.06 2.45 1.70 0.7 0.0 h 10 5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -6 -3 -4 -5 -4 -4 -4 -4 -4 -4 -5 -5.9 -6.58 -7.22 -7.92 -8.6 0.0 g 10 6 4 4 4 4 4 4 4 4 4 8 12 4 6 4 4 4 3 3 3 2 1.0 0.29 -0.33 -0.67 -0.9 0.0 h 10 6 0 0 0 0 0 0 0 0 0 6 6 1 1 0 0 -1 0 0 0 -1 -1.2 -1.01 -0.96 -0.61 -0.1 0.0 g 10 7 0 0 0 0 0 0 0 0 0 -1 3 -2 1 0 1 1 1 1 1 2 2.0 2.06 2.13 2.13 1.9 0.0 h 10 7 -2 -2 -2 -2 -2 -2 -2 -1 -1 -4 -3 -3 -1 -2 -1 -1 -1 -1 -2 -2 -2.9 -3.47 -3.95 -4.16 -4.3 0.0 g 10 8 2 2 2 1 1 1 1 2 2 -3 2 6 -1 2 0 0 2 2 3 5 4.2 3.77 3.09 2.33 1.4 0.0 h 10 8 4 4 4 4 4 4 4 4 4 -2 6 7 6 3 3 3 4 4 3 1 0.2 -0.86 -1.99 -2.85 -3.4 0.0 g 10 9 2 2 2 2 3 3 3 3 3 5 10 -2 2 2 3 3 3 3 3 1 0.3 -0.21 -1.03 -1.80 -2.4 0.0 h 10 9 0 0 0 0 0 0 0 0 0 0 11 -1 0 0 1 1 0 0 -1 -2 -2.2 -2.31 -1.97 -1.12 -0.1 0.0 g 10 10 0 0 0 0 0 0 0 0 0 -2 3 0 0 0 -1 -1 0 0 0 0 -1.1 -2.09 -2.80 -3.59 -3.8 0.0 h 10 10 -6 -6 -6 -6 -6 -6 -6 -6 -6 -2 8 -3 -7 -6 -4 -5 -6 -6 -6 -7 -7.4 -7.93 -8.31 -8.72 -8.8 0.0 g 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 2.95 3.05 3.00 3.0 0.0 g 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.7 -1.60 -1.48 -1.40 -1.4 0.0 h 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.26 0.13 0.00 0.0 0.0 g 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.88 -2.03 -2.30 -2.5 0.0 h 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.44 1.67 2.11 2.5 0.0 g 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.44 1.65 2.08 2.3 0.0 h 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.77 -0.66 -0.60 -0.6 0.0 g 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.31 -0.51 -0.79 -0.9 0.0 h 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.27 -1.76 -1.05 -0.4 0.0 g 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.29 0.54 0.58 0.3 0.0 h 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.90 0.85 0.76 0.6 0.0 g 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.79 -0.79 -0.70 -0.7 0.0 h 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.58 -0.39 -0.20 -0.2 0.0 g 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.53 0.37 0.14 -0.1 0.0 h 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.8 -2.69 -2.51 -2.12 -1.7 0.0 g 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.7 1.80 1.79 1.70 1.4 0.0 h 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.08 -1.27 -1.44 -1.6 0.0 g 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.16 0.12 -0.22 -0.6 0.0 h 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 -1.58 -2.11 -2.57 -3.0 0.0 g 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 0.96 0.75 0.44 0.2 0.0 h 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.90 -1.94 -2.01 -2.0 0.0 g 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.0 3.99 3.75 3.49 3.1 0.0 h 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.39 -1.86 -2.34 -2.6 0.0 g 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.2 -2.15 -2.12 -2.09 -2.0 0.0 g 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.29 -0.21 -0.16 -0.1 0.0 h 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.55 -0.87 -1.08 -1.2 0.0 g 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.21 0.30 0.46 0.5 0.0 h 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.23 0.27 0.37 0.5 0.0 g 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.89 1.04 1.23 1.3 0.0 h 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5 2.38 2.13 1.75 1.4 0.0 g 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.38 -0.63 -0.89 -1.2 0.0 h 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.63 -2.49 -2.19 -1.8 0.0 g 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.96 0.95 0.85 0.7 0.0 h 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.61 0.49 0.27 0.1 0.0 g 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.30 -0.11 0.10 0.3 0.0 h 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.40 0.59 0.72 0.8 0.0 g 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.46 0.52 0.54 0.5 0.0 h 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.01 0.00 -0.09 -0.2 0.0 g 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.35 -0.39 -0.37 -0.3 0.0 h 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.02 0.13 0.29 0.6 0.0 g 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.36 -0.37 -0.43 -0.5 0.0 h 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.28 0.27 0.23 0.2 0.0 g 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0.08 0.21 0.22 0.1 0.0 h 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.87 -0.86 -0.89 -0.9 0.0 g 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.49 -0.77 -0.94 -1.1 0.0 h 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.34 -0.23 -0.16 0.0 0.0 g 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.08 0.04 -0.03 -0.3 0.0 h 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8 0.88 0.87 0.72 0.5 0.0 g 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.16 -0.09 -0.02 0.1 0.0 g 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.88 -0.89 -0.92 -0.9 0.0 h 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.76 -0.87 -0.88 -0.9 0.0 g 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.30 0.31 0.42 0.5 0.0 h 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.33 0.30 0.49 0.6 0.0 g 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.28 0.42 0.63 0.7 0.0 h 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.8 1.72 1.66 1.56 1.4 0.0 g 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.43 -0.45 -0.42 -0.3 0.0 h 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.54 -0.59 -0.50 -0.4 0.0 g 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.18 1.08 0.96 0.8 0.0 h 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.0 -1.07 -1.14 -1.24 -1.3 0.0 g 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.37 -0.31 -0.19 0.0 0.0 h 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.04 -0.07 -0.10 -0.1 0.0 g 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.75 0.78 0.81 0.8 0.0 h 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.63 0.54 0.42 0.3 0.0 g 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.26 -0.18 -0.13 0.0 0.0 h 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.21 0.10 -0.04 -0.1 0.0 g 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.35 0.38 0.38 0.4 0.0 h 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0.53 0.49 0.48 0.5 0.0 g 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.05 0.02 0.08 0.1 0.0 h 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.38 0.44 0.48 0.5 0.0 g 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0.41 0.42 0.46 0.5 0.0 h 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.22 -0.25 -0.30 -0.4 0.0 g 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 -0.10 -0.26 -0.35 -0.5 0.0 h 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.57 -0.53 -0.43 -0.4 0.0 g 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 -0.18 -0.26 -0.36 -0.4 0.0 h 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.82 -0.79 -0.71 -0.6 0.0 survex-1.4.4/src/osalloc.h0000644000175000017500000000341414141575516012404 00000000000000/* osalloc.h * Function prototypes for OS dep. malloc etc - funcs in error.c * Copyright (C) 1996,1997,2001,2003,2004,2010 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OSALLOC_H /* only include once */ #define OSALLOC_H #ifdef __cplusplus extern "C" { #endif /* define TOMBSTONES to enable tombstones on malloc blocks * for bounds checking */ /*#define TOMBSTONES 1*/ #include #include "osdepend.h" /* OSSIZE_T is to osmalloc, etc what size_t is to malloc, etc */ #ifndef TOMBSTONES # define osfree(p) free((p)) # define xosmalloc(s) malloc((s)) # define xosrealloc(p, s) realloc((p), (s)) #else void osfree(void *p); /* ick: */ # define xosmalloc(s) osmalloc((s)) # define xosrealloc(p, s) osrealloc((p), (s)) #endif #define OSSIZE_T size_t /* NB No extra () around X as sizeof((char*)) doesn't work */ #define ossizeof(X) ((OSSIZE_T)sizeof(X)) /* Allocate like C++ new -- call osnew() eg. osnew(point) */ #define osnew(T) (T*)osmalloc(ossizeof(T)) void *osmalloc(OSSIZE_T); void *osrealloc(void *, OSSIZE_T); char *osstrdup(const char *str); #ifdef __cplusplus } #endif #endif survex-1.4.4/src/gpx.h0000644000175000017500000000246314142356022011537 00000000000000/* gpx.h * Export from Aven as GPX. */ /* Copyright (C) 2005,2013,2014,2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" #include class GPX : public ExportFilter { PJ* pj = NULL; bool in_trkseg = false; const char * trk_name = NULL; public: explicit GPX(const char * input_datum); ~GPX(); const int * passes() const; void header(const char *, const char *, time_t, double, double, double, double, double, double); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void footer(); }; survex-1.4.4/src/commands.h0000644000175000017500000000275014205617674012556 00000000000000/* commands.h * Header file for code for directives * Copyright (C) 1994-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ int get_length_units(int quantity); int get_angle_units(int quantity); extern const real factor_tab[]; extern const int units_to_msgno[]; #define get_units_factor(U) (factor_tab[(U)]) #define get_units_string(U) (msg(units_to_msgno[(U)])) void handle_command(void); void default_all(settings *s); void default_units(settings *s); void default_calib(settings *s); void pop_settings(void); void report_declination(settings *p); void copy_on_write_meta(settings *s); extern char *buffer; void get_token(void); void get_token_no_blanks(void); typedef struct { const char *sz; int tok; } sztok; int match_tok(const sztok *tab, int tab_size); #define TABSIZE(T) ((sizeof(T) / sizeof(sztok)) - 1) survex-1.4.4/src/img_hosted.h0000644000175000017500000000200314141575516013063 00000000000000/* img_hosted.h * Build img for use in Survex code * Copyright (C) 2013 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMG_HOSTED_H #define IMG_HOSTED_H #ifdef __cplusplus extern "C" { #endif #define IMG_API_VERSION 1 #include "img.h" int img_error2msg(img_errcode err); #ifdef __cplusplus } #endif #endif /* IMG_HOSTED_H */ survex-1.4.4/src/dump3d.c0000644000175000017500000001432014270423040012120 00000000000000/* dump3d.c */ /* Show raw contents of .3d file in text form */ /* Copyright (C) 2001-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "cmdline.h" #include "date.h" #include "debug.h" #include "filelist.h" #include "img_hosted.h" static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"survey", required_argument, 0, 's'}, {"rewind", no_argument, 0, 'r'}, {"show-dates", no_argument, 0, 'd'}, {"legs", no_argument, 0, 'l'}, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "rdls:" static struct help_msg help[] = { /* <-- */ {HLP_ENCODELONG(0), /*only load the sub-survey with this prefix*/199, 0}, /* TRANSLATORS: --help output for dump3d --rewind option */ {HLP_ENCODELONG(1), /*rewind file and read it a second time*/204, 0}, {HLP_ENCODELONG(2), /*show survey date information (if present)*/396, 0}, {HLP_ENCODELONG(3), /*convert MOVE and LINE into LEG*/486, 0}, {0, 0, 0} }; int main(int argc, char **argv) { char *fnm; img *pimg; img_point pt; img_point from = { 0.0, 0.0, 0.0 }; int code; const char *survey = NULL; bool fRewind = fFalse; bool show_dates = fFalse; bool make_legs = fFalse; msg_init(argv); cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 1, 1); while (1) { int opt = cmdline_getopt(); if (opt == EOF) break; if (opt == 's') survey = optarg; if (opt == 'r') fRewind = fTrue; if (opt == 'd') show_dates = fTrue; if (opt == 'l') make_legs = fTrue; } fnm = argv[optind]; pimg = img_open_survey(fnm, survey); if (!pimg) fatalerror(img_error2msg(img_error()), fnm); printf("TITLE \"%s\"\n", pimg->title); printf("DATE \"%s\"\n", pimg->datestamp); printf("DATE_NUMERIC %ld\n", pimg->datestamp_numeric); if (pimg->cs) printf("CS %s\n", pimg->cs); printf("VERSION %d\n", pimg->version); if (pimg->is_extended_elevation) printf("EXTENDED ELEVATION\n"); printf("SEPARATOR '%c'\n", pimg->separator); printf("--\n"); code = img_BAD; do { if (code == img_STOP) { printf("<<< REWIND <<<\n"); fRewind = fFalse; if (!img_rewind(pimg)) fatalerror(img_error2msg(img_error()), fnm); } do { code = img_read_item(pimg, &pt); switch (code) { case img_MOVE: if (make_legs) { from = pt; } else { printf("MOVE %.2f %.2f %.2f\n", pt.x, pt.y, pt.z); } break; case img_LINE: if (make_legs) { printf("LEG %.2f %.2f %.2f %.2f %.2f %.2f [%s]", from.x, from.y, from.z, pt.x, pt.y, pt.z, pimg->label); from = pt; } else { printf("LINE %.2f %.2f %.2f [%s]", pt.x, pt.y, pt.z, pimg->label); } switch (pimg->style) { case img_STYLE_UNKNOWN: break; case img_STYLE_NORMAL: printf(" STYLE=NORMAL"); break; case img_STYLE_DIVING: printf(" STYLE=DIVING"); break; case img_STYLE_CARTESIAN: printf(" STYLE=CARTESIAN"); break; case img_STYLE_CYLPOLAR: printf(" STYLE=CYLPOLAR"); break; case img_STYLE_NOSURVEY: printf(" STYLE=NOSURVEY"); break; } if (pimg->flags & img_FLAG_SURFACE) printf(" SURFACE"); if (pimg->flags & img_FLAG_DUPLICATE) printf(" DUPLICATE"); if (pimg->flags & img_FLAG_SPLAY) printf(" SPLAY"); if (show_dates && pimg->days1 != -1) { int y, m, d; ymd_from_days_since_1900(pimg->days1, &y, &m, &d); printf(" %04d.%02d.%02d", y, m, d); if (pimg->days1 != pimg->days2) { ymd_from_days_since_1900(pimg->days2, &y, &m, &d); printf("-%04d.%02d.%02d", y, m, d); } } printf("\n"); break; case img_LABEL: printf("NODE %.2f %.2f %.2f [%s]", pt.x, pt.y, pt.z, pimg->label); if (pimg->flags & img_SFLAG_SURFACE) printf(" SURFACE"); if (pimg->flags & img_SFLAG_UNDERGROUND) printf(" UNDERGROUND"); if (pimg->flags & img_SFLAG_ENTRANCE) printf(" ENTRANCE"); if (pimg->flags & img_SFLAG_EXPORTED) printf(" EXPORTED"); if (pimg->flags & img_SFLAG_FIXED) printf(" FIXED"); if (pimg->flags & img_SFLAG_ANON) printf(" ANON"); if (pimg->flags & img_SFLAG_WALL) printf(" WALL"); printf("\n"); break; case img_XSECT: printf("XSECT %.2f %.2f %.2f %.2f [%s]", pimg->l, pimg->r, pimg->u, pimg->d, pimg->label); if (show_dates && pimg->days1 != -1) { int y, m, d; ymd_from_days_since_1900(pimg->days1, &y, &m, &d); printf(" %04d.%02d.%02d", y, m, d); if (pimg->days1 != pimg->days2) { ymd_from_days_since_1900(pimg->days2, &y, &m, &d); printf("-%04d.%02d.%02d", y, m, d); } } printf("\n"); break; case img_XSECT_END: printf("XSECT_END\n"); break; case img_ERROR_INFO: printf("ERROR_INFO #legs %d, len %.2fm, E %.2f H %.2f V %.2f\n", pimg->n_legs, pimg->length, pimg->E, pimg->H, pimg->V); break; case img_BAD: img_close(pimg); fatalerror(img_error2msg(img_error()), fnm); /* fatalerror() won't return, but the compiler can't tell that and * may warn about dropping through into the next case without a * "break;" here. */ break; case img_STOP: printf("STOP\n"); break; default: printf("CODE_0x%02x\n", code); } } while (code != img_STOP); } while (fRewind); img_close(pimg); return 0; } survex-1.4.4/src/brotatemask.xbm0000644000175000017500000000161214141575516013621 00000000000000#define brotatemask_width 32 #define brotatemask_height 32 static unsigned char brotatemask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xff, 0x00, 0xf8, 0x03, 0xfe, 0x00, 0xf8, 0x01, 0xfc, 0x00, 0xf8, 0x03, 0xfe, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xd8, 0xff, 0xdf, 0x00, 0x08, 0xff, 0x8f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x8f, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/rotatezoommask.xbm0000644000175000017500000000162314141575516014366 00000000000000#define rotatezoommask_width 32 #define rotatezoommask_height 32 static unsigned char rotatezoommask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xf9, 0x07, 0xc0, 0x9f, 0xf3, 0x07, 0xc0, 0xcf, 0xe7, 0x07, 0xc0, 0x9f, 0xf3, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xfe, 0xff, 0x06, 0x40, 0xf8, 0x3f, 0x04, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/json.h0000644000175000017500000000234514141575516011723 00000000000000/* js.h * Export from Aven as JSON. */ /* Copyright (C) 2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" class JSON : public ExportFilter { bool in_segment; public: JSON() : in_segment(false) { } const int * passes() const; void header(const char *, const char *, time_t, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void footer(); }; survex-1.4.4/src/gettexttomsg.pl0000755000175000017500000000666314141575516013706 00000000000000#!/usr/bin/perl -w # gettexttomsg.pl # # Copyright (C) 2001,2002,2005,2011,2012,2014,2015 Olly Betts # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA require 5.008; use strict; my %revmsgs = (); my $msgno; open MSG, "../lib/survex.pot" or die $!; while () { if (/^#: n:(\d+)$/) { $msgno = $1; } elsif (defined $msgno && /^msgid\s*"(.*)"/) { $revmsgs{$1} = $msgno; $msgno = undef; } } close MSG; my $die = 0; my $suppress_argc_argv_unused_warnings = 0; my @conditionals; my %macro; # Helper so we can just eval preprocessor expressions. sub pp_defined { exists $macro{$_[0]} // 0 } sub pp_eval { local $_ = shift; # defined is a built-in function in Perl. s/\bdefined\b/pp_defined/g; no strict 'subs'; no warnings; return eval($_); } my $active = 1; while (<>) { if (m!^#\s*(\w+)\s*(.*?)\s*(?:/[/*].*)?$!) { my ($directive, $cond) = ($1, $2); if ($directive eq 'endif') { if (@conditionals == 0) { die "$ARGV:$.: Unmatched #endif\n"; } $active = pop @conditionals; } elsif ($directive eq 'else') { if (@conditionals == 0) { die "$ARGV:$.: Unmatched #else\n"; } $active = (!$active) && $conditionals[-1]; } elsif ($directive eq 'ifdef') { push @conditionals, $active; $active &&= pp_defined($cond); } elsif ($directive eq 'ifndef') { push @conditionals, $active; $active &&= !pp_defined($cond); } elsif ($directive eq 'if') { push @conditionals, $active; $active &&= pp_eval($cond); } elsif ($active) { if ($directive eq 'define') { $cond =~ /^(\w+)\s*(.*)/; $macro{$1} = $2; no warnings; eval "sub $1 { q($2) }"; } elsif ($directive eq 'undef') { $cond =~ /^(\w+)/; no warnings; eval "sub $1 { 0 }"; } } print; next; } if (!$active) { print; next; } if ($suppress_argc_argv_unused_warnings && /^{/) { $suppress_argc_argv_unused_warnings = 0; print "$_ (void)argc;\n (void)argv;\n"; next; } if (/^_getopt_initialize\b/) { $suppress_argc_argv_unused_warnings = 1; } elsif (!/^\s*#/) { while (/\\\n$/) { $_ .= <>; } # very crude - doesn't know about comments, etc s!\b_\("(.*?)"\)!replacement($1)!gse; } elsif (/\s*#\s*define\s+_\(/) { $_ = "#include \"message.h\"\n"; } print; } if ($die) { die "Not all messages found!\n"; } sub replacement { my $msg = shift; $msg =~ s/\\\n//g; my $msgno = ""; if (exists $revmsgs{$msg}) { $msgno = $revmsgs{$msg}; } else { my $tmp = $msg; $tmp =~ s/`(.*?)'/“$1â€/g; $tmp =~ s/(\w)'(\w)/$1’$2/g; if (exists $revmsgs{$tmp}) { $msg = $tmp; $msgno = $revmsgs{$msg}; } else { if (!$die) { print STDERR "Message(s) not found in message file:\n"; $die = 1; } print STDERR "'$msg'\n"; } } return "msg(/*$msg*/$msgno)"; } survex-1.4.4/src/ostypes.h0000644000175000017500000000177213346142325012455 00000000000000/* ostypes.h * Generally useful type definitions * Copyright (C) 1996,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OSTYPES_H /* only include once */ #define OSTYPES_H #ifndef __cplusplus typedef enum { fFalse=0, fTrue=1 } SVXBOOL; # define bool SVXBOOL #else #define fFalse false #define fTrue true #endif #endif survex-1.4.4/src/mainfrm.cc0000644000175000017500000023702414214236745012544 00000000000000// // mainfrm.cc // // Main frame handling for Aven. // // Copyright (C) 2000-2002,2005,2006 Mark R. Shinwell // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "cavernlog.h" #include "mainfrm.h" #include "aven.h" #include "aboutdlg.h" #include "message.h" #include "img_hosted.h" #include "namecompare.h" #include "printing.h" #include "filename.h" #include "useful.h" #include //#include #include #include #include #include #include #ifdef USING_GENERIC_TOOLBAR # include #endif #include #include #include #include #include // XPM files declare the array as static, but we also want it to be const too. // This avoids a compiler warning, and also means the data can go in a // read-only page and be shared between processes. #define static static const #ifndef __WXMSW__ #include "../lib/icons/aven.xpm" #endif #include "../lib/icons/log.xpm" #include "../lib/icons/open.xpm" #include "../lib/icons/open_pres.xpm" #include "../lib/icons/rotation.xpm" #include "../lib/icons/plan.xpm" #include "../lib/icons/elevation.xpm" #include "../lib/icons/defaults.xpm" #include "../lib/icons/names.xpm" #include "../lib/icons/crosses.xpm" #include "../lib/icons/entrances.xpm" #include "../lib/icons/fixed_pts.xpm" #include "../lib/icons/exported_pts.xpm" #include "../lib/icons/ug_legs.xpm" #include "../lib/icons/surface_legs.xpm" #include "../lib/icons/tubes.xpm" #include "../lib/icons/solid_surface.xpm" #include "../lib/icons/pres_frew.xpm" #include "../lib/icons/pres_rew.xpm" #include "../lib/icons/pres_go_back.xpm" #include "../lib/icons/pres_pause.xpm" #include "../lib/icons/pres_go.xpm" #include "../lib/icons/pres_ff.xpm" #include "../lib/icons/pres_fff.xpm" #include "../lib/icons/pres_stop.xpm" #include "../lib/icons/find.xpm" #include "../lib/icons/hideresults.xpm" #include "../lib/icons/survey_tree.xpm" #include "../lib/icons/pres_tree.xpm" #undef static #ifdef __WXMSW__ # define TOOL(x) wxBitmap(x##_xpm) #else # define TOOL(x) wxBITMAP(x) #endif using namespace std; class AvenSplitterWindow : public wxSplitterWindow { MainFrm *parent; public: explicit AvenSplitterWindow(MainFrm *parent_) : wxSplitterWindow(parent_, -1, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH), parent(parent_) { } void OnSplitterDClick(wxSplitterEvent &) { parent->ToggleSidePanel(); } private: DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(AvenSplitterWindow, wxSplitterWindow) EVT_SPLITTER_DCLICK(-1, AvenSplitterWindow::OnSplitterDClick) END_EVENT_TABLE() class EditMarkDlg : public wxDialog { wxTextCtrl * easting, * northing, * altitude; wxTextCtrl * angle, * tilt_angle, * scale, * time; public: // TRANSLATORS: Title of dialog to edit a waypoint in a presentation. EditMarkDlg(wxWindow* parent, const PresentationMark & p) : wxDialog(parent, 500, wmsg(/*Edit Waypoint*/404)) { easting = new wxTextCtrl(this, 601, wxString::Format(wxT("%.3f"), p.GetX())); northing = new wxTextCtrl(this, 602, wxString::Format(wxT("%.3f"), p.GetY())); altitude = new wxTextCtrl(this, 603, wxString::Format(wxT("%.3f"), p.GetZ())); angle = new wxTextCtrl(this, 604, wxString::Format(wxT("%.3f"), p.angle)); tilt_angle = new wxTextCtrl(this, 605, wxString::Format(wxT("%.3f"), p.tilt_angle)); scale = new wxTextCtrl(this, 606, wxString::Format(wxT("%.3f"), p.scale)); if (p.time > 0.0) { time = new wxTextCtrl(this, 607, wxString::Format(wxT("%.3f"), p.time)); } else if (p.time < 0.0) { time = new wxTextCtrl(this, 607, wxString::Format(wxT("*%.3f"), -p.time)); } else { time = new wxTextCtrl(this, 607, wxT("0")); } wxBoxSizer * coords = new wxBoxSizer(wxHORIZONTAL); coords->Add(new wxStaticText(this, 610, wxT("(")), 0, wxALIGN_CENTRE_VERTICAL); coords->Add(easting, 1); coords->Add(new wxStaticText(this, 611, wxT(",")), 0, wxALIGN_CENTRE_VERTICAL); coords->Add(northing, 1); coords->Add(new wxStaticText(this, 612, wxT(",")), 0, wxALIGN_CENTRE_VERTICAL); coords->Add(altitude, 1); coords->Add(new wxStaticText(this, 613, wxT(")")), 0, wxALIGN_CENTRE_VERTICAL); wxBoxSizer* vert = new wxBoxSizer(wxVERTICAL); vert->Add(coords, 0, wxALL, 8); wxBoxSizer * r2 = new wxBoxSizer(wxHORIZONTAL); r2->Add(new wxStaticText(this, 614, wmsg(/*Bearing*/259) + wxT(": ")), 0, wxALIGN_CENTRE_VERTICAL); r2->Add(angle); vert->Add(r2, 0, wxALL, 8); wxBoxSizer * r3 = new wxBoxSizer(wxHORIZONTAL); r3->Add(new wxStaticText(this, 615, wmsg(/*Elevation*/118) + wxT(": ")), 0, wxALIGN_CENTRE_VERTICAL); r3->Add(tilt_angle); vert->Add(r3, 0, wxALL, 8); wxBoxSizer * r4 = new wxBoxSizer(wxHORIZONTAL); r4->Add(new wxStaticText(this, 616, wmsg(/*Scale*/154) + wxT(": ")), 0, wxALIGN_CENTRE_VERTICAL); r4->Add(scale); /* TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint * in a presentation. */ r4->Add(new wxStaticText(this, 617, wmsg(/* (unused in perspective view)*/278)), 0, wxALIGN_CENTRE_VERTICAL); vert->Add(r4, 0, wxALL, 8); wxBoxSizer * r5 = new wxBoxSizer(wxHORIZONTAL); /* TRANSLATORS: Field label in dialog to edit a waypoint in a * presentation. */ r5->Add(new wxStaticText(this, 616, wmsg(/*Time: */279)), 0, wxALIGN_CENTRE_VERTICAL); r5->Add(time); /* TRANSLATORS: units+info after time field in dialog to edit a * waypoint in a presentation. */ r5->Add(new wxStaticText(this, 617, wmsg(/* secs (0 = auto; *6 = 6 times auto)*/282)), 0, wxALIGN_CENTRE_VERTICAL); vert->Add(r5, 0, wxALL, 8); wxBoxSizer * buttons = new wxBoxSizer(wxHORIZONTAL); wxButton* cancel = new wxButton(this, wxID_CANCEL); buttons->Add(cancel, 0, wxALL, 8); wxButton* ok = new wxButton(this, wxID_OK); ok->SetDefault(); buttons->Add(ok, 0, wxALL, 8); vert->Add(buttons, 0, wxALL|wxALIGN_RIGHT); SetAutoLayout(true); SetSizer(vert); vert->SetSizeHints(this); } PresentationMark GetMark() const { double a, t, s, T; Vector3 v(wxAtof(easting->GetValue()), wxAtof(northing->GetValue()), wxAtof(altitude->GetValue())); a = wxAtof(angle->GetValue()); t = wxAtof(tilt_angle->GetValue()); s = wxAtof(scale->GetValue()); wxString str = time->GetValue(); if (!str.empty() && str[0u] == '*') str[0u] = '-'; T = wxAtof(str); return PresentationMark(v, a, t, s, T); } private: DECLARE_EVENT_TABLE() }; // Write a value without trailing zeros after the decimal point. static void write_double(double d, FILE * fh) { char buf[64]; sprintf(buf, "%.21f", d); char * p = strchr(buf, ','); if (p) *p = '.'; size_t l = strlen(buf); while (l > 1 && buf[l - 1] == '0') --l; if (l > 1 && buf[l - 1] == '.') --l; fwrite(buf, l, 1, fh); } class AvenPresList : public wxListCtrl { MainFrm * mainfrm; GfxCore * gfx; vector entries; long current_item; bool modified; bool force_save_as; wxString filename; public: AvenPresList(MainFrm * mainfrm_, wxWindow * parent, GfxCore * gfx_) : wxListCtrl(parent, listctrl_PRES, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_VIRTUAL), mainfrm(mainfrm_), gfx(gfx_), current_item(-1), modified(false), force_save_as(true) { InsertColumn(0, wmsg(/*Easting*/378)); InsertColumn(1, wmsg(/*Northing*/379)); InsertColumn(2, wmsg(/*Altitude*/335)); } void OnBeginLabelEdit(wxListEvent& event) { event.Veto(); // No editting allowed } void OnDeleteItem(wxListEvent& event) { long item = event.GetIndex(); if (current_item == item) { current_item = -1; } else if (current_item > item) { --current_item; } entries.erase(entries.begin() + item); SetItemCount(entries.size()); modified = true; } void OnDeleteAllItems(wxListEvent&) { entries.clear(); SetItemCount(entries.size()); filename = wxString(); modified = false; force_save_as = true; } void OnListKeyDown(wxListEvent& event) { switch (event.GetKeyCode()) { case WXK_DELETE: { long item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); while (item != -1) { DeleteItem(item); // - 1 because the indices were shifted by DeleteItem() item = GetNextItem(item - 1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); } break; } default: //printf("event.GetIndex() = %ld %d\n", event.GetIndex(), event.GetKeyCode()); event.Skip(); } } void OnActivated(wxListEvent& event) { // Jump to this view. long item = event.GetIndex(); gfx->SetView(entries[item]); } void OnFocused(wxListEvent& event) { current_item = event.GetIndex(); } void OnRightClick(wxListEvent& event) { long item = event.GetIndex(); if (item < 0) { AddMark(item, gfx->GetView()); item = 0; } EditMarkDlg edit(mainfrm, entries[item]); if (edit.ShowModal() == wxID_OK) { entries[item] = edit.GetMark(); } } void OnChar(wxKeyEvent& event) { switch (event.GetKeyCode()) { case WXK_INSERT: if (event.GetModifiers() == wxMOD_CONTROL) { if (current_item != -1 && size_t(current_item) < entries.size()) { AddMark(current_item, entries[current_item]); } } else { AddMark(current_item); } break; case WXK_DELETE: // Already handled in OnListKeyDown. break; case WXK_UP: case WXK_DOWN: event.Skip(); break; default: gfx->OnKeyPress(event); } } void AddMark(long item = -1) { AddMark(item, gfx->GetView()); } void AddMark(long item, const PresentationMark & mark) { if (item == -1) item = entries.size(); entries.insert(entries.begin() + item, mark); SetItemCount(entries.size()); modified = true; } virtual wxString OnGetItemText(long item, long column) const { if (item < 0 || item >= (long)entries.size()) return wxString(); const PresentationMark & p = entries[item]; double v; switch (column) { case 0: v = p.GetX(); break; case 1: v = p.GetY(); break; case 2: v = p.GetZ(); break; #if 0 case 3: v = p.angle; break; case 4: v = p.tilt_angle; break; case 5: v = p.scale; break; case 6: v = p.time; break; #endif default: return wxString(); } return wxString::Format(wxT("%ld"), (long)v); } void Save(bool use_default_name) { wxString fnm = filename; if (!use_default_name || force_save_as) { #ifdef __WXMOTIF__ wxString ext(wxT("*.fly")); #else wxString ext = wmsg(/*Aven presentations*/320); ext += wxT("|*.fly"); #endif wxFileDialog dlg(this, wmsg(/*Select an output filename*/319), wxString(), fnm, ext, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() != wxID_OK) return; fnm = dlg.GetPath(); } FILE * fh_pres = wxFopen(fnm, wxT("w")); if (!fh_pres) { wxGetApp().ReportError(wxString::Format(wmsg(/*Error writing to file “%sâ€*/110), fnm.c_str())); return; } vector::const_iterator i; for (i = entries.begin(); i != entries.end(); ++i) { const PresentationMark &p = *i; write_double(p.GetX(), fh_pres); PUTC(' ', fh_pres); write_double(p.GetY(), fh_pres); PUTC(' ', fh_pres); write_double(p.GetZ(), fh_pres); PUTC(' ', fh_pres); write_double(p.angle, fh_pres); PUTC(' ', fh_pres); write_double(p.tilt_angle, fh_pres); PUTC(' ', fh_pres); write_double(p.scale, fh_pres); if (p.time != 0.0) { PUTC(' ', fh_pres); write_double(p.time, fh_pres); } PUTC('\n', fh_pres); } fclose(fh_pres); filename = fnm; modified = false; force_save_as = false; } void New(const wxString &fnm) { DeleteAllItems(); wxFileName::SplitPath(fnm, NULL, NULL, &filename, NULL, wxPATH_NATIVE); filename += wxT(".fly"); force_save_as = true; } bool Load(const wxString &fnm) { FILE * fh_pres = wxFopen(fnm, wxT("r")); if (!fh_pres) { wxString m; m.Printf(wmsg(/*Couldn’t open file “%sâ€*/24), fnm.c_str()); wxGetApp().ReportError(m); return false; } DeleteAllItems(); long item = 0; while (!feof(fh_pres)) { char buf[4096]; size_t i = 0; while (i < sizeof(buf) - 1) { int ch = GETC(fh_pres); if (ch == EOF || ch == '\n' || ch == '\r') break; buf[i++] = ch; } if (i) { buf[i] = 0; double x, y, z, a, t, s, T; int c = sscanf(buf, "%lf %lf %lf %lf %lf %lf %lf", &x, &y, &z, &a, &t, &s, &T); if (c < 6) { char *p = buf; while ((p = strchr(p, '.'))) *p++ = ','; c = sscanf(buf, "%lf %lf %lf %lf %lf %lf %lf", &x, &y, &z, &a, &t, &s, &T); if (c < 6) { DeleteAllItems(); wxGetApp().ReportError(wxString::Format(wmsg(/*Error in format of presentation file “%sâ€*/323), fnm.c_str())); return false; } } if (c == 6) T = 0; AddMark(item, PresentationMark(Vector3(x, y, z), a, t, s, T)); ++item; } } fclose(fh_pres); filename = fnm; modified = false; force_save_as = false; return true; } bool Modified() const { return modified; } bool Empty() const { return entries.empty(); } PresentationMark GetPresMark(int which) { long item = current_item; if (which == MARK_FIRST) { item = 0; } else if (which == MARK_NEXT) { ++item; } else if (which == MARK_PREV) { --item; } if (item == -1 || item == (long)entries.size()) return PresentationMark(); if (item != current_item) { // Move the focus if (current_item != -1) { wxListCtrl::SetItemState(current_item, wxLIST_STATE_FOCUSED, 0); } wxListCtrl::SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); } return entries[item]; } private: DECLARE_NO_COPY_CLASS(AvenPresList) DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(EditMarkDlg, wxDialog) END_EVENT_TABLE() BEGIN_EVENT_TABLE(AvenPresList, wxListCtrl) EVT_LIST_BEGIN_LABEL_EDIT(listctrl_PRES, AvenPresList::OnBeginLabelEdit) EVT_LIST_DELETE_ITEM(listctrl_PRES, AvenPresList::OnDeleteItem) EVT_LIST_DELETE_ALL_ITEMS(listctrl_PRES, AvenPresList::OnDeleteAllItems) EVT_LIST_KEY_DOWN(listctrl_PRES, AvenPresList::OnListKeyDown) EVT_LIST_ITEM_ACTIVATED(listctrl_PRES, AvenPresList::OnActivated) EVT_LIST_ITEM_FOCUSED(listctrl_PRES, AvenPresList::OnFocused) EVT_LIST_ITEM_RIGHT_CLICK(listctrl_PRES, AvenPresList::OnRightClick) EVT_CHAR(AvenPresList::OnChar) END_EVENT_TABLE() BEGIN_EVENT_TABLE(MainFrm, wxFrame) EVT_TEXT(textctrl_FIND, MainFrm::OnFind) EVT_TEXT_ENTER(textctrl_FIND, MainFrm::OnGotoFound) EVT_MENU(wxID_FIND, MainFrm::OnGotoFound) EVT_MENU(button_HIDE, MainFrm::OnHide) EVT_UPDATE_UI(button_HIDE, MainFrm::OnHideUpdate) EVT_IDLE(MainFrm::OnIdle) EVT_MENU(wxID_OPEN, MainFrm::OnOpen) EVT_MENU(menu_FILE_OPEN_TERRAIN, MainFrm::OnOpenTerrain) EVT_MENU(menu_FILE_LOG, MainFrm::OnShowLog) EVT_MENU(wxID_PRINT, MainFrm::OnPrint) EVT_MENU(menu_FILE_PAGE_SETUP, MainFrm::OnPageSetup) EVT_MENU(menu_FILE_SCREENSHOT, MainFrm::OnScreenshot) // EVT_MENU(wxID_PREFERENCES, MainFrm::OnFilePreferences) EVT_MENU(menu_FILE_EXPORT, MainFrm::OnExport) EVT_MENU(menu_FILE_EXTEND, MainFrm::OnExtend) EVT_MENU(wxID_EXIT, MainFrm::OnQuit) EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, MainFrm::OnMRUFile) EVT_MENU(menu_PRES_NEW, MainFrm::OnPresNew) EVT_MENU(menu_PRES_OPEN, MainFrm::OnPresOpen) EVT_MENU(menu_PRES_SAVE, MainFrm::OnPresSave) EVT_MENU(menu_PRES_SAVE_AS, MainFrm::OnPresSaveAs) EVT_MENU(menu_PRES_MARK, MainFrm::OnPresMark) EVT_MENU(menu_PRES_FREWIND, MainFrm::OnPresFRewind) EVT_MENU(menu_PRES_REWIND, MainFrm::OnPresRewind) EVT_MENU(menu_PRES_REVERSE, MainFrm::OnPresReverse) EVT_MENU(menu_PRES_PLAY, MainFrm::OnPresPlay) EVT_MENU(menu_PRES_FF, MainFrm::OnPresFF) EVT_MENU(menu_PRES_FFF, MainFrm::OnPresFFF) EVT_MENU(menu_PRES_PAUSE, MainFrm::OnPresPause) EVT_MENU(wxID_STOP, MainFrm::OnPresStop) EVT_MENU(menu_PRES_EXPORT_MOVIE, MainFrm::OnPresExportMovie) EVT_UPDATE_UI(menu_PRES_NEW, MainFrm::OnPresNewUpdate) EVT_UPDATE_UI(menu_PRES_OPEN, MainFrm::OnPresOpenUpdate) EVT_UPDATE_UI(menu_PRES_SAVE, MainFrm::OnPresSaveUpdate) EVT_UPDATE_UI(menu_PRES_SAVE_AS, MainFrm::OnPresSaveAsUpdate) EVT_UPDATE_UI(menu_PRES_MARK, MainFrm::OnPresMarkUpdate) EVT_UPDATE_UI(menu_PRES_FREWIND, MainFrm::OnPresFRewindUpdate) EVT_UPDATE_UI(menu_PRES_REWIND, MainFrm::OnPresRewindUpdate) EVT_UPDATE_UI(menu_PRES_REVERSE, MainFrm::OnPresReverseUpdate) EVT_UPDATE_UI(menu_PRES_PLAY, MainFrm::OnPresPlayUpdate) EVT_UPDATE_UI(menu_PRES_FF, MainFrm::OnPresFFUpdate) EVT_UPDATE_UI(menu_PRES_FFF, MainFrm::OnPresFFFUpdate) EVT_UPDATE_UI(menu_PRES_PAUSE, MainFrm::OnPresPauseUpdate) EVT_UPDATE_UI(wxID_STOP, MainFrm::OnPresStopUpdate) EVT_UPDATE_UI(menu_PRES_EXPORT_MOVIE, MainFrm::OnPresExportMovieUpdate) EVT_CLOSE(MainFrm::OnClose) EVT_SET_FOCUS(MainFrm::OnSetFocus) EVT_MENU(menu_ROTATION_TOGGLE, MainFrm::OnToggleRotation) EVT_MENU(menu_ROTATION_REVERSE, MainFrm::OnReverseDirectionOfRotation) EVT_MENU(menu_ORIENT_MOVE_NORTH, MainFrm::OnMoveNorth) EVT_MENU(menu_ORIENT_MOVE_EAST, MainFrm::OnMoveEast) EVT_MENU(menu_ORIENT_MOVE_SOUTH, MainFrm::OnMoveSouth) EVT_MENU(menu_ORIENT_MOVE_WEST, MainFrm::OnMoveWest) EVT_MENU(menu_ORIENT_PLAN, MainFrm::OnPlan) EVT_MENU(menu_ORIENT_ELEVATION, MainFrm::OnElevation) EVT_MENU(menu_ORIENT_DEFAULTS, MainFrm::OnDefaults) EVT_MENU(menu_VIEW_SHOW_LEGS, MainFrm::OnShowSurveyLegs) EVT_MENU(menu_SPLAYS_HIDE, MainFrm::OnHideSplays) EVT_MENU(menu_SPLAYS_SHOW_DASHED, MainFrm::OnShowSplaysDashed) EVT_MENU(menu_SPLAYS_SHOW_FADED, MainFrm::OnShowSplaysFaded) EVT_MENU(menu_SPLAYS_SHOW_NORMAL, MainFrm::OnShowSplaysNormal) EVT_MENU(menu_DUPES_HIDE, MainFrm::OnHideDupes) EVT_MENU(menu_DUPES_SHOW_DASHED, MainFrm::OnShowDupesDashed) EVT_MENU(menu_DUPES_SHOW_FADED, MainFrm::OnShowDupesFaded) EVT_MENU(menu_DUPES_SHOW_NORMAL, MainFrm::OnShowDupesNormal) EVT_MENU(menu_VIEW_SHOW_CROSSES, MainFrm::OnShowCrosses) EVT_MENU(menu_VIEW_SHOW_ENTRANCES, MainFrm::OnShowEntrances) EVT_MENU(menu_VIEW_SHOW_FIXED_PTS, MainFrm::OnShowFixedPts) EVT_MENU(menu_VIEW_SHOW_EXPORTED_PTS, MainFrm::OnShowExportedPts) EVT_MENU(menu_VIEW_SHOW_NAMES, MainFrm::OnShowStationNames) EVT_MENU(menu_VIEW_SHOW_OVERLAPPING_NAMES, MainFrm::OnDisplayOverlappingNames) EVT_MENU(menu_COLOUR_BY_DEPTH, MainFrm::OnColourByDepth) EVT_MENU(menu_COLOUR_BY_DATE, MainFrm::OnColourByDate) EVT_MENU(menu_COLOUR_BY_ERROR, MainFrm::OnColourByError) EVT_MENU(menu_COLOUR_BY_H_ERROR, MainFrm::OnColourByHError) EVT_MENU(menu_COLOUR_BY_V_ERROR, MainFrm::OnColourByVError) EVT_MENU(menu_COLOUR_BY_GRADIENT, MainFrm::OnColourByGradient) EVT_MENU(menu_COLOUR_BY_LENGTH, MainFrm::OnColourByLength) EVT_MENU(menu_COLOUR_BY_SURVEY, MainFrm::OnColourBySurvey) EVT_MENU(menu_COLOUR_BY_STYLE, MainFrm::OnColourByStyle) EVT_MENU(menu_VIEW_SHOW_SURFACE, MainFrm::OnShowSurface) EVT_MENU(menu_VIEW_GRID, MainFrm::OnViewGrid) EVT_MENU(menu_VIEW_BOUNDING_BOX, MainFrm::OnViewBoundingBox) EVT_MENU(menu_VIEW_PERSPECTIVE, MainFrm::OnViewPerspective) EVT_MENU(menu_VIEW_SMOOTH_SHADING, MainFrm::OnViewSmoothShading) EVT_MENU(menu_VIEW_TEXTURED, MainFrm::OnViewTextured) EVT_MENU(menu_VIEW_FOG, MainFrm::OnViewFog) EVT_MENU(menu_VIEW_SMOOTH_LINES, MainFrm::OnViewSmoothLines) EVT_MENU(menu_VIEW_FULLSCREEN, MainFrm::OnViewFullScreen) EVT_MENU(menu_VIEW_SHOW_TUBES, MainFrm::OnToggleTubes) EVT_MENU(menu_VIEW_TERRAIN, MainFrm::OnViewTerrain) EVT_MENU(menu_IND_COMPASS, MainFrm::OnViewCompass) EVT_MENU(menu_IND_CLINO, MainFrm::OnViewClino) EVT_MENU(menu_IND_COLOUR_KEY, MainFrm::OnToggleColourKey) EVT_MENU(menu_IND_SCALE_BAR, MainFrm::OnToggleScalebar) EVT_MENU(menu_CTL_SIDE_PANEL, MainFrm::OnViewSidePanel) EVT_MENU(menu_CTL_METRIC, MainFrm::OnToggleMetric) EVT_MENU(menu_CTL_DEGREES, MainFrm::OnToggleDegrees) EVT_MENU(menu_CTL_PERCENT, MainFrm::OnTogglePercent) EVT_MENU(menu_CTL_REVERSE, MainFrm::OnReverseControls) EVT_MENU(menu_CTL_CANCEL_DIST_LINE, MainFrm::OnCancelDistLine) EVT_MENU(wxID_ABOUT, MainFrm::OnAbout) EVT_UPDATE_UI(menu_FILE_OPEN_TERRAIN, MainFrm::OnOpenTerrainUpdate) EVT_UPDATE_UI(menu_FILE_LOG, MainFrm::OnShowLogUpdate) EVT_UPDATE_UI(wxID_PRINT, MainFrm::OnPrintUpdate) EVT_UPDATE_UI(menu_FILE_SCREENSHOT, MainFrm::OnScreenshotUpdate) EVT_UPDATE_UI(menu_FILE_EXPORT, MainFrm::OnExportUpdate) EVT_UPDATE_UI(menu_FILE_EXTEND, MainFrm::OnExtendUpdate) EVT_UPDATE_UI(menu_ROTATION_TOGGLE, MainFrm::OnToggleRotationUpdate) EVT_UPDATE_UI(menu_ROTATION_REVERSE, MainFrm::OnReverseDirectionOfRotationUpdate) EVT_UPDATE_UI(menu_ORIENT_MOVE_NORTH, MainFrm::OnMoveNorthUpdate) EVT_UPDATE_UI(menu_ORIENT_MOVE_EAST, MainFrm::OnMoveEastUpdate) EVT_UPDATE_UI(menu_ORIENT_MOVE_SOUTH, MainFrm::OnMoveSouthUpdate) EVT_UPDATE_UI(menu_ORIENT_MOVE_WEST, MainFrm::OnMoveWestUpdate) EVT_UPDATE_UI(menu_ORIENT_PLAN, MainFrm::OnPlanUpdate) EVT_UPDATE_UI(menu_ORIENT_ELEVATION, MainFrm::OnElevationUpdate) EVT_UPDATE_UI(menu_ORIENT_DEFAULTS, MainFrm::OnDefaultsUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_LEGS, MainFrm::OnShowSurveyLegsUpdate) EVT_UPDATE_UI(menu_VIEW_SPLAYS, MainFrm::OnSplaysUpdate) EVT_UPDATE_UI(menu_SPLAYS_HIDE, MainFrm::OnHideSplaysUpdate) EVT_UPDATE_UI(menu_SPLAYS_SHOW_DASHED, MainFrm::OnShowSplaysDashedUpdate) EVT_UPDATE_UI(menu_SPLAYS_SHOW_FADED, MainFrm::OnShowSplaysFadedUpdate) EVT_UPDATE_UI(menu_SPLAYS_SHOW_NORMAL, MainFrm::OnShowSplaysNormalUpdate) EVT_UPDATE_UI(menu_VIEW_DUPES, MainFrm::OnDupesUpdate) EVT_UPDATE_UI(menu_DUPES_HIDE, MainFrm::OnHideDupesUpdate) EVT_UPDATE_UI(menu_DUPES_SHOW_DASHED, MainFrm::OnShowDupesDashedUpdate) EVT_UPDATE_UI(menu_DUPES_SHOW_FADED, MainFrm::OnShowDupesFadedUpdate) EVT_UPDATE_UI(menu_DUPES_SHOW_NORMAL, MainFrm::OnShowDupesNormalUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_CROSSES, MainFrm::OnShowCrossesUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_ENTRANCES, MainFrm::OnShowEntrancesUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_FIXED_PTS, MainFrm::OnShowFixedPtsUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_EXPORTED_PTS, MainFrm::OnShowExportedPtsUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_NAMES, MainFrm::OnShowStationNamesUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_SURFACE, MainFrm::OnShowSurfaceUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_OVERLAPPING_NAMES, MainFrm::OnDisplayOverlappingNamesUpdate) EVT_UPDATE_UI(menu_VIEW_COLOUR_BY, MainFrm::OnColourByUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_DEPTH, MainFrm::OnColourByDepthUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_DATE, MainFrm::OnColourByDateUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_ERROR, MainFrm::OnColourByErrorUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_H_ERROR, MainFrm::OnColourByHErrorUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_V_ERROR, MainFrm::OnColourByVErrorUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_GRADIENT, MainFrm::OnColourByGradientUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_LENGTH, MainFrm::OnColourByLengthUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_SURVEY, MainFrm::OnColourBySurveyUpdate) EVT_UPDATE_UI(menu_COLOUR_BY_STYLE, MainFrm::OnColourByStyleUpdate) EVT_UPDATE_UI(menu_VIEW_GRID, MainFrm::OnViewGridUpdate) EVT_UPDATE_UI(menu_VIEW_BOUNDING_BOX, MainFrm::OnViewBoundingBoxUpdate) EVT_UPDATE_UI(menu_VIEW_PERSPECTIVE, MainFrm::OnViewPerspectiveUpdate) EVT_UPDATE_UI(menu_VIEW_SMOOTH_SHADING, MainFrm::OnViewSmoothShadingUpdate) EVT_UPDATE_UI(menu_VIEW_TEXTURED, MainFrm::OnViewTexturedUpdate) EVT_UPDATE_UI(menu_VIEW_FOG, MainFrm::OnViewFogUpdate) EVT_UPDATE_UI(menu_VIEW_SMOOTH_LINES, MainFrm::OnViewSmoothLinesUpdate) EVT_UPDATE_UI(menu_VIEW_FULLSCREEN, MainFrm::OnViewFullScreenUpdate) EVT_UPDATE_UI(menu_VIEW_SHOW_TUBES, MainFrm::OnToggleTubesUpdate) EVT_UPDATE_UI(menu_VIEW_TERRAIN, MainFrm::OnViewTerrainUpdate) EVT_UPDATE_UI(menu_IND_COMPASS, MainFrm::OnViewCompassUpdate) EVT_UPDATE_UI(menu_IND_CLINO, MainFrm::OnViewClinoUpdate) EVT_UPDATE_UI(menu_IND_COLOUR_KEY, MainFrm::OnToggleColourKeyUpdate) EVT_UPDATE_UI(menu_IND_SCALE_BAR, MainFrm::OnToggleScalebarUpdate) EVT_UPDATE_UI(menu_CTL_INDICATORS, MainFrm::OnIndicatorsUpdate) EVT_UPDATE_UI(menu_CTL_SIDE_PANEL, MainFrm::OnViewSidePanelUpdate) EVT_UPDATE_UI(menu_CTL_REVERSE, MainFrm::OnReverseControlsUpdate) EVT_UPDATE_UI(menu_CTL_CANCEL_DIST_LINE, MainFrm::OnCancelDistLineUpdate) EVT_UPDATE_UI(menu_CTL_METRIC, MainFrm::OnToggleMetricUpdate) EVT_UPDATE_UI(menu_CTL_DEGREES, MainFrm::OnToggleDegreesUpdate) EVT_UPDATE_UI(menu_CTL_PERCENT, MainFrm::OnTogglePercentUpdate) END_EVENT_TABLE() class LabelCmp : public greater { wxChar separator; public: explicit LabelCmp(wxChar separator_) : separator(separator_) {} bool operator()(const LabelInfo* pt1, const LabelInfo* pt2) { return name_cmp(pt1->GetText(), pt2->GetText(), separator) < 0; } }; class LabelPlotCmp : public greater { wxChar separator; public: explicit LabelPlotCmp(wxChar separator_) : separator(separator_) {} bool operator()(const LabelInfo* pt1, const LabelInfo* pt2) { int n = pt1->get_flags() - pt2->get_flags(); if (n) return n > 0; wxString l1 = pt1->GetText().AfterLast(separator); wxString l2 = pt2->GetText().AfterLast(separator); n = name_cmp(l1, l2, separator); if (n) return n < 0; // Prefer non-2-nodes... // FIXME; implement // if leaf names are the same, prefer shorter labels as we can // display more of them n = pt1->GetText().length() - pt2->GetText().length(); if (n) return n < 0; // make sure that we don't ever compare different labels as equal return name_cmp(pt1->GetText(), pt2->GetText(), separator) < 0; } }; #if wxUSE_DRAG_AND_DROP class DnDFile : public wxFileDropTarget { public: explicit DnDFile(MainFrm *parent) : m_Parent(parent) { } virtual bool OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames); private: MainFrm * m_Parent; }; bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames) { // Load a survey file by drag-and-drop. assert(filenames.GetCount() > 0); if (filenames.GetCount() != 1) { /* TRANSLATORS: error if you try to drag multiple files to the aven * window */ wxGetApp().ReportError(wmsg(/*You may only view one 3d file at a time.*/336)); return false; } m_Parent->OpenFile(filenames[0]); return true; } #endif MainFrm::MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, 101, title, pos, size, wxDEFAULT_FRAME_STYLE), m_SashPosition(-1), m_Gfx(NULL), m_Log(NULL), pending_find(false), fullscreen_showing_menus(false) #ifdef PREFDLG , m_PrefsDlg(NULL) #endif { #ifdef _WIN32 // The peculiar name is so that the icon is the first in the file // (required by Microsoft Windows for this type of icon) SetIcon(wxICON(AAA_aven)); #else SetIcon(wxICON(aven)); #endif #if wxCHECK_VERSION(3,1,0) // Add a full screen button to the right upper corner of title bar under OS // X 10.7 and later. EnableFullScreenView(); #endif CreateMenuBar(); MakeToolBar(); CreateStatusBar(2, wxST_SIZEGRIP); CreateSidePanel(); int widths[2] = { -1 /* variable width */, -1 }; GetStatusBar()->SetStatusWidths(2, widths); #ifdef __X__ // wxMotif or wxX11 int x; int y; GetSize(&x, &y); // X seems to require a forced resize. SetSize(-1, -1, x, y); #endif #if wxUSE_DRAG_AND_DROP SetDropTarget(new DnDFile(this)); #endif #ifdef __WXMAC__ m_Gfx->ForceRefresh(); m_Gfx->Show(true); #endif m_Gfx->SetFocus(); } void MainFrm::CreateMenuBar() { // Create the menus and the menu bar. wxMenu* filemenu = new wxMenu; // wxID_OPEN stock label lacks the ellipses /* TRANSLATORS: Aven menu items. An “&†goes before the letter of any * accelerator key. * * The string "\t" separates the menu text and any accelerator key. * * "File" menu. The accelerators must be different within this group. * c.f. 201, 380, 381. */ filemenu->Append(wxID_OPEN, wmsg(/*&Open...\tCtrl+O*/220)); /* TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the * terrain. */ filemenu->Append(menu_FILE_OPEN_TERRAIN, wmsg(/*Open &Terrain...*/453)); filemenu->AppendCheckItem(menu_FILE_LOG, wmsg(/*Show &Log*/144)); filemenu->AppendSeparator(); // wxID_PRINT stock label lacks the ellipses filemenu->Append(wxID_PRINT, wmsg(/*&Print...\tCtrl+P*/380)); filemenu->Append(menu_FILE_PAGE_SETUP, wmsg(/*P&age Setup...*/381)); filemenu->AppendSeparator(); /* TRANSLATORS: In the "File" menu */ filemenu->Append(menu_FILE_SCREENSHOT, wmsg(/*&Screenshot...*/201)); filemenu->Append(menu_FILE_EXPORT, wmsg(/*&Export as...*/382)); /* TRANSLATORS: In the "File" menu - c.f. n:191 */ filemenu->Append(menu_FILE_EXTEND, wmsg(/*E&xtended Elevation...*/247)); #ifndef __WXMAC__ // On wxMac the "Quit" menu item will be moved elsewhere, so we suppress // this separator. filemenu->AppendSeparator(); #else // We suppress the "Help" menu under macOS as it would otherwise end up as // an empty menu, but we need to add the "About" menu item somewhere. It // really doesn't matter where as wxWidgets will move it to the "Apple" // menu. filemenu->Append(wxID_ABOUT); #endif filemenu->Append(wxID_EXIT); m_history.UseMenu(filemenu); m_history.Load(*wxConfigBase::Get()); wxMenu* rotmenu = new wxMenu; /* TRANSLATORS: "Rotation" menu. The accelerators must be different within * this group. Tickable menu item which toggles auto rotation. * Please don't translate "Space" - that's the shortcut key to use which * wxWidgets needs to parse and it should then handle translating. */ rotmenu->AppendCheckItem(menu_ROTATION_TOGGLE, wmsg(/*Au&to-Rotate\tSpace*/231)); rotmenu->AppendSeparator(); rotmenu->Append(menu_ROTATION_REVERSE, wmsg(/*&Reverse Direction*/234)); wxMenu* orientmenu = new wxMenu; orientmenu->Append(menu_ORIENT_MOVE_NORTH, wmsg(/*View &North*/240)); orientmenu->Append(menu_ORIENT_MOVE_EAST, wmsg(/*View &East*/241)); orientmenu->Append(menu_ORIENT_MOVE_SOUTH, wmsg(/*View &South*/242)); orientmenu->Append(menu_ORIENT_MOVE_WEST, wmsg(/*View &West*/243)); orientmenu->AppendSeparator(); orientmenu->Append(menu_ORIENT_PLAN, wmsg(/*&Plan View*/248)); orientmenu->Append(menu_ORIENT_ELEVATION, wmsg(/*Ele&vation*/249)); orientmenu->AppendSeparator(); orientmenu->Append(menu_ORIENT_DEFAULTS, wmsg(/*Restore De&fault View*/254)); wxMenu* presmenu = new wxMenu; presmenu->Append(menu_PRES_NEW, wmsg(/*&New Presentation*/311)); presmenu->Append(menu_PRES_OPEN, wmsg(/*&Open Presentation...*/312)); presmenu->Append(menu_PRES_SAVE, wmsg(/*&Save Presentation*/313)); presmenu->Append(menu_PRES_SAVE_AS, wmsg(/*Sa&ve Presentation As...*/314)); presmenu->AppendSeparator(); /* TRANSLATORS: "Mark" as in "Mark this position" */ presmenu->Append(menu_PRES_MARK, wmsg(/*&Mark*/315)); /* TRANSLATORS: "Play" as in "Play back a recording" */ presmenu->AppendCheckItem(menu_PRES_PLAY, wmsg(/*Pla&y*/316)); presmenu->Append(menu_PRES_EXPORT_MOVIE, wmsg(/*&Export as Movie...*/317)); wxMenu* viewmenu = new wxMenu; #ifndef PREFDLG /* TRANSLATORS: Items in the "View" menu: */ viewmenu->AppendCheckItem(menu_VIEW_SHOW_NAMES, wmsg(/*Station &Names\tCtrl+N*/270)); /* TRANSLATORS: Toggles drawing of 3D passages */ viewmenu->AppendCheckItem(menu_VIEW_SHOW_TUBES, wmsg(/*Passage &Tubes\tCtrl+T*/346)); /* TRANSLATORS: Toggles drawing the surface of the Earth */ viewmenu->AppendCheckItem(menu_VIEW_TERRAIN, wmsg(/*Terr&ain*/449)); viewmenu->AppendCheckItem(menu_VIEW_SHOW_CROSSES, wmsg(/*&Crosses\tCtrl+X*/271)); viewmenu->AppendCheckItem(menu_VIEW_GRID, wmsg(/*&Grid\tCtrl+G*/297)); viewmenu->AppendCheckItem(menu_VIEW_BOUNDING_BOX, wmsg(/*&Bounding Box\tCtrl+B*/318)); viewmenu->AppendSeparator(); /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". */ viewmenu->AppendCheckItem(menu_VIEW_SHOW_LEGS, wmsg(/*&Underground Survey Legs\tCtrl+L*/272)); /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". */ viewmenu->AppendCheckItem(menu_VIEW_SHOW_SURFACE, wmsg(/*&Surface Survey Legs\tCtrl+F*/291)); wxMenu* splaymenu = new wxMenu; /* TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if * this is selected, such legs are not shown. */ splaymenu->AppendCheckItem(menu_SPLAYS_HIDE, wmsg(/*&Hide*/407)); /* TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if * this is selected, aven will show such legs with dashed lines. */ splaymenu->AppendCheckItem(menu_SPLAYS_SHOW_DASHED, wmsg(/*&Dashed*/250)); /* TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if * this is selected, aven will show such legs with less bright colours. */ splaymenu->AppendCheckItem(menu_SPLAYS_SHOW_FADED, wmsg(/*&Fade*/408)); /* TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if * this is selected, such legs are shown the same as other legs. */ splaymenu->AppendCheckItem(menu_SPLAYS_SHOW_NORMAL, wmsg(/*&Show*/409)); viewmenu->Append(menu_VIEW_SPLAYS, wmsg(/*Spla&y Legs*/406), splaymenu); wxMenu* dupemenu = new wxMenu; dupemenu->AppendCheckItem(menu_DUPES_HIDE, wmsg(/*&Hide*/407)); dupemenu->AppendCheckItem(menu_DUPES_SHOW_DASHED, wmsg(/*&Dashed*/250)); dupemenu->AppendCheckItem(menu_DUPES_SHOW_FADED, wmsg(/*&Fade*/408)); dupemenu->AppendCheckItem(menu_DUPES_SHOW_NORMAL, wmsg(/*&Show*/409)); viewmenu->Append(menu_VIEW_DUPES, wmsg(/*&Duplicate Legs*/251), dupemenu); viewmenu->AppendSeparator(); viewmenu->AppendCheckItem(menu_VIEW_SHOW_OVERLAPPING_NAMES, wmsg(/*&Overlapping Names*/273)); wxMenu* colourbymenu = new wxMenu; colourbymenu->AppendCheckItem(menu_COLOUR_BY_DEPTH, wmsg(/*Colour by &Depth*/292)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_DATE, wmsg(/*Colour by D&ate*/293)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_ERROR, wmsg(/*Colour by &Error*/289)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_H_ERROR, wmsg(/*Colour by &Horizontal Error*/480)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_V_ERROR, wmsg(/*Colour by &Vertical Error*/481)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_GRADIENT, wmsg(/*Colour by &Gradient*/85)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_LENGTH, wmsg(/*Colour by &Length*/82)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_SURVEY, wmsg(/*Colour by &Survey*/448)); colourbymenu->AppendCheckItem(menu_COLOUR_BY_STYLE, wmsg(/*Colour by St&yle*/482)); viewmenu->Append(menu_VIEW_COLOUR_BY, wmsg(/*Co&lour by*/450), colourbymenu); viewmenu->AppendSeparator(); viewmenu->AppendCheckItem(menu_VIEW_SHOW_ENTRANCES, wmsg(/*Highlight &Entrances*/294)); viewmenu->AppendCheckItem(menu_VIEW_SHOW_FIXED_PTS, wmsg(/*Highlight &Fixed Points*/295)); viewmenu->AppendCheckItem(menu_VIEW_SHOW_EXPORTED_PTS, wmsg(/*Highlight E&xported Points*/296)); viewmenu->AppendSeparator(); #else /* TRANSLATORS: Please don't translate "Escape" - that's the shortcut key * to use which wxWidgets needs to parse and it should then handle * translating. */ viewmenu-> Append(menu_VIEW_CANCEL_DIST_LINE, wmsg(/*&Cancel Measuring Line\tEscape*/281)); #endif viewmenu->AppendCheckItem(menu_VIEW_PERSPECTIVE, wmsg(/*&Perspective*/237)); // FIXME: enable this viewmenu->AppendCheckItem(menu_VIEW_SMOOTH_SHADING, wmsg(/*&Smooth Shading*/?!?); viewmenu->AppendCheckItem(menu_VIEW_TEXTURED, wmsg(/*Textured &Walls*/238)); /* TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate * using that term instead if it gives a better translation which most * users will understand. */ viewmenu->AppendCheckItem(menu_VIEW_FOG, wmsg(/*Fade Distant Ob&jects*/239)); /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". */ viewmenu->AppendCheckItem(menu_VIEW_SMOOTH_LINES, wmsg(/*Smoot&hed Survey Legs*/298)); viewmenu->AppendSeparator(); #ifdef __WXMAC__ // F11 on macOS is used by the desktop (for speaker volume and/or window // navigation). The standard macOS shortcut for full screen mode is // Ctrl-Command-F which in wxWidgets terms is RawCtrl+Ctrl+F. wxString wxmac_fullscreen = wmsg(/*Full Screen &Mode\tF11*/356); wxmac_fullscreen.Replace(wxT("\tF11"), wxT("\tRawCtrl+Ctrl+F"), false); viewmenu->AppendCheckItem(menu_VIEW_FULLSCREEN, wxmac_fullscreen); // FIXME: On macOS, the standard wording here is "Enter Full Screen" and // "Exit Full Screen", depending whether we are in full screen mode or not, // and this isn't a checked menu item. #else viewmenu->AppendCheckItem(menu_VIEW_FULLSCREEN, wmsg(/*Full Screen &Mode\tF11*/356)); #endif #ifdef PREFDLG viewmenu->AppendSeparator(); viewmenu-> Append(wxID_PREFERENCES, wmsg(/*&Preferences...*/347)); #endif #ifndef PREFDLG wxMenu* ctlmenu = new wxMenu; ctlmenu->AppendCheckItem(menu_CTL_REVERSE, wmsg(/*&Reverse Sense\tCtrl+R*/280)); ctlmenu->AppendSeparator(); #ifdef __WXGTK__ // wxGTK (at least with GTK+ v2.24), if we specify a short-cut here then // the key handler isn't called, so we can't exit full screen mode on // Escape. wxGTK doesn't actually show the "Escape" shortcut text in the // menu item, so removing it doesn't make any visual difference, and doing // so allows Escape to still cancel the measuring line, but also serve to // exit full screen mode if no measuring line is shown. wxString wxgtk_cancelline = wmsg(/*&Cancel Measuring Line\tEscape*/281); wxgtk_cancelline.Replace(wxT("\tEscape"), wxT(""), false); ctlmenu->Append(menu_CTL_CANCEL_DIST_LINE, wxgtk_cancelline); #else // With wxMac and wxMSW, we can have the short-cut on the menu and still // have Escape handled by the key handler to exit full screen mode. ctlmenu->Append(menu_CTL_CANCEL_DIST_LINE, wmsg(/*&Cancel Measuring Line\tEscape*/281)); #endif ctlmenu->AppendSeparator(); wxMenu* indmenu = new wxMenu; indmenu->AppendCheckItem(menu_IND_COMPASS, wmsg(/*&Compass*/274)); indmenu->AppendCheckItem(menu_IND_CLINO, wmsg(/*C&linometer*/275)); /* TRANSLATORS: The "Colour Key" is the thing in aven showing which colour * corresponds to which depth, date, survey closure error, etc. */ indmenu->AppendCheckItem(menu_IND_COLOUR_KEY, wmsg(/*Colour &Key*/276)); indmenu->AppendCheckItem(menu_IND_SCALE_BAR, wmsg(/*&Scale Bar*/277)); ctlmenu->Append(menu_CTL_INDICATORS, wmsg(/*&Indicators*/299), indmenu); ctlmenu->AppendCheckItem(menu_CTL_SIDE_PANEL, wmsg(/*&Side Panel*/337)); ctlmenu->AppendSeparator(); ctlmenu->AppendCheckItem(menu_CTL_METRIC, wmsg(/*&Metric*/342)); ctlmenu->AppendCheckItem(menu_CTL_DEGREES, wmsg(/*&Degrees*/343)); ctlmenu->AppendCheckItem(menu_CTL_PERCENT, wmsg(/*&Percent*/430)); #endif wxMenuBar* menubar = new wxMenuBar(); /* TRANSLATORS: Aven menu titles. An “&†goes before the letter of any * accelerator key. The accelerators must be different within this group */ menubar->Append(filemenu, wmsg(/*&File*/210)); menubar->Append(rotmenu, wmsg(/*&Rotation*/211)); menubar->Append(orientmenu, wmsg(/*&Orientation*/212)); menubar->Append(viewmenu, wmsg(/*&View*/213)); #ifndef PREFDLG menubar->Append(ctlmenu, wmsg(/*&Controls*/214)); #endif // TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - // the items in this menu allow the user to animate between preset // views. menubar->Append(presmenu, wmsg(/*&Presentation*/216)); #ifndef __WXMAC__ // On wxMac the "About" menu item will be moved elsewhere, so we suppress // this menu since it will then be empty. wxMenu* helpmenu = new wxMenu; helpmenu->Append(wxID_ABOUT); menubar->Append(helpmenu, wmsg(/*&Help*/215)); #endif SetMenuBar(menubar); } void MainFrm::MakeToolBar() { // Make the toolbar. #ifdef USING_GENERIC_TOOLBAR // This OS-X-specific code is only needed to stop the toolbar icons getting // scaled up, which just makes them look nasty and fuzzy. Once we have // larger versions of the icons, we can drop this code. wxSystemOptions::SetOption(wxT("mac.toolbar.no-native"), 1); wxToolBar* toolbar = new wxToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxTB_FLAT|wxTB_NODIVIDER|wxTB_NOALIGN); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(toolbar, 0, wxEXPAND); SetSizer(sizer); #else wxToolBar* toolbar = wxFrame::CreateToolBar(); #endif #ifndef __WXGTK20__ toolbar->SetMargins(5, 5); #endif // FIXME: TRANSLATE tooltips toolbar->AddTool(wxID_OPEN, wxT("Open"), TOOL(open), wxT("Open a survey file for viewing")); toolbar->AddTool(menu_PRES_OPEN, wxT("Open presentation"), TOOL(open_pres), wxT("Open a presentation")); toolbar->AddCheckTool(menu_FILE_LOG, wxT("View log"), TOOL(log), wxNullBitmap, wxT("View log from processing survey data")); toolbar->AddSeparator(); toolbar->AddCheckTool(menu_ROTATION_TOGGLE, wxT("Toggle rotation"), TOOL(rotation), wxNullBitmap, wxT("Toggle rotation")); toolbar->AddTool(menu_ORIENT_PLAN, wxT("Plan"), TOOL(plan), wxT("Switch to plan view")); toolbar->AddTool(menu_ORIENT_ELEVATION, wxT("Elevation"), TOOL(elevation), wxT("Switch to elevation view")); toolbar->AddTool(menu_ORIENT_DEFAULTS, wxT("Default view"), TOOL(defaults), wxT("Restore default view")); toolbar->AddSeparator(); toolbar->AddCheckTool(menu_VIEW_SHOW_NAMES, wxT("Names"), TOOL(names), wxNullBitmap, wxT("Show station names")); toolbar->AddCheckTool(menu_VIEW_SHOW_CROSSES, wxT("Crosses"), TOOL(crosses), wxNullBitmap, wxT("Show crosses on stations")); toolbar->AddCheckTool(menu_VIEW_SHOW_ENTRANCES, wxT("Entrances"), TOOL(entrances), wxNullBitmap, wxT("Highlight entrances")); toolbar->AddCheckTool(menu_VIEW_SHOW_FIXED_PTS, wxT("Fixed points"), TOOL(fixed_pts), wxNullBitmap, wxT("Highlight fixed points")); toolbar->AddCheckTool(menu_VIEW_SHOW_EXPORTED_PTS, wxT("Exported points"), TOOL(exported_pts), wxNullBitmap, wxT("Highlight exported stations")); toolbar->AddSeparator(); toolbar->AddCheckTool(menu_VIEW_SHOW_LEGS, wxT("Underground legs"), TOOL(ug_legs), wxNullBitmap, wxT("Show underground surveys")); toolbar->AddCheckTool(menu_VIEW_SHOW_SURFACE, wxT("Surface legs"), TOOL(surface_legs), wxNullBitmap, wxT("Show surface surveys")); toolbar->AddCheckTool(menu_VIEW_SHOW_TUBES, wxT("Tubes"), TOOL(tubes), wxNullBitmap, wxT("Show passage tubes")); toolbar->AddCheckTool(menu_VIEW_TERRAIN, wxT("Terrain"), TOOL(solid_surface), wxNullBitmap, wxT("Show terrain")); toolbar->AddSeparator(); toolbar->AddCheckTool(menu_PRES_FREWIND, wxT("Fast Rewind"), TOOL(pres_frew), wxNullBitmap, wxT("Very Fast Rewind")); toolbar->AddCheckTool(menu_PRES_REWIND, wxT("Rewind"), TOOL(pres_rew), wxNullBitmap, wxT("Fast Rewind")); toolbar->AddCheckTool(menu_PRES_REVERSE, wxT("Backwards"), TOOL(pres_go_back), wxNullBitmap, wxT("Play Backwards")); toolbar->AddCheckTool(menu_PRES_PAUSE, wxT("Pause"), TOOL(pres_pause), wxNullBitmap, wxT("Pause")); toolbar->AddCheckTool(menu_PRES_PLAY, wxT("Go"), TOOL(pres_go), wxNullBitmap, wxT("Play")); toolbar->AddCheckTool(menu_PRES_FF, wxT("FF"), TOOL(pres_ff), wxNullBitmap, wxT("Fast Forward")); toolbar->AddCheckTool(menu_PRES_FFF, wxT("Very FF"), TOOL(pres_fff), wxNullBitmap, wxT("Very Fast Forward")); toolbar->AddTool(wxID_STOP, wxT("Stop"), TOOL(pres_stop), wxT("Stop")); toolbar->AddSeparator(); m_FindBox = new wxTextCtrl(toolbar, textctrl_FIND, wxString(), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); toolbar->AddControl(m_FindBox); /* TRANSLATORS: "Find stations" button tooltip */ toolbar->AddTool(wxID_FIND, wmsg(/*Find*/332), TOOL(find)/*, "Search for station name"*/); /* TRANSLATORS: "Hide stations" button default tooltip */ toolbar->AddTool(button_HIDE, wmsg(/*Hide*/333), TOOL(hideresults)/*, "Hide search results"*/); toolbar->Realize(); } void MainFrm::CreateSidePanel() { m_Splitter = new AvenSplitterWindow(this); #ifdef USING_GENERIC_TOOLBAR // This OS-X-specific code is only needed to stop the toolbar icons getting // scaled up, which just makes them look nasty and fuzzy. Once we have // larger versions of the icons, we can drop this code. GetSizer()->Add(m_Splitter, 1, wxEXPAND); Layout(); #endif m_Notebook = new wxNotebook(m_Splitter, 400, wxDefaultPosition, wxDefaultSize, wxBK_BOTTOM); m_Notebook->Show(false); wxPanel * panel = new wxPanel(m_Notebook); m_Tree = new AvenTreeCtrl(this, panel); // m_RegexpCheckBox = new wxCheckBox(find_panel, -1, // msg(/*Regular expression*/)); wxBoxSizer *panel_sizer = new wxBoxSizer(wxVERTICAL); panel_sizer->Add(m_Tree, 1, wxALL | wxEXPAND, 2); panel->SetAutoLayout(true); panel->SetSizer(panel_sizer); // panel_sizer->SetSizeHints(panel); m_Control = new GUIControl(); m_Gfx = new GfxCore(this, m_Splitter, m_Control); m_Control->SetView(m_Gfx); // Presentation panel: wxPanel * prespanel = new wxPanel(m_Notebook); m_PresList = new AvenPresList(this, prespanel, m_Gfx); wxBoxSizer *pres_panel_sizer = new wxBoxSizer(wxVERTICAL); pres_panel_sizer->Add(m_PresList, 1, wxALL | wxEXPAND, 2); prespanel->SetAutoLayout(true); prespanel->SetSizer(pres_panel_sizer); // Overall tabbed structure: // FIXME: this assumes images are 15x15 wxImageList* image_list = new wxImageList(15, 15); image_list->Add(TOOL(survey_tree)); image_list->Add(TOOL(pres_tree)); m_Notebook->SetImageList(image_list); /* TRANSLATORS: labels for tabbed side panel this is for the tab with the * tree hierarchy of survey station names */ m_Notebook->AddPage(panel, wmsg(/*Surveys*/376), true, 0); m_Notebook->AddPage(prespanel, wmsg(/*Presentation*/377), false, 1); m_Splitter->Initialize(m_Gfx); } bool MainFrm::LoadData(const wxString& file, const wxString& prefix) { // Load survey data from file, centre the dataset around the origin, // and prepare the data for drawing. #if 0 wxStopWatch timer; timer.Start(); #endif int err_msg_code = Model::Load(file, prefix); if (err_msg_code) { wxString m = wxString::Format(wmsg(err_msg_code), file.c_str()); wxGetApp().ReportError(m); return false; } // Update window title. SetTitle(GetSurveyTitle() + " - " APP_NAME); // Sort the labels ready for filling the tree. m_Labels.sort(LabelCmp(GetSeparator())); // Fill the tree of stations and prefixes. wxString root_name = wxFileNameFromPath(file); if (!prefix.empty()) { root_name += " ("; root_name += prefix; root_name += ")"; } m_Tree->FillTree(root_name); // Sort labels so that entrances are displayed in preference, // then fixed points, then exported points, then other points. // // Also sort by leaf name so that we'll tend to choose labels // from different surveys, rather than labels from surveys which // are earlier in the list. m_Labels.sort(LabelPlotCmp(GetSeparator())); if (!m_FindBox->GetValue().empty()) { // Highlight any stations matching the current search. DoFind(); } m_FileProcessed = file; return true; } #if 0 // Run along a newly read in traverse and make up plausible LRUD where // it is missing. void MainFrm::FixLRUD(traverse & centreline) { assert(centreline.size() > 1); Double last_size = 0; vector::iterator i = centreline.begin(); while (i != centreline.end()) { // Get the coordinates of this vertex. Point & pt_v = *i++; Double size; if (i != centreline.end()) { Double h = sqrd(i->GetX() - pt_v.GetX()) + sqrd(i->GetY() - pt_v.GetY()); Double v = sqrd(i->GetZ() - pt_v.GetZ()); if (h + v > 30.0 * 30.0) { Double scale = 30.0 / sqrt(h + v); h *= scale; v *= scale; } size = sqrt(h + v / 9); size /= 4; if (i == centreline.begin() + 1) { // First segment. last_size = size; } else { // Intermediate segment. swap(size, last_size); size += last_size; size /= 2; } } else { // Last segment. size = last_size; } Double & l = pt_v.l; Double & r = pt_v.r; Double & u = pt_v.u; Double & d = pt_v.d; if (l == 0 && r == 0 && u == 0 && d == 0) { l = r = u = d = -size; } else { if (l < 0 && r < 0) { l = r = -size; } else if (l < 0) { l = -(2 * size - r); if (l >= 0) l = -0.01; } else if (r < 0) { r = -(2 * size - l); if (r >= 0) r = -0.01; } if (u < 0 && d < 0) { u = d = -size; } else if (u < 0) { u = -(2 * size - d); if (u >= 0) u = -0.01; } else if (d < 0) { d = -(2 * size - u); if (d >= 0) d = -0.01; } } } } #endif void MainFrm::OnMRUFile(wxCommandEvent& event) { wxString f(m_history.GetHistoryFile(event.GetId() - wxID_FILE1)); if (!f.empty()) OpenFile(f); } void MainFrm::AddToFileHistory(const wxString & file) { if (wxIsAbsolutePath(file)) { m_history.AddFileToHistory(file); } else { wxString abs = wxGetCwd(); abs += wxCONFIG_PATH_SEPARATOR; abs += file; m_history.AddFileToHistory(abs); } wxConfigBase *b = wxConfigBase::Get(); m_history.Save(*b); b->Flush(); } void MainFrm::OpenFile(const wxString& file, const wxString& survey) { wxBusyCursor hourglass; // Check if this is an unprocessed survey data file. if (file.length() > 4 && file[file.length() - 4] == '.') { wxString ext(file, file.length() - 3, 3); ext.MakeLower(); if (ext == wxT("svx") || ext == wxT("dat") || ext == wxT("mak")) { CavernLogWindow * log = new CavernLogWindow(this, survey, m_Splitter); wxWindow * win = m_Splitter->GetWindow1(); m_Splitter->ReplaceWindow(win, log); win->Show(false); if (m_Splitter->GetWindow2() == NULL) { if (win != m_Gfx) win->Destroy(); } else { if (m_Splitter->IsSplit()) m_Splitter->Unsplit(); } if (wxFileExists(file)) AddToFileHistory(file); log->process(file); // Log window will tell us to load file if it successfully completes. return; } } if (!LoadData(file, survey)) return; AddToFileHistory(file); InitialiseAfterLoad(file, survey); // If aven is showing the log for a .svx file and you load a .3d file, then // at this point m_Log will be the log window for the .svx file, so destroy // it - it should never legitimately be set if we get here. if (m_Log) { m_Log->Destroy(); m_Log = NULL; } } void MainFrm::InitialiseAfterLoad(const wxString & file, const wxString & prefix) { if (m_SashPosition < 0) { // Calculate sane default width for side panel. int x; int y; GetClientSize(&x, &y); if (x < 600) x /= 3; else if (x < 1000) x = 200; else x /= 5; m_SashPosition = x; } // Do this before we potentially delete the log window which may own the // wxString which parameter file refers to! bool same_file = (file == m_File); if (!same_file) m_File = file; m_Survey = prefix; wxWindow * win = NULL; if (m_Splitter->GetWindow2() == NULL) { win = m_Splitter->GetWindow1(); if (win == m_Gfx) win = NULL; } if (!IsFullScreen()) { m_Splitter->SplitVertically(m_Notebook, m_Gfx, m_SashPosition); } else { was_showing_sidepanel_before_fullscreen = true; } m_Gfx->Initialise(same_file); if (win) { // FIXME: check it actually is the log window! if (m_Log && m_Log != win) m_Log->Destroy(); m_Log = win; m_Log->Show(false); } if (!IsFullScreen()) { m_Notebook->Show(true); } m_Gfx->Show(true); m_Gfx->SetFocus(); } void MainFrm::HideLog(wxWindow * log_window) { if (!IsFullScreen()) { m_Splitter->SplitVertically(m_Notebook, m_Gfx, m_SashPosition); } m_Log = log_window; m_Log->Show(false); if (!IsFullScreen()) { m_Notebook->Show(true); } m_Gfx->Show(true); m_Gfx->SetFocus(); } // // UI event handlers // // For Unix we want "*.svx;*.SVX" while for Windows we only want "*.svx". #ifdef _WIN32 # define CASE(X) #else # define CASE(X) ";" X #endif void MainFrm::OnOpen(wxCommandEvent&) { #ifdef __WXMOTIF__ wxString filetypes = wxT("*.3d"); #else wxString filetypes; filetypes.Printf(wxT("%s|*.3d;*.svx;*.plt;*.plf;*.dat;*.mak;*.adj;*.sht;*.una;*.xyz" CASE("*.3D;*.SVX;*.PLT;*.PLF;*.DAT;*.MAK;*.ADJ;*.SHT;*.UNA;*.XYZ") "|%s|*.3d" CASE("*.3D") "|%s|*.svx" CASE("*.SVX") "|%s|*.plt;*.plf" CASE("*.PLT;*.PLF") "|%s|*.dat;*.mak" CASE("*.DAT;*.MAK") "|%s|*.adj;*.sht;*.una;*.xyz" CASE("*.ADJ;*.SHT;*.UNA;*.XYZ") "|%s|%s"), /* TRANSLATORS: Here "survey" is a "cave map" rather than * list of questions - it should be translated to the * terminology that cavers using the language would use. */ wmsg(/*All survey files*/229).c_str(), /* TRANSLATORS: Survex is the name of the software, and "3d" refers to a * file extension, so neither should be translated. */ wmsg(/*Survex 3d files*/207).c_str(), /* TRANSLATORS: Survex is the name of the software, and "svx" refers to a * file extension, so neither should be translated. */ wmsg(/*Survex svx files*/329).c_str(), /* TRANSLATORS: "Compass" as in Larry Fish’s cave * surveying package, so probably shouldn’t be translated */ wmsg(/*Compass PLT files*/324).c_str(), /* TRANSLATORS: "Compass" as in Larry Fish’s cave * surveying package, so should not be translated */ wmsg(/*Compass DAT and MAK files*/330).c_str(), /* TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying * package, so don’t translate it. */ wmsg(/*CMAP XYZ files*/325).c_str(), wmsg(/*All files*/208).c_str(), wxFileSelectorDefaultWildcardStr); #endif /* TRANSLATORS: Here "survey" is a "cave map" rather than list of questions * - it should be translated to the terminology that cavers using the * language would use. * * File->Open dialog: */ wxFileDialog dlg(this, wmsg(/*Select a survey file to view*/206), wxString(), wxString(), filetypes, wxFD_OPEN|wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() == wxID_OK) { OpenFile(dlg.GetPath()); } } void MainFrm::OnOpenTerrain(wxCommandEvent&) { if (!m_Gfx) return; if (GetCSProj().empty()) { wxMessageBox(wxT("No coordinate system specified in survey data")); return; } #ifdef __WXMOTIF__ wxString filetypes = wxT("*.*"); #else wxString filetypes; filetypes.Printf(wxT("%s|*.bil;*.hgt;*.zip" CASE("*.BIL;*.HGT;*.ZIP") "|%s|%s"), wmsg(/*Terrain files*/452).c_str(), wmsg(/*All files*/208).c_str(), wxFileSelectorDefaultWildcardStr); #endif /* TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a * grid of height values). */ wxFileDialog dlg(this, wmsg(/*Select a terrain file to view*/451), wxString(), wxString(), filetypes, wxFD_OPEN|wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() == wxID_OK && m_Gfx->LoadDEM(dlg.GetPath())) { if (!m_Gfx->DisplayingTerrain()) m_Gfx->ToggleTerrain(); } } void MainFrm::OnShowLog(wxCommandEvent&) { if (!m_Log) { HideLog(m_Splitter->GetWindow1()); return; } wxWindow * win = m_Splitter->GetWindow1(); m_Splitter->ReplaceWindow(win, m_Log); win->Show(false); if (m_Splitter->IsSplit()) { m_SashPosition = m_Splitter->GetSashPosition(); // save width of panel m_Splitter->Unsplit(); } m_Log->Show(true); m_Log->SetFocus(); m_Log = NULL; } void MainFrm::OnScreenshot(wxCommandEvent&) { wxString baseleaf; wxFileName::SplitPath(m_File, NULL, NULL, &baseleaf, NULL, wxPATH_NATIVE); /* TRANSLATORS: title of the save screenshot dialog */ wxFileDialog dlg(this, wmsg(/*Save Screenshot*/321), wxString(), baseleaf + wxT(".png"), wxT("*.png"), wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() == wxID_OK) { static bool png_handled = false; if (!png_handled) { #if 0 // FIXME : enable this to allow other export formats... ::wxInitAllImageHandlers(); #else wxImage::AddHandler(new wxPNGHandler); #endif png_handled = true; } if (!m_Gfx->SaveScreenshot(dlg.GetPath(), wxBITMAP_TYPE_PNG)) { wxGetApp().ReportError(wxString::Format(wmsg(/*Error writing to file “%sâ€*/110), dlg.GetPath().c_str())); } } } void MainFrm::OnScreenshotUpdate(wxUpdateUIEvent& event) { event.Enable(!m_File.empty()); } void MainFrm::OnFilePreferences(wxCommandEvent&) { #ifdef PREFDLG m_PrefsDlg = new PrefsDlg(m_Gfx, this); m_PrefsDlg->Show(true); #endif } void MainFrm::OnPrint(wxCommandEvent&) { m_Gfx->OnPrint(m_File, GetSurveyTitle(), GetDateString()); } void MainFrm::PrintAndExit() { m_Gfx->OnPrint(m_File, GetSurveyTitle(), GetDateString(), true); } void MainFrm::OnPageSetup(wxCommandEvent&) { wxPageSetupDialog dlg(this, wxGetApp().GetPageSetupDialogData()); if (dlg.ShowModal() == wxID_OK) { wxGetApp().SetPageSetupDialogData(dlg.GetPageSetupData()); } } void MainFrm::OnExport(wxCommandEvent&) { m_Gfx->OnExport(m_File, GetSurveyTitle(), GetDateString()); } void MainFrm::OnExtend(wxCommandEvent&) { wxString output = m_Survey; if (output.empty()) { wxFileName::SplitPath(m_File, NULL, NULL, &output, NULL, wxPATH_NATIVE); } output += wxT("_extend.3d"); { #ifdef __WXMOTIF__ wxString ext(wxT("*.3d")); #else /* TRANSLATORS: Survex is the name of the software, and "3d" refers to a * file extension, so neither should be translated. */ wxString ext = wmsg(/*Survex 3d files*/207); ext += wxT("|*.3d"); #endif wxFileDialog dlg(this, wmsg(/*Select an output filename*/319), wxString(), output, ext, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() != wxID_OK) return; output = dlg.GetPath(); } wxString cmd = get_command_path(L"extend"); cmd = escape_for_shell(cmd, false); if (!m_Survey.empty()) { cmd += wxT(" --survey="); cmd += escape_for_shell(m_Survey, false); } cmd += wxT(" --show-breaks "); cmd += escape_for_shell(m_FileProcessed, true); cmd += wxT(" "); cmd += escape_for_shell(output, true); if (wxExecute(cmd, wxEXEC_SYNC) < 0) { wxString m; m.Printf(wmsg(/*Couldn’t run external command: “%sâ€*/17), cmd.c_str()); m += wxT(" ("); m += wxString(strerror(errno), wxConvUTF8); m += wxT(')'); wxGetApp().ReportError(m); return; } if (LoadData(output, wxString())) InitialiseAfterLoad(output, wxString()); } void MainFrm::OnQuit(wxCommandEvent&) { if (m_PresList->Modified()) { // FIXME: better to ask "Do you want to save your changes?" and offer [Save] [Discard] [Cancel] /* TRANSLATORS: and the question in that box */ if (wxMessageBox(wmsg(/*The current presentation has been modified. Abandon unsaved changes?*/327), /* TRANSLATORS: title of message box */ wmsg(/*Modified Presentation*/326), wxOK|wxCANCEL|wxICON_QUESTION) == wxCANCEL) { return; } } wxConfigBase *b = wxConfigBase::Get(); if (IsFullScreen()) { b->Write(wxT("width"), -2); b->DeleteEntry(wxT("height")); } else if (IsMaximized()) { b->Write(wxT("width"), -1); b->DeleteEntry(wxT("height")); } else { int width, height; GetSize(&width, &height); b->Write(wxT("width"), width); b->Write(wxT("height"), height); } b->Flush(); exit(0); } void MainFrm::OnClose(wxCloseEvent&) { wxCommandEvent dummy; OnQuit(dummy); } void MainFrm::OnAbout(wxCommandEvent&) { #ifdef __WXMAC__ // GetIcon() returns an invalid wxIcon under macOS. AboutDlg dlg(this, wxICON(aven)); #else AboutDlg dlg(this, GetIcon()); #endif dlg.Centre(); dlg.ShowModal(); } void MainFrm::UpdateStatusBar() { if (!here_text.empty()) { GetStatusBar()->SetStatusText(here_text); GetStatusBar()->SetStatusText(dist_text, 1); } else if (!coords_text.empty()) { GetStatusBar()->SetStatusText(coords_text); GetStatusBar()->SetStatusText(distfree_text, 1); } else { GetStatusBar()->SetStatusText(wxString()); GetStatusBar()->SetStatusText(wxString(), 1); } } void MainFrm::ClearTreeSelection() { m_Tree->UnselectAll(); m_Gfx->SetThere(); ShowInfo(); } void MainFrm::ClearCoords() { if (!coords_text.empty()) { coords_text = wxString(); UpdateStatusBar(); } } void MainFrm::SetCoords(const Vector3 &v) { Double x = v.GetX(); Double y = v.GetY(); Double z = v.GetZ(); int units; if (m_Gfx->GetMetric()) { units = /*m*/424; } else { x /= METRES_PER_FOOT; y /= METRES_PER_FOOT; z /= METRES_PER_FOOT; units = /*ft*/428; } /* TRANSLATORS: show coordinates (N = North or Northing, E = East or * Easting) */ coords_text.Printf(wmsg(/*%.2f E, %.2f N*/338), x, y); coords_text += wxString::Format(wxT(", %s %.2f%s"), wmsg(/*Altitude*/335).c_str(), z, wmsg(units).c_str()); distfree_text = wxString(); UpdateStatusBar(); } const LabelInfo * MainFrm::GetTreeSelection() const { wxTreeItemData* sel_wx; if (!m_Tree->GetSelectionData(&sel_wx)) return NULL; const TreeData* data = static_cast(sel_wx); if (!data->IsStation()) return NULL; return data->GetLabel(); } void MainFrm::SetCoords(Double x, Double y, const LabelInfo * there) { wxString & s = coords_text; if (m_Gfx->GetMetric()) { s.Printf(wmsg(/*%.2f E, %.2f N*/338), x, y); } else { s.Printf(wmsg(/*%.2f E, %.2f N*/338), x / METRES_PER_FOOT, y / METRES_PER_FOOT); } wxString & t = distfree_text; t = wxString(); if (m_Gfx->ShowingMeasuringLine() && there) { auto offset = GetOffset(); Vector3 delta(x - offset.GetX() - there->GetX(), y - offset.GetY() - there->GetY(), 0); Double dh = sqrt(delta.GetX()*delta.GetX() + delta.GetY()*delta.GetY()); Double brg = deg(atan2(delta.GetX(), delta.GetY())); if (brg < 0) brg += 360; wxString from_str; /* TRANSLATORS: Used in Aven: * From : H 12.24m, Brg 234.5° */ from_str.Printf(wmsg(/*From %s*/339), there->name_or_anon().c_str()); int brg_unit; if (m_Gfx->GetDegrees()) { brg_unit = /*°*/344; } else { brg *= 400.0 / 360.0; brg_unit = /*áµ*/345; } int units; if (m_Gfx->GetMetric()) { units = /*m*/424; } else { dh /= METRES_PER_FOOT; units = /*ft*/428; } /* TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as * in Compass bearing) */ t.Printf(wmsg(/*%s: H %.2f%s, Brg %03.1f%s*/374), from_str.c_str(), dh, wmsg(units).c_str(), brg, wmsg(brg_unit).c_str()); } UpdateStatusBar(); } void MainFrm::SetAltitude(Double z, const LabelInfo * there) { double alt = z; int units; if (m_Gfx->GetMetric()) { units = /*m*/424; } else { alt /= METRES_PER_FOOT; units = /*ft*/428; } coords_text.Printf(wxT("%s %.2f%s"), wmsg(/*Altitude*/335).c_str(), alt, wmsg(units).c_str()); wxString & t = distfree_text; t = wxString(); if (m_Gfx->ShowingMeasuringLine() && there) { Double dz = z - GetOffset().GetZ() - there->GetZ(); wxString from_str; from_str.Printf(wmsg(/*From %s*/339), there->name_or_anon().c_str()); if (!m_Gfx->GetMetric()) { dz /= METRES_PER_FOOT; } // TRANSLATORS: "V" is short for "Vertical" t.Printf(wmsg(/*%s: V %.2f%s*/375), from_str.c_str(), dz, wmsg(units).c_str()); } UpdateStatusBar(); } void MainFrm::ShowInfo(const LabelInfo *here, const LabelInfo *there) { assert(m_Gfx); if (!here) { m_Gfx->SetHere(); m_Tree->SetHere(wxTreeItemId()); // Don't clear "There" mark here. if (here_text.empty() && dist_text.empty()) return; here_text = wxString(); dist_text = wxString(); UpdateStatusBar(); return; } Vector3 v = *here + GetOffset(); wxString & s = here_text; Double x = v.GetX(); Double y = v.GetY(); Double z = v.GetZ(); int units; if (m_Gfx->GetMetric()) { units = /*m*/424; } else { x /= METRES_PER_FOOT; y /= METRES_PER_FOOT; z /= METRES_PER_FOOT; units = /*ft*/428; } s.Printf(wmsg(/*%.2f E, %.2f N*/338), x, y); s += wxString::Format(wxT(", %s %.2f%s"), wmsg(/*Altitude*/335).c_str(), z, wmsg(units).c_str()); s += wxT(": "); s += here->name_or_anon(); m_Gfx->SetHere(here); m_Tree->SetHere(here->tree_id); if (m_Gfx->ShowingMeasuringLine() && there) { Vector3 delta = *here - *there; Double d_horiz = sqrt(delta.GetX()*delta.GetX() + delta.GetY()*delta.GetY()); Double dr = delta.magnitude(); Double dz = delta.GetZ(); Double brg = deg(atan2(delta.GetX(), delta.GetY())); if (brg < 0) brg += 360; Double grd = deg(atan2(delta.GetZ(), d_horiz)); wxString from_str; from_str.Printf(wmsg(/*From %s*/339), there->name_or_anon().c_str()); wxString hv_str; if (m_Gfx->GetMetric()) { units = /*m*/424; } else { d_horiz /= METRES_PER_FOOT; dr /= METRES_PER_FOOT; dz /= METRES_PER_FOOT; units = /*ft*/428; } wxString len_unit = wmsg(units); /* TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" */ hv_str.Printf(wmsg(/*H %.2f%s, V %.2f%s*/340), d_horiz, len_unit.c_str(), dz, len_unit.c_str()); int brg_unit; if (m_Gfx->GetDegrees()) { brg_unit = /*°*/344; } else { brg *= 400.0 / 360.0; brg_unit = /*áµ*/345; } int grd_unit; wxString grd_str; if (m_Gfx->GetPercent()) { if (grd > 89.99) { grd = 1000000; } else if (grd < -89.99) { grd = -1000000; } else { grd = int(100 * tan(rad(grd))); } if (grd > 99999 || grd < -99999) { grd_str = grd > 0 ? wxT("+") : wxT("-"); /* TRANSLATORS: infinity symbol - used for the percentage gradient on * vertical angles. */ grd_str += wmsg(/*∞*/431); } grd_unit = /*%*/96; } else if (m_Gfx->GetDegrees()) { grd_unit = /*°*/344; } else { grd *= 400.0 / 360.0; grd_unit = /*áµ*/345; } if (grd_str.empty()) { grd_str.Printf(wxT("%+02.1f%s"), grd, wmsg(grd_unit).c_str()); } wxString & d = dist_text; /* TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as * in Compass bearing) and "Grd" for "Gradient" (the slope angle * measured by the clino) */ d.Printf(wmsg(/*%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s*/341), from_str.c_str(), hv_str.c_str(), dr, len_unit.c_str(), brg, wmsg(brg_unit).c_str(), grd_str.c_str()); } else { dist_text = wxString(); m_Gfx->SetThere(); } UpdateStatusBar(); } void MainFrm::DisplayTreeInfo(const wxTreeItemData* item) { const TreeData* data = static_cast(item); if (data) { if (data->IsStation()) { m_Gfx->SetHereFromTree(data->GetLabel()); } else { m_Gfx->SetHereSurvey(data->GetSurvey()); ShowInfo(); } return; } m_Gfx->SetHereSurvey(wxString()); ShowInfo(); } void MainFrm::TreeItemSelected(const wxTreeItemData* item) { const TreeData* data = static_cast(item); if (data && data->IsStation()) { const LabelInfo* label = data->GetLabel(); if (m_Gfx->GetThere() == label) { m_Gfx->CentreOn(*label); } else { m_Gfx->SetThere(label); } dist_text = wxString(); // FIXME: Need to update dist_text (From ... etc) // But we don't currently know where "here" is at this point in the // code! } else { dist_text = wxString(); m_Gfx->SetThere(); if (!data) { // Must be the root. wxCommandEvent dummy; OnDefaults(dummy); } else { m_Gfx->ZoomToSurvey(data->GetSurvey()); } } UpdateStatusBar(); } void MainFrm::OnPresNew(wxCommandEvent&) { if (m_PresList->Modified()) { // FIXME: better to ask "Do you want to save your changes?" and offer [Save] [Discard] [Cancel] if (wxMessageBox(wmsg(/*The current presentation has been modified. Abandon unsaved changes?*/327), wmsg(/*Modified Presentation*/326), wxOK|wxCANCEL|wxICON_QUESTION) == wxCANCEL) { return; } } m_PresList->New(m_File); if (!ShowingSidePanel()) ToggleSidePanel(); // Select the presentation page in the notebook. m_Notebook->SetSelection(1); } void MainFrm::OnPresOpen(wxCommandEvent&) { if (m_PresList->Modified()) { // FIXME: better to ask "Do you want to save your changes?" and offer [Save] [Discard] [Cancel] if (wxMessageBox(wmsg(/*The current presentation has been modified. Abandon unsaved changes?*/327), wmsg(/*Modified Presentation*/326), wxOK|wxCANCEL|wxICON_QUESTION) == wxCANCEL) { return; } } #ifdef __WXMOTIF__ wxFileDialog dlg(this, wmsg(/*Select a presentation to open*/322), wxString(), wxString(), wxT("*.fly"), wxFD_OPEN); #else wxFileDialog dlg(this, wmsg(/*Select a presentation to open*/322), wxString(), wxString(), wxString::Format(wxT("%s|*.fly|%s|%s"), wmsg(/*Aven presentations*/320).c_str(), wmsg(/*All files*/208).c_str(), wxFileSelectorDefaultWildcardStr), wxFD_OPEN|wxFD_FILE_MUST_EXIST); #endif if (dlg.ShowModal() == wxID_OK) { if (!m_PresList->Load(dlg.GetPath())) { return; } // FIXME : keep a history of loaded/saved presentations, like we do for // loaded surveys... // Select the presentation page in the notebook. m_Notebook->SetSelection(1); } } void MainFrm::OnPresSave(wxCommandEvent&) { m_PresList->Save(true); } void MainFrm::OnPresSaveAs(wxCommandEvent&) { m_PresList->Save(false); } void MainFrm::OnPresMark(wxCommandEvent&) { m_PresList->AddMark(); } void MainFrm::OnPresFRewind(wxCommandEvent&) { m_Gfx->PlayPres(-100); } void MainFrm::OnPresRewind(wxCommandEvent&) { m_Gfx->PlayPres(-10); } void MainFrm::OnPresReverse(wxCommandEvent&) { m_Gfx->PlayPres(-1); } void MainFrm::OnPresPlay(wxCommandEvent&) { m_Gfx->PlayPres(1); } void MainFrm::OnPresFF(wxCommandEvent&) { m_Gfx->PlayPres(10); } void MainFrm::OnPresFFF(wxCommandEvent&) { m_Gfx->PlayPres(100); } void MainFrm::OnPresPause(wxCommandEvent&) { m_Gfx->PlayPres(0); } void MainFrm::OnPresStop(wxCommandEvent&) { m_Gfx->PlayPres(0, false); } void MainFrm::OnPresExportMovie(wxCommandEvent&) { #ifdef WITH_LIBAV // FIXME : Taking the leaf of the currently loaded presentation as the // default might make more sense? wxString baseleaf; wxFileName::SplitPath(m_File, NULL, NULL, &baseleaf, NULL, wxPATH_NATIVE); wxFileDialog dlg(this, wmsg(/*Export Movie*/331), wxString(), baseleaf + wxT(".mp4"), wxT("MPEG|*.mp4|OGG|*.ogv|AVI|*.avi|QuickTime|*.mov|WMV|*.wmv;*.asf"), wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() == wxID_OK) { // Error is reported by GfxCore. (void)m_Gfx->ExportMovie(dlg.GetPath()); } #else wxGetApp().ReportError(wxT("Movie generation support code not present")); #endif } PresentationMark MainFrm::GetPresMark(int which) { return m_PresList->GetPresMark(which); } void MainFrm::RestrictTo(const wxString & survey) { // The station names will change, so clear the current search. wxCommandEvent dummy; OnHide(dummy); wxString new_prefix; if (!survey.empty()) { if (!m_Survey.empty()) { new_prefix = m_Survey; new_prefix += GetSeparator(); } new_prefix += survey; } // Reload the processed data rather rather than potentially reprocessing. if (!LoadData(m_FileProcessed, new_prefix)) return; InitialiseAfterLoad(m_File, new_prefix); } void MainFrm::OnOpenTerrainUpdate(wxUpdateUIEvent& event) { event.Enable(!m_File.empty()); } void MainFrm::OnPresNewUpdate(wxUpdateUIEvent& event) { event.Enable(!m_File.empty()); } void MainFrm::OnPresOpenUpdate(wxUpdateUIEvent& event) { event.Enable(!m_File.empty()); } void MainFrm::OnPresSaveUpdate(wxUpdateUIEvent& event) { event.Enable(!m_PresList->Empty()); } void MainFrm::OnPresSaveAsUpdate(wxUpdateUIEvent& event) { event.Enable(!m_PresList->Empty()); } void MainFrm::OnPresMarkUpdate(wxUpdateUIEvent& event) { event.Enable(!m_File.empty()); } void MainFrm::OnPresFRewindUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() < -10); } void MainFrm::OnPresRewindUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() == -10); } void MainFrm::OnPresReverseUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() == -1); } void MainFrm::OnPresPlayUpdate(wxUpdateUIEvent& event) { event.Enable(!m_PresList->Empty()); event.Check(m_Gfx && m_Gfx->GetPresentationMode() && m_Gfx->GetPresentationSpeed() == 1); } void MainFrm::OnPresFFUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() == 10); } void MainFrm::OnPresFFFUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() > 10); } void MainFrm::OnPresPauseUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); event.Check(m_Gfx && m_Gfx->GetPresentationSpeed() == 0); } void MainFrm::OnPresStopUpdate(wxUpdateUIEvent& event) { event.Enable(m_Gfx && m_Gfx->GetPresentationMode()); } void MainFrm::OnPresExportMovieUpdate(wxUpdateUIEvent& event) { event.Enable(!m_PresList->Empty()); } void MainFrm::OnFind(wxCommandEvent&) { pending_find = true; } void MainFrm::OnIdle(wxIdleEvent&) { if (pending_find) { DoFind(); } } void MainFrm::DoFind() { pending_find = false; wxBusyCursor hourglass; // Find stations specified by a string or regular expression pattern. wxString pattern = m_FindBox->GetValue(); if (pattern.empty()) { // Hide any search result highlights. list::iterator pos = m_Labels.begin(); while (pos != m_Labels.end()) { LabelInfo* label = *pos++; label->clear_flags(LFLAG_HIGHLIGHTED); } m_NumHighlighted = 0; } else { int re_flags = wxRE_NOSUB; if (true /* case insensitive */) { re_flags |= wxRE_ICASE; } bool substring = true; if (false /*m_RegexpCheckBox->GetValue()*/) { re_flags |= wxRE_EXTENDED; } else if (true /* simple glob-style */) { wxString pat; for (size_t i = 0; i < pattern.size(); i++) { wxChar ch = pattern[i]; // ^ only special at start; $ at end. But this is simpler... switch (ch) { case '^': case '$': case '.': case '[': case '\\': pat += wxT('\\'); pat += ch; break; case '*': pat += wxT(".*"); substring = false; break; case '?': pat += wxT('.'); substring = false; break; default: pat += ch; } } pattern = pat; re_flags |= wxRE_BASIC; } else { wxString pat; for (size_t i = 0; i < pattern.size(); i++) { wxChar ch = pattern[i]; // ^ only special at start; $ at end. But this is simpler... switch (ch) { case '^': case '$': case '*': case '.': case '[': case '\\': pat += wxT('\\'); } pat += ch; } pattern = pat; re_flags |= wxRE_BASIC; } if (!substring) { // FIXME "0u" required to avoid compilation error with g++-3.0 if (pattern.empty() || pattern[0u] != '^') pattern = wxT('^') + pattern; // FIXME: this fails to cope with "\$" at the end of pattern... if (pattern[pattern.size() - 1] != '$') pattern += wxT('$'); } wxRegEx regex; if (!regex.Compile(pattern, re_flags)) { wxBell(); return; } int found = 0; list::iterator pos = m_Labels.begin(); while (pos != m_Labels.end()) { LabelInfo* label = *pos++; if (regex.Matches(label->GetText())) { label->set_flags(LFLAG_HIGHLIGHTED); ++found; } else { label->clear_flags(LFLAG_HIGHLIGHTED); } } m_NumHighlighted = found; // Re-sort so highlighted points get names in preference if (found) m_Labels.sort(LabelPlotCmp(GetSeparator())); } m_Gfx->UpdateBlobs(); m_Gfx->ForceRefresh(); if (!m_NumHighlighted) { GetToolBar()->SetToolShortHelp(button_HIDE, wmsg(/*No matches were found.*/328)); } else { /* TRANSLATORS: "Hide stations" button tooltip when stations are found */ GetToolBar()->SetToolShortHelp(button_HIDE, wxString::Format(wmsg(/*Hide %d found stations*/334).c_str(), m_NumHighlighted)); } } void MainFrm::OnGotoFound(wxCommandEvent&) { if (!m_NumHighlighted) { wxGetApp().ReportError(wmsg(/*No matches were found.*/328)); return; } Double xmin = DBL_MAX; Double xmax = -DBL_MAX; Double ymin = DBL_MAX; Double ymax = -DBL_MAX; Double zmin = DBL_MAX; Double zmax = -DBL_MAX; list::iterator pos = m_Labels.begin(); while (pos != m_Labels.end()) { LabelInfo* label = *pos++; if (label->get_flags() & LFLAG_HIGHLIGHTED) { if (label->GetX() < xmin) xmin = label->GetX(); if (label->GetX() > xmax) xmax = label->GetX(); if (label->GetY() < ymin) ymin = label->GetY(); if (label->GetY() > ymax) ymax = label->GetY(); if (label->GetZ() < zmin) zmin = label->GetZ(); if (label->GetZ() > zmax) zmax = label->GetZ(); } } m_Gfx->SetViewTo(xmin, xmax, ymin, ymax, zmin, zmax); m_Gfx->SetFocus(); } void MainFrm::OnHide(wxCommandEvent&) { m_FindBox->SetValue(wxString()); GetToolBar()->SetToolShortHelp(button_HIDE, wmsg(/*Hide*/333)); } void MainFrm::OnHideUpdate(wxUpdateUIEvent& ui) { ui.Enable(m_NumHighlighted != 0); } void MainFrm::OnViewSidePanel(wxCommandEvent&) { ToggleSidePanel(); } void MainFrm::ToggleSidePanel() { // Toggle display of the side panel. assert(m_Gfx); if (m_Splitter->IsSplit()) { m_SashPosition = m_Splitter->GetSashPosition(); // save width of panel m_Splitter->Unsplit(m_Notebook); } else { m_Notebook->Show(true); m_Gfx->Show(true); m_Splitter->SplitVertically(m_Notebook, m_Gfx, m_SashPosition); } } void MainFrm::OnViewSidePanelUpdate(wxUpdateUIEvent& ui) { ui.Enable(!m_File.empty()); ui.Check(ShowingSidePanel()); } bool MainFrm::ShowingSidePanel() { return m_Splitter->IsSplit(); } void MainFrm::ViewFullScreen() { #ifdef __WXMAC__ // On macOS, wxWidgets doesn't currently hide the toolbar or statusbar in // full screen mode (last checked with 3.0.2), but it is easy to do // ourselves. if (!IsFullScreen()) { GetToolBar()->Hide(); GetStatusBar()->Hide(); } #endif ShowFullScreen(!IsFullScreen()); fullscreen_showing_menus = false; if (IsFullScreen()) was_showing_sidepanel_before_fullscreen = ShowingSidePanel(); if (was_showing_sidepanel_before_fullscreen) ToggleSidePanel(); #ifdef __WXMAC__ if (!IsFullScreen()) { GetStatusBar()->Show(); GetToolBar()->Show(); #ifdef USING_GENERIC_TOOLBAR Layout(); #endif } #endif } bool MainFrm::FullScreenModeShowingMenus() const { return fullscreen_showing_menus; } void MainFrm::FullScreenModeShowMenus(bool show) { if (!IsFullScreen() || show == fullscreen_showing_menus) return; #ifdef __WXMAC__ // On macOS, enabling the menu bar while in full // screen mode doesn't have any effect, so instead // make moving the mouse to the top of the screen // drop us out of full screen mode for now. ViewFullScreen(); #else GetMenuBar()->Show(show); fullscreen_showing_menus = show; #endif } survex-1.4.4/src/gllogerror.h0000644000175000017500000000321114141575516013121 00000000000000// // gllogerror.h // // Check for and report OpenGL errors // // Copyright (C) 2002 Mark R. Shinwell. // Copyright (C) 2003,2004,2005,2006,2007,2011,2012,2014,2017,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #include "wx.h" void log_gl_error(const wxChar * str, GLenum error_code); // Important: CHECK_GL_ERROR must not be called within a glBegin()/glEnd() pair // (thus it must not be called from BeginLines(), etc., or within a // BeginLines()/EndLines() block etc.) #define CHECK_GL_ERROR(M, F) do { \ extern bool opengl_initialised; \ if (!opengl_initialised) { \ wxLogError(wxT(__FILE__ ":" STRING(__LINE__) ": OpenGL not initialised " \ "before (call " F " in method " M ")")); \ } \ GLenum error_code_ = glGetError(); \ if (error_code_ != GL_NO_ERROR) { \ log_gl_error(wxT(__FILE__ ":" STRING(__LINE__) ": OpenGL error: %s " \ "(call " F " in method " M ")"), error_code_); \ } \ } while (0) survex-1.4.4/src/validate.h0000644000175000017500000000212213346142325012526 00000000000000/* validate.h * Header file for validate.c * * Copyright (C) 1994,1996,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef VALIDATE_H #define VALIDATE_H #include "debug.h" #include "cavern.h" bool validate(void); void dump_node(node *stn); void dump_network(void); #if (VALIDATE==0) # define validate() NOP # define dump_node(S) NOP #endif #if (DUMP_NETWORK==0) # define dump_network() NOP #endif #endif survex-1.4.4/src/gdtconvert0000755000175000017500000000433013346142325012674 00000000000000#!/usr/bin/perl -w # gdtconvert # # Converter for POV-Ray gradient files produced by The Gimp # # Copyright (C) 2002 Mark R. Shinwell # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA use strict; my $points = 13; my $prev = -1.0; my $interval = 1.0 / ($points-1); my $next = 0.0; my $pr = 0; my $pg = 0; my $pb = 0; my $prevpos = 0.0; my $outputr = ""; my $outputg = ""; my $outputb = ""; while (my $l = <>) { if ($l =~ /.*\[(\d\.\d+) color rgbt <(\d\.\d+), (\d\.\d+), (\d\.\d+).*/) { if ($prev != $1) { my $r = int($2 * 255); my $g = int($3 * 255); my $b = int($4 * 255); my $pos = $1; while ($pos >= $next) { if ($prev == -1.0) { $outputr = $r; $outputg = $g; $outputb = $b; } else { my $faralong = $next - $prevpos; my $total = $pos - $prevpos; my $frac = $faralong / $total; my $newr = $pr + int(($r - $pr) * $frac); my $newg = $pg + int(($g - $pg) * $frac); my $newb = $pb + int(($b - $pb) * $frac); $outputr = "$outputr, $newr"; $outputg = "$outputg, $newg"; $outputb = "$outputb, $newb"; } $next += $interval; } $pr = $r; $pg = $g; $pb = $b; $prevpos = $pos; } $prev = $1; } } print "/* Generated by $0 */\n"; print "static const unsigned char REDS[] = {$outputr, 230};\n"; print "static const unsigned char GREENS[] = {$outputg, 230};\n"; print "static const unsigned char BLUES[] = {$outputb, 230};\n"; survex-1.4.4/src/model.h0000644000175000017500000002007714141575516012054 00000000000000// // model.h // // Cave survey model. // // Copyright (C) 2000-2003,2005 Mark R. Shinwell // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef model_h #define model_h #include "wx.h" #include "labelinfo.h" #include "vector3.h" #include #include #include #include using namespace std; class MainFrm; class PointInfo : public Point { int date; public: PointInfo() : Point(), date(-1) { } explicit PointInfo(const img_point & pt) : Point(pt), date(-1) { } PointInfo(const img_point & pt, int date_) : Point(pt), date(date_) { } PointInfo(const Point & p, int date_) : Point(p), date(date_) { } int GetDate() const { return date; } }; class XSect { friend class MainFrm; const LabelInfo* stn; int date; double l, r, u, d; double right_bearing; public: XSect(const LabelInfo* stn_, int date_, double l_, double r_, double u_, double d_) : stn(stn_), date(date_), l(l_), r(r_), u(u_), d(d_), right_bearing(0) { } double GetL() const { return l; } double GetR() const { return r; } double GetU() const { return u; } double GetD() const { return d; } double get_right_bearing() const { return right_bearing; } void set_right_bearing(double right_bearing_) { right_bearing = right_bearing_; } int GetDate() const { return date; } const wxString& GetLabel() const { return stn->GetText(); } const Point& GetPoint() const { return *stn; } double GetX() const { return stn->GetX(); } double GetY() const { return stn->GetY(); } double GetZ() const { return stn->GetZ(); } friend Vector3 operator-(const XSect& a, const XSect& b); }; inline Vector3 operator-(const XSect& a, const XSect& b) { return *(a.stn) - *(b.stn); } class traverse : public vector { public: int n_legs = 0; // Bitmask of img_FLAG_SURFACE, img_FLAG_SPLAY and img_FLAG_DUPLICATE. int flags = 0; // An img_STYLE_* value. int style = 0; double length = 0.0; enum { ERROR_3D = 0, ERROR_H = 1, ERROR_V = 2 }; double errors[3] = {-1, -1, -1}; wxString name; explicit traverse(const char* name_) : name(name_, wxConvUTF8) { if (name.empty() && !name_[0]) { // If name isn't valid UTF-8 then this conversion will // give an empty string. In this case, assume that the // label is CP1252 (the Microsoft superset of ISO8859-1). static wxCSConv ConvCP1252(wxFONTENCODING_CP1252); name = wxString(name_, ConvCP1252); if (name.empty()) { // Or if that doesn't work (ConvCP1252 doesn't like // strings with some bytes in) let's just go for // ISO8859-1. name = wxString(name_, wxConvISO8859_1); } } } }; class SurveyFilter { std::set> filters; std::set> redundant_filters; // Default to the Survex standard separator - then a filter created before // the survey separator is known is likely to not need rebuilding. wxChar separator = '.'; public: SurveyFilter() {} void add(const wxString& survey); void remove(const wxString& survey); void clear() { filters.clear(); redundant_filters.clear(); } bool empty() const { return filters.empty(); } void SetSeparator(wxChar separator_); bool CheckVisible(const wxString& name) const; }; /// Cave model. class Model { list traverses[8]; mutable list> tubes; public: // FIXME list m_Labels; private: Vector3 m_Ext; double m_DepthMin, m_DepthExt; int m_DateMin, m_DateExt; bool complete_dateinfo; int m_NumEntrances = 0; int m_NumFixedPts = 0; int m_NumExportedPts = 0; bool m_HasUndergroundLegs = false; bool m_HasSplays = false; bool m_HasDupes = false; bool m_HasSurfaceLegs = false; bool m_HasErrorInformation = false; bool m_IsExtendedElevation = false; mutable bool m_TubesPrepared = false; // Character separating survey levels (often '.') wxChar m_separator; wxString m_Title, m_cs_proj, m_DateStamp; time_t m_DateStamp_numeric; Vector3 m_Offset; void do_prepare_tubes() const; void CentreDataset(const Vector3& vmin); public: int Load(const wxString& file, const wxString& prefix); const Vector3& GetExtent() const { return m_Ext; } const wxString& GetSurveyTitle() const { return m_Title; } const wxString& GetDateString() const { return m_DateStamp; } time_t GetDateStamp() const { return m_DateStamp_numeric; } double GetDepthExtent() const { return m_DepthExt; } double GetDepthMin() const { return m_DepthMin; } bool HasCompleteDateInfo() const { return complete_dateinfo; } int GetDateExtent() const { return m_DateExt; } int GetDateMin() const { return m_DateMin; } int GetNumFixedPts() const { return m_NumFixedPts; } int GetNumExportedPts() const { return m_NumExportedPts; } int GetNumEntrances() const { return m_NumEntrances; } bool HasUndergroundLegs() const { return m_HasUndergroundLegs; } bool HasSplays() const { return m_HasSplays; } bool HasDupes() const { return m_HasDupes; } bool HasSurfaceLegs() const { return m_HasSurfaceLegs; } bool HasTubes() const { return !tubes.empty(); } bool HasErrorInformation() const { return m_HasErrorInformation; } bool IsExtendedElevation() const { return m_IsExtendedElevation; } wxChar GetSeparator() const { return m_separator; } const wxString& GetCSProj() const { return m_cs_proj; } const Vector3& GetOffset() const { return m_Offset; } list::const_iterator traverses_begin(unsigned flags, const SurveyFilter* filter) const { if (flags >= sizeof(traverses)) return traverses[0].end(); auto it = traverses[flags].begin(); if (filter) { while (it != traverses[flags].end() && !filter->CheckVisible(it->name)) { ++it; } } return it; } list::const_iterator traverses_next(unsigned flags, const SurveyFilter* filter, list::const_iterator it) const { ++it; if (filter) { while (it != traverses[flags].end() && !filter->CheckVisible(it->name)) { ++it; } } return it; } list::const_iterator traverses_end(unsigned flags) const { if (flags >= sizeof(traverses)) flags = 0; return traverses[flags].end(); } list>::const_iterator tubes_begin() const { prepare_tubes(); return tubes.begin(); } list>::const_iterator tubes_end() const { return tubes.end(); } list>::iterator tubes_begin() { prepare_tubes(); return tubes.begin(); } list>::iterator tubes_end() { return tubes.end(); } list::const_iterator GetLabels() const { return m_Labels.begin(); } list::const_iterator GetLabelsEnd() const { return m_Labels.end(); } list::const_reverse_iterator GetRevLabels() const { return m_Labels.rbegin(); } list::const_reverse_iterator GetRevLabelsEnd() const { return m_Labels.rend(); } list::iterator GetLabelsNC() { return m_Labels.begin(); } list::iterator GetLabelsNCEnd() { return m_Labels.end(); } void prepare_tubes() const { if (!m_TubesPrepared) { do_prepare_tubes(); m_TubesPrepared = true; } } }; #endif survex-1.4.4/src/pos.cc0000644000175000017500000000656714312175046011715 00000000000000/* pos.cc * Export from Aven as Survex .pos or .csv. */ /* Copyright (C) 2001,2002,2011,2013,2014,2015,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "pos.h" #include "export.h" // For LABELS, etc #include #include #include #include "message.h" #include "namecompare.h" #include "osalloc.h" #include "useful.h" using namespace std; static void csv_quote(const char* s, FILE* fh) { size_t i = 0; while (true) { switch (s[i]) { case '\0': fputs(s, fh); return; case ',': case '"': case '\r': case '\n': break; } ++i; } PUTC('"', fh); fwrite(s, i, 1, fh); while (s[i]) { // Double up any " in the string to escape them. if (s[i] == '"') PUTC(s[i], fh); PUTC(s[i], fh); ++i; } PUTC('"', fh); } POS::~POS() { vector::const_iterator i; for (i = todo.begin(); i != todo.end(); ++i) { free(*i); } todo.clear(); } const int * POS::passes() const { static const int default_passes[] = { LABELS|ENTS|FIXES|EXPORTS, 0 }; return default_passes; } void POS::header(const char *, const char *, time_t, double, double, double, double, double, double) { if (csv) { bool comma = false; for (int msgno : { /*Easting*/378, /*Northing*/379, /*Altitude*/335, /*Station Name*/100 }) { if (comma) PUTC(',', fh); csv_quote(msg(msgno), fh); comma = true; } PUTC('\n', fh); } else { /* TRANSLATORS: Heading line for .pos file. Please try to ensure the * “,â€s (or at least the columns) are in the same place */ fputsnl(msg(/*( Easting, Northing, Altitude )*/195), fh); } } void POS::label(const img_point *p, const char *s, bool /*fSurface*/, int /*type*/) { size_t len = strlen(s); pos_label * l = (pos_label*)malloc(offsetof(pos_label, name) + len + 1); if (l == NULL) throw std::bad_alloc(); l->x = p->x; l->y = p->y; l->z = p->z; memcpy(l->name, s, len + 1); todo.push_back(l); } class pos_label_ptr_cmp { char separator; public: explicit pos_label_ptr_cmp(char separator_) : separator(separator_) { } bool operator()(const POS::pos_label* a, const POS::pos_label* b) { return name_cmp(a->name, b->name, separator) < 0; } }; void POS::footer() { sort(todo.begin(), todo.end(), pos_label_ptr_cmp(separator)); vector::const_iterator i; for (i = todo.begin(); i != todo.end(); ++i) { if (csv) { fprintf(fh, "%.2f,%.2f,%.2f,", (*i)->x, (*i)->y, (*i)->z); csv_quote((*i)->name, fh); PUTC('\n', fh); } else { fprintf(fh, "(%8.2f, %8.2f, %8.2f ) %s\n", (*i)->x, (*i)->y, (*i)->z, (*i)->name); } } } survex-1.4.4/src/netbits.h0000644000175000017500000001026614142042211012401 00000000000000/* netbits.h * Header file for miscellaneous primitive network routines for Survex * Copyright (C) 1994,1997,1998,2001,2006,2015 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void clear_last_leg(void); node *StnFromPfx(prefix *name); linkfor *copy_link(linkfor *leg); linkfor *addto_link(linkfor *leg, const linkfor *leg2); void addlegbyname(prefix *fr_name, prefix *to_name, bool fToFirst, real dx, real dy, real dz, real vx, real vy, real vz #ifndef NO_COVARIANCES , real cyz, real czx, real cxy #endif ); void process_equate(prefix *name1, prefix *name2); void addfakeleg(node *fr, node *to, real dx, real dy, real dz, real vx, real vy, real vz #ifndef NO_COVARIANCES , real cyz, real czx, real cxy #endif ); /* insert at head of double-linked list */ void add_stn_to_list(node **list, node *stn); /* remove from double-linked list */ void remove_stn_from_list(node **list, node *stn); /* one node must only use leg[0] */ #define one_node(S) (!(S)->leg[1] && (S)->leg[0]) /* two node must only use leg[0] and leg[1] */ #define two_node(S) (!(S)->leg[2] && (S)->leg[1]) /* three node iff it uses leg[2] */ #define three_node(S) ((S)->leg[2]) /* NB FOR_EACH_STN() can't be nested - but it's hard to police as we can't * easily set stn_iter to NULL if the loop is exited with break */ /* Need stn_iter so we can adjust iterator if the stn it points to is deleted */ extern node *stn_iter; #define FOR_EACH_STN(S,L) \ for (stn_iter = (L); ((S) = stn_iter) != NULL;\ stn_iter = ((S) == stn_iter) ? stn_iter->next : stn_iter) #define print_prefix(N) fprint_prefix(stdout, (N)) char *sprint_prefix(const prefix *ptr); void fprint_prefix(FILE *fh, const prefix *ptr); /* r = ab ; r,a,b are variance matrices */ void mulss(var *r, /*const*/ svar *a, /*const*/ svar *b); #ifdef NO_COVARIANCES /* In the NO_COVARIANCES case, v and s are the same so we only need one * version. */ # define smulvs(R,A,B) mulss(R,A,B) #else /* r = ab ; r,a,b are variance matrices */ void smulvs(svar *r, /*const*/ var *a, /*const*/ svar *b); #endif /* r = ab ; r,b delta vectors; a variance matrix */ void mulsd(delta *r, /*const*/ svar *a, /*const*/ delta *b); /* r = ca ; r,a variance matrices; c real scaling factor */ void mulsc(svar *r, /*const*/ svar *a, real c); /* r = a + b ; r,a,b delta vectors */ void adddd(delta *r, /*const*/ delta *a, /*const*/ delta *b); /* r = a - b ; r,a,b delta vectors */ void subdd(delta *r, /*const*/ delta *a, /*const*/ delta *b); /* r = a + b ; r,a,b variance matrices */ void addss(svar *r, /*const*/ svar *a, /*const*/ svar *b); /* r = a - b ; r,a,b variance matrices */ void subss(svar *r, /*const*/ svar *a, /*const*/ svar *b); /* r = (b^-1)a ; r,a delta vectors; b variance matrix */ void divds(delta *r, /*const*/ delta *a, /*const*/ svar *b); /* inv = v^-1 ; inv,v variance matrices */ int invert_svar(svar *inv, /*const*/ svar *v); /* Is v zero? */ bool fZeros(/*const*/ svar *v); #define PR "%8.6f" #ifdef NO_COVARIANCES # define print_var(V) printf("("PR","PR","PR")\n", (V)[0], (V)[1], (V)[2]) # define print_svar(V) printf("("PR","PR","PR")\n", (V)[0], (V)[1], (V)[2]) #else # define print_var(V) \ printf("/"PR","PR","PR"\\\n|"PR","PR","PR"|\n\\"PR","PR","PR"/\n",\ (V)[0][0], (V)[0][1], (V)[0][2],\ (V)[1][0], (V)[1][1], (V)[1][2],\ (V)[2][0], (V)[2][1], (V)[2][2]) # define print_svar(V) \ printf("/"PR","PR","PR"\\\n:"PR","PR","PR":\n\\"PR","PR","PR"/\n",\ (V)[0], (V)[3], (V)[4],\ (V)[3], (V)[1], (V)[5],\ (V)[4], (V)[5], (V)[2]) #endif #define print_d(D) printf("("PR","PR","PR")", (D)[0], (D)[1], (D)[2]) survex-1.4.4/src/listpos.c0000644000175000017500000001235314142042211012420 00000000000000/* listpos.c * SURVEX Cave surveying software: stuff to do with stn position output * Copyright (C) 1991-2002,2011,2012,2013,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #define PRINT_STN_POS_LIST 1 #define NODESTAT 1 #include #include "cavern.h" #include "datain.h" #include "debug.h" #include "filename.h" #include "message.h" #include "filelist.h" #include "netbits.h" #include "listpos.h" #include "out.h" /* Traverse prefix tree depth first starting at from, and * calling function fn at each node */ static void traverse_prefix_tree(prefix *from, void (*fn)(prefix *)) { prefix *p; fn(from); p = from->down; if (!p) return; while (1) { fn(p); if (p->down) { p = p->down; } else { if (!p->right) { do { p = p->up; if (p == from) return; /* got back to start */ } while (!p->right); } p = p->right; } } } static void check_node(prefix *p) { if (!p->pos) { if (!TSTBIT(p->sflags, SFLAGS_SURVEY)) { /* Could do away with the SFLAGS_SURVEY check and check * p->min_export instead of p->max_export I think ... */ if (TSTBIT(p->sflags, SFLAGS_ENTRANCE) || p->max_export) { /* p is a station which was referred to in "*entrance" and/or * "*export" but not elsewhere (otherwise it'd have a position). * p could also be a survey (SFLAGS_SURVEY) or be mentioned as * a station, but only in a line of data which was rejected * because of an error. */ warning_in_file(p->filename, p->line, /*Station “%s†referred to by *entrance or *export but never used*/190, sprint_prefix(p)); } } } else { /* Do we need to worry about export violations in hanging surveys? */ if (fExportUsed) { #if 0 printf("L min %d max %d pfx %s\n", p->min_export, p->max_export, sprint_prefix(p)); #endif if ((p->min_export > 1 && p->min_export != USHRT_MAX) || (p->min_export == 0 && p->max_export)) { char *s; prefix *where = p->up; int msgno; SVX_ASSERT(where); s = osstrdup(sprint_prefix(where)); /* Report better when station called 2.1 for example */ while (!where->filename && where->up) where = where->up; if (TSTBIT(where->sflags, SFLAGS_PREFIX_ENTERED)) { msgno = /*Station “%s†not exported from survey “%sâ€*/26; } else { /* TRANSLATORS: This error occurs if there's an attempt to * export a station from a survey which doesn't actually exist. * * Here "survey" is a "cave map" rather than list of questions - it should be * translated to the terminology that cavers using the language would use. */ msgno = /*Reference to station “%s†from non-existent survey “%sâ€*/286; } compile_diagnostic_pfx(DIAG_ERR, where, msgno, sprint_prefix(p), s); osfree(s); } } if (TSTBIT(p->sflags, SFLAGS_SUSPECTTYPO)) { /* TRANSLATORS: Here "station" is a survey station, not a train station. */ warning_in_file(p->filename, p->line, /*Station “%s†referred to just once, with an explicit survey name - typo?*/70, sprint_prefix(p)); } } } #if NODESTAT static int *cOrder; static int icOrderMac; static void node_stat(prefix *p) { if (p->pos) { int order; SVX_ASSERT(pfx_fixed(p)); order = p->shape; if (order >= icOrderMac) { int c = order * 2; cOrder = osrealloc(cOrder, c * ossizeof(int)); while (icOrderMac < c) cOrder[icOrderMac++] = 0; } cOrder[order]++; } check_node(p); } static void node_stats(prefix *from) { prefix * p; icOrderMac = 8; /* Start value */ cOrder = osmalloc(icOrderMac * ossizeof(int)); memset(cOrder, 0, icOrderMac * ossizeof(int)); traverse_prefix_tree(from, node_stat); for (p = anon_list; p; p = p->right) { node_stat(p); } } #endif extern void print_node_stats(void) { #if NODESTAT int c; int max_c = 9999; /* Always allow space for 4 digits. */ int width; node_stats(root); for (c = 0; c < icOrderMac; c++) { if (cOrder[c] > max_c) { max_c = cOrder[c]; } } width = 1 + (int)log10((double)max_c); for (c = 0; c < icOrderMac; c++) { if (cOrder[c] > 0) { printf("%*d %d-%s.\n", width, cOrder[c], c, msg(cOrder[c] == 1 ? /* TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." */ /*node*/176 : /* TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." */ /*nodes*/177)); } } #endif } extern void check_node_stats(void) { traverse_prefix_tree(root, check_node); } survex-1.4.4/src/moviemaker.h0000644000175000017500000000364714141575516013117 00000000000000// // moviemaker.h // // Class for writing movies from Aven. // // Copyright (C) 2004,2010,2011,2013,2014,2016 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef moviemaker_h #define moviemaker_h #ifndef PACKAGE # error config.h must be included first in each C++ source file #endif #include struct AVCodecContext; struct AVFormatContext; struct AVStream; struct AVFrame; struct AVPicture; struct SwsContext; class MovieMaker { #ifdef WITH_LIBAV AVFormatContext *oc; AVStream *video_st; # ifndef HAVE_AVCODEC_ENCODE_VIDEO2 int out_size; // Legacy-only. # endif AVCodecContext *context; AVFrame *frame; # if LIBAVCODEC_VERSION_MAJOR < 57 unsigned char *outbuf; // Legacy-only. # endif # ifndef HAVE_AVCODEC_ENCODE_VIDEO2 AVPicture *out; // Legacy-only. # endif unsigned char *pixels; SwsContext *sws_ctx; int averrno; FILE* fh_to_close; int encode_frame(AVFrame* frame); void release(); #endif public: MovieMaker(); bool Open(FILE* fh, const char* ext, int width, int height); unsigned char * GetBuffer() const; int GetWidth() const; int GetHeight() const; bool AddFrame(); bool Close(); ~MovieMaker(); const char * get_error_string() const; }; #endif survex-1.4.4/src/str.h0000644000175000017500000000243214141575516011557 00000000000000/* append a string */ /* Copyright (c) Olly Betts 1999, 2001, 2012, 2014 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "osalloc.h" void s_cat(char **pstr, int *plen, const char *s); void s_catlen(char **pstr, int *plen, const char *s, int s_len); /* append a character */ void s_catchar(char **pstr, int *plen, char /*ch*/); /* truncate string to zero length */ #define s_zero(P) do { \ char **s_zero__P = (P); \ if (*s_zero__P) **s_zero__P = '\0'; \ } while (0) #define s_free(P) do { \ char **s_free__P = (P); \ if (*s_free__P) { \ osfree(*s_free__P); \ *s_free__P = NULL; \ } \ } while (0) survex-1.4.4/src/aventypes.h0000644000175000017500000000173414141575516012771 00000000000000// // aventypes.h // // Copyright (C) 2001-2002 Mark R. Shinwell. // Copyright (C) 2002,2005 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef aventypes_h #define aventypes_h #ifdef __APPLE__ #include #else #include #endif typedef GLdouble Double; #endif survex-1.4.4/src/log.h0000644000175000017500000000172214141575516011531 00000000000000// log.h - Error log window for Aven. // // Copyright (C) 2006,2011,2014 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #include "wx.h" class MyLogWindow : public wxLogWindow { bool first; public: MyLogWindow(); protected: void DoLogText(const wxString & msg); }; survex-1.4.4/src/gfxcore.cc0000644000175000017500000037067214241025375012552 00000000000000// // gfxcore.cc // // Core drawing code for Aven. // // Copyright (C) 2000-2003,2005,2006 Mark R. Shinwell // Copyright (C) 2001-2022 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include #include #include "aven.h" #include "aventreectrl.h" #include "date.h" #include "filename.h" #include "gfxcore.h" #include "hash.h" #include "mainfrm.h" #include "message.h" #include "useful.h" #include "printing.h" #include "guicontrol.h" #include "moviemaker.h" #include #include #include #include #include const unsigned long DEFAULT_HGT_DIM = 3601; const unsigned long DEFAULT_HGT_SIZE = sqrd(DEFAULT_HGT_DIM) * 2; // Values for m_SwitchingTo #define PLAN 1 #define ELEVATION 2 #define NORTH 3 #define EAST 4 #define SOUTH 5 #define WEST 6 // Any error value higher than this is clamped to this. #define MAX_ERROR 12.0 // Any length greater than pow(10, LOG_LEN_MAX) will be clamped to this. const Double LOG_LEN_MAX = 1.5; // How many bins per letter height to use when working out non-overlapping // labels. const unsigned int QUANTISE_FACTOR = 2; #include "avenpal.h" static const int INDICATOR_BOX_SIZE = 60; static const int INDICATOR_GAP = 8; static const int INDICATOR_MARGIN = 5; static const int INDICATOR_OFFSET_X = 15; static const int INDICATOR_OFFSET_Y = 15; static const int INDICATOR_RADIUS = INDICATOR_BOX_SIZE / 2 - INDICATOR_MARGIN; static const int KEY_OFFSET_X = 10; static const int KEY_OFFSET_Y = 10; static const int KEY_EXTRA_LEFT_MARGIN = 2; static const int KEY_BLOCK_WIDTH = 20; static const int KEY_BLOCK_HEIGHT = 16; static const int TICK_LENGTH = 4; static const int SCALE_BAR_OFFSET_X = 15; static const int SCALE_BAR_OFFSET_Y = 8; static const int SCALE_BAR_HEIGHT = 12; static const gla_colour TEXT_COLOUR = col_GREEN; static const gla_colour HERE_COLOUR = col_WHITE; static const gla_colour NAME_COLOUR = col_GREEN; static const gla_colour SEL_COLOUR = col_WHITE; // Used with colour by date for legs without date information and with colour // by error for legs not in a loop. static const gla_colour NODATA_COLOUR = col_LIGHT_GREY_2; // Number of entries across and down the hit-test grid: #define HITTEST_SIZE 20 // How close the pointer needs to be to a station to be considered: #define MEASURE_THRESHOLD 7 // vector for lighting angle static const Vector3 light(.577, .577, .577); BEGIN_EVENT_TABLE(GfxCore, GLACanvas) EVT_PAINT(GfxCore::OnPaint) EVT_LEFT_DOWN(GfxCore::OnLButtonDown) EVT_LEFT_UP(GfxCore::OnLButtonUp) EVT_MIDDLE_DOWN(GfxCore::OnMButtonDown) EVT_MIDDLE_UP(GfxCore::OnMButtonUp) EVT_RIGHT_DOWN(GfxCore::OnRButtonDown) EVT_RIGHT_UP(GfxCore::OnRButtonUp) EVT_MOUSEWHEEL(GfxCore::OnMouseWheel) EVT_MOTION(GfxCore::OnMouseMove) EVT_LEAVE_WINDOW(GfxCore::OnLeaveWindow) EVT_SIZE(GfxCore::OnSize) EVT_IDLE(GfxCore::OnIdle) EVT_CHAR(GfxCore::OnKeyPress) END_EVENT_TABLE() GfxCore::GfxCore(MainFrm* parent, wxWindow* parent_win, GUIControl* control) : GLACanvas(parent_win, 100), m_Scale(0.0), initial_scale(1.0), m_ScaleBarWidth(0), m_Control(control), m_LabelGrid(NULL), m_Parent(parent), m_DoneFirstShow(false), m_TiltAngle(0.0), m_PanAngle(0.0), m_Rotating(false), m_RotationStep(0.0), m_SwitchingTo(0), m_Crosses(false), m_Legs(true), m_Splays(SHOW_FADED), m_Dupes(SHOW_DASHED), m_Names(false), m_Scalebar(true), m_ColourKey(true), m_OverlappingNames(false), m_Compass(true), m_Clino(true), m_Tubes(false), m_ColourBy(COLOUR_BY_DEPTH), m_HaveData(false), m_HaveTerrain(true), m_MouseOutsideCompass(false), m_MouseOutsideElev(false), m_Surface(false), m_Entrances(false), m_FixedPts(false), m_ExportedPts(false), m_Grid(false), m_BoundingBox(false), m_Terrain(false), m_Degrees(false), m_Metric(false), m_Percent(false), m_HitTestDebug(false), m_RenderStats(false), m_PointGrid(NULL), m_HitTestGridValid(false), m_here(NULL), m_there(NULL), presentation_mode(0), pres_reverse(false), pres_speed(0.0), movie(NULL), current_cursor(GfxCore::CURSOR_DEFAULT), sqrd_measure_threshold(sqrd(MEASURE_THRESHOLD)), dem(NULL), last_time(0), n_tris(0) { AddQuad = &GfxCore::AddQuadrilateralDepth; AddPoly = &GfxCore::AddPolylineDepth; wxConfigBase::Get()->Read(wxT("metric"), &m_Metric, true); wxConfigBase::Get()->Read(wxT("degrees"), &m_Degrees, true); wxConfigBase::Get()->Read(wxT("percent"), &m_Percent, false); for (int pen = 0; pen < NUM_COLOUR_BANDS + 1; ++pen) { m_Pens[pen].SetColour(REDS[pen] / 255.0, GREENS[pen] / 255.0, BLUES[pen] / 255.0); } timer.Start(); } GfxCore::~GfxCore() { TryToFreeArrays(); delete[] m_PointGrid; } void GfxCore::TryToFreeArrays() { // Free up any memory allocated for arrays. delete[] m_LabelGrid; m_LabelGrid = NULL; } // // Initialisation methods // void GfxCore::Initialise(bool same_file) { // Initialise the view from the parent holding the survey data. TryToFreeArrays(); m_DoneFirstShow = false; m_HitTestGridValid = false; m_here = NULL; m_there = NULL; m_MouseOutsideCompass = m_MouseOutsideElev = false; if (!same_file) { // Apply default parameters unless reloading the same file. DefaultParameters(); } m_HaveData = true; // Clear any cached OpenGL lists which depend on the data. InvalidateList(LIST_SCALE_BAR); InvalidateList(LIST_DEPTH_KEY); InvalidateList(LIST_DATE_KEY); InvalidateList(LIST_ERROR_KEY); InvalidateList(LIST_GRADIENT_KEY); InvalidateList(LIST_LENGTH_KEY); InvalidateList(LIST_STYLE_KEY); InvalidateList(LIST_UNDERGROUND_LEGS); InvalidateList(LIST_TUBES); InvalidateList(LIST_SURFACE_LEGS); InvalidateList(LIST_BLOBS); InvalidateList(LIST_CROSSES); InvalidateList(LIST_GRID); InvalidateList(LIST_SHADOW); InvalidateList(LIST_TERRAIN); // Set diameter of the viewing volume. auto ext = m_Parent->GetExtent(); double cave_diameter = sqrt(sqrd(ext.GetX()) + sqrd(ext.GetY()) + sqrd(ext.GetZ())); // Allow for terrain. double diameter = max(1000.0 * 2, cave_diameter * 2); if (!same_file) { SetVolumeDiameter(diameter); // Set initial scale based on the size of the cave. initial_scale = diameter / cave_diameter; SetScale(initial_scale); } else { // Adjust the position when restricting the view to a subsurvey (or // expanding the view to show the whole survey). AddTranslation(m_Parent->GetOffset() - offsets); // Try to keep the same scale, allowing for the // cave having grown (or shrunk). double rescale = GetVolumeDiameter() / diameter; SetVolumeDiameter(diameter); SetScale(GetScale() / rescale); // ? initial_scale = initial_scale * rescale; } offsets = m_Parent->GetOffset(); ForceRefresh(); } void GfxCore::FirstShow() { GLACanvas::FirstShow(); const unsigned int quantise(GetFontSize() / QUANTISE_FACTOR); list::iterator pos = m_Parent->GetLabelsNC(); while (pos != m_Parent->GetLabelsNCEnd()) { LabelInfo* label = *pos++; // Calculate and set the label width for use when plotting // none-overlapping labels. int ext_x; GLACanvas::GetTextExtent(label->GetText(), &ext_x, NULL); label->set_width(unsigned(ext_x) / quantise + 1); } m_DoneFirstShow = true; } // // Recalculating methods // void GfxCore::SetScale(Double scale) { if (scale < 0.05) { scale = 0.05; } else if (scale > GetVolumeDiameter()) { scale = GetVolumeDiameter(); } m_Scale = scale; m_HitTestGridValid = false; if (m_here && m_here == &temp_here) SetHere(); GLACanvas::SetScale(scale); } bool GfxCore::HasUndergroundLegs() const { return m_Parent->HasUndergroundLegs(); } bool GfxCore::HasSplays() const { return m_Parent->HasSplays(); } bool GfxCore::HasDupes() const { return m_Parent->HasDupes(); } bool GfxCore::HasSurfaceLegs() const { return m_Parent->HasSurfaceLegs(); } bool GfxCore::HasTubes() const { return m_Parent->HasTubes(); } void GfxCore::UpdateBlobs() { InvalidateList(LIST_BLOBS); } // // Event handlers // void GfxCore::OnLeaveWindow(wxMouseEvent&) { SetHere(); ClearCoords(); } void GfxCore::OnIdle(wxIdleEvent& event) { // Handle an idle event. if (Animating()) { Animate(); // If still animating, we want more idle events. if (Animating()) event.RequestMore(); } else { // If we're idle, don't show a bogus FPS next time we render. last_time = 0; } } void GfxCore::OnPaint(wxPaintEvent&) { // Redraw the window. // Get a graphics context. wxPaintDC dc(this); if (m_HaveData) { // Make sure we're initialised. bool first_time = !m_DoneFirstShow; if (first_time) { FirstShow(); } StartDrawing(); // Clear the background. Clear(); // Set up model transformation matrix. SetDataTransform(); if (m_Legs || m_Tubes) { if (m_Tubes) { EnableSmoothPolygons(true); // FIXME: allow false for wireframe view DrawList(LIST_TUBES); DisableSmoothPolygons(); } // Draw the underground legs. Do this last so that anti-aliasing // works over polygons. SetColour(col_GREEN); DrawList(LIST_UNDERGROUND_LEGS); } if (m_Surface) { // Draw the surface legs. DrawList(LIST_SURFACE_LEGS); } if (m_BoundingBox) { DrawShadowedBoundingBox(); } if (m_Grid) { // Draw the grid. DrawList(LIST_GRID); } DrawList(LIST_BLOBS); if (m_Crosses) { DrawList(LIST_CROSSES); } if (m_Terrain) { // Disable texturing while drawing terrain. bool texturing = GetTextured(); if (texturing) GLACanvas::ToggleTextured(); // This is needed if blobs and/or crosses are drawn using lines - // otherwise the terrain doesn't appear when they are enabled. SetDataTransform(); // We don't want to be able to see the terrain through itself, so // do a "Z-prepass" - plot the terrain once only updating the // Z-buffer, then again with Z-clipping only plotting where the // depth matches the value in the Z-buffer. DrawListZPrepass(LIST_TERRAIN); if (texturing) GLACanvas::ToggleTextured(); } SetIndicatorTransform(); // Draw station names. if (m_Names /*&& !m_Control->MouseDown() && !Animating()*/) { SetColour(NAME_COLOUR); if (m_OverlappingNames) { SimpleDrawNames(); } else { NattyDrawNames(); } } if (!highlighted_survey.empty()) { HighlightSurvey(); } if (m_HitTestDebug) { // Show the hit test grid bucket sizes... SetColour(m_HitTestGridValid ? col_LIGHT_GREY : col_DARK_GREY); if (m_PointGrid) { for (int i = 0; i != HITTEST_SIZE; ++i) { int x = (GetXSize() + 1) * i / HITTEST_SIZE + 2; for (int j = 0; j != HITTEST_SIZE; ++j) { int square = i + j * HITTEST_SIZE; unsigned long bucket_size = m_PointGrid[square].size(); if (bucket_size) { int y = (GetYSize() + 1) * (HITTEST_SIZE - 1 - j) / HITTEST_SIZE; DrawIndicatorText(x, y, wxString::Format(wxT("%lu"), bucket_size)); } } } } EnableDashedLines(); BeginLines(); for (int i = 0; i != HITTEST_SIZE; ++i) { int x = (GetXSize() + 1) * i / HITTEST_SIZE; PlaceIndicatorVertex(x, 0); PlaceIndicatorVertex(x, GetYSize()); } for (int j = 0; j != HITTEST_SIZE; ++j) { int y = (GetYSize() + 1) * (HITTEST_SIZE - 1 - j) / HITTEST_SIZE; PlaceIndicatorVertex(0, y); PlaceIndicatorVertex(GetXSize(), y); } EndLines(); DisableDashedLines(); } long now = timer.Time(); if (m_RenderStats) { // Show stats about rendering. SetColour(col_TURQUOISE); int y = GetYSize() - GetFontSize(); if (last_time != 0.0) { // timer.Time() measure in milliseconds. double fps = 1000.0 / (now - last_time); DrawIndicatorText(1, y, wxString::Format(wxT("FPS:% 5.1f"), fps)); } y -= GetFontSize(); DrawIndicatorText(1, y, wxString::Format(wxT("â–²:%lu"), (unsigned long)n_tris)); } last_time = now; // Draw indicators. // // There's no advantage in generating an OpenGL list for the // indicators since they change with almost every redraw (and // sometimes several times between redraws). This way we avoid // the need to track when to update the indicator OpenGL list, // and also avoid indicator update bugs when we don't quite get this // right... DrawIndicators(); if (zoombox.active()) { SetColour(SEL_COLOUR); EnableDashedLines(); BeginPolyline(); glaCoord Y = GetYSize(); PlaceIndicatorVertex(zoombox.x1, Y - zoombox.y1); PlaceIndicatorVertex(zoombox.x1, Y - zoombox.y2); PlaceIndicatorVertex(zoombox.x2, Y - zoombox.y2); PlaceIndicatorVertex(zoombox.x2, Y - zoombox.y1); PlaceIndicatorVertex(zoombox.x1, Y - zoombox.y1); EndPolyline(); DisableDashedLines(); } else if (MeasuringLineActive()) { // Draw "here" and "there". double hx, hy; SetColour(HERE_COLOUR); if (m_here) { double dummy; Transform(*m_here, &hx, &hy, &dummy); if (m_here != &temp_here) DrawRing(hx, hy); } if (m_there) { double tx, ty; double dummy; Transform(*m_there, &tx, &ty, &dummy); if (m_here) { BeginLines(); PlaceIndicatorVertex(hx, hy); PlaceIndicatorVertex(tx, ty); EndLines(); } BeginBlobs(); DrawBlob(tx, ty); EndBlobs(); } } FinishDrawing(); } else { #ifdef __WXMAC__ if (!m_DoneFirstShow) { FirstShow(); } StartDrawing(); ClearNative(); FinishDrawing(); #else dc.SetBackground(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWFRAME)); dc.Clear(); #endif } } void GfxCore::DrawBoundingBox() { const Vector3 v = 0.5 * m_Parent->GetExtent(); SetColour(col_BLUE); EnableDashedLines(); BeginPolyline(); PlaceVertex(-v.GetX(), -v.GetY(), v.GetZ()); PlaceVertex(-v.GetX(), v.GetY(), v.GetZ()); PlaceVertex(v.GetX(), v.GetY(), v.GetZ()); PlaceVertex(v.GetX(), -v.GetY(), v.GetZ()); PlaceVertex(-v.GetX(), -v.GetY(), v.GetZ()); EndPolyline(); BeginPolyline(); PlaceVertex(-v.GetX(), -v.GetY(), -v.GetZ()); PlaceVertex(-v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), -v.GetY(), -v.GetZ()); PlaceVertex(-v.GetX(), -v.GetY(), -v.GetZ()); EndPolyline(); BeginLines(); PlaceVertex(-v.GetX(), -v.GetY(), v.GetZ()); PlaceVertex(-v.GetX(), -v.GetY(), -v.GetZ()); PlaceVertex(-v.GetX(), v.GetY(), v.GetZ()); PlaceVertex(-v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), v.GetY(), v.GetZ()); PlaceVertex(v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), -v.GetY(), v.GetZ()); PlaceVertex(v.GetX(), -v.GetY(), -v.GetZ()); EndLines(); DisableDashedLines(); } void GfxCore::DrawShadowedBoundingBox() { const Vector3 v = 0.5 * m_Parent->GetExtent(); DrawBoundingBox(); PolygonOffset(true); SetColour(col_DARK_GREY); BeginQuadrilaterals(); PlaceVertex(-v.GetX(), -v.GetY(), -v.GetZ()); PlaceVertex(-v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), v.GetY(), -v.GetZ()); PlaceVertex(v.GetX(), -v.GetY(), -v.GetZ()); EndQuadrilaterals(); PolygonOffset(false); DrawList(LIST_SHADOW); } void GfxCore::DrawGrid() { // Draw the grid. SetColour(col_RED); // Calculate the extent of the survey, in metres across the screen plane. Double m_across_screen = SurveyUnitsAcrossViewport(); // Calculate the length of the scale bar in metres. //--move this elsewhere Double size_snap = pow(10.0, floor(log10(0.75 * m_across_screen))); Double t = m_across_screen * 0.75 / size_snap; if (t >= 5.0) { size_snap *= 5.0; } else if (t >= 2.0) { size_snap *= 2.0; } Double grid_size = size_snap * 0.1; Double edge = grid_size * 2.0; auto ext = m_Parent->GetExtent(); Double grid_z = -ext.GetZ() * 0.5 - grid_size; Double left = -ext.GetX() * 0.5 - edge; Double right = ext.GetX() * 0.5 + edge; Double bottom = -ext.GetY() * 0.5 - edge; Double top = ext.GetY() * 0.5 + edge; int count_x = (int) ceil((right - left) / grid_size); int count_y = (int) ceil((top - bottom) / grid_size); Double actual_right = left + count_x*grid_size; Double actual_top = bottom + count_y*grid_size; BeginLines(); for (int xc = 0; xc <= count_x; xc++) { Double x = left + xc*grid_size; PlaceVertex(x, bottom, grid_z); PlaceVertex(x, actual_top, grid_z); } for (int yc = 0; yc <= count_y; yc++) { Double y = bottom + yc*grid_size; PlaceVertex(left, y, grid_z); PlaceVertex(actual_right, y, grid_z); } EndLines(); } int GfxCore::GetClinoOffset() const { auto f = GetContentScaleFactor(); int result = INDICATOR_OFFSET_X * f; if (m_Compass) { result += GetCompassWidth() + INDICATOR_GAP * f; } return result; } void GfxCore::DrawTick(int angle_cw) { auto f = GetContentScaleFactor(); auto length0 = (INDICATOR_RADIUS + TICK_LENGTH) * f; auto length1 = INDICATOR_RADIUS * f; const Double theta = rad(angle_cw); auto s = sin(theta); auto c = cos(theta); wxCoord x0 = wxCoord(length0 * s); wxCoord y0 = wxCoord(length0 * c); wxCoord x1 = wxCoord(length1 * s); wxCoord y1 = wxCoord(length1 * c); PlaceIndicatorVertex(x0, y0); PlaceIndicatorVertex(x1, y1); } void GfxCore::DrawArrow(gla_colour col1, gla_colour col2) { auto f = GetContentScaleFactor(); glaCoord r = INDICATOR_RADIUS * f; glaCoord x = r * .5; glaCoord y = r * -.866025404; BeginTriangles(); SetColour(col1); PlaceIndicatorVertex(x, y); PlaceIndicatorVertex(0, r); PlaceIndicatorVertex(0, 0); SetColour(col2); PlaceIndicatorVertex(-x, y); PlaceIndicatorVertex(0, r); PlaceIndicatorVertex(0, 0); EndTriangles(); BeginPolyline(); glBegin(GL_LINE_STRIP); PlaceIndicatorVertex(0, 0); PlaceIndicatorVertex(x, y); PlaceIndicatorVertex(0, r); PlaceIndicatorVertex(0, 0); PlaceIndicatorVertex(-x, y); PlaceIndicatorVertex(0, r); EndPolyline(); } void GfxCore::DrawCompass() { // Ticks. BeginLines(); for (int angle = 315; angle > 0; angle -= 45) { DrawTick(angle); } SetColour(col_GREEN); DrawTick(0); EndLines(); // Compass background. DrawCircle(col_LIGHT_GREY_2, col_GREY, 0, 0, INDICATOR_RADIUS * GetContentScaleFactor()); // Compass arrow. DrawArrow(col_INDICATOR_1, col_INDICATOR_2); } // Draw the non-rotating background to the clino. void GfxCore::DrawClinoBack() { BeginLines(); for (int angle = 0; angle <= 180; angle += 90) { DrawTick(angle); } SetColour(col_GREY); glaCoord r = INDICATOR_RADIUS * GetContentScaleFactor(); PlaceIndicatorVertex(0, r); PlaceIndicatorVertex(0, -r); PlaceIndicatorVertex(0, 0); PlaceIndicatorVertex(r, 0); EndLines(); } void GfxCore::DrawClino() { // Ticks. SetColour(col_GREEN); BeginLines(); DrawTick(0); EndLines(); // Clino background. DrawSemicircle(col_LIGHT_GREY_2, col_GREY, 0, 0, INDICATOR_RADIUS * GetContentScaleFactor(), 0); // Elevation arrow. DrawArrow(col_INDICATOR_2, col_INDICATOR_1); } void GfxCore::Draw2dIndicators() { // Draw the compass and elevation indicators. auto f = GetContentScaleFactor(); const int centre_y = (INDICATOR_BOX_SIZE / 2 + INDICATOR_OFFSET_Y) * f; const int comp_centre_x = GetCompassXPosition(); if (m_Compass && !m_Parent->IsExtendedElevation()) { // If the user is dragging the compass with the pointer outside the // compass, we snap to 45 degree multiples, and the ticks go white. SetColour(m_MouseOutsideCompass ? col_WHITE : col_LIGHT_GREY_2); DrawList2D(LIST_COMPASS, comp_centre_x, centre_y, -m_PanAngle); } const int elev_centre_x = GetClinoXPosition(); if (m_Clino) { // If the user is dragging the clino with the pointer outside the // clino, we snap to 90 degree multiples, and the ticks go white. SetColour(m_MouseOutsideElev ? col_WHITE : col_LIGHT_GREY_2); DrawList2D(LIST_CLINO_BACK, elev_centre_x, centre_y, 0); DrawList2D(LIST_CLINO, elev_centre_x, centre_y, 90 - m_TiltAngle); } SetColour(TEXT_COLOUR); static int triple_zero_width = 0; static int height = 0; if (!triple_zero_width) { GetTextExtent(wxT("000"), &triple_zero_width, &height); } const int y_off = (INDICATOR_OFFSET_Y + INDICATOR_BOX_SIZE) * f + height / 2; if (m_Compass && !m_Parent->IsExtendedElevation()) { wxString str; int value; int brg_unit; if (m_Degrees) { value = int(m_PanAngle); /* TRANSLATORS: degree symbol - probably should be translated to * itself. */ brg_unit = /*°*/344; } else { value = int(m_PanAngle * 200.0 / 180.0); /* TRANSLATORS: symbol for grad (400 grad = 360 degrees = full * circle). */ brg_unit = /*áµ*/345; } str.Printf(wxT("%03d"), value); str += wmsg(brg_unit); DrawIndicatorText(comp_centre_x - triple_zero_width / 2, y_off, str); // TRANSLATORS: Used in aven above the compass indicator at the lower // right of the display, with a bearing below "Facing". This indicates the // direction the viewer is "facing" in. // // Try to keep this translation short - ideally at most 10 characters - // as otherwise the compass and clino will be moved further apart to // make room. */ str = wmsg(/*Facing*/203); int w; GetTextExtent(str, &w, NULL); DrawIndicatorText(comp_centre_x - w / 2, y_off + height, str); } if (m_Clino) { if (m_TiltAngle == -90.0) { // TRANSLATORS: Label used for "clino" in Aven when the view is // from directly above. // // Try to keep this translation short - ideally at most 10 // characters - as otherwise the compass and clino will be moved // further apart to make room. */ wxString str = wmsg(/*Plan*/432); static int width = 0; if (!width) { GetTextExtent(str, &width, NULL); } int x = elev_centre_x - width / 2; DrawIndicatorText(x, y_off + height / 2, str); } else if (m_TiltAngle == 90.0) { // TRANSLATORS: Label used for "clino" in Aven when the view is // from directly below. // // Try to keep this translation short - ideally at most 10 // characters - as otherwise the compass and clino will be moved // further apart to make room. */ wxString str = wmsg(/*Kiwi Plan*/433); static int width = 0; if (!width) { GetTextExtent(str, &width, NULL); } int x = elev_centre_x - width / 2; DrawIndicatorText(x, y_off + height / 2, str); } else { int angle; wxString str; int width; int unit; if (m_Percent) { static int zero_width = 0; if (!zero_width) { GetTextExtent(wxT("0"), &zero_width, NULL); } width = zero_width; if (m_TiltAngle > 89.99) { angle = 1000000; } else if (m_TiltAngle < -89.99) { angle = -1000000; } else { angle = int(100 * tan(rad(m_TiltAngle))); } if (angle > 99999 || angle < -99999) { str = angle > 0 ? wxT("+") : wxT("-"); /* TRANSLATORS: infinity symbol - used for the percentage gradient on * vertical angles. */ str += wmsg(/*∞*/431); } else { str = angle ? wxString::Format(wxT("%+03d"), angle) : wxT("0"); } /* TRANSLATORS: symbol for percentage gradient (100% = 45 * degrees = 50 grad). */ unit = /*%*/96; } else if (m_Degrees) { static int zero_zero_width = 0; if (!zero_zero_width) { GetTextExtent(wxT("00"), &zero_zero_width, NULL); } width = zero_zero_width; angle = int(m_TiltAngle); str = angle ? wxString::Format(wxT("%+03d"), angle) : wxT("00"); unit = /*°*/344; } else { width = triple_zero_width; angle = int(m_TiltAngle * 200.0 / 180.0); str = angle ? wxString::Format(wxT("%+04d"), angle) : wxT("000"); unit = /*áµ*/345; } int sign_offset = 0; if (unit == /*%*/96) { // Right align % since the width changes so much. GetTextExtent(str, &sign_offset, NULL); sign_offset -= width; } else if (angle < 0) { // Adjust horizontal position so the left of the first digit is // always in the same place. static int minus_width = 0; if (!minus_width) { GetTextExtent(wxT("-"), &minus_width, NULL); } sign_offset = minus_width; } else if (angle > 0) { // Adjust horizontal position so the left of the first digit is // always in the same place. static int plus_width = 0; if (!plus_width) { GetTextExtent(wxT("+"), &plus_width, NULL); } sign_offset = plus_width; } str += wmsg(unit); DrawIndicatorText(elev_centre_x - sign_offset - width / 2, y_off, str); // TRANSLATORS: Label used for "clino" in Aven when the view is // neither from directly above nor from directly below. It is // also used in the dialog for editing a marked position in a // presentation. // // Try to keep this translation short - ideally at most 10 // characters - as otherwise the compass and clino will be moved // further apart to make room. */ str = wmsg(/*Elevation*/118); static int elevation_width = 0; if (!elevation_width) { GetTextExtent(str, &elevation_width, NULL); } int x = elev_centre_x - elevation_width / 2; DrawIndicatorText(x, y_off + height, str); } } } void GfxCore::NattyDrawNames() { // Draw station names, without overlapping. const unsigned int quantise(GetFontSize() / QUANTISE_FACTOR); const unsigned int quantised_x = GetXSize() / quantise; const unsigned int quantised_y = GetYSize() / quantise; const size_t buffer_size = quantised_x * quantised_y; if (!m_LabelGrid) m_LabelGrid = new char[buffer_size]; memset((void*) m_LabelGrid, 0, buffer_size); const SurveyFilter* filter = m_Parent->GetTreeFilter(); list::const_iterator label = m_Parent->GetLabels(); for ( ; label != m_Parent->GetLabelsEnd(); ++label) { if (m_Splays == SHOW_HIDE && (*label)->IsSplayEnd()) continue; if (!((m_Surface && (*label)->IsSurface()) || (m_Legs && (*label)->IsUnderground()) || (!(*label)->IsSurface() && !(*label)->IsUnderground()))) { // if this station isn't to be displayed, skip to the next // (last case is for stns with no legs attached) continue; } if (filter && !filter->CheckVisible((*label)->GetText())) continue; double x, y, z; Transform(**label, &x, &y, &z); // Check if the label is behind us (in perspective view). if (z <= 0.0 || z >= 1.0) continue; // Apply a small shift so that translating the view doesn't make which // labels are displayed change as the resulting twinkling effect is // distracting. double tx, ty, tz; Transform(Vector3(), &tx, &ty, &tz); tx -= floor(tx / quantise) * quantise; ty -= floor(ty / quantise) * quantise; tx = x - tx; if (tx < 0) continue; ty = y - ty; if (ty < 0) continue; unsigned int iy = unsigned(ty) / quantise; if (iy >= quantised_y) continue; unsigned int width = (*label)->get_width(); unsigned int ix = unsigned(tx) / quantise; if (ix + width >= quantised_x) continue; char * test = m_LabelGrid + ix + iy * quantised_x; if (memchr(test, 1, width)) continue; x += 3; y -= GetFontSize() / 2; DrawIndicatorText((int)x, (int)y, (*label)->GetText()); if (iy > QUANTISE_FACTOR) iy = QUANTISE_FACTOR; test -= quantised_x * iy; iy += 4; while (--iy && test < m_LabelGrid + buffer_size) { memset(test, 1, width); test += quantised_x; } } } void GfxCore::SimpleDrawNames() { const SurveyFilter* filter = m_Parent->GetTreeFilter(); // Draw all station names, without worrying about overlaps list::const_iterator label = m_Parent->GetLabels(); for ( ; label != m_Parent->GetLabelsEnd(); ++label) { if (m_Splays == SHOW_HIDE && (*label)->IsSplayEnd()) continue; if (!((m_Surface && (*label)->IsSurface()) || (m_Legs && (*label)->IsUnderground()) || (!(*label)->IsSurface() && !(*label)->IsUnderground()))) { // if this station isn't to be displayed, skip to the next // (last case is for stns with no legs attached) continue; } if (filter && !filter->CheckVisible((*label)->GetText())) continue; double x, y, z; Transform(**label, &x, &y, &z); // Check if the label is behind us (in perspective view). if (z <= 0) continue; x += 3; y -= GetFontSize() / 2; DrawIndicatorText((int)x, (int)y, (*label)->GetText()); } } void GfxCore::DrawColourKey(int num_bands, const wxString & other, const wxString & units) { auto f = GetContentScaleFactor(); int key_block_height = KEY_BLOCK_HEIGHT * f; int key_block_width = KEY_BLOCK_WIDTH * f; int total_block_height = key_block_height * (num_bands == 1 ? num_bands : num_bands - 1); if (!other.empty()) total_block_height += key_block_height * 2; if (!units.empty()) total_block_height += key_block_height; const int bottom = -total_block_height; int size = 0; if (!other.empty()) GetTextExtent(other, &size, NULL); int band; for (band = 0; band < num_bands; ++band) { int x; GetTextExtent(key_legends[band], &x, NULL); if (x > size) size = x; } int left = -key_block_width - size; key_lowerleft[m_ColourBy].x = left - KEY_EXTRA_LEFT_MARGIN * f; key_lowerleft[m_ColourBy].y = bottom; switch (m_ColourBy) { case COLOUR_BY_ERROR: case COLOUR_BY_H_ERROR: case COLOUR_BY_V_ERROR: key_lowerleft[COLOUR_BY_ERROR] = key_lowerleft[m_ColourBy]; key_lowerleft[COLOUR_BY_H_ERROR] = key_lowerleft[m_ColourBy]; key_lowerleft[COLOUR_BY_V_ERROR] = key_lowerleft[m_ColourBy]; } int y = bottom; if (!units.empty()) y += key_block_height; if (!other.empty()) { DrawRectangle(NODATA_COLOUR, col_BLACK, left, y, key_block_height, key_block_height); y += key_block_height * 2; } int start = y; if (num_bands == 1) { DrawShadedRectangle(GetPen(0), GetPen(0), left, y, key_block_width, key_block_height); y += key_block_height; } else { for (band = 0; band < num_bands - 1; ++band) { DrawShadedRectangle(GetPen(band), GetPen(band + 1), left, y, key_block_width, key_block_height); y += key_block_height; } } SetColour(col_BLACK); BeginPolyline(); PlaceIndicatorVertex(left, y); PlaceIndicatorVertex(left + key_block_width, y); PlaceIndicatorVertex(left + key_block_width, start); PlaceIndicatorVertex(left, start); PlaceIndicatorVertex(left, y); EndPolyline(); SetColour(TEXT_COLOUR); y = bottom; if (!units.empty()) { GetTextExtent(units, &size, NULL); DrawIndicatorText(left + (key_block_width - size) / 2, y, units); y += key_block_height; } y -= GetFontSize() / 2; left += key_block_width + 5; if (!other.empty()) { y += key_block_height / 2; DrawIndicatorText(left, y, other); y += key_block_height * 2 - key_block_height / 2; } if (num_bands == 1) { y += key_block_height / 2; DrawIndicatorText(left, y, key_legends[0]); } else { for (band = 0; band < num_bands; ++band) { DrawIndicatorText(left, y, key_legends[band]); y += key_block_height; } } } void GfxCore::DrawDepthKey() { Double z_ext = m_Parent->GetDepthExtent(); int num_bands = 1; int sf = 0; if (z_ext > 0.0) { num_bands = GetNumColourBands(); Double z_range = z_ext; if (!m_Metric) z_range /= METRES_PER_FOOT; sf = max(0, 1 - (int)floor(log10(z_range))); } Double z_min = m_Parent->GetDepthMin() + m_Parent->GetOffset().GetZ(); for (int band = 0; band < num_bands; ++band) { Double z = z_min; if (band) z += z_ext * band / (num_bands - 1); if (!m_Metric) z /= METRES_PER_FOOT; key_legends[band].Printf(wxT("%.*f"), sf, z); } DrawColourKey(num_bands, wxString(), wmsg(m_Metric ? /*m*/424: /*ft*/428)); } void GfxCore::DrawDateKey() { int num_bands; if (!HasDateInformation()) { num_bands = 0; } else { int date_ext = m_Parent->GetDateExtent(); if (date_ext == 0) { num_bands = 1; } else { num_bands = GetNumColourBands(); } for (int band = 0; band < num_bands; ++band) { int y, m, d; int days = m_Parent->GetDateMin(); if (band) days += date_ext * band / (num_bands - 1); ymd_from_days_since_1900(days, &y, &m, &d); key_legends[band].Printf(wxT("%04d-%02d-%02d"), y, m, d); } } wxString other; if (!m_Parent->HasCompleteDateInfo()) { /* TRANSLATORS: Used in the "colour key" for "colour by date" if there * are surveys without date information. Try to keep this fairly short. */ other = wmsg(/*Undated*/221); } DrawColourKey(num_bands, other, wxString()); } void GfxCore::DrawErrorKey() { int num_bands; if (HasErrorInformation()) { // Use fixed colours for each error factor so it's directly visually // comparable between surveys. num_bands = GetNumColourBands(); for (int band = 0; band < num_bands; ++band) { double E = MAX_ERROR * band / (num_bands - 1); key_legends[band].Printf(wxT("%.2f"), E); } } else { num_bands = 0; } // Always show the "Not in loop" legend for now (FIXME). /* TRANSLATORS: Used in the "colour key" for "colour by error" for surveys * which aren’t part of a loop and so have no error information. Try to keep * this fairly short. */ DrawColourKey(num_bands, wmsg(/*Not in loop*/290), wxString()); } void GfxCore::DrawGradientKey() { int num_bands; // Use fixed colours for each gradient so it's directly visually comparable // between surveys. num_bands = GetNumColourBands(); wxString units = wmsg(m_Degrees ? /*°*/344 : /*áµ*/345); for (int band = 0; band < num_bands; ++band) { double gradient = double(band) / (num_bands - 1); if (m_Degrees) { gradient *= 90.0; } else { gradient *= 100.0; } key_legends[band].Printf(wxT("%.f%s"), gradient, units); } DrawColourKey(num_bands, wxString(), wxString()); } void GfxCore::DrawLengthKey() { int num_bands; // Use fixed colours for each length so it's directly visually comparable // between surveys. num_bands = GetNumColourBands(); for (int band = 0; band < num_bands; ++band) { double len = pow(10, LOG_LEN_MAX * band / (num_bands - 1)); if (!m_Metric) { len /= METRES_PER_FOOT; } key_legends[band].Printf(wxT("%.1f"), len); } DrawColourKey(num_bands, wxString(), wmsg(m_Metric ? /*m*/424: /*ft*/428)); } static const gla_colour style_colours[] = { NODATA_COLOUR, // img_STYLE_UNKNOWN col_GREEN, // img_STYLE_NORMAL col_BLUE, // img_STYLE_DIVING col_YELLOW, // img_STYLE_CARTESIAN col_MAGENTA, // img_STYLE_CYLPOLAR col_RED // img_STYLE_NOSURVEY }; // FIXME: Translate static const char* style_names[] = { "Unknown", "Normal", "Diving", "Cartesian", "Cyl-Polar", "No Survey" }; void GfxCore::DrawStyleKey() { auto f = GetContentScaleFactor(); int key_block_height = KEY_BLOCK_HEIGHT * f; int key_block_width = KEY_BLOCK_WIDTH * f; int num_bands = sizeof(style_names) / sizeof(style_names[0]); int total_block_height = key_block_height * (2 * num_bands - 1); const int bottom = -total_block_height; int size = 0; for (int band = 0; band < num_bands; ++band) { int x; GetTextExtent(style_names[band], &x, NULL); if (x > size) size = x; } int left = -key_block_width - size; key_lowerleft[m_ColourBy].x = left - KEY_EXTRA_LEFT_MARGIN * f; key_lowerleft[m_ColourBy].y = bottom; int y = bottom; for (int band = 0; band < num_bands; ++band) { DrawRectangle(style_colours[band], col_BLACK, left, y, key_block_width, key_block_height); y += key_block_height * 2; } SetColour(TEXT_COLOUR); y = bottom; left += key_block_width + 5; for (int band = 0; band < num_bands; ++band) { DrawIndicatorText(left, y, style_names[band]); y += key_block_height * 2; } } void GfxCore::DrawScaleBar() { // Calculate how many metres of survey are currently displayed across the // screen. Double across_screen = SurveyUnitsAcrossViewport(); double f = double(GetClinoXPosition() - (INDICATOR_BOX_SIZE / 2 + SCALE_BAR_OFFSET_X) * GetContentScaleFactor()) / GetXSize(); if (f > 0.75) { f = 0.75; } else if (f < 0.5) { // Stop it getting squeezed to nothing. // FIXME: In this case we should probably move the compass and clino up // to make room rather than letting stuff overlap. f = 0.5; } // Convert to imperial measurements if required. Double multiplier = 1.0; if (!m_Metric) { across_screen /= METRES_PER_FOOT; multiplier = METRES_PER_FOOT; if (across_screen >= 5280.0 / f) { across_screen /= 5280.0; multiplier *= 5280.0; } } // Calculate the length of the scale bar. Double size_snap = pow(10.0, floor(log10(f * across_screen))); Double t = across_screen * f / size_snap; if (t >= 5.0) { size_snap *= 5.0; } else if (t >= 2.0) { size_snap *= 2.0; } if (!m_Metric) size_snap *= multiplier; // Actual size of the thing in pixels: int size = int((size_snap / SurveyUnitsAcrossViewport()) * GetXSize()); m_ScaleBarWidth = size; // Draw it... const int end_y = SCALE_BAR_OFFSET_Y * GetContentScaleFactor() + GetFontSize(); int interval = size / 10; gla_colour col = col_WHITE; for (int ix = 0; ix < 10; ix++) { int x = SCALE_BAR_OFFSET_X * GetContentScaleFactor() + int(ix * ((Double) size / 10.0)); DrawRectangle(col, col, x, end_y, interval + 2, SCALE_BAR_HEIGHT * GetContentScaleFactor()); col = (col == col_WHITE) ? col_GREY : col_WHITE; } // Add labels. wxString str; int units; if (m_Metric) { Double km = size_snap * 1e-3; if (km >= 1.0) { size_snap = km; /* TRANSLATORS: abbreviation for "kilometres" (unit of length), * used e.g. "5km". * * If there should be a space between the number and this, include * one in the translation. */ units = /*km*/423; } else if (size_snap >= 1.0) { /* TRANSLATORS: abbreviation for "metres" (unit of length), used * e.g. "10m". * * If there should be a space between the number and this, include * one in the translation. */ units = /*m*/424; } else { size_snap *= 1e2; /* TRANSLATORS: abbreviation for "centimetres" (unit of length), * used e.g. "50cm". * * If there should be a space between the number and this, include * one in the translation. */ units = /*cm*/425; } } else { size_snap /= METRES_PER_FOOT; Double miles = size_snap / 5280.0; if (miles >= 1.0) { size_snap = miles; if (size_snap >= 2.0) { /* TRANSLATORS: abbreviation for "miles" (unit of length, * plural), used e.g. "2 miles". * * If there should be a space between the number and this, * include one in the translation. */ units = /* miles*/426; } else { /* TRANSLATORS: abbreviation for "mile" (unit of length, * singular), used e.g. "1 mile". * * If there should be a space between the number and this, * include one in the translation. */ units = /* mile*/427; } } else if (size_snap >= 1.0) { /* TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. * as "10ft". * * If there should be a space between the number and this, include * one in the translation. */ units = /*ft*/428; } else { size_snap *= 12.0; /* TRANSLATORS: abbreviation for "inches" (unit of length), used * e.g. as "6in". * * If there should be a space between the number and this, include * one in the translation. */ units = /*in*/429; } } if (size_snap >= 1.0) { str.Printf(wxT("%.f%s"), size_snap, wmsg(units).c_str()); } else { int sf = -(int)floor(log10(size_snap)); str.Printf(wxT("%.*f%s"), sf, size_snap, wmsg(units).c_str()); } int text_width, text_height; GetTextExtent(str, &text_width, &text_height); const int text_y = end_y - text_height + 1; SetColour(TEXT_COLOUR); DrawIndicatorText(SCALE_BAR_OFFSET_X * GetContentScaleFactor(), text_y, wxT("0")); DrawIndicatorText(SCALE_BAR_OFFSET_X * GetContentScaleFactor() + size - text_width, text_y, str); } bool GfxCore::CheckHitTestGrid(const wxPoint& point, bool centre) { if (Animating()) return false; if (point.x < 0 || point.x >= GetXSize() || point.y < 0 || point.y >= GetYSize()) { return false; } SetDataTransform(); if (!m_HitTestGridValid) CreateHitTestGrid(); int grid_x = point.x * HITTEST_SIZE / (GetXSize() + 1); int grid_y = point.y * HITTEST_SIZE / (GetYSize() + 1); LabelInfo *best = NULL; int dist_sqrd = sqrd_measure_threshold; int square = grid_x + grid_y * HITTEST_SIZE; list::iterator iter = m_PointGrid[square].begin(); while (iter != m_PointGrid[square].end()) { LabelInfo *pt = *iter++; double cx, cy, cz; Transform(*pt, &cx, &cy, &cz); cy = GetYSize() - cy; int dx = point.x - int(cx); int ds = dx * dx; if (ds >= dist_sqrd) continue; int dy = point.y - int(cy); ds += dy * dy; if (ds >= dist_sqrd) continue; dist_sqrd = ds; best = pt; if (ds == 0) break; } if (best) { m_Parent->ShowInfo(best, m_there); if (centre) { // FIXME: allow Ctrl-Click to not set there or something? CentreOn(*best); int w, h; GetClientSize(&w, &h); WarpPointer(w / 2, h / 2); SetThere(best); m_Parent->SelectTreeItem(best); } } else { // Left-clicking not on a survey cancels the measuring line. if (centre) { ClearTreeSelection(); } else { m_Parent->ShowInfo(best, m_there); double x, y, z; ReverseTransform(point.x, GetYSize() - point.y, &x, &y, &z); temp_here.assign(Vector3(x, y, z)); SetHere(&temp_here); } } return best; } void GfxCore::OnSize(wxSizeEvent& event) { // Handle a change in window size. wxSize size = event.GetSize(); if (size.GetWidth() <= 0 || size.GetHeight() <= 0) { // Before things are fully initialised, we sometimes get a bogus // resize message... // FIXME have changes in MainFrm cured this? It still happens with // 1.0.32 and wxGTK 2.5.2 (load a file from the command line). // With 1.1.6 and wxGTK 2.4.2 we only get negative sizes if MainFrm // is resized such that the GfxCore window isn't visible. //printf("OnSize(%d,%d)\n", size.GetWidth(), size.GetHeight()); return; } event.Skip(); if (m_DoneFirstShow) { TryToFreeArrays(); m_HitTestGridValid = false; ForceRefresh(); } } void GfxCore::DefaultParameters() { // Set default viewing parameters. m_Surface = false; if (!m_Parent->HasUndergroundLegs()) { if (m_Parent->HasSurfaceLegs()) { // If there are surface legs, but no underground legs, turn // surface surveys on. m_Surface = true; } else { // If there are no legs (e.g. after loading a .pos file), turn // crosses on. m_Crosses = true; } } m_PanAngle = 0.0; if (m_Parent->IsExtendedElevation()) { m_TiltAngle = 0.0; } else { m_TiltAngle = -90.0; } SetRotation(m_PanAngle, m_TiltAngle); SetTranslation(Vector3()); m_RotationStep = 30.0; m_Rotating = false; m_SwitchingTo = 0; m_Entrances = false; m_FixedPts = false; m_ExportedPts = false; m_Grid = false; m_BoundingBox = false; m_Tubes = false; if (GetPerspective()) TogglePerspective(); // Set the initial scale. SetScale(initial_scale); } void GfxCore::Defaults() { // Restore default scale, rotation and translation parameters. DefaultParameters(); // Invalidate all the cached lists. GLACanvas::FirstShow(); ForceRefresh(); } void GfxCore::Animate() { // Don't show pointer coordinates while animating. // FIXME : only do this when we *START* animating! Use a static copy // of the value of "Animating()" last time we were here to track this? // MainFrm now checks if we're trying to clear already cleared labels // and just returns, but it might be simpler to check here! ClearCoords(); m_Parent->ShowInfo(); long t; if (movie) { ReadPixels(movie->GetWidth(), movie->GetHeight(), movie->GetBuffer()); if (!movie->AddFrame()) { wxGetApp().ReportError(wxString(movie->get_error_string(), wxConvUTF8)); delete movie; movie = NULL; presentation_mode = 0; return; } t = 1000 / 25; // 25 frames per second } else { static long t_prev = 0; t = timer.Time(); // Avoid redrawing twice in the same frame. long delta_t = (t_prev == 0 ? 1000 / MAX_FRAMERATE : t - t_prev); if (delta_t < 1000 / MAX_FRAMERATE) return; t_prev = t; if (presentation_mode == PLAYING && pres_speed != 0.0) t = delta_t; } if (presentation_mode == PLAYING && pres_speed != 0.0) { // FIXME: It would probably be better to work relative to the time we // passed the last mark, but that's complicated by the speed // potentially changing (or even the direction of playback reversing) // at any point during playback. Double tick = t * 0.001 * fabs(pres_speed); while (tick >= next_mark_time) { tick -= next_mark_time; this_mark_total = 0; PresentationMark prev_mark = next_mark; if (prev_mark.angle < 0) prev_mark.angle += 360.0; else if (prev_mark.angle >= 360.0) prev_mark.angle -= 360.0; if (pres_reverse) next_mark = m_Parent->GetPresMark(MARK_PREV); else next_mark = m_Parent->GetPresMark(MARK_NEXT); if (!next_mark.is_valid()) { SetView(prev_mark); presentation_mode = 0; if (movie && !movie->Close()) { wxGetApp().ReportError(wxString(movie->get_error_string(), wxConvUTF8)); } delete movie; movie = NULL; break; } double tmp = (pres_reverse ? prev_mark.time : next_mark.time); if (tmp > 0) { next_mark_time = tmp; } else { double d = (next_mark - prev_mark).magnitude(); // FIXME: should ignore component of d which is unseen in // non-perspective mode? next_mark_time = sqrd(d / 30.0); double a = next_mark.angle - prev_mark.angle; if (a > 180.0) { next_mark.angle -= 360.0; a = 360.0 - a; } else if (a < -180.0) { next_mark.angle += 360.0; a += 360.0; } else { a = fabs(a); } next_mark_time += sqrd(a / 60.0); double ta = fabs(next_mark.tilt_angle - prev_mark.tilt_angle); next_mark_time += sqrd(ta / 60.0); double s = fabs(log(next_mark.scale) - log(prev_mark.scale)); next_mark_time += sqrd(s / 2.0); next_mark_time = sqrt(next_mark_time); // was: next_mark_time = max(max(d / 30, s / 2), max(a, ta) / 60); //printf("*** %.6f from (\nd: %.6f\ns: %.6f\na: %.6f\nt: %.6f )\n", // next_mark_time, d/30.0, s/2.0, a/60.0, ta/60.0); if (tmp < 0) next_mark_time /= -tmp; } } if (presentation_mode) { // Advance position towards next_mark double p = tick / next_mark_time; double q = 1 - p; PresentationMark here = GetView(); if (next_mark.angle < 0) { if (here.angle >= next_mark.angle + 360.0) here.angle -= 360.0; } else if (next_mark.angle >= 360.0) { if (here.angle <= next_mark.angle - 360.0) here.angle += 360.0; } here.assign(q * here + p * next_mark); here.angle = q * here.angle + p * next_mark.angle; if (here.angle < 0) here.angle += 360.0; else if (here.angle >= 360.0) here.angle -= 360.0; here.tilt_angle = q * here.tilt_angle + p * next_mark.tilt_angle; here.scale = exp(q * log(here.scale) + p * log(next_mark.scale)); SetView(here); this_mark_total += tick; next_mark_time -= tick; } ForceRefresh(); return; } // When rotating... if (m_Rotating) { Double step = base_pan + (t - base_pan_time) * 1e-3 * m_RotationStep - m_PanAngle; TurnCave(step); } if (m_SwitchingTo == PLAN) { // When switching to plan view... Double step = base_tilt - (t - base_tilt_time) * 1e-3 * 90.0 - m_TiltAngle; TiltCave(step); if (m_TiltAngle == -90.0) { m_SwitchingTo = 0; } } else if (m_SwitchingTo == ELEVATION) { // When switching to elevation view... Double step; if (m_TiltAngle > 0.0) { step = base_tilt - (t - base_tilt_time) * 1e-3 * 90.0 - m_TiltAngle; } else { step = base_tilt + (t - base_tilt_time) * 1e-3 * 90.0 - m_TiltAngle; } if (fabs(step) >= fabs(m_TiltAngle)) { m_SwitchingTo = 0; step = -m_TiltAngle; } TiltCave(step); } else if (m_SwitchingTo) { // Rotate the shortest way around to the destination angle. If we're // 180 off, we favour turning anticlockwise, as auto-rotation does by // default. Double target = (m_SwitchingTo - NORTH) * 90; Double diff = target - m_PanAngle; diff = fmod(diff, 360); if (diff <= -180) diff += 360; else if (diff > 180) diff -= 360; if (m_RotationStep < 0 && diff == 180.0) diff = -180.0; Double step = base_pan - m_PanAngle; Double delta = (t - base_pan_time) * 1e-3 * fabs(m_RotationStep); if (diff > 0) { step += delta; } else { step -= delta; } step = fmod(step, 360); if (step <= -180) step += 360; else if (step > 180) step -= 360; if (fabs(step) >= fabs(diff)) { m_SwitchingTo = 0; step = diff; } TurnCave(step); } ForceRefresh(); } // How much to allow around the box - this is because of the ring shape // at one end of the line. static const int HIGHLIGHTED_PT_SIZE = 2; // FIXME: tie in to blob and ring size #define MARGIN (HIGHLIGHTED_PT_SIZE * 2 + 1) void GfxCore::RefreshLine(const Point *a, const Point *b, const Point *c) { #ifdef __WXMSW__ (void)a; (void)b; (void)c; // FIXME: We get odd redraw artifacts if we just update the line, and // redrawing the whole scene doesn't actually seem to be measurably // slower. That may not be true with software rendering though... ForceRefresh(); #else // Best of all might be to copy the window contents before we draw the // line, then replace each time we redraw. // Calculate the minimum rectangle which includes the old and new // measuring lines to minimise the redraw time int l = INT_MAX, r = INT_MIN, u = INT_MIN, d = INT_MAX; double X, Y, Z; if (a) { if (!Transform(*a, &X, &Y, &Z)) { printf("oops\n"); } else { int x = int(X); int y = GetYSize() - 1 - int(Y); l = x; r = x; u = y; d = y; } } if (b) { if (!Transform(*b, &X, &Y, &Z)) { printf("oops\n"); } else { int x = int(X); int y = GetYSize() - 1 - int(Y); l = min(l, x); r = max(r, x); u = max(u, y); d = min(d, y); } } if (c) { if (!Transform(*c, &X, &Y, &Z)) { printf("oops\n"); } else { int x = int(X); int y = GetYSize() - 1 - int(Y); l = min(l, x); r = max(r, x); u = max(u, y); d = min(d, y); } } l -= MARGIN; r += MARGIN; u += MARGIN; d -= MARGIN; RefreshRect(wxRect(l, d, r - l, u - d), false); #endif } void GfxCore::HighlightSurvey() { SurveyFilter filter; filter.add(highlighted_survey); filter.SetSeparator(m_Parent->GetSeparator()); double x_min = HUGE_VAL, x_max = -HUGE_VAL; double y_min = HUGE_VAL, y_max = -HUGE_VAL; double xpy_min = HUGE_VAL, xpy_max = -HUGE_VAL; double xmy_min = HUGE_VAL, xmy_max = -HUGE_VAL; list::const_iterator pos = m_Parent->GetLabels(); double x_tot = 0, y_tot = 0; size_t c = 0; while (pos != m_Parent->GetLabelsEnd()) { const LabelInfo* label = *pos++; if (!filter.CheckVisible(label->GetText())) continue; double x, y, z; Transform(*label, &x, &y, &z); if (x < x_min) x_min = x; if (x > x_max) x_max = x; if (y < y_min) y_min = y; if (y > y_max) y_max = y; double xpy = x + y; if (xpy < xpy_min) xpy_min = xpy; if (xpy > xpy_max) xpy_max = xpy; double xmy = x - y; if (xmy < xmy_min) xmy_min = xmy; if (xmy > xmy_max) xmy_max = xmy; x_tot += x; y_tot += y; ++c; } for (int f = 0; f != 8; ++f) { list::const_iterator trav = m_Parent->traverses_begin(f, &filter); list::const_iterator tend = m_Parent->traverses_end(f); while (trav != tend) { for (auto&& p : *trav) { double x, y, z; Transform(p, &x, &y, &z); if (x < x_min) x_min = x; if (x > x_max) x_max = x; if (y < y_min) y_min = y; if (y > y_max) y_max = y; double xpy = x + y; if (xpy < xpy_min) xpy_min = xpy; if (xpy > xpy_max) xpy_max = xpy; double xmy = x - y; if (xmy < xmy_min) xmy_min = xmy; if (xmy > xmy_max) xmy_max = xmy; x_tot += x; y_tot += y; ++c; } trav = m_Parent->traverses_next(f, &filter, trav); } } if (c == 0) return; // Minimum margin around survey. const double M = 4.0; // X/Y component when M measured diagonally. const double D = M * sqrt(2.0) / 2.0; SetColour(col_WHITE); BeginPolyloop(); PlaceIndicatorVertex(xmy_max + y_min, y_min - M); PlaceIndicatorVertex(xmy_max + y_min + D, y_min - D); PlaceIndicatorVertex(x_max + D, x_max - xmy_max - D); PlaceIndicatorVertex(x_max + M, x_max - xmy_max); PlaceIndicatorVertex(x_max + M, xpy_max - x_max); PlaceIndicatorVertex(x_max + D, xpy_max - x_max + D); PlaceIndicatorVertex(xpy_max - y_max + D, y_max + D); PlaceIndicatorVertex(xpy_max - y_max, y_max + M); PlaceIndicatorVertex(xmy_min + y_max, y_max + M); PlaceIndicatorVertex(xmy_min + y_max - D, y_max + D); PlaceIndicatorVertex(x_min - D, x_min - xmy_min + D); PlaceIndicatorVertex(x_min - M, x_min - xmy_min); PlaceIndicatorVertex(x_min - M, xpy_min - x_min); PlaceIndicatorVertex(x_min - D, xpy_min - x_min - D); PlaceIndicatorVertex(xpy_min - y_min - D, y_min - D); PlaceIndicatorVertex(xpy_min - y_min, y_min - M); EndPolyloop(); } void GfxCore::ZoomToSurvey(const wxString& survey) { SurveyFilter filter; filter.add(survey); filter.SetSeparator(m_Parent->GetSeparator()); Double xmin = DBL_MAX; Double xmax = -DBL_MAX; Double ymin = DBL_MAX; Double ymax = -DBL_MAX; Double zmin = DBL_MAX; Double zmax = -DBL_MAX; list::const_iterator pos = m_Parent->GetLabels(); while (pos != m_Parent->GetLabelsEnd()) { LabelInfo* label = *pos++; if (!filter.CheckVisible(label->GetText())) continue; if (label->GetX() < xmin) xmin = label->GetX(); if (label->GetX() > xmax) xmax = label->GetX(); if (label->GetY() < ymin) ymin = label->GetY(); if (label->GetY() > ymax) ymax = label->GetY(); if (label->GetZ() < zmin) zmin = label->GetZ(); if (label->GetZ() > zmax) zmax = label->GetZ(); } SetViewTo(xmin, xmax, ymin, ymax, zmin, zmax); } void GfxCore::SetHereFromTree(const LabelInfo * p) { SetHere(p); m_Parent->ShowInfo(m_here, m_there); SetHereSurvey(wxString()); } void GfxCore::SetHere(const LabelInfo *p) { if (p == m_here) return; bool line_active = MeasuringLineActive(); const LabelInfo * old = m_here; m_here = p; if (line_active || MeasuringLineActive()) RefreshLine(old, m_there, m_here); } void GfxCore::SetThere(const LabelInfo * p) { if (p == m_there) return; const LabelInfo * old = m_there; m_there = p; RefreshLine(m_here, old, m_there); } void GfxCore::CreateHitTestGrid() { if (!m_PointGrid) { // Initialise hit-test grid. m_PointGrid = new list[HITTEST_SIZE * HITTEST_SIZE]; } else { // Clear hit-test grid. for (int i = 0; i < HITTEST_SIZE * HITTEST_SIZE; i++) { m_PointGrid[i].clear(); } } const SurveyFilter* filter = m_Parent->GetTreeFilter(); // Fill the grid. list::const_iterator pos = m_Parent->GetLabels(); list::const_iterator end = m_Parent->GetLabelsEnd(); while (pos != end) { LabelInfo* label = *pos++; if (m_Splays == SHOW_HIDE && label->IsSplayEnd()) continue; if (!((m_Surface && label->IsSurface()) || (m_Legs && label->IsUnderground()) || (!label->IsSurface() && !label->IsUnderground()))) { // if this station isn't to be displayed, skip to the next // (last case is for stns with no legs attached) continue; } if (filter && !filter->CheckVisible(label->GetText())) continue; // Calculate screen coordinates. double cx, cy, cz; Transform(*label, &cx, &cy, &cz); if (cx < 0 || cx >= GetXSize()) continue; if (cy < 0 || cy >= GetYSize()) continue; cy = GetYSize() - cy; // On-screen, so add to hit-test grid... int grid_x = int(cx * HITTEST_SIZE / (GetXSize() + 1)); int grid_y = int(cy * HITTEST_SIZE / (GetYSize() + 1)); m_PointGrid[grid_x + grid_y * HITTEST_SIZE].push_back(label); } m_HitTestGridValid = true; } // // Methods for controlling the orientation of the survey // void GfxCore::TurnCave(Double angle) { // Turn the cave around its z-axis by a given angle. m_PanAngle += angle; // Wrap to range [0, 360): m_PanAngle = fmod(m_PanAngle, 360.0); if (m_PanAngle < 0.0) { m_PanAngle += 360.0; } m_HitTestGridValid = false; if (m_here && m_here == &temp_here) SetHere(); SetRotation(m_PanAngle, m_TiltAngle); } void GfxCore::TurnCaveTo(Double angle) { if (m_Rotating) { // If we're rotating, jump to the specified angle. TurnCave(angle - m_PanAngle); SetPanBase(); return; } int new_switching_to = ((int)angle) / 90 + NORTH; if (new_switching_to == m_SwitchingTo) { // A second order to switch takes us there right away TurnCave(angle - m_PanAngle); m_SwitchingTo = 0; ForceRefresh(); } else { SetPanBase(); m_SwitchingTo = new_switching_to; } } void GfxCore::TiltCave(Double tilt_angle) { // Tilt the cave by a given angle. if (m_TiltAngle + tilt_angle > 90.0) { m_TiltAngle = 90.0; } else if (m_TiltAngle + tilt_angle < -90.0) { m_TiltAngle = -90.0; } else { m_TiltAngle += tilt_angle; } m_HitTestGridValid = false; if (m_here && m_here == &temp_here) SetHere(); SetRotation(m_PanAngle, m_TiltAngle); } void GfxCore::TranslateCave(int dx, int dy) { AddTranslationScreenCoordinates(dx, dy); m_HitTestGridValid = false; if (m_here && m_here == &temp_here) SetHere(); ForceRefresh(); } void GfxCore::DragFinished() { m_MouseOutsideCompass = m_MouseOutsideElev = false; ForceRefresh(); } void GfxCore::ClearCoords() { m_Parent->ClearCoords(); } void GfxCore::SetCoords(wxPoint point) { // We can't work out 2D coordinates from a perspective view, and it // doesn't really make sense to show coordinates while we're animating. if (GetPerspective() || Animating()) return; // Update the coordinate or altitude display, given the (x, y) position in // window coordinates. The relevant display is updated depending on // whether we're in plan or elevation view. double cx, cy, cz; SetDataTransform(); ReverseTransform(point.x, GetYSize() - 1 - point.y, &cx, &cy, &cz); if (ShowingPlan()) { m_Parent->SetCoords(cx + m_Parent->GetOffset().GetX(), cy + m_Parent->GetOffset().GetY(), m_there); } else if (ShowingElevation()) { m_Parent->SetAltitude(cz + m_Parent->GetOffset().GetZ(), m_there); } else { m_Parent->ClearCoords(); } } int GfxCore::GetCompassWidth() const { static int result = 0; if (result == 0) { result = INDICATOR_BOX_SIZE * GetContentScaleFactor(); int width; const wxString & msg = wmsg(/*Facing*/203); GetTextExtent(msg, &width, NULL); if (width > result) result = width; } return result; } int GfxCore::GetClinoWidth() const { static int result = 0; if (result == 0) { result = INDICATOR_BOX_SIZE * GetContentScaleFactor(); int width; const wxString & msg1 = wmsg(/*Plan*/432); GetTextExtent(msg1, &width, NULL); if (width > result) result = width; const wxString & msg2 = wmsg(/*Kiwi Plan*/433); GetTextExtent(msg2, &width, NULL); if (width > result) result = width; const wxString & msg3 = wmsg(/*Elevation*/118); GetTextExtent(msg3, &width, NULL); if (width > result) result = width; } return result; } int GfxCore::GetCompassXPosition() const { // Return the x-coordinate of the centre of the compass in window // coordinates. return GetXSize() - INDICATOR_OFFSET_X * GetContentScaleFactor() - GetCompassWidth() / 2; } int GfxCore::GetClinoXPosition() const { // Return the x-coordinate of the centre of the compass in window // coordinates. return GetXSize() - GetClinoOffset() - GetClinoWidth() / 2; } int GfxCore::GetIndicatorYPosition() const { // Return the y-coordinate of the centre of the indicators in window // coordinates. return GetYSize() - (INDICATOR_OFFSET_Y + INDICATOR_BOX_SIZE / 2) * GetContentScaleFactor(); } int GfxCore::GetIndicatorRadius() const { // Return the radius of each indicator. return (INDICATOR_BOX_SIZE - INDICATOR_MARGIN * 2) / 2 * GetContentScaleFactor(); } bool GfxCore::PointWithinCompass(wxPoint point) const { // Determine whether a point (in window coordinates) lies within the // compass. if (!ShowingCompass()) return false; glaCoord dx = point.x - GetCompassXPosition(); glaCoord dy = point.y - GetIndicatorYPosition(); glaCoord radius = GetIndicatorRadius(); return (dx * dx + dy * dy <= radius * radius); } bool GfxCore::PointWithinClino(wxPoint point) const { // Determine whether a point (in window coordinates) lies within the clino. if (!ShowingClino()) return false; glaCoord dx = point.x - GetClinoXPosition(); glaCoord dy = point.y - GetIndicatorYPosition(); glaCoord radius = GetIndicatorRadius(); return (dx * dx + dy * dy <= radius * radius); } bool GfxCore::PointWithinScaleBar(wxPoint point) const { // Determine whether a point (in window coordinates) lies within the scale // bar. if (!ShowingScaleBar()) return false; auto f = GetContentScaleFactor(); wxCoord y = (GetYSize() - SCALE_BAR_OFFSET_Y * f - GetFontSize()) - point.y; if (y > SCALE_BAR_HEIGHT * f || y < 0) return false; wxCoord x = point.x - SCALE_BAR_OFFSET_X * f; if (x > m_ScaleBarWidth || x < 0) return false; return true; } bool GfxCore::PointWithinColourKey(wxPoint point) const { // Determine whether a point (in window coordinates) lies within the key. point.x -= GetXSize() - KEY_OFFSET_X * GetContentScaleFactor(); point.y = KEY_OFFSET_Y * GetContentScaleFactor() - point.y; return (point.x >= key_lowerleft[m_ColourBy].x && point.x <= 0 && point.y >= key_lowerleft[m_ColourBy].y && point.y <= 0); } void GfxCore::SetCompassFromPoint(wxPoint point) { // Given a point in window coordinates, set the heading of the survey. If // the point is outside the compass, it snaps to 45 degree intervals; // otherwise it operates as normal. wxCoord dx = point.x - GetCompassXPosition(); wxCoord dy = point.y - GetIndicatorYPosition(); wxCoord radius = GetIndicatorRadius(); double angle = deg(atan2(double(dx), double(dy))) - 180.0; if (dx * dx + dy * dy <= radius * radius) { TurnCave(angle - m_PanAngle); m_MouseOutsideCompass = false; } else { TurnCave(int(angle / 45.0) * 45.0 - m_PanAngle); m_MouseOutsideCompass = true; } ForceRefresh(); } void GfxCore::SetClinoFromPoint(wxPoint point) { // Given a point in window coordinates, set the elevation of the survey. // If the point is outside the clino, it snaps to 90 degree intervals; // otherwise it operates as normal. glaCoord dx = point.x - GetClinoXPosition(); glaCoord dy = point.y - GetIndicatorYPosition(); glaCoord radius = GetIndicatorRadius(); if (dx >= 0 && dx * dx + dy * dy <= radius * radius) { TiltCave(-deg(atan2(double(dy), double(dx))) - m_TiltAngle); m_MouseOutsideElev = false; } else if (dy >= INDICATOR_MARGIN * GetContentScaleFactor()) { TiltCave(-90.0 - m_TiltAngle); m_MouseOutsideElev = true; } else if (dy <= -INDICATOR_MARGIN * GetContentScaleFactor()) { TiltCave(90.0 - m_TiltAngle); m_MouseOutsideElev = true; } else { TiltCave(-m_TiltAngle); m_MouseOutsideElev = true; } ForceRefresh(); } void GfxCore::SetScaleBarFromOffset(wxCoord dx) { // Set the scale of the survey, given an offset as to how much the mouse has // been dragged over the scalebar since the last scale change. SetScale((m_ScaleBarWidth + dx) * m_Scale / m_ScaleBarWidth); ForceRefresh(); } void GfxCore::RedrawIndicators() { // Redraw the compass and clino indicators. int total_width = GetCompassWidth() + INDICATOR_GAP * GetContentScaleFactor() + GetClinoWidth(); RefreshRect(wxRect(GetXSize() - INDICATOR_OFFSET_X * GetContentScaleFactor() - total_width, GetYSize() - (INDICATOR_OFFSET_Y + INDICATOR_BOX_SIZE) * GetContentScaleFactor(), total_width, INDICATOR_BOX_SIZE * GetContentScaleFactor()), false); } void GfxCore::StartRotation() { // Start the survey rotating. if (m_SwitchingTo >= NORTH) m_SwitchingTo = 0; m_Rotating = true; SetPanBase(); } void GfxCore::ToggleRotation() { // Toggle the survey rotation on/off. if (m_Rotating) { StopRotation(); } else { StartRotation(); } } void GfxCore::StopRotation() { // Stop the survey rotating. m_Rotating = false; ForceRefresh(); } bool GfxCore::IsExtendedElevation() const { return m_Parent->IsExtendedElevation(); } void GfxCore::ReverseRotation() { // Reverse the direction of rotation. m_RotationStep = -m_RotationStep; if (m_Rotating) SetPanBase(); } void GfxCore::RotateSlower(bool accel) { // Decrease the speed of rotation, optionally by an increased amount. if (fabs(m_RotationStep) == 1.0) return; m_RotationStep *= accel ? (1 / 1.44) : (1 / 1.2); if (fabs(m_RotationStep) < 1.0) { m_RotationStep = (m_RotationStep > 0 ? 1.0 : -1.0); } if (m_Rotating) SetPanBase(); } void GfxCore::RotateFaster(bool accel) { // Increase the speed of rotation, optionally by an increased amount. if (fabs(m_RotationStep) == 180.0) return; m_RotationStep *= accel ? 1.44 : 1.2; if (fabs(m_RotationStep) > 180.0) { m_RotationStep = (m_RotationStep > 0 ? 180.0 : -180.0); } if (m_Rotating) SetPanBase(); } void GfxCore::SwitchToElevation() { // Perform an animated switch to elevation view. if (m_SwitchingTo != ELEVATION) { SetTiltBase(); m_SwitchingTo = ELEVATION; } else { // A second order to switch takes us there right away TiltCave(-m_TiltAngle); m_SwitchingTo = 0; ForceRefresh(); } } void GfxCore::SwitchToPlan() { // Perform an animated switch to plan view. if (m_SwitchingTo != PLAN) { SetTiltBase(); m_SwitchingTo = PLAN; } else { // A second order to switch takes us there right away TiltCave(-90.0 - m_TiltAngle); m_SwitchingTo = 0; ForceRefresh(); } } void GfxCore::SetViewTo(Double xmin, Double xmax, Double ymin, Double ymax, Double zmin, Double zmax) { SetTranslation(-Vector3((xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2)); Double scale = HUGE_VAL; const Vector3 ext = m_Parent->GetExtent(); if (xmax > xmin) { Double s = ext.GetX() / (xmax - xmin); if (s < scale) scale = s; } if (ymax > ymin) { Double s = ext.GetY() / (ymax - ymin); if (s < scale) scale = s; } if (!ShowingPlan() && zmax > zmin) { Double s = ext.GetZ() / (zmax - zmin); if (s < scale) scale = s; } if (scale != HUGE_VAL) SetScale(scale); ForceRefresh(); } bool GfxCore::CanRaiseViewpoint() const { // Determine if the survey can be viewed from a higher angle of elevation. return GetPerspective() ? (m_TiltAngle < 90.0) : (m_TiltAngle > -90.0); } bool GfxCore::CanLowerViewpoint() const { // Determine if the survey can be viewed from a lower angle of elevation. return GetPerspective() ? (m_TiltAngle > -90.0) : (m_TiltAngle < 90.0); } bool GfxCore::HasDepth() const { return m_Parent->GetDepthExtent() == 0.0; } bool GfxCore::HasErrorInformation() const { return m_Parent->HasErrorInformation(); } bool GfxCore::HasDateInformation() const { return m_Parent->GetDateMin() >= 0; } bool GfxCore::ShowingPlan() const { // Determine if the survey is in plan view. return (m_TiltAngle == -90.0); } bool GfxCore::ShowingElevation() const { // Determine if the survey is in elevation view. return (m_TiltAngle == 0.0); } bool GfxCore::ShowingMeasuringLine() const { // Determine if the measuring line is being shown. Only check if "there" // is valid, since that means the measuring line anchor is out. return m_there; } void GfxCore::ToggleFlag(bool* flag, int update) { *flag = !*flag; if (update == UPDATE_BLOBS) { UpdateBlobs(); } else if (update == UPDATE_BLOBS_AND_CROSSES) { UpdateBlobs(); InvalidateList(LIST_CROSSES); m_HitTestGridValid = false; } ForceRefresh(); } int GfxCore::GetNumEntrances() const { return m_Parent->GetNumEntrances(); } int GfxCore::GetNumFixedPts() const { return m_Parent->GetNumFixedPts(); } int GfxCore::GetNumExportedPts() const { return m_Parent->GetNumExportedPts(); } void GfxCore::ToggleTerrain() { if (!m_Terrain && !dem) { // OnOpenTerrain() calls us if a file is selected. wxCommandEvent dummy; m_Parent->OnOpenTerrain(dummy); return; } ToggleFlag(&m_Terrain); } void GfxCore::ToggleFatFinger() { if (sqrd_measure_threshold == sqrd(MEASURE_THRESHOLD)) { sqrd_measure_threshold = sqrd(5 * MEASURE_THRESHOLD); wxMessageBox(wxT("Fat finger enabled"), wxT("Aven Debug"), wxOK | wxICON_INFORMATION); } else { sqrd_measure_threshold = sqrd(MEASURE_THRESHOLD); wxMessageBox(wxT("Fat finger disabled"), wxT("Aven Debug"), wxOK | wxICON_INFORMATION); } } void GfxCore::ClearTreeSelection() { m_Parent->ClearTreeSelection(); } void GfxCore::CentreOn(const Point &p) { SetTranslation(-p); m_HitTestGridValid = false; ForceRefresh(); } void GfxCore::ForceRefresh() { Refresh(false); } void GfxCore::GenerateList(unsigned int l) { assert(m_HaveData); switch (l) { case LIST_COMPASS: DrawCompass(); break; case LIST_CLINO: DrawClino(); break; case LIST_CLINO_BACK: DrawClinoBack(); break; case LIST_SCALE_BAR: DrawScaleBar(); break; case LIST_DEPTH_KEY: DrawDepthKey(); break; case LIST_DATE_KEY: DrawDateKey(); break; case LIST_ERROR_KEY: DrawErrorKey(); break; case LIST_GRADIENT_KEY: DrawGradientKey(); break; case LIST_LENGTH_KEY: DrawLengthKey(); break; case LIST_STYLE_KEY: DrawStyleKey(); break; case LIST_UNDERGROUND_LEGS: GenerateDisplayList(false); break; case LIST_TUBES: GenerateDisplayListTubes(); break; case LIST_SURFACE_LEGS: GenerateDisplayList(true); break; case LIST_BLOBS: GenerateBlobsDisplayList(); break; case LIST_CROSSES: { BeginCrosses(); SetColour(col_LIGHT_GREY); const SurveyFilter* filter = m_Parent->GetTreeFilter(); list::const_iterator pos = m_Parent->GetLabels(); while (pos != m_Parent->GetLabelsEnd()) { const LabelInfo* label = *pos++; if (m_Splays == SHOW_HIDE && label->IsSplayEnd()) continue; if ((m_Surface && label->IsSurface()) || (m_Legs && label->IsUnderground()) || (!label->IsSurface() && !label->IsUnderground())) { // Check if this station should be displayed // (last case above is for stns with no legs attached) if (filter && !filter->CheckVisible(label->GetText())) continue; DrawCross(label->GetX(), label->GetY(), label->GetZ()); } } EndCrosses(); break; } case LIST_GRID: DrawGrid(); break; case LIST_SHADOW: GenerateDisplayListShadow(); break; case LIST_TERRAIN: DrawTerrain(); break; default: assert(false); break; } } void GfxCore::ToggleSmoothShading() { GLACanvas::ToggleSmoothShading(); InvalidateList(LIST_TUBES); ForceRefresh(); } void GfxCore::GenerateDisplayList(bool surface) { unsigned surf_or_not = surface ? img_FLAG_SURFACE : 0; // Generate the display list for the surface or underground legs. for (int f = 0; f != 8; ++f) { if ((f & img_FLAG_SURFACE) != surf_or_not) continue; const unsigned SHOW_DASHED_AND_FADED = unsigned(-1); unsigned style = SHOW_NORMAL; if ((f & img_FLAG_SPLAY) && m_Splays != SHOW_NORMAL) { style = m_Splays; } else if (f & img_FLAG_DUPLICATE) { style = m_Dupes; } if (f & img_FLAG_SURFACE) { if (style == SHOW_FADED) { style = SHOW_DASHED_AND_FADED; } else { style = SHOW_DASHED; } } switch (style) { case SHOW_HIDE: continue; case SHOW_FADED: SetAlpha(0.4); break; case SHOW_DASHED: EnableDashedLines(); break; case SHOW_DASHED_AND_FADED: SetAlpha(0.4); EnableDashedLines(); break; } void (GfxCore::* add_poly)(const traverse&); if (surface) { switch (m_ColourBy) { case COLOUR_BY_ERROR: case COLOUR_BY_H_ERROR: case COLOUR_BY_V_ERROR: add_poly = &GfxCore::AddPolylineError; break; case COLOUR_BY_STYLE: add_poly = &GfxCore::AddPolylineStyle; break; default: add_poly = &GfxCore::AddPolyline; } } else { add_poly = AddPoly; } const SurveyFilter* filter = m_Parent->GetTreeFilter(); list::const_iterator trav = m_Parent->traverses_begin(f, filter); list::const_iterator tend = m_Parent->traverses_end(f); while (trav != tend) { (this->*add_poly)(*trav); trav = m_Parent->traverses_next(f, filter, trav); } switch (style) { case SHOW_FADED: SetAlpha(1.0); break; case SHOW_DASHED: DisableDashedLines(); break; case SHOW_DASHED_AND_FADED: DisableDashedLines(); SetAlpha(1.0); break; } } } void GfxCore::GenerateDisplayListTubes() { // Generate the display list for the tubes. list>::iterator trav = m_Parent->tubes_begin(); list>::iterator tend = m_Parent->tubes_end(); while (trav != tend) { SkinPassage(*trav); ++trav; } } void GfxCore::GenerateDisplayListShadow() { const SurveyFilter* filter = m_Parent->GetTreeFilter(); SetColour(col_BLACK); for (int f = 0; f != 8; ++f) { // Only include underground legs in the shadow. if ((f & img_FLAG_SURFACE) != 0) continue; list::const_iterator trav = m_Parent->traverses_begin(f, filter); list::const_iterator tend = m_Parent->traverses_end(f); while (trav != tend) { AddPolylineShadow(*trav); trav = m_Parent->traverses_next(f, filter, trav); } } } void GfxCore::parse_hgt_filename(const wxString & lc_name) { char * leaf = leaf_from_fnm(lc_name.utf8_str()); const char * p = leaf; char * q; char dirn = *p++; o_y = strtoul(p, &q, 10); p = q; if (dirn == 's') o_y = -o_y; ++o_y; dirn = *p++; o_x = strtoul(p, &q, 10); if (dirn == 'w') o_x = -o_x; bigendian = true; nodata_value = -32768; osfree(leaf); } size_t GfxCore::parse_hdr(wxInputStream & is, unsigned long & skipbytes) { // ESRI docs say NBITS defaults to 8. unsigned long nbits = 8; // ESRI docs say NBANDS defaults to 1. unsigned long nbands = 1; unsigned long bandrowbytes = 0; unsigned long totalrowbytes = 0; // ESRI docs say ULXMAP defaults to 0. o_x = 0.0; // ESRI docs say ULYMAP defaults to NROWS - 1. o_y = HUGE_VAL; // ESRI docs say XDIM and YDIM default to 1. step_x = step_y = 1.0; while (!is.Eof()) { wxString line; int ch; while ((ch = is.GetC()) != wxEOF) { if (ch == '\n' || ch == '\r') break; line += wxChar(ch); } #define CHECK(X, COND) \ } else if (line.StartsWith(wxT(X " "))) { \ size_t v = line.find_first_not_of(wxT(' '), sizeof(X)); \ if (v == line.npos || !(COND)) { \ err += wxT("Unexpected value for " X); \ } wxString err; if (false) { // I = little-endian; M = big-endian CHECK("BYTEORDER", (bigendian = (line[v] == 'M')) || line[v] == 'I') // ESRI docs say LAYOUT defaults to BIL if not specified. CHECK("LAYOUT", line.substr(v) == wxT("BIL")) CHECK("NROWS", line.substr(v).ToCULong(&dem_height)) CHECK("NCOLS", line.substr(v).ToCULong(&dem_width)) // ESRI docs say NBANDS defaults to 1 if not specified. CHECK("NBANDS", line.substr(v).ToCULong(&nbands) && nbands == 1) CHECK("NBITS", line.substr(v).ToCULong(&nbits) && nbits == 16) CHECK("BANDROWBYTES", line.substr(v).ToCULong(&bandrowbytes)) CHECK("TOTALROWBYTES", line.substr(v).ToCULong(&totalrowbytes)) // PIXELTYPE is a GDAL extension, so may not be present. CHECK("PIXELTYPE", line.substr(v) == wxT("SIGNEDINT")) CHECK("ULXMAP", line.substr(v).ToCDouble(&o_x)) CHECK("ULYMAP", line.substr(v).ToCDouble(&o_y)) CHECK("XDIM", line.substr(v).ToCDouble(&step_x)) CHECK("YDIM", line.substr(v).ToCDouble(&step_y)) CHECK("NODATA", line.substr(v).ToCLong(&nodata_value)) CHECK("SKIPBYTES", line.substr(v).ToCULong(&skipbytes)) } if (!err.empty()) { wxMessageBox(err); } } if (o_y == HUGE_VAL) { o_y = dem_height - 1; } if (bandrowbytes != 0) { if (nbits * dem_width != bandrowbytes * 8) { wxMessageBox("BANDROWBYTES setting indicates unused bits after each band - not currently supported"); } } if (totalrowbytes != 0) { // This is the ESRI default for BIL, for BIP it would be // nbands * bandrowbytes. if (nbands * nbits * dem_width != totalrowbytes * 8) { wxMessageBox("TOTALROWBYTES setting indicates unused bits after " "each row - not currently supported"); } } return ((nbits * dem_width + 7) / 8) * dem_height; } bool GfxCore::read_bil(wxInputStream & is, size_t size, unsigned long skipbytes) { bool know_size = true; if (!size) { // If the stream doesn't know its size, GetSize() returns 0. size = is.GetSize(); if (!size) { size = DEFAULT_HGT_SIZE; know_size = false; } } dem = new unsigned short[size / 2]; if (skipbytes) { if (is.SeekI(skipbytes, wxFromStart) == ::wxInvalidOffset) { while (skipbytes) { unsigned long to_read = skipbytes; if (size < to_read) to_read = size; is.Read(reinterpret_cast(dem), to_read); size_t c = is.LastRead(); if (c == 0) { wxMessageBox(wxT("Failed to skip terrain data header")); break; } skipbytes -= c; } } } if (!is.ReadAll(dem, size)) { if (know_size) { // FIXME: On __WXMSW__ currently we fail to // read any data from files in zips. delete [] dem; dem = NULL; wxMessageBox(wxT("Failed to read terrain data")); return false; } size = is.LastRead(); } if (dem_width == 0 && dem_height == 0) { dem_width = dem_height = sqrt(size / 2); if (dem_width * dem_height * 2 != size) { delete [] dem; dem = NULL; wxMessageBox(wxT("HGT format data doesn't form a square")); return false; } step_x = step_y = 1.0 / dem_width; } return true; } bool GfxCore::LoadDEM(const wxString & file) { if (m_Parent->GetCSProj().empty()) { wxMessageBox(wxT("No coordinate system specified in survey data")); return false; } delete [] dem; dem = NULL; size_t size = 0; // Default is to not skip any bytes. unsigned long skipbytes = 0; // For .hgt files, default to using filesize to determine. dem_width = dem_height = 0; // ESRI say "The default byte order is the same as that of the host machine // executing the software", but that's stupid so we default to // little-endian. bigendian = false; wxFileInputStream fs(file); if (!fs.IsOk()) { wxMessageBox(wxT("Failed to open DEM file")); return false; } const wxString & lc_file = file.Lower(); if (lc_file.EndsWith(wxT(".hgt"))) { parse_hgt_filename(lc_file); read_bil(fs, size, skipbytes); } else if (lc_file.EndsWith(wxT(".bil"))) { wxString hdr_file = file; hdr_file.replace(file.size() - 4, 4, wxT(".hdr")); wxFileInputStream hdr_is(hdr_file); if (!hdr_is.IsOk()) { wxMessageBox(wxT("Failed to open HDR file '") + hdr_file + wxT("'")); return false; } size = parse_hdr(hdr_is, skipbytes); read_bil(fs, size, skipbytes); } else if (lc_file.EndsWith(wxT(".zip"))) { wxZipEntry * ze_data = NULL; wxZipInputStream zs(fs); wxZipEntry * ze; while ((ze = zs.GetNextEntry()) != NULL) { if (!ze->IsDir()) { const wxString & lc_name = ze->GetName().Lower(); if (!ze_data && lc_name.EndsWith(wxT(".hgt"))) { // SRTM .hgt files are raw binary data, with the filename // encoding the coordinates. parse_hgt_filename(lc_name); read_bil(zs, size, skipbytes); delete ze; break; } if (!ze_data && lc_name.EndsWith(wxT(".bil"))) { if (size) { read_bil(zs, size, skipbytes); break; } ze_data = ze; continue; } if (lc_name.EndsWith(wxT(".hdr"))) { size = parse_hdr(zs, skipbytes); if (ze_data) { if (!zs.OpenEntry(*ze_data)) { wxMessageBox(wxT("Couldn't read DEM data from .zip file")); break; } read_bil(zs, size, skipbytes); } } else if (lc_name.EndsWith(wxT(".prj"))) { //FIXME: check this matches the datum string we use //Projection GEOGRAPHIC //Datum WGS84 //Zunits METERS //Units DD //Spheroid WGS84 //Xshift 0.0000000000 //Yshift 0.0000000000 //Parameters } } delete ze; } delete ze_data; } if (!dem) { return false; } InvalidateList(LIST_TERRAIN); ForceRefresh(); return true; } void GfxCore::DrawTerrainTriangle(const Vector3 & a, const Vector3 & b, const Vector3 & c) { Vector3 n = (b - a) * (c - a); n.normalise(); Double factor = dot(n, light) * .95 + .05; SetColour(col_WHITE, factor); PlaceVertex(a); PlaceVertex(b); PlaceVertex(c); ++n_tris; } // Like wxBusyCursor, but you can cancel it early. class AvenBusyCursor { bool active; public: AvenBusyCursor() : active(true) { wxBeginBusyCursor(); } void stop() { if (active) { active = false; wxEndBusyCursor(); } } ~AvenBusyCursor() { stop(); } }; static void discarding_proj_logger(void *, int, const char *) { } void GfxCore::DrawTerrain() { if (!dem) return; AvenBusyCursor hourglass; // Draw terrain to twice the extent, or at least 1km. double r_sqrd = sqrd(max(m_Parent->GetExtent().magnitude(), 1000.0)); /* Prevent stderr spew from PROJ. */ proj_log_func(PJ_DEFAULT_CTX, nullptr, discarding_proj_logger); #define WGS84_DATUM_STRING "EPSG:4326" PJ* pj = proj_create_crs_to_crs(PJ_DEFAULT_CTX, WGS84_DATUM_STRING, m_Parent->GetCSProj().c_str(), NULL); if (pj) { // Normalise the output order so x is longitude and y latitude - by default // new PROJ has them switched for EPSG:4326 which just seems confusing. PJ* pj_norm = proj_normalize_for_visualization(PJ_DEFAULT_CTX, pj); proj_destroy(pj); pj = pj_norm; } if (!pj) { ToggleTerrain(); delete [] dem; dem = NULL; hourglass.stop(); error(/*Failed to initialise output coordinate system “%sâ€*/288, (const char *)m_Parent->GetCSProj().c_str()); return; } n_tris = 0; SetAlpha(0.3); BeginTriangles(); const Vector3 & off = m_Parent->GetOffset(); vector prevcol(dem_height + 1); for (size_t x = 0; x < dem_width; ++x) { PJ_COORD coord = {o_x + x * step_x, 0.0, 0.0, HUGE_VAL}; Vector3 prev; for (size_t y = 0; y < dem_height; ++y) { unsigned short elev = dem[x + y * dem_width]; #ifdef WORDS_BIGENDIAN const bool MACHINE_BIGENDIAN = true; #else const bool MACHINE_BIGENDIAN = false; #endif if (bigendian != MACHINE_BIGENDIAN) { #if defined __GNUC__ && (__GNUC__ * 100 + __GNUC_MINOR__ >= 408) elev = __builtin_bswap16(elev); #else elev = (elev >> 8) | (elev << 8); #endif } double Z = (short)elev; Vector3 pt; if (Z == nodata_value) { pt = Vector3(DBL_MAX, DBL_MAX, DBL_MAX); } else { coord.xyzt.y = o_y - y * step_y; coord.xyzt.z = Z; PJ_COORD r = proj_trans(pj, PJ_FWD, coord); if (r.xyzt.x == HUGE_VAL || r.xyzt.y == HUGE_VAL || r.xyzt.z == HUGE_VAL) { pt = Vector3(DBL_MAX, DBL_MAX, DBL_MAX); // FIXME report? } else { pt = Vector3(r.xyzt.x, r.xyzt.y, r.xyzt.z) - off; double dist_2 = sqrd(pt.GetX()) + sqrd(pt.GetY()); if (dist_2 > r_sqrd) { pt = Vector3(DBL_MAX, DBL_MAX, DBL_MAX); } } } if (x > 0 && y > 0) { const Vector3 & a = prevcol[y - 1]; const Vector3 & b = prevcol[y]; // If all points are valid, split the quadrilateral into // triangles along the shorter 3D diagonal, which typically // looks better: // // -----> // prev---a x prev---a // | |P /| |\ S| // y | | / | or | \ | // V | / | | \ | // |/ Q| |R \| // b----pt b----pt // // FORWARD BACKWARD enum { NONE = 0, P = 1, Q = 2, R = 4, S = 8, ALL = P|Q|R|S }; int valid = ((prev.GetZ() != DBL_MAX)) | ((a.GetZ() != DBL_MAX) << 1) | ((b.GetZ() != DBL_MAX) << 2) | ((pt.GetZ() != DBL_MAX) << 3); static const int tris_map[16] = { NONE, // nothing valid NONE, // prev NONE, // a NONE, // a, prev NONE, // b NONE, // b, prev NONE, // b, a P, // b, a, prev NONE, // pt NONE, // pt, prev NONE, // pt, a S, // pt, a, prev NONE, // pt, b R, // pt, b, prev Q, // pt, b, a ALL, // pt, b, a, prev }; int tris = tris_map[valid]; if (tris == ALL) { // All points valid. if ((a - b).magnitude() < (prev - pt).magnitude()) { tris = P | Q; } else { tris = R | S; } } if (tris & P) DrawTerrainTriangle(a, prev, b); if (tris & Q) DrawTerrainTriangle(a, b, pt); if (tris & R) DrawTerrainTriangle(pt, prev, b); if (tris & S) DrawTerrainTriangle(a, prev, pt); } prev = prevcol[y]; prevcol[y].assign(pt); } } EndTriangles(); SetAlpha(1.0); if (n_tris == 0) { ToggleTerrain(); delete [] dem; dem = NULL; hourglass.stop(); /* TRANSLATORS: Aven shows a circle of terrain covering the area * of the survey plus a bit, but the terrain data file didn't * contain any data inside that circle. */ error(/*No terrain data near area of survey*/161); } proj_destroy(pj); } // Plot blobs. void GfxCore::GenerateBlobsDisplayList() { if (!(m_Entrances || m_FixedPts || m_ExportedPts || m_Parent->GetNumHighlightedPts())) return; // Plot blobs. const SurveyFilter* filter = m_Parent->GetTreeFilter(); gla_colour prev_col = col_BLACK; // not a colour used for blobs list::const_iterator pos = m_Parent->GetLabels(); BeginBlobs(); while (pos != m_Parent->GetLabelsEnd()) { const LabelInfo* label = *pos++; // When more than one flag is set on a point: // search results take priority over entrance highlighting // which takes priority over fixed point // highlighting, which in turn takes priority over exported // point highlighting. if (m_Splays == SHOW_HIDE && label->IsSplayEnd()) continue; if (!((m_Surface && label->IsSurface()) || (m_Legs && label->IsUnderground()) || (!label->IsSurface() && !label->IsUnderground()))) { // if this station isn't to be displayed, skip to the next // (last case is for stns with no legs attached) continue; } if (filter && !filter->CheckVisible(label->GetText())) continue; gla_colour col; if (label->IsHighLighted()) { col = col_YELLOW; } else if (m_Entrances && label->IsEntrance()) { col = col_GREEN; } else if (m_FixedPts && label->IsFixedPt()) { col = col_RED; } else if (m_ExportedPts && label->IsExportedPt()) { col = col_TURQUOISE; } else { continue; } // Stations are sorted by blob type, so colour changes are infrequent. if (col != prev_col) { SetColour(col); prev_col = col; } DrawBlob(label->GetX(), label->GetY(), label->GetZ()); } EndBlobs(); } void GfxCore::DrawIndicators() { // Draw colour key. if (m_ColourKey) { drawing_list key_list = LIST_LIMIT_; switch (m_ColourBy) { case COLOUR_BY_DEPTH: key_list = LIST_DEPTH_KEY; break; case COLOUR_BY_DATE: key_list = LIST_DATE_KEY; break; case COLOUR_BY_ERROR: case COLOUR_BY_H_ERROR: case COLOUR_BY_V_ERROR: key_list = LIST_ERROR_KEY; break; case COLOUR_BY_GRADIENT: key_list = LIST_GRADIENT_KEY; break; case COLOUR_BY_LENGTH: key_list = LIST_LENGTH_KEY; break; #if 0 // FIXME Key for survey colours? case COLOUR_BY_SURVEY: key_list = LIST_SURVEY_KEY; break; #endif case COLOUR_BY_STYLE: key_list = LIST_STYLE_KEY; break; } if (key_list != LIST_LIMIT_) { DrawList2D(key_list, GetXSize() - KEY_OFFSET_X * GetContentScaleFactor(), GetYSize() - KEY_OFFSET_Y * GetContentScaleFactor(), 0); } } // Draw compass or elevation/heading indicators. if (m_Compass || m_Clino) { if (!m_Parent->IsExtendedElevation()) Draw2dIndicators(); } // Draw scalebar. if (m_Scalebar && !GetPerspective()) { DrawList2D(LIST_SCALE_BAR, 0, 0, 0); } } void GfxCore::PlaceVertexWithColour(const Vector3 & v, glaTexCoord tex_x, glaTexCoord tex_y, Double factor) { SetColour(col_WHITE, factor); PlaceVertex(v, tex_x, tex_y); } void GfxCore::SetDepthColour(Double z, Double factor) { // Set the drawing colour based on the altitude. Double z_ext = m_Parent->GetDepthExtent(); z -= m_Parent->GetDepthMin(); // points arising from tubes may be slightly outside the limits... if (z < 0) z = 0; if (z > z_ext) z = z_ext; if (z == 0) { SetColour(GetPen(0), factor); return; } assert(z_ext > 0.0); Double how_far = z / z_ext; assert(how_far >= 0.0); assert(how_far <= 1.0); int band = int(floor(how_far * (GetNumColourBands() - 1))); GLAPen pen1 = GetPen(band); if (band < GetNumColourBands() - 1) { const GLAPen& pen2 = GetPen(band + 1); Double interval = z_ext / (GetNumColourBands() - 1); Double into_band = z / interval - band; // printf("%g z_offset=%g interval=%g band=%d\n", into_band, // z_offset, interval, band); // FIXME: why do we need to clamp here? Is it because the walls can // extend further up/down than the centre-line? if (into_band < 0.0) into_band = 0.0; if (into_band > 1.0) into_band = 1.0; assert(into_band >= 0.0); assert(into_band <= 1.0); pen1.Interpolate(pen2, into_band); } SetColour(pen1, factor); } void GfxCore::PlaceVertexWithDepthColour(const Vector3 &v, Double factor) { SetDepthColour(v.GetZ(), factor); PlaceVertex(v); } void GfxCore::PlaceVertexWithDepthColour(const Vector3 &v, glaTexCoord tex_x, glaTexCoord tex_y, Double factor) { SetDepthColour(v.GetZ(), factor); PlaceVertex(v, tex_x, tex_y); } void GfxCore::SplitLineAcrossBands(int band, int band2, const Vector3 &p, const Vector3 &q, Double factor) { const int step = (band < band2) ? 1 : -1; for (int i = band; i != band2; i += step) { const Double z = GetDepthBoundaryBetweenBands(i, i + step); // Find the intersection point of the line p -> q // with the plane parallel to the xy-plane with z-axis intersection z. assert(q.GetZ() - p.GetZ() != 0.0); const Double t = (z - p.GetZ()) / (q.GetZ() - p.GetZ()); // assert(0.0 <= t && t <= 1.0); FIXME: rounding problems! const Double x = p.GetX() + t * (q.GetX() - p.GetX()); const Double y = p.GetY() + t * (q.GetY() - p.GetY()); PlaceVertexWithDepthColour(Vector3(x, y, z), factor); } } void GfxCore::SplitPolyAcrossBands(vector>& splits, int band, int band2, const Vector3 &p, const Vector3 &q, glaTexCoord ptx, glaTexCoord pty, glaTexCoord w, glaTexCoord h) { const int step = (band < band2) ? 1 : -1; for (int i = band; i != band2; i += step) { const Double z = GetDepthBoundaryBetweenBands(i, i + step); // Find the intersection point of the line p -> q // with the plane parallel to the xy-plane with z-axis intersection z. assert(q.GetZ() - p.GetZ() != 0.0); const Double t = (z - p.GetZ()) / (q.GetZ() - p.GetZ()); // assert(0.0 <= t && t <= 1.0); FIXME: rounding problems! const Double x = p.GetX() + t * (q.GetX() - p.GetX()); const Double y = p.GetY() + t * (q.GetY() - p.GetY()); glaTexCoord tx = ptx, ty = pty; if (w) tx += t * w; if (h) ty += t * h; splits[i].push_back(Split(Vector3(x, y, z), tx, ty)); splits[i + step].push_back(Split(Vector3(x, y, z), tx, ty)); } } int GfxCore::GetDepthColour(Double z) const { // Return the (0-based) depth colour band index for a z-coordinate. Double z_ext = m_Parent->GetDepthExtent(); z -= m_Parent->GetDepthMin(); // We seem to get rounding differences causing z to sometimes be slightly // less than GetDepthMin() here, and it can certainly be true for passage // tubes, so just clamp the value to 0. if (z <= 0) return 0; // We seem to get rounding differences causing z to sometimes exceed z_ext // by a small amount here (see: https://trac.survex.com/ticket/26) and it // can certainly be true for passage tubes, so just clamp the value. if (z >= z_ext) return GetNumColourBands() - 1; return int(z / z_ext * (GetNumColourBands() - 1)); } Double GfxCore::GetDepthBoundaryBetweenBands(int a, int b) const { // Return the z-coordinate of the depth colour boundary between // two adjacent depth colour bands (specified by 0-based indices). assert((a == b - 1) || (a == b + 1)); if (GetNumColourBands() == 1) return 0; int band = (a > b) ? a : b; // boundary N lies on the bottom of band N. Double z_ext = m_Parent->GetDepthExtent(); return (z_ext * band / (GetNumColourBands() - 1)) + m_Parent->GetDepthMin(); } void GfxCore::AddPolyline(const traverse & centreline) { BeginPolyline(); SetColour(col_WHITE); vector::const_iterator i = centreline.begin(); PlaceVertex(*i); ++i; while (i != centreline.end()) { PlaceVertex(*i); ++i; } EndPolyline(); } void GfxCore::AddPolylineShadow(const traverse & centreline) { BeginPolyline(); const double z = -0.5 * m_Parent->GetExtent().GetZ(); vector::const_iterator i = centreline.begin(); PlaceVertex(i->GetX(), i->GetY(), z); ++i; while (i != centreline.end()) { PlaceVertex(i->GetX(), i->GetY(), z); ++i; } EndPolyline(); } void GfxCore::AddPolylineDepth(const traverse & centreline) { BeginPolyline(); vector::const_iterator i, prev_i; i = centreline.begin(); int band0 = GetDepthColour(i->GetZ()); PlaceVertexWithDepthColour(*i); prev_i = i; ++i; while (i != centreline.end()) { int band = GetDepthColour(i->GetZ()); if (band != band0) { SplitLineAcrossBands(band0, band, *prev_i, *i); band0 = band; } PlaceVertexWithDepthColour(*i); prev_i = i; ++i; } EndPolyline(); } void GfxCore::AddQuadrilateral(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); PlaceVertexWithColour(a, 0, 0, factor); PlaceVertexWithColour(b, w, 0, factor); PlaceVertexWithColour(c, w, h, factor); PlaceVertexWithColour(d, 0, h, factor); EndQuadrilaterals(); } void GfxCore::AddQuadrilateralDepth(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; int a_band, b_band, c_band, d_band; a_band = GetDepthColour(a.GetZ()); a_band = min(max(a_band, 0), GetNumColourBands()); b_band = GetDepthColour(b.GetZ()); b_band = min(max(b_band, 0), GetNumColourBands()); c_band = GetDepthColour(c.GetZ()); c_band = min(max(c_band, 0), GetNumColourBands()); d_band = GetDepthColour(d.GetZ()); d_band = min(max(d_band, 0), GetNumColourBands()); glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); int min_band = min(min(a_band, b_band), min(c_band, d_band)); int max_band = max(max(a_band, b_band), max(c_band, d_band)); if (min_band == max_band) { // Simple case - the polygon is entirely within one band. BeginPolygon(); //// PlaceNormal(normal); PlaceVertexWithDepthColour(a, 0, 0, factor); PlaceVertexWithDepthColour(b, w, 0, factor); PlaceVertexWithDepthColour(c, w, h, factor); PlaceVertexWithDepthColour(d, 0, h, factor); EndPolygon(); } else { // We need to make a separate polygon for each depth band... vector> splits; splits.resize(max_band + 1); splits[a_band].push_back(Split(a, 0, 0)); if (a_band != b_band) { SplitPolyAcrossBands(splits, a_band, b_band, a, b, 0, 0, w, 0); } splits[b_band].push_back(Split(b, w, 0)); if (b_band != c_band) { SplitPolyAcrossBands(splits, b_band, c_band, b, c, w, 0, 0, h); } splits[c_band].push_back(Split(c, w, h)); if (c_band != d_band) { SplitPolyAcrossBands(splits, c_band, d_band, c, d, w, h, -w, 0); } splits[d_band].push_back(Split(d, 0, h)); if (d_band != a_band) { SplitPolyAcrossBands(splits, d_band, a_band, d, a, 0, h, 0, -h); } for (int band = min_band; band <= max_band; ++band) { BeginPolygon(); for (auto&& item : splits[band]) { PlaceVertexWithDepthColour(item.vec, item.tx, item.ty, factor); } EndPolygon(); } } } void GfxCore::SetColourFromDate(int date, Double factor) { // Set the drawing colour based on a date. if (date == -1) { // Undated. SetColour(NODATA_COLOUR, factor); return; } int date_offset = date - m_Parent->GetDateMin(); if (date_offset == 0) { // Earliest date - handle as a special case for the single date case. SetColour(GetPen(0), factor); return; } int date_ext = m_Parent->GetDateExtent(); Double how_far = (Double)date_offset / date_ext; assert(how_far >= 0.0); assert(how_far <= 1.0); SetColourFrom01(how_far, factor); } void GfxCore::AddPolylineDate(const traverse & centreline) { BeginPolyline(); auto i = centreline.begin(); int date = i->GetDate(); SetColourFromDate(date, 1.0); PlaceVertex(*i); while (++i != centreline.end()) { int newdate = i->GetDate(); if (newdate != date) { date = newdate; SetColourFromDate(date, 1.0); } PlaceVertex(*i); } EndPolyline(); } static int static_date_hack; // FIXME void GfxCore::AddQuadrilateralDate(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromDate(static_date_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } static double static_E_hack; // FIXME void GfxCore::SetColourFromError(double E, Double factor) { // Set the drawing colour based on an error value. if (E < 0) { SetColour(NODATA_COLOUR, factor); return; } Double how_far = E / MAX_ERROR; assert(how_far >= 0.0); if (how_far > 1.0) how_far = 1.0; SetColourFrom01(how_far, factor); } void GfxCore::AddQuadrilateralError(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromError(static_E_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } void GfxCore::AddPolylineError(const traverse & centreline) { BeginPolyline(); SetColourFromError(centreline.errors[error_type], 1.0); for (auto i = centreline.begin(); i != centreline.end(); ++i) { PlaceVertex(*i); } EndPolyline(); } // gradient is in *radians*. void GfxCore::SetColourFromGradient(double gradient, Double factor) { // Set the drawing colour based on the gradient of the leg. const Double GRADIENT_MAX = M_PI_2; gradient = fabs(gradient); Double how_far = gradient / GRADIENT_MAX; SetColourFrom01(how_far, factor); } void GfxCore::AddPolylineGradient(const traverse & centreline) { BeginPolyline(); auto i = centreline.begin(); auto prev_i = i; PlaceVertex(*i); while (++i != centreline.end()) { SetColourFromGradient((*i - *prev_i).gradient(), 1.0); PlaceVertex(*i); prev_i = i; } EndPolyline(); } static double static_gradient_hack; // FIXME void GfxCore::AddQuadrilateralGradient(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromGradient(static_gradient_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } void GfxCore::SetColourFromLength(double length, Double factor) { // Set the drawing colour based on log(length_of_leg). Double log_len = log10(length); Double how_far = log_len / LOG_LEN_MAX; how_far = max(how_far, 0.0); how_far = min(how_far, 1.0); SetColourFrom01(how_far, factor); } void GfxCore::SetColourFromSurvey(const wxString& survey) { // Set the drawing colour based on hash of name. int hash = hash_string(survey.utf8_str()); wxImage::HSVValue hsv((hash & 0xff) / 256.0, (((hash >> 8) & 0x7f) | 0x80) / 256.0, 0.9); wxImage::RGBValue rgb = wxImage::HSVtoRGB(hsv); GLAPen pen; pen.SetColour(rgb.red / 256.0, rgb.green / 256.0, rgb.blue / 256.0); SetColour(pen); } void GfxCore::SetColourFromSurveyStation(const wxString& name, Double factor) { // Set the drawing colour based on hash of survey name. const char* p = name.utf8_str(); const char* q = strrchr(p, m_Parent->GetSeparator()); size_t len = q ? (q - p) : strlen(p); int hash = hash_data(p, len); wxImage::HSVValue hsv((hash & 0xff) / 256.0, (((hash >> 8) & 0x7f) | 0x80) / 256.0, 0.9); wxImage::RGBValue rgb = wxImage::HSVtoRGB(hsv); GLAPen pen; pen.SetColour(rgb.red / 256.0, rgb.green / 256.0, rgb.blue / 256.0); SetColour(pen, factor); } void GfxCore::SetColourFrom01(double how_far, Double factor) { double b; double into_band = modf(how_far * (GetNumColourBands() - 1), &b); int band(b); GLAPen pen1 = GetPen(band); // With 24bit colour, interpolating by less than this can have no effect. if (into_band >= 1.0 / 512.0) { const GLAPen& pen2 = GetPen(band + 1); pen1.Interpolate(pen2, into_band); } SetColour(pen1, factor); } void GfxCore::AddPolylineLength(const traverse & centreline) { BeginPolyline(); auto i = centreline.begin(); auto prev_i = i; PlaceVertex(*i); while (++i != centreline.end()) { SetColourFromLength((*i - *prev_i).magnitude(), 1.0); PlaceVertex(*i); prev_i = i; } EndPolyline(); } static double static_length_hack; // FIXME void GfxCore::AddQuadrilateralLength(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromLength(static_length_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } void GfxCore::AddPolylineSurvey(const traverse & centreline) { BeginPolyline(); SetColourFromSurvey(centreline.name); for (auto i = centreline.begin(); i != centreline.end(); ++i) { PlaceVertex(*i); } EndPolyline(); } static const wxString* static_survey_hack; void GfxCore::AddQuadrilateralSurvey(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromSurveyStation(*static_survey_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } void GfxCore::AddPolylineStyle(const traverse & centreline) { BeginPolyline(); SetColour(style_colours[centreline.style + 1]); // SetColourFromStyle(centreline.style); for (auto i = centreline.begin(); i != centreline.end(); ++i) { PlaceVertex(*i); } EndPolyline(); } #if 0 static int static_style_hack; void GfxCore::AddQuadrilateralStyle(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d) { Vector3 normal = (a - c) * (d - b); normal.normalise(); Double factor = dot(normal, light) * .3 + .7; glaTexCoord w(((b - a).magnitude() + (d - c).magnitude()) * .5); glaTexCoord h(((b - c).magnitude() + (d - a).magnitude()) * .5); // FIXME: should plot triangles instead to avoid rendering glitches. BeginQuadrilaterals(); //// PlaceNormal(normal); SetColourFromSurveyStation(*static_survey_hack, factor); PlaceVertex(a, 0, 0); PlaceVertex(b, w, 0); PlaceVertex(c, w, h); PlaceVertex(d, 0, h); EndQuadrilaterals(); } #endif void GfxCore::SkinPassage(vector & centreline) { const SurveyFilter* filter = m_Parent->GetTreeFilter(); assert(centreline.size() > 1); Vector3 U[4]; XSect* prev_pt_v = NULL; Vector3 last_right(1.0, 0.0, 0.0); // FIXME: it's not simple to set the colour of a tube based on error... // static_E_hack = something... vector::iterator i = centreline.begin(); vector::size_type segment = 0; while (i != centreline.end()) { // get the coordinates of this vertex XSect & pt_v = *i++; bool cover_end = false; Vector3 right, up; const Vector3 up_v(0.0, 0.0, 1.0); static_survey_hack = &(pt_v.GetLabel()); if (segment == 0) { assert(i != centreline.end()); // first segment // get the coordinates of the next vertex const XSect & next_pt_v = *i; // calculate vector from this pt to the next one Vector3 leg_v = next_pt_v - pt_v; // obtain a vector in the LRUD plane right = leg_v * up_v; if (right.magnitude() == 0) { right = last_right; // Obtain a second vector in the LRUD plane, // perpendicular to the first. //up = right * leg_v; up = up_v; } else { last_right = right; up = up_v; } cover_end = true; static_date_hack = next_pt_v.GetDate(); } else if (segment + 1 == centreline.size()) { // last segment // Calculate vector from the previous pt to this one. Vector3 leg_v = pt_v - *prev_pt_v; // Obtain a horizontal vector in the LRUD plane. right = leg_v * up_v; if (right.magnitude() == 0) { right = Vector3(last_right.GetX(), last_right.GetY(), 0.0); // Obtain a second vector in the LRUD plane, // perpendicular to the first. //up = right * leg_v; up = up_v; } else { last_right = right; up = up_v; } cover_end = true; static_date_hack = pt_v.GetDate(); } else { assert(i != centreline.end()); // Intermediate segment. // Get the coordinates of the next vertex. const XSect & next_pt_v = *i; // Calculate vectors from this vertex to the // next vertex, and from the previous vertex to // this one. Vector3 leg1_v = pt_v - *prev_pt_v; Vector3 leg2_v = next_pt_v - pt_v; // Obtain horizontal vectors perpendicular to // both legs, then normalise and average to get // a horizontal bisector. Vector3 r1 = leg1_v * up_v; Vector3 r2 = leg2_v * up_v; r1.normalise(); r2.normalise(); right = r1 + r2; if (right.magnitude() == 0) { // This is the "mid-pitch" case... right = last_right; } if (r1.magnitude() == 0) { up = up_v; // Rotate pitch section to minimise the // "torsional stress" - FIXME: use // triangles instead of rectangles? int shift = 0; Double maxdotp = 0; // Scale to unit vectors in the LRUD plane. right.normalise(); up.normalise(); Vector3 vec = up - right; for (int orient = 0; orient <= 3; ++orient) { Vector3 tmp = U[orient] - prev_pt_v->GetPoint(); tmp.normalise(); Double dotp = dot(vec, tmp); if (dotp > maxdotp) { maxdotp = dotp; shift = orient; } } if (shift) { if (shift != 2) { Vector3 temp(U[0]); U[0] = U[shift]; U[shift] = U[2]; U[2] = U[shift ^ 2]; U[shift ^ 2] = temp; } else { swap(U[0], U[2]); swap(U[1], U[3]); } } #if 0 // Check that the above code actually permuted // the vertices correctly. shift = 0; maxdotp = 0; for (int j = 0; j <= 3; ++j) { Vector3 tmp = U[j] - *prev_pt_v; tmp.normalise(); Double dotp = dot(vec, tmp); if (dotp > maxdotp) { maxdotp = dotp + 1e-6; // Add small tolerance to stop 45 degree offset cases being flagged... shift = j; } } if (shift) { printf("New shift = %d!\n", shift); shift = 0; maxdotp = 0; for (int j = 0; j <= 3; ++j) { Vector3 tmp = U[j] - *prev_pt_v; tmp.normalise(); Double dotp = dot(vec, tmp); printf(" %d : %.8f\n", j, dotp); } } #endif } else { up = up_v; } last_right = right; static_date_hack = pt_v.GetDate(); } // Scale to unit vectors in the LRUD plane. right.normalise(); up.normalise(); Double l = fabs(pt_v.GetL()); Double r = fabs(pt_v.GetR()); Double u = fabs(pt_v.GetU()); Double d = fabs(pt_v.GetD()); // Produce coordinates of the corners of the LRUD "plane". Vector3 v[4]; v[0] = pt_v.GetPoint() - right * l + up * u; v[1] = pt_v.GetPoint() + right * r + up * u; v[2] = pt_v.GetPoint() + right * r - up * d; v[3] = pt_v.GetPoint() - right * l - up * d; if (segment > 0) { if (!filter || (filter->CheckVisible(pt_v.GetLabel()) && filter->CheckVisible(prev_pt_v->GetLabel()))) { const Vector3 & delta = pt_v - *prev_pt_v; static_length_hack = delta.magnitude(); static_gradient_hack = delta.gradient(); (this->*AddQuad)(v[0], v[1], U[1], U[0]); (this->*AddQuad)(v[2], v[3], U[3], U[2]); (this->*AddQuad)(v[1], v[2], U[2], U[1]); (this->*AddQuad)(v[3], v[0], U[0], U[3]); } } if (cover_end) { if (!filter || filter->CheckVisible(pt_v.GetLabel())) { if (segment == 0) { (this->*AddQuad)(v[0], v[1], v[2], v[3]); } else { (this->*AddQuad)(v[3], v[2], v[1], v[0]); } } } prev_pt_v = &pt_v; U[0] = v[0]; U[1] = v[1]; U[2] = v[2]; U[3] = v[3]; ++segment; } } void GfxCore::FullScreenMode() { m_Parent->ViewFullScreen(); } bool GfxCore::IsFullScreen() const { return m_Parent->IsFullScreen(); } bool GfxCore::FullScreenModeShowingMenus() const { return m_Parent->FullScreenModeShowingMenus(); } void GfxCore::FullScreenModeShowMenus(bool show) { m_Parent->FullScreenModeShowMenus(show); } void GfxCore::MoveViewer(double forward, double up, double right) { double cT = cos(rad(m_TiltAngle)); double sT = sin(rad(m_TiltAngle)); double cP = cos(rad(m_PanAngle)); double sP = sin(rad(m_PanAngle)); Vector3 v_forward(cT * sP, cT * cP, sT); Vector3 v_up(sT * sP, sT * cP, -cT); Vector3 v_right(-cP, sP, 0); assert(fabs(dot(v_forward, v_up)) < 1e-6); assert(fabs(dot(v_forward, v_right)) < 1e-6); assert(fabs(dot(v_right, v_up)) < 1e-6); Vector3 move = v_forward * forward + v_up * up + v_right * right; AddTranslation(-move); // Show current position. m_Parent->SetCoords(m_Parent->GetOffset() - GetTranslation()); ForceRefresh(); } PresentationMark GfxCore::GetView() const { return PresentationMark(GetTranslation() + m_Parent->GetOffset(), m_PanAngle, -m_TiltAngle, m_Scale); } void GfxCore::SetView(const PresentationMark & p) { m_SwitchingTo = 0; SetTranslation(p - m_Parent->GetOffset()); m_PanAngle = p.angle; m_TiltAngle = -p.tilt_angle; // FIXME: nasty reversed sense (and above) SetRotation(m_PanAngle, m_TiltAngle); SetScale(p.scale); ForceRefresh(); } void GfxCore::PlayPres(double speed, bool change_speed) { if (!change_speed || presentation_mode == 0) { if (speed == 0.0) { presentation_mode = 0; return; } presentation_mode = PLAYING; next_mark = m_Parent->GetPresMark(MARK_FIRST); SetView(next_mark); next_mark_time = 0; // There already! this_mark_total = 0; pres_reverse = (speed < 0); } if (change_speed) pres_speed = speed; if (speed != 0.0) { bool new_pres_reverse = (speed < 0); if (new_pres_reverse != pres_reverse) { pres_reverse = new_pres_reverse; if (pres_reverse) { next_mark = m_Parent->GetPresMark(MARK_PREV); } else { next_mark = m_Parent->GetPresMark(MARK_NEXT); } swap(this_mark_total, next_mark_time); } } } void GfxCore::SetColourBy(int colour_by) { m_ColourBy = colour_by; switch (colour_by) { case COLOUR_BY_DEPTH: AddQuad = &GfxCore::AddQuadrilateralDepth; AddPoly = &GfxCore::AddPolylineDepth; break; case COLOUR_BY_DATE: AddQuad = &GfxCore::AddQuadrilateralDate; AddPoly = &GfxCore::AddPolylineDate; break; case COLOUR_BY_ERROR: case COLOUR_BY_H_ERROR: case COLOUR_BY_V_ERROR: AddQuad = &GfxCore::AddQuadrilateralError; AddPoly = &GfxCore::AddPolylineError; break; case COLOUR_BY_GRADIENT: AddQuad = &GfxCore::AddQuadrilateralGradient; AddPoly = &GfxCore::AddPolylineGradient; break; case COLOUR_BY_LENGTH: AddQuad = &GfxCore::AddQuadrilateralLength; AddPoly = &GfxCore::AddPolylineLength; break; case COLOUR_BY_SURVEY: AddQuad = &GfxCore::AddQuadrilateralSurvey; AddPoly = &GfxCore::AddPolylineSurvey; break; case COLOUR_BY_STYLE: // FIXME: support quad colouring by style AddQuad = &GfxCore::AddQuadrilateral; AddPoly = &GfxCore::AddPolylineStyle; break; default: // case COLOUR_BY_NONE: AddQuad = &GfxCore::AddQuadrilateral; AddPoly = &GfxCore::AddPolyline; break; } switch (colour_by) { case COLOUR_BY_ERROR: error_type = traverse::ERROR_3D; break; case COLOUR_BY_H_ERROR: error_type = traverse::ERROR_H; break; case COLOUR_BY_V_ERROR: error_type = traverse::ERROR_V; break; } InvalidateList(LIST_UNDERGROUND_LEGS); InvalidateList(LIST_SURFACE_LEGS); InvalidateList(LIST_TUBES); ForceRefresh(); } bool GfxCore::ExportMovie(const wxString & fnm) { FILE* fh = wxFopen(fnm.fn_str(), wxT("wb")); if (fh == NULL) { wxGetApp().ReportError(wxString::Format(wmsg(/*Failed to open output file “%sâ€*/47), fnm.c_str())); return false; } wxString ext; wxFileName::SplitPath(fnm, NULL, NULL, NULL, &ext, wxPATH_NATIVE); int width = GetXSize(); int height = GetYSize(); // Round up to next multiple of 2 (required by ffmpeg). width += (width & 1); height += (height & 1); movie = new MovieMaker(); // movie takes ownership of fh. if (!movie->Open(fh, ext.utf8_str(), width, height)) { wxGetApp().ReportError(wxString(movie->get_error_string(), wxConvUTF8)); delete movie; movie = NULL; return false; } PlayPres(1); return true; } void GfxCore::OnPrint(const wxString &filename, const wxString &title, const wxString &datestamp, bool close_after_print) { svxPrintDlg * p; p = new svxPrintDlg(m_Parent, filename, title, datestamp, m_PanAngle, m_TiltAngle, m_Names, m_Crosses, m_Legs, m_Surface, m_Splays, m_Tubes, m_Entrances, m_FixedPts, m_ExportedPts, true, close_after_print); p->Show(true); } void GfxCore::OnExport(const wxString &filename, const wxString &title, const wxString &datestamp) { svxPrintDlg * p; p = new svxPrintDlg(m_Parent, filename, title, datestamp, m_PanAngle, m_TiltAngle, m_Names, m_Crosses, m_Legs, m_Surface, m_Splays, m_Tubes, m_Entrances, m_FixedPts, m_ExportedPts, false); p->Show(true); } static wxCursor make_cursor(const unsigned char * bits, const unsigned char * mask, int hotx, int hoty) { #if defined __WXGTK__ && !defined __WXGTK3__ // Use this code for GTK < 3 only - it doesn't work properly with GTK3 // (reported and should be fixed in wxWidgets 3.0.4 and 3.1.1, see: // https://trac.wxwidgets.org/ticket/17916) return wxCursor((const char *)bits, 32, 32, hotx, hoty, (const char *)mask, wxBLACK, wxWHITE); #else # ifdef __WXMAC__ // The default Mac cursor is black with a white edge, so // invert our custom cursors to match. char b[128]; for (int i = 0; i < 128; ++i) b[i] = bits[i] ^ 0xff; # else const char * b = reinterpret_cast(bits); # endif wxBitmap cursor_bitmap(b, 32, 32); wxBitmap mask_bitmap(reinterpret_cast(mask), 32, 32); cursor_bitmap.SetMask(new wxMask(mask_bitmap, *wxWHITE)); wxImage cursor_image = cursor_bitmap.ConvertToImage(); cursor_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, hotx); cursor_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, hoty); return wxCursor(cursor_image); #endif } const #include "hand.xbm" const #include "handmask.xbm" const #include "brotate.xbm" const #include "brotatemask.xbm" const #include "vrotate.xbm" const #include "vrotatemask.xbm" const #include "rotate.xbm" const #include "rotatemask.xbm" const #include "rotatezoom.xbm" const #include "rotatezoommask.xbm" void GfxCore::UpdateCursor(GfxCore::cursor new_cursor) { // Check if we're already showing that cursor. if (current_cursor == new_cursor) return; current_cursor = new_cursor; switch (current_cursor) { case GfxCore::CURSOR_DEFAULT: GLACanvas::SetCursor(wxNullCursor); break; case GfxCore::CURSOR_POINTING_HAND: GLACanvas::SetCursor(wxCursor(wxCURSOR_HAND)); break; case GfxCore::CURSOR_DRAGGING_HAND: GLACanvas::SetCursor(make_cursor(hand_bits, handmask_bits, 12, 18)); break; case GfxCore::CURSOR_HORIZONTAL_RESIZE: GLACanvas::SetCursor(wxCursor(wxCURSOR_SIZEWE)); break; case GfxCore::CURSOR_ROTATE_HORIZONTALLY: GLACanvas::SetCursor(make_cursor(rotate_bits, rotatemask_bits, 15, 15)); break; case GfxCore::CURSOR_ROTATE_VERTICALLY: GLACanvas::SetCursor(make_cursor(vrotate_bits, vrotatemask_bits, 15, 15)); break; case GfxCore::CURSOR_ROTATE_EITHER_WAY: GLACanvas::SetCursor(make_cursor(brotate_bits, brotatemask_bits, 15, 15)); break; case GfxCore::CURSOR_ZOOM: GLACanvas::SetCursor(wxCursor(wxCURSOR_MAGNIFIER)); break; case GfxCore::CURSOR_ZOOM_ROTATE: GLACanvas::SetCursor(make_cursor(rotatezoom_bits, rotatezoommask_bits, 15, 15)); break; } } bool GfxCore::MeasuringLineActive() const { if (Animating()) return false; return HereIsReal() || m_there; } bool GfxCore::HandleRClick(wxPoint point) { if (PointWithinCompass(point)) { // Pop up menu. wxMenu menu; /* TRANSLATORS: View *looking* North */ menu.Append(menu_ORIENT_MOVE_NORTH, wmsg(/*View &North*/240)); /* TRANSLATORS: View *looking* East */ menu.Append(menu_ORIENT_MOVE_EAST, wmsg(/*View &East*/241)); /* TRANSLATORS: View *looking* South */ menu.Append(menu_ORIENT_MOVE_SOUTH, wmsg(/*View &South*/242)); /* TRANSLATORS: View *looking* West */ menu.Append(menu_ORIENT_MOVE_WEST, wmsg(/*View &West*/243)); menu.AppendSeparator(); /* TRANSLATORS: Menu item which turns off the "north arrow" in aven. */ menu.AppendCheckItem(menu_IND_COMPASS, wmsg(/*&Hide Compass*/387)); /* TRANSLATORS: tickable menu item in View menu. * * Degrees are the angular measurement where there are 360 in a full * circle. */ menu.AppendCheckItem(menu_CTL_DEGREES, wmsg(/*&Degrees*/343)); menu.Bind(wxEVT_COMMAND_MENU_SELECTED, [&](wxEvent& e) { m_Parent->GetEventHandler()->ProcessEvent(e); }); PopupMenu(&menu); return true; } if (PointWithinClino(point)) { // Pop up menu. wxMenu menu; menu.Append(menu_ORIENT_PLAN, wmsg(/*&Plan View*/248)); menu.Append(menu_ORIENT_ELEVATION, wmsg(/*Ele&vation*/249)); menu.AppendSeparator(); /* TRANSLATORS: Menu item which turns off the tilt indicator in aven. */ menu.AppendCheckItem(menu_IND_CLINO, wmsg(/*&Hide Clino*/384)); /* TRANSLATORS: tickable menu item in View menu. * * Degrees are the angular measurement where there are 360 in a full * circle. */ menu.AppendCheckItem(menu_CTL_DEGREES, wmsg(/*&Degrees*/343)); /* TRANSLATORS: tickable menu item in View menu. * * Show the tilt of the survey as a percentage gradient (100% = 45 * degrees = 50 grad). */ menu.AppendCheckItem(menu_CTL_PERCENT, wmsg(/*&Percent*/430)); menu.Bind(wxEVT_COMMAND_MENU_SELECTED, [&](wxEvent& e) { m_Parent->GetEventHandler()->ProcessEvent(e); }); PopupMenu(&menu); return true; } if (PointWithinScaleBar(point)) { // Pop up menu. wxMenu menu; /* TRANSLATORS: Menu item which turns off the scale bar in aven. */ menu.AppendCheckItem(menu_IND_SCALE_BAR, wmsg(/*&Hide scale bar*/385)); /* TRANSLATORS: tickable menu item in View menu. * * "Metric" here means metres, km, etc (rather than feet, miles, etc) */ menu.AppendCheckItem(menu_CTL_METRIC, wmsg(/*&Metric*/342)); menu.Bind(wxEVT_COMMAND_MENU_SELECTED, [&](wxEvent& e) { m_Parent->GetEventHandler()->ProcessEvent(e); }); PopupMenu(&menu); return true; } if (PointWithinColourKey(point)) { // Pop up menu. wxMenu menu; menu.AppendCheckItem(menu_COLOUR_BY_DEPTH, wmsg(/*Colour by &Depth*/292)); menu.AppendCheckItem(menu_COLOUR_BY_DATE, wmsg(/*Colour by D&ate*/293)); menu.AppendCheckItem(menu_COLOUR_BY_ERROR, wmsg(/*Colour by &Error*/289)); menu.AppendCheckItem(menu_COLOUR_BY_H_ERROR, wmsg(/*Colour by &Horizontal Error*/480)); menu.AppendCheckItem(menu_COLOUR_BY_V_ERROR, wmsg(/*Colour by &Vertical Error*/481)); menu.AppendCheckItem(menu_COLOUR_BY_GRADIENT, wmsg(/*Colour by &Gradient*/85)); menu.AppendCheckItem(menu_COLOUR_BY_LENGTH, wmsg(/*Colour by &Length*/82)); menu.AppendCheckItem(menu_COLOUR_BY_SURVEY, wmsg(/*Colour by &Survey*/448)); menu.AppendCheckItem(menu_COLOUR_BY_STYLE, wmsg(/*Colour by St&yle*/482)); menu.AppendSeparator(); /* TRANSLATORS: Menu item which turns off the colour key. * The "Colour Key" is the thing in aven showing which colour * corresponds to which depth, date, survey closure error, etc. */ menu.AppendCheckItem(menu_IND_COLOUR_KEY, wmsg(/*&Hide colour key*/386)); if (m_ColourBy == COLOUR_BY_DEPTH || m_ColourBy == COLOUR_BY_LENGTH) menu.AppendCheckItem(menu_CTL_METRIC, wmsg(/*&Metric*/342)); else if (m_ColourBy == COLOUR_BY_GRADIENT) menu.AppendCheckItem(menu_CTL_DEGREES, wmsg(/*&Degrees*/343)); menu.Bind(wxEVT_COMMAND_MENU_SELECTED, [&](wxEvent& e) { m_Parent->GetEventHandler()->ProcessEvent(e); }); PopupMenu(&menu); return true; } return false; } void GfxCore::SetZoomBox(wxPoint p1, wxPoint p2, bool centred, bool aspect) { if (centred) { p1.x = p2.x + (p1.x - p2.x) * 2; p1.y = p2.y + (p1.y - p2.y) * 2; } if (aspect) { #if 0 // FIXME: This needs more work. int sx = GetXSize(); int sy = GetYSize(); int dx = p1.x - p2.x; int dy = p1.y - p2.y; int dy_new = dx * sy / sx; if (abs(dy_new) >= abs(dy)) { p1.y += (dy_new - dy) / 2; p2.y -= (dy_new - dy) / 2; } else { int dx_new = dy * sx / sy; p1.x += (dx_new - dx) / 2; p2.x -= (dx_new - dx) / 2; } #endif } zoombox.set(p1, p2); ForceRefresh(); } void GfxCore::ZoomBoxGo() { if (!zoombox.active()) return; int width = GetXSize(); int height = GetYSize(); TranslateCave(-0.5 * (zoombox.x1 + zoombox.x2 - width), -0.5 * (zoombox.y1 + zoombox.y2 - height)); int box_w = abs(zoombox.x1 - zoombox.x2); int box_h = abs(zoombox.y1 - zoombox.y2); double factor = min(double(width) / box_w, double(height) / box_h); zoombox.unset(); SetScale(GetScale() * factor); } survex-1.4.4/src/json.cc0000644000175000017500000000420314205565672012057 00000000000000/* json.cc * Export from Aven as JSON. */ /* Copyright (C) 2015,2016,2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "json.h" #include "export.h" #include using namespace std; const int * JSON::passes() const { static const int default_passes[] = { LEGS, 0 }; return default_passes; } void JSON::header(const char * title, const char *, time_t datestamp_numeric, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z) { (void)title; (void)datestamp_numeric; #if 0 if (title) { fputs("title: \"", fh); json_escape(fh, title); fputs("\",\n", fh); } if (datestamp_numeric != time_t(-1)) { fprintf("date: %ld,\n", (long)datestamp_numeric); } #endif fprintf(fh, "{\"bounds\":[%.2f,%.2f,%.2f,%.2f,%.2f,%.2f],\n\"traverses\":[\n", min_x, min_z, min_y, max_x, max_z, max_y); } void JSON::line(const img_point *p1, const img_point *p, unsigned /*flags*/, bool fPendingMove) { if (fPendingMove) { if (in_segment) { fputs("],\n[", fh); } else { fputs("[", fh); in_segment = true; } fprintf(fh, "[%.2f,%.2f,%.2f]", p1->x, p1->z, p1->y); } fprintf(fh, ",[%.2f,%.2f,%.2f]", p->x, p->z, p->y); } void JSON::label(const img_point *p, const char *s, bool /*fSurface*/, int type) { (void)p; (void)s; (void)type; } void JSON::footer() { if (in_segment) fputs("]\n", fh); fputs("]}\n", fh); } survex-1.4.4/src/listpos.h0000644000175000017500000000173014141575516012444 00000000000000/* listpos.h * SURVEX Cave surveying software: stuff to do with stn position output * Copyright (C) 1994,2001,2012 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void print_node_stats(void); /* Check but don't print, for getting the checks we do during the scan. */ void check_node_stats(void); survex-1.4.4/src/osdepend.c0000644000175000017500000000427614141575516012553 00000000000000/* osdepend.c * OS dependent functions * Copyright (C) 1993-2003,2004,2005,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "whichos.h" #include "useful.h" #include "osdepend.h" #if OS_WIN32 /* NB "c:fred" isn't relative. Eg "c:\data\c:fred" won't work */ bool fAbsoluteFnm(const char *fnm) { /* : or \ or / * or \\\... or ///... */ unsigned char ch = (unsigned char)*fnm; return ch == '/' || ch == '\\' || (ch && fnm[1] == ':' && (ch | 32) >= 'a' && (ch | 32) <= 'z'); } #elif OS_UNIX bool fAbsoluteFnm(const char *fnm) { return (fnm[0] == '/'); } #endif /* fDirectory( fnm ) returns fTrue if fnm is a directory; fFalse if fnm is a * file, doesn't exist, or another error occurs (eg disc not in drive, ...) * NB If fnm has a trailing directory separator (e.g. “/†or “/home/olly/†* then it's assumed to be a directory even if it doesn't exist (as is an * empty string). */ #if OS_UNIX || OS_WIN32 # include # include # include bool fDirectory(const char *fnm) { struct stat buf; if (!fnm[0] || fnm[strlen(fnm) - 1] == FNM_SEP_LEV #ifdef FNM_SEP_LEV2 || fnm[strlen(fnm) - 1] == FNM_SEP_LEV2 #endif ) return 1; if (stat(fnm, &buf) != 0) return 0; #ifdef S_ISDIR /* POSIX way */ return S_ISDIR(buf.st_mode); #else /* BSD way */ return ((buf.st_mode & S_IFMT) == S_IFDIR); #endif } #else # error Unknown OS #endif survex-1.4.4/src/netbits.c0000644000175000017500000005425514142042211012402 00000000000000/* netbits.c * Miscellaneous primitive network routines for Survex * Copyright (C) 1992-2003,2006,2011,2013,2014,2015,2019 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #if 0 # define DEBUG_INVALID 1 #endif #include "debug.h" #include "cavern.h" #include "filename.h" #include "message.h" #include "netbits.h" #include "datain.h" /* for compile_error */ #include "validate.h" /* for compile_error */ #include #define THRESHOLD (REAL_EPSILON * 1000) /* 100 was too small */ node *stn_iter = NULL; /* for FOR_EACH_STN */ static struct { prefix * to_name; prefix * fr_name; linkfor * leg; int n; } last_leg = { NULL, NULL, NULL, 0 }; void clear_last_leg(void) { last_leg.to_name = NULL; } static char freeleg(node **stnptr); #ifdef NO_COVARIANCES static void check_var(/*const*/ var *v) { int bad = 0; int i; for (i = 0; i < 3; i++) { if (isnan(v[i]) printf("*** NaN!!!\n"), bad = 1; } if (bad) print_var(v); return; } #else #define V(A,B) ((*v)[A][B]) static void check_var(/*const*/ var *v) { int bad = 0; int ok = 0; int i, j; #if DEBUG_INVALID real det = 0.0; #endif for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (isnan(V(i, j))) printf("*** NaN!!!\n"), bad = 1, ok = 1; if (V(i, j) != 0.0) ok = 1; } } if (!ok) return; /* ignore all-zero matrices */ #if DEBUG_INVALID for (i = 0; i < 3; i++) { det += V(i, 0) * (V((i + 1) % 3, 1) * V((i + 2) % 3, 2) - V((i + 1) % 3, 2) * V((i + 2) % 3, 1)); } if (fabs(det) < THRESHOLD) printf("*** Singular!!!\n"), bad = 1; #endif #if 0 /* don't check this - it isn't always the case! */ if (fabs(V(0,1) - V(1,0)) > THRESHOLD || fabs(V(0,2) - V(2,0)) > THRESHOLD || fabs(V(1,2) - V(2,1)) > THRESHOLD) printf("*** Not symmetric!!!\n"), bad = 1; if (V(0,0) <= 0.0 || V(1,1) <= 0.0 || V(2,2) <= 0.0) printf("*** Not positive definite (diag <= 0)!!!\n"), bad = 1; if (sqrd(V(0,1)) >= V(0,0)*V(1,1) || sqrd(V(0,2)) >= V(0,0)*V(2,2) || sqrd(V(1,0)) >= V(0,0)*V(1,1) || sqrd(V(2,0)) >= V(0,0)*V(2,2) || sqrd(V(1,2)) >= V(2,2)*V(1,1) || sqrd(V(2,1)) >= V(2,2)*V(1,1)) printf("*** Not positive definite (off diag^2 >= diag product)!!!\n"), bad = 1; #endif if (bad) print_var(*v); } #define SN(V,A,B) ((*(V))[(A)==(B)?(A):2+(A)+(B)]) #define S(A,B) SN(v,A,B) static void check_svar(/*const*/ svar *v) { int bad = 0; int ok = 0; int i; #if DEBUG_INVALID real det = 0.0; #endif for (i = 0; i < 6; i++) { if (isnan((*v)[i])) printf("*** NaN!!!\n"), bad = 1, ok = 1; if ((*v)[i] != 0.0) ok = 1; } if (!ok) return; /* ignore all-zero matrices */ #if DEBUG_INVALID for (i = 0; i < 3; i++) { det += S(i, 0) * (S((i + 1) % 3, 1) * S((i + 2) % 3, 2) - S((i + 1) % 3, 2) * S((i + 2) % 3, 1)); } if (fabs(det) < THRESHOLD) printf("*** Singular!!!\n"), bad = 1; #endif #if 0 /* don't check this - it isn't always the case! */ if ((*v)[0] <= 0.0 || (*v)[1] <= 0.0 || (*v)[2] <= 0.0) printf("*** Not positive definite (diag <= 0)!!!\n"), bad = 1; if (sqrd((*v)[3]) >= (*v)[0]*(*v)[1] || sqrd((*v)[4]) >= (*v)[0]*(*v)[2] || sqrd((*v)[5]) >= (*v)[1]*(*v)[2]) printf("*** Not positive definite (off diag^2 >= diag product)!!!\n"), bad = 1; #endif if (bad) print_svar(*v); } #endif static void check_d(/*const*/ delta *d) { int bad = 0; int i; for (i = 0; i < 3; i++) { if (isnan((*d)[i])) printf("*** NaN!!!\n"), bad = 1; } if (bad) printf("(%4.2f,%4.2f,%4.2f)\n", (*d)[0], (*d)[1], (*d)[2]); } /* insert at head of double-linked list */ void add_stn_to_list(node **list, node *stn) { SVX_ASSERT(list); SVX_ASSERT(stn); SVX_ASSERT(stn_iter != stn); /* if it does, we're still on a list... */ #if 0 printf("add_stn_to_list(%p, [%p] ", list, stn); if (stn->name) print_prefix(stn->name); printf(")\n"); #endif stn->next = *list; stn->prev = NULL; if (*list) (*list)->prev = stn; *list = stn; } /* remove from double-linked list */ void remove_stn_from_list(node **list, node *stn) { SVX_ASSERT(list); SVX_ASSERT(stn); #if 0 printf("remove_stn_from_list(%p, [%p] ", list, stn); if (stn->name) print_prefix(stn->name); printf(")\n"); #endif #if DEBUG_INVALID { /* check station is actually in this list */ node *stn_to_remove_is_in_list = *list; validate(); while (stn_to_remove_is_in_list != stn) { SVX_ASSERT(stn_to_remove_is_in_list); stn_to_remove_is_in_list = stn_to_remove_is_in_list->next; } } #endif /* adjust the iterator if it points to the element we're deleting */ if (stn_iter == stn) stn_iter = stn_iter->next; /* need a special case if we're removing the list head */ if (stn->prev == NULL) { *list = stn->next; if (*list) (*list)->prev = NULL; } else { stn->prev->next = stn->next; if (stn->next) stn->next->prev = stn->prev; } } /* Create (uses osmalloc) a forward leg containing the data in leg, or * the reversed data in the reverse of leg, if leg doesn't hold data */ linkfor * copy_link(linkfor *leg) { linkfor *legOut; int d; legOut = osnew(linkfor); if (data_here(leg)) { for (d = 2; d >= 0; d--) legOut->d[d] = leg->d[d]; } else { leg = reverse_leg(leg); SVX_ASSERT(data_here(leg)); for (d = 2; d >= 0; d--) legOut->d[d] = -leg->d[d]; } #if 1 # ifndef NO_COVARIANCES check_svar(&(leg->v)); { int i; for (i = 0; i < 6; i++) legOut->v[i] = leg->v[i]; } # else for (d = 2; d >= 0; d--) legOut->v[d] = leg->v[d]; # endif #else memcpy(legOut->v, leg->v, sizeof(svar)); #endif legOut->meta = pcs->meta; if (pcs->meta) ++pcs->meta->ref_count; return legOut; } /* Adds to the forward leg “legâ€, the data in leg2, or the reversed data * in the reverse of leg2, if leg2 doesn't hold data */ linkfor * addto_link(linkfor *leg, const linkfor *leg2) { if (data_here(leg2)) { adddd(&leg->d, &leg->d, &((linkfor *)leg2)->d); } else { leg2 = reverse_leg(leg2); SVX_ASSERT(data_here(leg2)); subdd(&leg->d, &leg->d, &((linkfor *)leg2)->d); } addss(&leg->v, &leg->v, &((linkfor *)leg2)->v); return leg; } static linkfor * addleg_(node *fr, node *to, real dx, real dy, real dz, real vx, real vy, real vz, #ifndef NO_COVARIANCES real cyz, real czx, real cxy, #endif int leg_flags) { int i, j; linkfor *leg, *leg2; /* we have been asked to add a leg with the same node at both ends * - this should be trapped by the caller */ SVX_ASSERT(fr->name != to->name); leg = osnew(linkfor); leg2 = (linkfor*)osnew(linkrev); i = freeleg(&fr); j = freeleg(&to); leg->l.to = to; leg2->l.to = fr; leg->d[0] = dx; leg->d[1] = dy; leg->d[2] = dz; #ifndef NO_COVARIANCES leg->v[0] = vx; leg->v[1] = vy; leg->v[2] = vz; leg->v[3] = cxy; leg->v[4] = czx; leg->v[5] = cyz; check_svar(&(leg->v)); #else leg->v[0] = vx; leg->v[1] = vy; leg->v[2] = vz; #endif leg2->l.reverse = i; leg->l.reverse = j | FLAG_DATAHERE | leg_flags; leg->l.flags = pcs->flags | (pcs->style << FLAGS_STYLE_BIT0); leg->meta = pcs->meta; if (pcs->meta) ++pcs->meta->ref_count; fr->leg[i] = leg; to->leg[j] = leg2; ++fr->name->shape; ++to->name->shape; return leg; } /* Add a leg between names *fr_name and *to_name * If either is a three node, then it is split into two * and the data structure adjusted as necessary. */ void addlegbyname(prefix *fr_name, prefix *to_name, bool fToFirst, real dx, real dy, real dz, real vx, real vy, real vz #ifndef NO_COVARIANCES , real cyz, real czx, real cxy #endif ) { node *to, *fr; if (to_name == fr_name) { /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". * * %s is replaced by the name of the station. */ compile_diagnostic(DIAG_ERR, /*Survey leg with same station (“%sâ€) at both ends - typing error?*/50, sprint_prefix(to_name)); return; } if (fToFirst) { to = StnFromPfx(to_name); fr = StnFromPfx(fr_name); } else { fr = StnFromPfx(fr_name); to = StnFromPfx(to_name); } if (last_leg.to_name) { if (last_leg.to_name == to_name && last_leg.fr_name == fr_name) { /* FIXME: Not the right way to average... */ linkfor * leg = last_leg.leg; int n = last_leg.n++; leg->d[0] = (leg->d[0] * n + dx) / (n + 1); leg->d[1] = (leg->d[1] * n + dy) / (n + 1); leg->d[2] = (leg->d[2] * n + dz) / (n + 1); #ifndef NO_COVARIANCES leg->v[0] = (leg->v[0] * n + vx) / (n + 1); leg->v[1] = (leg->v[1] * n + vy) / (n + 1); leg->v[2] = (leg->v[2] * n + vz) / (n + 1); leg->v[3] = (leg->v[3] * n + cxy) / (n + 1); leg->v[4] = (leg->v[4] * n + czx) / (n + 1); leg->v[5] = (leg->v[5] * n + cyz) / (n + 1); check_svar(&(leg->v)); #else leg->v[0] = (leg->v[0] * n + vx) / (n + 1); leg->v[1] = (leg->v[1] * n + vy) / (n + 1); leg->v[2] = (leg->v[2] * n + vz) / (n + 1); #endif return; } } cLegs++; last_leg.to_name = to_name; last_leg.fr_name = fr_name; last_leg.n = 1; last_leg.leg = addleg_(fr, to, dx, dy, dz, vx, vy, vz, #ifndef NO_COVARIANCES cyz, czx, cxy, #endif 0); } /* helper function for replace_pfx */ static void replace_pfx_(node *stn, node *from, pos *pos_replace, pos *pos_with) { int d; stn->name->pos = pos_with; for (d = 0; d < 3; d++) { linkfor *leg = stn->leg[d]; node *to; if (!leg) break; to = leg->l.to; if (to == from) continue; if (fZeros(data_here(leg) ? &leg->v : &reverse_leg(leg)->v)) replace_pfx_(to, stn, pos_replace, pos_with); } } /* We used to iterate over the whole station list (inefficient) - now we * just look at any neighbouring nodes to see if they are equated */ static void replace_pfx(const prefix *pfx_replace, const prefix *pfx_with) { pos *pos_replace; SVX_ASSERT(pfx_replace); SVX_ASSERT(pfx_with); pos_replace = pfx_replace->pos; SVX_ASSERT(pos_replace != pfx_with->pos); replace_pfx_(pfx_replace->stn, NULL, pos_replace, pfx_with->pos); #if DEBUG_INVALID { node *stn; FOR_EACH_STN(stn, stnlist) { SVX_ASSERT(stn->name->pos != pos_replace); } } #endif /* free the (now-unused) old pos */ osfree(pos_replace); } /* Add an equating leg between existing stations *fr and *to (whose names are * name1 and name2). */ void process_equate(prefix *name1, prefix *name2) { node *stn1, *stn2; clear_last_leg(); if (name1 == name2) { /* catch something like *equate "fred fred" */ /* TRANSLATORS: Here "station" is a survey station, not a train station. */ compile_diagnostic(DIAG_WARN, /*Station “%s†equated to itself*/13, sprint_prefix(name1)); return; } stn1 = StnFromPfx(name1); stn2 = StnFromPfx(name2); /* equate nodes if not already equated */ if (name1->pos != name2->pos) { if (pfx_fixed(name1)) { if (pfx_fixed(name2)) { /* both are fixed, but let them off iff their coordinates match */ char *s = osstrdup(sprint_prefix(name1)); int d; for (d = 2; d >= 0; d--) { if (name1->pos->p[d] != name2->pos->p[d]) { compile_diagnostic(DIAG_ERR, /*Tried to equate two non-equal fixed stations: “%s†and “%sâ€*/52, s, sprint_prefix(name2)); osfree(s); return; } } /* TRANSLATORS: "equal" as in: * * *fix a 1 2 3 * *fix b 1 2 3 * *equate a b */ compile_diagnostic(DIAG_WARN, /*Equating two equal fixed points: “%s†and “%sâ€*/53, s, sprint_prefix(name2)); osfree(s); } /* name1 is fixed, so replace all refs to name2's pos with name1's */ replace_pfx(name2, name1); } else { /* name1 isn't fixed, so replace all refs to its pos with name2's */ replace_pfx(name1, name2); } /* count equates as legs for now... */ cLegs++; addleg_(stn1, stn2, (real)0.0, (real)0.0, (real)0.0, (real)0.0, (real)0.0, (real)0.0, #ifndef NO_COVARIANCES (real)0.0, (real)0.0, (real)0.0, #endif FLAG_FAKE); } } /* Add a 'fake' leg (not counted) between existing stations *fr and *to * (which *must* be different) * If either node is a three node, then it is split into two * and the data structure adjusted as necessary */ void addfakeleg(node *fr, node *to, real dx, real dy, real dz, real vx, real vy, real vz #ifndef NO_COVARIANCES , real cyz, real czx, real cxy #endif ) { clear_last_leg(); addleg_(fr, to, dx, dy, dz, vx, vy, vz, #ifndef NO_COVARIANCES cyz, czx, cxy, #endif FLAG_FAKE); } static char freeleg(node **stnptr) { node *stn, *oldstn; linkfor *leg, *leg2; #ifndef NO_COVARIANCES int i; #endif stn = *stnptr; if (stn->leg[0] == NULL) return 0; /* leg[0] unused */ if (stn->leg[1] == NULL) return 1; /* leg[1] unused */ if (stn->leg[2] == NULL) return 2; /* leg[2] unused */ /* All legs used, so split node in two */ oldstn = stn; stn = osnew(node); leg = osnew(linkfor); leg2 = (linkfor*)osnew(linkrev); *stnptr = stn; add_stn_to_list(&stnlist, stn); stn->name = oldstn->name; leg->l.to = stn; leg->d[0] = leg->d[1] = leg->d[2] = (real)0.0; #ifndef NO_COVARIANCES for (i = 0; i < 6; i++) leg->v[i] = (real)0.0; #else leg->v[0] = leg->v[1] = leg->v[2] = (real)0.0; #endif leg->l.reverse = 1 | FLAG_DATAHERE | FLAG_FAKE; leg->l.flags = pcs->flags | (pcs->style << FLAGS_STYLE_BIT0); leg2->l.to = oldstn; leg2->l.reverse = 0; /* NB this preserves pos->stn->leg[0] to point to the "real" fixed point * for stations fixed with error estimates */ stn->leg[0] = oldstn->leg[0]; /* correct reverse leg */ reverse_leg(stn->leg[0])->l.to = stn; stn->leg[1] = leg2; oldstn->leg[0] = leg; stn->leg[2] = NULL; /* needed as stn->leg[dirn]==NULL indicates unused */ return(2); /* leg[2] unused */ } node * StnFromPfx(prefix *name) { node *stn; if (name->stn != NULL) return (name->stn); stn = osnew(node); stn->name = name; if (name->pos == NULL) { name->pos = osnew(pos); unfix(stn); } stn->leg[0] = stn->leg[1] = stn->leg[2] = NULL; add_stn_to_list(&stnlist, stn); name->stn = stn; cStns++; return stn; } extern void fprint_prefix(FILE *fh, const prefix *ptr) { SVX_ASSERT(ptr); if (TSTBIT(ptr->sflags, SFLAGS_ANON)) { /* We release the stations, so ptr->stn is NULL late on, so we can't * use that to print "anonymous station surveyed from somesurvey.12" * here. FIXME */ fputs("anonymous station", fh); /* FIXME: if ident is set, show it? */ return; } if (ptr->up != NULL) { fprint_prefix(fh, ptr->up); if (ptr->up->up != NULL) fputc('.', fh); SVX_ASSERT(ptr->ident); fputs(ptr->ident, fh); } } static char *buffer = NULL; static OSSIZE_T buffer_len = 256; static OSSIZE_T sprint_prefix_(const prefix *ptr) { OSSIZE_T len = 1; if (ptr->up != NULL) { SVX_ASSERT(ptr->ident); len = sprint_prefix_(ptr->up) + strlen(ptr->ident); if (ptr->up->up != NULL) len++; if (len > buffer_len) { buffer = osrealloc(buffer, len); buffer_len = len; } if (ptr->up->up != NULL) strcat(buffer, "."); strcat(buffer, ptr->ident); } return len; } extern char * sprint_prefix(const prefix *ptr) { SVX_ASSERT(ptr); if (!buffer) buffer = osmalloc(buffer_len); if (TSTBIT(ptr->sflags, SFLAGS_ANON)) { /* We release the stations, so ptr->stn is NULL late on, so we can't * use that to print "anonymous station surveyed from somesurvey.12" * here. FIXME */ sprintf(buffer, "anonymous station"); /* FIXME: if ident is set, show it? */ return buffer; } *buffer = '\0'; sprint_prefix_(ptr); return buffer; } /* r = ab ; r,a,b are variance matrices */ void mulss(var *r, /*const*/ svar *a, /*const*/ svar *b) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*a)[0] * (*b)[0]; (*r)[1] = (*a)[1] * (*b)[1]; (*r)[2] = (*a)[2] * (*b)[2]; #else int i, j, k; real tot; #if 0 SVX_ASSERT((/*const*/ var *)r != a); SVX_ASSERT((/*const*/ var *)r != b); #endif check_svar(a); check_svar(b); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { tot = 0; for (k = 0; k < 3; k++) { tot += SN(a,i,k) * SN(b,k,j); } (*r)[i][j] = tot; } } check_var(r); #endif } #ifndef NO_COVARIANCES /* r = ab ; r,a,b are variance matrices */ void smulvs(svar *r, /*const*/ var *a, /*const*/ svar *b) { int i, j, k; real tot; #if 0 SVX_ASSERT((/*const*/ var *)r != a); #endif SVX_ASSERT((/*const*/ svar *)r != b); check_var(a); check_svar(b); (*r)[3]=(*r)[4]=(*r)[5]=-999; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { tot = 0; for (k = 0; k < 3; k++) { tot += (*a)[i][k] * SN(b,k,j); } if (i <= j) SN(r,i,j) = tot; else if (fabs(SN(r,j,i) - tot) > THRESHOLD) { printf("not sym - %d,%d = %f, %d,%d was %f\n", i,j,tot,j,i,SN(r,j,i)); BUG("smulvs didn't produce a sym mx\n"); } } } check_svar(r); } #endif /* r = vb ; r,b delta vectors; a variance matrix */ void mulsd(delta *r, /*const*/ svar *v, /*const*/ delta *b) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*v)[0] * (*b)[0]; (*r)[1] = (*v)[1] * (*b)[1]; (*r)[2] = (*v)[2] * (*b)[2]; #else int i, j; real tot; SVX_ASSERT((/*const*/ delta*)r != b); check_svar(v); check_d(b); for (i = 0; i < 3; i++) { tot = 0; for (j = 0; j < 3; j++) tot += S(i,j) * (*b)[j]; (*r)[i] = tot; } check_d(r); #endif } /* r = ca ; r,a variance matrices; c real scaling factor */ void mulsc(svar *r, /*const*/ svar *a, real c) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*a)[0] * c; (*r)[1] = (*a)[1] * c; (*r)[2] = (*a)[2] * c; #else int i; check_svar(a); for (i = 0; i < 6; i++) (*r)[i] = (*a)[i] * c; check_svar(r); #endif } /* r = a + b ; r,a,b delta vectors */ void adddd(delta *r, /*const*/ delta *a, /*const*/ delta *b) { check_d(a); check_d(b); (*r)[0] = (*a)[0] + (*b)[0]; (*r)[1] = (*a)[1] + (*b)[1]; (*r)[2] = (*a)[2] + (*b)[2]; check_d(r); } /* r = a - b ; r,a,b delta vectors */ void subdd(delta *r, /*const*/ delta *a, /*const*/ delta *b) { check_d(a); check_d(b); (*r)[0] = (*a)[0] - (*b)[0]; (*r)[1] = (*a)[1] - (*b)[1]; (*r)[2] = (*a)[2] - (*b)[2]; check_d(r); } /* r = a + b ; r,a,b variance matrices */ void addss(svar *r, /*const*/ svar *a, /*const*/ svar *b) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*a)[0] + (*b)[0]; (*r)[1] = (*a)[1] + (*b)[1]; (*r)[2] = (*a)[2] + (*b)[2]; #else int i; check_svar(a); check_svar(b); for (i = 0; i < 6; i++) (*r)[i] = (*a)[i] + (*b)[i]; check_svar(r); #endif } /* r = a - b ; r,a,b variance matrices */ void subss(svar *r, /*const*/ svar *a, /*const*/ svar *b) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*a)[0] - (*b)[0]; (*r)[1] = (*a)[1] - (*b)[1]; (*r)[2] = (*a)[2] - (*b)[2]; #else int i; check_svar(a); check_svar(b); for (i = 0; i < 6; i++) (*r)[i] = (*a)[i] - (*b)[i]; check_svar(r); #endif } /* inv = v^-1 ; inv,v variance matrices */ extern int invert_svar(svar *inv, /*const*/ svar *v) { #ifdef NO_COVARIANCES int i; for (i = 0; i < 3; i++) { if ((*v)[i] == 0.0) return 0; /* matrix is singular */ (*inv)[i] = 1.0 / (*v)[i]; } #else real det, a, b, c, d, e, f, bcff, efcd, dfbe; #if 0 SVX_ASSERT((/*const*/ var *)inv != v); #endif check_svar(v); /* a d e * d b f * e f c */ a = (*v)[0], b = (*v)[1], c = (*v)[2]; d = (*v)[3], e = (*v)[4], f = (*v)[5]; bcff = b * c - f * f; efcd = e * f - c * d; dfbe = d * f - b * e; det = a * bcff + d * efcd + e * dfbe; if (det == 0.0) { /* printf("det=%.20f\n", det); */ return 0; /* matrix is singular */ } det = 1 / det; (*inv)[0] = det * bcff; (*inv)[1] = det * (c * a - e * e); (*inv)[2] = det * (a * b - d * d); (*inv)[3] = det * efcd; (*inv)[4] = det * dfbe; (*inv)[5] = det * (e * d - a * f); #if 0 /* This test fires very occasionally, and there's not much point in * it anyhow - the matrix inversion algorithm is simple enough that * we can be confident it's correctly implemented, so we might as * well save the cycles and not perform this check. */ { /* check that original * inverse = identity matrix */ int i; var p; real D = 0; mulss(&p, v, inv); for (i = 0; i < 3; i++) { int j; for (j = 0; j < 3; j++) D += fabs(p[i][j] - (real)(i==j)); } if (D > THRESHOLD) { printf("original * inverse=\n"); print_svar(*v); printf("*\n"); print_svar(*inv); printf("=\n"); print_var(p); BUG("matrix didn't invert"); } check_svar(inv); } #endif #endif return 1; } /* r = (b^-1)a ; r,a delta vectors; b variance matrix */ #ifndef NO_COVARIANCES void divds(delta *r, /*const*/ delta *a, /*const*/ svar *b) { #ifdef NO_COVARIANCES /* variance-only version */ (*r)[0] = (*a)[0] / (*b)[0]; (*r)[1] = (*a)[1] / (*b)[1]; (*r)[2] = (*a)[2] / (*b)[2]; #else svar b_inv; if (!invert_svar(&b_inv, b)) { print_svar(*b); BUG("covariance matrix is singular"); } mulsd(r, &b_inv, a); #endif } #endif bool fZeros(/*const*/ svar *v) { #ifdef NO_COVARIANCES /* variance-only version */ return ((*v)[0] == 0.0 && (*v)[1] == 0.0 && (*v)[2] == 0.0); #else int i; check_svar(v); for (i = 0; i < 6; i++) if ((*v)[i] != 0.0) return fFalse; return fTrue; #endif } survex-1.4.4/src/wx.h0000644000175000017500000000243614141575516011411 00000000000000// // wx.h // // Include wxWidgets headers. // // Copyright (C) 2000,2001,2002 Mark R. Shinwell // Copyright (C) 2001,2003,2005,2006,2007,2008,2015 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #include #ifdef __BORLANDC__ # pragma hdrstop #endif #ifndef WX_PRECOMP # include #endif #if !wxCHECK_VERSION(3,0,0) # error We support building with wxWidgets 3.0.0 or newer #endif #include #include #include #include #if !wxUSE_GLCANVAS # error wxWidgets must be built with wxUSE_GLCANVAS set to 1 #endif #include survex-1.4.4/src/vrotate.xbm0000644000175000017500000000157614141575516013002 00000000000000#define vrotate_width 32 #define vrotate_height 32 static unsigned char vrotate_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/cavernlog.h0000644000175000017500000000501414206240627012720 00000000000000/* cavernlog.h * Run cavern inside an Aven window * * Copyright (C) 2005-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SURVEX_CAVERNLOG_H #define SURVEX_CAVERNLOG_H #include "wx.h" #include #include #include // We probably want to use a thread if we can - that way we can use a blocking // read from cavern rather than busy-waiting via idle events. #ifdef wxUSE_THREADS # define CAVERNLOG_USE_THREADS #endif #ifdef CAVERNLOG_USE_THREADS class CavernThread; #endif class MainFrm; class CavernLogWindow : public wxHtmlWindow { #ifdef CAVERNLOG_USE_THREADS friend class CavernThread; #endif wxString filename; MainFrm * mainfrm; wxProcess * cavern_out = nullptr; wxString cur; wxString source_line; const wxChar * highlight = nullptr; int info_count = 0; int link_count = 0; unsigned char buf[1024]; unsigned char * end; bool init_done = false; wxString survey; std::string log_txt; #ifdef CAVERNLOG_USE_THREADS void stop_thread(); CavernThread * thread = nullptr; wxCriticalSection thread_lock; #endif public: CavernLogWindow(MainFrm * mainfrm_, const wxString & survey_, wxWindow * parent); ~CavernLogWindow(); /** Start to process survey data in file. */ void process(const wxString &file); virtual void OnLinkClicked(const wxHtmlLinkInfo &link); void OnReprocess(wxCommandEvent &); void OnSave(wxCommandEvent &); void OnOK(wxCommandEvent &); void OnCavernOutput(wxCommandEvent & e); #ifdef CAVERNLOG_USE_THREADS void OnClose(wxCloseEvent &); #else void OnIdle(wxIdleEvent &); #endif void OnEndProcess(wxProcessEvent & e); DECLARE_EVENT_TABLE() }; wxString escape_for_shell(wxString s, bool protect_dash = false); wxString get_command_path(const wxChar * command_name); #endif survex-1.4.4/src/commands.c0000644000175000017500000022331014206245446012541 00000000000000/* commands.c * Code for directives * Copyright (C) 1991-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* for offsetof */ #include #include #if PROJ_VERSION_MAJOR < 8 || \ (PROJ_VERSION_MAJOR == 8 && PROJ_VERSION_MINOR < 2) /* Needed for proj_factors workaround */ # include #endif #include "cavern.h" #include "commands.h" #include "datain.h" #include "date.h" #include "debug.h" #include "filename.h" #include "message.h" #include "netbits.h" #include "netskel.h" #include "out.h" #include "readval.h" #include "str.h" #define WGS84_DATUM_STRING "EPSG:4326" static void default_grade(settings *s) { /* Values correspond to those in bcra5.svx */ s->Var[Q_POS] = (real)sqrd(0.05); s->Var[Q_LENGTH] = (real)sqrd(0.05); s->Var[Q_BACKLENGTH] = (real)sqrd(0.05); s->Var[Q_COUNT] = (real)sqrd(0.05); s->Var[Q_DX] = s->Var[Q_DY] = s->Var[Q_DZ] = (real)sqrd(0.05); s->Var[Q_BEARING] = (real)sqrd(rad(0.5)); s->Var[Q_GRADIENT] = (real)sqrd(rad(0.5)); s->Var[Q_BACKBEARING] = (real)sqrd(rad(0.5)); s->Var[Q_BACKGRADIENT] = (real)sqrd(rad(0.5)); /* SD of plumbed legs (0.25 degrees?) */ s->Var[Q_PLUMB] = (real)sqrd(rad(0.25)); /* SD of level legs (0.25 degrees?) */ s->Var[Q_LEVEL] = (real)sqrd(rad(0.25)); s->Var[Q_DEPTH] = (real)sqrd(0.05); } static void default_truncate(settings *s) { s->Truncate = INT_MAX; } static void default_case(settings *s) { s->Case = LOWER; } static reading default_order[] = { Fr, To, Tape, Comp, Clino, End }; static void default_style(settings *s) { s->style = STYLE_NORMAL; s->ordering = default_order; s->dash_for_anon_wall_station = fFalse; } static void default_prefix(settings *s) { s->Prefix = root; } static void default_translate(settings *s) { int i; short *t; if (s->next && s->next->Translate == s->Translate) { t = ((short*)osmalloc(ossizeof(short) * 257)) + 1; memcpy(t - 1, s->Translate - 1, sizeof(short) * 257); s->Translate = t; } /* SVX_ASSERT(EOF==-1);*/ /* important, since we rely on this */ t = s->Translate; memset(t - 1, 0, sizeof(short) * 257); for (i = '0'; i <= '9'; i++) t[i] = SPECIAL_NAMES; for (i = 'A'; i <= 'Z'; i++) t[i] = SPECIAL_NAMES; for (i = 'a'; i <= 'z'; i++) t[i] = SPECIAL_NAMES; t['\t'] |= SPECIAL_BLANK; t[' '] |= SPECIAL_BLANK; t[','] |= SPECIAL_BLANK; t[';'] |= SPECIAL_COMMENT; t['\032'] |= SPECIAL_EOL; /* Ctrl-Z, so olde DOS text files are handled ok */ t[EOF] |= SPECIAL_EOL; t['\n'] |= SPECIAL_EOL; t['\r'] |= SPECIAL_EOL; t['*'] |= SPECIAL_KEYWORD; t['-'] |= SPECIAL_OMIT; t['\\'] |= SPECIAL_ROOT; t['.'] |= SPECIAL_SEPARATOR; t['_'] |= SPECIAL_NAMES; t['-'] |= SPECIAL_NAMES; /* Added in 0.97 prerelease 4 */ t['.'] |= SPECIAL_DECIMAL; t['-'] |= SPECIAL_MINUS; t['+'] |= SPECIAL_PLUS; #if 0 /* FIXME */ t['{'] |= SPECIAL_OPEN; t['}'] |= SPECIAL_CLOSE; #endif } void default_units(settings *s) { int quantity; for (quantity = 0; quantity < Q_MAC; quantity++) { if (TSTBIT(ANG_QMASK, quantity)) s->units[quantity] = (real)(M_PI / 180.0); /* degrees */ else s->units[quantity] = (real)1.0; /* metres */ } s->f_clino_percent = s->f_backclino_percent = fFalse; s->f_bearing_quadrants = s->f_backbearing_quadrants = fFalse; } void default_calib(settings *s) { int quantity; for (quantity = 0; quantity < Q_MAC; quantity++) { s->z[quantity] = (real)0.0; s->sc[quantity] = (real)1.0; } } static void default_flags(settings *s) { s->flags = 0; } extern void default_all(settings *s) { default_truncate(s); s->infer = 0; default_case(s); default_style(s); default_prefix(s); default_translate(s); default_grade(s); default_units(s); default_calib(s); default_flags(s); } char *buffer = NULL; static int buf_len; static char *ucbuffer = NULL; /* read token */ extern void get_token(void) { skipblanks(); get_token_no_blanks(); } extern void get_token_no_blanks(void) { int i = -1; s_zero(&buffer); osfree(ucbuffer); while (isalpha(ch)) { s_catchar(&buffer, &buf_len, (char)ch); nextch(); } if (!buffer) s_catchar(&buffer, &buf_len, '\0'); ucbuffer = osmalloc(buf_len); do { i++; ucbuffer[i] = toupper(buffer[i]); } while (buffer[i]); #if 0 printf("get_token_no_blanks() got “%sâ€\n", buffer); #endif } /* read word */ static void get_word(void) { s_zero(&buffer); skipblanks(); while (!isBlank(ch) && !isEol(ch)) { s_catchar(&buffer, &buf_len, (char)ch); nextch(); } if (!buffer) s_catchar(&buffer, &buf_len, '\0'); #if 0 printf("get_word() got “%sâ€\n", buffer); #endif } /* match_tok() now uses binary chop * tab argument should be alphabetically sorted (ascending) */ extern int match_tok(const sztok *tab, int tab_size) { int a = 0, b = tab_size - 1, c; int r; assert(tab_size > 0); /* catch empty table */ /* printf("[%d,%d]",a,b); */ while (a <= b) { c = (unsigned)(a + b) / 2; /* printf(" %d",c); */ r = strcmp(tab[c].sz, ucbuffer); if (r == 0) return tab[c].tok; /* match */ if (r < 0) a = c + 1; else b = c - 1; } return tab[tab_size].tok; /* no match */ } typedef enum { CMD_NULL = -1, CMD_ALIAS, CMD_BEGIN, CMD_CALIBRATE, CMD_CASE, CMD_COPYRIGHT, CMD_CS, CMD_DATA, CMD_DATE, CMD_DECLINATION, CMD_DEFAULT, CMD_END, CMD_ENTRANCE, CMD_EQUATE, CMD_EXPORT, CMD_FIX, CMD_FLAGS, CMD_INCLUDE, CMD_INFER, CMD_INSTRUMENT, CMD_PREFIX, CMD_REF, CMD_REQUIRE, CMD_SD, CMD_SET, CMD_SOLVE, CMD_TEAM, CMD_TITLE, CMD_TRUNCATE, CMD_UNITS } cmds; static const sztok cmd_tab[] = { {"ALIAS", CMD_ALIAS}, {"BEGIN", CMD_BEGIN}, {"CALIBRATE", CMD_CALIBRATE}, {"CASE", CMD_CASE}, {"COPYRIGHT", CMD_COPYRIGHT}, {"CS", CMD_CS}, {"DATA", CMD_DATA}, {"DATE", CMD_DATE}, {"DECLINATION", CMD_DECLINATION}, #ifndef NO_DEPRECATED {"DEFAULT", CMD_DEFAULT}, #endif {"END", CMD_END}, {"ENTRANCE", CMD_ENTRANCE}, {"EQUATE", CMD_EQUATE}, {"EXPORT", CMD_EXPORT}, {"FIX", CMD_FIX}, {"FLAGS", CMD_FLAGS}, {"INCLUDE", CMD_INCLUDE}, {"INFER", CMD_INFER}, {"INSTRUMENT",CMD_INSTRUMENT}, #ifndef NO_DEPRECATED {"PREFIX", CMD_PREFIX}, #endif {"REF", CMD_REF}, {"REQUIRE", CMD_REQUIRE}, {"SD", CMD_SD}, {"SET", CMD_SET}, {"SOLVE", CMD_SOLVE}, {"TEAM", CMD_TEAM}, {"TITLE", CMD_TITLE}, {"TRUNCATE", CMD_TRUNCATE}, {"UNITS", CMD_UNITS}, {NULL, CMD_NULL} }; /* masks for units which are length and angles respectively */ #define LEN_UMASK (BIT(UNITS_METRES) | BIT(UNITS_FEET) | BIT(UNITS_YARDS)) #define ANG_UMASK (BIT(UNITS_DEGS) | BIT(UNITS_GRADS) | BIT(UNITS_MINUTES)) /* ordering must be the same as the units enum */ const real factor_tab[] = { 1.0, METRES_PER_FOOT, (METRES_PER_FOOT*3.0), (M_PI/180.0), (M_PI/180.0), (M_PI/200.0), 0.01, (M_PI/180.0/60.0) }; const int units_to_msgno[] = { /*m*/424, /*ft*/428, -1, /* yards */ /*°*/344, /* quadrants */ /*°*/344, /*áµ*/345, /*%*/96, -1 /* minutes */ }; int get_length_units(int quantity) { double factor = pcs->units[quantity]; if (fabs(factor - METRES_PER_FOOT) <= REAL_EPSILON || fabs(factor - METRES_PER_FOOT * 3.0) <= REAL_EPSILON) { return UNITS_FEET; } return UNITS_METRES; } int get_angle_units(int quantity) { double factor = pcs->units[quantity]; if (fabs(factor - M_PI / 200.0) <= REAL_EPSILON) { return UNITS_GRADS; } return UNITS_DEGS; } static int get_units(unsigned long qmask, bool percent_ok) { static const sztok utab[] = { {"DEGREES", UNITS_DEGS }, {"DEGS", UNITS_DEGS }, {"FEET", UNITS_FEET }, {"GRADS", UNITS_GRADS }, {"METERS", UNITS_METRES }, {"METRES", UNITS_METRES }, {"METRIC", UNITS_METRES }, {"MILS", UNITS_DEPRECATED_ALIAS_FOR_GRADS }, {"MINUTES", UNITS_MINUTES }, {"PERCENT", UNITS_PERCENT }, {"PERCENTAGE", UNITS_PERCENT }, {"QUADRANTS", UNITS_QUADRANTS }, {"QUADS", UNITS_QUADRANTS }, {"YARDS", UNITS_YARDS }, {NULL, UNITS_NULL } }; int units; get_token(); units = match_tok(utab, TABSIZE(utab)); if (units == UNITS_NULL) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown units “%sâ€*/35, buffer); return UNITS_NULL; } /* Survex has long misdefined "mils" as an alias for "grads", of which * there are 400 in a circle. There are several definitions of "mils" * with a circle containing 2000Ï€ SI milliradians, 6400 NATO mils, 6000 * Warsaw Pact mils, and 6300 Swedish streck, and they aren't in common * use by cave surveyors, so we now just warn if mils are used. */ if (units == UNITS_DEPRECATED_ALIAS_FOR_GRADS) { compile_diagnostic(DIAG_WARN|DIAG_BUF|DIAG_SKIP, /*Units “%s†are deprecated, assuming “grads†- see manual for details*/479, buffer); units = UNITS_GRADS; } if (units == UNITS_PERCENT && percent_ok && !(qmask & ~(BIT(Q_GRADIENT)|BIT(Q_BACKGRADIENT)))) { return units; } if (units == UNITS_QUADRANTS && !(qmask & ~(BIT(Q_BEARING)|BIT(Q_BACKBEARING)))) { return units; } if (((qmask & LEN_QMASK) && !TSTBIT(LEN_UMASK, units)) || ((qmask & ANG_QMASK) && !TSTBIT(ANG_UMASK, units))) { /* TRANSLATORS: Note: In English you talk about the *units* of a single * measurement, but the correct term in other languages may be singular. */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Invalid units “%s†for quantity*/37, buffer); return UNITS_NULL; } return units; } /* returns mask with bit x set to indicate quantity x specified */ static unsigned long get_qlist(unsigned long mask_bad) { static const sztok qtab[] = { {"ALTITUDE", Q_DZ }, {"BACKBEARING", Q_BACKBEARING }, {"BACKCLINO", Q_BACKGRADIENT }, /* alternative name */ {"BACKCOMPASS", Q_BACKBEARING }, /* alternative name */ {"BACKGRADIENT", Q_BACKGRADIENT }, {"BACKLENGTH", Q_BACKLENGTH }, {"BACKTAPE", Q_BACKLENGTH }, /* alternative name */ {"BEARING", Q_BEARING }, {"CEILING", Q_UP }, /* alternative name */ {"CLINO", Q_GRADIENT }, /* alternative name */ {"COMPASS", Q_BEARING }, /* alternative name */ {"COUNT", Q_COUNT }, {"COUNTER", Q_COUNT }, /* alternative name */ {"DECLINATION", Q_DECLINATION }, {"DEFAULT", Q_DEFAULT }, /* not a real quantity... */ {"DEPTH", Q_DEPTH }, {"DOWN", Q_DOWN }, {"DX", Q_DX }, /* alternative name */ {"DY", Q_DY }, /* alternative name */ {"DZ", Q_DZ }, /* alternative name */ {"EASTING", Q_DX }, {"FLOOR", Q_DOWN }, /* alternative name */ {"GRADIENT", Q_GRADIENT }, {"LEFT", Q_LEFT }, {"LENGTH", Q_LENGTH }, {"LEVEL", Q_LEVEL}, {"NORTHING", Q_DY }, {"PLUMB", Q_PLUMB}, {"POSITION", Q_POS }, {"RIGHT", Q_RIGHT }, {"TAPE", Q_LENGTH }, /* alternative name */ {"UP", Q_UP }, {NULL, Q_NULL } }; unsigned long qmask = 0; int tok; filepos fp; while (1) { get_pos(&fp); get_token(); tok = match_tok(qtab, TABSIZE(qtab)); if (tok == Q_DEFAULT && !(mask_bad & BIT(Q_DEFAULT))) { /* Only recognise DEFAULT if it is the first quantity, and then don't * look for any more. */ if (qmask == 0) return BIT(Q_DEFAULT); break; } /* bail out if we reach the table end with no match */ if (tok == Q_NULL) break; qmask |= BIT(tok); if (qmask & mask_bad) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown instrument “%sâ€*/39, buffer); return 0; } } if (qmask == 0) { /* TRANSLATORS: A "quantity" is something measured like "LENGTH", * "BEARING", "ALTITUDE", etc. */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown quantity “%sâ€*/34, buffer); } else { set_pos(&fp); } return qmask; } #define SPECIAL_UNKNOWN 0 static void cmd_set(void) { static const sztok chartab[] = { {"BLANK", SPECIAL_BLANK }, /*FIXME {"CLOSE", SPECIAL_CLOSE }, */ {"COMMENT", SPECIAL_COMMENT }, {"DECIMAL", SPECIAL_DECIMAL }, {"EOL", SPECIAL_EOL }, /* EOL won't work well */ {"KEYWORD", SPECIAL_KEYWORD }, {"MINUS", SPECIAL_MINUS }, {"NAMES", SPECIAL_NAMES }, {"OMIT", SPECIAL_OMIT }, /*FIXME {"OPEN", SPECIAL_OPEN }, */ {"PLUS", SPECIAL_PLUS }, #ifndef NO_DEPRECATED {"ROOT", SPECIAL_ROOT }, #endif {"SEPARATOR", SPECIAL_SEPARATOR }, {NULL, SPECIAL_UNKNOWN } }; int mask; int i; get_token(); mask = match_tok(chartab, TABSIZE(chartab)); if (mask == SPECIAL_UNKNOWN) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown character class “%sâ€*/42, buffer); return; } #ifndef NO_DEPRECATED if (mask == SPECIAL_ROOT) { if (root_depr_count < 5) { /* TRANSLATORS: Use of the ROOT character (which is "\" by default) is * deprecated, so this error would be generated by: * * *equate \foo.7 1 * * If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN|DIAG_BUF, /*ROOT is deprecated*/25); if (++root_depr_count == 5) /* TRANSLATORS: If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } } #endif /* if we're currently using an inherited translation table, allocate a new * table, and copy old one into it */ if (pcs->next && pcs->next->Translate == pcs->Translate) { short *p; p = ((short*)osmalloc(ossizeof(short) * 257)) + 1; memcpy(p - 1, pcs->Translate - 1, sizeof(short) * 257); pcs->Translate = p; } skipblanks(); /* clear this flag for all non-alphanums */ for (i = 0; i < 256; i++) if (!isalnum(i)) pcs->Translate[i] &= ~mask; /* now set this flag for all specified chars */ while (!isEol(ch)) { if (!isalnum(ch)) { pcs->Translate[ch] |= mask; } else if (tolower(ch) == 'x') { int hex; filepos fp; get_pos(&fp); nextch(); if (!isxdigit(ch)) { set_pos(&fp); break; } hex = isdigit(ch) ? ch - '0' : tolower(ch) - 'a'; nextch(); if (!isxdigit(ch)) { set_pos(&fp); break; } hex = hex << 4 | (isdigit(ch) ? ch - '0' : tolower(ch) - 'a'); pcs->Translate[hex] |= mask; } else { break; } nextch(); } } static void check_reentry(prefix *survey, const filepos* fpos_ptr) { /* Don't try to check "*prefix \" or "*begin \" */ if (!survey->up) return; if (TSTBIT(survey->sflags, SFLAGS_PREFIX_ENTERED)) { static int reenter_depr_count = 0; filepos fp_tmp; if (reenter_depr_count >= 5) return; get_pos(&fp_tmp); set_pos(fpos_ptr); /* TRANSLATORS: The first of two warnings given when a survey which has * already been completed is reentered. This example file crawl.svx: * * *begin crawl ; <- second warning here * 1 2 9.45 234 -01 * *end crawl * *begin crawl ; <- first warning here * 2 3 7.67 223 -03 * *end crawl * * Would lead to: * * crawl.svx:4: Reentering an existing survey is deprecated * crawl.svx:1: Originally entered here * * If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN|DIAG_TOKEN, /*Reentering an existing survey is deprecated*/29); set_pos(&fp_tmp); /* TRANSLATORS: The second of two warnings given when a survey which has * already been completed is reentered. This example file crawl.svx: * * *begin crawl * 1 2 9.45 234 -01 # <- second warning here * *end crawl * *begin crawl # <- first warning here * 2 3 7.67 223 -03 * *end crawl * * Would lead to: * * crawl.svx:3: Reentering an existing survey is deprecated * crawl.svx:1: Originally entered here * * If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic_pfx(DIAG_WARN, survey, /*Originally entered here*/30); if (++reenter_depr_count == 5) { /* After we've warned about 5 uses of the same deprecated feature, we * give up for the rest of the current processing run. * * If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } } else { survey->sflags |= BIT(SFLAGS_PREFIX_ENTERED); survey->filename = file.filename; survey->line = file.line; } } #ifndef NO_DEPRECATED static void cmd_prefix(void) { static int prefix_depr_count = 0; prefix *survey; filepos fp; /* Issue warning first, so "*prefix \" warns first that *prefix is * deprecated and then that ROOT is... */ if (prefix_depr_count < 5) { /* TRANSLATORS: If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN|DIAG_BUF, /**prefix is deprecated - use *begin and *end instead*/6); if (++prefix_depr_count == 5) compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } get_pos(&fp); survey = read_prefix(PFX_SURVEY|PFX_ALLOW_ROOT); pcs->Prefix = survey; check_reentry(survey, &fp); } #endif static void cmd_alias(void) { /* Currently only two forms are supported: * *alias station - .. * *alias station - */ get_token(); if (strcmp(ucbuffer, "STATION") != 0) goto bad; get_word(); if (strcmp(buffer, "-") != 0) goto bad; get_word(); if (*buffer && strcmp(buffer, "..") != 0) goto bad; pcs->dash_for_anon_wall_station = (*buffer != '\0'); return; bad: compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*Bad *alias command*/397); } static void cmd_begin(void) { settings *pcsNew; pcsNew = osnew(settings); *pcsNew = *pcs; /* copy contents */ pcsNew->begin_lineno = file.line; pcsNew->next = pcs; pcs = pcsNew; skipblanks(); pcs->begin_survey = NULL; if (!isEol(ch) && !isComm(ch)) { filepos fp; prefix *survey; get_pos(&fp); survey = read_prefix(PFX_SURVEY|PFX_ALLOW_ROOT|PFX_WARN_SEPARATOR); pcs->begin_survey = survey; pcs->Prefix = survey; check_reentry(survey, &fp); f_export_ok = fTrue; } } static void invalidate_pj_cached(void) { /* Invalidate the cached PJ. */ if (pj_cached) { proj_destroy(pj_cached); pj_cached = NULL; } } void report_declination(settings *p) { if (p->min_declination <= p->max_declination) { int y, m, d; char range[128]; const char* deg_sign = msg(/*°*/344); ymd_from_days_since_1900(p->min_declination_days, &y, &m, &d); snprintf(range, sizeof(range), "%.1f%s @ %04d-%02d-%02d", deg(p->min_declination), deg_sign, y, m, d); if (p->min_declination_days != p->max_declination_days) { size_t len = strlen(range); ymd_from_days_since_1900(p->max_declination_days, &y, &m, &d); snprintf(range + len, sizeof(range) - len, " / %.1f%s @ %04d-%02d-%02d", deg(p->max_declination), deg_sign, y, m, d); } /* TRANSLATORS: This message gives information about the range of * declination values and the grid convergence value calculated for * each "*declination auto ..." command. * * The first %s will be replaced by the declination range (or single * value), and %.1f%s by the grid convergence angle. */ compile_diagnostic_at(DIAG_INFO|DIAG_COL, p->dec_filename, p->dec_line, /*Declination: %s, grid convergence: %.1f%s*/484, range, deg(p->convergence), deg_sign); PUTC(' ', STDERR); fputs(p->dec_context, STDERR); fputnl(STDERR); free(p->dec_context); p->dec_context = NULL; } } void pop_settings(void) { settings * p = pcs; pcs = pcs->next; SVX_ASSERT(pcs); if (pcs->dec_lat != p->dec_lat || pcs->dec_lon != p->dec_lon || pcs->dec_alt != p->dec_alt) { report_declination(p); } else { pcs->min_declination_days = p->min_declination_days; pcs->max_declination_days = p->max_declination_days; pcs->min_declination = p->min_declination; pcs->max_declination = p->max_declination; } if (p->proj_str != pcs->proj_str) { if (!p->proj_str || !pcs->proj_str || strcmp(p->proj_str, pcs->proj_str) != 0) { invalidate_pj_cached(); } /* free proj_str if not used by parent */ osfree(p->proj_str); } /* don't free default ordering or ordering used by parent */ if (p->ordering != default_order && p->ordering != pcs->ordering) osfree((reading*)p->ordering); /* free Translate if not used by parent */ if (p->Translate != pcs->Translate) osfree(p->Translate - 1); /* free meta if not used by parent, or in this block */ if (p->meta && p->meta != pcs->meta && p->meta->ref_count == 0) osfree(p->meta); osfree(p); } static void cmd_end(void) { prefix *survey, *begin_survey; filepos fp; if (pcs->begin_lineno == 0) { if (pcs->next == NULL) { /* more ENDs than BEGINs */ compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*No matching BEGIN*/192); } else { compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*END with no matching BEGIN in this file*/22); } return; } begin_survey = pcs->begin_survey; pop_settings(); /* note need to read using root *before* BEGIN */ skipblanks(); if (isEol(ch) || isComm(ch)) { survey = NULL; } else { get_pos(&fp); survey = read_prefix(PFX_SURVEY|PFX_ALLOW_ROOT); } if (survey != begin_survey) { if (survey) { set_pos(&fp); if (!begin_survey) { /* TRANSLATORS: Used when a BEGIN command has no survey, but the * END command does, e.g.: * * *begin * 1 2 10.00 178 -01 * *end entrance <--[Message given here] */ compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Matching BEGIN command has no survey name*/36); } else { /* TRANSLATORS: *BEGIN and *END should have the * same if it’s given at all */ compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Survey name doesn’t match BEGIN*/193); } skipline(); } else { /* TRANSLATORS: Used when a BEGIN command has a survey name, but the * END command omits it, e.g.: * * *begin entrance * 1 2 10.00 178 -01 * *end <--[Message given here] */ compile_diagnostic(DIAG_WARN|DIAG_COL, /*Survey name omitted from END*/194); } } } static void cmd_entrance(void) { prefix *pfx = read_prefix(PFX_STATION); pfx->sflags |= BIT(SFLAGS_ENTRANCE); } static const prefix * first_fix_name = NULL; static const char * first_fix_filename; static unsigned first_fix_line; static void cmd_fix(void) { prefix *fix_name; node *stn = NULL; static prefix *name_omit_already = NULL; static const char * name_omit_already_filename = NULL; static unsigned int name_omit_already_line; real x, y, z; filepos fp; fix_name = read_prefix(PFX_STATION|PFX_ALLOW_ROOT); fix_name->sflags |= BIT(SFLAGS_FIXED); get_pos(&fp); get_token(); if (strcmp(ucbuffer, "REFERENCE") == 0) { /* suppress "unused fixed point" warnings for this station */ fix_name->sflags |= BIT(SFLAGS_USED); } else { if (*ucbuffer) set_pos(&fp); } x = read_numeric(fTrue); if (x == HUGE_REAL) { /* If the end of the line isn't blank, read a number after all to * get a more helpful error message */ if (!isEol(ch) && !isComm(ch)) x = read_numeric(fFalse); } if (x == HUGE_REAL) { if (pcs->proj_str || proj_str_out) { compile_diagnostic(DIAG_ERR|DIAG_COL|DIAG_SKIP, /*Coordinates can't be omitted when coordinate system has been specified*/439); return; } if (fix_name == name_omit_already) { compile_diagnostic(DIAG_WARN|DIAG_COL, /*Same station fixed twice with no coordinates*/61); return; } if (name_omit_already) { /* TRANSLATORS: Emitted after second and subsequent "FIX" command * with no coordinates. */ compile_diagnostic_at(DIAG_ERR|DIAG_COL, name_omit_already_filename, name_omit_already_line, /*Already had FIX command with no coordinates for station “%sâ€*/441, sprint_prefix(name_omit_already)); } else { /* TRANSLATORS: " *fix a " gives this message: */ compile_diagnostic(DIAG_INFO|DIAG_COL, /*FIX command with no coordinates - fixing at (0,0,0)*/54); name_omit_already = fix_name; name_omit_already_filename = file.filename; name_omit_already_line = file.line; } x = y = z = (real)0.0; } else { real sdx; y = read_numeric(fFalse); z = read_numeric(fFalse); if (pcs->proj_str && proj_str_out) { PJ *transform = pj_cached; if (!transform) { transform = proj_create_crs_to_crs(PJ_DEFAULT_CTX, pcs->proj_str, proj_str_out, NULL); if (transform) { /* Normalise the output order so x is longitude and y latitude - by * default new PROJ has them switched for EPSG:4326 which just seems * confusing. */ PJ* pj_norm = proj_normalize_for_visualization(PJ_DEFAULT_CTX, transform); proj_destroy(transform); transform = pj_norm; } pj_cached = transform; } if (proj_angular_input(transform, PJ_FWD)) { /* Input coordinate system expects radians. */ x = rad(x); y = rad(y); } PJ_COORD coord = {{x, y, z, HUGE_VAL}}; coord = proj_trans(transform, PJ_FWD, coord); x = coord.xyzt.x; y = coord.xyzt.y; z = coord.xyzt.z; if (x == HUGE_VAL || y == HUGE_VAL || z == HUGE_VAL) { compile_diagnostic(DIAG_ERR, /*Failed to convert coordinates: %s*/436, proj_errno_string(proj_errno(transform))); /* Set dummy values which are finite. */ x = y = z = 0; } } else if (pcs->proj_str) { compile_diagnostic(DIAG_ERR, /*The input projection is set but the output projection isn't*/437); } else if (proj_str_out) { compile_diagnostic(DIAG_ERR, /*The output projection is set but the input projection isn't*/438); } get_pos(&fp); sdx = read_numeric(fTrue); if (sdx <= 0) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_NUM, /*Standard deviation must be positive*/48); return; } if (sdx != HUGE_REAL) { real sdy, sdz; real cxy = 0, cyz = 0, czx = 0; get_pos(&fp); sdy = read_numeric(fTrue); if (sdy == HUGE_REAL) { /* only one variance given */ sdy = sdz = sdx; } else { if (sdy <= 0) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_NUM, /*Standard deviation must be positive*/48); return; } get_pos(&fp); sdz = read_numeric(fTrue); if (sdz == HUGE_REAL) { /* two variances given - horizontal & vertical */ sdz = sdy; sdy = sdx; } else { if (sdz <= 0) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_NUM, /*Standard deviation must be positive*/48); return; } cxy = read_numeric(fTrue); if (cxy != HUGE_REAL) { /* covariances given */ cyz = read_numeric(fFalse); czx = read_numeric(fFalse); } else { cxy = 0; } } } stn = StnFromPfx(fix_name); if (!fixed(stn)) { node *fixpt = osnew(node); prefix *name; name = osnew(prefix); name->pos = osnew(pos); name->ident = NULL; name->shape = 0; fixpt->name = name; name->stn = fixpt; name->up = NULL; if (TSTBIT(pcs->infer, INFER_EXPORTS)) { name->min_export = USHRT_MAX; } else { name->min_export = 0; } name->max_export = 0; name->sflags = 0; add_stn_to_list(&stnlist, fixpt); POS(fixpt, 0) = x; POS(fixpt, 1) = y; POS(fixpt, 2) = z; fix(fixpt); fixpt->leg[0] = fixpt->leg[1] = fixpt->leg[2] = NULL; addfakeleg(fixpt, stn, 0, 0, 0, sdx * sdx, sdy * sdy, sdz * sdz #ifndef NO_COVARIANCES , cxy, cyz, czx #endif ); } if (!first_fix_name) { /* We track if we've fixed a station yet, and if so what the name * of the first fix was, so that we can issue an error if the * output coordinate system is set after fixing a station. */ first_fix_name = fix_name; first_fix_filename = file.filename; first_fix_line = file.line; } return; } } if (!first_fix_name) { /* We track if we've fixed a station yet, and if so what the name of the * first fix was, so that we can issue an error if the output coordinate * system is set after fixing a station. */ first_fix_name = fix_name; first_fix_filename = file.filename; first_fix_line = file.line; } stn = StnFromPfx(fix_name); if (!fixed(stn)) { POS(stn, 0) = x; POS(stn, 1) = y; POS(stn, 2) = z; fix(stn); return; } if (x != POS(stn, 0) || y != POS(stn, 1) || z != POS(stn, 2)) { compile_diagnostic(DIAG_ERR, /*Station already fixed or equated to a fixed point*/46); return; } /* TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 */ compile_diagnostic(DIAG_WARN, /*Station already fixed at the same coordinates*/55); } static void cmd_flags(void) { static const sztok flagtab[] = { {"DUPLICATE", FLAGS_DUPLICATE }, {"NOT", FLAGS_NOT }, {"SPLAY", FLAGS_SPLAY }, {"SURFACE", FLAGS_SURFACE }, {NULL, FLAGS_UNKNOWN } }; bool fNot = fFalse; bool fEmpty = fTrue; while (1) { int flag; get_token(); /* If buffer is empty, it could mean end of line, or maybe * some non-letter junk which is better reported later */ if (!buffer[0]) break; fEmpty = fFalse; flag = match_tok(flagtab, TABSIZE(flagtab)); /* treat the second NOT in "NOT NOT" as an unknown flag */ if (flag == FLAGS_UNKNOWN || (fNot && flag == FLAGS_NOT)) { compile_diagnostic(DIAG_ERR|DIAG_BUF, /*FLAG “%s†unknown*/68, buffer); /* Recover from “*FLAGS NOT BOGUS SURFACE†by ignoring "NOT BOGUS" */ fNot = fFalse; } else if (flag == FLAGS_NOT) { fNot = fTrue; } else if (fNot) { pcs->flags &= ~BIT(flag); fNot = fFalse; } else { pcs->flags |= BIT(flag); } } if (fNot) { compile_diagnostic(DIAG_ERR|DIAG_BUF, /*Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€*/188); } else if (fEmpty) { compile_diagnostic(DIAG_ERR|DIAG_BUF, /*Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€*/189); } } static void cmd_equate(void) { prefix *name1, *name2; bool fOnlyOneStn = fTrue; /* to trap eg *equate entrance.6 */ filepos fp; get_pos(&fp); name1 = read_prefix(PFX_STATION|PFX_ALLOW_ROOT|PFX_SUSPECT_TYPO); while (fTrue) { name2 = name1; skipblanks(); if (isEol(ch) || isComm(ch)) { if (fOnlyOneStn) { set_pos(&fp); /* TRANSLATORS: EQUATE is a command name, so shouldn’t be * translated. * * Here "station" is a survey station, not a train station. */ compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_TOKEN, /*Only one station in EQUATE command*/33); } return; } name1 = read_prefix(PFX_STATION|PFX_ALLOW_ROOT|PFX_SUSPECT_TYPO); process_equate(name1, name2); fOnlyOneStn = fFalse; } } static void report_missing_export(prefix *pfx, int depth) { char *s; const char *p; prefix *survey = pfx; int i; for (i = depth + 1; i; i--) { survey = survey->up; SVX_ASSERT(survey); } s = osstrdup(sprint_prefix(survey)); p = sprint_prefix(pfx); if (survey->filename) { /* TRANSLATORS: A station must be exported out of each level it is in, so * this would give "Station “\outer.inner.1†not exported from survey * “\outerâ€)": * * *equate entrance outer.inner.1 * *begin outer * *begin inner * *export 1 * 1 2 1.23 045 -6 * *end inner * *end outer * * Here "survey" is a "cave map" rather than list of questions - it should be * translated to the terminology that cavers using the language would use. */ compile_diagnostic_pfx(DIAG_ERR, survey, /*Station “%s†not exported from survey “%sâ€*/26, p, s); } else { compile_diagnostic(DIAG_ERR, /*Station “%s†not exported from survey “%sâ€*/26, p, s); } osfree(s); } static void cmd_export(void) { prefix *pfx; fExportUsed = fTrue; do { int depth = 0; pfx = read_prefix(PFX_STATION|PFX_NEW); if (pfx == NULL) { /* The argument was an existing station. */ /* FIXME */ } else { prefix *p = pfx; while (p != NULL && p != pcs->Prefix) { depth++; p = p->up; } /* Something like: *export \foo, but we've excluded use of root */ SVX_ASSERT(p); } /* *export \ or similar bogus stuff */ SVX_ASSERT(depth); #if 0 printf("C min %d max %d depth %d pfx %s\n", pfx->min_export, pfx->max_export, depth, sprint_prefix(pfx)); #endif if (pfx->min_export == 0) { /* not encountered *export for this name before */ if (pfx->max_export > depth) report_missing_export(pfx, depth); pfx->min_export = pfx->max_export = depth; } else if (pfx->min_export != USHRT_MAX) { /* FIXME: what to do if a station is marked for inferred exports * but is then explicitly exported? Currently we just ignore the * explicit export... */ if (pfx->min_export - 1 > depth) { report_missing_export(pfx, depth); } else if (pfx->min_export - 1 < depth) { /* TRANSLATORS: Here "station" is a survey station, not a train station. * * Exporting a station twice gives this error: * * *begin example * *export 1 * *export 1 * 1 2 1.24 045 -6 * *end example */ compile_diagnostic(DIAG_ERR, /*Station “%s†already exported*/66, sprint_prefix(pfx)); } pfx->min_export = depth; } skipblanks(); } while (!isEol(ch) && !isComm(ch)); } static void cmd_data(void) { static const sztok dtab[] = { {"ALTITUDE", Dz }, {"BACKBEARING", BackComp }, {"BACKCLINO", BackClino }, /* alternative name */ {"BACKCOMPASS", BackComp }, /* alternative name */ {"BACKGRADIENT", BackClino }, {"BACKLENGTH", BackTape }, {"BACKTAPE", BackTape }, /* alternative name */ {"BEARING", Comp }, {"CEILING", Up }, /* alternative name */ {"CLINO", Clino }, /* alternative name */ {"COMPASS", Comp }, /* alternative name */ {"COUNT", Count }, /* FrCount&ToCount in multiline */ {"DEPTH", Depth }, /* FrDepth&ToDepth in multiline */ {"DEPTHCHANGE", DepthChange }, {"DIRECTION", Dir }, {"DOWN", Down }, {"DX", Dx }, {"DY", Dy }, {"DZ", Dz }, {"EASTING", Dx }, {"FLOOR", Down }, /* alternative name */ {"FROM", Fr }, {"FROMCOUNT", FrCount }, {"FROMDEPTH", FrDepth }, {"GRADIENT", Clino }, {"IGNORE", Ignore }, {"IGNOREALL", IgnoreAll }, {"LEFT", Left }, {"LENGTH", Tape }, {"NEWLINE", Newline }, {"NORTHING", Dy }, {"RIGHT", Right }, {"STATION", Station }, /* Fr&To in multiline */ {"TAPE", Tape }, /* alternative name */ {"TO", To }, {"TOCOUNT", ToCount }, {"TODEPTH", ToDepth }, {"UP", Up }, {NULL, End } }; #define MASK_stns BIT(Fr) | BIT(To) | BIT(Station) #define MASK_tape BIT(Tape) | BIT(BackTape) | BIT(FrCount) | BIT(ToCount) | BIT(Count) #define MASK_dpth BIT(FrDepth) | BIT(ToDepth) | BIT(Depth) | BIT(DepthChange) #define MASK_comp BIT(Comp) | BIT(BackComp) #define MASK_clin BIT(Clino) | BIT(BackClino) #define MASK_NORMAL MASK_stns | BIT(Dir) | MASK_tape | MASK_comp | MASK_clin #define MASK_DIVING MASK_NORMAL | MASK_dpth #define MASK_CARTESIAN MASK_stns | BIT(Dx) | BIT(Dy) | BIT(Dz) #define MASK_CYLPOLAR MASK_stns | BIT(Dir) | MASK_tape | MASK_comp | MASK_dpth #define MASK_NOSURVEY MASK_stns #define MASK_PASSAGE BIT(Station) | BIT(Left) | BIT(Right) | BIT(Up) | BIT(Down) /* readings which may be given for each style */ static const unsigned long mask[] = { MASK_NORMAL, MASK_DIVING, MASK_CARTESIAN, MASK_CYLPOLAR, MASK_NOSURVEY, MASK_PASSAGE }; /* readings which may be omitted for each style */ static const unsigned long mask_optional[] = { BIT(Dir) | BIT(Clino) | BIT(BackClino), BIT(Dir) | BIT(Clino) | BIT(BackClino), 0, BIT(Dir), 0, 0 /* BIT(Left) | BIT(Right) | BIT(Up) | BIT(Down), */ }; /* all valid readings */ static const unsigned long mask_all[] = { MASK_NORMAL | BIT(Newline) | BIT(Ignore) | BIT(IgnoreAll) | BIT(End), MASK_DIVING | BIT(Newline) | BIT(Ignore) | BIT(IgnoreAll) | BIT(End), MASK_CARTESIAN | BIT(Newline) | BIT(Ignore) | BIT(IgnoreAll) | BIT(End), MASK_CYLPOLAR | BIT(Newline) | BIT(Ignore) | BIT(IgnoreAll) | BIT(End), MASK_NOSURVEY | BIT(Ignore) | BIT(IgnoreAll) | BIT(End), MASK_PASSAGE | BIT(Ignore) | BIT(IgnoreAll) | BIT(End) }; #define STYLE_DEFAULT -2 #define STYLE_UNKNOWN -1 static const sztok styletab[] = { {"CARTESIAN", STYLE_CARTESIAN }, {"CYLPOLAR", STYLE_CYLPOLAR }, {"DEFAULT", STYLE_DEFAULT }, {"DIVING", STYLE_DIVING }, {"NORMAL", STYLE_NORMAL }, {"NOSURVEY", STYLE_NOSURVEY }, {"PASSAGE", STYLE_PASSAGE }, {"TOPOFIL", STYLE_NORMAL }, {NULL, STYLE_UNKNOWN } }; #define m_multi (BIT(Station) | BIT(Count) | BIT(Depth)) int style, k = 0; reading d; unsigned long mUsed = 0; int old_style = pcs->style; /* after a bad *data command ignore survey data until the next * *data command to avoid an avalanche of errors */ pcs->style = STYLE_IGNORE; get_token(); style = match_tok(styletab, TABSIZE(styletab)); if (style == STYLE_DEFAULT) { default_style(pcs); return; } if (style == STYLE_UNKNOWN) { if (!buffer[0]) { /* "*data" reinitialises the current style - for *data passage that * breaks the passage. */ pcs->style = style = old_style; goto reinit_style; } /* TRANSLATORS: e.g. trying to refer to an invalid FNORD data style */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Data style “%s†unknown*/65, buffer); return; } skipblanks(); #ifndef NO_DEPRECATED /* Olde syntax had optional field for survey grade, so allow an omit * but issue a warning about it */ if (isOmit(ch)) { static int data_depr_count = 0; if (data_depr_count < 5) { compile_diagnostic(DIAG_WARN|DIAG_BUF, /*“*data %s %c …†is deprecated - use “*data %s …†instead*/104, buffer, ch, buffer); if (++data_depr_count == 5) compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } nextch(); } #endif int kMac = 6; /* minimum for NORMAL style */ reading *new_order = osmalloc(kMac * sizeof(reading)); char *style_name = osstrdup(buffer); do { filepos fp; get_pos(&fp); get_token(); d = match_tok(dtab, TABSIZE(dtab)); /* only token allowed after IGNOREALL is NEWLINE */ if (k && new_order[k - 1] == IgnoreAll && d != Newline) { set_pos(&fp); break; } /* Note: an unknown token is reported as trailing garbage */ if (!TSTBIT(mask_all[style], d)) { /* TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. * a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL * style. Neither "style" nor "reading" is a keyword in the program. * * This error complains about a "DEPTH" gauge reading in "NORMAL" * style, for example. */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Reading “%s†not allowed in data style “%sâ€*/63, buffer, style_name); osfree(style_name); osfree(new_order); return; } if (TSTBIT(mUsed, Newline) && TSTBIT(m_multi, d)) { /* TRANSLATORS: caused by e.g. * * *data diving station newline depth tape compass * * ("depth" needs to occur before "newline"). */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Reading “%s†must occur before NEWLINE*/225, buffer); osfree(style_name); osfree(new_order); return; } /* Check for duplicates unless it's a special reading: * IGNOREALL,IGNORE (duplicates allowed) ; END (not possible) */ if (!((BIT(Ignore) | BIT(End) | BIT(IgnoreAll)) & BIT(d))) { if (TSTBIT(mUsed, d)) { /* TRANSLATORS: complains about a situation like trying to define * two from stations per leg */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Duplicate reading “%sâ€*/67, buffer); osfree(style_name); osfree(new_order); return; } else { /* Check for previously listed readings which are incompatible * with this one - e.g. Count vs FrCount */ bool fBad = fFalse; switch (d) { case Station: if (mUsed & (BIT(Fr) | BIT(To))) fBad = fTrue; break; case Fr: case To: if (TSTBIT(mUsed, Station)) fBad = fTrue; break; case Count: if (mUsed & (BIT(FrCount) | BIT(ToCount) | BIT(Tape))) fBad = fTrue; break; case FrCount: case ToCount: if (mUsed & (BIT(Count) | BIT(Tape))) fBad = fTrue; break; case Depth: if (mUsed & (BIT(FrDepth) | BIT(ToDepth) | BIT(DepthChange))) fBad = fTrue; break; case FrDepth: case ToDepth: if (mUsed & (BIT(Depth) | BIT(DepthChange))) fBad = fTrue; break; case DepthChange: if (mUsed & (BIT(FrDepth) | BIT(ToDepth) | BIT(Depth))) fBad = fTrue; break; case Newline: if (mUsed & ~m_multi) { /* TRANSLATORS: e.g. * * *data normal from to tape newline compass clino */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*NEWLINE can only be preceded by STATION, DEPTH, and COUNT*/226); osfree(style_name); osfree(new_order); return; } if (k == 0) { /* TRANSLATORS: error from: * * *data normal newline from to tape compass clino */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*NEWLINE can’t be the first reading*/222); osfree(style_name); osfree(new_order); return; } break; default: /* avoid compiler warnings about unhandled enums */ break; } if (fBad) { /* Not entirely happy with phrasing this... */ /* TRANSLATORS: This is an error from the *DATA command. It * means that a reading (which will appear where %s is isn't * valid as the list of readings has already included the same * reading, or an equivalent one (e.g. you can't have both * DEPTH and DEPTHCHANGE together). */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Reading “%s†duplicates previous reading(s)*/77, buffer); osfree(style_name); osfree(new_order); return; } mUsed |= BIT(d); /* used to catch duplicates */ } } if (k && new_order[k - 1] == IgnoreAll) { SVX_ASSERT(d == Newline); k--; d = IgnoreAllAndNewLine; } if (k >= kMac) { kMac = kMac * 2; new_order = osrealloc(new_order, kMac * sizeof(reading)); } new_order[k++] = d; } while (d != End); if (k >= 2 && new_order[k - 2] == Newline) { /* TRANSLATORS: error from: * * *data normal from to tape compass clino newline */ compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*NEWLINE can’t be the last reading*/223); osfree(style_name); osfree(new_order); return; } if (style == STYLE_NOSURVEY) { if (TSTBIT(mUsed, Station)) { if (k >= kMac) { kMac = kMac * 2; new_order = osrealloc(new_order, kMac * sizeof(reading)); } new_order[k - 1] = Newline; new_order[k++] = End; } } else if (style == STYLE_PASSAGE) { /* Station doesn't mean "multiline" for STYLE_PASSAGE. */ } else if (!TSTBIT(mUsed, Newline) && (m_multi & mUsed)) { /* TRANSLATORS: Error given by something like: * * *data normal station tape compass clino * * ("station" signifies interleaved data). */ compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*Interleaved readings, but no NEWLINE*/224); osfree(style_name); osfree(new_order); return; } #if 0 printf("mUsed = 0x%x\n", mUsed); #endif /* Check the supplied readings form a sufficient set. */ if (style != STYLE_PASSAGE) { if ((mUsed & (BIT(Fr) | BIT(To))) == (BIT(Fr) | BIT(To))) mUsed |= BIT(Station); else if (TSTBIT(mUsed, Station)) mUsed |= BIT(Fr) | BIT(To); } if (mUsed & (BIT(Comp) | BIT(BackComp))) mUsed |= BIT(Comp) | BIT(BackComp); if (mUsed & (BIT(Clino) | BIT(BackClino))) mUsed |= BIT(Clino) | BIT(BackClino); if ((mUsed & (BIT(FrDepth) | BIT(ToDepth))) == (BIT(FrDepth) | BIT(ToDepth))) mUsed |= BIT(Depth) | BIT(DepthChange); else if (mUsed & (BIT(Depth) | BIT(DepthChange))) mUsed |= BIT(FrDepth) | BIT(ToDepth) | BIT(Depth) | BIT(DepthChange); if ((mUsed & (BIT(FrCount) | BIT(ToCount))) == (BIT(FrCount) | BIT(ToCount))) mUsed |= BIT(Count) | BIT(Tape) | BIT(BackTape); else if (mUsed & (BIT(Count) | BIT(Tape) | BIT(BackTape))) mUsed |= BIT(FrCount) | BIT(ToCount) | BIT(Count) | BIT(Tape) | BIT(BackTape); #if 0 printf("mUsed = 0x%x, opt = 0x%x, mask = 0x%x\n", mUsed, mask_optional[style], mask[style]); #endif if (((mUsed &~ BIT(Newline)) | mask_optional[style]) != mask[style]) { /* Test should only fail with too few bits set, not too many */ SVX_ASSERT((((mUsed &~ BIT(Newline)) | mask_optional[style]) &~ mask[style]) == 0); /* TRANSLATORS: i.e. not enough readings for the style. */ compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*Too few readings for data style “%sâ€*/64, style_name); osfree(style_name); osfree(new_order); return; } /* don't free default ordering or ordering used by parent */ if (pcs->ordering != default_order && !(pcs->next && pcs->next->ordering == pcs->ordering)) osfree((reading*)pcs->ordering); pcs->style = style; pcs->ordering = new_order; osfree(style_name); reinit_style: if (style == STYLE_PASSAGE) { lrudlist * new_psg = osnew(lrudlist); new_psg->tube = NULL; new_psg->next = model; model = new_psg; next_lrud = &(new_psg->tube); } } static void cmd_units(void) { int units, quantity; unsigned long qmask; unsigned long m; /* mask with bit x set to indicate quantity x specified */ real factor; filepos fp; qmask = get_qlist(BIT(Q_POS)|BIT(Q_PLUMB)|BIT(Q_LEVEL)); if (!qmask) return; if (qmask == BIT(Q_DEFAULT)) { default_units(pcs); return; } get_pos(&fp); factor = read_numeric(fTrue); if (factor == 0.0) { set_pos(&fp); /* TRANSLATORS: error message given by "*units tape 0 feet" - it’s * meaningless to say your tape is marked in "0 feet" (but you might * measure distance by counting knots on a diving line, and tie them * every "2 feet"). */ compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /**UNITS factor must be non-zero*/200); skipline(); return; } units = get_units(qmask, fTrue); if (units == UNITS_NULL) return; if (TSTBIT(qmask, Q_GRADIENT)) pcs->f_clino_percent = (units == UNITS_PERCENT); if (TSTBIT(qmask, Q_BACKGRADIENT)) pcs->f_backclino_percent = (units == UNITS_PERCENT); if (TSTBIT(qmask, Q_BEARING)) { pcs->f_bearing_quadrants = (units == UNITS_QUADRANTS); } if (TSTBIT(qmask, Q_BACKBEARING)) { pcs->f_backbearing_quadrants = (units == UNITS_QUADRANTS); } if (factor == HUGE_REAL) { factor = factor_tab[units]; } else { factor *= factor_tab[units]; } for (quantity = 0, m = BIT(quantity); m <= qmask; quantity++, m <<= 1) if (qmask & m) pcs->units[quantity] = factor; } static void cmd_calibrate(void) { real sc, z; unsigned long qmask, m; int quantity; filepos fp; qmask = get_qlist(BIT(Q_POS)|BIT(Q_PLUMB)|BIT(Q_LEVEL)); if (!qmask) return; /* error already reported */ if (qmask == BIT(Q_DEFAULT)) { default_calib(pcs); return; } if (((qmask & LEN_QMASK)) && ((qmask & ANG_QMASK))) { /* TRANSLATORS: e.g. * * *calibrate tape compass 1 1 */ compile_diagnostic(DIAG_ERR|DIAG_SKIP, /*Can’t calibrate angular and length quantities together*/227); return; } z = read_numeric(fFalse); get_pos(&fp); sc = read_numeric(fTrue); if (sc == HUGE_REAL) { if (isalpha(ch)) { int units = get_units(qmask, fFalse); if (units == UNITS_NULL) { return; } z *= factor_tab[units]; sc = read_numeric(fTrue); if (sc == HUGE_REAL) { sc = (real)1.0; } else { /* Adjustment applied is: (reading - z) * sc * We want: reading * sc - z * So divide z by sc so the applied adjustment does what we want. */ z /= sc; } } else { sc = (real)1.0; } } if (sc == HUGE_REAL) sc = (real)1.0; /* check for declination scale */ if (TSTBIT(qmask, Q_DECLINATION) && sc != 1.0) { set_pos(&fp); /* TRANSLATORS: DECLINATION is a built-in keyword, so best not to * translate */ compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Scale factor must be 1.0 for DECLINATION*/40); skipline(); return; } if (sc == 0.0) { set_pos(&fp); /* TRANSLATORS: If the scale factor for an instrument is zero, then any * reading would be mapped to zero, which doesn't make sense. */ compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*Scale factor must be non-zero*/391); skipline(); return; } for (quantity = 0, m = BIT(quantity); m <= qmask; quantity++, m <<= 1) { if (qmask & m) { pcs->z[quantity] = pcs->units[quantity] * z; pcs->sc[quantity] = sc; } } } static void cmd_declination(void) { real v = read_numeric(fTrue); if (v == HUGE_REAL) { get_token_no_blanks(); if (strcmp(ucbuffer, "AUTO") != 0) { compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_COL, /*Expected number or “AUTOâ€*/309); return; } /* *declination auto X Y Z */ real x = read_numeric(fFalse); real y = read_numeric(fFalse); real z = read_numeric(fFalse); if (!pcs->proj_str) { compile_diagnostic(DIAG_ERR, /*Input coordinate system must be specified for “*DECLINATION AUTOâ€*/301); return; } /* Convert to WGS84 lat long. */ PJ *transform = proj_create_crs_to_crs(PJ_DEFAULT_CTX, pcs->proj_str, WGS84_DATUM_STRING, NULL); if (transform) { /* Normalise the output order so x is longitude and y latitude - by * default new PROJ has them switched for EPSG:4326 which just seems * confusing. */ PJ* pj_norm = proj_normalize_for_visualization(PJ_DEFAULT_CTX, transform); proj_destroy(transform); transform = pj_norm; } if (proj_angular_input(transform, PJ_FWD)) { /* Input coordinate system expects radians. */ x = rad(x); y = rad(y); } PJ_COORD coord = {{x, y, z, HUGE_VAL}}; coord = proj_trans(transform, PJ_FWD, coord); x = coord.xyzt.x; y = coord.xyzt.y; z = coord.xyzt.z; if (x == HUGE_VAL || y == HUGE_VAL || z == HUGE_VAL) { compile_diagnostic(DIAG_ERR, /*Failed to convert coordinates: %s*/436, proj_errno_string(proj_errno(transform))); /* Set dummy values which are finite. */ x = y = z = 0; } proj_destroy(transform); report_declination(pcs); double lon = rad(x); double lat = rad(y); pcs->z[Q_DECLINATION] = HUGE_REAL; pcs->dec_lat = lat; pcs->dec_lon = lon; pcs->dec_alt = z; pcs->dec_filename = file.filename; pcs->dec_line = file.line; pcs->dec_context = grab_line(); /* Invalidate cached declination. */ pcs->declination = HUGE_REAL; { // PJ_DEFAULT_CTX is really just NULL, but PROJ < 8.1.0 // dereferences the context without a NULL check inside // proj_create_ellipsoidal_2D_cs() so create a context // temporarily to avoid a segmentation fault. PJ_CONTEXT * ctx = PJ_DEFAULT_CTX; #if PROJ_VERSION_MAJOR < 8 || \ (PROJ_VERSION_MAJOR == 8 && PROJ_VERSION_MINOR < 1) ctx = proj_context_create(); #endif PJ *pj = proj_create(ctx, proj_str_out); PJ_COORD lp; lp.lp.lam = lon; lp.lp.phi = lat; #if PROJ_VERSION_MAJOR < 8 || \ (PROJ_VERSION_MAJOR == 8 && PROJ_VERSION_MINOR < 2) /* Code adapted from fix in PROJ 8.2.0 to make proj_factors() work in * cases we need (e.g. a CRS specified as "EPSG:"). */ switch (proj_get_type(pj)) { case PJ_TYPE_PROJECTED_CRS: { /* If it is a projected CRS, then compute the factors on the conversion * associated to it. We need to start from a temporary geographic CRS * using the same datum as the one of the projected CRS, and with * input coordinates being in longitude, latitude order in radian, * to be consistent with the expectations of the lp input parameter. */ PJ * geodetic_crs = proj_get_source_crs(ctx, pj); if (!geodetic_crs) break; PJ * datum = proj_crs_get_datum(ctx, geodetic_crs); #if PROJ_VERSION_MAJOR == 8 || \ (PROJ_VERSION_MAJOR == 7 && PROJ_VERSION_MINOR >= 2) /* PROJ 7.2.0 upgraded to EPSG 10.x which added the concept * of a datum ensemble, and this version of PROJ also added * an API to deal with these. * * If we're using PROJ < 7.2.0 then its EPSG database won't * have datum ensembles, so we don't need any code to handle * them. */ if (!datum) { datum = proj_crs_get_datum_ensemble(ctx, geodetic_crs); } #endif PJ * cs = proj_create_ellipsoidal_2D_cs( ctx, PJ_ELLPS2D_LONGITUDE_LATITUDE, "Radian", 1.0); PJ * temp = proj_create_geographic_crs_from_datum( ctx, "unnamed crs", datum, cs); proj_destroy(datum); proj_destroy(cs); proj_destroy(geodetic_crs); PJ * newOp = proj_create_crs_to_crs_from_pj(ctx, temp, pj, NULL, NULL); proj_destroy(temp); if (newOp) { proj_destroy(pj); pj = newOp; } break; } default: break; } #endif PJ_FACTORS factors = proj_factors(pj, lp); pcs->convergence = factors.meridian_convergence; proj_destroy(pj); #if PROJ_VERSION_MAJOR < 8 || \ (PROJ_VERSION_MAJOR == 8 && PROJ_VERSION_MINOR < 1) proj_context_destroy(ctx); #endif } } else { /* *declination D UNITS */ int units = get_units(BIT(Q_DECLINATION), fFalse); if (units == UNITS_NULL) { return; } pcs->z[Q_DECLINATION] = -v * factor_tab[units]; pcs->convergence = 0; } } #ifndef NO_DEPRECATED static void cmd_default(void) { static const sztok defaulttab[] = { { "CALIBRATE", CMD_CALIBRATE }, { "DATA", CMD_DATA }, { "UNITS", CMD_UNITS }, { NULL, CMD_NULL } }; static int default_depr_count = 0; if (default_depr_count < 5) { /* TRANSLATORS: If you're unsure what "deprecated" means, see: * https://en.wikipedia.org/wiki/Deprecation */ compile_diagnostic(DIAG_WARN|DIAG_COL, /**DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead*/20); if (++default_depr_count == 5) compile_diagnostic(DIAG_WARN, /*Further uses of this deprecated feature will not be reported*/95); } get_token(); switch (match_tok(defaulttab, TABSIZE(defaulttab))) { case CMD_CALIBRATE: default_calib(pcs); break; case CMD_DATA: default_style(pcs); default_grade(pcs); break; case CMD_UNITS: default_units(pcs); break; default: compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown setting “%sâ€*/41, buffer); } } #endif static void cmd_include(void) { char *pth, *fnm = NULL; int fnm_len; #ifndef NO_DEPRECATED prefix *root_store; #endif int ch_store; pth = path_from_fnm(file.filename); read_string(&fnm, &fnm_len); #ifndef NO_DEPRECATED /* Since *begin / *end nesting cannot cross file boundaries we only * need to preserve the prefix if the deprecated *prefix command * can be used */ root_store = root; root = pcs->Prefix; /* Root for include file is current prefix */ #endif ch_store = ch; data_file(pth, fnm); #ifndef NO_DEPRECATED root = root_store; /* and restore root */ #endif ch = ch_store; s_free(&fnm); osfree(pth); } static void cmd_sd(void) { real sd, variance; int units; unsigned long qmask, m; int quantity; qmask = get_qlist(BIT(Q_DECLINATION)); if (!qmask) return; /* no quantities found - error already reported */ if (qmask == BIT(Q_DEFAULT)) { default_grade(pcs); return; } sd = read_numeric(fFalse); if (sd <= (real)0.0) { compile_diagnostic(DIAG_ERR|DIAG_SKIP|DIAG_COL, /*Standard deviation must be positive*/48); return; } units = get_units(qmask, fFalse); if (units == UNITS_NULL) return; sd *= factor_tab[units]; variance = sqrd(sd); for (quantity = 0, m = BIT(quantity); m <= qmask; quantity++, m <<= 1) if (qmask & m) pcs->Var[quantity] = variance; } static void cmd_title(void) { if (!fExplicitTitle && pcs->Prefix == root) { /* If we don't have an explicit title yet, and we're currently in the * root prefix, use this title explicitly. */ fExplicitTitle = fTrue; read_string(&survey_title, &survey_title_len); } else { /* parse and throw away this title (but still check rest of line) */ char *s = NULL; int len; read_string(&s, &len); s_free(&s); } } static const sztok case_tab[] = { {"PRESERVE", OFF}, {"TOLOWER", LOWER}, {"TOUPPER", UPPER}, {NULL, -1} }; static void cmd_case(void) { int setting; get_token(); setting = match_tok(case_tab, TABSIZE(case_tab)); if (setting != -1) { pcs->Case = setting; } else { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€*/10, buffer); } } typedef enum { CS_NONE = -1, CS_CUSTOM, CS_EPSG, CS_ESRI, CS_EUR, CS_IJTSK, CS_JTSK, CS_LAT, CS_LOCAL, CS_LONG, CS_OSGB, CS_S_MERC, CS_UTM } cs_class; static const sztok cs_tab[] = { {"CUSTOM", CS_CUSTOM}, {"EPSG", CS_EPSG}, /* EPSG: */ {"ESRI", CS_ESRI}, /* ESRI: */ {"EUR", CS_EUR}, /* EUR79Z30 */ {"IJTSK", CS_IJTSK}, /* IJTSK or IJTSK03 */ {"JTSK", CS_JTSK}, /* JTSK or JTSK03 */ {"LAT", CS_LAT}, /* LAT-LONG */ {"LOCAL", CS_LOCAL}, {"LONG", CS_LONG}, /* LONG-LAT */ {"OSGB", CS_OSGB}, /* OSGB: */ {"S", CS_S_MERC}, /* S-MERC */ {"UTM", CS_UTM}, /* UTM */ {NULL, CS_NONE} }; static void cmd_cs(void) { char * proj_str = NULL; int proj_str_len; cs_class cs; int cs_sub = INT_MIN; filepos fp; bool output = fFalse; enum { YES, NO, MAYBE } ok_for_output = YES; static bool had_cs = fFalse; if (!had_cs) { had_cs = fTrue; if (first_fix_name) { compile_diagnostic_at(DIAG_ERR, first_fix_filename, first_fix_line, /*Station “%s†fixed before CS command first used*/442, sprint_prefix(first_fix_name)); } } get_pos(&fp); /* Note get_token() only accepts letters - it'll stop at digits so "UTM12" * will give token "UTM". */ get_token(); if (strcmp(ucbuffer, "OUT") == 0) { output = fTrue; get_pos(&fp); get_token(); } cs = match_tok(cs_tab, TABSIZE(cs_tab)); switch (cs) { case CS_NONE: break; case CS_CUSTOM: ok_for_output = MAYBE; get_pos(&fp); read_string(&proj_str, &proj_str_len); cs_sub = 0; break; case CS_EPSG: case CS_ESRI: ok_for_output = MAYBE; if (ch == ':' && isdigit(nextch())) { unsigned n = read_uint(); if (n < 1000000) { cs_sub = (int)n; } } break; case CS_EUR: if (isdigit(ch) && read_uint() == 79 && (ch == 'Z' || ch == 'z') && isdigit(nextch()) && read_uint() == 30) { cs_sub = 7930; } break; case CS_JTSK: ok_for_output = NO; /* FALLTHRU */ case CS_IJTSK: if (ch == '0') { if (nextch() == '3') { nextch(); cs_sub = 3; } } else { cs_sub = 0; } break; case CS_LAT: case CS_LONG: ok_for_output = NO; if (ch == '-') { nextch(); get_token_no_blanks(); cs_class cs2 = match_tok(cs_tab, TABSIZE(cs_tab)); if ((cs ^ cs2) == (CS_LAT ^ CS_LONG)) { cs_sub = 0; } } break; case CS_LOCAL: cs_sub = 0; break; case CS_OSGB: if (ch == ':') { int uch1 = toupper(nextch()); if (strchr("HNOST", uch1)) { int uch2 = toupper(nextch()); if (uch2 >= 'A' && uch2 <= 'Z' && uch2 != 'I') { int x, y; nextch(); if (uch1 > 'I') --uch1; uch1 -= 'A'; if (uch2 > 'I') --uch2; uch2 -= 'A'; x = uch1 % 5; y = uch1 / 5; x = (x * 5) + uch2 % 5; y = (y * 5) + uch2 / 5; cs_sub = y * 25 + x; } } } break; case CS_S_MERC: if (ch == '-') { nextch(); get_token_no_blanks(); if (strcmp(ucbuffer, "MERC") == 0) { cs_sub = 0; } } break; case CS_UTM: if (isdigit(ch)) { unsigned n = read_uint(); if (n >= 1 && n <= 60) { int uch = toupper(ch); cs_sub = (int)n; if (uch == 'S') { nextch(); cs_sub = -cs_sub; } else if (uch == 'N') { nextch(); } } } break; } if (cs_sub == INT_MIN || isalnum(ch)) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Unknown coordinate system*/434); skipline(); return; } /* Actually handle the cs */ switch (cs) { case CS_NONE: break; case CS_CUSTOM: /* proj_str already set */ break; case CS_EPSG: proj_str = osmalloc(32); sprintf(proj_str, "EPSG:%d", cs_sub); break; case CS_ESRI: proj_str = osmalloc(32); sprintf(proj_str, "ESRI:%d", cs_sub); break; case CS_EUR: proj_str = osstrdup("+proj=utm +zone=30 +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs"); break; case CS_IJTSK: if (cs_sub == 0) proj_str = osstrdup("+proj=krovak +ellps=bessel +towgs84=570.8285,85.6769,462.842,4.9984,1.5867,5.2611,3.5623 +no_defs"); else proj_str = osstrdup("+proj=krovak +ellps=bessel +towgs84=485.021,169.465,483.839,7.786342,4.397554,4.102655,0 +no_defs"); break; case CS_JTSK: if (cs_sub == 0) proj_str = osstrdup("+proj=krovak +czech +ellps=bessel +towgs84=570.8285,85.6769,462.842,4.9984,1.5867,5.2611,3.5623 +no_defs"); else proj_str = osstrdup("+proj=krovak +czech +ellps=bessel +towgs84=485.021,169.465,483.839,7.786342,4.397554,4.102655,0 +no_defs"); break; case CS_LAT: /* FIXME: Requires PROJ >= 4.8.0 for +axis, and the SDs will be * misapplied, so we may want to swap ourselves. Also, while * therion supports lat-long, I'm not totally convinced that it is * sensible to do so - people often say "lat-long", but probably * don't think that that's actually "Northing, Easting". This * seems like it'll result in people accidentally getting X and Y * swapped in their fixed points... */ #if 0 proj_str = osstrdup("+proj=longlat +ellps=WGS84 +datum=WGS84 +axis=neu +no_defs"); #endif break; case CS_LOCAL: /* FIXME: Is it useful to be able to explicitly specify this? */ break; case CS_LONG: proj_str = osstrdup("EPSG:4326"); break; case CS_OSGB: { int x = 14 - (cs_sub % 25); int y = (cs_sub / 25) - 20; proj_str = osmalloc(160); sprintf(proj_str, "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=%d +y_0=%d +ellps=airy +datum=OSGB36 +units=m +no_defs", x * 100000, y * 100000); break; } case CS_S_MERC: proj_str = osstrdup("EPSG:3857"); break; case CS_UTM: proj_str = osmalloc(32); if (cs_sub > 0) { sprintf(proj_str, "EPSG:%d", 32600 + cs_sub); } else { sprintf(proj_str, "EPSG:%d", 32700 - cs_sub); } break; } if (!proj_str) { /* printf("CS %d:%d\n", (int)cs, cs_sub); */ set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Unknown coordinate system*/434); skipline(); return; } if (output) { if (ok_for_output == NO) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Coordinate system unsuitable for output*/435); skipline(); return; } if (proj_str_out && strcmp(proj_str, proj_str_out) == 0) { /* Same as the output cs that's already set, so nothing to do. */ osfree(proj_str); return; } if (ok_for_output == MAYBE) { /* We only actually create the transformation from input to output when * we need it, but for a custom proj string or EPSG/ESRI code we need * to check that the specified coordinate system is valid and also if * it's suitable for output so we need to test creating it here. */ PJ* pj = proj_create(PJ_DEFAULT_CTX, proj_str); if (!pj) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Invalid coordinate system: %s*/443, proj_errno_string(proj_context_errno(PJ_DEFAULT_CTX))); skipline(); osfree(proj_str); return; } int type = proj_get_type(pj); if (type == PJ_TYPE_GEOGRAPHIC_2D_CRS || type == PJ_TYPE_GEOGRAPHIC_3D_CRS) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Coordinate system unsuitable for output*/435); skipline(); osfree(proj_str); return; } } if (proj_str_out) { /* If the output cs is already set, subsequent attempts to set it * are silently ignored (so you can combine two datasets and set * the output cs to use before you include either). */ osfree(proj_str); } else { proj_str_out = proj_str; } } else { if (proj_str_out && strcmp(proj_str, proj_str_out) == 0) { /* Same as the current output projection, so valid for input. */ } else if (pcs->proj_str && strcmp(proj_str, pcs->proj_str) == 0) { /* Same as the current input projection, so nothing to do! */ return; } else if (ok_for_output == MAYBE) { /* (ok_for_output == MAYBE) also happens to indicate whether we need * to check that the coordinate system is valid for input. */ PJ* pj = proj_create(PJ_DEFAULT_CTX, proj_str); if (!pj) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_STRING, /*Invalid coordinate system: %s*/443, proj_errno_string(proj_context_errno(PJ_DEFAULT_CTX))); skipline(); return; } proj_destroy(pj); } /* Free current input proj_str if not used by parent. */ settings * p = pcs; if (!p->next || p->proj_str != p->next->proj_str) osfree(p->proj_str); p->proj_str = proj_str; invalidate_pj_cached(); } } static const sztok infer_tab[] = { { "EQUATES", INFER_EQUATES }, { "EXPORTS", INFER_EXPORTS }, { "PLUMBS", INFER_PLUMBS }, #if 0 /* FIXME */ { "SUBSURVEYS", INFER_SUBSURVEYS }, #endif { NULL, INFER_NULL } }; static const sztok onoff_tab[] = { { "OFF", 0 }, { "ON", 1 }, { NULL, -1 } }; static void cmd_infer(void) { infer_what setting; int on; get_token(); setting = match_tok(infer_tab, TABSIZE(infer_tab)); if (setting == INFER_NULL) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€*/31, buffer); return; } get_token(); on = match_tok(onoff_tab, TABSIZE(onoff_tab)); if (on == -1) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Found “%sâ€, expecting “ON†or “OFFâ€*/32, buffer); return; } if (on) { pcs->infer |= BIT(setting); if (setting == INFER_EXPORTS) fExportUsed = fTrue; } else { pcs->infer &= ~BIT(setting); } } static void cmd_truncate(void) { unsigned int truncate_at = 0; /* default is no truncation */ filepos fp; get_pos(&fp); get_token(); if (strcmp(ucbuffer, "OFF") != 0) { if (*ucbuffer) set_pos(&fp); truncate_at = read_uint(); } /* for backward compatibility, "*truncate 0" means "*truncate off" */ pcs->Truncate = (truncate_at == 0) ? INT_MAX : truncate_at; } static void cmd_ref(void) { /* Just syntax check for now. */ char *ref = NULL; int ref_len; read_string(&ref, &ref_len); s_free(&ref); } static void cmd_require(void) { const unsigned int version[] = {COMMAVERSION}; const unsigned int *ver = version; filepos fp; skipblanks(); get_pos(&fp); while (1) { int diff = *ver++ - read_uint(); if (diff > 0) break; if (diff < 0) { size_t i, len; char *v; filepos fp_tmp; /* find end of version number */ while (isdigit(ch) || ch == '.') nextch(); get_pos(&fp_tmp); len = (size_t)(fp_tmp.offset - fp.offset); v = osmalloc(len + 1); set_pos(&fp); for (i = 0; i < len; i++) { v[i] = ch; nextch(); } v[i] = '\0'; /* TRANSLATORS: Feel free to translate as "or newer" instead of "or * greater" if that gives a more natural translation. It's * technically not quite right when there are parallel active release * series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this * seems unlikely to confuse users. "Survex" is the name of the * software, so should not be translated. * * Here "survey" is a "cave map" rather than list of questions - it should be * translated to the terminology that cavers using the language would use. */ fatalerror_in_file(file.filename, file.line, /*Survex version %s or greater required to process this survey data.*/2, v); } if (ch != '.') break; nextch(); if (!isdigit(ch) || ver == version + sizeof(version) / sizeof(*version)) break; } /* skip rest of version number */ while (isdigit(ch) || ch == '.') nextch(); } /* allocate new meta_data if need be */ void copy_on_write_meta(settings *s) { if (!s->meta || s->meta->ref_count != 0) { meta_data * meta_new = osnew(meta_data); if (!s->meta) { meta_new->days1 = meta_new->days2 = -1; } else { *meta_new = *(s->meta); } meta_new->ref_count = 0; s->meta = meta_new; } } static void cmd_date(void) { int year, month, day; int days1, days2; bool implicit_range = fFalse; filepos fp, fp2; get_pos(&fp); read_date(&year, &month, &day); days1 = days_since_1900(year, month ? month : 1, day ? day : 1); if (days1 > current_days_since_1900) { set_pos(&fp); compile_diagnostic(DIAG_WARN|DIAG_DATE, /*Date is in the future!*/80); } skipblanks(); if (ch == '-') { nextch(); get_pos(&fp2); read_date(&year, &month, &day); } else { if (month && day) { days2 = days1; goto read; } implicit_range = fTrue; } if (month == 0) month = 12; if (day == 0) day = last_day(year, month); days2 = days_since_1900(year, month, day); if (!implicit_range && days2 > current_days_since_1900) { set_pos(&fp2); compile_diagnostic(DIAG_WARN|DIAG_DATE, /*Date is in the future!*/80); } if (days2 < days1) { set_pos(&fp); compile_diagnostic(DIAG_ERR|DIAG_TOKEN, /*End of date range is before the start*/81); int tmp = days1; days1 = days2; days2 = tmp; } read: if (!pcs->meta || pcs->meta->days1 != days1 || pcs->meta->days2 != days2) { copy_on_write_meta(pcs); pcs->meta->days1 = days1; pcs->meta->days2 = days2; /* Invalidate cached declination. */ pcs->declination = HUGE_REAL; } } typedef void (*cmd_fn)(void); static const cmd_fn cmd_funcs[] = { cmd_alias, cmd_begin, cmd_calibrate, cmd_case, skipline, /*cmd_copyright,*/ cmd_cs, cmd_data, cmd_date, cmd_declination, #ifndef NO_DEPRECATED cmd_default, #endif cmd_end, cmd_entrance, cmd_equate, cmd_export, cmd_fix, cmd_flags, cmd_include, cmd_infer, skipline, /*cmd_instrument,*/ #ifndef NO_DEPRECATED cmd_prefix, #endif cmd_ref, cmd_require, cmd_sd, cmd_set, solve_network, skipline, /*cmd_team,*/ cmd_title, cmd_truncate, cmd_units }; extern void handle_command(void) { int cmdtok; get_token(); cmdtok = match_tok(cmd_tab, TABSIZE(cmd_tab)); if (cmdtok < 0 || cmdtok >= (int)(sizeof(cmd_funcs) / sizeof(cmd_fn))) { compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Unknown command “%sâ€*/12, buffer); return; } switch (cmdtok) { case CMD_EXPORT: if (!f_export_ok) /* TRANSLATORS: The *EXPORT command is only valid just after *BEGIN * , so this would generate this error: * * *begin fred * 1 2 1.23 045 -6 * *export 2 * *end fred */ compile_diagnostic(DIAG_ERR, /**EXPORT must immediately follow “*BEGIN â€*/57); break; case CMD_ALIAS: case CMD_CALIBRATE: case CMD_CASE: case CMD_COPYRIGHT: case CMD_CS: case CMD_DATA: case CMD_DATE: case CMD_DECLINATION: case CMD_DEFAULT: case CMD_FLAGS: case CMD_INFER: case CMD_INSTRUMENT: case CMD_REF: case CMD_REQUIRE: case CMD_SD: case CMD_SET: case CMD_TEAM: case CMD_TITLE: case CMD_TRUNCATE: case CMD_UNITS: /* These can occur between *begin and *export */ break; default: /* NB: additional handling for "*begin " in cmd_begin */ f_export_ok = fFalse; break; } cmd_funcs[cmdtok](); } survex-1.4.4/src/useful.c0000644000175000017500000000305114141575516012243 00000000000000/* useful.c * Copyright (C) 1993-2021 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "useful.h" #include "osdepend.h" #ifdef WORDS_BIGENDIAN extern void useful_put16(int16_t word, FILE *fh) { uint16_t w = (uint16_t)word; PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); } extern void useful_put32(int32_t word, FILE *fh) { uint32_t w = (uint32_t)word; PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); PUTC((char)(w >> 16l), fh); PUTC((char)(w >> 24l), fh); } extern int16_t useful_get16(FILE *fh) { uint16_t w; w = GETC(fh); w |= (uint16_t)(GETC(fh) << 8l); return (int16_t)w; } extern int32_t useful_get32(FILE *fh) { uint32_t w; w = GETC(fh); w |= (uint32_t)(GETC(fh) << 8l); w |= (uint32_t)(GETC(fh) << 16l); w |= (uint32_t)(GETC(fh) << 24l); return (int32_t)w; } #endif survex-1.4.4/src/thgeomagdata.h0000664000175000017500000012271114205545366013402 00000000000000// generated by geomag/igrf2c.py #ifndef thgeomagdata_h #define thgeomagdata_h static const double thgeomag_GNM[25][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31543, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-677, 2905, 924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1022, -1469, 1256, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {876, 628, 660, -361, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-184, 328, 264, 5, -86, -16, 0, 0, 0, 0, 0, 0, 0, 0, }, {63, 61, -11, -217, -58, 59, -90, 0, 0, 0, 0, 0, 0, 0, }, {70, -55, 0, 34, -41, -21, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -9, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, -1, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31464, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-728, 2928, 1041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1037, -1494, 1239, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {880, 643, 653, -380, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-192, 328, 259, -1, -93, -26, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 60, -11, -221, -57, 57, -92, 0, 0, 0, 0, 0, 0, 0, }, {70, -54, 0, 33, -41, -20, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31354, -2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-769, 2948, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1058, -1524, 1223, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {884, 660, 644, -400, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-201, 327, 253, -9, -102, -38, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 58, -11, -224, -54, 54, -95, 0, 0, 0, 0, 0, 0, 0, }, {71, -54, 1, 32, -40, -19, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31212, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-802, 2956, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1084, -1559, 1212, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {887, 678, 631, -416, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-211, 327, 245, -16, -111, -51, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 57, -10, -228, -51, 49, -98, 0, 0, 0, 0, 0, 0, 0, }, {72, -54, 2, 31, -38, -18, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 2, 3, -8, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31060, -2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-839, 2959, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1111, -1600, 1205, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {889, 695, 616, -424, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-221, 326, 236, -23, -119, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 55, -10, -233, -46, 44, -101, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 2, 29, -37, -16, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30926, -2318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-893, 2969, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1140, -1645, 1202, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {891, 711, 601, -426, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-230, 326, 226, -28, -125, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 54, -9, -238, -40, 39, -103, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 3, 27, -35, -14, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 7, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30805, -2316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-951, 2980, 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1172, -1692, 1205, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {896, 727, 584, -422, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-237, 327, 218, -32, -131, -74, 0, 0, 0, 0, 0, 0, 0, 0, }, {60, 53, -9, -242, -32, 32, -104, 0, 0, 0, 0, 0, 0, 0, }, {74, -54, 4, 25, -34, -12, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 5, -6, 8, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 12, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30715, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1018, 2984, 1550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1206, -1740, 1215, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {903, 744, 565, -415, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 329, 211, -33, -136, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 53, -8, -246, -25, 25, -106, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 23, -33, -11, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 1, 6, -6, 8, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30654, -2292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1106, 2981, 1566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1240, -1790, 1232, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {914, 762, 550, -405, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 334, 208, -33, -141, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {57, 54, -7, -249, -18, 18, -107, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 20, -31, -9, 17, 5, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -10, 1, 6, -5, 9, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 1, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30594, -2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1244, 2990, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1282, -1834, 1255, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {944, 776, 544, -421, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-253, 346, 194, -20, -142, -82, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 57, 6, -246, -25, 21, -104, 0, 0, 0, 0, 0, 0, 0, }, {70, -40, 0, 0, -29, -10, 15, 29, 0, 0, 0, 0, 0, 0, }, {13, 7, -8, -5, 9, 7, -10, 7, 2, 0, 0, 0, 0, 0, }, {5, -21, 1, -11, 3, 16, -3, -4, -3, -4, 0, 0, 0, 0, }, {-3, 11, 1, 2, -5, -1, 8, -1, -3, 5, -2, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30554, -2250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1341, 2998, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -1889, 1274, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {954, 792, 528, -408, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-240, 349, 211, -20, -147, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {54, 57, 4, -247, -16, 12, -105, 0, 0, 0, 0, 0, 0, 0, }, {65, -55, 2, 1, -40, -7, 5, 19, 0, 0, 0, 0, 0, 0, }, {22, 15, -4, -1, 11, 15, -13, 5, -1, 0, 0, 0, 0, 0, }, {3, -7, -1, -25, 10, 5, -5, -2, 3, 8, 0, 0, 0, 0, }, {-8, 4, -1, 13, -4, 4, 12, 3, 2, 10, 3, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30500, -2215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1440, 3003, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1944, 1288, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {958, 796, 510, -397, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-229, 360, 230, -23, -152, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {47, 57, 3, -247, -8, 7, -107, 0, 0, 0, 0, 0, 0, 0, }, {65, -56, 2, 10, -32, -11, 9, 18, 0, 0, 0, 0, 0, 0, }, {11, 9, -6, -14, 6, 10, -7, 6, 9, 0, 0, 0, 0, 0, }, {4, 9, -4, -5, 2, 4, 1, 2, 2, 5, 0, 0, 0, 0, }, {-3, -5, -1, 2, -3, 7, 4, -2, 6, -2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30421, -2169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1555, 3002, 1590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1992, 1289, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 800, 504, -394, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-222, 362, 242, -26, -156, -63, 0, 0, 0, 0, 0, 0, 0, 0, }, {46, 58, 1, -237, -1, -2, -113, 0, 0, 0, 0, 0, 0, 0, }, {67, -56, 5, 15, -32, -7, 17, 8, 0, 0, 0, 0, 0, 0, }, {15, 6, -4, -11, 2, 10, -5, 10, 8, 0, 0, 0, 0, 0, }, {4, 6, 0, -9, 1, 4, -1, -2, 3, -1, 0, 0, 0, 0, }, {1, -3, 4, 0, -1, 4, 6, 1, -1, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30334, -2119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1662, 2997, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -2038, 1292, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 804, 479, -390, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-219, 358, 254, -31, -157, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 61, 8, -228, 4, 1, -111, 0, 0, 0, 0, 0, 0, 0, }, {75, -57, 4, 13, -26, -6, 13, 1, 0, 0, 0, 0, 0, 0, }, {13, 5, -4, -14, 0, 8, -1, 11, 4, 0, 0, 0, 0, 0, }, {8, 10, 2, -13, 10, -1, -1, 5, 1, -2, 0, 0, 0, 0, }, {-2, -3, 2, -5, -2, 4, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30220, -2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1781, 3000, 1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1287, -2091, 1278, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {952, 800, 461, -395, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-216, 359, 262, -42, -160, -56, 0, 0, 0, 0, 0, 0, 0, 0, }, {43, 64, 15, -212, 2, 3, -112, 0, 0, 0, 0, 0, 0, 0, }, {72, -57, 1, 14, -22, -2, 13, -2, 0, 0, 0, 0, 0, 0, }, {14, 6, -2, -13, -3, 5, 0, 11, 3, 0, 0, 0, 0, 0, }, {8, 10, 2, -12, 10, -1, 0, 3, 1, -1, 0, 0, 0, 0, }, {-3, -3, 2, -5, -1, 6, 4, 1, 0, 3, -1, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30100, -2013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1902, 3010, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1276, -2144, 1260, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {946, 791, 438, -405, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 356, 264, -59, -159, -49, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 66, 28, -198, 1, 6, -111, 0, 0, 0, 0, 0, 0, 0, }, {71, -56, 1, 16, -14, 0, 12, -5, 0, 0, 0, 0, 0, 0, }, {14, 6, -1, -12, -8, 4, 0, 10, 1, 0, 0, 0, 0, 0, }, {7, 10, 2, -12, 10, -1, -1, 4, 1, -2, 0, 0, 0, 0, }, {-3, -3, 2, -5, -2, 5, 4, 1, 0, 3, -1, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29992, -1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1997, 3027, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1281, -2180, 1251, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {938, 782, 398, -419, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 357, 261, -74, -162, -48, 0, 0, 0, 0, 0, 0, 0, 0, }, {48, 66, 42, -192, 4, 14, -108, 0, 0, 0, 0, 0, 0, 0, }, {72, -59, 2, 21, -12, 1, 11, -2, 0, 0, 0, 0, 0, 0, }, {18, 6, 0, -11, -7, 4, 3, 6, -1, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 2, -5, 0, 0, 0, 0, }, {-4, -4, 2, -5, -2, 5, 3, 1, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29873, -1905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2072, 3044, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1296, -2208, 1247, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {936, 780, 361, -424, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 355, 253, -93, -164, -46, 0, 0, 0, 0, 0, 0, 0, 0, }, {53, 65, 51, -185, 4, 16, -102, 0, 0, 0, 0, 0, 0, 0, }, {74, -62, 3, 24, -6, 4, 10, 0, 0, 0, 0, 0, 0, 0, }, {21, 6, 0, -11, -9, 4, 4, 4, -4, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 1, -5, 0, 0, 0, 0, }, {-4, -4, 3, -5, -2, 5, 3, 1, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29775, -1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2131, 3059, 1686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1314, -2239, 1248, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {939, 780, 325, -423, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 353, 245, -109, -165, -36, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 65, 59, -178, 3, 18, -96, 0, 0, 0, 0, 0, 0, 0, }, {77, -64, 2, 26, -1, 5, 9, 0, 0, 0, 0, 0, 0, 0, }, {23, 5, -1, -10, -12, 3, 4, 2, -6, 0, 0, 0, 0, 0, }, {4, 9, 1, -12, 9, -4, -2, 7, 1, -6, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 4, 3, 1, 3, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29692, -1784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2200, 3070, 1681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1335, -2267, 1249, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {940, 780, 290, -418, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 352, 235, -118, -166, -17, 0, 0, 0, 0, 0, 0, 0, 0, }, {68, 67, 68, -170, -1, 19, -93, 0, 0, 0, 0, 0, 0, 0, }, {77, -72, 1, 28, 5, 4, 8, -2, 0, 0, 0, 0, 0, 0, }, {25, 6, -6, -9, -14, 9, 6, -5, -7, 0, 0, 0, 0, 0, }, {4, 9, 3, -10, 8, -8, -1, 10, -2, -8, 0, 0, 0, 0, }, {-3, -6, 2, -4, -1, 4, 2, 2, 5, 1, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29619.4, -1728.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2267.7, 3068.4, 1670.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.6, -2288, 1252.1, 714.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {932.3, 786.8, 250, -403, 111.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218.8, 351.4, 222.3, -130.4, -168.6, -12.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.3, 68.2, 74.2, -160.9, -5.9, 16.9, -90.4, 0, 0, 0, 0, 0, 0, 0, }, {79, -74, 0, 33.3, 9.1, 6.9, 7.3, -1.2, 0, 0, 0, 0, 0, 0, }, {24.4, 6.6, -9.2, -7.9, -16.6, 9.1, 7, -7.9, -7, 0, 0, 0, 0, 0, }, {5, 9.4, 3, -8.4, 6.3, -8.9, -1.5, 9.3, -4.3, -8.2, 0, 0, 0, 0, }, {-2.6, -6, 1.7, -3.1, -0.5, 3.7, 1, 2, 4.2, 0.3, -1.1, 0, 0, 0, }, {2.7, -1.7, -1.9, 1.5, -0.1, 0.1, -0.7, 0.7, 1.7, 0.1, 1.2, 4, 0, 0, }, {-2.2, -0.3, 0.2, 0.9, -0.2, 0.9, -0.5, 0.3, -0.3, -0.4, -0.1, -0.2, -0.4, 0, }, {-0.2, -0.9, 0.3, 0.1, -0.4, 1.3, -0.4, 0.7, -0.4, 0.3, -0.1, 0.4, 0, 0.1, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29554.63, -1669.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2337.24, 3047.69, 1657.76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1336.3, -2305.83, 1246.39, 672.51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {920.55, 797.96, 210.65, -379.86, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-227, 354.41, 208.95, -136.54, -168.05, -13.55, 0, 0, 0, 0, 0, 0, 0, 0, }, {73.6, 69.56, 76.74, -151.34, -14.58, 14.58, -86.36, 0, 0, 0, 0, 0, 0, 0, }, {79.88, -74.46, -1.65, 38.73, 12.3, 9.37, 5.42, 1.94, 0, 0, 0, 0, 0, 0, }, {24.8, 7.62, -11.73, -6.88, -18.11, 10.17, 9.36, -11.25, -4.87, 0, 0, 0, 0, 0, }, {5.58, 9.76, 3.58, -6.94, 5.01, -10.76, -1.25, 8.76, -6.66, -9.22, 0, 0, 0, 0, }, {-2.17, -6.12, 1.42, -2.35, -0.15, 3.06, 0.29, 2.06, 3.77, -0.21, -2.09, 0, 0, 0, }, {2.95, -1.6, -1.88, 1.44, -0.31, 0.29, -0.79, 0.53, 1.8, 0.16, 0.96, 3.99, 0, 0, }, {-2.15, -0.29, 0.21, 0.89, -0.38, 0.96, -0.3, 0.46, -0.35, -0.36, 0.08, -0.49, -0.08, 0, }, {-0.16, -0.88, 0.3, 0.28, -0.43, 1.18, -0.37, 0.75, -0.26, 0.35, -0.05, 0.41, -0.1, -0.18, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29496.57, -1586.42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2396.06, 3026.34, 1668.17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.85, -2326.54, 1232.1, 633.73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {912.66, 808.97, 166.58, -356.83, 89.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-230.87, 357.29, 200.26, -141.05, -163.17, -8.03, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.78, 68.69, 75.92, -141.4, -22.83, 13.1, -78.09, 0, 0, 0, 0, 0, 0, 0, }, {80.44, -75, -4.55, 45.24, 14, 10.46, 1.64, 4.92, 0, 0, 0, 0, 0, 0, }, {24.41, 8.21, -14.5, -5.59, -19.34, 11.61, 10.85, -14.05, -3.54, 0, 0, 0, 0, 0, }, {5.5, 9.45, 3.45, -5.27, 3.13, -12.38, -0.76, 8.43, -8.42, -10.08, 0, 0, 0, 0, }, {-1.94, -6.24, 0.89, -1.07, -0.16, 2.45, -0.33, 2.13, 3.09, -1.03, -2.8, 0, 0, 0, }, {3.05, -1.48, -2.03, 1.65, -0.51, 0.54, -0.79, 0.37, 1.79, 0.12, 0.75, 3.75, 0, 0, }, {-2.12, -0.21, 0.3, 1.04, -0.63, 0.95, -0.11, 0.52, -0.39, -0.37, 0.21, -0.77, 0.04, 0, }, {-0.09, -0.89, 0.31, 0.42, -0.45, 1.08, -0.31, 0.78, -0.18, 0.38, 0.02, 0.42, -0.26, -0.26, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29441.46, -1501.77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2445.88, 3012.2, 1676.35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1350.33, -2352.26, 1225.85, 581.69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {907.42, 813.68, 120.49, -334.85, 70.38, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-232.91, 360.14, 192.35, -140.94, -157.4, 4.3, 0, 0, 0, 0, 0, 0, 0, 0, }, {69.55, 67.57, 72.79, -129.85, -28.93, 13.14, -70.85, 0, 0, 0, 0, 0, 0, 0, }, {81.29, -75.99, -6.79, 51.82, 15.07, 9.32, -2.88, 6.61, 0, 0, 0, 0, 0, 0, }, {23.98, 8.89, -16.78, -3.16, -20.56, 13.33, 11.76, -15.98, -2.02, 0, 0, 0, 0, 0, }, {5.33, 8.83, 3.02, -3.22, 0.67, -13.2, -0.1, 8.68, -9.06, -10.54, 0, 0, 0, 0, }, {-2.01, -6.26, 0.17, 0.55, -0.55, 1.7, -0.67, 2.13, 2.33, -1.8, -3.59, 0, 0, 0, }, {3, -1.4, -2.3, 2.08, -0.79, 0.58, -0.7, 0.14, 1.7, -0.22, 0.44, 3.49, 0, 0, }, {-2.09, -0.16, 0.46, 1.23, -0.89, 0.85, 0.1, 0.54, -0.37, -0.43, 0.22, -0.94, -0.03, 0, }, {-0.02, -0.92, 0.42, 0.63, -0.42, 0.96, -0.19, 0.81, -0.13, 0.38, 0.08, 0.46, -0.35, -0.36, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29404.8, -1450.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2499.6, 2982, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1363.2, -2381.2, 1236.2, 525.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {903, 809.5, 86.3, -309.4, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-234.3, 363.2, 187.8, -140.7, -151.2, 13.5, 0, 0, 0, 0, 0, 0, 0, 0, }, {66, 65.5, 72.9, -121.5, -36.2, 13.5, -64.7, 0, 0, 0, 0, 0, 0, 0, }, {80.6, -76.7, -8.2, 56.5, 15.8, 6.4, -7.2, 9.8, 0, 0, 0, 0, 0, 0, }, {23.7, 9.7, -17.6, -0.5, -21.1, 15.3, 13.7, -16.5, -0.3, 0, 0, 0, 0, 0, }, {5, 8.4, 2.9, -1.5, -1.1, -13.2, 1.1, 8.8, -9.3, -11.9, 0, 0, 0, 0, }, {-1.9, -6.2, -0.1, 1.7, -0.9, 0.7, -0.9, 1.9, 1.4, -2.4, -3.8, 0, 0, 0, }, {3, -1.4, -2.5, 2.3, -0.9, 0.3, -0.7, -0.1, 1.4, -0.6, 0.2, 3.1, 0, 0, }, {-2, -0.1, 0.5, 1.3, -1.2, 0.7, 0.3, 0.5, -0.3, -0.5, 0.1, -1.1, -0.3, 0, }, {0.1, -0.9, 0.5, 0.7, -0.3, 0.8, 0, 0.8, 0, 0.4, 0.1, 0.5, -0.5, -0.4, }, }, }; static const double thgeomag_HNM[25][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1061, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -330, 3, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 195, -69, -210, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -210, 53, -33, -124, 3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 83, 2, -35, 36, -69, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -13, -10, -1, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1086, 1065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -357, 34, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 203, -77, -201, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -193, 56, -32, -125, 11, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -7, 86, 4, -32, 32, -67, 0, 0, 0, 0, 0, 0, 0, }, {0, -46, -14, -11, 0, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1128, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -389, 62, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 211, -90, -189, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -172, 57, -33, -126, 21, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -5, 89, 5, -29, 28, -65, 0, 0, 0, 0, 0, 0, 0, }, {0, -47, -14, -12, 1, 28, -13, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1191, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -421, 84, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 218, -109, -173, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -148, 58, -34, -126, 32, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2, 93, 8, -26, 23, -62, 0, 0, 0, 0, 0, 0, 0, }, {0, -48, -14, -12, 2, 28, -15, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1259, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -445, 103, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 220, -134, -153, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -122, 58, -38, -125, 43, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 96, 11, -22, 18, -57, 0, 0, 0, 0, 0, 0, 0, }, {0, -49, -14, -13, 4, 28, -16, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1334, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 119, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 216, -163, -130, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -96, 58, -44, -122, 51, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 99, 14, -18, 13, -52, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -14, -14, 5, 29, -17, -21, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1424, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -480, 133, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 205, -195, -109, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -72, 60, -53, -118, 58, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 102, 19, -16, 8, -46, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, -15, -14, 6, 29, -18, -20, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -14, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1520, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -494, 146, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 188, -226, -90, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, 64, -64, -115, 64, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 104, 25, -15, 4, -40, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -17, -14, 7, 29, -19, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -15, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1614, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 163, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 169, -252, -72, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -33, 71, -75, -113, 69, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 105, 33, -15, 0, -33, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -18, -14, 7, 29, -20, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 5, -15, 5, 19, -5, -19, 0, 0, 0, 0, 0, }, {0, -21, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1702, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 186, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 144, -276, -55, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 95, -67, -119, 82, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 6, 100, 16, -9, -16, -39, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -18, 2, 6, 28, -17, -22, 0, 0, 0, 0, 0, 0, }, {0, 12, -21, -12, -7, 2, 18, 3, -11, 0, 0, 0, 0, 0, }, {0, -27, 17, 29, -9, 4, 9, 6, 1, 8, 0, 0, 0, 0, }, {0, 5, 1, -20, -1, -6, 6, -4, -2, 0, -2, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1810, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -476, 206, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 136, -278, -37, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 103, -87, -122, 80, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1, 99, 33, -12, -12, -30, 0, 0, 0, 0, 0, 0, 0, }, {0, -35, -17, 0, 10, 36, -18, -16, 0, 0, 0, 0, 0, 0, }, {0, 5, -22, 0, -21, -8, 17, -4, -17, 0, 0, 0, 0, 0, }, {0, -24, 19, 12, 2, 2, 8, 8, -11, -7, 0, 0, 0, 0, }, {0, 13, -2, -10, 2, -3, 6, -3, 6, 11, 8, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1898, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 216, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 133, -274, -23, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 15, 110, -98, -121, 78, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 96, 48, -16, -12, -24, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -24, -4, 8, 28, -20, -18, 0, 0, 0, 0, 0, 0, }, {0, 10, -15, 5, -23, 3, 23, -4, -13, 0, 0, 0, 0, 0, }, {0, -11, 12, 7, 6, -2, 10, 7, -6, 5, 0, 0, 0, 0, }, {0, -4, 0, -8, -2, -4, 1, -3, 7, -1, -3, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1967, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -414, 224, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 135, -278, 3, -255, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 16, 125, -117, -114, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -10, 99, 60, -20, -11, -17, 0, 0, 0, 0, 0, 0, 0, }, {0, -55, -28, -6, 7, 23, -18, -17, 0, 0, 0, 0, 0, 0, }, {0, 11, -14, 7, -18, 4, 23, 1, -20, 0, 0, 0, 0, 0, }, {0, -18, 12, 2, 0, -3, 9, 8, 0, 5, 0, 0, 0, 0, }, {0, 4, 1, 0, 2, -5, 1, -1, 6, 0, -7, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2016, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -404, 240, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 148, -269, 13, -269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 19, 128, -126, -97, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -11, 100, 68, -32, -8, -7, 0, 0, 0, 0, 0, 0, 0, }, {0, -61, -27, -2, 6, 26, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 7, -12, 9, -16, 4, 24, -3, -17, 0, 0, 0, 0, 0, }, {0, -22, 15, 7, -4, -5, 10, 10, -4, 1, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 3, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2047, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -366, 251, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 167, -266, 26, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 26, 139, -139, -91, 83, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 100, 72, -37, -6, 1, 0, 0, 0, 0, 0, 0, 0, }, {0, -70, -27, -4, 8, 23, -23, -11, 0, 0, 0, 0, 0, 0, }, {0, 7, -15, 6, -17, 6, 21, -6, -16, 0, 0, 0, 0, 0, }, {0, -21, 16, 6, -4, -5, 10, 11, -2, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, 0, -1, 3, 1, -4, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2067, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -333, 262, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 191, -265, 39, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 31, 148, -152, -83, 88, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -13, 99, 75, -41, -4, 11, 0, 0, 0, 0, 0, 0, 0, }, {0, -77, -26, -5, 10, 22, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 6, -16, 4, -19, 6, 18, -10, -17, 0, 0, 0, 0, 0, }, {0, -21, 16, 7, -4, -5, 10, 11, -3, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, -1, -1, 3, 1, -5, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2129, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -336, 271, -252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 212, -257, 53, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 150, -151, -78, 92, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -15, 93, 71, -43, -2, 17, 0, 0, 0, 0, 0, 0, 0, }, {0, -82, -27, -5, 16, 18, -23, -10, 0, 0, 0, 0, 0, 0, }, {0, 7, -18, 4, -22, 9, 16, -13, -15, 0, 0, 0, 0, 0, }, {0, -21, 16, 9, -5, -6, 9, 10, -6, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2197, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -310, 284, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 232, -249, 69, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 47, 150, -154, -75, 95, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 88, 69, -48, -1, 21, 0, 0, 0, 0, 0, 0, 0, }, {0, -83, -27, -2, 20, 17, -23, -7, 0, 0, 0, 0, 0, 0, }, {0, 8, -19, 5, -23, 11, 14, -15, -11, 0, 0, 0, 0, 0, }, {0, -21, 15, 9, -6, -6, 9, 9, -7, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2279, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -284, 293, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 247, -240, 84, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 154, -153, -69, 97, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 82, 69, -52, 1, 24, 0, 0, 0, 0, 0, 0, 0, }, {0, -80, -26, 0, 21, 17, -23, -4, 0, 0, 0, 0, 0, 0, }, {0, 10, -19, 6, -22, 12, 12, -16, -10, 0, 0, 0, 0, 0, }, {0, -20, 15, 11, -7, -7, 9, 8, -7, 2, 0, 0, 0, 0, }, {0, 2, 1, 3, 6, -4, 0, -2, 3, -1, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2366, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -262, 302, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 262, -236, 97, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 165, -143, -55, 107, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17, 72, 67, -58, 1, 36, 0, 0, 0, 0, 0, 0, 0, }, {0, -69, -25, 4, 24, 17, -24, -6, 0, 0, 0, 0, 0, 0, }, {0, 11, -21, 8, -23, 15, 11, -16, -4, 0, 0, 0, 0, 0, }, {0, -20, 15, 12, -6, -8, 8, 5, -8, 3, 0, 0, 0, 0, }, {0, 1, 0, 4, 5, -5, -1, -2, 1, -2, -7, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5186.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2481.6, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -227.6, 293.4, -491.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 272.6, -231.9, 119.8, -303.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 43.8, 171.9, -133.1, -39.3, 106.3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17.4, 63.7, 65.1, -61.2, 0.7, 43.8, 0, 0, 0, 0, 0, 0, 0, }, {0, -64.6, -24.2, 6.2, 24, 14.8, -25.4, -5.8, 0, 0, 0, 0, 0, 0, }, {0, 11.9, -21.5, 8.5, -21.5, 15.5, 8.9, -14.9, -2.1, 0, 0, 0, 0, 0, }, {0, -19.7, 13.4, 12.5, -6.2, -8.4, 8.4, 3.8, -8.2, 4.8, 0, 0, 0, 0, }, {0, 1.7, 0, 4, 4.9, -5.9, -1.2, -2.9, 0.2, -2.2, -7.4, 0, 0, 0, }, {0, 0.1, 1.3, -0.9, -2.6, 0.9, -0.7, -2.8, -0.9, -1.2, -1.9, -0.9, 0, 0, }, {0, -0.4, 0.3, 2.5, -2.6, 0.7, 0.3, 0, 0, 0.3, -0.9, -0.4, 0.8, 0, }, {0, -0.9, 0.2, 1.8, -0.4, -1, -0.1, 0.7, 0.3, 0.6, 0.3, -0.2, -0.5, -0.9, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5077.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2594.5, -515.43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -198.86, 269.72, -524.72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 282.07, -225.23, 145.15, -305.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 42.72, 180.25, -123.45, -19.57, 103.85, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.33, 54.75, 63.63, -63.53, 0.24, 50.94, 0, 0, 0, 0, 0, 0, 0, }, {0, -61.14, -22.57, 6.82, 25.35, 10.93, -26.32, -4.64, 0, 0, 0, 0, 0, 0, }, {0, 11.2, -20.88, 9.83, -19.71, 16.22, 7.61, -12.76, -0.06, 0, 0, 0, 0, 0, }, {0, -20.11, 12.69, 12.67, -6.72, -8.16, 8.1, 2.92, -7.73, 6.01, 0, 0, 0, 0, }, {0, 2.19, 0.1, 4.46, 4.76, -6.58, -1.01, -3.47, -0.86, -2.31, -7.93, 0, 0, 0, }, {0, 0.26, 1.44, -0.77, -2.27, 0.9, -0.58, -2.69, -1.08, -1.58, -1.9, -1.39, 0, 0, }, {0, -0.55, 0.23, 2.38, -2.63, 0.61, 0.4, 0.01, 0.02, 0.28, -0.87, -0.34, 0.88, 0, }, {0, -0.76, 0.33, 1.72, -0.54, -1.07, -0.04, 0.63, 0.21, 0.53, 0.38, -0.22, -0.57, -0.82, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4944.26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2708.54, -575.73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -160.4, 251.75, -537.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 286.48, -211.03, 164.46, -309.72, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 44.58, 189.01, -118.06, -0.01, 101.04, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.9, 44.18, 61.54, -66.26, 3.02, 55.4, 0, 0, 0, 0, 0, 0, 0, }, {0, -57.8, -21.2, 6.54, 24.96, 7.03, -27.61, -3.28, 0, 0, 0, 0, 0, 0, }, {0, 10.84, -20.03, 11.83, -17.41, 16.71, 6.96, -10.74, 1.64, 0, 0, 0, 0, 0, }, {0, -20.54, 11.51, 12.75, -7.14, -7.42, 7.97, 2.14, -6.08, 7.01, 0, 0, 0, 0, }, {0, 2.73, -0.1, 4.71, 4.44, -7.22, -0.96, -3.95, -1.99, -1.97, -8.31, 0, 0, 0, }, {0, 0.13, 1.67, -0.66, -1.76, 0.85, -0.39, -2.51, -1.27, -2.11, -1.94, -1.86, 0, 0, }, {0, -0.87, 0.27, 2.13, -2.49, 0.49, 0.59, 0, 0.13, 0.27, -0.86, -0.23, 0.87, 0, }, {0, -0.87, 0.3, 1.66, -0.59, -1.14, -0.07, 0.54, 0.1, 0.49, 0.44, -0.25, -0.53, -0.79, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4795.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2845.41, -642.17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -115.29, 245.04, -538.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 283.54, -188.43, 180.95, -329.23, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46.98, 196.98, -119.14, 15.98, 100.12, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.61, 33.3, 58.74, -66.64, 7.35, 62.41, 0, 0, 0, 0, 0, 0, 0, }, {0, -54.27, -19.53, 5.59, 24.45, 3.27, -27.5, -2.32, 0, 0, 0, 0, 0, 0, }, {0, 10.04, -18.26, 13.18, -14.6, 16.16, 5.69, -9.1, 2.26, 0, 0, 0, 0, 0, }, {0, -21.77, 10.76, 11.74, -6.74, -6.88, 7.79, 1.04, -3.89, 8.44, 0, 0, 0, 0, }, {0, 3.28, -0.4, 4.55, 4.4, -7.92, -0.61, -4.16, -2.85, -1.12, -8.72, 0, 0, 0, }, {0, 0, 2.11, -0.6, -1.05, 0.76, -0.2, -2.12, -1.44, -2.57, -2.01, -2.34, 0, 0, }, {0, -1.08, 0.37, 1.75, -2.19, 0.27, 0.72, -0.09, 0.29, 0.23, -0.89, -0.16, 0.72, 0, }, {0, -0.88, 0.49, 1.56, -0.5, -1.24, -0.1, 0.42, -0.04, 0.48, 0.48, -0.3, -0.43, -0.71, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4652.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2991.6, -734.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -82.1, 241.9, -543.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 281.9, -158.4, 199.7, -349.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 47.7, 208.3, -121.2, 32.3, 98.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -19.1, 25.1, 52.8, -64.5, 8.9, 68.1, 0, 0, 0, 0, 0, 0, 0, }, {0, -51.5, -16.9, 2.2, 23.5, -2.2, -27.2, -1.8, 0, 0, 0, 0, 0, 0, }, {0, 8.4, -15.3, 12.8, -11.7, 14.9, 3.6, -6.9, 2.8, 0, 0, 0, 0, 0, }, {0, -23.4, 11, 9.8, -5.1, -6.3, 7.8, 0.4, -1.4, 9.6, 0, 0, 0, 0, }, {0, 3.4, -0.2, 3.6, 4.8, -8.6, -0.1, -4.3, -3.4, -0.1, -8.8, 0, 0, 0, }, {0, 0, 2.5, -0.6, -0.4, 0.6, -0.2, -1.7, -1.6, -3, -2, -2.6, 0, 0, }, {0, -1.2, 0.5, 1.4, -1.8, 0.1, 0.8, -0.2, 0.6, 0.2, -0.9, 0, 0.5, 0, }, {0, -0.9, 0.6, 1.4, -0.4, -1.3, -0.1, 0.3, -0.1, 0.5, 0.5, -0.4, -0.4, -0.6, }, }, }; static const double thgeomag_GNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {5.7, 7.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-11, -7, -2.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {2.2, -5.9, 3.1, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1.2, -1.6, -5.9, 5.2, -5.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.3, 0.5, -0.6, 0.2, 1.3, 0.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.5, -0.3, 0.4, 1.3, -1.4, 0, 0.9, 0, 0, 0, 0, 0, 0, 0, }, {-0.1, -0.2, 0, 0.7, 0.1, -0.5, -0.8, 0.8, 0, 0, 0, 0, 0, 0, }, {0, 0.1, -0.1, 0.4, -0.1, 0.4, 0.3, -0.1, 0.4, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }; static const double thgeomag_HNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -25.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -30.2, -22.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 6, -1.1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -0.1, 6.5, 3.6, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 2.5, -0.6, 3, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, -1.6, -1.3, 0.8, 0, 1, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.6, 0.6, -0.8, -0.2, -1.1, 0.1, 0.3, 0, 0, 0, 0, 0, 0, }, {0, -0.2, 0.6, -0.2, 0.5, -0.3, -0.4, 0.5, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }; #define thgeomag_maxmindex 24 #define thgeomag_step 5 #define thgeomag_minyear 1900 #define thgeomag_maxdeg 13 #endif survex-1.4.4/src/date.h0000644000175000017500000000222514141575516011664 00000000000000/* date.h * Routines for date handling * Copyright (C) 2010,2015,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef __cplusplus extern "C" { #endif extern int is_leap_year(int year); /* Return last day for given month of given year. */ unsigned int last_day(int year, int month); int days_since_1900(int y, int m, int d); void ymd_from_days_since_1900(int days, int * py, int * pm, int * pd); double julian_date_from_days_since_1900(int days); #ifdef __cplusplus } #endif survex-1.4.4/src/vrotatemask.xbm0000644000175000017500000000161214141575516013645 00000000000000#define vrotatemask_width 32 #define vrotatemask_height 32 static unsigned char vrotatemask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/Makefile.am0000644000175000017500000001056714312175356012640 00000000000000## Process this file with automake to produce Makefile.in noinst_HEADERS = cavern.h commands.h cmdline.h date.h datain.h debug.h\ filelist.h filename.h getopt.h hash.h img.c img.h img_hosted.h kml.h\ labelinfo.h listpos.h matrix.h message.h namecmp.h namecompare.h netartic.h\ netbits.h netskel.h network.h osalloc.h\ osdepend.h ostypes.h out.h readval.h str.h useful.h validate.h whichos.h\ glbitmapfont.h gllogerror.h guicontrol.h gla.h gpx.h moviemaker.h\ export3d.h exportfilter.h hpgl.h cavernlog.h aboutdlg.h aven.h avenpal.h\ gfxcore.h json.h log.h mainfrm.h pos.h vector3.h wx.h aventypes.h\ aventreectrl.h export.h model.h printing.h avenprcore.h img2aven.h\ thgeomag.h thgeomagdata.h moviemaker-legacy.cc LDADD = $(LIBOBJS) # FIXME: mingw_progs in top level Makefile.am needs keeping in step with this bin_PROGRAMS = cavern diffpos dump3d extend sorterr survexport aven install-exec-hook: ln $(DESTDIR)$(bindir)/survexport$(EXEEXT) \ $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) || \ cp -p $(DESTDIR)$(bindir)/survexport$(EXEEXT) \ $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) uninstall-hook: rm -f $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) check_PROGRAMS = imgtest COMMONSRC = cmdline.c message.c str.c filename.c osdepend.c z_getopt.c getopt1.c cavern_SOURCES = cavern.c date.c listpos.c commands.c datain.c netskel.c \ network.c readval.c matrix.c img_hosted.c netbits.c useful.c \ validate.c netartic.c thgeomag.c \ $(COMMONSRC) cavern_LDADD = $(PROJ_LIBS) aven_SOURCES = aven.cc gfxcore.cc mainfrm.cc model.cc vector3.cc aboutdlg.cc \ namecompare.cc aventreectrl.cc export.cc export3d.cc guicontrol.cc gla-gl.cc \ glbitmapfont.cc gpx.cc json.cc kml.cc log.cc moviemaker.cc hpgl.cc \ cavernlog.cc avenprcore.cc printing.cc buttontaghandler.cc pos.cc \ date.c img_hosted.c useful.c hash.c \ brotatemask.xbm brotate.xbm handmask.xbm hand.xbm \ rotatemask.xbm rotate.xbm vrotatemask.xbm vrotate.xbm \ rotatezoom.xbm rotatezoommask.xbm \ $(COMMONSRC) dump3d_SOURCES = dump3d.c date.c img_hosted.c useful.c \ $(COMMONSRC) if WIN32 aven_LDADD = avenrc.o $(LIBOBJS) $(LIBAV_LIBS) $(WX_LIBS) $(PROJ_LIBS) avenrc.o: $(srcdir)/aven.rc ../lib/icons/aven.ico pwd=`pwd` && cd $(srcdir) && `$(WX_CONFIG) --rescomp` --include-dir "$$pwd/../lib/icons" -o "$$pwd/avenrc.o" aven.rc else aven_LDADD = $(LIBOBJS) $(WX_LIBS) $(PROJ_LIBS) $(LIBAV_LIBS) endif AM_CFLAGS += $(PROJ_CFLAGS) aven_CFLAGS = $(AM_CFLAGS) $(WX_CFLAGS) -DAVEN aven_CXXFLAGS = $(AM_CXXFLAGS) $(PROJ_CFLAGS) $(LIBAV_CFLAGS) $(WX_CXXFLAGS) aven_LDFLAGS = survexport_CXXFLAGS = $(AM_CXXFLAGS) $(PROJ_CFLAGS) $(WX_CXXFLAGS) survexport_LDFLAGS = survexport_LDADD = $(LIBOBJS) $(WX_LIBS) $(PROJ_LIBS) if MACOS # FIXME: It looks like modern wx-config should give us this... aven_LDFLAGS += -framework OpenGL endif diffpos_SOURCES = diffpos.c namecmp.c img_hosted.c useful.c hash.c \ $(COMMONSRC) sorterr_SOURCES = sorterr.c $(COMMONSRC) extend_SOURCES = extend.c img_hosted.c useful.c hash.c \ $(COMMONSRC) survexport_SOURCES = survexport.cc model.cc export.cc export3d.cc \ namecompare.cc useful.c hash.c img_hosted.c \ gpx.cc hpgl.cc json.cc kml.cc pos.cc vector3.cc $(COMMONSRC) #testerr_SOURCES = testerr.c message.c filename.c useful.c osdepend.c imgtest_SOURCES = imgtest.c img.c all_sources = \ $(noinst_HEADERS) \ $(COMMONSRC) \ $(cavern_SOURCES) \ $(aven_SOURCES) \ $(dump3d_SOURCES) \ $(diffpos_SOURCES) \ $(sorterr_SOURCES) \ $(extend_SOURCES) \ $(survexport_SOURCES) ../lib/survex.pox: $(all_sources) ../lib/extract-msgs.pl cd $(srcdir)/../lib && ./extract-msgs.pl `echo $(all_sources)|perl -ne 'print "../src/$$_\n" for sort split'|uniq` > survex.pox EXTRA_DIST = \ aven.rc getopt.c gettexttomsg.pl gradient.pov gdtconvert gen_img2aven \ igrf13coeffs.txt igrf2c.py BUILT_SOURCES = z_getopt.c avenpal.h img2aven.h thgeomagdata.h z_getopt.c: getopt.c gettexttomsg.pl ./gettexttomsg.pl `test -f getopt.c || echo '$(srcdir)/'`getopt.c > z_getopt.c~ && mv z_getopt.c~ z_getopt.c avenpal.h: $(srcdir)/gdtconvert $(srcdir)/gradient.pov $(srcdir)/gdtconvert < $(srcdir)/gradient.pov > tmp-avenpal.h && mv tmp-avenpal.h avenpal.h img2aven.h: $(srcdir)/gen_img2aven $(srcdir)/gen_img2aven > tmp-img2aven.h && mv tmp-img2aven.h img2aven.h PYTHON = python3 thgeomagdata.h: $(srcdir)/igrf2c.py $(srcdir)/igrf13coeffs.txt $(PYTHON) $(srcdir)/igrf2c.py $(srcdir)/igrf13coeffs.txt mv ../thgeomagdata.h . MAINTAINERCLEANFILES =\ $(BUILT_SOURCES) survex-1.4.4/src/cmdline.h0000644000175000017500000000503014141575516012357 00000000000000/* cmdline.h * Wrapper for GNU getopt which deals with standard options * Copyright (C) 1998-2001,2003,2011 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef CMDLINE_H # define CMDLINE_H #ifdef __cplusplus extern "C" { #endif /* Duplicate these from getopt.h to avoid problems * with trying to compile getopt.h with C++ on macOS */ #ifndef no_argument /* These values are definitely correct since getopt.h says 0, 1, 2 work */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 /* FIXME: struct definition needs to match getopt.h */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about * type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; extern char *optarg; extern int optind; extern int opterr; extern int optopt; #endif struct help_msg { int opt; int msg_no; const char * arg; }; /* give -1 for max_args_ if there's no limit */ void cmdline_init(int argc_, char *const *argv_, const char *shortopts_, const struct option *longopts_, int *longind_, const struct help_msg *help_, int min_args_, int max_args_); /* if args not 0, use instead of auto-generated FILE args */ /* if extra not 0, display as extra blurb at end */ /* if arg not NULL, extra must be a printf format with one %s */ void cmdline_set_syntax_message(int msg_args, int msg_extra, const char * arg); int cmdline_getopt(void); void cmdline_help(void); void cmdline_version(void); void cmdline_syntax(void); void cmdline_too_few_args(void); void cmdline_too_many_args(void); int cmdline_int_arg(void); double cmdline_double_arg(void); #define HLP_ENCODELONG(N) (-(N + 1)) #define HLP_DECODELONG(N) (-(N + 1)) #define HLP_ISLONG(N) ((N) <= 0) #define HLP_HELP 30000 #define HLP_VERSION 30001 #ifdef __cplusplus } #endif #endif survex-1.4.4/src/aboutdlg.h0000644000175000017500000000236714141575516012557 00000000000000// // aboutdlg.h // // About box handling for Aven. // // Copyright (C) 2001, Mark R. Shinwell. // Copyright (C) 2004,2005,2010,2015 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef aboutdlg_h #define aboutdlg_h #include "wx.h" enum { about_TIMER = 1000 }; class AboutDlg : public wxDialog { public: AboutDlg(wxWindow* parent, const wxIcon & app_icon); void OnTimer(wxTimerEvent &e); void OnCopy(wxCommandEvent &e); private: wxBitmap bitmap; wxString img_path; wxTimer timer; wxString info; DECLARE_EVENT_TABLE() }; #endif survex-1.4.4/src/matrix.c0000644000175000017500000003100514142042211012222 00000000000000/* matrix.c * Matrix building and solving routines * Copyright (C) 1993-2003,2010,2013 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*#define SOR 1*/ #if 0 # define DEBUG_INVALID 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include "debug.h" #include "cavern.h" #include "filename.h" #include "message.h" #include "netbits.h" #include "matrix.h" #include "out.h" #undef PRINT_MATRICES #define PRINT_MATRICES 0 #undef DEBUG_MATRIX_BUILD #define DEBUG_MATRIX_BUILD 0 #undef DEBUG_MATRIX #define DEBUG_MATRIX 0 #if PRINT_MATRICES static void print_matrix(real *M, real *B, long n); #endif static void choleski(real *M, real *B, long n); #ifdef SOR static void sor(real *M, real *B, long n); #endif /* for M(row, col) col must be <= row, so Y <= X */ # define M(X, Y) ((real *)M)[((((OSSIZE_T)(X)) * ((X) + 1)) >> 1) + (Y)] /* +(Y>X?0*printf("row> 1) + (X)]*/ static int find_stn_in_tab(node *stn); static int add_stn_to_tab(node *stn); static void build_matrix(node *list); static long n_stn_tab; static pos **stn_tab; extern void solve_matrix(node *list) { node *stn; long n = 0; FOR_EACH_STN(stn, list) { if (!fixed(stn)) n++; } if (n == 0) return; /* we just need n to be a reasonable estimate >= the number * of stations left after reduction. If memory is * plentiful, we can be crass. */ stn_tab = osmalloc((OSSIZE_T)(n * ossizeof(pos*))); n_stn_tab = 0; FOR_EACH_STN(stn, list) { if (!fixed(stn)) add_stn_to_tab(stn); } if (n_stn_tab < n) { /* release unused entries in stn_tab */ stn_tab = osrealloc(stn_tab, n_stn_tab * ossizeof(pos*)); } build_matrix(list); #if DEBUG_MATRIX FOR_EACH_STN(stn, list) { printf("(%8.2f, %8.2f, %8.2f ) ", POS(stn, 0), POS(stn, 1), POS(stn, 2)); print_prefix(stn->name); putnl(); } #endif osfree(stn_tab); } #ifdef NO_COVARIANCES # define FACTOR 1 #else # define FACTOR 3 #endif static void build_matrix(node *list) { real *M; real *B; int dim; if (n_stn_tab == 0) { if (!fQuiet) puts(msg(/*Network solved by reduction - no simultaneous equations to solve.*/74)); return; } /* (OSSIZE_T) cast may be needed if n_stn_tab>=181 */ M = osmalloc((OSSIZE_T)((((OSSIZE_T)n_stn_tab * FACTOR * (n_stn_tab * FACTOR + 1)) >> 1)) * ossizeof(real)); B = osmalloc((OSSIZE_T)(n_stn_tab * FACTOR * ossizeof(real))); if (!fQuiet) { if (n_stn_tab == 1) out_current_action(msg(/*Solving one equation*/78)); else out_current_action1(msg(/*Solving %d simultaneous equations*/75), n_stn_tab); } #ifdef NO_COVARIANCES dim = 2; #else dim = 0; /* fudge next loop for now */ #endif for ( ; dim >= 0; dim--) { node *stn; int row; /* Initialise M and B to zero - zeroing "linearly" will minimise * paging when the matrix is large */ { int end = n_stn_tab * FACTOR; for (row = 0; row < end; row++) B[row] = (real)0.0; end = ((OSSIZE_T)n_stn_tab * FACTOR * (n_stn_tab * FACTOR + 1)) >> 1; for (row = 0; row < end; row++) M[row] = (real)0.0; } /* Construct matrix - Go thru' stn list & add all forward legs between * two unfixed stations to M (so each leg goes on exactly once). * * All legs between two fixed stations can be ignored here. * * All legs between a fixed and an unfixed station are then considered * from the unfixed end (if we consider them from the fixed end we'd * need to somehow detect when we're at a fixed point cut line and work * out which side we're dealing with at this time. */ FOR_EACH_STN(stn, list) { #ifdef NO_COVARIANCES real e; #else svar e; delta a; #endif int f, t; int dirn; #if DEBUG_MATRIX_BUILD print_prefix(stn->name); printf(" used: %d colour %ld\n", (!!stn->leg[2]) << 2 | (!!stn -> leg[1]) << 1 | (!!stn->leg[0]), stn->colour); for (dirn = 0; dirn <= 2 && stn->leg[dirn]; dirn++) { #ifdef NO_COVARIANCES printf("Leg %d, vx=%f, reverse=%d, to ", dirn, stn->leg[dirn]->v[0], stn->leg[dirn]->l.reverse); #else printf("Leg %d, vx=%f, reverse=%d, to ", dirn, stn->leg[dirn]->v[0][0], stn->leg[dirn]->l.reverse); #endif print_prefix(stn->leg[dirn]->l.to->name); putnl(); } putnl(); #endif /* DEBUG_MATRIX_BUILD */ if (!fixed(stn)) { f = find_stn_in_tab(stn); for (dirn = 0; dirn <= 2 && stn->leg[dirn]; dirn++) { linkfor *leg = stn->leg[dirn]; node *to = leg->l.to; if (fixed(to)) { bool fRev = !data_here(leg); if (fRev) leg = reverse_leg(leg); /* Ignore equated nodes */ #ifdef NO_COVARIANCES e = leg->v[dim]; if (e != (real)0.0) { e = ((real)1.0) / e; M(f,f) += e; B[f] += e * POS(to, dim); if (fRev) { B[f] += leg->d[dim]; } else { B[f] -= leg->d[dim]; } } #else if (invert_svar(&e, &leg->v)) { delta b; int i; if (fRev) { adddd(&a, &POSD(to), &leg->d); } else { subdd(&a, &POSD(to), &leg->d); } mulsd(&b, &e, &a); for (i = 0; i < 3; i++) { M(f * FACTOR + i, f * FACTOR + i) += e[i]; B[f * FACTOR + i] += b[i]; } M(f * FACTOR + 1, f * FACTOR) += e[3]; M(f * FACTOR + 2, f * FACTOR) += e[4]; M(f * FACTOR + 2, f * FACTOR + 1) += e[5]; } #endif } else if (data_here(leg)) { /* forward leg, unfixed -> unfixed */ t = find_stn_in_tab(to); #if DEBUG_MATRIX printf("Leg %d to %d, var %f, delta %f\n", f, t, e, leg->d[dim]); #endif /* Ignore equated nodes & lollipops */ #ifdef NO_COVARIANCES e = leg->v[dim]; if (t != f && e != (real)0.0) { real a; e = ((real)1.0) / e; M(f,f) += e; M(t,t) += e; if (f < t) M(t,f) -= e; else M(f,t) -= e; a = e * leg->d[dim]; B[f] -= a; B[t] += a; } #else if (t != f && invert_svar(&e, &leg->v)) { int i; mulsd(&a, &e, &leg->d); for (i = 0; i < 3; i++) { M(f * FACTOR + i, f * FACTOR + i) += e[i]; M(t * FACTOR + i, t * FACTOR + i) += e[i]; if (f < t) M(t * FACTOR + i, f * FACTOR + i) -= e[i]; else M(f * FACTOR + i, t * FACTOR + i) -= e[i]; B[f * FACTOR + i] -= a[i]; B[t * FACTOR + i] += a[i]; } M(f * FACTOR + 1, f * FACTOR) += e[3]; M(t * FACTOR + 1, t * FACTOR) += e[3]; M(f * FACTOR + 2, f * FACTOR) += e[4]; M(t * FACTOR + 2, t * FACTOR) += e[4]; M(f * FACTOR + 2, f * FACTOR + 1) += e[5]; M(t * FACTOR + 2, t * FACTOR + 1) += e[5]; if (f < t) { M(t * FACTOR + 1, f * FACTOR) -= e[3]; M(t * FACTOR, f * FACTOR + 1) -= e[3]; M(t * FACTOR + 2, f * FACTOR) -= e[4]; M(t * FACTOR, f * FACTOR + 2) -= e[4]; M(t * FACTOR + 2, f * FACTOR + 1) -= e[5]; M(t * FACTOR + 1, f * FACTOR + 2) -= e[5]; } else { M(f * FACTOR + 1, t * FACTOR) -= e[3]; M(f * FACTOR, t * FACTOR + 1) -= e[3]; M(f * FACTOR + 2, t * FACTOR) -= e[4]; M(f * FACTOR, t * FACTOR + 2) -= e[4]; M(f * FACTOR + 2, t * FACTOR + 1) -= e[5]; M(f * FACTOR + 1, t * FACTOR + 2) -= e[5]; } } #endif } } } } #if PRINT_MATRICES print_matrix(M, B, n_stn_tab * FACTOR); /* 'ave a look! */ #endif #ifdef SOR /* defined in network.c, may be altered by -z on command line */ if (optimize & BITA('i')) sor(M, B, n_stn_tab * FACTOR); else #endif choleski(M, B, n_stn_tab * FACTOR); { int m; for (m = (int)(n_stn_tab - 1); m >= 0; m--) { #ifdef NO_COVARIANCES stn_tab[m]->p[dim] = B[m]; if (dim == 0) { SVX_ASSERT2(pos_fixed(stn_tab[m]), "setting station coordinates didn't mark pos as fixed"); } #else int i; for (i = 0; i < 3; i++) { stn_tab[m]->p[i] = B[m * FACTOR + i]; } SVX_ASSERT2(pos_fixed(stn_tab[m]), "setting station coordinates didn't mark pos as fixed"); #endif } #if EXPLICIT_FIXED_FLAG for (m = n_stn_tab - 1; m >= 0; m--) fixpos(stn_tab[m]); #endif } } osfree(B); osfree(M); } static int find_stn_in_tab(node *stn) { int i = 0; pos *p = stn->name->pos; while (stn_tab[i] != p) if (++i == n_stn_tab) { #if DEBUG_INVALID fputs("Station ", stderr); fprint_prefix(stderr, stn->name); fputs(" not in table\n\n", stderr); #endif #if 0 print_prefix(stn->name); printf(" used: %d colour %d\n", (!!stn->leg[2])<<2 | (!!stn->leg[1])<<1 | (!!stn->leg[0]), stn->colour); #endif fatalerror(/*Bug in program detected! Please report this to the authors*/11); } return i; } static int add_stn_to_tab(node *stn) { int i; pos *p = stn->name->pos; for (i = 0; i < n_stn_tab; i++) { if (stn_tab[i] == p) return i; } stn_tab[n_stn_tab++] = p; return i; } /* Solve MX=B for X by Choleski factorisation - modified Choleski actually * since we factor into LDL' while Choleski is just LL' */ /* Note M must be symmetric positive definite */ /* routine is entitled to scribble on M and B if it wishes */ static void choleski(real *M, real *B, long n) { int i, j, k; for (j = 1; j < n; j++) { real V; for (i = 0; i < j; i++) { V = (real)0.0; for (k = 0; k < i; k++) V += M(i,k) * M(j,k) * M(k,k); M(j,i) = (M(j,i) - V) / M(i,i); } V = (real)0.0; for (k = 0; k < j; k++) V += M(j,k) * M(j,k) * M(k,k); M(j,j) -= V; /* may be best to add M() last for numerical reasons too */ } /* Multiply x by L inverse */ for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { B[j] -= M(j,i) * B[i]; } } /* Multiply x by D inverse */ for (i = 0; i < n; i++) { B[i] /= M(i,i); } /* Multiply x by (L transpose) inverse */ for (i = (int)(n - 1); i > 0; i--) { for (j = i - 1; j >= 0; j--) { B[j] -= M(i,j) * B[i]; } } /* printf("\n%ld/%ld\n\n",flops,flopsTot); */ } #ifdef SOR /* factor to use for SOR (must have 1 <= SOR_factor < 2) */ #define SOR_factor 1.93 /* 1.95 */ /* Solve MX=B for X by SOR of Gauss-Siedel */ /* routine is entitled to scribble on M and B if it wishes */ static void sor(real *M, real *B, long n) { real t, x, delta, threshold, t2; int row, col; real *X; long it = 0; X = osmalloc(n * ossizeof(real)); threshold = 0.00001; printf("reciprocating diagonal\n"); /* TRANSLATE */ /* munge diagonal so we can multiply rather than divide */ for (row = n - 1; row >= 0; row--) { M(row,row) = 1 / M(row,row); X[row] = 0; } printf("starting iteration\n"); /* TRANSLATE */ do { /*printf("*");*/ it++; t = 0.0; for (row = 0; row < n; row++) { x = B[row]; for (col = 0; col < row; col++) x -= M(row,col) * X[col]; for (col++; col < n; col++) x -= M(col,row) * X[col]; x *= M(row,row); delta = (x - X[row]) * SOR_factor; X[row] += delta; t2 = fabs(delta); if (t2 > t) t = t2; } printf("% 6d: %8.6f\n", it, t); } while (t >= threshold && it < 100000); if (t >= threshold) { fprintf(stderr, "*not* converged after %ld iterations\n", it); BUG("iteration stinks"); } printf("%ld iterations\n", it); /* TRANSLATE */ #if 0 putnl(); for (row = n - 1; row >= 0; row--) { t = 0.0; for (col = 0; col < row; col++) t += M(row, col) * X[col]; t += X[row] / M(row, row); for (col = row + 1; col < n; col++) t += M(col, row) * X[col]; printf("[ %f %f ]\n", t, B[row]); } #endif for (row = n - 1; row >= 0; row--) B[row] = X[row]; osfree(X); printf("\ndone\n"); /* TRANSLATE */ } #endif #if PRINT_MATRICES static void print_matrix(real *M, real *B, long n) { long row, col; printf("Matrix, M and vector, B:\n"); for (row = 0; row < n; row++) { for (col = 0; col <= row; col++) printf("%6.2f\t", M(row, col)); for (; col <= n; col++) printf(" \t"); printf("\t%6.2f\n", B[row]); } putnl(); return; } #endif survex-1.4.4/src/img.h0000644000175000017500000003341714142356022011520 00000000000000/* img.h * Header file for routines to read and write processed survey data files * * These routines support reading processed survey data in a variety of formats * - currently: * * - Survex ".3d" image files * - Survex ".pos" files * - Compass Plot files (".plt" and ".plf") * - CMAP XYZ files (".sht", ".adj", ".una", ".xyz") * * Writing Survex ".3d" image files is supported. * * Copyright (C) Olly Betts 1993,1994,1997,2001,2002,2003,2004,2005,2006,2010,2011,2012,2013,2014,2016,2018 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMG_H # define IMG_H /* Define IMG_API_VERSION if you want more recent versions of the img API. * * 0 (default) The old API. date1 and date2 give the survey date as time_t. * Set to 0 for "unknown". * 1 days1 and days2 give survey dates as days since 1st Jan 1900. * Set to -1 for "unknown". */ #ifndef IMG_API_VERSION # define IMG_API_VERSION 0 #elif IMG_API_VERSION > 1 # error IMG_API_VERSION > 1 too new #endif #ifdef __cplusplus extern "C" { #endif #include #include /* for time_t */ # define img_BAD -2 # define img_STOP -1 # define img_MOVE 0 # define img_LINE 1 /* NB: img_CROSS is never output and ignored on input. * Put crosses where labels are. */ /* # define img_CROSS 2 */ # define img_LABEL 3 # define img_XSECT 4 # define img_XSECT_END 5 /* Loop closure information for the *preceding* traverse (img_MOVE + one or * more img_LINEs). */ # define img_ERROR_INFO 6 /* Leg flags */ # define img_FLAG_SURFACE 0x01 # define img_FLAG_DUPLICATE 0x02 # define img_FLAG_SPLAY 0x04 /* Station flags */ # define img_SFLAG_SURFACE 0x01 # define img_SFLAG_UNDERGROUND 0x02 # define img_SFLAG_ENTRANCE 0x04 # define img_SFLAG_EXPORTED 0x08 # define img_SFLAG_FIXED 0x10 # define img_SFLAG_ANON 0x20 # define img_SFLAG_WALL 0x40 /* File-wide flags */ # define img_FFLAG_EXTENDED 0x80 /* When writing img_XSECT, img_XFLAG_END in pimg->flags means this is the last * img_XSECT in this tube: */ # define img_XFLAG_END 0x01 # define img_STYLE_UNKNOWN -1 # define img_STYLE_NORMAL 0 # define img_STYLE_DIVING 1 # define img_STYLE_CARTESIAN 2 # define img_STYLE_CYLPOLAR 3 # define img_STYLE_NOSURVEY 4 /* 3D coordinates (in metres) */ typedef struct { double x, y, z; } img_point; typedef struct { /* Members you can access when reading (don't touch when writing): */ char *label; int flags; char *title; /* This contains a string describing the coordinate system which the data is * in, suitable for passing to PROJ. For a coordinate system with an EPSG * code this will typically be "EPSG:" followed by the code number. * * If no coordinate system was specified then this member will be NULL. */ char *cs; /* Older .3d format versions stored a human readable datestamp string. * Format versions >= 8 versions store a string consisting of "@" followed * by the number of seconds since midnight UTC on 1/1/1970. Some foreign * formats contain a human readable string, others no date information * (which results in "?" being returned). */ char *datestamp; /* The datestamp as a time_t (or (time_t)-1 if not available). * * For 3d format versions >= 8, this is a reliable value and in UTC. Older * 3d format versions store a human readable time, which img will attempt * to decode, but it may fail, particularly with handling timezones. Even * if it does work, beware that times in local time where DST applies are * inherently ambiguous around when the clocks go back. * * CMAP XYZ files contain a timestamp. It's probably in localtime (but * without any timezone information) and the example files are all pre-2000 * and have two digit years. We do our best to turn these into a useful * time_t value. */ time_t datestamp_numeric; char separator; /* character used to separate survey levels ('.' usually) */ /* Members that can be set when writing: */ #if IMG_API_VERSION == 0 time_t date1, date2; #else /* IMG_API_VERSION == 1 */ int days1, days2; #endif double l, r, u, d; /* Error information - valid when img_ERROR_INFO is returned: */ int n_legs; double length; double E, H, V; /* The filename actually opened (e.g. may have ".3d" added). * * This is only set if img opened the filename - if an existing stream * is used (via img_read_stream() or similar) then this member will be * NULL. */ char * filename_opened; /* Non-zero if reading an extended elevation: */ int is_extended_elevation; /* Members that can be set when writing: */ /* The style of the data - one of the img_STYLE_* constants above */ int style; /* All other members are for internal use only: */ FILE *fh; /* file handle of image file */ int (*close_func)(FILE*); char *label_buf; size_t buf_len; size_t label_len; int fRead; /* 1 for reading, 0 for writing */ long start; /* version of file format: * -4 => CMAP .xyz file, shot format * -3 => CMAP .xyz file, station format * -2 => Compass .plt file * -1 => .pos file * 0 => 0.01 ascii * 1 => 0.01 binary, * 2 => byte actions and flags * 3 => prefixes for legs; compressed prefixes * 4 => survey date * 5 => LRUD info * 6 => error info * 7 => more compact dates with wider range * 8 => lots of changes */ int version; char *survey; size_t survey_len; int pending; /* for old style text format files and survey filtering */ img_point mv; #if IMG_API_VERSION == 0 time_t olddate1, olddate2; #else /* IMG_API_VERSION == 1 */ int olddays1, olddays2; #endif int oldstyle; } img; /* Which version of the file format to output (defaults to newest) */ extern unsigned int img_output_version; /* Minimum supported value for img_output_version: */ #define IMG_VERSION_MIN 1 /* Maximum supported value for img_output_version: */ #define IMG_VERSION_MAX 8 /* Open a processed survey data file for reading * * fnm is the filename * * Returns pointer to an img struct or NULL */ #define img_open(F) img_open_survey((F), NULL) /* Open a processed survey data file for reading * * fnm is the filename * * survey points to a survey name to restrict reading to (or NULL for all * survey data in the file) * * Returns pointer to an img struct or NULL */ img *img_open_survey(const char *fnm, const char *survey); /* Read processed survey data from an existing stream. * * stream is a FILE* open on the stream (can be NULL which will give error * IMG_FILENOTFOUND so you don't need to handle that case specially). The * stream should be opened for reading in binary mode and positioned at the * start of the survey data file. * * close_func is a function to call to close the stream (most commonly * fclose, or pclose if the stream was opened using popen()) or NULL if * the caller wants to take care of closing the stream. * * filename is used to determine the format based on the file extension, * and also the leafname with the extension removed is used for the survey * title for formats which don't support a title or when no title is * specified. If you're not interested in default titles, you can just * pass the extension including a leading "." - e.g. ".3d". May not be * NULL. * * Returns pointer to an img struct or NULL on error. Any close function * specified is called on error (unless stream is NULL). */ #define img_read_stream(S, C, F) img_read_stream_survey((S), (C), (F), NULL) /* Read processed survey data from an existing stream. * * stream is a FILE* open on the stream (can be NULL which will give error * IMG_FILENOTFOUND so you don't need to handle that case specially). The * stream should be opened for reading in binary mode and positioned at the * start of the survey data file. * * close_func is a function to call to close the stream (most commonly * fclose, or pclose if the stream was opened using popen()) or NULL if * the caller wants to take care of closing the stream. * * filename is used to determine the format based on the file extension, * and also the leafname with the extension removed is used for the survey * title for formats which don't support a title or when no title is * specified. If you're not interested in default titles, you can just * pass the extension including a leading "." - e.g. ".3d". filename must * not be NULL. * * survey points to a survey name to restrict reading to (or NULL for all * survey data in the file) * * Returns pointer to an img struct or NULL on error. Any close function * specified is called on error. */ img *img_read_stream_survey(FILE *stream, int (*close_func)(FILE*), const char *filename, const char *survey); /* Open a .3d file for output with no specified coordinate system * * This is a very thin wrapper around img_open_write_cs() which passes NULL for * cs, provided for compatibility with the API provided before support for * coordinate systems was added. * * See img_open_write_cs() for documentation. */ #define img_open_write(F, T, S) img_open_write_cs(F, T, NULL, S) /* Open a .3d file for output in a specified coordinate system * * fnm is the filename * * title is the title * * cs is a string describing the coordinate system, suitable for passing to * PROJ (or NULL to not specify a coordinate system). For a coordinate system * with an assigned EPSG code number, "EPSG:" followed by the code number is * the recommended way to specify this. * * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. * * Returns pointer to an img struct or NULL for error (check img_error() * for details) */ img *img_open_write_cs(const char *fnm, const char *title, const char * cs, int flags); /* Write a .3d file to a stream * * stream is a FILE* open on the stream (can be NULL which will give error * IMG_FILENOTFOUND so you don't need to handle that case specially). The * stream should be opened for writing in binary mode. * * close_func is a function to call to close the stream (most commonly * fclose, or pclose if the stream was opened using popen()) or NULL if * the caller wants to take care of closing the stream. * * title is the title * * cs is a string describing the coordinate system, suitable for passing to * PROJ (or NULL to not specify a coordinate system). For a coordinate system * with an EPSG, "EPSG:" followed by the code number is the recommended way * to specify this. * * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. * * Returns pointer to an img struct or NULL for error (check img_error() * for details). Any close function specified is called on error (unless * stream is NULL). */ img *img_write_stream(FILE *stream, int (*close_func)(FILE*), const char *title, const char * cs, int flags); /* Read an item from a processed survey data file * * pimg is a pointer to an img struct returned by img_open() * * coordinates are returned in p * * flags and label name are returned in fields in pimg * * Returns img_XXXX as #define-d above */ int img_read_item(img *pimg, img_point *p); /* Write a item to a .3d file * * pimg is a pointer to an img struct returned by img_open_write() * * code is one of the img_XXXX #define-d above * * flags is the leg, station, or xsect flags * (meaningful for img_LINE, img_LABEL, and img_XSECT respectively) * * s is the label (only meaningful for img_LABEL) * * x, y, z are the coordinates */ void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z); /* Write error information for the current traverse * * n_legs is the number of legs in the traverse * * length is the traverse length (in m) * * E is the ratio of the observed misclosure to the theoretical one * * H is the ratio of the observed horizontal misclosure to the theoretical one * * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V); /* rewind a processed survey data file opened for reading * * This is useful if you want to read the data in several passes. * * pimg is a pointer to an img struct returned by img_open() * * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_rewind(img *pimg); /* Close a processed survey data file * * pimg is a pointer to an img struct returned by img_open() or * img_open_write() * * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_close(img *pimg); /* Codes returned by img_error */ typedef enum { IMG_NONE = 0, IMG_FILENOTFOUND, IMG_OUTOFMEMORY, IMG_CANTOPENOUT, IMG_BADFORMAT, IMG_DIRECTORY, IMG_READERROR, IMG_WRITEERROR, IMG_TOONEW } img_errcode; /* Read the error code * * If img_open(), img_open_survey() or img_open_write() returns NULL, or * img_rewind() or img_close() returns 0, or img_read_item() returns img_BAD * then you can call this function to discover why. */ img_errcode img_error(void); #ifdef __cplusplus } #endif #endif survex-1.4.4/src/kml.cc0000644000175000017500000002322014205012024011643 00000000000000/* kml.cc * Export from Aven as KML. */ /* Copyright (C) 2012 Olaf Kähler * Copyright (C) 2012,2013,2014,2015,2016,2017,2018,2019 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "kml.h" #include "export.h" // For LABELS, etc #include #include #include #include "useful.h" #include #include "aven.h" #include "message.h" using namespace std; #define WGS84_DATUM_STRING "EPSG:4326" static void html_escape(FILE *fh, const char *s) { while (*s) { switch (*s) { case '<': fputs("<", fh); break; case '>': fputs(">", fh); break; case '&': fputs("&", fh); break; default: PUTC(*s, fh); } ++s; } } static void discarding_proj_logger(void *, int, const char *) { } KML::KML(const char * input_datum, bool clamp_to_ground_) : clamp_to_ground(clamp_to_ground_) { /* Prevent stderr spew from PROJ. */ proj_log_func(PJ_DEFAULT_CTX, nullptr, discarding_proj_logger); pj = proj_create_crs_to_crs(PJ_DEFAULT_CTX, input_datum, WGS84_DATUM_STRING, NULL); if (pj) { // Normalise the output order so x is longitude and y latitude - by // default new PROJ has them switched for EPSG:4326 which just seems // confusing. PJ* pj_norm = proj_normalize_for_visualization(PJ_DEFAULT_CTX, pj); proj_destroy(pj); pj = pj_norm; } if (!pj) { wxString m = wmsg(/*Failed to initialise input coordinate system “%sâ€*/287); m = wxString::Format(m.c_str(), input_datum); throw m; } } KML::~KML() { if (pj) proj_destroy(pj); } const int * KML::passes() const { static const int default_passes[] = { PASG, XSECT, WALL1, WALL2, LEGS|SURF, LABELS|ENTS|FIXES|EXPORTS, 0 }; return default_passes; } /* Initialise KML routines. */ void KML::header(const char * title, const char *, time_t, double, double, double, double, double, double) { fputs( "\n" "\n", fh); fputs("", fh); html_escape(fh, title); fputs("\n", fh); // Set up styles for the icons to reduce the file size. fputs("\n", fh); fputs("\n", fh); fputs("\n", fh); // FIXME: does KML allow bounds? // NB Lat+long bounds are not necessarily the same as the bounds in survex // coords translated to WGS84 lat+long... } void KML::start_pass(int) { if (in_linestring) { fputs("\n", fh); in_linestring = false; } } void KML::line(const img_point *p1, const img_point *p, unsigned /*flags*/, bool fPendingMove) { if (fPendingMove) { if (!in_linestring) { in_linestring = true; fputs("\n", fh); } else { fputs("\n", fh); } if (clamp_to_ground) { fputs("\n", fh); } else { fputs("absolute\n", fh); } PJ_COORD coord = {p1->x, p1->y, p1->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } PJ_COORD coord = {p->x, p->y, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } void KML::xsect(const img_point *p, double angle, double d1, double d2) { if (clamp_to_ground) { fputs("", fh); } else { fputs("absolute", fh); } double s = sin(rad(angle)); double c = cos(rad(angle)); { PJ_COORD coord = {p->x + s * d1, p->y + c * d1, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f ", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } { PJ_COORD coord = {p->x - s * d2, p->y - c * d2, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } fputs("\n", fh); } void KML::wall(const img_point *p, double angle, double d) { if (!in_wall) { if (clamp_to_ground) { fputs("", fh); } else { fputs("absolute", fh); } in_wall = true; } double s = sin(rad(angle)); double c = cos(rad(angle)); PJ_COORD coord = {p->x + s * d, p->y + c * d, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } void KML::passage(const img_point *p, double angle, double d1, double d2) { double s = sin(rad(angle)); double c = cos(rad(angle)); PJ_COORD coord1 = {p->x + s * d1, p->y + c * d1, p->z, HUGE_VAL}; coord1 = proj_trans(pj, PJ_FWD, coord1); if (coord1.xyzt.x == HUGE_VAL || coord1.xyzt.y == HUGE_VAL || coord1.xyzt.z == HUGE_VAL) { // FIXME report errors } double x1 = coord1.xyzt.x; double y1 = coord1.xyzt.y; double z1 = coord1.xyzt.z; PJ_COORD coord2 = {p->x - s * d2, p->y - c * d2, p->z, HUGE_VAL}; coord2 = proj_trans(pj, PJ_FWD, coord2); if (coord2.xyzt.x == HUGE_VAL || coord2.xyzt.y == HUGE_VAL || coord2.xyzt.z == HUGE_VAL) { // FIXME report errors } double x2 = coord2.xyzt.x; double y2 = coord2.xyzt.y; double z2 = coord2.xyzt.z; // Define each passage as a multigeometry comprising of one quadrilateral // per section. This prevents invalid geometry (such as self-intersecting // polygons) being created. if (!in_passage){ in_passage = true; fputs("\n", fh); } else { if (clamp_to_ground) { fputs("" "\n", fh); } else { fputs("absolute" "\n", fh); } // Draw anti-clockwise around the ring. fprintf(fh, "%.8f,%.8f,%.2f\n", v2.GetX(), v2.GetY(), v2.GetZ()); fprintf(fh, "%.8f,%.8f,%.2f\n", v1.GetX(), v1.GetY(), v1.GetZ()); fprintf(fh, "%.8f,%.8f,%.2f\n", x1, y1, z1); fprintf(fh, "%.8f,%.8f,%.2f\n", x2, y2, z2); // Close the ring. fprintf(fh, "%.8f,%.8f,%.2f\n", v2.GetX(), v2.GetY(), v2.GetZ()); fputs("" "\n", fh); } v2 = Vector3(x2, y2, z2); v1 = Vector3(x1, y1, z1); } void KML::tube_end() { if (in_passage){ fputs("\n", fh); in_passage = false; } if (in_wall) { fputs("\n", fh); in_wall = false; } } void KML::label(const img_point *p, const char *s, bool /*fSurface*/, int type) { PJ_COORD coord = {p->x, p->y, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.8f,%.8f,%.2f", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); html_escape(fh, s); fputs("", fh); // Add a "pin" symbol with colour matching what aven shows. switch (type) { case FIXES: fputs("#fix", fh); break; case EXPORTS: fputs("#exp", fh); break; case ENTS: fputs("#ent", fh); break; } fputs("\n", fh); } void KML::footer() { if (in_linestring) fputs("\n", fh); fputs("\n", fh); } survex-1.4.4/src/aven.h0000644000175000017500000000542114141575516011701 00000000000000/* // aven.h // // Main class for Aven. // // Copyright (C) 2001, Mark R. Shinwell. // Copyright (C) 2002,2003,2004,2005,2006,2015 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Note: this header needs to be safe to include from C code */ #ifndef aven_h #define aven_h #include #define APP_NAME wxT("Aven") #define APP_ABOUT_IMAGE wxT("aven-about.png") extern #ifdef __cplusplus "C" #endif void aven_v_report(int severity, const char *fnm, int line, int en, va_list ap); #ifdef __cplusplus #include "message.h" #include "wx.h" #include inline std::string string_formatv(const char * fmt, va_list args) { static size_t len = 4096; static char * buf = NULL; while (true) { if (!buf) buf = new char[len]; int r = vsnprintf(buf, len, fmt, args); if (r < int(len) && r != -1) { return std::string(buf, r); } delete [] buf; buf = NULL; len += len; } } inline std::string string_format(const char * fmt, ...) { va_list args; va_start(args, fmt); std::string s = string_formatv(fmt, args); va_end(args); return s; } // wmsg is the unicode version of msg. inline wxString wmsg(int msg_no) { return wxString::FromUTF8(msg(msg_no)); } const wxString & wmsg_cfgpth(); class MainFrm; class wxPageSetupDialogData; class Aven : public wxApp { MainFrm * m_Frame; // This must be a pointer, otherwise it gets initialised too early and // we get a segfault on MS Windows when it tries to look up paper // sizes in wxThePrintPaperDatabase which is still NULL at the point // when the Aven class is constructed. wxPageSetupDialogData * m_pageSetupData; public: Aven(); ~Aven(); #ifdef __WXMSW__ virtual bool Initialize(int& argc, wxChar **argv); #endif virtual bool OnInit(); wxPageSetupDialogData * GetPageSetupDialogData(); void SetPageSetupDialogData(const wxPageSetupDialogData & psdd); #ifdef __WXMAC__ void MacOpenFiles(const wxArrayString & filenames); void MacPrintFiles(const wxArrayString & filenames); #endif void ReportError(const wxString&); }; DECLARE_APP(Aven) #endif #endif survex-1.4.4/src/debug.h0000644000175000017500000000447514141575516012046 00000000000000/* debug.h * SURVEX debugging info control macros * Copyright (C) 1993-1996,2001,2002,2015 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*#define DEBUG_INVALID 1*/ #ifndef DEBUG_H #define DEBUG_H #include "useful.h" #include "message.h" /* for fatalerror() */ /* turn periodic calls to validate() checks on/off */ #ifndef VALIDATE # define VALIDATE 0 #endif /* turn on dumping of network data structure (lots of output) */ #ifndef DUMP_NETWORK # define DUMP_NETWORK 0 #endif /* elaborate if data structure becomes invalid */ #ifndef DEBUG_INVALID # define DEBUG_INVALID 0 #endif /* macro to report detected bug */ #ifdef DEBUG_INVALID # define BUG(M) BLK(fputsnl(__FILE__ ":" STRING(__LINE__) ": " M, STDERR);\ fatalerror(/*Bug in program detected! Please report this to the authors*/11);) #else # define BUG(M) fatalerror(/*Bug in program detected! Please report this to the authors*/11) #endif /* assert macro, which calls BUG() if it fails */ #define SVX_ASSERT(E) if (E) {} else BUG("assert(" #E ") failed") /* assert macro, which calls BUG() if it fails */ #define SVX_ASSERT2(E, M) if (E) {} else BUG("assert(" #E ") failed - " M) /* datain.c */ /* general debugging info */ #define DEBUG_DATAIN 0 /* more (older) debugging info */ #define DEBUG_DATAIN_1 0 /* network.c */ /* print info generally useful for debugging */ #define PRINT_NETBITS 0 /* puts '+' for legs 'inside' big (>3) nodes */ #define SHOW_INTERNAL_LEGS 0 /* matrix.c */ /* print out the matrices */ #define PRINT_MATRICES 0 /* display info about where we are in algorithm */ #define DEBUG_MATRIX 0 /* print out bumf as matrix is built from network */ #define DEBUG_MATRIX_BUILD 0 #endif survex-1.4.4/src/thgeomag.h0000644000175000017500000000226314141575516012544 00000000000000/* * Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thgeomag_h #define thgeomag_h double thgeomag(double lat, double lon, double h, double dat); // lat, long in radians, // h = height above ellipsoid in metres, // dat decimal year // output declination in radians #endif survex-1.4.4/src/matrix.h0000644000175000017500000000154013346142325012244 00000000000000/* matrix.h * Header file for matrix building and solving routines * Copyright (C) 1993,1994,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void solve_matrix(node *list); survex-1.4.4/src/filename.c0000644000175000017500000002131614142042211012502 00000000000000/* OS dependent filename manipulation routines * Copyright (c) Olly Betts 1998-2003,2004,2005,2010,2011,2014 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "filename.h" #include "debug.h" #include #include typedef struct filelist { char *fnm; FILE *fh; struct filelist *next; } filelist; static filelist *flhead = NULL; static void filename_register_output_with_fh(const char *fnm, FILE *fh); /* safe_fopen should be used when writing a file * fopenWithPthAndExt should be used when reading a file */ /* Wrapper for fopen which throws a fatal error if it fails. * Some versions of fopen() are quite happy to open a directory. * We aren't, so catch this case. */ extern FILE * safe_fopen(const char *fnm, const char *mode) { FILE *f; SVX_ASSERT(mode[0] == 'w'); /* only expect to be used for writing */ if (fDirectory(fnm)) fatalerror(/*Filename “%s†refers to directory*/44, fnm); f = fopen(fnm, mode); if (!f) fatalerror(/*Failed to open output file “%sâ€*/47, fnm); filename_register_output_with_fh(fnm, f); return f; } /* Wrapper for fclose which throws a fatal error if there's been a write * error. */ extern void safe_fclose(FILE *f) { SVX_ASSERT(f); /* NB: use of | rather than || - we always want to call fclose() */ if (ferror(f) | (fclose(f) == EOF)) { filelist *p; for (p = flhead; p != NULL; p = p->next) if (p->fh == f) break; if (p && p->fnm) { const char *fnm = p->fnm; p->fnm = NULL; p->fh = NULL; (void)remove(fnm); fatalerror(/*Error writing to file “%sâ€*/110, fnm); } /* f wasn't opened with safe_fopen(), so we don't know the filename. */ fatalerror(/*Error writing to file*/111); } } extern FILE * safe_fopen_with_ext(const char *fnm, const char *ext, const char *mode) { FILE *f; char *p; p = add_ext(fnm, ext); f = safe_fopen(p, mode); osfree(p); return f; } static FILE * fopen_not_dir(const char *fnm, const char *mode) { if (fDirectory(fnm)) return NULL; return fopen(fnm, mode); } extern char * path_from_fnm(const char *fnm) { char *pth; const char *lf; int lenpth = 0; lf = strrchr(fnm, FNM_SEP_LEV); #ifdef FNM_SEP_LEV2 { const char *lf2 = strrchr(lf ? lf + 1 : fnm, FNM_SEP_LEV2); if (lf2) lf = lf2; } #endif #ifdef FNM_SEP_DRV if (!lf) lf = strrchr(fnm, FNM_SEP_DRV); #endif if (lf) lenpth = lf - fnm + 1; pth = osmalloc(lenpth + 1); memcpy(pth, fnm, lenpth); pth[lenpth] = '\0'; return pth; } extern char * base_from_fnm(const char *fnm) { char *p; p = strrchr(fnm, FNM_SEP_EXT); /* Trim off any leaf extension, but dirs can have extensions too */ if (p && !strchr(p, FNM_SEP_LEV) #ifdef FNM_SEP_LEV2 && !strchr(p, FNM_SEP_LEV2) #endif ) { size_t len = (const char *)p - fnm; p = osmalloc(len + 1); memcpy(p, fnm, len); p[len] = '\0'; return p; } return osstrdup(fnm); } extern char * baseleaf_from_fnm(const char *fnm) { const char *p; char *q; size_t len; p = fnm; q = strrchr(p, FNM_SEP_LEV); if (q) p = q + 1; #ifdef FNM_SEP_LEV2 q = strrchr(p, FNM_SEP_LEV2); if (q) p = q + 1; #endif q = strrchr(p, FNM_SEP_EXT); if (q) len = (const char *)q - p; else len = strlen(p); q = osmalloc(len + 1); memcpy(q, p, len); q[len] = '\0'; return q; } extern char * leaf_from_fnm(const char *fnm) { const char *lf; lf = strrchr(fnm, FNM_SEP_LEV); if (lf) fnm = lf + 1; #ifdef FNM_SEP_LEV2 lf = strrchr(fnm, FNM_SEP_LEV2); if (lf) fnm = lf + 1; #endif #ifdef FNM_SEP_DRV lf = strrchr(fnm, FNM_SEP_DRV); if (lf) fnm = lf + 1; #endif return osstrdup(fnm); } /* Make fnm from pth and lf, inserting an FNM_SEP_LEV if appropriate */ extern char * use_path(const char *pth, const char *lf) { char *fnm; int len, len_total; bool fAddSep = fFalse; len = strlen(pth); len_total = len + strlen(lf) + 1; /* if there's a path and it doesn't end in a separator, insert one */ if (len && pth[len - 1] != FNM_SEP_LEV) { #ifdef FNM_SEP_LEV2 if (pth[len - 1] != FNM_SEP_LEV2) { #endif #ifdef FNM_SEP_DRV if (pth[len - 1] != FNM_SEP_DRV) { #endif fAddSep = fTrue; len_total++; #ifdef FNM_SEP_DRV } #endif #ifdef FNM_SEP_LEV2 } #endif } fnm = osmalloc(len_total); strcpy(fnm, pth); if (fAddSep) fnm[len++] = FNM_SEP_LEV; strcpy(fnm + len, lf); return fnm; } /* Add ext to fnm, inserting an FNM_SEP_EXT if appropriate */ extern char * add_ext(const char *fnm, const char *ext) { char * fnmNew; int len, len_total; #ifdef FNM_SEP_EXT bool fAddSep = fFalse; #endif len = strlen(fnm); len_total = len + strlen(ext) + 1; #ifdef FNM_SEP_EXT if (ext[0] != FNM_SEP_EXT) { fAddSep = fTrue; len_total++; } #endif fnmNew = osmalloc(len_total); strcpy(fnmNew, fnm); #ifdef FNM_SEP_EXT if (fAddSep) fnmNew[len++] = FNM_SEP_EXT; #endif strcpy(fnmNew + len, ext); return fnmNew; } /* fopen file, found using pth and fnm * fnmUsed is used to return filename used to open file (ignored if NULL) * or NULL if file didn't open */ extern FILE * fopenWithPthAndExt(const char *pth, const char *fnm, const char *ext, const char *mode, char **fnmUsed) { char *fnmFull = NULL; FILE *fh = NULL; bool fAbs; /* if no pth treat fnm as absolute */ fAbs = (pth == NULL || *pth == '\0' || fAbsoluteFnm(fnm)); /* if appropriate, try it without pth */ if (fAbs) { fh = fopen_not_dir(fnm, mode); if (fh) { if (fnmUsed) fnmFull = osstrdup(fnm); } else { if (ext && *ext) { /* we've been given an extension so try using it */ fnmFull = add_ext(fnm, ext); fh = fopen_not_dir(fnmFull, mode); } } } else { /* try using path given - first of all without the extension */ fnmFull = use_path(pth, fnm); fh = fopen_not_dir(fnmFull, mode); if (!fh) { if (ext && *ext) { /* we've been given an extension so try using it */ char *fnmTmp; fnmTmp = fnmFull; fnmFull = add_ext(fnmFull, ext); osfree(fnmTmp); fh = fopen_not_dir(fnmFull, mode); } } } /* either it opened or didn't. If not, fh == NULL from fopen_not_dir() */ /* free name if it didn't open or name isn't wanted */ if (fh == NULL || fnmUsed == NULL) osfree(fnmFull); if (fnmUsed) *fnmUsed = (fh ? fnmFull : NULL); return fh; } /* Like fopenWithPthAndExt except that "foreign" paths are translated to * native ones (e.g. on Unix dir\file.ext -> dir/file.ext) */ FILE * fopen_portable(const char *pth, const char *fnm, const char *ext, const char *mode, char **fnmUsed) { FILE *fh = fopenWithPthAndExt(pth, fnm, ext, mode, fnmUsed); if (fh == NULL) { #if OS_UNIX int f_changed = 0; char *fnm_trans, *p; fnm_trans = osstrdup(fnm); for (p = fnm_trans; *p; p++) { switch (*p) { case '\\': /* swap a backslash to a forward slash */ *p = '/'; f_changed = 1; break; } } if (f_changed) fh = fopenWithPthAndExt(pth, fnm_trans, ext, mode, fnmUsed); /* as a last ditch measure, try lowercasing the filename */ if (fh == NULL) { f_changed = 0; for (p = fnm_trans; *p ; p++) { unsigned char ch = *p; if (isupper(ch)) { *p = tolower(ch); f_changed = 1; } } if (f_changed) fh = fopenWithPthAndExt(pth, fnm_trans, ext, mode, fnmUsed); } osfree(fnm_trans); #endif } return fh; } void filename_register_output(const char *fnm) { filelist *p = osnew(filelist); SVX_ASSERT(fnm); p->fnm = osstrdup(fnm); p->fh = NULL; p->next = flhead; flhead = p; } static void filename_register_output_with_fh(const char *fnm, FILE *fh) { filelist *p = osnew(filelist); SVX_ASSERT(fnm); p->fnm = osstrdup(fnm); p->fh = fh; p->next = flhead; flhead = p; } void filename_delete_output(void) { while (flhead) { filelist *p = flhead; flhead = flhead->next; if (p->fnm) { (void)remove(p->fnm); osfree(p->fnm); } osfree(p); } } survex-1.4.4/src/kml.h0000644000175000017500000000323014142356022011515 00000000000000/* kml.h * Export from Aven as KML. */ /* Copyright (C) 2005,2013,2014,2015,2016,2017,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" #include #include "vector3.h" #include class KML : public ExportFilter { PJ* pj = NULL; bool in_linestring = false; bool in_wall = false; bool in_passage = false; bool clamp_to_ground; Vector3 v1, v2; public: KML(const char * input_datum, bool clamp_to_ground_); ~KML(); const int * passes() const; void header(const char *, const char *, time_t, double, double, double, double, double, double); void start_pass(int pass); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void xsect(const img_point *, double, double, double); void wall(const img_point *, double, double); void passage(const img_point *, double, double, double); void tube_end(); void footer(); }; survex-1.4.4/src/glbitmapfont.h0000644000175000017500000000461114214236745013435 00000000000000// // glbitmapfont.h // // Draw text using glBitmap. // // Copyright (C) 2011-2022 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef GLBITMAPFONT_H_INCLUDED #define GLBITMAPFONT_H_INCLUDED #include "wx.h" #ifdef HAVE_GL_GL_H # include #elif defined HAVE_OPENGL_GL_H # include #endif class BitmapFont { enum { // The highest character point to generate an OpenGL list for. // // We can't generate a GL list for every Unicode character, so we // generate them for the first BITMAPFONT_MAX_CHAR characters and then // use glBitmap directly to draw other characters if they are needed. // // FIXME: We could perhaps even store strings consisting of only the // first 256 points as ISO8859-1. BITMAPFONT_MAX_CHAR = 256 }; int gllist_base; mutable const unsigned char * extra_data; mutable int * extra_chars; unsigned char char_width[BITMAPFONT_MAX_CHAR]; void init_extra_chars() const; int glyph_width(wxChar ch) const; void write_glyph(wxChar ch) const; wxString font_file; int font_size; public: BitmapFont() : gllist_base(0), extra_data(0), extra_chars(0) { } ~BitmapFont(); bool load(const wxString & font_file, bool double_size); int get_font_size() const { return font_size; } void get_text_extent(const wxChar *s, size_t len, int *width, int *height) const { if (width) { int total_width = 0; while (len--) { int ch = *s++; if (ch < BITMAPFONT_MAX_CHAR) total_width += char_width[ch]; else total_width += glyph_width(ch); } *width = total_width; } if (height) { *height = get_font_size() + 1; } } void write_string(const wxChar *s, size_t len) const; }; #endif survex-1.4.4/src/igrf2c.py0000755000175000017500000000355414141575516012335 00000000000000#!/usr/bin/python3 # Martin Budaj 2014 import sys if len(sys.argv) == 1: print('usage: %s ' % sys.argv[0]) sys.exit(1) def get_values(d): return d[3:len(d)-1] def iround(d): if '.' in d: return d.rstrip('0').rstrip('.') else: return d data = dict() max_n = 0 with open(sys.argv[1]) as fin: for l in fin: if l.startswith(('#', 'c/s')): continue l = l.rstrip() ldata = l.split() if ldata[0] == 'g/h': assert(ldata[1] == 'n' and ldata[2] == 'm') years = get_values(ldata) elif ldata[0] in ('g', 'h'): n = int(ldata[1]) m = int(ldata[2]) data[ldata[0],n,m] = list(get_values(ldata)) data[ldata[0]+'_delta',n,m] = ldata[len(ldata)-1], max_n = max(max_n, n, m) else: raise ValueError('data line in unknown format!') with open('../thgeomagdata.h','w') as fout: fout.write('''// generated by geomag/igrf2c.py #ifndef thgeomagdata_h #define thgeomagdata_h ''') for gh in ('g', 'h', 'g_delta', 'h_delta'): if 'delta' in gh: isdelta = True suffix = 'D' yy = (0,) else: isdelta = False suffix = '[%d]' % len(years) yy = range(0,len(years)) fout.write('static const double thgeomag_%sNM%s[%d][%d] = {\n' % (gh[0].upper(),suffix,max_n+1,max_n+1)) for y in yy: if not isdelta: fout.write('{\n') for n in range(0,max_n+1): fout.write(' {') for m in range(0,max_n+1): fout.write('%s, ' % (iround(data[gh,n,m][y]) if (gh,n,m) in data else '0')) fout.write('},\n') if not isdelta: fout.write('},\n') fout.write('};\n') fout.write( '''#define thgeomag_maxmindex %d #define thgeomag_step %d #define thgeomag_minyear %d #define thgeomag_maxdeg %d #endif ''' % (len(years)-1, float(years[1])-float(years[0]), float(years[0]), max_n)) print('OK: ../thgeomagdata.h created') survex-1.4.4/src/survexport.cc0000644000175000017500000003346614312174146013353 00000000000000/* survexport.cc * Convert a processed survey data file to another format. */ /* Copyright (C) 1994-2004,2008,2010,2011,2013,2014,2018,2020,2022 Olly Betts * Copyright (C) 2004 John Pybus (SVG Output code) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #define MSG_SETUP_PROJ_SEARCH_PATH 1 #include #include #include #include #include "export.h" #include "mainfrm.h" #include "cmdline.h" #include "filename.h" #include "img_hosted.h" #include "message.h" #include "str.h" #include "useful.h" #include #include using namespace std; int main(int argc, char **argv) { double pan = 0; double tilt = -90.0; export_format format = FMT_MAX_PLUS_ONE_; int show_mask = 0; const char *survey = NULL; double grid = 0.0; /* grid spacing (or 0 for no grid) */ double text_height = DEFAULT_TEXT_HEIGHT; /* for station labels */ double marker_size = DEFAULT_MARKER_SIZE; /* for station markers */ double scale = 500.0; SurveyFilter* filter = NULL; { /* Default to .pos output if installed as 3dtopos. */ char* progname = baseleaf_from_fnm(argv[0]); if (strcasecmp(progname, "3dtopos") == 0) { format = FMT_POS; } osfree(progname); } const int OPT_FMT_BASE = 20000; enum { OPT_SCALE = 0x100, OPT_BEARING, OPT_TILT, OPT_PLAN, OPT_ELEV, OPT_LEGS, OPT_SURF, OPT_SPLAYS, OPT_CROSSES, OPT_LABELS, OPT_ENTS, OPT_FIXES, OPT_EXPORTS, OPT_XSECT, OPT_WALLS, OPT_PASG, OPT_CENTRED, OPT_FULL_COORDS, OPT_CLAMP_TO_GROUND, OPT_DEFAULTS }; static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required, 2 options_*); int *flag; int val */ {"survey", required_argument, 0, 's'}, {"scale", required_argument, 0, OPT_SCALE}, {"bearing", required_argument, 0, OPT_BEARING}, {"tilt", required_argument, 0, OPT_TILT}, {"plan", no_argument, 0, OPT_PLAN}, {"elevation", no_argument, 0, OPT_ELEV}, {"legs", no_argument, 0, OPT_LEGS}, {"surface-legs", no_argument, 0, OPT_SURF}, {"splays", no_argument, 0, OPT_SPLAYS}, {"crosses", no_argument, 0, OPT_CROSSES}, {"station-names", no_argument, 0, OPT_LABELS}, {"entrances", no_argument, 0, OPT_ENTS}, {"fixes", no_argument, 0, OPT_FIXES}, {"exports", no_argument, 0, OPT_EXPORTS}, {"cross-sections", no_argument, 0, OPT_XSECT}, {"walls", no_argument, 0, OPT_WALLS}, {"passages", no_argument, 0, OPT_PASG}, {"origin-in-centre", no_argument, 0, OPT_CENTRED}, {"full-coordinates", no_argument, 0, OPT_FULL_COORDS}, {"clamp-to-ground", no_argument, 0, OPT_CLAMP_TO_GROUND}, {"defaults", no_argument, 0, OPT_DEFAULTS}, {"grid", optional_argument, 0, 'g'}, {"text-height", required_argument, 0, 't'}, {"marker-size", required_argument, 0, 'm'}, {"3d", no_argument, 0, OPT_FMT_BASE + FMT_3D}, {"csv", no_argument, 0, OPT_FMT_BASE + FMT_CSV}, {"dxf", no_argument, 0, OPT_FMT_BASE + FMT_DXF}, {"eps", no_argument, 0, OPT_FMT_BASE + FMT_EPS}, {"gpx", no_argument, 0, OPT_FMT_BASE + FMT_GPX}, {"hpgl", no_argument, 0, OPT_FMT_BASE + FMT_HPGL}, {"json", no_argument, 0, OPT_FMT_BASE + FMT_JSON}, {"kml", no_argument, 0, OPT_FMT_BASE + FMT_KML}, {"plt", no_argument, 0, OPT_FMT_BASE + FMT_PLT}, {"skencil", no_argument, 0, OPT_FMT_BASE + FMT_SK}, {"pos", no_argument, 0, OPT_FMT_BASE + FMT_POS}, {"svg", no_argument, 0, OPT_FMT_BASE + FMT_SVG}, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, // US spelling: {"origin-in-center", no_argument, 0, OPT_CENTRED}, // Abbreviation: {"full-coords", no_argument, 0, OPT_FULL_COORDS}, {0,0,0,0} }; #define short_opts "s:g::t:m:" static struct help_msg help[] = { /* <-- */ {HLP_ENCODELONG(0), /*only load the sub-survey with this prefix*/199, 0}, /* TRANSLATORS: These example input values should not be translated. */ {HLP_ENCODELONG(1), /*scale (50, 0.02, 1:50 and 2:100 all mean 1:50)*/217, 0}, /* TRANSLATORS: These example input values should not be translated. */ {HLP_ENCODELONG(2), /*bearing (90, 90d, 100g all mean 90°)*/460, 0}, /* TRANSLATORS: These example input values should not be translated. */ {HLP_ENCODELONG(3), /*tilt (45, 45d, 50g, 100% all mean 45°)*/461, 0}, /* TRANSLATORS: Don't translate example command line option --tilt=-90 */ {HLP_ENCODELONG(4), /*plan view (equivalent to --tilt=-90)*/462, 0}, /* TRANSLATORS: Don't translate example command line option --tilt=0 */ {HLP_ENCODELONG(5), /*elevation view (equivalent to --tilt=0)*/463, 0}, {HLP_ENCODELONG(6), /*underground survey legs*/476, 0}, {HLP_ENCODELONG(7), /*surface survey legs*/464, 0}, {HLP_ENCODELONG(8), /*splay legs*/465, 0}, {HLP_ENCODELONG(9), /*station markers*/474, 0}, {HLP_ENCODELONG(10), /*station labels*/475, 0}, {HLP_ENCODELONG(11), /*entrances*/466, 0}, {HLP_ENCODELONG(12), /*fixed points*/467, 0}, {HLP_ENCODELONG(13), /*exported stations*/468, 0}, {HLP_ENCODELONG(14), /*cross-sections*/469, 0}, {HLP_ENCODELONG(15), /*walls*/470, 0}, {HLP_ENCODELONG(16), /*passages*/471, 0}, {HLP_ENCODELONG(17), /*origin in centre*/472, 0}, {HLP_ENCODELONG(18), /*full coordinates*/473, 0}, {HLP_ENCODELONG(19), /*clamp to ground*/478, 0}, {HLP_ENCODELONG(20), /*include items exported by default*/155, 0}, {HLP_ENCODELONG(21), /*generate grid (default %sm)*/148, STRING(DEFAULT_GRID_SPACING)}, {HLP_ENCODELONG(22), /*station labels text height (default %s)*/149, STRING(DEFAULT_TEXT_HEIGHT)}, {HLP_ENCODELONG(23), /*station marker size (default %s)*/152, STRING(DEFAULT_MARKER_SIZE)}, {HLP_ENCODELONG(24), /*produce Survex 3d output*/487, 0}, {HLP_ENCODELONG(25), /*produce CSV output*/102, 0}, {HLP_ENCODELONG(26), /*produce DXF output*/156, 0}, {HLP_ENCODELONG(27), /*produce EPS output*/454, 0}, {HLP_ENCODELONG(28), /*produce GPX output*/455, 0}, {HLP_ENCODELONG(29), /*produce HPGL output*/456, 0}, {HLP_ENCODELONG(30), /*produce JSON output*/457, 0}, {HLP_ENCODELONG(31), /*produce KML output*/458, 0}, /* TRANSLATORS: "Compass" and "Carto" are the names of software packages, * so should not be translated. */ {HLP_ENCODELONG(32), /*produce Compass PLT output for Carto*/159, 0}, /* TRANSLATORS: "Skencil" is the name of a software package, so should not be * translated. */ {HLP_ENCODELONG(33), /*produce Skencil output*/158, 0}, {HLP_ENCODELONG(34), /*produce Survex POS output*/459, 0}, {HLP_ENCODELONG(35), /*produce SVG output*/160, 0}, {0, 0, 0} }; msg_init(argv); string optmap[sizeof(show_mask) * CHAR_BIT]; int long_index; bool always_include_defaults = false; cmdline_init(argc, argv, short_opts, long_opts, &long_index, help, 1, 2); while (1) { long_index = -1; int opt = cmdline_getopt(); if (opt == EOF) break; int bit = 0; switch (opt) { case OPT_LEGS: bit = LEGS; break; case OPT_SURF: bit = SURF; break; case OPT_SPLAYS: bit = SPLAYS; break; case OPT_CROSSES: bit = STNS; break; case OPT_LABELS: bit = LABELS; break; case OPT_ENTS: bit = ENTS; break; case OPT_FIXES: bit = FIXES; break; case OPT_EXPORTS: bit = EXPORTS; break; case OPT_XSECT: bit = XSECT; break; case OPT_WALLS: bit = WALLS; break; case OPT_PASG: bit = PASG; break; case OPT_CENTRED: bit = CENTRED; break; case OPT_FULL_COORDS: bit = FULL_COORDS; break; case OPT_CLAMP_TO_GROUND: bit = CLAMP_TO_GROUND; break; case OPT_DEFAULTS: always_include_defaults = true; break; case 'g': /* Grid */ if (optarg) { grid = cmdline_double_arg(); } else { grid = (double)DEFAULT_GRID_SPACING; } bit = GRID; break; case OPT_SCALE: { char* colon = strchr(optarg, ':'); if (!colon) { /* --scale=1000 => 1:1000 => scale = 1000 */ scale = cmdline_double_arg(); if (scale < 1.0) { /* --scale=0.001 => 1:1000 => scale = 1000 */ scale = 1.0 / scale; } } else if (colon - optarg == 1 && optarg[0] == '1') { /* --scale=1:1000 => 1:1000 => scale = 1000 */ optarg += 2; scale = cmdline_double_arg(); optarg -= 2; } else { /* --scale=2:1000 => 1:500 => scale = 500 */ *colon = '\0'; scale = cmdline_double_arg(); optarg = colon + 1; scale = cmdline_double_arg() / scale; *colon = ':'; } bit = SCALE; break; } case OPT_BEARING: { int units = 0; size_t len = strlen(optarg); if (len > 0) { char ch = optarg[len - 1]; switch (ch) { case 'd': case 'g': units = ch; optarg[len - 1] = '\0'; break; } pan = cmdline_double_arg(); optarg[len - 1] = ch; } else { pan = cmdline_double_arg(); } if (units == 'g') { pan *= 0.9; } bit = ORIENTABLE; break; } case OPT_TILT: { int units = 0; size_t len = strlen(optarg); if (len > 0) { char ch = optarg[len - 1]; switch (ch) { case '%': case 'd': case 'g': units = ch; optarg[len - 1] = '\0'; break; } tilt = cmdline_double_arg(); optarg[len - 1] = ch; } else { tilt = cmdline_double_arg(); } if (units == 'g') { tilt *= 0.9; } else if (units == '%') { tilt = deg(atan(tilt * 0.01)); } bit = ORIENTABLE; break; } case OPT_PLAN: tilt = -90.0; bit = ORIENTABLE; break; case OPT_ELEV: tilt = 0.0; bit = ORIENTABLE; break; case 't': /* Text height */ text_height = cmdline_double_arg(); bit = TEXT_HEIGHT; break; case 'm': /* Marker size */ marker_size = cmdline_double_arg(); bit = MARKER_SIZE; break; case 's': if (survey) { if (!filter) { filter = new SurveyFilter(); filter->add(survey); } filter->add(optarg); } else { survey = optarg; } break; default: if (opt >= OPT_FMT_BASE && opt < OPT_FMT_BASE + FMT_MAX_PLUS_ONE_) { format = export_format(opt - OPT_FMT_BASE); } } if (bit) { show_mask |= bit; int i = 0; while (((bit >> i) & 1) == 0) ++i; if (!optmap[i].empty()) optmap[i] += ' '; // Reconstruct what the command line option was. if (long_index < 0) { optmap[i] += '-'; optmap[i] += char(opt); if (optarg) { if (optarg == argv[optind - 1]) { optmap[i] += ' '; } optmap[i] += optarg; } } else { optmap[i] += "--"; optmap[i] += long_opts[long_index].name; if (optarg) { if (optarg == argv[optind - 1]) { optmap[i] += ' '; } else { optmap[i] += '='; } optmap[i] += optarg; } } } } // A single --survey is handled by img at load-time. Multiple --survey are // handled via a SurveyFilter at export time. if (filter) survey = NULL; const char* fnm_in = argv[optind++]; const char* fnm_out = argv[optind]; if (fnm_out) { if (format == FMT_MAX_PLUS_ONE_) { // Select format based on extension. size_t len = strlen(fnm_out); for (size_t i = 0; i < FMT_MAX_PLUS_ONE_; ++i) { const auto& info = export_format_info[i]; size_t l = strlen(info.extension); if (len > l + 1 && strcasecmp(fnm_out + len - l, info.extension) == 0) { format = export_format(i); break; } } if (format == FMT_MAX_PLUS_ONE_) { fatalerror(/*Export format not specified and not known from output file extension*/252); } } } else { if (format == FMT_MAX_PLUS_ONE_) { fatalerror(/*Export format not specified*/253); } char *baseleaf = baseleaf_from_fnm(fnm_in); /* note : memory allocated by fnm_out gets leaked in this case... */ fnm_out = add_ext(baseleaf, export_format_info[format].extension); osfree(baseleaf); } const auto& format_info_mask = export_format_info[format].mask; unsigned not_allowed = show_mask &~ format_info_mask; if (not_allowed) { printf("warning: The following options are not supported for this export format and will be ignored:\n"); int i = 0; unsigned bit = 1; while (not_allowed) { if (not_allowed & bit) { // E.g. --walls maps to two bits in show_mask, but the options // are only put on the least significant in such cases. if (!optmap[i].empty()) printf("%s\n", optmap[i].c_str()); not_allowed &= ~bit; } ++i; bit <<= 1; } show_mask &= format_info_mask; } if (always_include_defaults || show_mask == 0) { show_mask |= export_format_info[format].defaults; } if (!(format_info_mask & ORIENTABLE)) { pan = 0.0; tilt = -90.0; } Model model; int err = model.Load(fnm_in, survey); if (err) fatalerror(err, fnm_in); if (filter) filter->SetSeparator(model.GetSeparator()); try { if (!Export(fnm_out, model.GetSurveyTitle(), model.GetDateString(), model, filter, pan, tilt, show_mask, format, grid, text_height, marker_size, scale)) { fatalerror(/*Couldn’t write file “%sâ€*/402, fnm_out); } } catch (const wxString & m) { wxString r = msg_appname(); r += ": "; r += wmsg(/*error*/93); r += ": "; r += m; wcerr << r.c_str() << '\n'; } return 0; } survex-1.4.4/src/img.c0000644000175000017500000022161414240107525011512 00000000000000/* img.c * Routines for reading and writing Survex ".3d" image files * Copyright (C) 1993-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include "img.h" #define TIMENA "?" #ifdef IMG_HOSTED # define INT32_T int32_t # define UINT32_T uint32_t # include "debug.h" # include "filelist.h" # include "filename.h" # include "message.h" # include "useful.h" # define TIMEFMT msg(/*%a,%Y.%m.%d %H:%M:%S %Z*/107) #else # ifdef HAVE_STDINT_H # include # define INT32_T int32_t # define UINT32_T uint32_t # else # include # if INT_MAX >= 2147483647 # define INT32_T int # define UINT32_T unsigned # else # define INT32_T long # define UINT32_T unsigned long # endif # endif # define TIMEFMT "%a,%Y.%m.%d %H:%M:%S %Z" # define EXT_SVX_3D "3d" # define EXT_SVX_POS "pos" # define FNM_SEP_EXT '.' # define METRES_PER_FOOT 0.3048 /* exact value */ # define xosmalloc(L) malloc((L)) # define xosrealloc(L,S) realloc((L),(S)) # define osfree(P) free((P)) # define osnew(T) (T*)malloc(sizeof(T)) /* in IMG_HOSTED mode, this tests if a filename refers to a directory */ # define fDirectory(X) 0 /* open file FNM with mode MODE, maybe using path PTH and/or extension EXT */ /* path isn't used in img.c, but EXT is */ # define fopenWithPthAndExt(PTH,FNM,EXT,MODE,X) \ ((*(X) = NULL), fopen(FNM,MODE)) # ifndef PUTC # define PUTC(C, FH) putc(C, FH) # endif # ifndef GETC # define GETC(FH) getc(FH) # endif # define fputsnl(S, FH) (fputs((S), (FH)) == EOF ? EOF : putc('\n', (FH))) # define SVX_ASSERT(X) #ifdef __cplusplus # include using std::max; using std::min; #else /* Return max/min of two numbers. */ /* May be defined already (e.g. by Borland C in stdlib.h) */ /* NB Bad news if X or Y has side-effects... */ # ifndef max # define max(X, Y) ((X) > (Y) ? (X) : (Y)) # endif # ifndef min # define min(X, Y) ((X) < (Y) ? (X) : (Y)) # endif #endif static INT32_T get32(FILE *fh) { UINT32_T w = GETC(fh); w |= (UINT32_T)GETC(fh) << 8l; w |= (UINT32_T)GETC(fh) << 16l; w |= (UINT32_T)GETC(fh) << 24l; return (INT32_T)w; } static void put32(UINT32_T w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); PUTC((char)(w >> 16l), fh); PUTC((char)(w >> 24l), fh); } static short get16(FILE *fh) { UINT32_T w = GETC(fh); w |= (UINT32_T)GETC(fh) << 8l; return (short)w; } static void put16(short word, FILE *fh) { unsigned short w = (unsigned short)word; PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); } static char * baseleaf_from_fnm(const char *fnm) { const char *p; const char *q; char * res; size_t len; p = fnm; q = strrchr(p, '/'); if (q) p = q + 1; q = strrchr(p, '\\'); if (q) p = q + 1; q = strrchr(p, FNM_SEP_EXT); if (q) len = (const char *)q - p; else len = strlen(p); res = (char *)xosmalloc(len + 1); if (!res) return NULL; memcpy(res, p, len); res[len] = '\0'; return res; } #endif static char * my_strdup(const char *str); static time_t mktime_with_tz(struct tm * tm, const char * tz) { time_t r; char * old_tz = getenv("TZ"); #ifdef _MSC_VER if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (_putenv_s("TZ", tz) != 0) { osfree(old_tz); return (time_t)-1; } #elif defined HAVE_SETENV if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (setenv("TZ", tz, 1) < 0) { osfree(old_tz); return (time_t)-1; } #else char * p; if (old_tz) { size_t len = strlen(old_tz) + 1; p = (char *)xosmalloc(len + 3); if (!p) return (time_t)-1; memcpy(p, "TZ=", 3); memcpy(p + 3, tz, len); old_tz = p; } p = (char *)xosmalloc(strlen(tz) + 4); if (!p) { osfree(old_tz); return (time_t)-1; } memcpy(p, "TZ=", 3); strcpy(p + 3, tz); if (putenv(p) != 0) { osfree(p); osfree(old_tz); return (time_t)-1; } #define CLEANUP() osfree(p) #endif tzset(); r = mktime(tm); if (old_tz) { #ifdef _MSC_VER _putenv_s("TZ", old_tz); #elif !defined HAVE_SETENV putenv(old_tz); #else setenv("TZ", old_tz, 1); #endif osfree(old_tz); } else { #ifdef _MSC_VER _putenv_s("TZ", ""); #elif !defined HAVE_UNSETENV putenv((char*)"TZ"); #else unsetenv("TZ"); #endif } #ifdef CLEANUP CLEANUP(); #undef CLEANUP #endif return r; } static unsigned short getu16(FILE *fh) { return (unsigned short)get16(fh); } #include #if !defined HAVE_LROUND && !defined HAVE_DECL_LROUND /* The autoconf tests are not in use, but C99 and C++11 both added lround(), * so set HAVE_LROUND and HAVE_DECL_LROUND conservatively based on the language * standard version the compiler claims to support. */ # if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) || \ (defined __cplusplus && __cplusplus >= 201103L) # define HAVE_LROUND 1 # define HAVE_DECL_LROUND 1 # endif #endif #ifdef HAVE_LROUND # if defined HAVE_DECL_LROUND && !HAVE_DECL_LROUND /* On older systems, the prototype may be missing. */ extern long lround(double); # endif # define my_lround lround #else static long my_lround(double x) { return (x >= 0.0) ? (long)(x + 0.5) : -(long)(0.5 - x); } #endif /* portable case insensitive string compare */ #if defined(strcasecmp) || defined(HAVE_STRCASECMP) # define my_strcasecmp strcasecmp #else static int my_strcasecmp(const char *s1, const char *s2) { unsigned char c1, c2; do { c1 = *s1++; c2 = *s2++; } while (c1 && toupper(c1) == toupper(c2)); /* now calculate real difference */ return c1 - c2; } #endif unsigned int img_output_version = IMG_VERSION_MAX; static img_errcode img_errno = IMG_NONE; #define FILEID "Survex 3D Image File" #define EXT_PLT "plt" #define EXT_PLF "plf" /* Attempt to string paste to ensure we are passed a literal string */ #define LITLEN(S) (sizeof(S"") - 1) /* Fake "version numbers" for non-3d formats we can read. */ #define VERSION_CMAP_SHOT -4 #define VERSION_CMAP_STATION -3 #define VERSION_COMPASS_PLT -2 #define VERSION_SURVEX_POS -1 static char * my_strdup(const char *str) { char *p; size_t len = strlen(str) + 1; p = (char *)xosmalloc(len); if (p) memcpy(p, str, len); return p; } #define getline_alloc(FH) getline_alloc_len(FH, NULL) static char * getline_alloc_len(FILE *fh, size_t * p_len) { int ch; size_t i = 0; size_t len = 16; char *buf = (char *)xosmalloc(len); if (!buf) return NULL; ch = GETC(fh); while (ch != '\n' && ch != '\r' && ch != EOF) { buf[i++] = ch; if (i == len - 1) { char *p; len += len; p = (char *)xosrealloc(buf, len); if (!p) { osfree(buf); return NULL; } buf = p; } ch = GETC(fh); } if (ch == '\n' || ch == '\r') { int otherone = ch ^ ('\n' ^ '\r'); ch = GETC(fh); /* if it's not the other eol character, put it back */ if (ch != otherone) ungetc(ch, fh); } buf[i] = '\0'; if (p_len) *p_len = i; return buf; } img_errcode img_error(void) { return img_errno; } static int check_label_space(img *pimg, size_t len) { if (len > pimg->buf_len) { char *b = (char *)xosrealloc(pimg->label_buf, len); if (!b) return 0; pimg->label = (pimg->label - pimg->label_buf) + b; pimg->label_buf = b; pimg->buf_len = len; } return 1; } /* Check if a station name should be included. */ static int stn_included(img *pimg) { if (!pimg->survey_len) return 1; size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return 0; } pimg->label += l + 1; return 1; } /* Check if a survey name should be included. */ static int survey_included(img *pimg) { if (!pimg->survey_len) return 1; size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { return 0; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; return 1; } /* Check if a survey name in a buffer should be included. * * For "foreign" formats which just have one level of surveys. */ static int buf_included(img *pimg, const char *buf, size_t len) { return pimg->survey_len == len && strncmp(buf, pimg->survey, len) == 0; } #define has_ext(F,L,E) ((L) > LITLEN(E) + 1 &&\ (F)[(L) - LITLEN(E) - 1] == FNM_SEP_EXT &&\ my_strcasecmp((F) + (L) - LITLEN(E), E) == 0) img * img_open_survey(const char *fnm, const char *survey) { img *pimg; FILE *fh; char* filename_opened = NULL; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } fh = fopenWithPthAndExt("", fnm, EXT_SVX_3D, "rb", &filename_opened); pimg = img_read_stream_survey(fh, fclose, filename_opened ? filename_opened : fnm, survey); if (pimg) { pimg->filename_opened = filename_opened; } else { osfree(filename_opened); } return pimg; } img * img_read_stream_survey(FILE *stream, int (*close_func)(FILE*), const char *fnm, const char *survey) { img *pimg; size_t len; char buf[LITLEN(FILEID) + 9]; int ch; if (stream == NULL) { img_errno = IMG_FILENOTFOUND; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; if (close_func) close_func(stream); return NULL; } pimg->fh = stream; pimg->close_func = close_func; pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { if (pimg->close_func) pimg->close_func(pimg->fh); osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fRead = 1; /* reading from this file */ img_errno = IMG_NONE; pimg->flags = 0; pimg->filename_opened = NULL; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't * entered a survey yet */ /* for VERSION_CMAP_SHOT, we store the last station here * to detect whether we MOVE or LINE */ pimg->label_len = 0; pimg->label_buf[0] = '\0'; pimg->survey = NULL; pimg->survey_len = 0; pimg->separator = '.'; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif pimg->is_extended_elevation = 0; pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->title = pimg->datestamp = pimg->cs = NULL; pimg->datestamp_numeric = (time_t)-1; if (survey) { len = strlen(survey); if (len) { if (survey[len - 1] == '.') len--; if (len) { char *p; pimg->survey = (char *)xosmalloc(len + 2); if (!pimg->survey) { img_errno = IMG_OUTOFMEMORY; goto error; } memcpy(pimg->survey, survey, len); /* Set title to leaf survey name */ pimg->survey[len] = '\0'; p = strrchr(pimg->survey, '.'); if (p) p++; else p = pimg->survey; pimg->title = my_strdup(p); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->survey[len] = '.'; pimg->survey[len + 1] = '\0'; } } pimg->survey_len = len; } /* [VERSION_COMPASS_PLT, VERSION_CMAP_STATION, VERSION_CMAP_SHOT] pending * IMG_LINE or IMG_MOVE - both have 4 added. * [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; len = strlen(fnm); if (has_ext(fnm, len, EXT_SVX_POS)) { pos_file: pimg->version = VERSION_SURVEX_POS; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->start = 0; return pimg; } if (has_ext(fnm, len, EXT_PLT) || has_ext(fnm, len, EXT_PLF)) { long fpos; plt_file: pimg->version = VERSION_COMPASS_PLT; /* Spaces aren't legal in Compass station names, but dots are, so * use space as the level separator */ pimg->separator = ' '; pimg->start = 0; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } while (1) { ch = GETC(pimg->fh); switch (ch) { case '\x1a': fseek(pimg->fh, -1, SEEK_CUR); /* FALL THRU */ case EOF: pimg->start = ftell(pimg->fh); return pimg; case 'N': { char *line, *q; fpos = ftell(pimg->fh) - 1; if (!pimg->survey) { /* FIXME : if there's only one survey in the file, it'd be nice * to use its description as the title here... */ ungetc('N', pimg->fh); pimg->start = fpos; return pimg; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } len = 0; while (line[len] > 32) ++len; if (!buf_included(pimg, line, len)) { osfree(line); continue; } q = strchr(line + len, 'C'); if (q && q[1]) { osfree(pimg->title); pimg->title = my_strdup(q + 1); } else if (!pimg->title) { pimg->title = my_strdup(pimg->label); } osfree(line); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } if (!pimg->start) pimg->start = fpos; fseek(pimg->fh, pimg->start, SEEK_SET); return pimg; } case 'M': case 'D': pimg->start = ftell(pimg->fh) - 1; break; } while (ch != '\n' && ch != '\r') { ch = GETC(pimg->fh); } } } /* Although these are often referred to as "CMAP .XYZ files", it seems * that actually, the extension .XYZ isn't used, rather .SHT (shot * variant, produced by CMAP v16 and later), .UNA (unadjusted) and * .ADJ (adjusted) extensions are. Since img has long checked for * .XYZ, we continue to do so in case anyone is relying on it. */ if (has_ext(fnm, len, "sht") || has_ext(fnm, len, "adj") || has_ext(fnm, len, "una") || has_ext(fnm, len, "xyz")) { char *line; xyz_file: /* Spaces aren't legal in CMAP station names, but dots are, so * use space as the level separator. */ pimg->separator = ' '; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } /* There doesn't seem to be a spec for what happens after 1999 with cmap * files, so this code allows for: * * 21xx -> xx (up to 2150) * * 21xx -> 1xx (up to 2199) * * full year being specified instead of 2 digits */ len = strlen(line); if (len > 59) { /* Don't just truncate at column 59, allow for a > 2 digit year. */ char * p = strstr(line + len, "Page"); if (p) { while (p > line && p[-1] == ' ') --p; *p = '\0'; len = p - line; } else { line[59] = '\0'; } } if (len > 45) { /* YY/MM/DD HH:MM */ struct tm tm; unsigned long v; char * p; pimg->datestamp = my_strdup(line + 45); p = pimg->datestamp; v = strtoul(p, &p, 10); if (v <= 50) { /* In the absence of a spec for cmap files, assume <= 50 means 21st * century. */ v += 2000; } else if (v < 200) { /* Map 100-199 to 21st century. */ v += 1900; } if (v == ULONG_MAX || *p++ != '/') goto bad_cmap_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '/') goto bad_cmap_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_cmap_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_cmap_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60) goto bad_cmap_date; tm.tm_min = v; if (*p == ':') { v = strtoul(p + 1, &p, 10); if (v > 60) goto bad_cmap_date; tm.tm_sec = v; } else { tm.tm_sec = 0; } tm.tm_isdst = 0; /* We have no indication of what timezone this timestamp is in. It's * probably local time for whoever processed the data, so just assume * UTC, which is at least fairly central in the possibilities. */ pimg->datestamp_numeric = mktime_with_tz(&tm, ""); } else { pimg->datestamp = my_strdup(TIMENA); } bad_cmap_date: if (strncmp(line, " Cave Survey Data Processed by CMAP ", LITLEN(" Cave Survey Data Processed by CMAP ")) == 0) { len = 0; } else { if (len > 45) { line[45] = '\0'; len = 45; } while (len > 2 && line[len - 1] == ' ') --len; if (len > 2) { line[len] = '\0'; pimg->title = my_strdup(line + 2); } } if (len <= 2) pimg->title = baseleaf_from_fnm(fnm); osfree(line); if (!pimg->datestamp || !pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || (line[1] != 'S' && line[1] != 'O')) { img_errno = IMG_BADFORMAT; goto error; } if (line[1] == 'S') { pimg->version = VERSION_CMAP_STATION; } else { pimg->version = VERSION_CMAP_SHOT; } osfree(line); line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || line[1] != '-') { img_errno = IMG_BADFORMAT; goto error; } osfree(line); pimg->start = ftell(pimg->fh); return pimg; } if (fread(buf, LITLEN(FILEID) + 1, 1, pimg->fh) != 1 || memcmp(buf, FILEID"\n", LITLEN(FILEID) + 1) != 0) { if (fread(buf + LITLEN(FILEID) + 1, 8, 1, pimg->fh) == 1 && memcmp(buf, FILEID"\r\nv0.01\r\n", LITLEN(FILEID) + 9) == 0) { /* v0 3d file with DOS EOLs */ pimg->version = 0; goto v03d; } rewind(pimg->fh); if (buf[1] == ' ') { if (buf[0] == ' ') { /* Looks like a CMAP .xyz file ... */ goto xyz_file; } else if (strchr("ZSNF", buf[0])) { /* Looks like a Compass .plt file ... */ /* Almost certainly it'll start "Z " */ goto plt_file; } } if (buf[0] == '(') { /* Looks like a Survex .pos file ... */ goto pos_file; } img_errno = IMG_BADFORMAT; goto error; } /* check file format version */ ch = GETC(pimg->fh); pimg->version = 0; if (tolower(ch) == 'b') { /* binary file iff B/b prefix */ pimg->version = 1; ch = GETC(pimg->fh); } if (ch != 'v') { img_errno = IMG_BADFORMAT; goto error; } ch = GETC(pimg->fh); if (ch == '0') { if (fread(buf, 4, 1, pimg->fh) != 1 || memcmp(buf, ".01\n", 4) != 0) { img_errno = IMG_BADFORMAT; goto error; } /* nothing special to do */ } else if (pimg->version == 0) { if (ch < '2' || ch > '0' + IMG_VERSION_MAX || GETC(pimg->fh) != '\n') { img_errno = IMG_TOONEW; goto error; } pimg->version = ch - '0'; } else { img_errno = IMG_BADFORMAT; goto error; } v03d: { size_t title_len; char * title = getline_alloc_len(pimg->fh, &title_len); if (pimg->version == 8 && title) { /* We sneak in an extra field after a zero byte here, containing the * specified coordinate system (if any). Older readers will just * not see it (which is fine), and this trick avoids us having to * bump the 3d format version. */ size_t real_len = strlen(title); if (real_len != title_len) { char * cs = title + real_len + 1; if (memcmp(cs, "+init=", 6) == 0) { /* PROJ 5 and later don't handle +init=esri: but * that's what cavern used to put in .3d files for * coordinate systems specified using ESRI codes. We parse * and convert the strings cavern used to generate and * convert to the form ESRI: which is still * understood. * * PROJ 6 and later don't recognise +init=epsg: * by default and don't apply datum shift terms in some * cases, so we also convert these to the form * EPSG:. */ char * p = cs + 6; if (p[4] == ':' && isdigit((unsigned char)p[5]) && ((memcmp(p, "epsg", 4) == 0 || memcmp(p, "esri", 4) == 0))) { p = p + 6; while (isdigit((unsigned char)*p)) { ++p; } /* Allow +no_defs to be omitted as it seems to not * actually do anything with recent PROJ - cavern always * included it, but other software generating 3d files * may not. */ if (*p == '\0' || strcmp(p, " +no_defs") == 0) { int i; cs = cs + 6; for (i = 0; i < 4; ++i) { cs[i] = toupper(cs[i]); } *p = '\0'; } } } else if (memcmp(cs, "+proj=", 6) == 0) { /* Convert S_MERC and UTM proj strings which cavern used * to generate to their corresponding EPSG: codes. */ char * p = cs + 6; if (memcmp(p, "utm +ellps=WGS84 +datum=WGS84 +units=m +zone=", 45) == 0) { int n = 0; p += 45; while (isdigit((unsigned char)*p)) { n = n * 10 + (*p - '0'); ++p; } if (memcmp(p, " +south", 7) == 0) { p += 7; n += 32700; } else { n += 32600; } /* Allow +no_defs to be omitted as it seems to not * actually do anything with recent PROJ - cavern always * included it, but other software generating 3d files * may not have. */ if (*p == '\0' || strcmp(p, " +no_defs") == 0) { sprintf(cs, "EPSG:%d", n); } } else if (memcmp(p, "merc +lat_ts=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +nadgrids=@null", 89) == 0) { p = p + 89; /* Allow +no_defs to be omitted as it seems to not * actually do anything with recent PROJ - cavern always * included it, but other software generating 3d files * may not have. */ if (*p == '\0' || strcmp(p, " +no_defs") == 0) { strcpy(cs, "EPSG:3857"); } } } pimg->cs = my_strdup(cs); } } if (!pimg->title) { pimg->title = title; } else { osfree(title); } } pimg->datestamp = getline_alloc(pimg->fh); if (!pimg->title || !pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; error: osfree(pimg->title); osfree(pimg->cs); osfree(pimg->datestamp); osfree(pimg->filename_opened); if (pimg->close_func) pimg->close_func(pimg->fh); osfree(pimg); return NULL; } if (pimg->version >= 8) { int flags = GETC(pimg->fh); if (flags & img_FFLAG_EXTENDED) pimg->is_extended_elevation = 1; } else { len = strlen(pimg->title); if (len > 11 && strcmp(pimg->title + len - 11, " (extended)") == 0) { pimg->title[len - 11] = '\0'; pimg->is_extended_elevation = 1; } } if (pimg->datestamp[0] == '@') { unsigned long v; char * p; errno = 0; v = strtoul(pimg->datestamp + 1, &p, 10); if (errno == 0 && *p == '\0') pimg->datestamp_numeric = v; /* FIXME: We're assuming here that the C time_t epoch is 1970, which is * true for Unix-like systems, macOS and Windows, but isn't guaranteed * by ISO C. */ } else { /* %a,%Y.%m.%d %H:%M:%S %Z */ struct tm tm; unsigned long v; char * p = pimg->datestamp; while (isalpha((unsigned char)*p)) ++p; if (*p == ',') ++p; while (isspace((unsigned char)*p)) ++p; v = strtoul(p, &p, 10); if (v == ULONG_MAX || *p++ != '.') goto bad_3d_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '.') goto bad_3d_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_3d_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_3d_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60 || *p++ != ':') goto bad_3d_date; tm.tm_min = v; v = strtoul(p, &p, 10); if (v > 60) goto bad_3d_date; tm.tm_sec = v; tm.tm_isdst = 0; while (isspace((unsigned char)*p)) ++p; /* p now points to the timezone string. * * However, it's likely to be a string like "BST", and such strings can * be ambiguous (BST could be UTC+1 or UTC+6), so it is impossible to * reliably convert in all cases. Just pass what we have to tzset() - if * it doesn't handle it, UTC will be used. */ pimg->datestamp_numeric = mktime_with_tz(&tm, p); } bad_3d_date: pimg->start = ftell(pimg->fh); return pimg; } int img_rewind(img *pimg) { if (!pimg->fRead) { img_errno = IMG_WRITEERROR; return 0; } if (fseek(pimg->fh, pimg->start, SEEK_SET) != 0) { img_errno = IMG_READERROR; return 0; } clearerr(pimg->fh); /* [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't entered a survey * yet */ /* for VERSION_CMAP_SHOT, we store the last station here to detect whether * we MOVE or LINE */ pimg->label_len = 0; pimg->style = img_STYLE_UNKNOWN; return 1; } img * img_open_write_cs(const char *fnm, const char *title, const char *cs, int flags) { if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } return img_write_stream(fopen(fnm, "wb"), fclose, title, cs, flags); } img * img_write_stream(FILE *stream, int (*close_func)(FILE*), const char *title, const char *cs, int flags) { time_t tm; img *pimg; if (stream == NULL) { img_errno = IMG_FILENOTFOUND; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; if (close_func) close_func(stream); return NULL; } pimg->fh = stream; pimg->close_func = close_func; pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { if (pimg->close_func) pimg->close_func(pimg->fh); osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->filename_opened = NULL; /* Output image file header */ fputs("Survex 3D Image File\n", pimg->fh); /* file identifier string */ if (img_output_version < 2) { pimg->version = 1; fputs("Bv0.01\n", pimg->fh); /* binary file format version number */ } else { pimg->version = (img_output_version > IMG_VERSION_MAX) ? IMG_VERSION_MAX : img_output_version; fprintf(pimg->fh, "v%d\n", pimg->version); /* file format version no. */ } fputs(title, pimg->fh); if (pimg->version < 8 && (flags & img_FFLAG_EXTENDED)) { /* Older format versions append " (extended)" to the title to mark * extended elevations. */ size_t len = strlen(title); if (len < 11 || strcmp(title + len - 11, " (extended)") != 0) fputs(" (extended)", pimg->fh); } if (pimg->version == 8 && cs && *cs) { /* We sneak in an extra field after a zero byte here, containing the * specified coordinate system (if any). Older readers will just not * see it (which is fine), and this trick avoids us having to bump the * 3d format version. */ PUTC('\0', pimg->fh); fputs(cs, pimg->fh); } PUTC('\n', pimg->fh); if (getenv("SOURCE_DATE_EPOCH")) { /* Support reproducible builds which create .3d files by not embedding a * timestamp if SOURCE_DATE_EPOCH is set. We don't bother trying to * parse the timestamp as it is simpler and seems cleaner to just not * embed a timestamp at all given the 3d file format already provides * a way not to. * * See https://reproducible-builds.org/docs/source-date-epoch/ */ tm = (time_t)-1; } else { tm = time(NULL); } if (tm == (time_t)-1) { fputsnl(TIMENA, pimg->fh); } else if (pimg->version <= 7) { char date[256]; /* output current date and time in format specified */ strftime(date, 256, TIMEFMT, localtime(&tm)); fputsnl(date, pimg->fh); } else { fprintf(pimg->fh, "@%ld\n", (long)tm); } if (pimg->version >= 8) { /* Clear bit one in case anyone has been passing true for fBinary. */ flags &=~ 1; PUTC(flags, pimg->fh); } #if 0 if (img_output_version >= 5) { static const unsigned char codelengths[32] = { 4, 8, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; fwrite(codelengths, 32, 1, pimg->fh); } #endif pimg->fRead = 0; /* writing to this file */ img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ pimg->label_buf[0] = '\0'; pimg->label_len = 0; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; pimg->olddate1 = pimg->olddate2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; pimg->olddays1 = pimg->olddays2 = -1; #endif pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->n_legs = 0; pimg->length = 0.0; pimg->E = pimg->H = pimg->V = 0.0; /* Don't check for write errors now - let img_close() report them... */ return pimg; } static void read_xyz_station_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 6, 9); num[9] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 15, 9); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void read_xyz_shot_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 40, 10); num[10] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 50, 10); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 60, 9); num[9] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void subtract_xyz_shot_deltas(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 15, 9); num[9] = '\0'; pt->x -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->y -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 32, 8); pt->z -= atof(num) / METRES_PER_FOOT; } static int read_coord(FILE *fh, img_point *pt) { SVX_ASSERT(fh); SVX_ASSERT(pt); pt->x = get32(fh) / 100.0; pt->y = get32(fh) / 100.0; pt->z = get32(fh) / 100.0; if (ferror(fh) || feof(fh)) { img_errno = feof(fh) ? IMG_BADFORMAT : IMG_READERROR; return 0; } return 1; } static int skip_coord(FILE *fh) { return (fseek(fh, 12, SEEK_CUR) == 0); } static int read_v3label(img *pimg) { char *q; long len = GETC(pimg->fh); if (len == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (len == 0xfe) { len += get16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } else if (len == 0xff) { len = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh) || len < 0xfe + 0xffff) { img_errno = IMG_BADFORMAT; return img_BAD; } } if (!check_label_space(pimg, pimg->label_len + len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } q = pimg->label_buf + pimg->label_len; pimg->label_len += len; if (len && fread(q, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[len] = '\0'; return 0; } static int read_v8label(img *pimg, int common_flag, size_t common_val) { char *q; size_t del, add; if (common_flag) { if (common_val == 0) return 0; add = del = common_val; } else { int ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0x00) { del = ch >> 4; add = ch & 0x0f; } else { ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { del = ch; } else { del = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { add = ch; } else { add = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } } if (add > del && !check_label_space(pimg, pimg->label_len + add - del + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } if (del > pimg->label_len) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= del; q = pimg->label_buf + pimg->label_len; pimg->label_len += add; if (add && fread(q, add, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[add] = '\0'; return 0; } static int img_read_item_new(img *pimg, img_point *p); static int img_read_item_v3to7(img *pimg, img_point *p); static int img_read_item_ancient(img *pimg, img_point *p); static int img_read_item_ascii_wrapper(img *pimg, img_point *p); static int img_read_item_ascii(img *pimg, img_point *p); int img_read_item(img *pimg, img_point *p) { pimg->flags = 0; if (pimg->version >= 8) { return img_read_item_new(pimg, p); } else if (pimg->version >= 3) { return img_read_item_v3to7(pimg, p); } else if (pimg->version >= 1) { return img_read_item_ancient(pimg, p); } else { return img_read_item_ascii_wrapper(pimg, p); } } static int img_read_item_new(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending >= 0x40) { if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (opt >> 6 == 0) { if (opt <= 4) { if (opt == 0 && pimg->style == 0) return img_STOP; /* end of data marker */ /* STYLE */ pimg->style = opt; goto again3; } if (opt >= 0x10) { switch (opt) { case 0x10: { /* No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x11: { /* Single date */ int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif break; } case 0x12: { /* Date range (short) */ int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x13: { /* Date range (long) */ int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x1f: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; return img_ERROR_INFO; case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (!stn_included(pimg)) { return img_XSECT_END; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } goto again3; } if (opt != 15) { /* 1-14 and 16-31 reserved */ img_errno = IMG_BADFORMAT; return img_BAD; } result = img_MOVE; } else if (opt >= 0x80) { if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; result = img_LABEL; if (!stn_included(pimg)) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->flags = (int)opt & 0x7f; } else if ((opt >> 6) == 1) { if (read_v8label(pimg, opt & 0x20, 0) == img_BAD) return img_BAD; result = img_LINE; if (!survey_included(pimg)) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x1f; } else { img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_v3to7(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } if (pimg->pending >= 0x80) { *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } switch (opt >> 6) { case 0: if (opt == 0) { if (!pimg->label_len) return img_STOP; /* end of data marker */ pimg->label_len = 0; goto again3; } if (opt < 15) { /* 1-14 mean trim that many levels from current prefix */ int c; if (pimg->label_len <= 17) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } /* extra - 1 because label_len points to one past the end */ c = pimg->label_len - 17 - 1; while (pimg->label_buf[c] != '.' || --opt > 0) { if (--c < 0) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } } c++; pimg->label_len = c; goto again3; } if (opt == 15) { result = img_MOVE; break; } if (opt >= 0x20) { switch (opt) { case 0x20: /* Single date */ if (pimg->version < 7) { int date1 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = date1; #else /* IMG_API_VERSION == 1 */ if (date1 != 0) { pimg->days2 = pimg->days1 = (date1 / 86400) + 25567; } else { pimg->days2 = pimg->days1 = -1; } #endif } else { int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif } break; case 0x21: /* Date range (short for v7+) */ if (pimg->version < 7) { INT32_T date1 = get32(pimg->fh); INT32_T date2 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = date1; pimg->date2 = date2; #else /* IMG_API_VERSION == 1 */ pimg->days1 = (date1 / 86400) + 25567; pimg->days2 = (date2 / 86400) + 25567; #endif } else { int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif } break; case 0x22: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } return img_ERROR_INFO; case 0x23: { /* v7+: Date range (long) */ if (pimg->version < 7) { img_errno = IMG_BADFORMAT; return img_BAD; } int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x24: { /* v7+: No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v3label(pimg) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (!stn_included(pimg)) { return img_XSECT_END; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } goto again3; } /* 16-31 mean remove (n - 15) characters from the prefix */ /* zero prefix using 0 */ if (pimg->label_len <= (size_t)(opt - 15)) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= (opt - 15); goto again3; case 1: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LABEL; if (!stn_included(pimg)) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->flags = (int)opt & 0x3f; break; case 2: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LINE; if (!survey_included(pimg)) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x3f; break; default: img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_ancient(img *pimg, img_point *p) { int result; static long opt_lookahead = 0; static img_point pt = { 0.0, 0.0, 0.0 }; long opt; again: /* label to goto if we get a cross */ pimg->label = pimg->label_buf; pimg->label[0] = '\0'; if (pimg->version == 1) { if (opt_lookahead) { opt = opt_lookahead; opt_lookahead = 0; } else { opt = get32(pimg->fh); } } else { opt = GETC(pimg->fh); } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } switch (opt) { case -1: case 0: return img_STOP; /* end of data marker */ case 1: /* skip coordinates */ if (!skip_coord(pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto again; case 2: case 3: { size_t len; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (pimg->label[0] == '\\') pimg->label++; len = strlen(pimg->label); if (len == 0 || pimg->label[len - 1] != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 1) goto again; pimg->label[len - 1] = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ if (opt == 2) goto done; break; } case 6: case 7: { long len; result = img_LABEL; if (opt == 7) pimg->flags = GETC(pimg->fh); else pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ len = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 0) goto again; if (!check_label_space(pimg, len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } if (fread(pimg->label_buf, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } pimg->label_buf[len] = '\0'; break; } case 4: result = img_MOVE; break; case 5: result = img_LINE; break; default: switch ((int)opt & 0xc0) { case 0x80: pimg->flags = (int)opt & 0x3f; result = img_LINE; break; case 0x40: { char *q; pimg->flags = (int)opt & 0x3f; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q = pimg->label_buf + strlen(pimg->label_buf) - 1; /* Ignore empty-labels in some .3d files (caused by a bug) */ if (q == pimg->label_buf) goto again; if (*q != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } *q = '\0'; break; } default: img_errno = IMG_BADFORMAT; return img_BAD; } break; } if (!read_coord(pimg->fh, &pt)) return img_BAD; if (result == img_LABEL && !stn_included(pimg)) { goto again; } done: *p = pt; if (result == img_MOVE && pimg->version == 1) { /* peek at next code and see if it's an old-style label */ opt_lookahead = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (opt_lookahead == 2) return img_read_item_ancient(pimg, p); } return result; } static int img_read_item_ascii_wrapper(img *pimg, img_point *p) { /* We need to set the default locale for fscanf() to work on * numbers with "." as decimal point. */ int result; char * current_locale = my_strdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); result = img_read_item_ascii(pimg, p); setlocale(LC_NUMERIC, current_locale); free(current_locale); return result; } /* Handle all ASCII formats. */ static int img_read_item_ascii(img *pimg, img_point *p) { int result; pimg->label = pimg->label_buf; if (pimg->version == 0) { ascii_again: pimg->label[0] = '\0'; if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { pimg->pending = 0; result = img_LINE; } else { char cmd[7]; /* Stop if nothing found */ if (fscanf(pimg->fh, "%6s", cmd) < 1) return img_STOP; if (strcmp(cmd, "move") == 0) result = img_MOVE; else if (strcmp(cmd, "draw") == 0) result = img_LINE; else if (strcmp(cmd, "line") == 0) { /* set flag to indicate to process second triplet as LINE */ pimg->pending = 1; result = img_MOVE; } else if (strcmp(cmd, "cross") == 0) { if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto ascii_again; } else if (strcmp(cmd, "name") == 0) { size_t off = 0; int ch = GETC(pimg->fh); if (ch == ' ') ch = GETC(pimg->fh); while (ch != ' ') { if (ch == '\n' || ch == EOF) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (off == pimg->buf_len) { if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label_buf[off++] = ch; ch = GETC(pimg->fh); } pimg->label_buf[off] = '\0'; pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ result = img_LABEL; } else { img_errno = IMG_BADFORMAT; return img_BAD; /* unknown keyword */ } } if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (result == img_LABEL && !stn_included(pimg)) { goto ascii_again; } return result; } else if (pimg->version == VERSION_SURVEX_POS) { /* Survex .pos file */ int ch; size_t off; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ againpos: while (fscanf(pimg->fh, "(%lf,%lf,%lf )", &p->x, &p->y, &p->z) != 3) { if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->pending = 1; /* ignore rest of line */ do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); } pimg->label_buf[0] = '\0'; do { ch = GETC(pimg->fh); } while (ch == ' ' || ch == '\t'); if (ch == '\n' || ch == EOF) { /* If there's no label, set img_SFLAG_ANON. */ pimg->flags |= img_SFLAG_ANON; return img_LABEL; } pimg->label_buf[0] = ch; off = 1; while (!feof(pimg->fh)) { if (!fgets(pimg->label_buf + off, pimg->buf_len - off, pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } off += strlen(pimg->label_buf + off); if (off && pimg->label_buf[off - 1] == '\n') { pimg->label_buf[off - 1] = '\0'; break; } if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; if (!stn_included(pimg)) goto againpos; return img_LABEL; } else if (pimg->version == VERSION_COMPASS_PLT) { /* Compass .plt file */ if (pimg->pending > 0) { /* -1 signals we've entered the first survey we want to * read, and need to fudge lots if the first action is 'D'... */ /* pending MOVE or LINE */ int r = pimg->pending - 4; pimg->pending = 0; pimg->flags = 0; pimg->label[pimg->label_len] = '\0'; return r; } while (1) { char *line; char *q; size_t len = 0; int ch = GETC(pimg->fh); switch (ch) { case '\x1a': case EOF: /* Don't insist on ^Z at end of file */ return img_STOP; case 'X': case 'F': case 'S': /* bounding boX (marks end of survey), Feature survey, or * new Section - skip to next survey */ if (pimg->survey) return img_STOP; skip_to_N: while (1) { do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); while (ch == '\n' || ch == '\r') ch = GETC(pimg->fh); if (ch == 'N') break; if (ch == '\x1a' || ch == EOF) return img_STOP; } /* FALLTHRU */ case 'N': line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } while (line[len] > 32) ++len; if (pimg->label_len == 0) pimg->pending = -1; if (!check_label_space(pimg, len + 1)) { osfree(line); img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label_len = len; pimg->label = pimg->label_buf; memcpy(pimg->label, line, len); pimg->label[len] = '\0'; osfree(line); break; case 'M': case 'D': { /* Move or Draw */ long fpos = -1; if (pimg->survey && pimg->label_len == 0) { /* We're only holding onto this line in case the first line * of the 'N' is a 'D', so skip it for now... */ goto skip_to_N; } if (ch == 'D' && pimg->pending == -1) { if (pimg->survey) { fpos = ftell(pimg->fh) - 1; fseek(pimg->fh, pimg->start, SEEK_SET); ch = GETC(pimg->fh); pimg->pending = 0; } else { /* If a file actually has a 'D' before any 'M', then * pretend the 'D' is an 'M' - one of the examples * in the docs was like this! */ ch = 'M'; } } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } /* Compass stores coordinates as North, East, Up = (y,x,z)! */ if (sscanf(line, "%lf%lf%lf", &p->y, &p->x, &p->z) != 3) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } p->x *= METRES_PER_FOOT; p->y *= METRES_PER_FOOT; p->z *= METRES_PER_FOOT; q = strchr(line, 'S'); if (!q) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } ++q; len = 0; while (q[len] > ' ') ++len; q[len] = '\0'; len += 2; /* ' ' and '\0' */ if (!check_label_space(pimg, pimg->label_len + len)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label = pimg->label_buf; if (pimg->label_len) { pimg->label[pimg->label_len] = ' '; memcpy(pimg->label + pimg->label_len + 1, q, len - 1); } else { memcpy(pimg->label, q, len - 1); } q += len - 1; /* Now read LRUD. Technically, this is optional but virtually * all PLT files have it (with dummy negative values if no LRUD * was measured) and some versions of Compass can't read PLT * files without it! */ while (*q && *q <= ' ') q++; if (*q == 'P') { if (sscanf(q + 1, "%lf%lf%lf%lf", &pimg->l, &pimg->r, &pimg->u, &pimg->d) != 4) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } pimg->l *= METRES_PER_FOOT; pimg->r *= METRES_PER_FOOT; pimg->u *= METRES_PER_FOOT; pimg->d *= METRES_PER_FOOT; } else { pimg->l = pimg->r = pimg->u = pimg->d = -1; } osfree(line); pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ if (fpos != -1) { fseek(pimg->fh, fpos, SEEK_SET); } else { pimg->pending = (ch == 'M' ? img_MOVE : img_LINE) + 4; } return img_LABEL; } default: img_errno = IMG_BADFORMAT; return img_BAD; } } } else { /* CMAP .xyz file */ char *line = NULL; char *q; size_t len; if (pimg->pending) { /* pending MOVE or LINE or LABEL or STOP */ int r = pimg->pending - 4; /* Set label to empty - don't use "" as we adjust label relative * to label_buf when label_buf is reallocated. */ pimg->label = pimg->label_buf + strlen(pimg->label_buf); pimg->flags = 0; if (r == img_LABEL) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); subtract_xyz_shot_deltas(p, pimg->label_buf + 16); pimg->pending = img_STOP + 4; return img_MOVE; } pimg->pending = 0; if (r == img_STOP) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); return img_LINE; } return r; } pimg->label = pimg->label_buf; do { osfree(line); if (feof(pimg->fh)) return img_STOP; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } while (line[0] == ' ' || line[0] == '\0'); if (line[0] == '\x1a') return img_STOP; len = strlen(line); if (pimg->version == VERSION_CMAP_STATION) { /* station variant */ if (len < 37) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(pimg->label, line, 6); q = (char *)memchr(pimg->label, ' ', 6); if (!q) q = pimg->label + 6; *q = '\0'; read_xyz_station_coords(p, line); /* FIXME: look at prev for lines (line + 32, 5) */ /* FIXME: duplicate stations... */ return img_LABEL; } else { /* Shot variant (VERSION_CMAP_SHOT) */ char old[8], new_[8]; if (len < 61) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(old, line, 7); q = (char *)memchr(old, ' ', 7); if (!q) q = old + 7; *q = '\0'; memcpy(new_, line + 7, 7); q = (char *)memchr(new_, ' ', 7); if (!q) q = new_ + 7; *q = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; if (strcmp(old, new_) == 0) { pimg->pending = img_MOVE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } if (strcmp(old, pimg->label) == 0) { pimg->pending = img_LINE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } pimg->pending = img_LABEL + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); memcpy(pimg->label + 16, line, 70); osfree(line); return img_LABEL; } } } static void write_coord(FILE *fh, double x, double y, double z) { SVX_ASSERT(fh); /* Output in cm */ static INT32_T X_, Y_, Z_; INT32_T X = my_lround(x * 100.0); INT32_T Y = my_lround(y * 100.0); INT32_T Z = my_lround(z * 100.0); X_ -= X; Y_ -= Y; Z_ -= Z; put32(X, fh); put32(Y, fh); put32(Z, fh); X_ = X; Y_ = Y; Z_ = Z; } static int write_v3label(img *pimg, int opt, const char *s) { size_t len, n, dot; /* find length of common prefix */ dot = 0; for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { if (s[len] == '.') dot = len + 1; } SVX_ASSERT(len <= pimg->label_len); n = pimg->label_len - len; if (len == 0) { if (pimg->label_len) PUTC(0, pimg->fh); } else if (n <= 16) { if (n) PUTC(n + 15, pimg->fh); } else if (dot == 0) { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } else { const char *p = pimg->label_buf + dot; n = 1; for (len = pimg->label_len - dot - 17; len; len--) { if (*p++ == '.') n++; } if (n <= 14) { PUTC(n, pimg->fh); len = dot; } else { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } } n = strlen(s + len); PUTC(opt, pimg->fh); if (n < 0xfe) { PUTC(n, pimg->fh); } else if (n < 0xffff + 0xfe) { PUTC(0xfe, pimg->fh); put16((short)(n - 0xfe), pimg->fh); } else { PUTC(0xff, pimg->fh); put32(n, pimg->fh); } fwrite(s + len, n, 1, pimg->fh); n += len; pimg->label_len = n; if (!check_label_space(pimg, n + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, n - len + 1); return !ferror(pimg->fh); } static int write_v8label(img *pimg, int opt, int common_flag, size_t common_val, const char *s) { size_t len, del, add; /* find length of common prefix */ for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { } SVX_ASSERT(len <= pimg->label_len); del = pimg->label_len - len; add = strlen(s + len); if (add == common_val && del == common_val) { PUTC(opt | common_flag, pimg->fh); } else { PUTC(opt, pimg->fh); if (del <= 15 && add <= 15 && (del || add)) { PUTC((del << 4) | add, pimg->fh); } else { PUTC(0x00, pimg->fh); if (del < 0xff) { PUTC(del, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(del, pimg->fh); } if (add < 0xff) { PUTC(add, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(add, pimg->fh); } } } if (add) fwrite(s + len, add, 1, pimg->fh); pimg->label_len = len + add; if (add > del && !check_label_space(pimg, pimg->label_len + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, add + 1); return !ferror(pimg->fh); } static void img_write_item_date_new(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (unset) { PUTC(0x10, pimg->fh); } else { PUTC(0x11, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_date(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (img_output_version < 7) { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); #endif } else { if (unset) { PUTC(0x24, pimg->fh); } else { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } } else { if (img_output_version < 7) { PUTC(0x21, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); put32(pimg->date2, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); put32((pimg->days2 - 25567) * 86400, pimg->fh); #endif } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z); void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z) { if (!pimg) return; if (pimg->version >= 8) { img_write_item_new(pimg, code, flags, s, x, y, z); } else if (pimg->version >= 3) { img_write_item_v3to7(pimg, code, flags, s, x, y, z); } else { img_write_item_ancient(pimg, code, flags, s, x, y, z); } } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v8label(pimg, 0x80 | flags, 0, -1, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; img_write_item_date_new(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v8label(pimg, 0x30 | flags, 0, -1, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: img_write_item_date_new(pimg); if (pimg->style != pimg->oldstyle) { switch (pimg->style) { case img_STYLE_NORMAL: case img_STYLE_DIVING: case img_STYLE_CARTESIAN: case img_STYLE_CYLPOLAR: case img_STYLE_NOSURVEY: PUTC(pimg->style, pimg->fh); break; } pimg->oldstyle = pimg->style; } write_v8label(pimg, 0x40 | flags, 0x20, 0x00, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v3label(pimg, 0x40 | flags, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; /* Need at least version 5 for img_XSECT. */ if (pimg->version < 5) return; img_write_item_date(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v3label(pimg, 0x30 | flags, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: if (pimg->version >= 4) { img_write_item_date(pimg); } write_v3label(pimg, 0x80 | flags, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z) { size_t len; INT32_T opt = 0; SVX_ASSERT(pimg->version > 0); switch (code) { case img_LABEL: if (pimg->version == 1) { /* put a move before each label */ img_write_item_ancient(pimg, img_MOVE, 0, NULL, x, y, z); put32(2, pimg->fh); fputsnl(s, pimg->fh); return; } len = strlen(s); if (len > 255 || strchr(s, '\n')) { /* long label - not in early incarnations of v2 format, but few * 3d files will need these, so better not to force incompatibility * with a new version I think... */ PUTC(7, pimg->fh); PUTC(flags, pimg->fh); put32(len, pimg->fh); fputs(s, pimg->fh); } else { PUTC(0x40 | (flags & 0x3f), pimg->fh); fputsnl(s, pimg->fh); } opt = 0; break; case img_MOVE: opt = 4; break; case img_LINE: if (pimg->version > 1) { opt = 0x80 | (flags & 0x3f); break; } opt = 5; break; default: /* ignore for now */ return; } if (pimg->version == 1) { put32(opt, pimg->fh); } else { if (opt) PUTC(opt, pimg->fh); } write_coord(pimg->fh, x, y, z); } /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V) { PUTC((pimg->version >= 8 ? 0x1f : 0x22), pimg->fh); put32(n_legs, pimg->fh); put32((INT32_T)my_lround(length * 100.0), pimg->fh); put32((INT32_T)my_lround(E * 100.0), pimg->fh); put32((INT32_T)my_lround(H * 100.0), pimg->fh); put32((INT32_T)my_lround(V * 100.0), pimg->fh); } int img_close(img *pimg) { int result = 1; if (pimg) { if (pimg->fh) { if (pimg->fRead) { osfree(pimg->survey); osfree(pimg->title); osfree(pimg->cs); osfree(pimg->datestamp); } else { /* write end of data marker */ switch (pimg->version) { case 1: put32((INT32_T)-1, pimg->fh); break; default: if (pimg->version <= 7 ? (pimg->label_len != 0) : (pimg->style != img_STYLE_NORMAL)) { PUTC(0, pimg->fh); } /* FALL THROUGH */ case 2: PUTC(0, pimg->fh); break; } } if (ferror(pimg->fh)) result = 0; if (pimg->close_func && pimg->close_func(pimg->fh)) result = 0; if (!result) img_errno = pimg->fRead ? IMG_READERROR : IMG_WRITEERROR; } osfree(pimg->label_buf); osfree(pimg->filename_opened); osfree(pimg); } return result; } survex-1.4.4/src/gradient.pov0000644000175000017500000000156014141575516013122 00000000000000/* color_map file created by the GIMP */ /* https://www.gimp.org/ */ color_map { [0.000000 color rgbt <0.236267, 0.265919, 1.000000, 0.000000>] [0.164434 color rgbt <0.236267, 0.476027, 0.853163, 0.000000>] [0.377295 color rgbt <0.236267, 0.686135, 0.512695, 0.000000>] [0.377295 color rgbt <0.236267, 0.686135, 0.512695, 0.000000>] [0.470785 color rgbt <0.557528, 0.713981, 0.256348, 0.000000>] [0.558222 color rgbt <0.878788, 0.741828, 0.000000, 0.000000>] [0.558222 color rgbt <0.878788, 0.741828, 0.000000, 0.000000>] [0.651085 color rgbt <0.840094, 0.633394, 0.090664, 0.000000>] [0.729549 color rgbt <0.801401, 0.524960, 0.181328, 0.000000>] [0.729549 color rgbt <0.801401, 0.524960, 0.181328, 0.000000>] [0.875000 color rgbt <0.859034, 0.275473, 0.123558, 0.000000>] [1.000000 color rgbt <0.916667, 0.025986, 0.065789, 0.000000>] } /* color_map */ survex-1.4.4/src/out.h0000644000175000017500000000171714141575516011563 00000000000000/* out.h * Header file for output stuff * Copyright (C) Olly Betts 2000,2001,2013 * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #define out_current_action(S) if(fQuiet)(void)0;else printf("\n%s...\n", (S)) #define out_current_action1(S,A) if(!fQuiet){putnl();printf(S,A);printf("...\n");}else(void)0 survex-1.4.4/src/printing.cc0000644000175000017500000020556314367064701012750 00000000000000/* printing.cc */ /* Aven printing code */ /* Copyright (C) 1993-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2017,2018 Olly Betts * Copyright (C) 2001,2004 Philip Underwood * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "export.h" #include "filelist.h" #include "filename.h" #include "message.h" #include "useful.h" #include "aven.h" #include "avenprcore.h" #include "mainfrm.h" #include "printing.h" using namespace std; // How many decimal points to show on angles: #define ANGLE_DP 1 #if ANGLE_DP == 0 # define ANGLE_FMT wxT("%03.f") # define ANGLE2_FMT wxT("%.f") #elif ANGLE_DP == 1 # define ANGLE_FMT wxT("%05.1f") # define ANGLE2_FMT wxT("%.1f") #elif ANGLE_DP == 2 # define ANGLE_FMT wxT("%06.2f") # define ANGLE2_FMT wxT("%.2f") #else # error Need to add ANGLE_FMT and ANGLE2_FMT for the currently set ANGLE_DP #endif static wxString format_angle(const wxChar * fmt, double angle) { wxString s; s.Printf(fmt, angle); size_t dot = s.find('.'); size_t i = s.size(); while (i > dot) { --i; if (s[i] != '0') { if (i != dot) ++i; s.resize(i); break; } } s += wmsg(/*°*/344); return s; } enum { svx_EXPORT = 1200, svx_FORMAT, svx_SCALE, svx_BEARING, svx_TILT, svx_LEGS, svx_STATIONS, svx_NAMES, svx_XSECT, svx_WALLS, svx_PASSAGES, svx_BORDERS, svx_BLANKS, svx_LEGEND, svx_SURFACE, svx_SPLAYS, svx_PLAN, svx_ELEV, svx_ENTS, svx_FIXES, svx_EXPORTS, svx_GRID, svx_TEXT_HEIGHT, svx_MARKER_SIZE, svx_CENTRED, svx_FULLCOORDS, svx_CLAMP_TO_GROUND }; class BitValidator : public wxValidator { // Disallow assignment. BitValidator & operator=(const BitValidator&); protected: int * val; int mask; public: BitValidator(int * val_, int mask_) : val(val_), mask(mask_) { } BitValidator(const BitValidator &o) : wxValidator() { Copy(o); } ~BitValidator() { } wxObject *Clone() const { return new BitValidator(val, mask); } bool Copy(const BitValidator& o) { wxValidator::Copy(o); val = o.val; mask = o.mask; return true; } bool Validate(wxWindow *) { return true; } bool TransferToWindow() { if (!m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox))) return false; ((wxCheckBox*)m_validatorWindow)->SetValue(*val & mask); return true; } bool TransferFromWindow() { if (!m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox))) return false; if (((wxCheckBox*)m_validatorWindow)->IsChecked()) *val |= mask; else *val &= ~mask; return true; } }; class svxPrintout : public wxPrintout { MainFrm *mainfrm; layout *m_layout; wxPageSetupDialogData* m_data; wxDC* pdc; wxFont *font_labels, *font_default; // Currently unused, but "skip blank pages" would use it. bool scan_for_blank_pages; wxPen *pen_frame, *pen_cross, *pen_leg, *pen_surface_leg, *pen_splay; wxColour colour_text, colour_labels; long x_t, y_t; double font_scaling_x, font_scaling_y; struct { long x_min, y_min, x_max, y_max; } clip; bool fBlankPage; int check_intersection(long x_p, long y_p); void draw_info_box(); void draw_scale_bar(double x, double y, double MaxLength); int next_page(int *pstate, char **q, int pageLim); void drawticks(int tsize, int x, int y); void MOVEMM(double X, double Y) { MoveTo((long)(X * m_layout->scX), (long)(Y * m_layout->scY)); } void DRAWMM(double X, double Y) { DrawTo((long)(X * m_layout->scX), (long)(Y * m_layout->scY)); } void MoveTo(long x, long y); void DrawTo(long x, long y); void DrawCross(long x, long y); void SetFont(wxFont * font) { pdc->SetFont(*font); } void WriteString(const wxString & s); void DrawEllipse(long x, long y, long r, long R); void SolidRectangle(long x, long y, long w, long h); void NewPage(int pg, int pagesX, int pagesY); void PlotLR(const vector & centreline); void PlotUD(const vector & centreline); public: svxPrintout(MainFrm *mainfrm, layout *l, wxPageSetupDialogData *data, const wxString & title); bool OnPrintPage(int pageNum); void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo); bool HasPage(int pageNum); void OnBeginPrinting(); void OnEndPrinting(); }; BEGIN_EVENT_TABLE(svxPrintDlg, wxDialog) EVT_CHOICE(svx_FORMAT, svxPrintDlg::OnChange) EVT_TEXT(svx_SCALE, svxPrintDlg::OnChangeScale) EVT_COMBOBOX(svx_SCALE, svxPrintDlg::OnChangeScale) EVT_SPINCTRLDOUBLE(svx_BEARING, svxPrintDlg::OnChangeSpin) EVT_SPINCTRLDOUBLE(svx_TILT, svxPrintDlg::OnChangeSpin) EVT_BUTTON(wxID_PRINT, svxPrintDlg::OnPrint) EVT_BUTTON(svx_EXPORT, svxPrintDlg::OnExport) EVT_BUTTON(wxID_CANCEL, svxPrintDlg::OnCancel) #ifdef AVEN_PRINT_PREVIEW EVT_BUTTON(wxID_PREVIEW, svxPrintDlg::OnPreview) #endif EVT_BUTTON(svx_PLAN, svxPrintDlg::OnPlan) EVT_BUTTON(svx_ELEV, svxPrintDlg::OnElevation) EVT_UPDATE_UI(svx_PLAN, svxPrintDlg::OnPlanUpdate) EVT_UPDATE_UI(svx_ELEV, svxPrintDlg::OnElevationUpdate) EVT_CHECKBOX(svx_LEGS, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_STATIONS, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_NAMES, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_SURFACE, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_SPLAYS, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_ENTS, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_FIXES, svxPrintDlg::OnChange) EVT_CHECKBOX(svx_EXPORTS, svxPrintDlg::OnChange) END_EVENT_TABLE() static wxString scales[] = { wxT(""), wxT("25"), wxT("50"), wxT("100"), wxT("250"), wxT("500"), wxT("1000"), wxT("2500"), wxT("5000"), wxT("10000"), wxT("25000"), wxT("50000"), wxT("100000"), wxT("...") }; // The order of these arrays must match export_format in export.h. static wxString formats[] = { wxT("Survex 3d"), wxT("CSV"), wxT("DXF"), wxT("EPS"), wxT("GPX"), wxT("HPGL"), wxT("JSON"), wxT("KML"), wxT("Plot"), wxT("Skencil"), wxT("Survex pos"), wxT("SVG") }; static_assert(sizeof(formats) == FMT_MAX_PLUS_ONE_ * sizeof(formats[0]), "formats[] matches enum export_format"); // We discriminate as "One page" isn't valid for exporting. static wxString default_scale_print; static wxString default_scale_export; svxPrintDlg::svxPrintDlg(MainFrm* mainfrm_, const wxString & filename, const wxString & title, const wxString & datestamp, double angle, double tilt_angle, bool labels, bool crosses, bool legs, bool surf, bool splays, bool tubes, bool ents, bool fixes, bool exports, bool printing, bool close_after_) : wxDialog(mainfrm_, -1, wxString(printing ? /* TRANSLATORS: Title of the print * dialog */ wmsg(/*Print*/399) : /* TRANSLATORS: Title of the export * dialog */ wmsg(/*Export*/383))), m_layout(printing ? wxGetApp().GetPageSetupDialogData() : NULL), m_File(filename), mainfrm(mainfrm_), close_after(close_after_) { m_scale = NULL; m_printSize = NULL; m_bearing = NULL; m_tilt = NULL; m_format = NULL; int show_mask = 0; if (labels) show_mask |= LABELS; if (crosses) show_mask |= STNS; if (legs) show_mask |= LEGS; if (surf) show_mask |= SURF; if (splays) show_mask |= SPLAYS; if (tubes) show_mask |= XSECT|WALLS|PASG; if (ents) show_mask |= ENTS; if (fixes) show_mask |= FIXES; if (exports) show_mask |= EXPORTS; m_layout.show_mask = show_mask; m_layout.datestamp = datestamp; m_layout.rot = angle; m_layout.title = title; if (mainfrm->IsExtendedElevation()) { m_layout.view = layout::EXTELEV; if (m_layout.rot != 0.0 && m_layout.rot != 180.0) m_layout.rot = 0; m_layout.tilt = 0; } else { m_layout.tilt = tilt_angle; if (m_layout.tilt == -90.0) { m_layout.view = layout::PLAN; } else if (m_layout.tilt == 0.0) { m_layout.view = layout::ELEV; } else { m_layout.view = layout::TILT; } } /* setup our print dialog*/ wxBoxSizer* v1 = new wxBoxSizer(wxVERTICAL); wxBoxSizer* h1 = new wxBoxSizer(wxHORIZONTAL); // holds controls /* TRANSLATORS: Used as a label for the surrounding box for the "Bearing" * and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in * the "what to print/export" dialog. */ m_viewbox = new wxStaticBoxSizer(new wxStaticBox(this, -1, wmsg(/*View*/283)), wxVERTICAL); /* TRANSLATORS: Used as a label for the surrounding box for the "survey * legs" "stations" "names" etc checkboxes in the "what to print" dialog. * "Elements" isn’t a good name for this but nothing better has yet come to * mind! */ wxBoxSizer* v2 = new wxStaticBoxSizer(new wxStaticBox(this, -1, wmsg(/*Elements*/256)), wxVERTICAL); wxBoxSizer* h2 = new wxBoxSizer(wxHORIZONTAL); // holds buttons if (!printing) { wxStaticText* label; label = new wxStaticText(this, -1, wxString(wmsg(/*Export format*/410))); const size_t n_formats = sizeof(formats) / sizeof(formats[0]); m_format = new wxChoice(this, svx_FORMAT, wxDefaultPosition, wxDefaultSize, n_formats, formats); unsigned current_format = 0; wxConfigBase * cfg = wxConfigBase::Get(); wxString s; if (cfg->Read(wxT("export_format"), &s, wxString())) { for (unsigned i = 0; i != n_formats; ++i) { if (s == formats[i]) { current_format = i; break; } } } m_format->SetSelection(current_format); wxBoxSizer* formatbox = new wxBoxSizer(wxHORIZONTAL); formatbox->Add(label, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); formatbox->Add(m_format, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); v1->Add(formatbox, 0, wxALIGN_LEFT|wxALL, 0); } wxStaticText* label; label = new wxStaticText(this, -1, wxString(wmsg(/*Scale*/154)) + wxT(" 1:")); if (printing && scales[0].empty()) { /* TRANSLATORS: used in the scale drop down selector in the print * dialog the implicit meaning is "choose a suitable scale to fit * the plot on a single page", but we need something shorter */ scales[0].assign(wmsg(/*One page*/258)); } wxString default_scale; if (printing) { default_scale = default_scale_print; if (default_scale.empty()) default_scale = scales[0]; } else { default_scale = default_scale_export; if (default_scale.empty()) default_scale = wxT("1000"); } const wxString* scale_list = scales; size_t n_scales = sizeof(scales) / sizeof(scales[0]); if (!printing) { ++scale_list; --n_scales; } m_scale = new wxComboBox(this, svx_SCALE, default_scale, wxDefaultPosition, wxDefaultSize, n_scales, scale_list); m_scalebox = new wxBoxSizer(wxHORIZONTAL); m_scalebox->Add(label, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); m_scalebox->Add(m_scale, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); m_viewbox->Add(m_scalebox, 0, wxALIGN_LEFT|wxALL, 0); if (printing) { // Make the dummy string wider than any sane value and use that to // fix the width of the control so the sizers allow space for bigger // page layouts. m_printSize = new wxStaticText(this, -1, wxString::Format(wmsg(/*%d pages (%dx%d)*/257), 9604, 98, 98)); m_viewbox->Add(m_printSize, 0, wxALIGN_LEFT|wxALL, 5); } if (m_layout.view != layout::EXTELEV) { wxFlexGridSizer* anglebox = new wxFlexGridSizer(2); wxStaticText * brg_label, * tilt_label; brg_label = new wxStaticText(this, -1, wmsg(/*Bearing*/259)); anglebox->Add(brg_label, 0, wxALIGN_CENTRE_VERTICAL|wxALIGN_LEFT|wxALL, 5); // wSP_WRAP means that you can scroll past 360 to 0, and vice versa. m_bearing = new wxSpinCtrlDouble(this, svx_BEARING, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxALIGN_RIGHT|wxSP_WRAP); m_bearing->SetRange(0.0, 360.0); m_bearing->SetDigits(ANGLE_DP); anglebox->Add(m_bearing, 0, wxALIGN_CENTRE|wxALL, 5); /* TRANSLATORS: Used in the print dialog: */ tilt_label = new wxStaticText(this, -1, wmsg(/*Tilt angle*/263)); anglebox->Add(tilt_label, 0, wxALIGN_CENTRE_VERTICAL|wxALIGN_LEFT|wxALL, 5); m_tilt = new wxSpinCtrlDouble(this, svx_TILT, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxALIGN_RIGHT); m_tilt->SetRange(-90.0, 90.0); m_tilt->SetDigits(ANGLE_DP); anglebox->Add(m_tilt, 0, wxALIGN_CENTRE|wxALL, 5); m_viewbox->Add(anglebox, 0, wxALIGN_LEFT|wxALL, 0); wxBoxSizer * planelevsizer = new wxBoxSizer(wxHORIZONTAL); planelevsizer->Add(new wxButton(this, svx_PLAN, wmsg(/*P&lan view*/117)), 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); planelevsizer->Add(new wxButton(this, svx_ELEV, wmsg(/*&Elevation*/285)), 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); m_viewbox->Add(planelevsizer, 0, wxALIGN_LEFT|wxALL, 5); } /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". */ v2->Add(new wxCheckBox(this, svx_LEGS, wmsg(/*Underground Survey Legs*/262), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, LEGS)), 0, wxALIGN_LEFT|wxALL, 2); /* TRANSLATORS: Here a "survey leg" is a set of measurements between two * "survey stations". */ v2->Add(new wxCheckBox(this, svx_SURFACE, wmsg(/*Sur&face Survey Legs*/403), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, SURF)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_SPLAYS, wmsg(/*Spla&y Legs*/406), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, SPLAYS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_STATIONS, wmsg(/*Crosses*/261), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, STNS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_NAMES, wmsg(/*Station Names*/260), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, LABELS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_ENTS, wmsg(/*Entrances*/418), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, ENTS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_FIXES, wmsg(/*Fixed Points*/419), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, FIXES)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_EXPORTS, wmsg(/*Exported Stations*/420), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, EXPORTS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_XSECT, wmsg(/*Cross-sections*/393), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, XSECT)), 0, wxALIGN_LEFT|wxALL, 2); if (!printing) { v2->Add(new wxCheckBox(this, svx_WALLS, wmsg(/*Walls*/394), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, WALLS)), 0, wxALIGN_LEFT|wxALL, 2); // TRANSLATORS: Label for checkbox which controls whether there's a // layer in the exported file (for formats such as DXF and SVG) // containing polygons for the inside of cave passages). v2->Add(new wxCheckBox(this, svx_PASSAGES, wmsg(/*Passages*/395), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, PASG)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_CENTRED, wmsg(/*Origin in centre*/421), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, CENTRED)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_FULLCOORDS, wmsg(/*Full coordinates*/422), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, FULL_COORDS)), 0, wxALIGN_LEFT|wxALL, 2); v2->Add(new wxCheckBox(this, svx_CLAMP_TO_GROUND, wmsg(/*Clamp to ground*/477), wxDefaultPosition, wxDefaultSize, 0, BitValidator(&m_layout.show_mask, CLAMP_TO_GROUND)), 0, wxALIGN_LEFT|wxALL, 2); } if (printing) { /* TRANSLATORS: used in the print dialog - controls drawing lines * around each page */ v2->Add(new wxCheckBox(this, svx_BORDERS, wmsg(/*Page Borders*/264), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&m_layout.Border)), 0, wxALIGN_LEFT|wxALL, 2); /* TRANSLATORS: will be used in the print dialog - check this to print * blank pages (otherwise they’ll be skipped to save paper) */ // m_blanks = new wxCheckBox(this, svx_BLANKS, wmsg(/*Blank Pages*/266)); // v2->Add(m_blanks, 0, wxALIGN_LEFT|wxALL, 2); /* TRANSLATORS: As in the legend on a map. Used in the print dialog - * controls drawing the box at the lower left with survey name, view * angles, etc */ v2->Add(new wxCheckBox(this, svx_LEGEND, wmsg(/*Legend*/265), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&m_layout.Legend)), 0, wxALIGN_LEFT|wxALL, 2); } h1->Add(v2, 0, wxALIGN_LEFT|wxALL, 5); h1->Add(m_viewbox, 0, wxALIGN_LEFT|wxLEFT, 5); v1->Add(h1, 0, wxALIGN_LEFT|wxALL, 5); // When we enable/disable checkboxes in the export dialog, ideally we'd // like the dialog to resize, but not sure how to achieve that, so we // add a stretchable spacer here so at least the buttons stay in the // lower right corner. v1->AddStretchSpacer(); wxButton * but; but = new wxButton(this, wxID_CANCEL); h2->Add(but, 0, wxALL, 5); if (printing) { #ifdef AVEN_PRINT_PREVIEW but = new wxButton(this, wxID_PREVIEW); h2->Add(but, 0, wxALL, 5); but = new wxButton(this, wxID_PRINT); #else but = new wxButton(this, wxID_PRINT, wmsg(/*&Print...*/400)); #endif } else { /* TRANSLATORS: The text on the action button in the "Export" settings * dialog */ but = new wxButton(this, svx_EXPORT, wmsg(/*&Export...*/230)); } but->SetDefault(); h2->Add(but, 0, wxALL, 5); v1->Add(h2, 0, wxALIGN_RIGHT|wxALL, 5); SetAutoLayout(true); SetSizer(v1); v1->SetSizeHints(this); LayoutToUI(); SomethingChanged(0); } void svxPrintDlg::OnPrint(wxCommandEvent&) { SomethingChanged(0); TransferDataFromWindow(); wxPageSetupDialogData * psdd = wxGetApp().GetPageSetupDialogData(); wxPrintDialogData pd(psdd->GetPrintData()); wxPrinter pr(&pd); svxPrintout po(mainfrm, &m_layout, psdd, m_File); if (m_layout.SkipBlank) { // FIXME: wx's printing requires a contiguous range of valid page // numbers. To achieve that, we need to run a scan for blank pages // here, so that GetPageInfo() knows what range to return, and so // that OnPrintPage() can map a page number back to where in the // MxN multi-page layout. #if 0 po.scan_for_blank_pages = true; for (int page = 1; page <= m_layout->pages; ++page) { po.fBlankPage = fTrue; po.OnPrintPage(page); // FIXME: Do something with po.fBlankPage } po.scan_for_blank_pages = false; #endif } if (pr.Print(this, &po, true)) { // Close the print dialog if printing succeeded. Destroy(); } } void svxPrintDlg::OnExport(wxCommandEvent&) { UIToLayout(); TransferDataFromWindow(); wxString leaf; wxFileName::SplitPath(m_File, NULL, NULL, &leaf, NULL, wxPATH_NATIVE); unsigned format_idx = ((wxChoice*)FindWindow(svx_FORMAT))->GetSelection(); const auto& info = export_format_info[format_idx]; leaf += wxString::FromUTF8(info.extension); wxString filespec = wmsg(info.msg_filetype); filespec += wxT("|*"); filespec += wxString::FromUTF8(info.extension); filespec += wxT("|"); filespec += wmsg(/*All files*/208); filespec += wxT("|"); filespec += wxFileSelectorDefaultWildcardStr; /* TRANSLATORS: Title of file dialog to choose name and type of exported * file. */ wxFileDialog dlg(this, wmsg(/*Export as:*/401), wxString(), leaf, filespec, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() == wxID_OK) { /* FIXME: Set up a way for the user to specify these: */ double grid = DEFAULT_GRID_SPACING; // metres double text_height = DEFAULT_TEXT_HEIGHT; double marker_size = DEFAULT_MARKER_SIZE; try { const wxString& export_fnm = dlg.GetPath(); unsigned mask = info.mask; double rot, tilt; if (mask & ORIENTABLE) { rot = m_layout.rot; tilt = m_layout.tilt; } else { rot = 0.0; tilt = -90.0; } if (!Export(export_fnm, m_layout.title, m_layout.datestamp, *mainfrm, mainfrm->GetTreeFilter(), rot, tilt, m_layout.get_effective_show_mask(), export_format(format_idx), grid, text_height, marker_size, m_layout.Scale)) { wxString m = wxString::Format(wmsg(/*Couldn’t write file “%sâ€*/402).c_str(), export_fnm.c_str()); wxGetApp().ReportError(m); } } catch (const wxString & m) { wxGetApp().ReportError(m); } } Destroy(); } #ifdef AVEN_PRINT_PREVIEW void svxPrintDlg::OnPreview(wxCommandEvent&) { SomethingChanged(0); TransferDataFromWindow(); wxPageSetupDialogData * psdd = wxGetApp().GetPageSetupDialogData(); wxPrintDialogData pd(psdd->GetPrintData()); wxPrintPreview* pv; pv = new wxPrintPreview(new svxPrintout(mainfrm, &m_layout, psdd, m_File), new svxPrintout(mainfrm, &m_layout, psdd, m_File), &pd); // TRANSLATORS: Title of the print preview dialog wxPreviewFrame *frame = new wxPreviewFrame(pv, mainfrm, wmsg(/*Print Preview*/398)); frame->Initialize(); // Size preview frame so that all of the controlbar and canvas can be seen // if possible. int w, h; // GetBestSize gives us the width needed to show the whole controlbar. frame->GetBestSize(&w, &h); if (h < w) { // On wxGTK at least, GetBestSize() returns much too small a height. h = w * 6 / 5; } // Ensure that we don't make the window bigger than the screen. // Use wxGetClientDisplayRect() so we don't cover the MS Windows // task bar either. wxRect disp = wxGetClientDisplayRect(); if (w > disp.GetWidth()) w = disp.GetWidth(); if (h > disp.GetHeight()) h = disp.GetHeight(); // Centre the window within the "ClientDisplayRect". int x = disp.GetLeft() + (disp.GetWidth() - w) / 2; int y = disp.GetTop() + (disp.GetHeight() - h) / 2; frame->SetSize(x, y, w, h); frame->Show(); } #endif void svxPrintDlg::OnPlan(wxCommandEvent&) { m_tilt->SetValue(-90.0); SomethingChanged(svx_TILT); } void svxPrintDlg::OnElevation(wxCommandEvent&) { m_tilt->SetValue(0.0); SomethingChanged(svx_TILT); } void svxPrintDlg::OnPlanUpdate(wxUpdateUIEvent& e) { e.Enable(m_tilt->GetValue() != -90.0); } void svxPrintDlg::OnElevationUpdate(wxUpdateUIEvent& e) { e.Enable(m_tilt->GetValue() != 0.0); } void svxPrintDlg::OnChangeSpin(wxSpinDoubleEvent& e) { SomethingChanged(e.GetId()); } void svxPrintDlg::OnChange(wxCommandEvent& e) { SomethingChanged(e.GetId()); } void svxPrintDlg::OnChangeScale(wxCommandEvent& e) { wxString value = m_scale->GetValue(); if (value == "...") { m_scale->SetValue(""); m_scale->SetFocus(); } else { default_scale_print = value; if (default_scale_print != scales[0]) { // Don't store "One page" for use when exporting. default_scale_export = default_scale_print; } } SomethingChanged(e.GetId()); } void svxPrintDlg::OnCancel(wxCommandEvent&) { if (close_after) mainfrm->Close(); Destroy(); } void svxPrintDlg::SomethingChanged(int control_id) { if ((control_id == 0 || control_id == svx_FORMAT) && m_format) { // Update the shown/hidden fields for the newly selected export filter. int new_filter_idx = m_format->GetSelection(); if (new_filter_idx != wxNOT_FOUND) { unsigned mask = export_format_info[new_filter_idx].mask; static const struct { int id; unsigned mask; } controls[] = { { svx_LEGS, LEGS }, { svx_SURFACE, SURF }, { svx_SPLAYS, SPLAYS }, { svx_STATIONS, STNS }, { svx_NAMES, LABELS }, { svx_XSECT, XSECT }, { svx_WALLS, WALLS }, { svx_PASSAGES, PASG }, { svx_ENTS, ENTS }, { svx_FIXES, FIXES }, { svx_EXPORTS, EXPORTS }, { svx_CENTRED, CENTRED }, { svx_FULLCOORDS, FULL_COORDS }, { svx_CLAMP_TO_GROUND, CLAMP_TO_GROUND }, }; static unsigned n_controls = sizeof(controls) / sizeof(controls[0]); for (unsigned i = 0; i != n_controls; ++i) { wxWindow * control = FindWindow(controls[i].id); if (control) control->Show(mask & controls[i].mask); } m_scalebox->Show(bool(mask & SCALE)); m_viewbox->Show(bool(mask & ORIENTABLE)); GetSizer()->Layout(); // Force the window to resize to match the updated layout. SetSizerAndFit(GetSizer()); if (control_id == svx_FORMAT) { wxConfigBase * cfg = wxConfigBase::Get(); cfg->Write(wxT("export_format"), formats[new_filter_idx]); } } } UIToLayout(); if (m_printSize || m_scale) { // Update the bounding box. RecalcBounds(); if (m_scale) { if (!(m_scale->GetValue()).ToDouble(&(m_layout.Scale)) || m_layout.Scale == 0.0) { m_layout.pick_scale(1, 1); } } } if (m_printSize && m_layout.xMax >= m_layout.xMin) { m_layout.pages_required(); m_printSize->SetLabel(wxString::Format(wmsg(/*%d pages (%dx%d)*/257), m_layout.pages, m_layout.pagesX, m_layout.pagesY)); } } void svxPrintDlg::LayoutToUI() { // m_blanks->SetValue(m_layout.SkipBlank); if (m_layout.view != layout::EXTELEV) { m_tilt->SetValue(m_layout.tilt); m_bearing->SetValue(m_layout.rot); } if (m_scale && m_layout.Scale != 0) { // Do this last as it causes an OnChange message which calls UIToLayout wxString temp; temp << m_layout.Scale; m_scale->SetValue(temp); } } void svxPrintDlg::UIToLayout() { // m_layout.SkipBlank = m_blanks->IsChecked(); if (m_layout.view != layout::EXTELEV && m_tilt) { m_layout.tilt = m_tilt->GetValue(); if (m_layout.tilt == -90.0) { m_layout.view = layout::PLAN; } else if (m_layout.tilt == 0.0) { m_layout.view = layout::ELEV; } else { m_layout.view = layout::TILT; } bool enable_passage_opts = (m_layout.view != layout::TILT); wxWindow * win; win = FindWindow(svx_XSECT); if (win) win->Enable(enable_passage_opts); win = FindWindow(svx_WALLS); if (win) win->Enable(enable_passage_opts); win = FindWindow(svx_PASSAGES); if (win) win->Enable(enable_passage_opts); m_layout.rot = m_bearing->GetValue(); } } void svxPrintDlg::RecalcBounds() { m_layout.yMax = m_layout.xMax = -DBL_MAX; m_layout.yMin = m_layout.xMin = DBL_MAX; double SIN = sin(rad(m_layout.rot)); double COS = cos(rad(m_layout.rot)); double SINT = sin(rad(m_layout.tilt)); double COST = cos(rad(m_layout.tilt)); const SurveyFilter* filter = mainfrm->GetTreeFilter(); int show_mask = m_layout.get_effective_show_mask(); if (show_mask & LEGS) { for (int f = 0; f != 8; ++f) { if ((show_mask & (f & img_FLAG_SURFACE) ? SURF : LEGS) == 0) { // Not showing traverse because of surface/underground status. continue; } if ((f & img_FLAG_SPLAY) && (show_mask & SPLAYS) == 0) { // Not showing because it's a splay. continue; } list::const_iterator trav = mainfrm->traverses_begin(f, filter); list::const_iterator tend = mainfrm->traverses_end(f); for ( ; trav != tend; trav = mainfrm->traverses_next(f, filter, trav)) { vector::const_iterator pos = trav->begin(); vector::const_iterator end = trav->end(); for ( ; pos != end; ++pos) { double x = pos->GetX(); double y = pos->GetY(); double z = pos->GetZ(); double X = x * COS - y * SIN; if (X > m_layout.xMax) m_layout.xMax = X; if (X < m_layout.xMin) m_layout.xMin = X; double Y = z * COST - (x * SIN + y * COS) * SINT; if (Y > m_layout.yMax) m_layout.yMax = Y; if (Y < m_layout.yMin) m_layout.yMin = Y; } } } } if ((show_mask & XSECT) && (m_layout.tilt == 0.0 || m_layout.tilt == 90.0 || m_layout.tilt == -90.0)) { list>::const_iterator trav = mainfrm->tubes_begin(); list>::const_iterator tend = mainfrm->tubes_end(); for ( ; trav != tend; ++trav) { const XSect* prev_pt_v = NULL; Vector3 last_right(1.0, 0.0, 0.0); vector::const_iterator i = trav->begin(); vector::size_type segment = 0; while (i != trav->end()) { // get the coordinates of this vertex const XSect & pt_v = *i++; if (m_layout.tilt == 0.0) { Double u = pt_v.GetU(); Double d = pt_v.GetD(); if (u >= 0 || d >= 0) { if (filter && !filter->CheckVisible(pt_v.GetLabel())) continue; double x = pt_v.GetX(); double y = pt_v.GetY(); double z = pt_v.GetZ(); double X = x * COS - y * SIN; double Y = z * COST - (x * SIN + y * COS) * SINT; if (X > m_layout.xMax) m_layout.xMax = X; if (X < m_layout.xMin) m_layout.xMin = X; double U = Y + max(0.0, pt_v.GetU()); if (U > m_layout.yMax) m_layout.yMax = U; double D = Y - max(0.0, pt_v.GetD()); if (D < m_layout.yMin) m_layout.yMin = D; } } else { // More complex, and this duplicates the algorithm from // PlotLR() - we should try to share that, maybe via a // template. Vector3 right; const Vector3 up_v(0.0, 0.0, 1.0); if (segment == 0) { assert(i != trav->end()); // first segment // get the coordinates of the next vertex const XSect & next_pt_v = *i; // calculate vector from this pt to the next one Vector3 leg_v = next_pt_v - pt_v; // obtain a vector in the LRUD plane right = leg_v * up_v; if (right.magnitude() == 0) { right = last_right; } else { last_right = right; } } else if (segment + 1 == trav->size()) { // last segment // Calculate vector from the previous pt to this one. Vector3 leg_v = pt_v - *prev_pt_v; // Obtain a horizontal vector in the LRUD plane. right = leg_v * up_v; if (right.magnitude() == 0) { right = Vector3(last_right.GetX(), last_right.GetY(), 0.0); } else { last_right = right; } } else { assert(i != trav->end()); // Intermediate segment. // Get the coordinates of the next vertex. const XSect & next_pt_v = *i; // Calculate vectors from this vertex to the // next vertex, and from the previous vertex to // this one. Vector3 leg1_v = pt_v - *prev_pt_v; Vector3 leg2_v = next_pt_v - pt_v; // Obtain horizontal vectors perpendicular to // both legs, then normalise and average to get // a horizontal bisector. Vector3 r1 = leg1_v * up_v; Vector3 r2 = leg2_v * up_v; r1.normalise(); r2.normalise(); right = r1 + r2; if (right.magnitude() == 0) { // This is the "mid-pitch" case... right = last_right; } last_right = right; } // Scale to unit vectors in the LRUD plane. right.normalise(); Double l = pt_v.GetL(); Double r = pt_v.GetR(); if (l >= 0 || r >= 0) { if (!filter || filter->CheckVisible(pt_v.GetLabel())) { // Get the x and y coordinates of the survey station double pt_X = pt_v.GetX() * COS - pt_v.GetY() * SIN; double pt_Y = pt_v.GetX() * SIN + pt_v.GetY() * COS; double X, Y; if (l >= 0) { // Get the x and y coordinates of the end of the left arrow Vector3 p = pt_v.GetPoint() - right * l; X = p.GetX() * COS - p.GetY() * SIN; Y = (p.GetX() * SIN + p.GetY() * COS); } else { X = pt_X; Y = pt_Y; } if (X > m_layout.xMax) m_layout.xMax = X; if (X < m_layout.xMin) m_layout.xMin = X; if (Y > m_layout.yMax) m_layout.yMax = Y; if (Y < m_layout.yMin) m_layout.yMin = Y; if (r >= 0) { // Get the x and y coordinates of the end of the right arrow Vector3 p = pt_v.GetPoint() + right * r; X = p.GetX() * COS - p.GetY() * SIN; Y = (p.GetX() * SIN + p.GetY() * COS); } else { X = pt_X; Y = pt_Y; } if (X > m_layout.xMax) m_layout.xMax = X; if (X < m_layout.xMin) m_layout.xMin = X; if (Y > m_layout.yMax) m_layout.yMax = Y; if (Y < m_layout.yMin) m_layout.yMin = Y; } } prev_pt_v = &pt_v; ++segment; } } } } if (show_mask & (LABELS|STNS)) { for (auto label = mainfrm->GetLabels(); label != mainfrm->GetLabelsEnd(); ++label) { if (filter && !filter->CheckVisible((*label)->GetText())) continue; double x = (*label)->GetX(); double y = (*label)->GetY(); double z = (*label)->GetZ(); if ((show_mask & SURF) || (*label)->IsUnderground()) { double X = x * COS - y * SIN; if (X > m_layout.xMax) m_layout.xMax = X; if (X < m_layout.xMin) m_layout.xMin = X; double Y = z * COST - (x * SIN + y * COS) * SINT; if (Y > m_layout.yMax) m_layout.yMax = Y; if (Y < m_layout.yMin) m_layout.yMin = Y; } } } } static int xpPageWidth, ypPageDepth; static long x_offset, y_offset; static int fontsize, fontsize_labels; /* FIXME: allow the font to be set */ static const char *fontname = "Arial", *fontname_labels = "Arial"; svxPrintout::svxPrintout(MainFrm *mainfrm_, layout *l, wxPageSetupDialogData *data, const wxString & title) : wxPrintout(title), font_labels(NULL), font_default(NULL), scan_for_blank_pages(false) { mainfrm = mainfrm_; m_layout = l; m_data = data; } void svxPrintout::draw_info_box() { layout *l = m_layout; int boxwidth = 70; int boxheight = 30; pdc->SetPen(*pen_frame); int div = boxwidth; if (l->view != layout::EXTELEV) { boxwidth += boxheight; MOVEMM(div, boxheight); DRAWMM(div, 0); MOVEMM(0, 30); DRAWMM(div, 30); } MOVEMM(0, boxheight); DRAWMM(boxwidth, boxheight); DRAWMM(boxwidth, 0); if (!l->Border) { DRAWMM(0, 0); DRAWMM(0, boxheight); } MOVEMM(0, 20); DRAWMM(div, 20); MOVEMM(0, 10); DRAWMM(div, 10); switch (l->view) { case layout::PLAN: { long ax, ay, bx, by, cx, cy, dx, dy; long xc = boxwidth - boxheight / 2; long yc = boxheight / 2; const double RADIUS = boxheight / 3; DrawEllipse(long(xc * l->scX), long(yc * l->scY), long(RADIUS * l->scX), long(RADIUS * l->scY)); ax = (long)((xc - (RADIUS - 1) * sin(rad(000.0 + l->rot))) * l->scX); ay = (long)((yc + (RADIUS - 1) * cos(rad(000.0 + l->rot))) * l->scY); bx = (long)((xc - RADIUS * 0.5 * sin(rad(180.0 + l->rot))) * l->scX); by = (long)((yc + RADIUS * 0.5 * cos(rad(180.0 + l->rot))) * l->scY); cx = (long)((xc - (RADIUS - 1) * sin(rad(160.0 + l->rot))) * l->scX); cy = (long)((yc + (RADIUS - 1) * cos(rad(160.0 + l->rot))) * l->scY); dx = (long)((xc - (RADIUS - 1) * sin(rad(200.0 + l->rot))) * l->scX); dy = (long)((yc + (RADIUS - 1) * cos(rad(200.0 + l->rot))) * l->scY); MoveTo(ax, ay); DrawTo(bx, by); DrawTo(cx, cy); DrawTo(ax, ay); DrawTo(dx, dy); DrawTo(bx, by); pdc->SetTextForeground(colour_text); MOVEMM(div + 0.5, boxheight - 5.5); WriteString(wmsg(/*North*/115)); wxString angle = format_angle(ANGLE_FMT, l->rot); wxString s; /* TRANSLATORS: This is used on printouts of plans, with %s replaced by * something like "123°". The bearing is up the page. */ s.Printf(wmsg(/*Plan view, %s up page*/168), angle.c_str()); MOVEMM(2, 12); WriteString(s); break; } case layout::ELEV: case layout::TILT: { const int L = div + 2; const int R = boxwidth - 2; const int H = boxheight / 2; MOVEMM(L, H); DRAWMM(L + 5, H - 3); DRAWMM(L + 3, H); DRAWMM(L + 5, H + 3); DRAWMM(L, H); DRAWMM(R, H); DRAWMM(R - 5, H + 3); DRAWMM(R - 3, H); DRAWMM(R - 5, H - 3); DRAWMM(R, H); MOVEMM((L + R) / 2, H - 2); DRAWMM((L + R) / 2, H + 2); pdc->SetTextForeground(colour_text); MOVEMM(div + 2, boxheight - 8); /* TRANSLATORS: "Elevation on" 020 <-> 200 degrees */ WriteString(wmsg(/*Elevation on*/116)); MOVEMM(L, 2); WriteString(format_angle(ANGLE_FMT, fmod(l->rot + 270.0, 360.0))); MOVEMM(R - 10, 2); WriteString(format_angle(ANGLE_FMT, fmod(l->rot + 90.0, 360.0))); wxString angle = format_angle(ANGLE_FMT, l->rot); wxString s; if (l->view == layout::ELEV) { /* TRANSLATORS: This is used on printouts of elevations, with %s * replaced by something like "123°". The bearing is the direction * we’re looking. */ s.Printf(wmsg(/*Elevation facing %s*/169), angle.c_str()); } else { wxString a2 = format_angle(ANGLE2_FMT, l->tilt); /* TRANSLATORS: This is used on printouts of tilted elevations, with * the first %s replaced by something like "123°", and the second by * something like "-45°". The bearing is the direction we’re * looking. */ s.Printf(wmsg(/*Elevation facing %s, tilted %s*/284), angle.c_str(), a2.c_str()); } MOVEMM(2, 12); WriteString(s); break; } case layout::EXTELEV: pdc->SetTextForeground(colour_text); MOVEMM(2, 12); /* TRANSLATORS: This is used on printouts of extended elevations. */ WriteString(wmsg(/*Extended elevation*/191)); break; } MOVEMM(2, boxheight - 8); WriteString(l->title); MOVEMM(2, 2); // FIXME: "Original Scale" better? WriteString(wxString::Format(wmsg(/*Scale*/154) + wxT(" 1:%.0f"), l->Scale)); /* This used to be a copyright line, but it was occasionally * mis-interpreted as us claiming copyright on the survey, so let's * give the website URL instead */ MOVEMM(boxwidth + 2, 2); WriteString(wxT("Survex " VERSION " - https://survex.com/")); draw_scale_bar(boxwidth + 10.0, 17.0, l->PaperWidth - boxwidth - 18.0); } /* Draw fancy scale bar with bottom left at (x,y) (both in mm) and at most */ /* MaxLength mm long. The scaling in use is 1:scale */ void svxPrintout::draw_scale_bar(double x, double y, double MaxLength) { double StepEst, d; int E, Step, n, c; wxString buf; /* Limit scalebar to 20cm to stop people with A0 plotters complaining */ if (MaxLength > 200.0) MaxLength = 200.0; #define dmin 10.0 /* each division >= dmin mm long */ #define StepMax 5 /* number in steps of at most StepMax (x 10^N) */ #define epsilon (1e-4) /* fudge factor to prevent rounding problems */ E = (int)ceil(log10((dmin * 0.001 * m_layout->Scale) / StepMax)); StepEst = pow(10.0, -(double)E) * (dmin * 0.001) * m_layout->Scale - epsilon; /* Force labelling to be in multiples of 1, 2, or 5 */ Step = (StepEst <= 1.0 ? 1 : (StepEst <= 2.0 ? 2 : 5)); /* Work out actual length of each scale bar division */ d = Step * pow(10.0, (double)E) / m_layout->Scale * 1000.0; /* FIXME: Non-metric units here... */ /* Choose appropriate units, s.t. if possible E is >=0 and minimized */ int units; if (E >= 3) { E -= 3; units = /*km*/423; } else if (E >= 0) { units = /*m*/424; } else { E += 2; units = /*cm*/425; } buf = wmsg(/*Scale*/154); /* Add units used - eg. "Scale (10m)" */ double pow10_E = pow(10.0, (double)E); if (E >= 0) { buf += wxString::Format(wxT(" (%.f%s)"), pow10_E, wmsg(units).c_str()); } else { int sf = -(int)floor(E); buf += wxString::Format(wxT(" (%.*f%s)"), sf, pow10_E, wmsg(units).c_str()); } pdc->SetTextForeground(colour_text); MOVEMM(x, y + 4); WriteString(buf); /* Work out how many divisions there will be */ n = (int)(MaxLength / d); pdc->SetPen(*pen_frame); long Y = long(y * m_layout->scY); long Y2 = long((y + 3) * m_layout->scY); long X = long(x * m_layout->scX); long X2 = long((x + n * d) * m_layout->scX); /* Draw top of scale bar */ MoveTo(X2, Y2); DrawTo(X, Y2); #if 0 DrawTo(X2, Y); DrawTo(X, Y); MOVEMM(x + n * d, y); DRAWMM(x, y); #endif /* Draw divisions and label them */ for (c = 0; c <= n; c++) { pdc->SetPen(*pen_frame); X = long((x + c * d) * m_layout->scX); MoveTo(X, Y); DrawTo(X, Y2); #if 0 // Don't waste toner! /* Draw a "zebra crossing" scale bar. */ if (c < n && (c & 1) == 0) { X2 = long((x + (c + 1) * d) * m_layout->scX); SolidRectangle(X, Y, X2 - X, Y2 - Y); } #endif buf.Printf(wxT("%d"), c * Step); pdc->SetTextForeground(colour_text); MOVEMM(x + c * d - buf.length(), y - 5); WriteString(buf); } } #if 0 void make_calibration(layout *l) { img_point pt = { 0.0, 0.0, 0.0 }; l->xMax = l->yMax = 0.1; l->xMin = l->yMin = 0; stack(l, img_MOVE, NULL, &pt); pt.x = 0.1; stack(l, img_LINE, NULL, &pt); pt.y = 0.1; stack(l, img_LINE, NULL, &pt); pt.x = 0.0; stack(l, img_LINE, NULL, &pt); pt.y = 0.0; stack(l, img_LINE, NULL, &pt); pt.x = 0.05; pt.y = 0.001; stack(l, img_LABEL, "10cm", &pt); pt.x = 0.001; pt.y = 0.05; stack(l, img_LABEL, "10cm", &pt); l->Scale = 1.0; } #endif int svxPrintout::next_page(int *pstate, char **q, int pageLim) { char *p; int page; int c; p = *q; if (*pstate > 0) { /* doing a range */ (*pstate)++; wxASSERT(*p == '-'); p++; while (isspace((unsigned char)*p)) p++; if (sscanf(p, "%u%n", &page, &c) > 0) { p += c; } else { page = pageLim; } if (*pstate > page) goto err; if (*pstate < page) return *pstate; *q = p; *pstate = 0; return page; } while (isspace((unsigned char)*p) || *p == ',') p++; if (!*p) return 0; /* done */ if (*p == '-') { *q = p; *pstate = 1; return 1; /* range with initial parameter omitted */ } if (sscanf(p, "%u%n", &page, &c) > 0) { p += c; while (isspace((unsigned char)*p)) p++; *q = p; if (0 < page && page <= pageLim) { if (*p == '-') *pstate = page; /* range with start */ return page; } } err: *pstate = -1; return 0; } /* Draws in alignment marks on each page or borders on edge pages */ void svxPrintout::drawticks(int tsize, int x, int y) { long i; int s = tsize * 4; int o = s / 8; bool fAtCorner = fFalse; pdc->SetPen(*pen_frame); if (x == 0 && m_layout->Border) { /* solid left border */ MoveTo(clip.x_min, clip.y_min); DrawTo(clip.x_min, clip.y_max); fAtCorner = fTrue; } else { if (x > 0 || y > 0) { MoveTo(clip.x_min, clip.y_min); DrawTo(clip.x_min, clip.y_min + tsize); } if (s && x > 0 && m_layout->Cutlines) { /* dashed left border */ i = (clip.y_max - clip.y_min) - (tsize + ((clip.y_max - clip.y_min - tsize * 2L) % s) / 2); for ( ; i > tsize; i -= s) { MoveTo(clip.x_min, clip.y_max - (i + o)); DrawTo(clip.x_min, clip.y_max - (i - o)); } } if (x > 0 || y < m_layout->pagesY - 1) { MoveTo(clip.x_min, clip.y_max - tsize); DrawTo(clip.x_min, clip.y_max); fAtCorner = fTrue; } } if (y == m_layout->pagesY - 1 && m_layout->Border) { /* solid top border */ if (!fAtCorner) MoveTo(clip.x_min, clip.y_max); DrawTo(clip.x_max, clip.y_max); fAtCorner = fTrue; } else { if (y < m_layout->pagesY - 1 || x > 0) { if (!fAtCorner) MoveTo(clip.x_min, clip.y_max); DrawTo(clip.x_min + tsize, clip.y_max); } if (s && y < m_layout->pagesY - 1 && m_layout->Cutlines) { /* dashed top border */ i = (clip.x_max - clip.x_min) - (tsize + ((clip.x_max - clip.x_min - tsize * 2L) % s) / 2); for ( ; i > tsize; i -= s) { MoveTo(clip.x_max - (i + o), clip.y_max); DrawTo(clip.x_max - (i - o), clip.y_max); } } if (y < m_layout->pagesY - 1 || x < m_layout->pagesX - 1) { MoveTo(clip.x_max - tsize, clip.y_max); DrawTo(clip.x_max, clip.y_max); fAtCorner = fTrue; } else { fAtCorner = fFalse; } } if (x == m_layout->pagesX - 1 && m_layout->Border) { /* solid right border */ if (!fAtCorner) MoveTo(clip.x_max, clip.y_max); DrawTo(clip.x_max, clip.y_min); fAtCorner = fTrue; } else { if (x < m_layout->pagesX - 1 || y < m_layout->pagesY - 1) { if (!fAtCorner) MoveTo(clip.x_max, clip.y_max); DrawTo(clip.x_max, clip.y_max - tsize); } if (s && x < m_layout->pagesX - 1 && m_layout->Cutlines) { /* dashed right border */ i = (clip.y_max - clip.y_min) - (tsize + ((clip.y_max - clip.y_min - tsize * 2L) % s) / 2); for ( ; i > tsize; i -= s) { MoveTo(clip.x_max, clip.y_min + (i + o)); DrawTo(clip.x_max, clip.y_min + (i - o)); } } if (x < m_layout->pagesX - 1 || y > 0) { MoveTo(clip.x_max, clip.y_min + tsize); DrawTo(clip.x_max, clip.y_min); fAtCorner = fTrue; } else { fAtCorner = fFalse; } } if (y == 0 && m_layout->Border) { /* solid bottom border */ if (!fAtCorner) MoveTo(clip.x_max, clip.y_min); DrawTo(clip.x_min, clip.y_min); } else { if (y > 0 || x < m_layout->pagesX - 1) { if (!fAtCorner) MoveTo(clip.x_max, clip.y_min); DrawTo(clip.x_max - tsize, clip.y_min); } if (s && y > 0 && m_layout->Cutlines) { /* dashed bottom border */ i = (clip.x_max - clip.x_min) - (tsize + ((clip.x_max - clip.x_min - tsize * 2L) % s) / 2); for ( ; i > tsize; i -= s) { MoveTo(clip.x_min + (i + o), clip.y_min); DrawTo(clip.x_min + (i - o), clip.y_min); } } if (y > 0 || x > 0) { MoveTo(clip.x_min + tsize, clip.y_min); DrawTo(clip.x_min, clip.y_min); } } } bool svxPrintout::OnPrintPage(int pageNum) { GetPageSizePixels(&xpPageWidth, &ypPageDepth); pdc = GetDC(); pdc->SetBackgroundMode(wxTRANSPARENT); #ifdef AVEN_PRINT_PREVIEW if (IsPreview()) { int dcx, dcy; pdc->GetSize(&dcx, &dcy); pdc->SetUserScale((double)dcx / xpPageWidth, (double)dcy / ypPageDepth); } #endif layout * l = m_layout; { int pwidth, pdepth; GetPageSizeMM(&pwidth, &pdepth); l->scX = (double)xpPageWidth / pwidth; l->scY = (double)ypPageDepth / pdepth; font_scaling_x = l->scX * (25.4 / 72.0); font_scaling_y = l->scY * (25.4 / 72.0); long MarginLeft = m_data->GetMarginTopLeft().x; long MarginTop = m_data->GetMarginTopLeft().y; long MarginBottom = m_data->GetMarginBottomRight().y; long MarginRight = m_data->GetMarginBottomRight().x; xpPageWidth -= (int)(l->scX * (MarginLeft + MarginRight)); ypPageDepth -= (int)(l->scY * (FOOTER_HEIGHT_MM + MarginBottom + MarginTop)); // xpPageWidth -= 1; pdepth -= FOOTER_HEIGHT_MM; x_offset = (long)(l->scX * MarginLeft); y_offset = (long)(l->scY * MarginTop); l->PaperWidth = pwidth -= MarginLeft + MarginRight; l->PaperDepth = pdepth -= MarginTop + MarginBottom; } double SIN = sin(rad(l->rot)); double COS = cos(rad(l->rot)); double SINT = sin(rad(l->tilt)); double COST = cos(rad(l->tilt)); NewPage(pageNum, l->pagesX, l->pagesY); if (l->Legend && pageNum == (l->pagesY - 1) * l->pagesX + 1) { SetFont(font_default); draw_info_box(); } pdc->SetClippingRegion(x_offset, y_offset, xpPageWidth + 1, ypPageDepth + 1); const double Sc = 1000 / l->Scale; const SurveyFilter* filter = mainfrm->GetTreeFilter(); int show_mask = l->get_effective_show_mask(); if (show_mask & (LEGS|SURF)) { for (int f = 0; f != 8; ++f) { if ((show_mask & (f & img_FLAG_SURFACE) ? SURF : LEGS) == 0) { // Not showing traverse because of surface/underground status. continue; } if ((f & img_FLAG_SPLAY) && (show_mask & SPLAYS) == 0) { // Not showing because it's a splay. continue; } if (f & img_FLAG_SPLAY) { pdc->SetPen(*pen_splay); } else if (f & img_FLAG_SURFACE) { pdc->SetPen(*pen_surface_leg); } else { pdc->SetPen(*pen_leg); } list::const_iterator trav = mainfrm->traverses_begin(f, filter); list::const_iterator tend = mainfrm->traverses_end(f); for ( ; trav != tend; trav = mainfrm->traverses_next(f, filter, trav)) { vector::const_iterator pos = trav->begin(); vector::const_iterator end = trav->end(); for ( ; pos != end; ++pos) { double x = pos->GetX(); double y = pos->GetY(); double z = pos->GetZ(); double X = x * COS - y * SIN; double Y = z * COST - (x * SIN + y * COS) * SINT; long px = (long)((X * Sc + l->xOrg) * l->scX); long py = (long)((Y * Sc + l->yOrg) * l->scY); if (pos == trav->begin()) { MoveTo(px, py); } else { DrawTo(px, py); } } } } } if ((show_mask & XSECT) && (l->tilt == 0.0 || l->tilt == 90.0 || l->tilt == -90.0)) { pdc->SetPen(*pen_splay); list>::const_iterator trav = mainfrm->tubes_begin(); list>::const_iterator tend = mainfrm->tubes_end(); for ( ; trav != tend; ++trav) { if (l->tilt == 0.0) { PlotUD(*trav); } else { // m_layout.tilt is 90.0 or -90.0 due to check above. PlotLR(*trav); } } } if (show_mask & (LABELS|STNS)) { if (show_mask & LABELS) SetFont(font_labels); for (auto label = mainfrm->GetLabels(); label != mainfrm->GetLabelsEnd(); ++label) { if (filter && !filter->CheckVisible((*label)->GetText())) continue; double px = (*label)->GetX(); double py = (*label)->GetY(); double pz = (*label)->GetZ(); if ((show_mask & SURF) || (*label)->IsUnderground()) { double X = px * COS - py * SIN; double Y = pz * COST - (px * SIN + py * COS) * SINT; long xnew, ynew; xnew = (long)((X * Sc + l->xOrg) * l->scX); ynew = (long)((Y * Sc + l->yOrg) * l->scY); if (show_mask & STNS) { pdc->SetPen(*pen_cross); DrawCross(xnew, ynew); } if (show_mask & LABELS) { pdc->SetTextForeground(colour_labels); MoveTo(xnew, ynew); WriteString((*label)->GetText()); } } } } return true; } void svxPrintout::GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) { *minPage = *pageFrom = 1; *maxPage = *pageTo = m_layout->pages; } bool svxPrintout::HasPage(int pageNum) { return (pageNum <= m_layout->pages); } void svxPrintout::OnBeginPrinting() { /* Initialise printer routines */ fontsize_labels = 10; fontsize = 10; colour_text = colour_labels = *wxBLACK; wxColour colour_frame, colour_cross, colour_leg, colour_surface_leg; colour_frame = colour_cross = colour_leg = colour_surface_leg = *wxBLACK; pen_frame = new wxPen(colour_frame); pen_cross = new wxPen(colour_cross); pen_leg = new wxPen(colour_leg); pen_surface_leg = new wxPen(colour_surface_leg); pen_splay = new wxPen(wxColour(128, 128, 128)); m_layout->scX = 1; m_layout->scY = 1; font_labels = new wxFont(fontsize_labels, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxString(fontname_labels, wxConvUTF8), wxFONTENCODING_ISO8859_1); font_default = new wxFont(fontsize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxString(fontname, wxConvUTF8), wxFONTENCODING_ISO8859_1); } void svxPrintout::OnEndPrinting() { delete font_labels; delete font_default; delete pen_frame; delete pen_cross; delete pen_leg; delete pen_surface_leg; delete pen_splay; } int svxPrintout::check_intersection(long x_p, long y_p) { #define U 1 #define D 2 #define L 4 #define R 8 int mask_p = 0, mask_t = 0; if (x_p < 0) mask_p = L; else if (x_p > xpPageWidth) mask_p = R; if (y_p < 0) mask_p |= D; else if (y_p > ypPageDepth) mask_p |= U; if (x_t < 0) mask_t = L; else if (x_t > xpPageWidth) mask_t = R; if (y_t < 0) mask_t |= D; else if (y_t > ypPageDepth) mask_t |= U; #if 0 /* approximation to correct answer */ return !(mask_t & mask_p); #else /* One end of the line is on the page */ if (!mask_t || !mask_p) return 1; /* whole line is above, left, right, or below page */ if (mask_t & mask_p) return 0; if (mask_t == 0) mask_t = mask_p; if (mask_t & U) { double v = (double)(y_p - ypPageDepth) / (y_p - y_t); return v >= 0 && v <= 1; } if (mask_t & D) { double v = (double)y_p / (y_p - y_t); return v >= 0 && v <= 1; } if (mask_t & R) { double v = (double)(x_p - xpPageWidth) / (x_p - x_t); return v >= 0 && v <= 1; } wxASSERT(mask_t & L); { double v = (double)x_p / (x_p - x_t); return v >= 0 && v <= 1; } #endif #undef U #undef D #undef L #undef R } void svxPrintout::MoveTo(long x, long y) { x_t = x_offset + x - clip.x_min; y_t = y_offset + clip.y_max - y; } void svxPrintout::DrawTo(long x, long y) { long x_p = x_t, y_p = y_t; x_t = x_offset + x - clip.x_min; y_t = y_offset + clip.y_max - y; if (!scan_for_blank_pages) { pdc->DrawLine(x_p, y_p, x_t, y_t); } else { if (check_intersection(x_p, y_p)) fBlankPage = fFalse; } } #define POINTS_PER_INCH 72.0 #define POINTS_PER_MM (POINTS_PER_INCH / MM_PER_INCH) #define PWX_CROSS_SIZE (int)(2 * m_layout->scX / POINTS_PER_MM) void svxPrintout::DrawCross(long x, long y) { if (!scan_for_blank_pages) { MoveTo(x - PWX_CROSS_SIZE, y - PWX_CROSS_SIZE); DrawTo(x + PWX_CROSS_SIZE, y + PWX_CROSS_SIZE); MoveTo(x + PWX_CROSS_SIZE, y - PWX_CROSS_SIZE); DrawTo(x - PWX_CROSS_SIZE, y + PWX_CROSS_SIZE); MoveTo(x, y); } else { if ((x + PWX_CROSS_SIZE > clip.x_min && x - PWX_CROSS_SIZE < clip.x_max) || (y + PWX_CROSS_SIZE > clip.y_min && y - PWX_CROSS_SIZE < clip.y_max)) { fBlankPage = fFalse; } } } void svxPrintout::WriteString(const wxString & s) { double xsc, ysc; pdc->GetUserScale(&xsc, &ysc); pdc->SetUserScale(xsc * font_scaling_x, ysc * font_scaling_y); if (!scan_for_blank_pages) { pdc->DrawText(s, long(x_t / font_scaling_x), long(y_t / font_scaling_y) - pdc->GetCharHeight()); } else { int w, h; pdc->GetTextExtent(s, &w, &h); if ((y_t + h > 0 && y_t - h < clip.y_max - clip.y_min) || (x_t < clip.x_max - clip.x_min && x_t + w > 0)) { fBlankPage = fFalse; } } pdc->SetUserScale(xsc, ysc); } void svxPrintout::DrawEllipse(long x, long y, long r, long R) { if (!scan_for_blank_pages) { x_t = x_offset + x - clip.x_min; y_t = y_offset + clip.y_max - y; const wxBrush & save_brush = pdc->GetBrush(); pdc->SetBrush(*wxTRANSPARENT_BRUSH); pdc->DrawEllipse(x_t - r, y_t - R, 2 * r, 2 * R); pdc->SetBrush(save_brush); } else { /* No need to check - this is only used in the legend. */ } } void svxPrintout::SolidRectangle(long x, long y, long w, long h) { long X = x_offset + x - clip.x_min; long Y = y_offset + clip.y_max - y; pdc->SetBrush(*wxBLACK_BRUSH); pdc->DrawRectangle(X, Y - h, w, h); } void svxPrintout::NewPage(int pg, int pagesX, int pagesY) { pdc->DestroyClippingRegion(); int x, y; x = (pg - 1) % pagesX; y = pagesY - 1 - ((pg - 1) / pagesX); clip.x_min = (long)x * xpPageWidth; clip.y_min = (long)y * ypPageDepth; clip.x_max = clip.x_min + xpPageWidth; /* dm/pcl/ps had -1; */ clip.y_max = clip.y_min + ypPageDepth; /* dm/pcl/ps had -1; */ const int FOOTERS = 4; wxString footer[FOOTERS]; footer[0] = m_layout->title; double rot = m_layout->rot; double tilt = m_layout->tilt; double scale = m_layout->Scale; switch (m_layout->view) { case layout::PLAN: // TRANSLATORS: Used in the footer of printouts to compactly // indicate this is a plan view and what the viewing angle is. // Aven will replace %s with the bearing, and %.0f with the scale. // // This message probably doesn't need translating for most languages. footer[1].Printf(wmsg(/*↑%s 1:%.0f*/233), format_angle(ANGLE_FMT, rot).c_str(), scale); break; case layout::ELEV: // TRANSLATORS: Used in the footer of printouts to compactly // indicate this is an elevation view and what the viewing angle // is. Aven will replace the %s codes with the bearings to the // left and right of the viewer, and %.0f with the scale. // // This message probably doesn't need translating for most languages. footer[1].Printf(wmsg(/*%s↔%s 1:%.0f*/235), format_angle(ANGLE_FMT, fmod(rot + 270.0, 360.0)).c_str(), format_angle(ANGLE_FMT, fmod(rot + 90.0, 360.0)).c_str(), scale); break; case layout::TILT: // TRANSLATORS: Used in the footer of printouts to compactly // indicate this is a tilted elevation view and what the viewing // angles are. Aven will replace the %s codes with the bearings to // the left and right of the viewer and the angle the view is // tilted at, and %.0f with the scale. // // This message probably doesn't need translating for most languages. footer[1].Printf(wmsg(/*%s↔%s ∡%s 1:%.0f*/236), format_angle(ANGLE_FMT, fmod(rot + 270.0, 360.0)).c_str(), format_angle(ANGLE_FMT, fmod(rot + 90.0, 360.0)).c_str(), format_angle(ANGLE2_FMT, tilt).c_str(), scale); break; case layout::EXTELEV: // TRANSLATORS: Used in the footer of printouts to compactly // indicate this is an extended elevation view. Aven will replace // %.0f with the scale. // // Try to keep the translation short (for example, in English we // use "Extended" not "Extended elevation") - there is limited room // in the footer, and the details there are mostly to make it easy // to check that you have corresponding pages from a multiple page // printout. footer[1].Printf(wmsg(/*Extended 1:%.0f*/244), scale); break; } // TRANSLATORS: N/M meaning page N of M in the page footer of a printout. footer[2].Printf(wmsg(/*%d/%d*/232), pg, m_layout->pagesX * m_layout->pagesY); wxString datestamp = m_layout->datestamp; if (!datestamp.empty()) { // Remove any timezone suffix (e.g. " UTC" or " +1200"). wxChar ch = datestamp[datestamp.size() - 1]; if (ch >= 'A' && ch <= 'Z') { for (size_t i = datestamp.size() - 1; i; --i) { ch = datestamp[i]; if (ch < 'A' || ch > 'Z') { if (ch == ' ') datestamp.resize(i); break; } } } else if (ch >= '0' && ch <= '9') { for (size_t i = datestamp.size() - 1; i; --i) { ch = datestamp[i]; if (ch < '0' || ch > '9') { if ((ch == '-' || ch == '+') && datestamp[--i] == ' ') datestamp.resize(i); break; } } } // Remove any day prefix (e.g. "Mon,"). for (size_t i = 0; i != datestamp.size(); ++i) { if (datestamp[i] == ',' && i + 1 != datestamp.size()) { // Also skip a space after the comma. if (datestamp[i + 1] == ' ') ++i; datestamp.erase(0, i + 1); break; } } } // TRANSLATORS: Used in the footer of printouts to compactly indicate that // the date which follows is the date that the survey data was processed. // // Aven will replace %s with a string giving the date and time (e.g. // "2015-06-09 12:40:44"). footer[3].Printf(wmsg(/*Processed: %s*/167), datestamp.c_str()); const wxChar * footer_sep = wxT(" "); int fontsize_footer = fontsize_labels; wxFont * font_footer; font_footer = new wxFont(fontsize_footer, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxString(fontname_labels, wxConvUTF8), wxFONTENCODING_UTF8); font_footer->Scale(font_scaling_x); SetFont(font_footer); int w[FOOTERS], ws, h; pdc->GetTextExtent(footer_sep, &ws, &h); int wtotal = ws * (FOOTERS - 1); for (int i = 0; i < FOOTERS; ++i) { pdc->GetTextExtent(footer[i], &w[i], &h); wtotal += w[i]; } long X = x_offset; long Y = y_offset + ypPageDepth + (long)(7 * m_layout->scY) - pdc->GetCharHeight(); if (wtotal > xpPageWidth) { // Rescale the footer so it fits. double rescale = double(wtotal) / xpPageWidth; double xsc, ysc; pdc->GetUserScale(&xsc, &ysc); pdc->SetUserScale(xsc / rescale, ysc / rescale); SetFont(font_footer); wxString fullfooter = footer[0]; for (int i = 1; i < FOOTERS - 1; ++i) { fullfooter += footer_sep; fullfooter += footer[i]; } pdc->DrawText(fullfooter, X * rescale, Y * rescale); // Draw final item right aligned to avoid misaligning. wxRect rect(x_offset * rescale, Y * rescale, xpPageWidth * rescale, pdc->GetCharHeight() * rescale); pdc->DrawLabel(footer[FOOTERS - 1], rect, wxALIGN_RIGHT|wxALIGN_TOP); pdc->SetUserScale(xsc, ysc); } else { // Space out the elements of the footer to fill the line. double extra = double(xpPageWidth - wtotal) / (FOOTERS - 1); for (int i = 0; i < FOOTERS - 1; ++i) { pdc->DrawText(footer[i], X + extra * i, Y); X += ws + w[i]; } // Draw final item right aligned to avoid misaligning. wxRect rect(x_offset, Y, xpPageWidth, pdc->GetCharHeight()); pdc->DrawLabel(footer[FOOTERS - 1], rect, wxALIGN_RIGHT|wxALIGN_TOP); } drawticks((int)(9 * m_layout->scX / POINTS_PER_MM), x, y); } void svxPrintout::PlotLR(const vector & centreline) { const SurveyFilter* filter = mainfrm->GetTreeFilter(); assert(centreline.size() > 1); const XSect* prev_pt_v = NULL; Vector3 last_right(1.0, 0.0, 0.0); const double Sc = 1000 / m_layout->Scale; const double SIN = sin(rad(m_layout->rot)); const double COS = cos(rad(m_layout->rot)); vector::const_iterator i = centreline.begin(); vector::size_type segment = 0; while (i != centreline.end()) { // get the coordinates of this vertex const XSect & pt_v = *i++; Vector3 right; const Vector3 up_v(0.0, 0.0, 1.0); if (segment == 0) { assert(i != centreline.end()); // first segment // get the coordinates of the next vertex const XSect & next_pt_v = *i; // calculate vector from this pt to the next one Vector3 leg_v = next_pt_v - pt_v; // obtain a vector in the LRUD plane right = leg_v * up_v; if (right.magnitude() == 0) { right = last_right; } else { last_right = right; } } else if (segment + 1 == centreline.size()) { // last segment // Calculate vector from the previous pt to this one. Vector3 leg_v = pt_v - *prev_pt_v; // Obtain a horizontal vector in the LRUD plane. right = leg_v * up_v; if (right.magnitude() == 0) { right = Vector3(last_right.GetX(), last_right.GetY(), 0.0); } else { last_right = right; } } else { assert(i != centreline.end()); // Intermediate segment. // Get the coordinates of the next vertex. const XSect & next_pt_v = *i; // Calculate vectors from this vertex to the // next vertex, and from the previous vertex to // this one. Vector3 leg1_v = pt_v - *prev_pt_v; Vector3 leg2_v = next_pt_v - pt_v; // Obtain horizontal vectors perpendicular to // both legs, then normalise and average to get // a horizontal bisector. Vector3 r1 = leg1_v * up_v; Vector3 r2 = leg2_v * up_v; r1.normalise(); r2.normalise(); right = r1 + r2; if (right.magnitude() == 0) { // This is the "mid-pitch" case... right = last_right; } last_right = right; } // Scale to unit vectors in the LRUD plane. right.normalise(); Double l = pt_v.GetL(); Double r = pt_v.GetR(); if (l >= 0 || r >= 0) { if (!filter || filter->CheckVisible(pt_v.GetLabel())) { // Get the x and y coordinates of the survey station double pt_X = pt_v.GetX() * COS - pt_v.GetY() * SIN; double pt_Y = pt_v.GetX() * SIN + pt_v.GetY() * COS; long pt_x = (long)((pt_X * Sc + m_layout->xOrg) * m_layout->scX); long pt_y = (long)((pt_Y * Sc + m_layout->yOrg) * m_layout->scY); // Calculate dimensions for the right arrow double COSR = right.GetX(); double SINR = right.GetY(); long CROSS_MAJOR = (COSR + SINR) * PWX_CROSS_SIZE; long CROSS_MINOR = (COSR - SINR) * PWX_CROSS_SIZE; if (l >= 0) { // Get the x and y coordinates of the end of the left arrow Vector3 p = pt_v.GetPoint() - right * l; double X = p.GetX() * COS - p.GetY() * SIN; double Y = (p.GetX() * SIN + p.GetY() * COS); long x = (long)((X * Sc + m_layout->xOrg) * m_layout->scX); long y = (long)((Y * Sc + m_layout->yOrg) * m_layout->scY); // Draw the arrow stem MoveTo(pt_x, pt_y); DrawTo(x, y); // Rotate the arrow by the page rotation long dx1 = (+CROSS_MINOR) * COS - (+CROSS_MAJOR) * SIN; long dy1 = (+CROSS_MINOR) * SIN + (+CROSS_MAJOR) * COS; long dx2 = (+CROSS_MAJOR) * COS - (-CROSS_MINOR) * SIN; long dy2 = (+CROSS_MAJOR) * SIN + (-CROSS_MINOR) * COS; // Draw the arrow MoveTo(x + dx1, y + dy1); DrawTo(x, y); DrawTo(x + dx2, y + dy2); } if (r >= 0) { // Get the x and y coordinates of the end of the right arrow Vector3 p = pt_v.GetPoint() + right * r; double X = p.GetX() * COS - p.GetY() * SIN; double Y = (p.GetX() * SIN + p.GetY() * COS); long x = (long)((X * Sc + m_layout->xOrg) * m_layout->scX); long y = (long)((Y * Sc + m_layout->yOrg) * m_layout->scY); // Draw the arrow stem MoveTo(pt_x, pt_y); DrawTo(x, y); // Rotate the arrow by the page rotation long dx1 = (-CROSS_MINOR) * COS - (-CROSS_MAJOR) * SIN; long dy1 = (-CROSS_MINOR) * SIN + (-CROSS_MAJOR) * COS; long dx2 = (-CROSS_MAJOR) * COS - (+CROSS_MINOR) * SIN; long dy2 = (-CROSS_MAJOR) * SIN + (+CROSS_MINOR) * COS; // Draw the arrow MoveTo(x + dx1, y + dy1); DrawTo(x, y); DrawTo(x + dx2, y + dy2); } } } prev_pt_v = &pt_v; ++segment; } } void svxPrintout::PlotUD(const vector & centreline) { const SurveyFilter* filter = mainfrm->GetTreeFilter(); assert(centreline.size() > 1); const double Sc = 1000 / m_layout->Scale; vector::const_iterator i = centreline.begin(); while (i != centreline.end()) { // get the coordinates of this vertex const XSect & pt_v = *i++; Double u = pt_v.GetU(); Double d = pt_v.GetD(); if (u >= 0 || d >= 0) { if (filter && !filter->CheckVisible(pt_v.GetLabel())) continue; // Get the coordinates of the survey point Vector3 p = pt_v.GetPoint(); double SIN = sin(rad(m_layout->rot)); double COS = cos(rad(m_layout->rot)); double X = p.GetX() * COS - p.GetY() * SIN; double Y = p.GetZ(); long x = (long)((X * Sc + m_layout->xOrg) * m_layout->scX); long pt_y = (long)((Y * Sc + m_layout->yOrg) * m_layout->scX); if (u >= 0) { // Get the y coordinate of the up arrow long y = (long)(((Y + u) * Sc + m_layout->yOrg) * m_layout->scY); // Draw the arrow stem MoveTo(x, pt_y); DrawTo(x, y); // Draw the up arrow MoveTo(x - PWX_CROSS_SIZE, y - PWX_CROSS_SIZE); DrawTo(x, y); DrawTo(x + PWX_CROSS_SIZE, y - PWX_CROSS_SIZE); } if (d >= 0) { // Get the y coordinate of the down arrow long y = (long)(((Y - d) * Sc + m_layout->yOrg) * m_layout->scY); // Draw the arrow stem MoveTo(x, pt_y); DrawTo(x, y); // Draw the down arrow MoveTo(x - PWX_CROSS_SIZE, y + PWX_CROSS_SIZE); DrawTo(x, y); DrawTo(x + PWX_CROSS_SIZE, y + PWX_CROSS_SIZE); } } } } survex-1.4.4/src/pos.h0000644000175000017500000000255014312174730011542 00000000000000/* pos.h * Export from Aven as Survex .pos or .csv. */ /* Copyright (C) 2005,2013,2014,2015,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" #include class POS : public ExportFilter { public: struct pos_label { double x, y, z; char name[1]; }; private: std::vector todo; char separator; bool csv; public: POS(char separator_, bool csv_) : separator(separator_), csv(csv_) { } ~POS(); const int * passes() const; void header(const char *, const char *, time_t, double, double, double, double, double, double); void label(const img_point *, const char *, bool, int); void footer(); }; survex-1.4.4/src/namecompare.cc0000644000175000017500000000435314141575516013400 00000000000000/* namecompare.cc */ /* Ordering function for station names */ /* Copyright (C) 1991-2002,2004,2012,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "namecompare.h" inline bool u_digit(unsigned ch) { return (ch - unsigned('0')) <= unsigned('9' - '0'); } int name_cmp(const wxString &a, const wxString &b, int separator) { size_t i = 0; size_t shorter = std::min(a.size(), b.size()); while (i != shorter) { int cha = a[i]; int chb = b[i]; /* check for end of non-numeric prefix */ if (u_digit(cha)) { /* sort numbers numerically and before non-numbers */ size_t sa, sb, ea, eb; int res; if (!u_digit(chb)) return chb == separator ? 1 : -1; sa = i; while (sa != a.size() && a[sa] == '0') sa++; ea = sa; while (ea != a.size() && u_digit(a[ea])) ea++; sb = i; while (sb != b.size() && b[sb] == '0') sb++; eb = sb; while (eb != b.size() && u_digit(b[eb])) eb++; /* shorter sorts first */ res = int(ea - sa) - int(eb - sb); /* same length, all digits, so character value compare sorts * numerically */ for (size_t j = sa; !res && j != ea; ++j) { res = int(a[j]) - int(b[j - sa + sb]); } /* more leading zeros sorts first */ if (!res) res = int(sb) - int(sa); if (res) return res; /* if numbers match, sort by suffix */ i = ea; continue; } if (cha != chb) { if (cha == separator) return -1; if (u_digit(chb) || chb == separator) return 1; return cha - chb; } i++; } return int(a.size()) - int(b.size()); } survex-1.4.4/src/message.h0000644000175000017500000000634314206076336012376 00000000000000/* message.h * Function prototypes for message.c * Copyright (C) 1998-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MESSAGE_H /* only include once */ #define MESSAGE_H #ifdef __cplusplus extern "C" { #endif #include #include "osdepend.h" #include "osalloc.h" #define STDERR stdout #define CHARSET_BAD -1 #define CHARSET_USASCII 0 #define CHARSET_ISO_8859_1 1 #define CHARSET_DOSCP850 2 #define CHARSET_UTF8 4 #define CHARSET_WINCP1252 5 #define CHARSET_ISO_8859_15 6 #define CHARSET_ISO_8859_2 8 #define CHARSET_WINCP1250 9 extern int msg_warnings; /* keep track of how many warnings we've given */ extern int msg_errors; /* and how many (non-fatal) errors */ /* The language code - e.g. "en_GB" */ extern const char *msg_lang; /* If the language code has a country specific qualification, then this will * be just the language code. Otherwise it's NULL. e.g. "en" */ extern const char *msg_lang2; void msg_init(char *const *argv); const char *msg_cfgpth(void); const char *msg_exepth(void); const char *msg_appname(void); /* Return the message string corresponding to number en */ const char *msg(int en); /* These need to fit within DIAG_SEVERITY_MASK defined in datain.h. */ #define DIAG_INFO 0x00 #define DIAG_WARN 0x01 #define DIAG_ERR 0x02 #define DIAG_FATAL 0x03 void v_report(int severity, const char *fnm, int line, int col, int en, va_list ap); void diag(int severity, int en, ...); #define information(...) diag(DIAG_INFO, __VA_ARGS__) #define warning(...) diag(DIAG_WARN, __VA_ARGS__) #define error(...) diag(DIAG_ERR, __VA_ARGS__) #define fatalerror(...) diag(DIAG_FATAL, __VA_ARGS__) void diag_in_file(int severity, const char *fnm, int line, int en, ...); #define information_in_file(...) diag_in_file(DIAG_INFO, __VA_ARGS__) #define warning_in_file(...) diag_in_file(DIAG_WARN, __VA_ARGS__) #define error_in_file(...) diag_in_file(DIAG_ERR, __VA_ARGS__) #define fatalerror_in_file(...) diag_in_file(DIAG_FATAL, __VA_ARGS__) int select_charset(int charset_code); #ifdef __cplusplus } #endif /* Define MSG_SETUP_PROJ_SEARCH_PATH before including this header to enable the * hooks to setup proj's search path to be relative to the executable if this * is a relocatable install. */ #ifdef MSG_SETUP_PROJ_SEARCH_PATH /* We only need this on these platforms. */ # if OS_WIN32 # include # define msg_init(ARGV) do {\ (msg_init)(ARGV); \ const char* msg_init_proj_path = msg_cfgpth();\ proj_context_set_search_paths(PJ_DEFAULT_CTX, 1, &msg_init_proj_path);\ } while (0) # endif #endif #endif /* MESSAGE_H */ survex-1.4.4/src/netskel.c0000644000175000017500000007633714205553447012426 00000000000000/* netskel.c * Survex network reduction - remove trailing traverses and concatenate * traverses between junctions * Copyright (C) 1991-2004,2005,2006,2010,2011,2012,2013,2014,2015 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* #define BLUNDER_DETECTION */ #if 0 #define DEBUG_INVALID 1 #define VALIDATE 1 #define DUMP_NETWORK 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include "validate.h" #include "debug.h" #include "cavern.h" #include "filename.h" #include "message.h" #include "filelist.h" #include "img_hosted.h" #include "netartic.h" #include "netbits.h" #include "netskel.h" #include "network.h" #include "out.h" #define sqrdd(X) (sqrd((X)[0]) + sqrd((X)[1]) + sqrd((X)[2])) typedef struct Stack { struct Link *join1, *join2; struct Stack *next; } stack; typedef struct StackTr { struct Link *join1; struct StackTr *next; } stackTrail; /* string used between things in traverse printouts eg \1 - \2 - \3 -...*/ static const char *szLink = " - "; static const char *szLinkEq = " = "; /* use this one for equates */ #if 0 #define fprint_prefix(FH, NAME) BLK((fprint_prefix)((FH), (NAME));\ fprintf((FH), " [%p]", (void*)(NAME)); ) #endif static stack *ptr; /* Ptr to TRaverse linked list for in-between travs */ static stackTrail *ptrTrail; /* Ptr to TRaverse linked list for trail travs*/ static void remove_trailing_travs(void); static void remove_travs(void); static void replace_travs(void); static void replace_trailing_travs(void); static void write_passage_models(void); static void concatenate_trav(node *stn, int i); static void err_stat(int cLegsTrav, double lenTrav, double eTot, double eTotTheo, double hTot, double hTotTheo, double vTot, double vTotTheo); extern void solve_network(void /*node *stnlist*/) { static int first_solve = 1; node *stn; /* We can't average across solving to fix positions. */ clear_last_leg(); if (stnlist == NULL) { if (first_solve) fatalerror(/*No survey data*/43); /* We've had a *solve followed by another *solve (or the implicit * *solve at the end of the data. Don't moan about that. */ return; } ptr = NULL; ptrTrail = NULL; dump_network(); if (first_solve && !pcs->proj_str && !proj_str_out) { /* If we haven't already solved to find some station positions, and * there's no specified coordinate system, then check if there are any * fixed points, and if there aren't, invent one at (0,0,0). * * We do this first so the solving part is just like the standard case - * this avoid problems, such as sub-nodes of the invented fix having been * removed. It also means we can fix the "first" station, which makes * more sense to the user. */ FOR_EACH_STN(stn, stnlist) if (fixed(stn)) break; if (!stn) { /* If we've had a *solve and all the new survey since then is hanging, * we don't want to invent a fixed point. We want to complain but * the easiest way to is just to continue processing and let * articulate() catch this condition as it will any hanging survey * data. */ node *stnFirst = NULL; /* New stations are pushed onto the head of the list, so the * first station added is the last in the list. */ FOR_EACH_STN(stn, stnlist) { /* Prefer a station with legs attached when choosing one to fix * so that if there's a hanging station on a nosurvey leg we pick * the main clump of survey data. */ if (stnFirst && !stnFirst->leg[0]) continue; stnFirst = stn; } /* If we've got nosurvey legs, then the station we find to fix could * have no real legs attached. */ SVX_ASSERT2(nosurveyhead || stnFirst->leg[0], "no fixed stns, but we've got a zero node!"); SVX_ASSERT2(stnFirst, "no stations left in net!"); stn = stnFirst; printf(msg(/*Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)*/72), sprint_prefix(stn->name)); putnl(); POS(stn,0) = (real)0.0; POS(stn,1) = (real)0.0; POS(stn,2) = (real)0.0; fix(stn); } } first_solve = 0; remove_trailing_travs(); validate(); dump_network(); remove_travs(); validate(); dump_network(); remove_subnets(); validate(); dump_network(); articulate(); validate(); dump_network(); replace_subnets(); validate(); dump_network(); replace_travs(); validate(); dump_network(); replace_trailing_travs(); validate(); dump_network(); /* Now write out any passage models. */ write_passage_models(); } static void remove_trailing_travs(void) { node *stn; /* TRANSLATORS: In French, Eric chose to use the terminology used by * toporobot: "sequence" for the English "traverse", which makes sense * (although toporobot actually uses this term to mean something more * specific). Feel free to follow this lead if you can't think of a better * term - these messages mostly indicate how processing is progressing. * * A trailing traverse is a dead end back to a junction. */ out_current_action(msg(/*Removing trailing traverses*/125)); FOR_EACH_STN(stn, stnlist) { if (!fixed(stn) && one_node(stn)) { int i = 0; int j; node *stn2 = stn; stackTrail *trav; #if PRINT_NETBITS printf("Removed trailing trav "); #endif do { struct Link *leg; #if PRINT_NETBITS print_prefix(stn2->name); printf("<%p>",stn2); fputs(szLink, stdout); #endif remove_stn_from_list(&stnlist, stn2); leg = stn2->leg[i]; j = reverse_leg_dirn(leg); stn2 = leg->l.to; i = j ^ 1; /* flip direction for other leg of 2 node */ /* stop if fixed or 3 or 1 node */ } while (two_node(stn2) && !fixed(stn2)); /* put traverse on stack */ trav = osnew(stackTrail); trav->join1 = stn2->leg[j]; trav->next = ptrTrail; ptrTrail = trav; /* We want to keep all 2-nodes using legs 0 and 1 and all one nodes * using leg 0 so we may need to swap leg j with leg 2 (for a 3 node) * or leg 1 (for a fixed 2 node) */ if ((j == 0 && !one_node(stn2)) || (j == 1 && three_node(stn2))) { /* i is the direction to swap with */ i = (three_node(stn2)) ? 2 : 1; /* change the other direction of leg i to use leg j */ reverse_leg(stn2->leg[i])->l.reverse += j - i; stn2->leg[j] = stn2->leg[i]; j = i; } stn2->leg[j] = NULL; #if PRINT_NETBITS print_prefix(stn2->name); printf("<%p>",stn2); putnl(); #endif } } } static void remove_travs(void) { node *stn; /* TRANSLATORS: In French, Eric chose to use the terminology used by * toporobot: "sequence" for the English "traverse", which makes sense * (although toporobot actually uses this term to mean something more * specific). Feel free to follow this lead if you can't think of a better * term - these messages mostly indicate how processing is progressing. */ out_current_action(msg(/*Concatenating traverses*/126)); FOR_EACH_STN(stn, stnlist) { if (fixed(stn) || three_node(stn)) { int d; for (d = 0; d <= 2; d++) { linkfor *leg = stn->leg[d]; if (leg && !(leg->l.reverse & FLAG_REPLACEMENTLEG)) concatenate_trav(stn, d); } } } } static void concatenate_trav(node *stn, int i) { int j; stack *trav; node *stn2; linkfor *newleg, *newleg2; stn2 = stn->leg[i]->l.to; /* Reject single legs as they may be already concatenated traverses */ if (fixed(stn2) || !two_node(stn2)) return; trav = osnew(stack); newleg2 = (linkfor*)osnew(linkrev); #if PRINT_NETBITS printf("Concatenating trav "); print_prefix(stn->name); printf("<%p>",stn); #endif newleg2->l.to = stn; newleg2->l.reverse = i | FLAG_REPLACEMENTLEG; trav->join1 = stn->leg[i]; j = reverse_leg_dirn(stn->leg[i]); SVX_ASSERT(j == 0 || j == 1); newleg = copy_link(stn->leg[i]); while (1) { stn = stn2; #if PRINT_NETBITS fputs(szLink, stdout); print_prefix(stn->name); printf("<%p>",stn); #endif /* stop if fixed or 3 or 1 node */ if (fixed(stn) || !two_node(stn)) break; remove_stn_from_list(&stnlist, stn); i = j ^ 1; /* flip direction for other leg of 2 node */ stn2 = stn->leg[i]->l.to; j = reverse_leg_dirn(stn->leg[i]); addto_link(newleg, stn->leg[i]); } trav->join2 = stn->leg[j]; trav->next = ptr; ptr = trav; newleg->l.to = stn; newleg->l.reverse = j | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; newleg2->l.to->leg[reverse_leg_dirn(newleg2)] = newleg; /* i.e. stn->leg[i] = newleg; with original stn and i */ stn->leg[j] = newleg2; #if PRINT_NETBITS putchar(' '); print_var(&(newleg->v)); printf("\nStacked "); print_prefix(newleg2->l.to->name); printf(",%d-", reverse_leg_dirn(newleg2)); print_prefix(stn->name); printf(",%d\n", j); #endif } #ifdef BLUNDER_DETECTION /* expected_error is actually squared... */ /* only called if fhErrStat != NULL */ static void do_gross(delta e, delta v, node *stn1, node *stn2, double expected_error) { double hsqrd, rsqrd, s, cx, cy, cz; double tot; int i; int output = 0; prefix *name1 = stn1->name, *name2 = stn2->name; #if 0 printf( "e = ( %.2f, %.2f, %.2f )", e[0], e[1], e[2] ); printf( " v = ( %.2f, %.2f, %.2f )\n", v[0], v[1], v[2] ); #endif hsqrd = sqrd(v[0]) + sqrd(v[1]); rsqrd = hsqrd + sqrd(v[2]); if (rsqrd == 0.0) return; cx = v[0] + e[0]; cy = v[1] + e[1]; cz = v[2] + e[2]; s = (e[0] * v[0] + e[1] * v[1] + e[2] * v[2]) / rsqrd; tot = 0; for (i = 2; i >= 0; i--) tot += sqrd(e[i] - v[i] * s); if (tot <= expected_error) { if (!output) { fprint_prefix(fhErrStat, name1); fputs("->", fhErrStat); fprint_prefix(fhErrStat, name2); } fprintf(fhErrStat, " L: %.2f", sqrt(tot)); /* checked - works */ fprintf(fhErrStat, " (%.2fm -> %.2fm)", sqrt(sqrdd(v)), sqrt(sqrdd(v)) * (1 - s)); output = 1; } s = sqrd(cx) + sqrd(cy); if (s > 0.0) { s = hsqrd / s; SVX_ASSERT(s >= 0.0); s = sqrt(s); s = 1 - s; tot = sqrd(cx * s) + sqrd(cy * s) + sqrd(e[2]); if (tot <= expected_error) { double newval, oldval; if (!output) { fprint_prefix(fhErrStat, name1); fputs("->", fhErrStat); fprint_prefix(fhErrStat, name2); } fprintf(fhErrStat, " B: %.2f", sqrt(tot)); /* checked - works */ newval = deg(atan2(cx, cy)); if (newval < 0) newval += 360; oldval = deg(atan2(v[0], v[1])); if (oldval < 0) oldval += 360; fprintf(fhErrStat, " (%.2fdeg -> %.2fdeg)", oldval, newval); output = 1; } } if (hsqrd > 0.0) { double nx, ny; s = (e[0] * v[1] - e[1] * v[0]) / hsqrd; nx = cx - s * v[1]; ny = cy + s * v[0]; s = sqrd(nx) + sqrd(ny) + sqrd(cz); if (s > 0.0) { s = rsqrd / s; SVX_ASSERT(s >= 0); s = sqrt(s); tot = sqrd(cx - s * nx) + sqrd(cy - s * ny) + sqrd(cz - s * cz); if (tot <= expected_error) { if (!output) { fprint_prefix(fhErrStat, name1); fputs("->", fhErrStat); fprint_prefix(fhErrStat, name2); } fprintf(fhErrStat, " G: %.2f", sqrt(tot)); /* checked - works */ fprintf(fhErrStat, " (%.2fdeg -> %.2fdeg)", deg(atan2(v[2], sqrt(v[0] * v[0] + v[1] * v[1]))), deg(atan2(cz, sqrt(nx * nx + ny * ny)))); output = 1; } } } if (output) fputnl(fhErrStat); } #endif static void replace_travs(void) { stack *ptrOld; node *stn1, *stn2, *stn3; int i, j, k; double eTot = 0, lenTrav = 0, lenTot; double eTotTheo = 0; double vTot = 0, vTotTheo = 0, hTot = 0, hTotTheo = 0; delta e, sc; bool fEquate; /* used to indicate equates in output */ int cLegsTrav = 0; bool fArtic; /* TRANSLATORS: In French, Eric chose to use the terminology used by * toporobot: "sequence" for the English "traverse", which makes sense * (although toporobot actually uses this term to mean something more * specific). Feel free to follow this lead if you can't think of a better * term - these messages mostly indicate how processing is progressing. */ out_current_action(msg(/*Calculating traverses*/127)); if (!fhErrStat && !fSuppress) fhErrStat = safe_fopen_with_ext(fnm_output_base, EXT_SVX_ERRS, "w"); if (!pimg) { char *fnm = add_ext(fnm_output_base, EXT_SVX_3D); filename_register_output(fnm); pimg = img_open_write_cs(fnm, survey_title, proj_str_out, 0); if (!pimg) fatalerror(img_error(), fnm); osfree(fnm); } /* First do all the one leg traverses */ FOR_EACH_STN(stn1, stnlist) { #if PRINT_NETBITS printf("One leg traverses from "); print_prefix(stn1->name); printf(" [%p]\n", stn1); #endif for (i = 0; i <= 2; i++) { linkfor *leg = stn1->leg[i]; if (leg && data_here(leg) && !(leg->l.reverse & (FLAG_REPLACEMENTLEG | FLAG_FAKE))) { SVX_ASSERT(fixed(stn1)); SVX_ASSERT(!fZeros(&leg->v)); stn2 = leg->l.to; if (TSTBIT(leg->l.flags, FLAGS_SURFACE)) { stn1->name->sflags |= BIT(SFLAGS_SURFACE); stn2->name->sflags |= BIT(SFLAGS_SURFACE); } else { stn1->name->sflags |= BIT(SFLAGS_UNDERGROUND); stn2->name->sflags |= BIT(SFLAGS_UNDERGROUND); } img_write_item(pimg, img_MOVE, 0, NULL, POS(stn1, 0), POS(stn1, 1), POS(stn1, 2)); if (leg->meta) { pimg->days1 = leg->meta->days1; pimg->days2 = leg->meta->days2; } else { pimg->days1 = pimg->days2 = -1; } pimg->style = (leg->l.flags >> FLAGS_STYLE_BIT0) & 0x07; img_write_item(pimg, img_LINE, leg->l.flags & FLAGS_MASK, sprint_prefix(stn1->name->up), POS(stn2, 0), POS(stn2, 1), POS(stn2, 2)); if (!(leg->l.reverse & FLAG_ARTICULATION)) { #ifdef BLUNDER_DETECTION delta err; int do_blunder; #else if (fhErrStat) { fprint_prefix(fhErrStat, stn1->name); fputs(szLink, fhErrStat); fprint_prefix(fhErrStat, stn2->name); } #endif subdd(&e, &POSD(stn2), &POSD(stn1)); subdd(&e, &e, &leg->d); if (fhErrStat) { eTot = sqrdd(e); hTot = sqrd(e[0]) + sqrd(e[1]); vTot = sqrd(e[2]); #ifndef NO_COVARIANCES /* FIXME: what about covariances? */ hTotTheo = leg->v[0] + leg->v[1]; vTotTheo = leg->v[2]; eTotTheo = hTotTheo + vTotTheo; #else hTotTheo = leg->v[0] + leg->v[1]; vTotTheo = leg->v[2]; eTotTheo = hTotTheo + vTotTheo; #endif #ifdef BLUNDER_DETECTION memcpy(&err, &e, sizeof(delta)); do_blunder = (eTot > eTotTheo); fputs("\ntraverse ", fhErrStat); fprint_prefix(fhErrStat, stn1->name); fputs("->", fhErrStat); fprint_prefix(fhErrStat, stn2->name); fprintf(fhErrStat, " e=(%.2f, %.2f, %.2f) mag=%.2f %s\n", e[0], e[1], e[2], sqrt(eTot), (do_blunder ? "suspect:" : "OK")); if (do_blunder) do_gross(err, leg->d, stn1, stn2, eTotTheo); #endif err_stat(1, sqrt(sqrdd(leg->d)), eTot, eTotTheo, hTot, hTotTheo, vTot, vTotTheo); } } } } } while (ptr != NULL) { /* work out where traverse should be reconnected */ linkfor *leg = ptr->join1; leg = reverse_leg(leg); stn1 = leg->l.to; i = reverse_leg_dirn(leg); leg = ptr->join2; leg = reverse_leg(leg); stn2 = leg->l.to; j = reverse_leg_dirn(leg); #if PRINT_NETBITS printf(" Trav "); print_prefix(stn1->name); printf("<%p>[%d]%s...%s", stn1, i, szLink, szLink); print_prefix(stn2->name); printf("<%p>[%d]\n", stn2, j); #endif SVX_ASSERT(fixed(stn1)); SVX_ASSERT(fixed(stn2)); /* calculate scaling factors for error distribution */ eTot = 0.0; hTot = vTot = 0.0; SVX_ASSERT(data_here(stn1->leg[i])); if (fZeros(&stn1->leg[i]->v)) { sc[0] = sc[1] = sc[2] = 0.0; } else { subdd(&e, &POSD(stn2), &POSD(stn1)); subdd(&e, &e, &stn1->leg[i]->d); eTot = sqrdd(e); hTot = sqrd(e[0]) + sqrd(e[1]); vTot = sqrd(e[2]); divds(&sc, &e, &stn1->leg[i]->v); } #ifndef NO_COVARIANCES /* FIXME: what about covariances? */ hTotTheo = stn1->leg[i]->v[0] + stn1->leg[i]->v[1]; vTotTheo = stn1->leg[i]->v[2]; #else hTotTheo = stn1->leg[i]->v[0] + stn1->leg[i]->v[1]; vTotTheo = stn1->leg[i]->v[2]; #endif eTotTheo = hTotTheo + vTotTheo; cLegsTrav = 0; lenTrav = 0.0; img_write_item(pimg, img_MOVE, 0, NULL, POS(stn1, 0), POS(stn1, 1), POS(stn1, 2)); fArtic = stn1->leg[i]->l.reverse & FLAG_ARTICULATION; osfree(stn1->leg[i]); stn1->leg[i] = ptr->join1; /* put old link back in */ osfree(stn2->leg[j]); stn2->leg[j] = ptr->join2; /* and the other end */ #ifdef BLUNDER_DETECTION delta err; int do_blunder; memcpy(&err, &e, sizeof(delta)); do_blunder = (eTot > eTotTheo); if (fhErrStat && !fArtic) { fputs("\ntraverse ", fhErrStat); fprint_prefix(fhErrStat, stn1->name); fputs("->", fhErrStat); fprint_prefix(fhErrStat, stn2->name); fprintf(fhErrStat, " e=(%.2f, %.2f, %.2f) mag=%.2f %s\n", e[0], e[1], e[2], sqrt(eTot), (do_blunder ? "suspect:" : "OK")); } #endif while (fTrue) { int reached_end; prefix *leg_pfx; fEquate = fTrue; /* get next node in traverse * should have stn3->leg[k]->l.to == stn1 */ stn3 = stn1->leg[i]->l.to; k = reverse_leg_dirn(stn1->leg[i]); SVX_ASSERT2(stn3->leg[k]->l.to == stn1, "reverse leg doesn't reciprocate"); reached_end = (stn3 == stn2 && k == j); if (data_here(stn1->leg[i])) { leg_pfx = stn1->name->up; leg = stn1->leg[i]; #ifdef BLUNDER_DETECTION if (do_blunder && fhErrStat) do_gross(err, leg->d, stn1, stn3, eTotTheo); #endif if (!reached_end) adddd(&POSD(stn3), &POSD(stn1), &leg->d); } else { leg_pfx = stn3->name->up; leg = stn3->leg[k]; #ifdef BLUNDER_DETECTION if (do_blunder && fhErrStat) do_gross(err, leg->d, stn1, stn3, eTotTheo); #endif if (!reached_end) subdd(&POSD(stn3), &POSD(stn1), &leg->d); } lenTot = sqrdd(leg->d); if (!fZeros(&leg->v)) fEquate = fFalse; if (!reached_end) { add_stn_to_list(&stnlist, stn3); if (!fEquate) { mulsd(&e, &leg->v, &sc); adddd(&POSD(stn3), &POSD(stn3), &e); } fix(stn3); } if (!(leg->l.reverse & (FLAG_REPLACEMENTLEG | FLAG_FAKE))) { if (TSTBIT(leg->l.flags, FLAGS_SURFACE)) { stn1->name->sflags |= BIT(SFLAGS_SURFACE); stn3->name->sflags |= BIT(SFLAGS_SURFACE); } else { stn1->name->sflags |= BIT(SFLAGS_UNDERGROUND); stn3->name->sflags |= BIT(SFLAGS_UNDERGROUND); } SVX_ASSERT(!fEquate); SVX_ASSERT(!fZeros(&leg->v)); if (leg->meta) { pimg->days1 = leg->meta->days1; pimg->days2 = leg->meta->days2; } else { pimg->days1 = pimg->days2 = -1; } pimg->style = (leg->l.flags >> FLAGS_STYLE_BIT0) & 0x07; img_write_item(pimg, img_LINE, leg->l.flags & FLAGS_MASK, sprint_prefix(leg_pfx), POS(stn3, 0), POS(stn3, 1), POS(stn3, 2)); } /* FIXME: equate at the start of a traverse treated specially * - what about equates at end? */ if (stn1->name != stn3->name && !(fEquate && cLegsTrav == 0)) { /* (node not part of same stn) && * (not equate at start of traverse) */ #ifndef BLUNDER_DETECTION if (fhErrStat && !fArtic) { if (!stn1->name->ident) { /* FIXME: not ideal */ fputs("", fhErrStat); } else { fprint_prefix(fhErrStat, stn1->name); } fputs(fEquate ? szLinkEq : szLink, fhErrStat); if (reached_end) { if (!stn3->name->ident) { /* FIXME: not ideal */ fputs("", fhErrStat); } else { fprint_prefix(fhErrStat, stn3->name); } } } #endif if (!fEquate) { cLegsTrav++; lenTrav += sqrt(lenTot); } } else { #if SHOW_INTERNAL_LEGS if (fhErrStat && !fArtic) fprintf(fhErrStat, "+"); #endif if (lenTot > 0.0) { #if DEBUG_INVALID fprintf(stderr, "lenTot = %8.4f ", lenTot); fprint_prefix(stderr, stn1->name); fprintf(stderr, " -> "); fprint_prefix(stderr, stn3->name); #endif BUG("during calculation of closure errors"); } } if (reached_end) break; i = k ^ 1; /* flip direction for other leg of 2 node */ stn1 = stn3; } /* endwhile */ if (cLegsTrav && !fArtic && fhErrStat) err_stat(cLegsTrav, lenTrav, eTot, eTotTheo, hTot, hTotTheo, vTot, vTotTheo); ptrOld = ptr; ptr = ptr->next; osfree(ptrOld); } /* Leave fhErrStat open in case we're asked to close loops again... */ } static void err_stat(int cLegsTrav, double lenTrav, double eTot, double eTotTheo, double hTot, double hTotTheo, double vTot, double vTotTheo) { double E = sqrt(eTot / eTotTheo); double H = sqrt(hTot / hTotTheo); double V = sqrt(vTot / vTotTheo); if (!fSuppress) { double sqrt_eTot = sqrt(eTot); fputnl(fhErrStat); fprintf(fhErrStat, msg(/*Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). */145), lenTrav, cLegsTrav, sqrt_eTot, sqrt_eTot / cLegsTrav); if (lenTrav > 0.0) { fprintf(fhErrStat, msg(/*Error %6.2f%%*/146), 100 * sqrt_eTot / lenTrav); } else { /* TRANSLATORS: Here N/A means "Not Applicable" -- it means the * traverse has zero length, so error per metre is meaningless. * * There should be 4 spaces between "Error" and "N/A" so that it lines * up with the numbers in the message above. */ fputs(msg(/*Error N/A*/147), fhErrStat); } fputnl(fhErrStat); fprintf(fhErrStat, "%f\n", E); fprintf(fhErrStat, "H: %f V: %f\n", H, V); fputnl(fhErrStat); } img_write_errors(pimg, cLegsTrav, lenTrav, E, H, V); } static void replace_trailing_travs(void) { stackTrail *ptrOld; node *stn1, *stn2; linkfor *leg; int i; /* TRANSLATORS: In French, Eric chose to use the terminology used by * toporobot: "sequence" for the English "traverse", which makes sense * (although toporobot actually uses this term to mean something more * specific). Feel free to follow this lead if you can't think of a better * term - these messages mostly indicate how processing is progressing. * * A trailing traverse is a dead end back to a junction. */ out_current_action(msg(/*Calculating trailing traverses*/128)); while (ptrTrail != NULL) { leg = ptrTrail->join1; leg = reverse_leg(leg); stn1 = leg->l.to; i = reverse_leg_dirn(leg); #if PRINT_NETBITS printf(" Trailing trav "); print_prefix(stn1->name); printf("<%p>", stn1); printf("%s...\n", szLink); printf(" attachment stn is at (%f, %f, %f)\n", POS(stn1, 0), POS(stn1, 1), POS(stn1, 2)); #endif /* We may have swapped the links round when we removed the leg. If * we did then stn1->leg[i] will be in use. The link we swapped * with is the first free leg */ if (stn1->leg[i]) { /* j is the direction to swap with */ int j = (stn1->leg[1]) ? 2 : 1; /* change the other direction of leg i to use leg j */ reverse_leg(stn1->leg[i])->l.reverse += j - i; stn1->leg[j] = stn1->leg[i]; } stn1->leg[i] = ptrTrail->join1; SVX_ASSERT(fixed(stn1)); img_write_item(pimg, img_MOVE, 0, NULL, POS(stn1, 0), POS(stn1, 1), POS(stn1, 2)); while (1) { prefix *leg_pfx; int j; leg = stn1->leg[i]; stn2 = leg->l.to; j = reverse_leg_dirn(leg); if (data_here(leg)) { leg_pfx = stn1->name->up; adddd(&POSD(stn2), &POSD(stn1), &leg->d); #if 0 printf("Adding leg (%f, %f, %f)\n", leg->d[0], leg->d[1], leg->d[2]); #endif } else { leg_pfx = stn2->name->up; leg = stn2->leg[j]; subdd(&POSD(stn2), &POSD(stn1), &leg->d); #if 0 printf("Subtracting reverse leg (%f, %f, %f)\n", leg->d[0], leg->d[1], leg->d[2]); #endif } fix(stn2); add_stn_to_list(&stnlist, stn2); if (!(leg->l.reverse & (FLAG_REPLACEMENTLEG | FLAG_FAKE))) { if (TSTBIT(leg->l.flags, FLAGS_SURFACE)) { stn1->name->sflags |= BIT(SFLAGS_SURFACE); stn2->name->sflags |= BIT(SFLAGS_SURFACE); } else { stn1->name->sflags |= BIT(SFLAGS_UNDERGROUND); stn2->name->sflags |= BIT(SFLAGS_UNDERGROUND); } } if (!(leg->l.reverse & (FLAG_REPLACEMENTLEG | FLAG_FAKE))) { SVX_ASSERT(!fZeros(&leg->v)); if (leg->meta) { pimg->days1 = leg->meta->days1; pimg->days2 = leg->meta->days2; } else { pimg->days1 = pimg->days2 = -1; } pimg->style = (leg->l.flags >> FLAGS_STYLE_BIT0) & 0x07; img_write_item(pimg, img_LINE, leg->l.flags & FLAGS_MASK, sprint_prefix(leg_pfx), POS(stn2, 0), POS(stn2, 1), POS(stn2, 2)); } /* stop if not 2 node */ if (!two_node(stn2)) break; stn1 = stn2; i = j ^ 1; /* flip direction for other leg of 2 node */ } ptrOld = ptrTrail; ptrTrail = ptrTrail->next; osfree(ptrOld); } /* write out connections with no survey data */ while (nosurveyhead) { nosurveylink *p = nosurveyhead; SVX_ASSERT(fixed(p->fr)); SVX_ASSERT(fixed(p->to)); if (TSTBIT(p->flags, FLAGS_SURFACE)) { p->fr->name->sflags |= BIT(SFLAGS_SURFACE); p->to->name->sflags |= BIT(SFLAGS_SURFACE); } else { p->fr->name->sflags |= BIT(SFLAGS_UNDERGROUND); p->to->name->sflags |= BIT(SFLAGS_UNDERGROUND); } img_write_item(pimg, img_MOVE, 0, NULL, POS(p->fr, 0), POS(p->fr, 1), POS(p->fr, 2)); if (p->meta) { pimg->days1 = p->meta->days1; pimg->days2 = p->meta->days2; } else { pimg->days1 = pimg->days2 = -1; } pimg->style = img_STYLE_NOSURVEY; img_write_item(pimg, img_LINE, (p->flags & FLAGS_MASK), sprint_prefix(p->fr->name->up), POS(p->to, 0), POS(p->to, 1), POS(p->to, 2)); nosurveyhead = p->next; osfree(p); } /* write stations to .3d file and free legs and stations */ FOR_EACH_STN(stn1, stnlist) { int d; SVX_ASSERT(fixed(stn1)); if (stn1->name->stn == stn1) { int sf = stn1->name->sflags; /* take care of unused fixed points */ if (!TSTBIT(sf, SFLAGS_SOLVED)) { const char * label = NULL; if (TSTBIT(sf, SFLAGS_ANON)) { label = ""; } else if (stn1->name->ident) { label = sprint_prefix(stn1->name); } if (label) { /* Set flag to stop station being rewritten after *solve. */ stn1->name->sflags = sf | BIT(SFLAGS_SOLVED); sf &= SFLAGS_MASK; if (stn1->name->max_export) sf |= BIT(SFLAGS_EXPORTED); img_write_item(pimg, img_LABEL, sf, label, POS(stn1, 0), POS(stn1, 1), POS(stn1, 2)); } } } /* update coords of bounding box, ignoring the base positions * of points fixed with error estimates and only counting stations * in underground surveys. * * NB We don't set SFLAGS_UNDERGROUND for the anchor station for * a point fixed with error estimates, so this test will exclude * those too, which is what we want. */ if (TSTBIT(stn1->name->sflags, SFLAGS_UNDERGROUND)) { for (d = 0; d < 3; d++) { if (POS(stn1, d) < min[d]) { min[d] = POS(stn1, d); pfxLo[d] = stn1->name; } if (POS(stn1, d) > max[d]) { max[d] = POS(stn1, d); pfxHi[d] = stn1->name; } } /* Range without anonymous stations at offset 3. */ if (!TSTBIT(stn1->name->sflags, SFLAGS_ANON)) { for (d = 0; d < 3; d++) { if (POS(stn1, d) < min[d + 3]) { min[d + 3] = POS(stn1, d); pfxLo[d + 3] = stn1->name; } if (POS(stn1, d) > max[d + 3]) { max[d + 3] = POS(stn1, d); pfxHi[d + 3] = stn1->name; } } } } d = stn1->name->shape; if (d <= 1 && !TSTBIT(stn1->name->sflags, SFLAGS_USED)) { bool unused_fixed_point = fFalse; if (d == 0) { /* Unused fixed point without error estimates */ unused_fixed_point = fTrue; } else if (stn1->leg[0]) { prefix *pfx = stn1->leg[0]->l.to->name; if (!pfx->ident && !TSTBIT(pfx->sflags, SFLAGS_ANON)) { /* Unused fixed point with error estimates */ unused_fixed_point = fTrue; } } if (unused_fixed_point) { /* TRANSLATORS: fixed survey station that is not part of any survey */ warning_in_file(stn1->name->filename, stn1->name->line, /*Unused fixed point “%sâ€*/73, sprint_prefix(stn1->name)); } } /* For stations fixed with error estimates, we need to ignore the leg to * the "real" fixed point in the node stats. */ if (stn1->leg[0] && !stn1->leg[0]->l.to->name->ident && !TSTBIT(stn1->leg[0]->l.to->name->sflags, SFLAGS_ANON)) stn1->name->shape--; for (i = 0; i <= 2; i++) { leg = stn1->leg[i]; /* only want to think about forwards legs */ if (leg && data_here(leg)) { linkfor *legRev; node *stnB; int iB; stnB = leg->l.to; iB = reverse_leg_dirn(leg); legRev = stnB->leg[iB]; SVX_ASSERT2(legRev->l.to == stn1, "leg doesn't reciprocate"); SVX_ASSERT(fixed(stn1)); if (!(leg->l.flags & (BIT(FLAGS_DUPLICATE)|BIT(FLAGS_SPLAY)| BIT(FLAGS_SURFACE)))) { /* check not an equating leg, or one inside an sdfix point */ if (!(leg->l.reverse & (FLAG_REPLACEMENTLEG | FLAG_FAKE))) { totadj += sqrt(sqrd(POS(stnB, 0) - POS(stn1, 0)) + sqrd(POS(stnB, 1) - POS(stn1, 1)) + sqrd(POS(stnB, 2) - POS(stn1, 2))); total += sqrt(sqrdd(leg->d)); totplan += hypot(leg->d[0], leg->d[1]); totvert += fabs(leg->d[2]); } } osfree(leg); osfree(legRev); stn1->leg[i] = stnB->leg[iB] = NULL; } } } /* The station position is attached to the name, so we leave the names and * positions in place - they can then be picked up if we have a *solve * followed by more data */ for (stn1 = stnlist; stn1; stn1 = stn2) { stn2 = stn1->next; stn1->name->stn = NULL; osfree(stn1); } stnlist = NULL; } static void write_passage_models(void) { lrudlist * psg = model; while (psg) { lrudlist * oldp; lrud * xsect = psg->tube; int xflags = 0; while (xsect) { lrud *oldx; prefix *pfx; const char *name; pimg->l = xsect->l; pimg->r = xsect->r; pimg->u = xsect->u; pimg->d = xsect->d; if (xsect->meta) { pimg->days1 = xsect->meta->days1; pimg->days2 = xsect->meta->days2; } else { pimg->days1 = pimg->days2 = -1; } pfx = xsect->stn; name = sprint_prefix(pfx); oldx = xsect; xsect = xsect->next; osfree(oldx); if (!pfx->pos) { /* TRANSLATORS: e.g. the user specifies a passage cross-section at * station "entrance.27", but there is no station "entrance.27" in * the centre-line. */ error_in_file(pfx->filename, pfx->line, /*Cross section specified at non-existent station “%sâ€*/83, name); } else { if (xsect == NULL) xflags = img_XFLAG_END; img_write_item(pimg, img_XSECT, xflags, name, 0, 0, 0); } } oldp = psg; psg = psg->next; osfree(oldp); } model = NULL; } survex-1.4.4/src/avenpal.h0000664000175000017500000000052614205545366012402 00000000000000/* Generated by ./gdtconvert */ static const unsigned char REDS[] = {60, 60, 60, 60, 60, 94, 169, 222, 213, 206, 214, 223, 233, 230}; static const unsigned char GREENS[] = {67, 94, 121, 142, 163, 177, 184, 182, 156, 125, 89, 49, 6, 230}; static const unsigned char BLUES[] = {255, 236, 217, 183, 148, 103, 44, 6, 27, 44, 36, 26, 16, 230}; survex-1.4.4/src/exportfilter.h0000644000175000017500000000527314312174546013502 00000000000000/* exportfilter.h * Export to CAD-like formats (DXF, Skencil, SVG, EPS, HPGL) and also Compass * PLT. */ /* Copyright (C) 2005,2012,2013,2014,2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SURVEX_EXPORTFILTER_H #define SURVEX_EXPORTFILTER_H #include #include "wx.h" #include "img_hosted.h" class ExportFilter { protected: FILE * fh; public: ExportFilter() : fh(NULL) { } // FIXME: deal with errors closing file... (safe_fclose?) virtual ~ExportFilter() { if (fh) fclose(fh); } virtual const int * passes() const; virtual bool fopen(const wxString& fnm_out) { fh = wxFopen(fnm_out.fn_str(), wxT("wb")); return (fh != NULL); } virtual void header(const char* title, const char* datestamp_string, time_t datestamp, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z); virtual void start_pass(int); virtual void line(const img_point *, const img_point *, unsigned, bool); virtual void label(const img_point* p, const char* s, bool fSurface, int type) = 0; virtual void cross(const img_point *, bool); virtual void xsect(const img_point *, double, double, double); virtual void wall(const img_point *, double, double); virtual void passage(const img_point *, double, double, double); virtual void tube_end(); virtual void footer(); }; inline void ExportFilter::header(const char*, const char*, time_t, double, double, double, double, double, double) { } inline void ExportFilter::start_pass(int) { } inline void ExportFilter::line(const img_point *, const img_point *, unsigned, bool) { } inline void ExportFilter::cross(const img_point *, bool) { } inline void ExportFilter::xsect(const img_point *, double, double, double) { } inline void ExportFilter::wall(const img_point *, double, double) { } inline void ExportFilter::passage(const img_point *, double, double, double) { } inline void ExportFilter::tube_end() { } inline void ExportFilter::footer() { } #endif survex-1.4.4/src/strcasecmp.c0000644000175000017500000000207313346142325013101 00000000000000/* portable case insensitive string compare */ /* Copyright (C) Olly Betts 1994,1999 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include /* What about top bit set chars? */ int strcasecmp(const char *s1, const char *s2) { register c1, c2; do { c1 = *s1++; c2 = *s2++; } while (c1 && toupper(c1) == toupper(c2)); /* now calculate real difference */ return c1 - c2; } survex-1.4.4/src/osdepend.h0000644000175000017500000000321414141575516012547 00000000000000/* osdepend.h * Contains commonly required OS dependent bits * Copyright (C) 1993-2003,2004,2005,2010 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OSDEPEND_H /* only include once */ # define OSDEPEND_H # include "whichos.h" # include "ostypes.h" # if OS_WIN32 /* FNM_SEP_DRV and FNM_SEP_EXT and FNM_SEP_LEV2 needn't be defined */ # define FNM_SEP_LEV '\\' # define FNM_SEP_LEV2 '/' # define FNM_SEP_DRV ':' # define FNM_SEP_EXT '.' # elif OS_UNIX /* FNM_SEP_DRV and FNM_SEP_EXT needn't be defined */ # define FNM_SEP_LEV '/' /* # define FNM_SEP_DRV No equivalent under UNIX */ # define FNM_SEP_EXT '.' # else # error Do not know what to do for this operating system # endif /***************************************************************************/ /* prototypes for functions in osdepend.c */ bool fAbsoluteFnm(const char *fnm); bool fDirectory(const char *fnm); # ifndef HAVE_DIFFTIME # define difftime(A, B) ((B)-(A)) # endif #endif /* !OSDEPEND_H */ survex-1.4.4/src/aven.cc0000644000175000017500000003275414212334004012030 00000000000000// // aven.cc // // Main class for Aven. // // Copyright (C) 2001 Mark R. Shinwell. // Copyright (C) 2002,2003,2004,2005,2006,2011,2013,2014,2015,2016,2017,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #define MSG_SETUP_PROJ_SEARCH_PATH 1 #include "aven.h" #include "log.h" #include "gla.h" #include "mainfrm.h" #include "cmdline.h" #include "message.h" #include "useful.h" #include #include #include #include #if wxUSE_DISPLAY // wxDisplay was added in wx 2.5; but it may not be built for mingw (because // the header seems to be missing). #include #endif #ifdef __WXMSW__ #include #endif static const struct option long_opts[] = { /* const char *name; int has_arg (0 no_argument, 1 required_*, 2 optional_*); int *flag; int val; */ {"survey", required_argument, 0, 's'}, {"print", no_argument, 0, 'p'}, {"help", no_argument, 0, HLP_HELP}, {"version", no_argument, 0, HLP_VERSION}, {0, 0, 0, 0} }; #define short_opts "s:p" static struct help_msg help[] = { /* <-- */ /* TRANSLATORS: --help output for --survey option. * * "this" has been added to English translation */ {HLP_ENCODELONG(0), /*only load the sub-survey with this prefix*/199, 0}, /* TRANSLATORS: --help output for aven --print option */ {HLP_ENCODELONG(1), /*print and exit (requires a 3d file)*/119, 0}, {0, 0, 0} }; #ifdef __WXMSW__ IMPLEMENT_APP(Aven) #else IMPLEMENT_APP_NO_MAIN(Aven) IMPLEMENT_WX_THEME_SUPPORT #endif Aven::Aven() : m_Frame(NULL), m_pageSetupData(NULL) { wxFont::SetDefaultEncoding(wxFONTENCODING_UTF8); } Aven::~Aven() { delete m_pageSetupData; } static int getopt_first_response = 0; static char ** utf8_argv; #ifdef __WXMSW__ bool Aven::Initialize(int& my_argc, wxChar **my_argv) { const wxChar * cmd_line = GetCommandLineW(); // Horrible bodge to handle therion's assumptions about the "Process" // file association. if (cmd_line) { // None of these are valid aven command line options, so this is not // going to be triggered accidentally. const wxChar * p = wxStrstr(cmd_line, wxT("aven.exe\" --quiet --log --output=")); if (p) { // Just change the command name in the command line string - that // way the quoting should match what the C runtime expects. wxString cmd(cmd_line, p - cmd_line); cmd += "cavern"; cmd += p + 4; exit(wxExecute(cmd, wxEXEC_SYNC)); } } int utf8_argc; { // wxWidgets doesn't split up the command line in the standard way, so // redo it ourselves using the standard API function. // // Warning: The returned array from this has no terminating NULL // element. wxChar ** new_argv = NULL; if (cmd_line) new_argv = CommandLineToArgvW(cmd_line, &utf8_argc); bool failed = (new_argv == NULL); if (failed) { wxChar * p; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, (LPWSTR)&p, 4096, NULL); wxString m = "CommandLineToArgvW failed: "; m += p; wxMessageBox(m, APP_NAME, wxOK | wxCENTRE | wxICON_EXCLAMATION); LocalFree(p); utf8_argc = my_argc; new_argv = my_argv; } // Convert wide characters to UTF-8. utf8_argv = new char * [utf8_argc + 1]; for (int i = 0; i < utf8_argc; ++i){ utf8_argv[i] = strdup(wxString(new_argv[i]).utf8_str()); } utf8_argv[utf8_argc] = NULL; if (!failed) LocalFree(new_argv); } msg_init(utf8_argv); select_charset(CHARSET_UTF8); /* Want --version and decent --help output, which cmdline does for us. * wxCmdLine is much less good. */ /* TRANSLATORS: Here "survey" is a "cave map" rather than list of questions * - it should be translated to the terminology that cavers using the * language would use. * * Part of aven --help */ cmdline_set_syntax_message(/*[SURVEY_FILE]*/269, 0, NULL); cmdline_init(utf8_argc, utf8_argv, short_opts, long_opts, NULL, help, 0, 1); getopt_first_response = cmdline_getopt(); // The argc and argv arguments don't actually get used here. int dummy_argc = 0; return wxApp::Initialize(dummy_argc, NULL); } #else int main(int argc, char **argv) { #ifdef __WXGTK3__ # if !(wxUSE_GLCANVAS_EGL-0) // The GLX-based wxGLCanvas doesn't work under Wayland, and the code // segfaults: https://trac.wxwidgets.org/ticket/17702 // // Therefore we force X11 unless we're using the EGL-based wxGLCanvas // (which was added in wxWidgets 3.1.5 and hasn't been backported to // 3.0.x). // // Setting GDK_BACKEND=x11 is the recommended workaround, and it seems to // work to set it here. GTK2 doesn't support Wayland, so doesn't need // this. setenv("GDK_BACKEND", "x11", 1); # endif #endif #ifdef __WXMAC__ // MacOS passes a magic -psn_XXXX command line argument in argv[1] which // wx ignores for us, but in wxApp::Initialize() which hasn't been // called yet. So we need to remove it ourselves. if (argc > 1 && strncmp(argv[1], "-psn_", 5) == 0) { --argc; memmove(argv + 1, argv + 2, argc * sizeof(char *)); } #endif // Call msg_init() and start processing the command line first so that // we can respond to --help and --version even without an X display. msg_init(argv); select_charset(CHARSET_UTF8); /* Want --version and decent --help output, which cmdline does for us. * wxCmdLine is much less good. */ cmdline_set_syntax_message(/*[SURVEY_FILE]*/269, 0, NULL); cmdline_init(argc, argv, short_opts, long_opts, NULL, help, 0, 1); getopt_first_response = cmdline_getopt(); utf8_argv = argv; #if wxUSE_UNICODE wxWCharBuffer buf(wxConvFileName->cMB2WX(argv[0])); wxChar * wargv[2]; if (buf) { wargv[0] = wxStrdup(buf); } else { // Eep - couldn't convert the executable's name to wide characters! wargv[0] = wxStrdup(APP_NAME); } wargv[1] = NULL; int wargc = 1; return wxEntry(wargc, wargv); #else char *dummy_argv[2] = { argv[0], NULL }; int dummy_argc = 1; return wxEntry(dummy_argc, dummy_argv); #endif } #endif bool Aven::OnInit() { wxLog::SetActiveTarget(new MyLogWindow()); { // Suppress message box warnings about messages not found. wxLogNull logNo; wxLocale *loc = new wxLocale(); loc->AddCatalogLookupPathPrefix(wmsg_cfgpth()); wxString msg_lang_str(msg_lang, wxConvUTF8); const char *lang = msg_lang2 ? msg_lang2 : msg_lang; wxString lang_str(lang, wxConvUTF8); loc->Init(msg_lang_str, lang_str, msg_lang_str); // The existence of the wxLocale object is enough - no need to keep a // pointer to it! } const char* opt_survey = NULL; bool print_and_exit = false; while (true) { int opt; if (getopt_first_response) { opt = getopt_first_response; getopt_first_response = 0; } else { opt = cmdline_getopt(); } if (opt == EOF) break; if (opt == 's') { if (opt_survey != NULL) { // FIXME: Not a helpful error, but this is temporary until // we actually hook up support for specifying multiple // --survey options properly here. cmdline_syntax(); exit(1); } opt_survey = optarg; } if (opt == 'p') { print_and_exit = true; } } if (print_and_exit && !utf8_argv[optind]) { cmdline_syntax(); // FIXME : not a helpful error... exit(1); } wxString fnm; if (utf8_argv[optind]) { fnm = wxString(utf8_argv[optind], wxConvUTF8); if (fnm.empty() && *(utf8_argv[optind])) { ReportError(wxT("File argument's filename has bad encoding")); return false; } } if (!GLACanvas::check_visual()) { wxString m; /* TRANSLATORS: %s will be replaced with "Aven" currently (and * perhaps by "Survex" or other things in future). */ m.Printf(wmsg(/*This version of %s requires OpenGL to work, but it isn’t available.*/405), APP_NAME); wxMessageBox(m, APP_NAME, wxOK | wxCENTRE | wxICON_EXCLAMATION); exit(1); } wxImage::AddHandler(new wxPNGHandler); // Obtain the screen geometry. #if wxUSE_DISPLAY wxRect geom = wxDisplay().GetGeometry(); #else wxRect geom; wxClientDisplayRect(&geom.x, &geom.y, &geom.width, &geom.height); #endif wxPoint pos(wxDefaultPosition); int width, height; wxConfigBase::Get()->Read(wxT("width"), &width, 0); if (width > 0) wxConfigBase::Get()->Read(wxT("height"), &height, 0); // We used to persist full screen mode (-1 was maximized, // -2 full screen), but people would get stuck in full // screen mode, unsure how to exit. bool maximized = (width <= -1); if (width <= 0 || height <= 0) { pos.x = geom.x; pos.y = geom.y; width = geom.width; height = geom.height; // Calculate a reasonable size for our window. pos.x += width / 8; pos.y += height / 8; width = width * 3 / 4; height = height * 3 / 4; } else { // Impose a minimum size for sanity, and make sure the window fits on // the display (in case the current display is smaller than the one // in use when the window size was saved). (480x320) is about the // smallest usable size for aven's window. const int min_width = min(geom.width, 480); const int min_height = min(geom.height, 320); if (width < min_width || height < min_height) { if (width < min_width) { width = min_width; } if (height < min_height) { height = min_height; } pos.x = geom.x + (geom.width - width) / 4; pos.y = geom.y + (geom.height - height) / 4; } } // Create the main window. m_Frame = new MainFrm(APP_NAME, pos, wxSize(width, height)); // Select maximised if that's the saved state. if (maximized) { m_Frame->Maximize(); } if (utf8_argv[optind]) { if (!opt_survey) opt_survey = ""; m_Frame->OpenFile(fnm, wxString(opt_survey, wxConvUTF8)); } if (print_and_exit) { m_Frame->PrintAndExit(); return true; } m_Frame->Show(true); #ifdef _WIN32 m_Frame->SetFocus(); #endif return true; } wxPageSetupDialogData * Aven::GetPageSetupDialogData() { if (!m_pageSetupData) m_pageSetupData = new wxPageSetupDialogData; #ifdef __WXGTK__ // Fetch paper margins stored on disk. int left, right, top, bottom; wxConfigBase * cfg = wxConfigBase::Get(); // These default margins were chosen by looking at all the .ppd files // on my machine. cfg->Read(wxT("paper_margin_left"), &left, 7); cfg->Read(wxT("paper_margin_right"), &right, 7); cfg->Read(wxT("paper_margin_top"), &top, 14); cfg->Read(wxT("paper_margin_bottom"), &bottom, 14); m_pageSetupData->SetMarginTopLeft(wxPoint(left, top)); m_pageSetupData->SetMarginBottomRight(wxPoint(right, bottom)); #endif return m_pageSetupData; } void Aven::SetPageSetupDialogData(const wxPageSetupDialogData & psdd) { if (!m_pageSetupData) m_pageSetupData = new wxPageSetupDialogData; *m_pageSetupData = psdd; #ifdef __WXGTK__ wxPoint topleft = psdd.GetMarginTopLeft(); wxPoint bottomright = psdd.GetMarginBottomRight(); // Store user specified paper margins on disk/in registry. wxConfigBase * cfg = wxConfigBase::Get(); cfg->Write(wxT("paper_margin_left"), topleft.x); cfg->Write(wxT("paper_margin_right"), bottomright.x); cfg->Write(wxT("paper_margin_top"), topleft.y); cfg->Write(wxT("paper_margin_bottom"), bottomright.y); cfg->Flush(); #endif } #ifdef __WXMAC__ void Aven::MacOpenFiles(const wxArrayString & filenames) { if (filenames.size() != 1) { ReportError(wxT("Aven can only load one file at a time")); return; } m_Frame->OpenFile(filenames[0], wxString()); } void Aven::MacPrintFiles(const wxArrayString & filenames) { if (filenames.size() != 1) { ReportError(wxT("Aven can only print one file at a time")); return; } m_Frame->OpenFile(filenames[0], wxString()); m_Frame->PrintAndExit(); } #endif void Aven::ReportError(const wxString& msg) { if (!m_Frame) { wxMessageBox(msg, APP_NAME, wxOK | wxICON_ERROR); return; } wxMessageDialog dlg(m_Frame, msg, APP_NAME, wxOK | wxICON_ERROR); dlg.ShowModal(); } const wxString & wmsg_cfgpth() { static wxString path; if (path.empty()) path = wxString(msg_cfgpth(), wxConvUTF8); return path; } // called to report errors by message.c extern "C" void aven_v_report(int severity, const char *fnm, int line, int en, va_list ap) { wxString m; if (fnm) { m = wxString(fnm, wxConvUTF8); if (line) m += wxString::Format(wxT(":%d"), line); m += wxT(": "); } if (severity == DIAG_WARN) { m += wmsg(/*warning*/4); m += wxT(": "); } char buf[1024]; vsnprintf(buf, sizeof(buf), msg(en), ap); m += wxString(buf, wxConvUTF8); if (wxTheApp == NULL) { // We haven't initialised the Aven app object yet. if (!wxInitialize()) { fputs(buf, stderr); PUTC('\n', stderr); exit(1); } wxMessageBox(m, APP_NAME, wxOK | wxICON_ERROR); wxUninitialize(); } else { wxGetApp().ReportError(m); } } survex-1.4.4/src/model.cc0000644000175000017500000004775314141575516012224 00000000000000// // model.cc // // Cave survey model. // // Copyright (C) 2000-2002,2005,2006 Mark R. Shinwell // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018,2019 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "model.h" #include "img_hosted.h" #include "useful.h" #include #include using namespace std; const static int img2aven_tab[] = { #include "img2aven.h" }; inline int img2aven(int flags) { flags &= (sizeof(img2aven_tab) / sizeof(img2aven_tab[0]) - 1); return img2aven_tab[flags]; } int Model::Load(const wxString& file, const wxString& prefix) { // Load the processed survey data. img* survey = img_read_stream_survey(wxFopen(file, wxT("rb")), fclose, file.c_str(), prefix.utf8_str()); if (!survey) { return img_error2msg(img_error()); } m_IsExtendedElevation = survey->is_extended_elevation; // Create a list of all the leg vertices, counting them and finding the // extent of the survey at the same time. m_NumFixedPts = 0; m_NumExportedPts = 0; m_NumEntrances = 0; m_HasUndergroundLegs = false; m_HasSplays = false; m_HasDupes = false; m_HasSurfaceLegs = false; m_HasErrorInformation = false; // FIXME: discard existing presentation? ask user about saving if we do! // Delete any existing list entries. m_Labels.clear(); double xmin = DBL_MAX; double xmax = -DBL_MAX; double ymin = DBL_MAX; double ymax = -DBL_MAX; double zmin = DBL_MAX; double zmax = -DBL_MAX; m_DepthMin = DBL_MAX; double depthmax = -DBL_MAX; m_DateMin = INT_MAX; int datemax = -1; complete_dateinfo = true; for (unsigned f = 0; f != sizeof(traverses) / sizeof(traverses[0]); ++f) { traverses[f].clear(); } tubes.clear(); // Ultimately we probably want different types (subclasses perhaps?) for // underground and surface data, so we don't need to store LRUD for surface // stuff. traverse * current_traverse = NULL; vector * current_tube = NULL; map labelmap; list::const_iterator last_mapped_label = m_Labels.begin(); int result; img_point prev_pt = {0,0,0}; bool current_polyline_is_surface = false; int current_flags = 0; int current_style = 0; string current_label; bool pending_move = false; // When legs within a traverse have different surface/splay/duplicate // flags, we split it into contiguous traverses of each flag combination, // but we need to track these so we can assign the error statistics to all // of them. So we keep counts of how many of each combination we've // generated for the current traverse. size_t n_traverses[8]; memset(n_traverses, 0, sizeof(n_traverses)); do { #if 0 if (++items % 200 == 0) { long pos = ftell(survey->fh); int progress = int((double(pos) / double(file_size)) * 100.0); // SetProgress(progress); } #endif img_point pt; result = img_read_item(survey, &pt); switch (result) { case img_MOVE: memset(n_traverses, 0, sizeof(n_traverses)); pending_move = true; prev_pt = pt; break; case img_LINE: { // Update survey extents. if (pt.x < xmin) xmin = pt.x; if (pt.x > xmax) xmax = pt.x; if (pt.y < ymin) ymin = pt.y; if (pt.y > ymax) ymax = pt.y; if (pt.z < zmin) zmin = pt.z; if (pt.z > zmax) zmax = pt.z; int date = survey->days1; if (date != -1) { date += (survey->days2 - date) / 2; if (date < m_DateMin) m_DateMin = date; if (date > datemax) datemax = date; } else { complete_dateinfo = false; } int flags = survey->flags & (img_FLAG_SURFACE|img_FLAG_SPLAY|img_FLAG_DUPLICATE); bool is_surface = (flags & img_FLAG_SURFACE); bool is_splay = (flags & img_FLAG_SPLAY); bool is_dupe = (flags & img_FLAG_DUPLICATE); if (!is_surface) { if (pt.z < m_DepthMin) m_DepthMin = pt.z; if (pt.z > depthmax) depthmax = pt.z; } if (is_splay) m_HasSplays = true; if (is_dupe) m_HasDupes = true; if (pending_move || current_flags != flags || current_label != survey->label || current_style != survey->style) { if (!current_polyline_is_surface && current_traverse) { //FixLRUD(*current_traverse); } ++n_traverses[flags]; // Start new traverse (surface or underground). if (is_surface) { m_HasSurfaceLegs = true; } else { m_HasUndergroundLegs = true; // The previous point was at a surface->ug transition. if (current_polyline_is_surface) { if (prev_pt.z < m_DepthMin) m_DepthMin = prev_pt.z; if (prev_pt.z > depthmax) depthmax = prev_pt.z; } } traverses[flags].push_back(traverse(survey->label)); current_traverse = &traverses[flags].back(); current_traverse->flags = survey->flags; current_traverse->style = survey->style; current_polyline_is_surface = is_surface; current_flags = flags; current_label = survey->label; current_style = survey->style; if (pending_move) { // Update survey extents. We only need to do this if // there's a pending move, since for a surface <-> // underground transition, we'll already have handled // this point. if (prev_pt.x < xmin) xmin = prev_pt.x; if (prev_pt.x > xmax) xmax = prev_pt.x; if (prev_pt.y < ymin) ymin = prev_pt.y; if (prev_pt.y > ymax) ymax = prev_pt.y; if (prev_pt.z < zmin) zmin = prev_pt.z; if (prev_pt.z > zmax) zmax = prev_pt.z; } current_traverse->push_back(PointInfo(prev_pt)); } current_traverse->push_back(PointInfo(pt, date)); prev_pt = pt; pending_move = false; break; } case img_LABEL: { wxString s(survey->label, wxConvUTF8); if (s.empty()) { // If label isn't valid UTF-8 then this conversion will // give an empty string. In this case, assume that the // label is CP1252 (the Microsoft superset of ISO8859-1). static wxCSConv ConvCP1252(wxFONTENCODING_CP1252); s = wxString(survey->label, ConvCP1252); if (s.empty()) { // Or if that doesn't work (ConvCP1252 doesn't like // strings with some bytes in) let's just go for // ISO8859-1. s = wxString(survey->label, wxConvISO8859_1); } } int flags = img2aven(survey->flags); LabelInfo* label = new LabelInfo(pt, s, flags); if (label->IsEntrance()) { m_NumEntrances++; } if (label->IsFixedPt()) { m_NumFixedPts++; } if (label->IsExportedPt()) { m_NumExportedPts++; } m_Labels.push_back(label); break; } case img_XSECT: { if (!current_tube) { // Start new current_tube. tubes.push_back(vector()); current_tube = &tubes.back(); } LabelInfo * lab; wxString label(survey->label, wxConvUTF8); map::const_iterator p; p = labelmap.find(label); if (p != labelmap.end()) { lab = p->second; } else { // Initialise labelmap lazily - we may have no // cross-sections. list::const_iterator i; if (labelmap.empty()) { i = m_Labels.begin(); } else { i = last_mapped_label; ++i; } while (i != m_Labels.end() && (*i)->GetText() != label) { labelmap[(*i)->GetText()] = *i; ++i; } last_mapped_label = i; if (i == m_Labels.end()) { // Unattached cross-section - ignore for now. printf("unattached cross-section\n"); if (current_tube->size() <= 1) tubes.resize(tubes.size() - 1); current_tube = NULL; if (!m_Labels.empty()) --last_mapped_label; break; } lab = *i; labelmap[label] = lab; } int date = survey->days1; if (date != -1) { date += (survey->days2 - date) / 2; if (date < m_DateMin) m_DateMin = date; if (date > datemax) datemax = date; } current_tube->emplace_back(lab, date, survey->l, survey->r, survey->u, survey->d); break; } case img_XSECT_END: // Finish off current_tube. // If there's only one cross-section in the tube, just // discard it for now. FIXME: we should handle this // when we come to skinning the tubes. if (current_tube && current_tube->size() <= 1) tubes.resize(tubes.size() - 1); current_tube = NULL; break; case img_ERROR_INFO: { if (survey->E == 0.0) { // Currently cavern doesn't spot all articulating traverses // so we assume that any traverse with no error isn't part // of a loop. FIXME: fix cavern! break; } m_HasErrorInformation = true; for (size_t f = 0; f != sizeof(traverses) / sizeof(traverses[0]); ++f) { list::reverse_iterator t = traverses[f].rbegin(); size_t n = n_traverses[f]; n_traverses[f] = 0; while (n) { assert(t != traverses[f].rend()); t->n_legs = survey->n_legs; t->length = survey->length; t->errors[traverse::ERROR_3D] = survey->E; t->errors[traverse::ERROR_H] = survey->H; t->errors[traverse::ERROR_V] = survey->V; --n; ++t; } } break; } case img_BAD: { m_Labels.clear(); // FIXME: Do we need to reset all these? - Olly m_NumFixedPts = 0; m_NumExportedPts = 0; m_NumEntrances = 0; m_HasUndergroundLegs = false; m_HasSplays = false; m_HasSurfaceLegs = false; img_close(survey); return img_error2msg(img_error()); } default: break; } } while (result != img_STOP); if (!current_polyline_is_surface && current_traverse) { //FixLRUD(*current_traverse); } // Finish off current_tube. // If there's only one cross-section in the tube, just // discard it for now. FIXME: we should handle this // when we come to skinning the tubes. if (current_tube && current_tube->size() <= 1) tubes.resize(tubes.size() - 1); m_separator = survey->separator; m_Title = wxString(survey->title, wxConvUTF8); m_DateStamp_numeric = survey->datestamp_numeric; if (survey->cs) { m_cs_proj = wxString(survey->cs, wxConvUTF8); } else { m_cs_proj = wxString(); } if (strcmp(survey->datestamp, "?") == 0) { /* TRANSLATORS: used a processed survey with no processing date/time info */ m_DateStamp = wmsg(/*Date and time not available.*/108); } else if (survey->datestamp[0] == '@') { const struct tm * tm = localtime(&m_DateStamp_numeric); char buf[256]; /* TRANSLATORS: This is the date format string used to timestamp .3d * files internally. Probably best to keep it the same for all * translations. */ strftime(buf, 256, msg(/*%a,%Y.%m.%d %H:%M:%S %Z*/107), tm); m_DateStamp = wxString(buf, wxConvUTF8); } if (m_DateStamp.empty()) { m_DateStamp = wxString(survey->datestamp, wxConvUTF8); } img_close(survey); // Check we've actually loaded some legs or stations! if (!m_HasUndergroundLegs && !m_HasSurfaceLegs && m_Labels.empty()) { return (/*No survey data in 3d file “%sâ€*/202); } if (traverses[0].empty() && traverses[1].empty() && traverses[2].empty() && traverses[3].empty() && traverses[4].empty() && traverses[5].empty() && traverses[6].empty() && traverses[7].empty()) { // No legs, so get survey extents from stations list::const_iterator i; for (i = m_Labels.begin(); i != m_Labels.end(); ++i) { if ((*i)->GetX() < xmin) xmin = (*i)->GetX(); if ((*i)->GetX() > xmax) xmax = (*i)->GetX(); if ((*i)->GetY() < ymin) ymin = (*i)->GetY(); if ((*i)->GetY() > ymax) ymax = (*i)->GetY(); if ((*i)->GetZ() < zmin) zmin = (*i)->GetZ(); if ((*i)->GetZ() > zmax) zmax = (*i)->GetZ(); } } m_Ext.assign(xmax - xmin, ymax - ymin, zmax - zmin); if (datemax < m_DateMin) m_DateMin = datemax; m_DateExt = datemax - m_DateMin; // Centre the dataset around the origin. CentreDataset(Vector3(xmin, ymin, zmin)); if (depthmax < m_DepthMin) { m_DepthMin = 0; m_DepthExt = 0; } else { m_DepthExt = depthmax - m_DepthMin; m_DepthMin -= GetOffset().GetZ(); } #if 0 printf("time to load = %.3f\n", (double)timer.Time()); #endif return 0; // OK } void Model::CentreDataset(const Vector3& vmin) { // Centre the dataset around the origin. m_Offset = vmin + (m_Ext * 0.5); for (unsigned f = 0; f != sizeof(traverses) / sizeof(traverses[0]); ++f) { list::iterator t = traverses[f].begin(); while (t != traverses[f].end()) { assert(t->size() > 1); vector::iterator pos = t->begin(); while (pos != t->end()) { Point & point = *pos++; point -= m_Offset; } ++t; } } list::iterator lpos = m_Labels.begin(); while (lpos != m_Labels.end()) { Point & point = **lpos++; point -= m_Offset; } } void Model::do_prepare_tubes() const { // Fill in "right_bearing" for each cross-section. for (auto&& tube : tubes) { assert(tube.size() > 1); Vector3 U[4]; XSect* prev_pt_v = NULL; Vector3 last_right(1.0, 0.0, 0.0); vector::iterator i = tube.begin(); vector::size_type segment = 0; while (i != tube.end()) { // get the coordinates of this vertex XSect & pt_v = *i++; bool cover_end = false; Vector3 right, up; const Vector3 up_v(0.0, 0.0, 1.0); if (segment == 0) { assert(i != tube.end()); // first segment // get the coordinates of the next vertex const XSect & next_pt_v = *i; // calculate vector from this pt to the next one Vector3 leg_v = next_pt_v - pt_v; // obtain a vector in the LRUD plane right = leg_v * up_v; if (right.magnitude() == 0) { right = last_right; // Obtain a second vector in the LRUD plane, // perpendicular to the first. //up = right * leg_v; up = up_v; } else { last_right = right; up = up_v; } cover_end = true; } else if (segment + 1 == tube.size()) { // last segment // Calculate vector from the previous pt to this one. Vector3 leg_v = pt_v - *prev_pt_v; // Obtain a horizontal vector in the LRUD plane. right = leg_v * up_v; if (right.magnitude() == 0) { right = Vector3(last_right.GetX(), last_right.GetY(), 0.0); // Obtain a second vector in the LRUD plane, // perpendicular to the first. //up = right * leg_v; up = up_v; } else { last_right = right; up = up_v; } cover_end = true; } else { assert(i != tube.end()); // Intermediate segment. // Get the coordinates of the next vertex. const XSect & next_pt_v = *i; // Calculate vectors from this vertex to the // next vertex, and from the previous vertex to // this one. Vector3 leg1_v = pt_v - *prev_pt_v; Vector3 leg2_v = next_pt_v - pt_v; // Obtain horizontal vectors perpendicular to // both legs, then normalise and average to get // a horizontal bisector. Vector3 r1 = leg1_v * up_v; Vector3 r2 = leg2_v * up_v; r1.normalise(); r2.normalise(); right = r1 + r2; if (right.magnitude() == 0) { // This is the "mid-pitch" case... right = last_right; } if (r1.magnitude() == 0) { up = up_v; // Rotate pitch section to minimise the // "torsional stress" - FIXME: use // triangles instead of rectangles? int shift = 0; double maxdotp = 0; // Scale to unit vectors in the LRUD plane. right.normalise(); up.normalise(); Vector3 vec = up - right; for (int orient = 0; orient <= 3; ++orient) { Vector3 tmp = U[orient] - prev_pt_v->GetPoint(); tmp.normalise(); double dotp = dot(vec, tmp); if (dotp > maxdotp) { maxdotp = dotp; shift = orient; } } if (shift) { if (shift != 2) { Vector3 temp(U[0]); U[0] = U[shift]; U[shift] = U[2]; U[2] = U[shift ^ 2]; U[shift ^ 2] = temp; } else { swap(U[0], U[2]); swap(U[1], U[3]); } } #if 0 // Check that the above code actually permuted // the vertices correctly. shift = 0; maxdotp = 0; for (int j = 0; j <= 3; ++j) { Vector3 tmp = U[j] - *prev_pt_v; tmp.normalise(); double dotp = dot(vec, tmp); if (dotp > maxdotp) { maxdotp = dotp + 1e-6; // Add small tolerance to stop 45 degree offset cases being flagged... shift = j; } } if (shift) { printf("New shift = %d!\n", shift); shift = 0; maxdotp = 0; for (int j = 0; j <= 3; ++j) { Vector3 tmp = U[j] - *prev_pt_v; tmp.normalise(); double dotp = dot(vec, tmp); printf(" %d : %.8f\n", j, dotp); } } #endif } else { up = up_v; } last_right = right; } // Scale to unit vectors in the LRUD plane. right.normalise(); up.normalise(); double l = fabs(pt_v.GetL()); double r = fabs(pt_v.GetR()); double u = fabs(pt_v.GetU()); double d = fabs(pt_v.GetD()); // Produce coordinates of the corners of the LRUD "plane". Vector3 v[4]; v[0] = pt_v.GetPoint() - right * l + up * u; v[1] = pt_v.GetPoint() + right * r + up * u; v[2] = pt_v.GetPoint() + right * r - up * d; v[3] = pt_v.GetPoint() - right * l - up * d; prev_pt_v = &pt_v; U[0] = v[0]; U[1] = v[1]; U[2] = v[2]; U[3] = v[3]; // FIXME: Store rather than recomputing on each draw? (void)cover_end; pt_v.set_right_bearing(deg(atan2(right.GetX(), right.GetY()))); ++segment; } } } void SurveyFilter::add(const wxString& name) { auto it = filters.lower_bound(name); if (it != filters.end()) { // It's invalid to add a survey which is already present. assert(*it != name); // Check if a survey prefixing name is visible. if (name.StartsWith(*it) && name[it->size()] == separator) { redundant_filters.insert(name); return; } } while (it != filters.begin()) { --it; const wxString& s = *it; if (s.size() <= name.size()) break; if (s.StartsWith(name) && s[name.size()] == separator) { redundant_filters.insert(s); it = filters.erase(it); } } filters.insert(name); } void SurveyFilter::remove(const wxString& name) { if (filters.erase(name) == 0) { redundant_filters.erase(name); return; } if (redundant_filters.empty()) { return; } auto it = redundant_filters.upper_bound(name); while (it != redundant_filters.begin()) { --it; // Check if a survey prefixed by name should be made visible. const wxString& s = *it; if (s.size() <= name.size()) { break; } if (!(s.StartsWith(name) && s[name.size()] == separator)) break; filters.insert(s); it = redundant_filters.erase(it); } } void SurveyFilter::SetSeparator(wxChar separator_) { if (separator_ == separator) return; separator = separator_; if (filters.empty()) { return; } // Move aside all the filters already set and re-add() them so they get // split into redundant_filters appropriately. std::set> old_filters; std::set> old_redundant_filters; swap(filters, old_filters); swap(redundant_filters, old_redundant_filters); for (auto& s : filters) { add(s); } for (auto& s : redundant_filters) { add(s); } } bool SurveyFilter::CheckVisible(const wxString& name) const { auto it = filters.lower_bound(name); if (it == filters.end()) { // There's no filter <= name so name is excluded. return false; } if (*it == name) { // Exact match. return true; } // Check if a survey prefixing name is visible. if (name.StartsWith(*it) && name[it->size()] == separator) return true; return false; } survex-1.4.4/src/avenprcore.h0000644000175000017500000000375014141575516013117 00000000000000/* avenprcore.h * Header file for printer independent parts of Survex printer drivers * Copyright (C) 1994-2002,2004,2005,2012,2013,2014,2015 Olly Betts * Copyright (C) 2004 Philip Underwood * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef survex_included_avenprcore_h #define survex_included_avenprcore_h #include #include "export.h" /* 1: is the default scale */ #define DEFAULT_SCALE 500 /* Height of our footer in mm. */ #define FOOTER_HEIGHT_MM 10 class wxPageSetupDialogData; /* Store everything describing the page layout */ class layout { public: /* caller modifiable bits */ int show_mask; bool SkipBlank; bool Border; bool Cutlines; bool Legend; wxString title; wxString datestamp; double Scale; double rot, tilt; enum {PLAN, ELEV, TILT, EXTELEV} view; /* internal data, but may be accessed */ double scX, scY; double xMin, xMax, yMin, yMax; double PaperWidth, PaperDepth; int pagesX, pagesY, pages; double xOrg, yOrg; explicit layout(wxPageSetupDialogData* data); #if 0 void make_calibration(); #endif void pick_scale(int x, int y); void pages_required(); int get_effective_show_mask() const { int result = show_mask; if (view == tilt) { result &= ~(XSECT|WALLS|PASG); } return result; } }; #endif survex-1.4.4/src/aventreectrl.h0000644000175000017500000000474114141575516013452 00000000000000// // aventreectrl.h // // Tree control used for the survey tree. // // Copyright (C) 2001, Mark R. Shinwell. // Copyright (C) 2002,2006,2018 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef aventreectrl_h #define aventreectrl_h #include "wx.h" #include "model.h" class MainFrm; class LabelInfo; class TreeData : public wxTreeItemData { const LabelInfo* m_Label; wxString survey; public: explicit TreeData(const LabelInfo* label) : m_Label(label) {} explicit TreeData(const wxString & survey_) : m_Label(NULL), survey(survey_) {} const LabelInfo* GetLabel() const { return m_Label; } const wxString & GetSurvey() const { return survey; } bool IsStation() const { return m_Label != NULL; } }; class AvenTreeCtrl : public wxTreeCtrl { MainFrm* m_Parent; bool m_Enabled; wxTreeItemId m_LastItem; wxColour m_BackgroundColour; bool m_SelValid; const TreeData* menu_data; wxTreeItemId menu_item; SurveyFilter filter; public: AvenTreeCtrl(MainFrm* parent, wxWindow* window_parent); void FillTree(const wxString& root_name); void UnselectAll(); void OnMouseMove(wxMouseEvent& event); void OnLeaveWindow(wxMouseEvent& event); void OnSelChanged(wxTreeEvent& event); void OnKeyPress(wxKeyEvent &e); void OnItemActivated(wxTreeEvent& e); void OnMenu(wxTreeEvent& e); void OnRestrict(wxCommandEvent& e); void OnHide(wxCommandEvent& e); void OnShow(wxCommandEvent& e); void OnHideSiblings(wxCommandEvent& e); void OnStateClick(wxTreeEvent& e); bool GetSelectionData(wxTreeItemData**) const; void SetHere(wxTreeItemId pos); const SurveyFilter* GetFilter() const { return filter.empty() ? NULL : &filter; } private: DECLARE_EVENT_TABLE() }; #endif survex-1.4.4/src/str.c0000644000175000017500000000333314141575516011553 00000000000000/* append a string */ /* Copyright (c) Olly Betts 1999, 2014 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "osalloc.h" #include "str.h" /* append a string */ void s_cat(char **pstr, int *plen, const char *s) { s_catlen(pstr, plen, s, strlen(s)); } /* append a string with length */ void s_catlen(char **pstr, int *plen, const char *s, int s_len) { int new_len = s_len + 1; /* extra 1 for nul */ int len = 0; if (*pstr) { len = strlen(*pstr); new_len += len; } if (!*pstr || new_len > *plen) { *plen = (new_len + 32) & ~3; *pstr = osrealloc(*pstr, *plen); } memcpy(*pstr + len, s, s_len); (*pstr + len)[s_len] = '\0'; } /* append a character */ void s_catchar(char **pstr, int *plen, char ch) { int new_len = 2; /* extra 1 for nul */ int len = 0; if (*pstr) { len = strlen(*pstr); new_len += len; } if (!*pstr || new_len > *plen) { *plen = (new_len + 32) & ~3; *pstr = osrealloc(*pstr, *plen); } (*pstr)[len] = ch; (*pstr)[len + 1] = '\0'; } survex-1.4.4/src/datain.c0000644000175000017500000016727714205617674012230 00000000000000/* datain.c * Reads in survey files, dealing with special characters, keywords & data * Copyright (C) 1991-2022 Olly Betts * Copyright (C) 2004 Simeon Warner * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "debug.h" #include "cavern.h" #include "date.h" #include "filename.h" #include "message.h" #include "filelist.h" #include "netbits.h" #include "netskel.h" #include "readval.h" #include "datain.h" #include "commands.h" #include "out.h" #include "str.h" #include "thgeomag.h" #define EPSILON (REAL_EPSILON * 1000) #define var(I) (pcs->Var[(I)]) /* true if x is not-a-number value in Compass (999.0 or -999.0) */ /* Compass uses 999.0 but understands Karst data which used -999.0 */ #define is_compass_NaN(x) ( fabs(fabs(x)-999.0) < EPSILON ) int ch; typedef enum { CTYPE_OMIT, CTYPE_READING, CTYPE_PLUMB, CTYPE_INFERPLUMB, CTYPE_HORIZ } clino_type; /* Don't explicitly initialise as we can't set the jmp_buf - this has * static scope so will be initialised like this anyway */ parse file /* = { NULL, NULL, 0, fFalse, NULL } */ ; bool f_export_ok; static real value[Fr - 1]; #define VAL(N) value[(N)-1] static real variance[Fr - 1]; #define VAR(N) variance[(N)-1] static long location[Fr - 1]; #define LOC(N) location[(N)-1] static int location_width[Fr - 1]; #define WID(N) location_width[(N)-1] /* style functions */ static void data_normal(void); static void data_cartesian(void); static void data_passage(void); static void data_nosurvey(void); static void data_ignore(void); void get_pos(filepos *fp) { fp->ch = ch; fp->offset = ftell(file.fh); if (fp->offset == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); } void set_pos(const filepos *fp) { ch = fp->ch; if (fseek(file.fh, fp->offset, SEEK_SET) == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); } static void report_parent(parse * p) { if (p->parent) report_parent(p->parent); /* Force re-report of include tree for further errors in * parent files */ p->reported_where = fFalse; /* TRANSLATORS: %s is replaced by the filename of the parent file, and %u * by the line number in that file. Your translation should also contain * %s:%u so that automatic parsing of error messages to determine the file * and line number still works. */ fprintf(STDERR, msg(/*In file included from %s:%u:\n*/5), p->filename, p->line); } static void error_list_parent_files(void) { if (!file.reported_where && file.parent) { report_parent(file.parent); /* Suppress reporting of full include tree for further errors * in this file */ file.reported_where = fTrue; } } static void show_line(int col, int width) { /* Rewind to beginning of line. */ long cur_pos = ftell(file.fh); int tabs = 0; if (cur_pos < 0 || fseek(file.fh, file.lpos, SEEK_SET) == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); /* Read the whole line and write it out. */ PUTC(' ', STDERR); while (1) { int c = GETC(file.fh); /* Note: isEol() is true for EOF */ if (isEol(c)) break; if (c == '\t') ++tabs; PUTC(c, STDERR); } fputnl(STDERR); /* If we have a location in the line for the error, indicate it. */ if (col) { PUTC(' ', STDERR); if (tabs == 0) { while (--col) PUTC(' ', STDERR); } else { /* Copy tabs from line, replacing other characters with spaces - this * means that the caret should line up correctly. */ if (fseek(file.fh, file.lpos, SEEK_SET) == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); while (--col) { int c = GETC(file.fh); if (c != '\t') c = ' '; PUTC(c, STDERR); } } PUTC('^', STDERR); while (width > 1) { PUTC('~', STDERR); --width; } fputnl(STDERR); } /* Revert to where we were. */ if (fseek(file.fh, cur_pos, SEEK_SET) == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); } char* grab_line(void) { /* Rewind to beginning of line. */ long cur_pos = ftell(file.fh); char *p = NULL; int len = 0; if (cur_pos < 0 || fseek(file.fh, file.lpos, SEEK_SET) == -1) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); /* Read the whole line into a string. */ while (1) { int c = GETC(file.fh); /* Note: isEol() is true for EOF */ if (isEol(c)) break; s_catchar(&p, &len, (char)c); } /* Revert to where we were. */ if (fseek(file.fh, cur_pos, SEEK_SET) == -1) { free(p); fatalerror_in_file(file.filename, 0, /*Error reading file*/18); } return p; } static int caret_width = 0; static void compile_v_report_fpos(int severity, long fpos, int en, va_list ap) { int col = 0; error_list_parent_files(); if (fpos >= file.lpos) col = fpos - file.lpos - caret_width; v_report(severity, file.filename, file.line, col, en, ap); if (file.fh) show_line(col, caret_width); } static void compile_v_report(int diag_flags, int en, va_list ap) { int severity = (diag_flags & DIAG_SEVERITY_MASK); if (diag_flags & (DIAG_COL|DIAG_BUF)) { if (file.fh) { if (diag_flags & DIAG_BUF) caret_width = strlen(buffer); compile_v_report_fpos(severity, ftell(file.fh), en, ap); if (diag_flags & DIAG_BUF) caret_width = 0; if (diag_flags & DIAG_SKIP) skipline(); return; } } error_list_parent_files(); v_report(severity, file.filename, file.line, 0, en, ap); if (file.fh) { if (diag_flags & DIAG_BUF) { show_line(0, strlen(buffer)); } else { show_line(0, caret_width); } } if (diag_flags & DIAG_SKIP) skipline(); } void compile_diagnostic(int diag_flags, int en, ...) { va_list ap; va_start(ap, en); if (diag_flags & (DIAG_TOKEN|DIAG_UINT|DIAG_DATE|DIAG_NUM)) { char *p = NULL; int len = 0; skipblanks(); if (diag_flags & DIAG_TOKEN) { while (!isBlank(ch) && !isEol(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } } else if (diag_flags & DIAG_UINT) { while (isdigit(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } } else if (diag_flags & DIAG_DATE) { while (isdigit(ch) || ch == '.') { s_catchar(&p, &len, (char)ch); nextch(); } } else { if (isMinus(ch) || isPlus(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } while (isdigit(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } if (isDecimal(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } while (isdigit(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } } if (p) { caret_width = strlen(p); osfree(p); } compile_v_report(diag_flags|DIAG_COL, en, ap); caret_width = 0; } else if (diag_flags & DIAG_STRING) { char *p = NULL; int alloced = 0; skipblanks(); caret_width = ftell(file.fh); read_string(&p, &alloced); osfree(p); /* We want to include any quotes, so can't use strlen(p). */ caret_width = ftell(file.fh) - caret_width; compile_v_report(diag_flags|DIAG_COL, en, ap); caret_width = 0; } else { compile_v_report(diag_flags, en, ap); } va_end(ap); } static void compile_diagnostic_reading(int diag_flags, reading r, int en, ...) { va_list ap; int severity = (diag_flags & DIAG_SEVERITY_MASK); va_start(ap, en); caret_width = WID(r); compile_v_report_fpos(severity, LOC(r) + caret_width, en, ap); caret_width = 0; va_end(ap); } static void compile_error_reading_skip(reading r, int en, ...) { va_list ap; va_start(ap, en); caret_width = WID(r); compile_v_report_fpos(DIAG_ERR, LOC(r) + caret_width, en, ap); caret_width = 0; va_end(ap); skipline(); } void compile_diagnostic_at(int diag_flags, const char * filename, unsigned line, int en, ...) { va_list ap; int severity = (diag_flags & DIAG_SEVERITY_MASK); va_start(ap, en); v_report(severity, filename, line, 0, en, ap); va_end(ap); } void compile_diagnostic_pfx(int diag_flags, const prefix * pfx, int en, ...) { va_list ap; int severity = (diag_flags & DIAG_SEVERITY_MASK); va_start(ap, en); v_report(severity, pfx->filename, pfx->line, 0, en, ap); va_end(ap); } void compile_diagnostic_token_show(int diag_flags, int en) { char *p = NULL; int len = 0; skipblanks(); while (!isBlank(ch) && !isEol(ch)) { s_catchar(&p, &len, (char)ch); nextch(); } if (p) { caret_width = strlen(p); compile_diagnostic(diag_flags|DIAG_COL, en, p); caret_width = 0; osfree(p); } else { compile_diagnostic(DIAG_ERR|DIAG_COL, en, ""); } } static void compile_error_string(const char * s, int en, ...) { va_list ap; va_start(ap, en); caret_width = strlen(s); compile_v_report(DIAG_ERR|DIAG_COL, en, ap); va_end(ap); caret_width = 0; } /* This function makes a note where to put output files */ static void using_data_file(const char *fnm) { if (!fnm_output_base) { /* was: fnm_output_base = base_from_fnm(fnm); */ fnm_output_base = baseleaf_from_fnm(fnm); } else if (fnm_output_base_is_dir) { /* --output pointed to directory so use the leaf basename in that dir */ char *lf, *p; lf = baseleaf_from_fnm(fnm); p = use_path(fnm_output_base, lf); osfree(lf); osfree(fnm_output_base); fnm_output_base = p; fnm_output_base_is_dir = 0; } } static void skipword(void) { while (!isBlank(ch) && !isEol(ch)) nextch(); } extern void skipblanks(void) { while (isBlank(ch)) nextch(); } extern void skipline(void) { while (!isEol(ch)) nextch(); } static void process_eol(void) { int eolchar; skipblanks(); if (!isEol(ch)) { if (!isComm(ch)) compile_diagnostic(DIAG_ERR|DIAG_COL, /*End of line not blank*/15); skipline(); } eolchar = ch; file.line++; /* skip any different eol characters so we get line counts correct on * DOS text files and similar, but don't count several adjacent blank * lines as one */ while (ch != EOF) { nextch(); if (ch == eolchar || !isEol(ch)) { break; } if (ch == '\n') eolchar = ch; } file.lpos = ftell(file.fh) - 1; } static bool process_non_data_line(void) { skipblanks(); if (isData(ch)) return fFalse; if (isKeywd(ch)) { nextch(); handle_command(); } process_eol(); return fTrue; } static void read_reading(reading r, bool f_optional) { int n_readings; q_quantity q; switch (r) { case Tape: q = Q_LENGTH; break; case BackTape: q = Q_BACKLENGTH; break; case Comp: q = Q_BEARING; break; case BackComp: q = Q_BACKBEARING; break; case Clino: q = Q_GRADIENT; break; case BackClino: q = Q_BACKGRADIENT; break; case FrDepth: case ToDepth: q = Q_DEPTH; break; case Dx: q = Q_DX; break; case Dy: q = Q_DY; break; case Dz: q = Q_DZ; break; case FrCount: case ToCount: q = Q_COUNT; break; case Left: q = Q_LEFT; break; case Right: q = Q_RIGHT; break; case Up: q = Q_UP; break; case Down: q = Q_DOWN; break; default: q = Q_NULL; /* Suppress compiler warning */; BUG("Unexpected case"); } LOC(r) = ftell(file.fh); /* since we don't handle bearings in read_readings, it's never quadrant */ VAL(r) = read_numeric_multi(f_optional, fFalse, &n_readings); WID(r) = ftell(file.fh) - LOC(r); VAR(r) = var(q); if (n_readings > 1) VAR(r) /= sqrt(n_readings); } static void read_bearing_or_omit(reading r) { int n_readings; bool quadrants = fFalse; q_quantity q = Q_NULL; switch (r) { case Comp: q = Q_BEARING; if (pcs->f_bearing_quadrants) quadrants = fTrue; break; case BackComp: q = Q_BACKBEARING; if (pcs->f_backbearing_quadrants) quadrants = fTrue; break; default: q = Q_NULL; /* Suppress compiler warning */; BUG("Unexpected case"); } LOC(r) = ftell(file.fh); VAL(r) = read_bearing_multi_or_omit(quadrants, &n_readings); WID(r) = ftell(file.fh) - LOC(r); VAR(r) = var(q); if (n_readings > 1) VAR(r) /= sqrt(n_readings); } /* For reading Compass MAK files which have a freeform syntax */ static void nextch_handling_eol(void) { nextch(); while (ch != EOF && isEol(ch)) { process_eol(); } } #define LITLEN(S) (sizeof(S"") - 1) #define has_ext(F,L,E) ((L) > LITLEN(E) + 1 &&\ (F)[(L) - LITLEN(E) - 1] == FNM_SEP_EXT &&\ strcasecmp((F) + (L) - LITLEN(E), E) == 0) extern void data_file(const char *pth, const char *fnm) { int begin_lineno_store; parse file_store; volatile enum {FMT_SVX, FMT_DAT, FMT_MAK} fmt = FMT_SVX; { char *filename; FILE *fh; size_t len; if (!pth) { /* file specified on command line - don't do special translation */ fh = fopenWithPthAndExt(pth, fnm, EXT_SVX_DATA, "rb", &filename); } else { fh = fopen_portable(pth, fnm, EXT_SVX_DATA, "rb", &filename); } if (fh == NULL) { compile_error_string(fnm, /*Couldn’t open file “%sâ€*/24, fnm); return; } len = strlen(filename); if (has_ext(filename, len, "dat")) { fmt = FMT_DAT; } else if (has_ext(filename, len, "mak")) { fmt = FMT_MAK; } file_store = file; if (file.fh) file.parent = &file_store; file.fh = fh; file.filename = filename; file.line = 1; file.lpos = 0; file.reported_where = fFalse; nextch(); if (fmt == FMT_SVX && ch == 0xef) { /* Maybe a UTF-8 "BOM" - skip if so. */ if (nextch() == 0xbb && nextch() == 0xbf) { nextch(); file.lpos = 3; } else { rewind(fh); ch = 0xef; } } } using_data_file(file.filename); begin_lineno_store = pcs->begin_lineno; pcs->begin_lineno = 0; if (fmt == FMT_DAT) { short *t; int i; settings *pcsNew; pcsNew = osnew(settings); *pcsNew = *pcs; /* copy contents */ pcsNew->begin_lineno = 0; pcsNew->next = pcs; pcs = pcsNew; default_units(pcs); default_calib(pcs); pcs->style = STYLE_NORMAL; pcs->units[Q_LENGTH] = METRES_PER_FOOT; t = ((short*)osmalloc(ossizeof(short) * 257)) + 1; t[EOF] = SPECIAL_EOL; memset(t, 0, sizeof(short) * 33); for (i = 33; i < 127; i++) t[i] = SPECIAL_NAMES; t[127] = 0; for (i = 128; i < 256; i++) t[i] = SPECIAL_NAMES; t['\t'] |= SPECIAL_BLANK; t[' '] |= SPECIAL_BLANK; t['\032'] |= SPECIAL_EOL; /* Ctrl-Z, so olde DOS text files are handled ok */ t['\n'] |= SPECIAL_EOL; t['\r'] |= SPECIAL_EOL; t['.'] |= SPECIAL_DECIMAL; t['-'] |= SPECIAL_MINUS; t['+'] |= SPECIAL_PLUS; pcs->Translate = t; pcs->Case = OFF; pcs->Truncate = INT_MAX; pcs->infer = BIT(INFER_EQUATES)|BIT(INFER_EXPORTS)|BIT(INFER_PLUMBS); } else if (fmt == FMT_MAK) { short *t; int i; settings *pcsNew; pcsNew = osnew(settings); *pcsNew = *pcs; /* copy contents */ pcsNew->begin_lineno = 0; pcsNew->next = pcs; pcs = pcsNew; t = ((short*)osmalloc(ossizeof(short) * 257)) + 1; t[EOF] = SPECIAL_EOL; memset(t, 0, sizeof(short) * 33); for (i = 33; i < 127; i++) t[i] = SPECIAL_NAMES; t[127] = 0; for (i = 128; i < 256; i++) t[i] = SPECIAL_NAMES; t['['] = t[','] = t[';'] = 0; t['\t'] |= SPECIAL_BLANK; t[' '] |= SPECIAL_BLANK; t['\032'] |= SPECIAL_EOL; /* Ctrl-Z, so olde DOS text files are handled ok */ t['\n'] |= SPECIAL_EOL; t['\r'] |= SPECIAL_EOL; t['.'] |= SPECIAL_DECIMAL; t['-'] |= SPECIAL_MINUS; t['+'] |= SPECIAL_PLUS; pcs->Translate = t; pcs->Case = OFF; pcs->Truncate = INT_MAX; } #ifdef HAVE_SETJMP_H /* errors in nested functions can longjmp here */ if (setjmp(file.jbSkipLine)) { skipline(); process_eol(); } #endif if (fmt == FMT_DAT) { while (ch != EOF && !ferror(file.fh)) { static const reading compass_order[] = { Fr, To, Tape, CompassDATComp, CompassDATClino, CompassDATLeft, CompassDATRight, CompassDATUp, CompassDATDown, CompassDATFlags, IgnoreAll }; static const reading compass_order_backsights[] = { Fr, To, Tape, CompassDATComp, CompassDATClino, CompassDATLeft, CompassDATRight, CompassDATUp, CompassDATDown, CompassDATBackComp, CompassDATBackClino, CompassDATFlags, IgnoreAll }; /* */ skipline(); process_eol(); /* SURVEY NAME: */ get_token(); get_token(); /* if (ch != ':') ... */ nextch(); get_token(); skipline(); process_eol(); /* SURVEY DATE: 7 10 79 COMMENT: */ get_token(); get_token(); copy_on_write_meta(pcs); if (ch == ':') { int year, month, day; nextch(); /* NB order is *month* *day* year */ month = read_uint(); day = read_uint(); year = read_uint(); /* Note: Larry says a 2 digit year is always 19XX */ if (year < 100) year += 1900; pcs->meta->days1 = pcs->meta->days2 = days_since_1900(year, month, day); } else { pcs->meta->days1 = pcs->meta->days2 = -1; } pcs->declination = HUGE_REAL; skipline(); process_eol(); /* SURVEY TEAM: */ get_token(); get_token(); skipline(); process_eol(); /* */ skipline(); process_eol(); /* DECLINATION: 1.00 FORMAT: DDDDLUDRADLN CORRECTIONS: 2.00 3.00 4.00 */ get_token(); nextch(); /* : */ skipblanks(); pcs->z[Q_DECLINATION] = -read_numeric(fFalse); pcs->z[Q_DECLINATION] *= pcs->units[Q_DECLINATION]; get_token(); pcs->ordering = compass_order; if (strcmp(buffer, "FORMAT") == 0) { nextch(); /* : */ get_token(); if (strlen(buffer) >= 12 && buffer[11] == 'B') { /* We have backsights for compass and clino */ pcs->ordering = compass_order_backsights; } get_token(); } if (strcmp(buffer, "CORRECTIONS") == 0) { nextch(); /* : */ pcs->z[Q_BEARING] = -rad(read_numeric(fFalse)); pcs->z[Q_GRADIENT] = -rad(read_numeric(fFalse)); pcs->z[Q_LENGTH] = -read_numeric(fFalse); } else { pcs->z[Q_BEARING] = 0; pcs->z[Q_GRADIENT] = 0; pcs->z[Q_LENGTH] = 0; } skipline(); process_eol(); /* BLANK LINE */ skipline(); process_eol(); /* heading line */ skipline(); process_eol(); /* BLANK LINE */ skipline(); process_eol(); while (ch != EOF) { if (ch == '\x0c') { nextch(); process_eol(); break; } data_normal(); } clear_last_leg(); } pcs->ordering = NULL; /* Avoid free() of static array. */ pop_settings(); } else if (fmt == FMT_MAK) { while (ch != EOF && !ferror(file.fh)) { if (ch == '#') { /* include a file */ int ch_store; char *dat_pth = path_from_fnm(file.filename); char *dat_fnm = NULL; int dat_fnm_len; nextch_handling_eol(); while (ch != ',' && ch != ';' && ch != EOF) { while (isEol(ch)) process_eol(); s_catchar(&dat_fnm, &dat_fnm_len, (char)ch); nextch_handling_eol(); } if (dat_fnm) { ch_store = ch; data_file(dat_pth, dat_fnm); ch = ch_store; osfree(dat_fnm); } while (ch != ';' && ch != EOF) { prefix *name; nextch_handling_eol(); name = read_prefix(PFX_STATION|PFX_OPT); if (name) { skipblanks(); if (ch == '[') { /* fixed pt */ node *stn; real x, y, z; bool in_feet = fFalse; name->sflags |= BIT(SFLAGS_FIXED); nextch_handling_eol(); if (ch == 'F' || ch == 'f') { in_feet = fTrue; nextch_handling_eol(); } else if (ch == 'M' || ch == 'm') { nextch_handling_eol(); } else { compile_diagnostic(DIAG_ERR, /*Expecting “F†or “Mâ€*/103); } while (!isdigit(ch) && ch != '+' && ch != '-' && ch != '.' && ch != ']' && ch != EOF) { nextch_handling_eol(); } x = read_numeric(fFalse); while (!isdigit(ch) && ch != '+' && ch != '-' && ch != '.' && ch != ']' && ch != EOF) { nextch_handling_eol(); } y = read_numeric(fFalse); while (!isdigit(ch) && ch != '+' && ch != '-' && ch != '.' && ch != ']' && ch != EOF) { nextch_handling_eol(); } z = read_numeric(fFalse); if (in_feet) { x *= METRES_PER_FOOT; y *= METRES_PER_FOOT; z *= METRES_PER_FOOT; } stn = StnFromPfx(name); if (!fixed(stn)) { POS(stn, 0) = x; POS(stn, 1) = y; POS(stn, 2) = z; fix(stn); } else { if (x != POS(stn, 0) || y != POS(stn, 1) || z != POS(stn, 2)) { compile_diagnostic(DIAG_ERR, /*Station already fixed or equated to a fixed point*/46); } else { compile_diagnostic(DIAG_WARN, /*Station already fixed at the same coordinates*/55); } } while (ch != ']' && ch != EOF) nextch_handling_eol(); if (ch == ']') { nextch_handling_eol(); skipblanks(); } } else { /* FIXME: link station - ignore for now */ /* FIXME: perhaps issue warning? Other station names can be "reused", which is problematic... */ } while (ch != ',' && ch != ';' && ch != EOF) nextch_handling_eol(); } } } else { /* FIXME: also check for % and $ later */ nextch_handling_eol(); } } pop_settings(); } else { while (ch != EOF && !ferror(file.fh)) { if (!process_non_data_line()) { f_export_ok = fFalse; switch (pcs->style) { case STYLE_NORMAL: case STYLE_DIVING: case STYLE_CYLPOLAR: data_normal(); break; case STYLE_CARTESIAN: data_cartesian(); break; case STYLE_PASSAGE: data_passage(); break; case STYLE_NOSURVEY: data_nosurvey(); break; case STYLE_IGNORE: data_ignore(); break; default: BUG("bad style"); } } } clear_last_leg(); } /* don't allow *BEGIN at the end of a file, then *EXPORT in the * including file */ f_export_ok = fFalse; if (pcs->begin_lineno) { error_in_file(file.filename, pcs->begin_lineno, /*BEGIN with no matching END in this file*/23); /* Implicitly close any unclosed BEGINs from this file */ do { pop_settings(); } while (pcs->begin_lineno); } pcs->begin_lineno = begin_lineno_store; if (ferror(file.fh)) fatalerror_in_file(file.filename, 0, /*Error reading file*/18); (void)fclose(file.fh); file = file_store; /* don't free this - it may be pointed to by prefix.file */ /* osfree(file.filename); */ } static real mod2pi(real a) { return a - floor(a / (2 * M_PI)) * (2 * M_PI); } static real handle_plumb(clino_type *p_ctype) { typedef enum { CLINO_NULL=-1, CLINO_UP, CLINO_DOWN, CLINO_LEVEL } clino_tok; static const sztok clino_tab[] = { {"D", CLINO_DOWN}, {"DOWN", CLINO_DOWN}, {"H", CLINO_LEVEL}, {"LEVEL", CLINO_LEVEL}, {"U", CLINO_UP}, {"UP", CLINO_UP}, {NULL, CLINO_NULL} }; static const real clinos[] = {(real)M_PI_2, (real)(-M_PI_2), (real)0.0}; clino_tok tok; skipblanks(); if (isalpha(ch)) { filepos fp; get_pos(&fp); get_token(); tok = match_tok(clino_tab, TABSIZE(clino_tab)); if (tok != CLINO_NULL) { *p_ctype = (tok == CLINO_LEVEL ? CTYPE_HORIZ : CTYPE_PLUMB); return clinos[tok]; } set_pos(&fp); } else if (isSign(ch)) { int chOld = ch; nextch(); if (toupper(ch) == 'V') { nextch(); *p_ctype = CTYPE_PLUMB; return (!isMinus(chOld) ? M_PI_2 : -M_PI_2); } if (isOmit(chOld)) { *p_ctype = CTYPE_OMIT; /* no clino reading, so assume 0 with large sd */ return (real)0.0; } } else if (isOmit(ch)) { /* OMIT char may not be a SIGN char too so we need to check here as * well as above... */ nextch(); *p_ctype = CTYPE_OMIT; /* no clino reading, so assume 0 with large sd */ return (real)0.0; } return HUGE_REAL; } static void warn_readings_differ(int msgno, real diff, int units) { char buf[64]; char *p; diff /= get_units_factor(units); sprintf(buf, "%.2f", fabs(diff)); for (p = buf; *p; ++p) { if (*p == '.') { char *z = p; while (*++p) { if (*p != '0') z = p + 1; } p = z; break; } } strcpy(p, get_units_string(units)); compile_diagnostic(DIAG_WARN, msgno, buf); } static bool handle_comp_units(void) { bool fNoComp = fTrue; if (VAL(Comp) != HUGE_REAL) { fNoComp = fFalse; VAL(Comp) *= pcs->units[Q_BEARING]; if (VAL(Comp) < (real)0.0 || VAL(Comp) - M_PI * 2.0 > EPSILON) { /* TRANSLATORS: Suspicious means something like 410 degrees or -20 * degrees */ compile_diagnostic_reading(DIAG_WARN, Comp, /*Suspicious compass reading*/59); VAL(Comp) = mod2pi(VAL(Comp)); } } if (VAL(BackComp) != HUGE_REAL) { fNoComp = fFalse; VAL(BackComp) *= pcs->units[Q_BACKBEARING]; if (VAL(BackComp) < (real)0.0 || VAL(BackComp) - M_PI * 2.0 > EPSILON) { /* FIXME: different message for BackComp? */ compile_diagnostic_reading(DIAG_WARN, BackComp, /*Suspicious compass reading*/59); VAL(BackComp) = mod2pi(VAL(BackComp)); } } return fNoComp; } static real handle_compass(real *p_var) { real compvar = VAR(Comp); real comp = VAL(Comp); real backcomp = VAL(BackComp); real declination; if (pcs->z[Q_DECLINATION] != HUGE_REAL) { declination = -pcs->z[Q_DECLINATION]; } else if (pcs->declination != HUGE_REAL) { /* Cached value calculated for a previous compass reading taken on the * same date (by the 'else' just below). */ declination = pcs->declination; } else { if (!pcs->meta || pcs->meta->days1 == -1) { compile_diagnostic(DIAG_WARN, /*No survey date specified - using 0 for magnetic declination*/304); declination = 0; } else { int avg_days = (pcs->meta->days1 + pcs->meta->days2) / 2; double dat = julian_date_from_days_since_1900(avg_days); /* thgeomag() takes (lat, lon, h, dat) - i.e. (y, x, z, date). */ declination = thgeomag(pcs->dec_lat, pcs->dec_lon, pcs->dec_alt, dat); if (declination < pcs->min_declination) { pcs->min_declination = declination; pcs->min_declination_days = avg_days; } if (declination > pcs->max_declination) { pcs->max_declination = declination; pcs->max_declination_days = avg_days; } } declination -= pcs->convergence; /* We cache the calculated declination as the calculation is relatively * expensive. We also cache an "assumed 0" answer so that we only * warn once per such survey rather than for every line with a compass * reading. */ pcs->declination = declination; } if (comp != HUGE_REAL) { comp = (comp - pcs->z[Q_BEARING]) * pcs->sc[Q_BEARING]; comp += declination; } if (backcomp != HUGE_REAL) { backcomp = (backcomp - pcs->z[Q_BACKBEARING]) * pcs->sc[Q_BACKBEARING]; backcomp += declination; backcomp -= M_PI; if (comp != HUGE_REAL) { real diff = comp - backcomp; real adj = fabs(diff) > M_PI ? M_PI : 0; diff -= floor((diff + M_PI) / (2 * M_PI)) * 2 * M_PI; if (sqrd(diff / 3.0) > compvar + VAR(BackComp)) { /* fore and back readings differ by more than 3 sds */ /* TRANSLATORS: %s is replaced by the amount the readings disagree * by, e.g. "2.5°" or "3áµ". */ warn_readings_differ(/*COMPASS reading and BACKCOMPASS reading disagree by %s*/98, diff, get_angle_units(Q_BEARING)); } comp = (comp / compvar + backcomp / VAR(BackComp)); compvar = (compvar + VAR(BackComp)) / 4; comp *= compvar; comp += adj; } else { comp = backcomp; compvar = VAR(BackComp); } } *p_var = compvar; return comp; } static real handle_clino(q_quantity q, reading r, real val, bool percent, clino_type *p_ctype) { bool range_0_180; real z; real diff_from_abs90; val *= pcs->units[q]; /* percentage scale */ if (percent) val = atan(val); /* We want to warn if there's a reading which it would be impossible * to have read from the instrument (e.g. on a -90 to 90 degree scale * you can't read "96" (it's probably a typo for "69"). However, the * gradient reading from a topofil is typically in the range 0 to 180, * with 90 being horizontal. * * Really we should allow the valid range to be specified, but for now * we infer it from the zero error - if this is within 45 degrees of * 90 then we assume the range is 0 to 180. */ z = pcs->z[q]; range_0_180 = (z > M_PI_4 && z < 3*M_PI_4); diff_from_abs90 = fabs(val) - M_PI_2; if (diff_from_abs90 > EPSILON) { if (!range_0_180) { int clino_units = get_angle_units(q); const char * units = get_units_string(clino_units); real right_angle = M_PI_2 / get_units_factor(clino_units); /* FIXME: different message for BackClino? */ /* TRANSLATORS: %.f%s will be replaced with a right angle in the * units currently in use, e.g. "90°" or "100áµ". And "absolute * value" means the reading ignoring the sign (so it might be * < -90° or > 90°. */ compile_diagnostic_reading(DIAG_WARN, r, /*Clino reading over %.f%s (absolute value)*/51, right_angle, units); } } else if (TSTBIT(pcs->infer, INFER_PLUMBS) && diff_from_abs90 >= -EPSILON) { *p_ctype = CTYPE_INFERPLUMB; } if (range_0_180 && *p_ctype != CTYPE_INFERPLUMB) { /* FIXME: Warning message not ideal... */ if (val < 0.0 || val - M_PI > EPSILON) { int clino_units = get_angle_units(q); const char * units = get_units_string(clino_units); real right_angle = M_PI_2 / get_units_factor(clino_units); compile_diagnostic_reading(DIAG_WARN, r, /*Clino reading over %.f%s (absolute value)*/51, right_angle, units); } } return val; } static int process_normal(prefix *fr, prefix *to, bool fToFirst, clino_type ctype, clino_type backctype) { real tape = VAL(Tape); real clin = VAL(Clino); real backclin = VAL(BackClino); real dx, dy, dz; real vx, vy, vz; #ifndef NO_COVARIANCES real cxy, cyz, czx; #endif bool fNoComp; /* adjusted tape is negative -- probably the calibration is wrong */ if (tape < (real)0.0) { /* TRANSLATE different message for topofil? */ compile_diagnostic_reading(DIAG_WARN, Tape, /*Negative adjusted tape reading*/79); } fNoComp = handle_comp_units(); if (ctype == CTYPE_READING) { clin = handle_clino(Q_GRADIENT, Clino, clin, pcs->f_clino_percent, &ctype); } if (backctype == CTYPE_READING) { backclin = handle_clino(Q_BACKGRADIENT, BackClino, backclin, pcs->f_backclino_percent, &backctype); } /* un-infer the plumb if the backsight was just a reading */ if (ctype == CTYPE_INFERPLUMB && backctype == CTYPE_READING) { ctype = CTYPE_READING; } if (ctype != CTYPE_OMIT && backctype != CTYPE_OMIT && ctype != backctype) { /* TRANSLATORS: In data with backsights, the user has tried to give a * plumb for the foresight and a clino reading for the backsight, or * something similar. */ compile_error_reading_skip(Clino, /*CLINO and BACKCLINO readings must be of the same type*/84); return 0; } if (ctype == CTYPE_PLUMB || ctype == CTYPE_INFERPLUMB || backctype == CTYPE_PLUMB || backctype == CTYPE_INFERPLUMB) { /* plumbed */ if (!fNoComp) { if (ctype == CTYPE_PLUMB || (ctype == CTYPE_INFERPLUMB && VAL(Comp) != 0.0) || backctype == CTYPE_PLUMB || (backctype == CTYPE_INFERPLUMB && VAL(BackComp) != 0.0)) { /* FIXME: Different message for BackComp? */ /* TRANSLATORS: A "plumbed leg" is one measured using a plumbline * (a weight on a string). So the problem here is that the leg is * vertical, so a compass reading has no meaning! */ compile_diagnostic(DIAG_WARN, /*Compass reading given on plumbed leg*/21); } } dx = dy = (real)0.0; if (ctype != CTYPE_OMIT) { if (backctype != CTYPE_OMIT && (clin > 0) == (backclin > 0)) { /* TRANSLATORS: We've been told the foresight and backsight are * both "UP", or that they're both "DOWN". */ compile_error_reading_skip(Clino, /*Plumbed CLINO and BACKCLINO readings can't be in the same direction*/92); return 0; } dz = (clin > (real)0.0) ? tape : -tape; } else { dz = (backclin < (real)0.0) ? tape : -tape; } vx = vy = var(Q_POS) / 3.0 + dz * dz * var(Q_PLUMB); vz = var(Q_POS) / 3.0 + VAR(Tape); #ifndef NO_COVARIANCES /* Correct values - no covariances in this case! */ cxy = cyz = czx = (real)0.0; #endif } else { /* Each of ctype and backctype are either CTYPE_READING/CTYPE_HORIZ * or CTYPE_OMIT */ /* clino */ real L2, cosG, LcosG, cosG2, sinB, cosB, dx2, dy2, dz2, v, V; if (fNoComp) { /* TRANSLATORS: Here "legs" are survey legs, i.e. measurements between * survey stations. */ compile_error_reading_skip(Comp, /*Compass reading may not be omitted except on plumbed legs*/14); return 0; } if (tape == (real)0.0) { dx = dy = dz = (real)0.0; vx = vy = vz = (real)(var(Q_POS) / 3.0); /* Position error only */ #ifndef NO_COVARIANCES cxy = cyz = czx = (real)0.0; #endif #if DEBUG_DATAIN_1 printf("Zero length leg: vx = %f, vy = %f, vz = %f\n", vx, vy, vz); #endif } else { real sinGcosG; /* take into account variance in LEVEL case */ real var_clin = var(Q_LEVEL); real var_comp; real comp = handle_compass(&var_comp); /* ctype != CTYPE_READING is LEVEL case */ if (ctype == CTYPE_READING) { clin = (clin - pcs->z[Q_GRADIENT]) * pcs->sc[Q_GRADIENT]; var_clin = VAR(Clino); } if (backctype == CTYPE_READING) { backclin = (backclin - pcs->z[Q_BACKGRADIENT]) * pcs->sc[Q_BACKGRADIENT]; if (ctype == CTYPE_READING) { if (sqrd((clin + backclin) / 3.0) > var_clin + VAR(BackClino)) { /* fore and back readings differ by more than 3 sds */ /* TRANSLATORS: %s is replaced by the amount the readings disagree * by, e.g. "2.5°" or "3áµ". */ warn_readings_differ(/*CLINO reading and BACKCLINO reading disagree by %s*/99, clin + backclin, get_angle_units(Q_GRADIENT)); } clin = (clin / var_clin - backclin / VAR(BackClino)); var_clin = (var_clin + VAR(BackClino)) / 4; clin *= var_clin; } else { clin = -backclin; var_clin = VAR(BackClino); } } #if DEBUG_DATAIN printf(" %4.2f %4.2f %4.2f\n", tape, comp, clin); #endif cosG = cos(clin); LcosG = tape * cosG; sinB = sin(comp); cosB = cos(comp); #if DEBUG_DATAIN_1 printf("sinB = %f, cosG = %f, LcosG = %f\n", sinB, cosG, LcosG); #endif dx = LcosG * sinB; dy = LcosG * cosB; dz = tape * sin(clin); /* printf("%.2f\n",clin); */ #if DEBUG_DATAIN_1 printf("dx = %f\ndy = %f\ndz = %f\n", dx, dy, dz); #endif dx2 = dx * dx; L2 = tape * tape; V = VAR(Tape) / L2; dy2 = dy * dy; cosG2 = cosG * cosG; sinGcosG = sin(clin) * cosG; dz2 = dz * dz; v = dz2 * var_clin; #ifdef NO_COVARIANCES vx = (var(Q_POS) / 3.0 + dx2 * V + dy2 * var_comp + (.5 + sinB * sinB * cosG2) * v); vy = (var(Q_POS) / 3.0 + dy2 * V + dx2 * var_comp + (.5 + cosB * cosB * cosG2) * v); if (ctype == CTYPE_OMIT && backctype == CTYPE_OMIT) { /* if no clino, assume sd=tape/sqrt(10) so 3sds = .95*tape */ vz = var(Q_POS) / 3.0 + L2 * (real)0.1; } else { vz = var(Q_POS) / 3.0 + dz2 * V + L2 * cosG2 * var_clin; } /* for Surveyor87 errors: vx=vy=vz=var(Q_POS)/3.0; */ #else vx = var(Q_POS) / 3.0 + dx2 * V + dy2 * var_comp + (sinB * sinB * v); vy = var(Q_POS) / 3.0 + dy2 * V + dx2 * var_comp + (cosB * cosB * v); if (ctype == CTYPE_OMIT && backctype == CTYPE_OMIT) { /* if no clino, assume sd=tape/sqrt(10) so 3sds = .95*tape */ vz = var(Q_POS) / 3.0 + L2 * (real)0.1; } else { vz = var(Q_POS) / 3.0 + dz2 * V + L2 * cosG2 * var_clin; } /* usual covariance formulae are fine in no clino case since * dz = 0 so value of var_clin is ignored */ cxy = sinB * cosB * (VAR(Tape) * cosG2 + var_clin * dz2) - var_comp * dx * dy; czx = VAR(Tape) * sinB * sinGcosG - var_clin * dx * dz; cyz = VAR(Tape) * cosB * sinGcosG - var_clin * dy * dz; #if 0 printf("vx = %6.3f, vy = %6.3f, vz = %6.3f\n", vx, vy, vz); printf("cxy = %6.3f, cyz = %6.3f, czx = %6.3f\n", cxy, cyz, czx); #endif #endif #if DEBUG_DATAIN_1 printf("In DATAIN.C, vx = %f, vy = %f, vz = %f\n", vx, vy, vz); #endif } } #if DEBUG_DATAIN_1 printf("Just before addleg, vx = %f\n", vx); #endif /*printf("dx,dy,dz = %.2f %.2f %.2f\n\n", dx, dy, dz);*/ addlegbyname(fr, to, fToFirst, dx, dy, dz, vx, vy, vz #ifndef NO_COVARIANCES , cyz, czx, cxy #endif ); return 1; } static int process_diving(prefix *fr, prefix *to, bool fToFirst, bool fDepthChange) { real tape = VAL(Tape); real dx, dy, dz; real vx, vy, vz; #ifndef NO_COVARIANCES real cxy = 0, cyz = 0, czx = 0; #endif handle_comp_units(); /* depth gauge readings increase upwards with default calibration */ if (fDepthChange) { SVX_ASSERT(VAL(FrDepth) == 0.0); dz = VAL(ToDepth) * pcs->units[Q_DEPTH] - pcs->z[Q_DEPTH]; dz *= pcs->sc[Q_DEPTH]; } else { dz = VAL(ToDepth) - VAL(FrDepth); dz *= pcs->units[Q_DEPTH] * pcs->sc[Q_DEPTH]; } /* adjusted tape is negative -- probably the calibration is wrong */ if (tape < (real)0.0) { compile_diagnostic(DIAG_WARN, /*Negative adjusted tape reading*/79); } /* check if tape is less than depth change */ if (tape < fabs(dz)) { /* FIXME: allow margin of error based on variances? */ /* TRANSLATORS: This means that the data fed in said this. * * It could be a gross error (e.g. the decimal point is missing from the * depth gauge reading) or it could just be due to random error on a near * vertical leg */ compile_diagnostic(DIAG_WARN, /*Tape reading is less than change in depth*/62); } if (tape == (real)0.0 && dz == 0.0) { dx = dy = dz = (real)0.0; vx = vy = vz = (real)(var(Q_POS) / 3.0); /* Position error only */ } else if (VAL(Comp) == HUGE_REAL && VAL(BackComp) == HUGE_REAL) { /* plumb */ dx = dy = (real)0.0; if (dz < 0) tape = -tape; /* FIXME: Should use FrDepth sometimes... */ dz = (dz * VAR(Tape) + tape * 2 * VAR(ToDepth)) / (VAR(Tape) * 2 * VAR(ToDepth)); vx = vy = var(Q_POS) / 3.0 + dz * dz * var(Q_PLUMB); /* FIXME: Should use FrDepth sometimes... */ vz = var(Q_POS) / 3.0 + VAR(Tape) * 2 * VAR(ToDepth) / (VAR(Tape) + VAR(ToDepth)); } else { real L2, sinB, cosB, dz2, D2; real var_comp; real comp = handle_compass(&var_comp); sinB = sin(comp); cosB = cos(comp); L2 = tape * tape; dz2 = dz * dz; D2 = L2 - dz2; if (D2 <= (real)0.0) { /* FIXME: Should use FrDepth sometimes... */ real vsum = VAR(Tape) + 2 * VAR(ToDepth); dx = dy = (real)0.0; vx = vy = var(Q_POS) / 3.0; /* FIXME: Should use FrDepth sometimes... */ vz = var(Q_POS) / 3.0 + VAR(Tape) * 2 * VAR(ToDepth) / vsum; if (dz > 0) { /* FIXME: Should use FrDepth sometimes... */ dz = (dz * VAR(Tape) + tape * 2 * VAR(ToDepth)) / vsum; } else { dz = (dz * VAR(Tape) - tape * 2 * VAR(ToDepth)) / vsum; } } else { real D = sqrt(D2); /* FIXME: Should use FrDepth sometimes... */ real F = VAR(Tape) * L2 + 2 * VAR(ToDepth) * D2; dx = D * sinB; dy = D * cosB; vx = var(Q_POS) / 3.0 + sinB * sinB * F / D2 + var_comp * dy * dy; vy = var(Q_POS) / 3.0 + cosB * cosB * F / D2 + var_comp * dx * dx; /* FIXME: Should use FrDepth sometimes... */ vz = var(Q_POS) / 3.0 + 2 * VAR(ToDepth); #ifndef NO_COVARIANCES cxy = sinB * cosB * (F / D2 + var_comp * D2); /* FIXME: Should use FrDepth sometimes... */ cyz = -2 * VAR(ToDepth) * dy / D; czx = -2 * VAR(ToDepth) * dx / D; #endif } /* FIXME: If there's a clino reading, check it against the depth reading, * and average. * if (VAL(Clino) != HUGE_REAL || VAL(BackClino) != HUGE_REAL) { ... } */ } addlegbyname(fr, to, fToFirst, dx, dy, dz, vx, vy, vz #ifndef NO_COVARIANCES , cxy, cyz, czx #endif ); return 1; } static int process_cartesian(prefix *fr, prefix *to, bool fToFirst) { real dx = (VAL(Dx) * pcs->units[Q_DX] - pcs->z[Q_DX]) * pcs->sc[Q_DX]; real dy = (VAL(Dy) * pcs->units[Q_DY] - pcs->z[Q_DY]) * pcs->sc[Q_DY]; real dz = (VAL(Dz) * pcs->units[Q_DZ] - pcs->z[Q_DZ]) * pcs->sc[Q_DZ]; addlegbyname(fr, to, fToFirst, dx, dy, dz, VAR(Dx), VAR(Dy), VAR(Dz) #ifndef NO_COVARIANCES , 0, 0, 0 #endif ); return 1; } static void data_cartesian(void) { prefix *fr = NULL, *to = NULL; bool fMulti = fFalse; reading first_stn = End; const reading *ordering; again: for (ordering = pcs->ordering ; ; ordering++) { skipblanks(); switch (*ordering) { case Fr: fr = read_prefix(PFX_STATION|PFX_ALLOW_ROOT); if (first_stn == End) first_stn = Fr; break; case To: to = read_prefix(PFX_STATION|PFX_ALLOW_ROOT); if (first_stn == End) first_stn = To; break; case Station: fr = to; to = read_prefix(PFX_STATION); first_stn = To; break; case Dx: case Dy: case Dz: read_reading(*ordering, fFalse); break; case Ignore: skipword(); break; case IgnoreAllAndNewLine: skipline(); /* fall through */ case Newline: if (fr != NULL) { if (!process_cartesian(fr, to, first_stn == To)) skipline(); } fMulti = fTrue; while (1) { process_eol(); skipblanks(); if (isData(ch)) break; if (!isComm(ch)) { return; } } break; case IgnoreAll: skipline(); /* fall through */ case End: if (!fMulti) { process_cartesian(fr, to, first_stn == To); process_eol(); return; } do { process_eol(); skipblanks(); } while (isComm(ch)); goto again; default: BUG("Unknown reading in ordering"); } } } static int process_cylpolar(prefix *fr, prefix *to, bool fToFirst, bool fDepthChange) { real tape = VAL(Tape); real dx, dy, dz; real vx, vy, vz; #ifndef NO_COVARIANCES real cxy = 0; #endif handle_comp_units(); /* depth gauge readings increase upwards with default calibration */ if (fDepthChange) { SVX_ASSERT(VAL(FrDepth) == 0.0); dz = VAL(ToDepth) * pcs->units[Q_DEPTH] - pcs->z[Q_DEPTH]; dz *= pcs->sc[Q_DEPTH]; } else { dz = VAL(ToDepth) - VAL(FrDepth); dz *= pcs->units[Q_DEPTH] * pcs->sc[Q_DEPTH]; } /* adjusted tape is negative -- probably the calibration is wrong */ if (tape < (real)0.0) { compile_diagnostic(DIAG_WARN, /*Negative adjusted tape reading*/79); } if (VAL(Comp) == HUGE_REAL && VAL(BackComp) == HUGE_REAL) { /* plumb */ dx = dy = (real)0.0; vx = vy = var(Q_POS) / 3.0 + dz * dz * var(Q_PLUMB); /* FIXME: Should use FrDepth sometimes... */ vz = var(Q_POS) / 3.0 + 2 * VAR(ToDepth); } else { real sinB, cosB; real var_comp; real comp = handle_compass(&var_comp); sinB = sin(comp); cosB = cos(comp); dx = tape * sinB; dy = tape * cosB; vx = var(Q_POS) / 3.0 + VAR(Tape) * sinB * sinB + var_comp * dy * dy; vy = var(Q_POS) / 3.0 + VAR(Tape) * cosB * cosB + var_comp * dx * dx; /* FIXME: Should use FrDepth sometimes... */ vz = var(Q_POS) / 3.0 + 2 * VAR(ToDepth); #ifndef NO_COVARIANCES cxy = (VAR(Tape) - var_comp * tape * tape) * sinB * cosB; #endif } addlegbyname(fr, to, fToFirst, dx, dy, dz, vx, vy, vz #ifndef NO_COVARIANCES , cxy, 0, 0 #endif ); return 1; } /* Process tape/compass/clino, diving, and cylpolar styles of survey data * Also handles topofil (fromcount/tocount or count) in place of tape */ static void data_normal(void) { prefix *fr = NULL, *to = NULL; reading first_stn = End; bool fTopofil = fFalse, fMulti = fFalse; bool fRev; clino_type ctype, backctype; bool fDepthChange; unsigned long compass_dat_flags = 0; const reading *ordering; VAL(Tape) = VAL(BackTape) = HUGE_REAL; VAL(Comp) = VAL(BackComp) = HUGE_REAL; VAL(FrCount) = VAL(ToCount) = 0; VAL(FrDepth) = VAL(ToDepth) = 0; VAL(Left) = VAL(Right) = VAL(Up) = VAL(Down) = HUGE_REAL; fRev = fFalse; ctype = backctype = CTYPE_OMIT; fDepthChange = fFalse; /* ordering may omit clino reading, so set up default here */ /* this is also used if clino reading is the omit character */ VAL(Clino) = VAL(BackClino) = 0; again: /* We clear these flags in the normal course of events, but if there's an * error in a reading, we might not, so make sure it has been cleared here. */ pcs->flags &= ~(BIT(FLAGS_ANON_ONE_END) | BIT(FLAGS_IMPLICIT_SPLAY)); for (ordering = pcs->ordering; ; ordering++) { skipblanks(); switch (*ordering) { case Fr: fr = read_prefix(PFX_STATION|PFX_ALLOW_ROOT|PFX_ANON); if (first_stn == End) first_stn = Fr; break; case To: to = read_prefix(PFX_STATION|PFX_ALLOW_ROOT|PFX_ANON); if (first_stn == End) first_stn = To; break; case Station: fr = to; to = read_prefix(PFX_STATION); first_stn = To; break; case Dir: { typedef enum { DIR_NULL=-1, DIR_FORE, DIR_BACK } dir_tok; static const sztok dir_tab[] = { {"B", DIR_BACK}, {"F", DIR_FORE}, }; dir_tok tok; get_token(); tok = match_tok(dir_tab, TABSIZE(dir_tab)); switch (tok) { case DIR_FORE: break; case DIR_BACK: fRev = fTrue; break; default: compile_diagnostic(DIAG_ERR|DIAG_BUF|DIAG_SKIP, /*Found “%sâ€, expecting “F†or “Bâ€*/131, buffer); process_eol(); return; } break; } case Tape: case BackTape: { reading r = *ordering; read_reading(r, fTrue); if (VAL(r) == HUGE_REAL) { if (!isOmit(ch)) { compile_diagnostic_token_show(DIAG_ERR, /*Expecting numeric field, found “%sâ€*/9); /* Avoid also warning about omitted tape reading. */ VAL(r) = 0; } else { nextch(); } } else if (VAL(r) < (real)0.0) { compile_diagnostic_reading(DIAG_WARN, r, /*Negative tape reading*/60); } break; } case Count: VAL(FrCount) = VAL(ToCount); LOC(FrCount) = LOC(ToCount); WID(FrCount) = WID(ToCount); read_reading(ToCount, fFalse); fTopofil = fTrue; break; case FrCount: read_reading(FrCount, fFalse); break; case ToCount: read_reading(ToCount, fFalse); fTopofil = fTrue; break; case Comp: case BackComp: read_bearing_or_omit(*ordering); break; case Clino: case BackClino: { reading r = *ordering; clino_type * p_ctype = (r == Clino ? &ctype : &backctype); read_reading(r, fTrue); if (VAL(r) == HUGE_REAL) { VAL(r) = handle_plumb(p_ctype); if (VAL(r) != HUGE_REAL) break; compile_diagnostic_token_show(DIAG_ERR, /*Expecting numeric field, found “%sâ€*/9); skipline(); process_eol(); return; } *p_ctype = CTYPE_READING; break; } case FrDepth: case ToDepth: read_reading(*ordering, fFalse); break; case Depth: VAL(FrDepth) = VAL(ToDepth); LOC(FrDepth) = LOC(ToDepth); WID(FrDepth) = WID(ToDepth); read_reading(ToDepth, fFalse); break; case DepthChange: fDepthChange = fTrue; VAL(FrDepth) = 0; read_reading(ToDepth, fFalse); break; case CompassDATComp: read_bearing_or_omit(Comp); if (is_compass_NaN(VAL(Comp))) VAL(Comp) = HUGE_REAL; break; case CompassDATBackComp: read_bearing_or_omit(BackComp); if (is_compass_NaN(VAL(BackComp))) VAL(BackComp) = HUGE_REAL; break; case CompassDATClino: case CompassDATBackClino: { reading r; clino_type * p_ctype; if (*ordering == CompassDATClino) { r = Clino; p_ctype = &ctype; } else { r = BackClino; p_ctype = &backctype; } read_reading(r, fFalse); if (is_compass_NaN(VAL(r))) { VAL(r) = HUGE_REAL; *p_ctype = CTYPE_OMIT; } else { *p_ctype = CTYPE_READING; } break; } case CompassDATLeft: case CompassDATRight: case CompassDATUp: case CompassDATDown: { /* FIXME: need to actually make use of these entries! */ reading actual = Left + (*ordering - CompassDATLeft); read_reading(actual, fFalse); if (VAL(actual) < 0) VAL(actual) = HUGE_REAL; break; } case CompassDATFlags: if (ch == '#') { filepos fp; get_pos(&fp); nextch(); if (ch == '|') { nextch(); while (ch >= 'A' && ch <= 'Z') { compass_dat_flags |= BIT(ch - 'A'); /* We currently understand: * L (exclude from length) * X (exclude data) * FIXME: but should also handle at least some of: * C (no adjustment) (set all (co)variances to 0?) * P (no plot) (new flag in 3d for "hidden by default"?) */ nextch(); } if (ch == '#') { nextch(); } else { compass_dat_flags = 0; set_pos(&fp); } } else { set_pos(&fp); } } break; case Ignore: skipword(); break; case IgnoreAllAndNewLine: skipline(); /* fall through */ case Newline: if (fr != NULL) { int r; int save_flags; int implicit_splay; if (fTopofil) { VAL(Tape) = VAL(ToCount) - VAL(FrCount); LOC(Tape) = LOC(ToCount); WID(Tape) = WID(ToCount); } /* Note: frdepth == todepth test works regardless of fDepthChange * (frdepth always zero, todepth is change of depth) and also * works for STYLE_NORMAL (both remain 0) */ if (TSTBIT(pcs->infer, INFER_EQUATES) && (VAL(Tape) == (real)0.0 || VAL(Tape) == HUGE_REAL) && (VAL(BackTape) == (real)0.0 || VAL(BackTape) == HUGE_REAL) && VAL(FrDepth) == VAL(ToDepth)) { process_equate(fr, to); goto inferred_equate; } if (fRev) { prefix *t = fr; fr = to; to = t; } if (fTopofil) { VAL(Tape) *= pcs->units[Q_COUNT] * pcs->sc[Q_COUNT]; } else if (VAL(Tape) != HUGE_REAL) { VAL(Tape) *= pcs->units[Q_LENGTH]; VAL(Tape) -= pcs->z[Q_LENGTH]; VAL(Tape) *= pcs->sc[Q_LENGTH]; } if (VAL(BackTape) != HUGE_REAL) { VAL(BackTape) *= pcs->units[Q_BACKLENGTH]; VAL(BackTape) -= pcs->z[Q_BACKLENGTH]; VAL(BackTape) *= pcs->sc[Q_BACKLENGTH]; if (VAL(Tape) != HUGE_REAL) { real diff = VAL(Tape) - VAL(BackTape); if (sqrd(diff / 3.0) > VAR(Tape) + VAR(BackTape)) { /* fore and back readings differ by more than 3 sds */ /* TRANSLATORS: %s is replaced by the amount the readings disagree * by, e.g. "0.12m" or "0.2ft". */ warn_readings_differ(/*TAPE reading and BACKTAPE reading disagree by %s*/97, diff, get_length_units(Q_LENGTH)); } VAL(Tape) = VAL(Tape) / VAR(Tape) + VAL(BackTape) / VAR(BackTape); VAR(Tape) = (VAR(Tape) + VAR(BackTape)) / 4; VAL(Tape) *= VAR(Tape); } else { VAL(Tape) = VAL(BackTape); VAR(Tape) = VAR(BackTape); } } else if (VAL(Tape) == HUGE_REAL) { compile_diagnostic_reading(DIAG_ERR, Tape, /*Tape reading may not be omitted*/94); goto inferred_equate; } implicit_splay = TSTBIT(pcs->flags, FLAGS_IMPLICIT_SPLAY); pcs->flags &= ~(BIT(FLAGS_ANON_ONE_END) | BIT(FLAGS_IMPLICIT_SPLAY)); save_flags = pcs->flags; if (implicit_splay) { pcs->flags |= BIT(FLAGS_SPLAY); } switch (pcs->style) { case STYLE_NORMAL: r = process_normal(fr, to, (first_stn == To) ^ fRev, ctype, backctype); break; case STYLE_DIVING: /* FIXME: Handle any clino readings */ r = process_diving(fr, to, (first_stn == To) ^ fRev, fDepthChange); break; case STYLE_CYLPOLAR: r = process_cylpolar(fr, to, (first_stn == To) ^ fRev, fDepthChange); break; default: r = 0; /* avoid warning */ BUG("bad style"); } pcs->flags = save_flags; if (!r) skipline(); /* Swap fr and to back to how they were for next line */ if (fRev) { prefix *t = fr; fr = to; to = t; } } fRev = fFalse; ctype = backctype = CTYPE_OMIT; fDepthChange = fFalse; /* ordering may omit clino reading, so set up default here */ /* this is also used if clino reading is the omit character */ VAL(Clino) = VAL(BackClino) = 0; LOC(Clino) = LOC(BackClino) = -1; WID(Clino) = WID(BackClino) = 0; inferred_equate: fMulti = fTrue; while (1) { process_eol(); skipblanks(); if (isData(ch)) break; if (!isComm(ch)) { return; } } break; case IgnoreAll: skipline(); /* fall through */ case End: if (!fMulti) { int save_flags; int implicit_splay; /* Compass ignore flag is 'X' */ if ((compass_dat_flags & BIT('X' - 'A'))) { process_eol(); return; } if (fRev) { prefix *t = fr; fr = to; to = t; } if (fTopofil) { VAL(Tape) = VAL(ToCount) - VAL(FrCount); LOC(Tape) = LOC(ToCount); WID(Tape) = WID(ToCount); } /* Note: frdepth == todepth test works regardless of fDepthChange * (frdepth always zero, todepth is change of depth) and also * works for STYLE_NORMAL (both remain 0) */ if (TSTBIT(pcs->infer, INFER_EQUATES) && (VAL(Tape) == (real)0.0 || VAL(Tape) == HUGE_REAL) && (VAL(BackTape) == (real)0.0 || VAL(BackTape) == HUGE_REAL) && VAL(FrDepth) == VAL(ToDepth)) { process_equate(fr, to); process_eol(); return; } if (fTopofil) { VAL(Tape) *= pcs->units[Q_COUNT] * pcs->sc[Q_COUNT]; } else if (VAL(Tape) != HUGE_REAL) { VAL(Tape) *= pcs->units[Q_LENGTH]; VAL(Tape) -= pcs->z[Q_LENGTH]; VAL(Tape) *= pcs->sc[Q_LENGTH]; } if (VAL(BackTape) != HUGE_REAL) { VAL(BackTape) *= pcs->units[Q_BACKLENGTH]; VAL(BackTape) -= pcs->z[Q_BACKLENGTH]; VAL(BackTape) *= pcs->sc[Q_BACKLENGTH]; if (VAL(Tape) != HUGE_REAL) { real diff = VAL(Tape) - VAL(BackTape); if (sqrd(diff / 3.0) > VAR(Tape) + VAR(BackTape)) { /* fore and back readings differ by more than 3 sds */ /* TRANSLATORS: %s is replaced by the amount the readings disagree * by, e.g. "0.12m" or "0.2ft". */ warn_readings_differ(/*TAPE reading and BACKTAPE reading disagree by %s*/97, diff, get_length_units(Q_LENGTH)); } VAL(Tape) = VAL(Tape) / VAR(Tape) + VAL(BackTape) / VAR(BackTape); VAR(Tape) = (VAR(Tape) + VAR(BackTape)) / 4; VAL(Tape) *= VAR(Tape); } else { VAL(Tape) = VAL(BackTape); VAR(Tape) = VAR(BackTape); } } else if (VAL(Tape) == HUGE_REAL) { compile_diagnostic_reading(DIAG_ERR, Tape, /*Tape reading may not be omitted*/94); process_eol(); return; } implicit_splay = TSTBIT(pcs->flags, FLAGS_IMPLICIT_SPLAY); pcs->flags &= ~(BIT(FLAGS_ANON_ONE_END) | BIT(FLAGS_IMPLICIT_SPLAY)); save_flags = pcs->flags; if (implicit_splay) { pcs->flags |= BIT(FLAGS_SPLAY); } if ((compass_dat_flags & BIT('L' - 'A'))) { /* 'L' means "exclude from length" - map this to Survex's * FLAGS_DUPLICATE. */ pcs->flags |= BIT(FLAGS_DUPLICATE); } switch (pcs->style) { case STYLE_NORMAL: process_normal(fr, to, (first_stn == To) ^ fRev, ctype, backctype); break; case STYLE_DIVING: /* FIXME: Handle any clino readings */ process_diving(fr, to, (first_stn == To) ^ fRev, fDepthChange); break; case STYLE_CYLPOLAR: process_cylpolar(fr, to, (first_stn == To) ^ fRev, fDepthChange); break; default: BUG("bad style"); } pcs->flags = save_flags; process_eol(); return; } do { process_eol(); skipblanks(); } while (isComm(ch)); goto again; default: BUG("Unknown reading in ordering"); } } } static int process_lrud(prefix *stn) { SVX_ASSERT(next_lrud); lrud * xsect = osnew(lrud); xsect->stn = stn; xsect->l = (VAL(Left) * pcs->units[Q_LEFT] - pcs->z[Q_LEFT]) * pcs->sc[Q_LEFT]; xsect->r = (VAL(Right) * pcs->units[Q_RIGHT] - pcs->z[Q_RIGHT]) * pcs->sc[Q_RIGHT]; xsect->u = (VAL(Up) * pcs->units[Q_UP] - pcs->z[Q_UP]) * pcs->sc[Q_UP]; xsect->d = (VAL(Down) * pcs->units[Q_DOWN] - pcs->z[Q_DOWN]) * pcs->sc[Q_DOWN]; xsect->meta = pcs->meta; if (pcs->meta) ++pcs->meta->ref_count; xsect->next = NULL; *next_lrud = xsect; next_lrud = &(xsect->next); return 1; } static void data_passage(void) { prefix *stn = NULL; const reading *ordering; for (ordering = pcs->ordering ; ; ordering++) { skipblanks(); switch (*ordering) { case Station: stn = read_prefix(PFX_STATION); break; case Left: case Right: case Up: case Down: { reading r = *ordering; read_reading(r, fTrue); if (VAL(r) == HUGE_REAL) { if (!isOmit(ch)) { compile_diagnostic_token_show(DIAG_ERR, /*Expecting numeric field, found “%sâ€*/9); } else { nextch(); } VAL(r) = -1; } break; } case Ignore: skipword(); break; case IgnoreAll: skipline(); /* fall through */ case End: { process_lrud(stn); process_eol(); return; } default: BUG("Unknown reading in ordering"); } } } static int process_nosurvey(prefix *fr, prefix *to, bool fToFirst) { nosurveylink *link; /* Suppress "unused fixed point" warnings for these stations */ fr->sflags |= BIT(SFLAGS_USED); to->sflags |= BIT(SFLAGS_USED); /* add to linked list which is dealt with after network is solved */ link = osnew(nosurveylink); if (fToFirst) { link->to = StnFromPfx(to); link->fr = StnFromPfx(fr); } else { link->fr = StnFromPfx(fr); link->to = StnFromPfx(to); } link->flags = pcs->flags | (STYLE_NOSURVEY << FLAGS_STYLE_BIT0); link->meta = pcs->meta; if (pcs->meta) ++pcs->meta->ref_count; link->next = nosurveyhead; nosurveyhead = link; return 1; } static void data_nosurvey(void) { prefix *fr = NULL, *to = NULL; bool fMulti = fFalse; reading first_stn = End; const reading *ordering; again: for (ordering = pcs->ordering ; ; ordering++) { skipblanks(); switch (*ordering) { case Fr: fr = read_prefix(PFX_STATION|PFX_ALLOW_ROOT); if (first_stn == End) first_stn = Fr; break; case To: to = read_prefix(PFX_STATION|PFX_ALLOW_ROOT); if (first_stn == End) first_stn = To; break; case Station: fr = to; to = read_prefix(PFX_STATION); first_stn = To; break; case Ignore: skipword(); break; case IgnoreAllAndNewLine: skipline(); /* fall through */ case Newline: if (fr != NULL) { if (!process_nosurvey(fr, to, first_stn == To)) skipline(); } if (ordering[1] == End) { do { process_eol(); skipblanks(); } while (isComm(ch)); if (!isData(ch)) { return; } goto again; } fMulti = fTrue; while (1) { process_eol(); skipblanks(); if (isData(ch)) break; if (!isComm(ch)) { return; } } break; case IgnoreAll: skipline(); /* fall through */ case End: if (!fMulti) { (void)process_nosurvey(fr, to, first_stn == To); process_eol(); return; } do { process_eol(); skipblanks(); } while (isComm(ch)); goto again; default: BUG("Unknown reading in ordering"); } } } /* totally ignore a line of survey data */ static void data_ignore(void) { skipline(); process_eol(); } survex-1.4.4/src/gfxcore.h0000644000175000017500000004553314212333075012404 00000000000000// // gfxcore.h // // Core drawing code for Aven. // // Copyright (C) 2000-2001,2002,2005 Mark R. Shinwell. // Copyright (C) 2001-2004,2005,2006,2007,2010,2011,2012,2013,2014,2015,2016,2017,2018 Olly Betts // Copyright (C) 2005 Martin Green // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef gfxcore_h #define gfxcore_h #include #include #include #include "img_hosted.h" #include "guicontrol.h" #include "labelinfo.h" #include "vector3.h" #include "wx.h" #include "gla.h" #include #include #include using namespace std; class MainFrm; class traverse; class XSect; class PointInfo; class MovieMaker; class PresentationMark : public Point { public: Double angle, tilt_angle; Double scale; Double time; PresentationMark() : Point(), angle(0), tilt_angle(0), scale(0), time(0) { } PresentationMark(const Vector3 & v, Double angle_, Double tilt_angle_, Double scale_, Double time_ = 0) : Point(v), angle(angle_), tilt_angle(tilt_angle_), scale(scale_), time(time_) { } bool is_valid() const { return scale > 0; } }; struct ZoomBox { public: int x1, y1, x2, y2; ZoomBox() : x1(INT_MAX) { } bool active() const { return x1 != INT_MAX; } void set(const wxPoint & p1, const wxPoint & p2) { x1 = p1.x; y1 = p1.y; x2 = p2.x; y2 = p2.y; } void unset() { x1 = INT_MAX; } }; enum { COLOUR_BY_NONE, COLOUR_BY_DEPTH, COLOUR_BY_DATE, COLOUR_BY_ERROR, COLOUR_BY_H_ERROR, COLOUR_BY_V_ERROR, COLOUR_BY_GRADIENT, COLOUR_BY_LENGTH, COLOUR_BY_SURVEY, COLOUR_BY_STYLE, COLOUR_BY_LIMIT_ // Leave this last. }; enum { UPDATE_NONE, UPDATE_BLOBS, UPDATE_BLOBS_AND_CROSSES }; enum { SHOW_HIDE, SHOW_DASHED, SHOW_FADED, SHOW_NORMAL, }; struct Split { Vector3 vec; glaCoord tx, ty; Split(const Vector3& vec_, glaCoord tx_, glaCoord ty_) : vec(vec_), tx(tx_), ty(ty_) { } }; // It's pointless to redraw the screen as often as we can on a fast machine, // since the display hardware will only update so many times per second. // This is the maximum framerate we'll redraw at. const int MAX_FRAMERATE = 50; class GfxCore : public GLACanvas { Double m_Scale; Double initial_scale; int m_ScaleBarWidth; typedef enum { LIST_COMPASS, LIST_CLINO, LIST_CLINO_BACK, LIST_SCALE_BAR, LIST_DEPTH_KEY, LIST_DATE_KEY, LIST_ERROR_KEY, LIST_GRADIENT_KEY, LIST_LENGTH_KEY, LIST_STYLE_KEY, LIST_UNDERGROUND_LEGS, LIST_TUBES, LIST_SURFACE_LEGS, LIST_BLOBS, LIST_CROSSES, LIST_GRID, LIST_SHADOW, LIST_TERRAIN, LIST_LIMIT_ // Leave this last. } drawing_list; static const int NUM_COLOUR_BANDS = 13; void SetPanBase() { base_pan = m_PanAngle; base_pan_time = timer.Time() - (1000 / MAX_FRAMERATE); } void SetTiltBase() { base_tilt = m_TiltAngle; base_tilt_time = timer.Time() - (1000 / MAX_FRAMERATE); } int GetCompassWidth() const; int GetClinoWidth() const; public: typedef enum { CURSOR_DEFAULT, CURSOR_POINTING_HAND, CURSOR_DRAGGING_HAND, CURSOR_HORIZONTAL_RESIZE, CURSOR_ROTATE_HORIZONTALLY, CURSOR_ROTATE_VERTICALLY, CURSOR_ROTATE_EITHER_WAY, CURSOR_ZOOM, CURSOR_ZOOM_ROTATE } cursor; private: GUIControl* m_Control; char* m_LabelGrid; MainFrm* m_Parent; bool m_DoneFirstShow; Double m_TiltAngle; Double m_PanAngle; bool m_Rotating; Double m_RotationStep; int m_SwitchingTo; bool m_Crosses; bool m_Legs; int m_Splays; int m_Dupes; bool m_Names; bool m_Scalebar; bool m_ColourKey; bool m_OverlappingNames; bool m_Compass; bool m_Clino; bool m_Tubes; int m_ColourBy; int error_type; bool m_HaveData; bool m_HaveTerrain; bool m_MouseOutsideCompass; bool m_MouseOutsideElev; bool m_Surface; bool m_Entrances; bool m_FixedPts; bool m_ExportedPts; bool m_Grid; bool m_BoundingBox; bool m_Terrain; bool m_Degrees; bool m_Metric; bool m_Percent; bool m_HitTestDebug; bool m_RenderStats; list *m_PointGrid; bool m_HitTestGridValid; LabelInfo temp_here; const LabelInfo * m_here; const LabelInfo * m_there; wxString highlighted_survey; wxStopWatch timer; long base_tilt_time; long base_pan_time; Double base_tilt; Double base_pan; GLAPen m_Pens[NUM_COLOUR_BANDS + 1]; #define PLAYING 1 int presentation_mode; // for now, 0 => off, PLAYING => continuous play bool pres_reverse; double pres_speed; PresentationMark next_mark; double next_mark_time; double this_mark_total; MovieMaker * movie; cursor current_cursor; int sqrd_measure_threshold; // The legends for each entry in the colour key. wxString key_legends[NUM_COLOUR_BANDS]; wxPoint key_lowerleft[COLOUR_BY_LIMIT_]; ZoomBox zoombox; // Copied from parent, so we can adjust view when reloading the same // file with the view restricted. Vector3 offsets; // DEM: unsigned short * dem; unsigned long dem_width, dem_height; double o_x, o_y, step_x, step_y; long nodata_value; bool bigendian; long last_time; size_t n_tris; void PlaceVertexWithColour(const Vector3 &v, Double factor = 1.0); void PlaceVertexWithColour(const Vector3 & v, glaTexCoord tex_x, glaTexCoord tex_y, Double factor); void SetDepthColour(Double z, Double factor); void PlaceVertexWithDepthColour(const Vector3 & v, Double factor = 1.0); void PlaceVertexWithDepthColour(const Vector3 & v, glaTexCoord tex_x, glaTexCoord tex_y, Double factor); void SetColourFrom01(double how_far, Double factor); void SetColourFromDate(int date, Double factor); void SetColourFromError(double E, Double factor); void SetColourFromGradient(double angle, Double factor); void SetColourFromLength(double len, Double factor); void SetColourFromSurvey(const wxString& survey); void SetColourFromSurveyStation(const wxString& survey, Double factor); int GetClinoOffset() const; void DrawTick(int angle_cw); void DrawArrow(gla_colour col1, gla_colour col2); void SkinPassage(vector & centreline); virtual void GenerateList(unsigned int l); void GenerateDisplayList(bool surface); void GenerateDisplayListTubes(); void DrawTerrainTriangle(const Vector3 & a, const Vector3 & b, const Vector3 & c); void DrawTerrain(); void GenerateDisplayListShadow(); void GenerateBlobsDisplayList(); void DrawIndicators(); void TryToFreeArrays(); void FirstShow(); void DrawScaleBar(); void DrawColourKey(int num_bands, const wxString & other, const wxString & units); void DrawDepthKey(); void DrawDateKey(); void DrawErrorKey(); void DrawGradientKey(); void DrawLengthKey(); void DrawStyleKey(); void DrawCompass(); void DrawClino(); void DrawClinoBack(); void Draw2dIndicators(); void DrawGrid(); void NattyDrawNames(); void SimpleDrawNames(); void DefaultParameters(); void Repaint(); void CreateHitTestGrid(); int GetCompassXPosition() const; int GetClinoXPosition() const; int GetIndicatorYPosition() const; int GetIndicatorRadius() const; void ToggleFlag(bool* flag, int update = UPDATE_NONE); const GLAPen& GetPen(int band) const { assert(band >= 0 && band < NUM_COLOUR_BANDS); return m_Pens[band]; } const GLAPen& GetSurfacePen() const { return m_Pens[NUM_COLOUR_BANDS]; } int GetNumColourBands() const { return NUM_COLOUR_BANDS; } void DrawShadowedBoundingBox(); void DrawBoundingBox(); public: GfxCore(MainFrm* parent, wxWindow* parent_window, GUIControl* control); ~GfxCore(); void Initialise(bool same_file); void UpdateBlobs(); void ForceRefresh(); void RefreshLine(const Point* a, const Point* b, const Point* c); void SetHereSurvey(const wxString& survey) { if (survey != highlighted_survey) { highlighted_survey = survey; ForceRefresh(); } } void HighlightSurvey(); void ZoomToSurvey(const wxString& survey); void SetHereFromTree(const LabelInfo * p); void SetHere(const LabelInfo * p = NULL); void SetThere(const LabelInfo * p = NULL); const LabelInfo* GetThere() const { return m_there; } void CentreOn(const Point &p); void TranslateCave(int dx, int dy); void TiltCave(Double tilt_angle); void TurnCave(Double angle); void TurnCaveTo(Double angle); void OnPaint(wxPaintEvent&); void OnSize(wxSizeEvent& event); void OnIdle(wxIdleEvent& event); void OnMouseMove(wxMouseEvent& event) { ScaleMouseEvent(event); m_Control->OnMouseMove(event); } void OnLeaveWindow(wxMouseEvent& event); void OnLButtonDown(wxMouseEvent& event) { ScaleMouseEvent(event); SetFocus(); m_Control->OnLButtonDown(event); } void OnLButtonUp(wxMouseEvent& event) { ScaleMouseEvent(event); m_Control->OnLButtonUp(event); } void OnMButtonDown(wxMouseEvent& event) { ScaleMouseEvent(event); SetFocus(); m_Control->OnMButtonDown(event); } void OnMButtonUp(wxMouseEvent& event) { ScaleMouseEvent(event); m_Control->OnMButtonUp(event); } void OnRButtonDown(wxMouseEvent& event) { ScaleMouseEvent(event); SetFocus(); m_Control->OnRButtonDown(event); } void OnRButtonUp(wxMouseEvent& event) { ScaleMouseEvent(event); m_Control->OnRButtonUp(event); } void OnMouseWheel(wxMouseEvent& event) { ScaleMouseEvent(event); SetFocus(); m_Control->OnMouseWheel(event); } void OnKeyPress(wxKeyEvent &event) { m_Control->OnKeyPress(event); } void Animate(); bool Animating() const { return m_Rotating || m_SwitchingTo || presentation_mode != 0; } void ClearCoords(); void SetCoords(wxPoint); // Determine whether the compass is currently shown. bool ShowingCompass() const { return m_Compass; } // Determine whether the clino is currently shown. bool ShowingClino() const { return m_Clino; } bool PointWithinCompass(wxPoint point) const; bool PointWithinClino(wxPoint point) const; bool PointWithinScaleBar(wxPoint point) const; bool PointWithinColourKey(wxPoint point) const; void SetCompassFromPoint(wxPoint point); void SetClinoFromPoint(wxPoint point); void SetScaleBarFromOffset(wxCoord dx); void RedrawIndicators(); void StartRotation(); void ToggleRotation(); void StopRotation(); bool IsExtendedElevation() const; void ReverseRotation(); void RotateSlower(bool accel); void RotateFaster(bool accel); void SwitchToElevation(); void SwitchToPlan(); void SetViewTo(Double xmin, Double xmax, Double ymin, Double ymax, Double zmin, Double zmax); double GetCompassValue() const { return m_PanAngle; } bool ShowingPlan() const; bool ShowingElevation() const; bool ShowingMeasuringLine() const; bool HereIsReal() const { return m_here && m_here != &temp_here; } bool CanRaiseViewpoint() const; bool CanLowerViewpoint() const; bool IsRotating() const { return m_Rotating; } bool HasData() const { return m_DoneFirstShow && m_HaveData; } bool HasTerrain() const { return m_DoneFirstShow && m_HaveTerrain; } bool HasDepth() const; bool HasErrorInformation() const; bool HasDateInformation() const; double GetScale() const { return m_Scale; } void SetScale(Double scale); bool ShowingStationNames() const { return m_Names; } bool ShowingOverlappingNames() const { return m_OverlappingNames; } bool ShowingCrosses() const { return m_Crosses; } bool ShowingGrid() const { return m_Grid; } int ColouringBy() const { return m_ColourBy; } bool HasUndergroundLegs() const; bool HasSplays() const; bool HasDupes() const; bool HasSurfaceLegs() const; bool HasTubes() const; bool ShowingUndergroundLegs() const { return m_Legs; } int ShowingSplaysMode() const { return m_Splays; } int ShowingDupesMode() const { return m_Dupes; } bool ShowingSurfaceLegs() const { return m_Surface; } bool ShowingColourKey() const { return m_ColourKey; } bool ShowingScaleBar() const { return m_Scalebar; } bool ShowingEntrances() const { return m_Entrances; } bool ShowingFixedPts() const { return m_FixedPts; } bool ShowingExportedPts() const { return m_ExportedPts; } int GetNumEntrances() const; int GetNumFixedPts() const; int GetNumExportedPts() const; void ToggleUndergroundLegs() { ToggleFlag(&m_Legs, UPDATE_BLOBS_AND_CROSSES); } void SetSplaysMode(int mode) { m_Splays = mode; UpdateBlobs(); InvalidateList(LIST_SURFACE_LEGS); InvalidateList(LIST_UNDERGROUND_LEGS); InvalidateList(LIST_CROSSES); m_HitTestGridValid = false; ForceRefresh(); } void SetDupesMode(int mode) { m_Dupes = mode; UpdateBlobs(); InvalidateList(LIST_SURFACE_LEGS); InvalidateList(LIST_UNDERGROUND_LEGS); ForceRefresh(); } void ToggleSurfaceLegs() { ToggleFlag(&m_Surface, UPDATE_BLOBS_AND_CROSSES); } void ToggleCompass() { ToggleFlag(&m_Compass); InvalidateList(LIST_SCALE_BAR); } void ToggleClino() { ToggleFlag(&m_Clino); InvalidateList(LIST_SCALE_BAR); } void ToggleScaleBar() { ToggleFlag(&m_Scalebar); } void ToggleEntrances() { ToggleFlag(&m_Entrances, UPDATE_BLOBS); } void ToggleFixedPts() { ToggleFlag(&m_FixedPts, UPDATE_BLOBS); } void ToggleExportedPts() { ToggleFlag(&m_ExportedPts, UPDATE_BLOBS); } void ToggleGrid() { ToggleFlag(&m_Grid); } void ToggleCrosses() { ToggleFlag(&m_Crosses); } void ToggleStationNames() { ToggleFlag(&m_Names); } void ToggleOverlappingNames() { ToggleFlag(&m_OverlappingNames); } void ToggleColourKey() { ToggleFlag(&m_ColourKey); } void ToggleMetric() { ToggleFlag(&m_Metric); InvalidateList(LIST_DEPTH_KEY); InvalidateList(LIST_LENGTH_KEY); InvalidateList(LIST_SCALE_BAR); } void ToggleHitTestDebug() { ToggleFlag(&m_HitTestDebug); } void ToggleRenderStats() { ToggleFlag(&m_RenderStats); } void ToggleDegrees() { ToggleFlag(&m_Degrees); InvalidateList(LIST_GRADIENT_KEY); } void TogglePercent() { ToggleFlag(&m_Percent); } void ToggleTubes() { ToggleFlag(&m_Tubes); } void TogglePerspective() { GLACanvas::TogglePerspective(); ForceRefresh(); } void ToggleSmoothShading(); bool DisplayingBoundingBox() const { return m_BoundingBox; } void ToggleBoundingBox() { ToggleFlag(&m_BoundingBox); } bool DisplayingTerrain() const { return m_Terrain; } void ToggleTerrain(); void ToggleFatFinger(); void ToggleTextured() { GLACanvas::ToggleTextured(); ForceRefresh(); } bool GetMetric() const { return m_Metric; } bool GetDegrees() const { return m_Degrees; } bool GetPercent() const { return m_Percent; } bool GetTubes() const { return m_Tubes; } bool CheckHitTestGrid(const wxPoint& point, bool centre); void ClearTreeSelection(); void Defaults(); void FullScreenMode(); bool IsFullScreen() const; bool FullScreenModeShowingMenus() const; void FullScreenModeShowMenus(bool show); void DragFinished(); void SplitLineAcrossBands(int band, int band2, const Vector3 &p, const Vector3 &q, Double factor = 1.0); void SplitPolyAcrossBands(vector>& splits, int band, int band2, const Vector3 &p, const Vector3 &q, glaTexCoord ptx, glaTexCoord pty, glaTexCoord w, glaTexCoord h); int GetDepthColour(Double z) const; Double GetDepthBoundaryBetweenBands(int a, int b) const; void AddPolyline(const traverse & centreline); void AddPolylineDepth(const traverse & centreline); void AddPolylineDate(const traverse & centreline); void AddPolylineError(const traverse & centreline); void AddPolylineGradient(const traverse & centreline); void AddPolylineLength(const traverse & centreline); void AddPolylineSurvey(const traverse & centreline); void AddPolylineStyle(const traverse & centreline); void AddQuadrilateral(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddPolylineShadow(const traverse & centreline); void AddQuadrilateralDepth(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddQuadrilateralDate(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddQuadrilateralError(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddQuadrilateralGradient(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddQuadrilateralLength(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void AddQuadrilateralSurvey(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void MoveViewer(double forward, double up, double right); void (GfxCore::* AddQuad)(const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &d); void (GfxCore::* AddPoly)(const traverse & centreline); PresentationMark GetView() const; void SetView(const PresentationMark & p); void PlayPres(double speed, bool change_speed = true); int GetPresentationMode() const { return presentation_mode; } double GetPresentationSpeed() const { return presentation_mode ? pres_speed : 0; } void SetColourBy(int colour_by); bool ExportMovie(const wxString & fnm); void OnPrint(const wxString &filename, const wxString &title, const wxString &datestamp, bool close_after_print = false); void OnExport(const wxString &filename, const wxString &title, const wxString &datestamp); void UpdateCursor(GfxCore::cursor new_cursor); bool MeasuringLineActive() const; bool HandleRClick(wxPoint point); void InvalidateAllLists() { for (int i = 0; i < LIST_LIMIT_; ++i) { InvalidateList(i); } } void SetZoomBox(wxPoint p1, wxPoint p2, bool centred, bool aspect); void UnsetZoomBox() { if (!zoombox.active()) return; zoombox.unset(); ForceRefresh(); } void ZoomBoxGo(); void parse_hgt_filename(const wxString & lc_name); size_t parse_hdr(wxInputStream & is, unsigned long & skipbytes); bool read_bil(wxInputStream & is, size_t size, unsigned long skipbytes); bool LoadDEM(const wxString & file); private: DECLARE_EVENT_TABLE() }; #endif survex-1.4.4/src/cmdline.c0000644000175000017500000001611614141575516012361 00000000000000/* cmdline.c * Wrapper for GNU getopt which deals with standard options * Copyright (C) 1998-2001,2003,2004,2011,2012,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "getopt.h" #include "cmdline.h" #include "debug.h" #include "filename.h" #include "message.h" /* It might be useful to be able to disable all long options on small * platforms like older PDAs. */ #if 0 # define getopt_long(ARGC, ARGV, STR, OPTS, PTR) getopt(ARGC, ARGV, STR) #endif /* * bad command line give: * * * * * --help gives: * * * * * * * * * --version gives: * */ /* * want to cope with optional/required parameters on long options * and also parameters on short options */ static const char newline_tabs[] = "\n\t\t\t\t"; static int argc; static char * const *argv; static const char *shortopts; static const struct option *longopts; static int *longind; static const struct help_msg *help; static int min_args, max_args; static int msg_args, msg_extra; static const char * msg_extra_arg; void cmdline_help(void) { while (help && help->opt) { const char *longopt = 0; int opt = help->opt; const struct option *o = 0; if (HLP_ISLONG(opt)) { o = longopts + HLP_DECODELONG(opt); longopt = o->name; opt = o->val; } if (isalnum((unsigned char)opt)) printf(" -%c%c", opt, longopt ? ',' : ' '); else fputs(" ", stdout); if (longopt) { int len = strlen(longopt); printf(" --%s", longopt); if (o && o->has_arg) { const char *p; len += len + 1; if (o->has_arg == optional_argument) { putchar('['); len += 2; } putchar('='); for (p = longopt; *p ; p++) putchar(toupper(*p)); if (o->has_arg == optional_argument) putchar(']'); } len = (len >> 3) + 2; if (len > 4) len = 0; fputs(newline_tabs + len, stdout); } else { fputs(newline_tabs + 1, stdout); } if (help->arg) { SVX_ASSERT(strstr(msg(help->msg_no), "%s") != NULL); printf(msg(help->msg_no), help->arg); putnl(); } else { SVX_ASSERT(strstr(msg(help->msg_no), "%s") == NULL); puts(msg(help->msg_no)); } help++; } fputs(" --help\t\t\t", stdout); /* TRANSLATORS: description of --help option */ puts(msg(/*display this help and exit*/150)); fputs(" --version\t\t\t", stdout); /* TRANSLATORS: description of --version option */ puts(msg(/*output version information and exit*/151)); if (msg_extra) { putnl(); if (msg_extra_arg) { SVX_ASSERT(strstr(msg(msg_extra), "%s") != NULL); printf(msg(msg_extra), msg_extra_arg); putnl(); } else { SVX_ASSERT(strstr(msg(msg_extra), "%s") == NULL); puts(msg(msg_extra)); } } exit(0); } void cmdline_version(void) { printf("%s - "PRETTYPACKAGE" "VERSION"\n", msg_appname()); } void cmdline_syntax(void) { /* TRANSLATORS: as in: Usage: cavern … */ printf("\n%s: %s", msg(/*Usage*/49), msg_appname()); /* TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… */ if (help && help->opt) printf(" [%s]...", msg(/*OPTION*/153)); if (msg_args) { putchar(' '); puts(msg(msg_args)); return; } if (min_args) { int i = min_args; while (i--) printf(" %s", msg(/*FILE*/124)); } if (max_args == -1) { if (!min_args) printf(" [%s]", msg(/*FILE*/124)); fputs("...", stdout); } else if (max_args > min_args) { int i = max_args - min_args; while (i--) printf(" [%s]", msg(/*FILE*/124)); } putnl(); } static void syntax_and_help_pointer(void) { cmdline_syntax(); fprintf(stderr, msg(/*Try “%s --help†for more information.\n*/157), msg_appname()); exit(1); } static void moan_and_die(int msgno) { fprintf(stderr, "%s: ", msg_appname()); fprintf(stderr, msg(msgno), optarg); fputnl(stderr); cmdline_syntax(); exit(1); } void cmdline_too_few_args(void) { fprintf(stderr, "%s: %s\n", msg_appname(), msg(/*too few arguments*/122)); syntax_and_help_pointer(); } void cmdline_too_many_args(void) { fprintf(stderr, "%s: %s\n", msg_appname(), msg(/*too many arguments*/123)); syntax_and_help_pointer(); } void cmdline_set_syntax_message(int msg_args_, int msg_extra_, const char * arg) { msg_args = msg_args_; msg_extra = msg_extra_; msg_extra_arg = arg; } int cmdline_int_arg(void) { long result; char *endptr; errno = 0; result = strtol(optarg, &endptr, 10); if (errno == ERANGE || result > INT_MAX || result < INT_MIN) { moan_and_die(/*numeric argument “%s†out of range*/185); } else if (*optarg == '\0' || *endptr != '\0') { moan_and_die(/*argument “%s†not an integer*/186); } return (int)result; } double cmdline_double_arg(void) { double result; char *endptr; errno = 0; result = strtod(optarg, &endptr); if (errno == ERANGE) { moan_and_die(/*numeric argument “%s†out of range*/185); } else if (*optarg == '\0' || *endptr != '\0') { moan_and_die(/*argument “%s†not a number*/187); } return result; } void cmdline_init(int argc_, char *const *argv_, const char *shortopts_, const struct option *longopts_, int *longind_, const struct help_msg *help_, int min_args_, int max_args_) { argc = argc_; argv = argv_; shortopts = shortopts_; longopts = longopts_; longind = longind_; help = help_; min_args = min_args_; max_args = max_args_; } int cmdline_getopt(void) { int opt = getopt_long(argc, argv, shortopts, longopts, longind); switch (opt) { case EOF: /* check valid # of args given - if not give syntax message */ if (argc - optind < min_args) { cmdline_too_few_args(); } else if (max_args >= 0 && argc - optind > max_args) { cmdline_too_many_args(); } break; case ':': /* parameter missing */ case '?': /* unknown opt, ambiguous match, or extraneous param */ /* getopt displays a message for us */ syntax_and_help_pointer(); break; case HLP_VERSION: /* --version */ cmdline_version(); exit(0); case HLP_HELP: /* --help */ cmdline_version(); cmdline_syntax(); putchar('\n'); cmdline_help(); exit(0); } return opt; } survex-1.4.4/src/export3d.h0000644000175000017500000000252714312174725012521 00000000000000/* export3d.h * Export from Aven as Survex .3d. */ /* Copyright (C) 2005,2013,2014,2015,2018,2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" #include #include "img.h" class Export3D : public ExportFilter { private: char separator; img* pimg = nullptr; public: Export3D(char separator_) : separator(separator_) { } ~Export3D(); const int * passes() const; void header(const char *, const char *, time_t, double, double, double, double, double, double); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void footer(); }; survex-1.4.4/src/rotatemask.xbm0000644000175000017500000000160714141575516013463 00000000000000#define rotatemask_width 32 #define rotatemask_height 32 static unsigned char rotatemask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xf8, 0x07, 0xc0, 0x1f, 0xf0, 0x07, 0xc0, 0x0f, 0xe0, 0x07, 0xc0, 0x1f, 0xf0, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xfe, 0xff, 0x06, 0x40, 0xf8, 0x3f, 0x04, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/log.cc0000644000175000017500000000256014141575516011670 00000000000000// log.cc - Error log window for Aven. // // Copyright (C) 2006,2011,2014 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "aven.h" #include "log.h" #include "gla.h" MyLogWindow::MyLogWindow() /* TRANSLATORS: %s will be replaced by the application name ("Aven" * currently) */ : wxLogWindow(NULL, wxString::Format(wmsg(/*%s Error Log*/228), APP_NAME).c_str(), false, false), first(true) { } void MyLogWindow::DoLogText(const wxString & msg) { if (first) { wxLogWindow::DoLogText(wxString(GetGLSystemDescription().c_str(), wxConvUTF8)); first = false; } wxLogWindow::DoLogText(msg); Show(); } survex-1.4.4/src/getopt.c0000644000175000017500000010353214141575516012247 00000000000000/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #ifdef HAVE_CONFIG_H # include #endif #include "message.h" #define _ #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifndef _ # define _(msgid) gettext (msgid) # endif # else # define _(msgid) (msgid) # endif # if defined _LIBC && defined USE_IN_LIBIO # include # endif #endif #ifndef attribute_hidden # define attribute_hidden #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized attribute_hidden; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else # if HAVE_STRING_H # include # else # include # endif /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv /* avoid "warning C4273: 'getenv' : inconsistent dll linkage." */ #ifndef __WIN32__ extern char *getenv (); #endif #endif static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (posixly_correct == NULL && argc == __libc_argc && argv == __libc_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { int print_errors = opterr; if (optstring[0] == ':') print_errors = 0; if (argc < 1) return -1; optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[optind - 1][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); #else fprintf (stderr, _("\ %s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); #else fprintf (stderr, _("\ %s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[optind][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); #else fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); #else fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif #if 0 if (posixly_correct) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: illegal option -- %c\n"), argv[0], c); #else fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); #endif } else #endif { #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: invalid option -- %c\n"), argv[0], c); #else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #endif } optopt = c; return '?'; } #if 0 /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option requires an argument -- %c\n"), argv[0], c) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } #endif if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option requires an argument -- %c\n"), argv[0], c) >= 0) { if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ survex-1.4.4/src/namecompare.h0000644000175000017500000000163314141575516013240 00000000000000/* namecompare.h */ /* Ordering function for station names */ /* Copyright (C) 2001,2002,2008,2012 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "wx.h" extern int name_cmp(const wxString &a, const wxString &b, int separator); survex-1.4.4/src/date.c0000644000175000017500000000564114141575516011664 00000000000000/* date.c * Routines for date handling * Copyright (C) 2010,2015,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "date.h" #include "debug.h" int is_leap_year(int year) { return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); } unsigned int last_day(int year, int month) { static const unsigned char lastday[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; SVX_ASSERT(month >= 1 && month <= 12); return (month == 2 && is_leap_year(year)) ? 29 : lastday[month]; } int days_since_1900(int y, int m, int d) { static const int m_to_d[12] = { 0 - (1900 * 365) - 461 + 365, 31 - (1900 * 365) - 461 + 365, 59 - (1900 * 365) - 461, 90 - (1900 * 365) - 461, 120 - (1900 * 365) - 461, 151 - (1900 * 365) - 461, 181 - (1900 * 365) - 461, 212 - (1900 * 365) - 461, 243 - (1900 * 365) - 461, 273 - (1900 * 365) - 461, 304 - (1900 * 365) - 461, 334 - (1900 * 365) - 461 }; if (m < 3) --y; return d + (y * 365) + m_to_d[m - 1] + (y / 4) - (y / 100) + (y / 400); } void ymd_from_days_since_1900(int days, int * py, int * pm, int * pd) { int g, dg, c, dc, b, db, a, da, y, m; days += 693901; g = days / 146097; dg = days % 146097; c = (dg / 36524 + 1) * 3 / 4; dc = dg - c * 36524; b = dc / 1461; db = dc % 1461; a = (db / 365 + 1) * 3 / 4; da = db - a * 365; y = g * 400 + c * 100 + b * 4 + a; m = (da * 5 + 308) / 153; *py = y + m / 12; *pm = m % 12 + 1; *pd = da - (m + 2) * 153 / 5 + 123; } double julian_date_from_days_since_1900(int days) { int g, dg, c, dc, b, db, a, da, y, m; int days_in = days; int dys; double scale; days += 693901; g = days / 146097; dg = days % 146097; c = (dg / 36524 + 1) * 3 / 4; dc = dg - c * 36524; b = dc / 1461; db = dc % 1461; a = (db / 365 + 1) * 3 / 4; da = db - a * 365; y = g * 400 + c * 100 + b * 4 + a; m = (da * 5 + 308) / 153; y = y + m / 12; /* dys is days since 1900 for the start of the year y. */ dys = (y - 1900) * 365 - 460; dys += ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400); scale = (is_leap_year(y) ? 1 / 366.0 : 1 / 365.0); return y + scale * (days_in - dys); } survex-1.4.4/src/gla-gl.cc0000644000175000017500000014277514240572457012270 00000000000000// // gla-gl.cc // // OpenGL implementation for the GLA abstraction layer. // // Copyright (C) 2002-2003,2005 Mark R. Shinwell // Copyright (C) 2003-2022 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "aven.h" #include "gla.h" #include "gllogerror.h" #include "message.h" #include "useful.h" #ifdef HAVE_GL_GL_H # include #elif defined HAVE_OPENGL_GL_H # include #endif #ifdef HAVE_GL_GLEXT_H # include #elif defined HAVE_OPENGL_GLEXT_H # include #endif #ifndef GL_POINT_SIZE_MAX #define GL_POINT_SIZE_MAX 0x8127 #endif #ifndef GL_POINT_SPRITE #define GL_POINT_SPRITE 0x8861 #endif #ifndef GL_COORD_REPLACE #define GL_COORD_REPLACE 0x8862 #endif // GL_POINT_SIZE_RANGE is deprecated in OpenGL 1.2 and later, and replaced by // GL_SMOOTH_POINT_SIZE_RANGE. #ifndef GL_SMOOTH_POINT_SIZE_RANGE #define GL_SMOOTH_POINT_SIZE_RANGE GL_POINT_SIZE_RANGE #endif // GL_POINT_SIZE_GRANULARITY is deprecated in OpenGL 1.2 and later, and // replaced by GL_SMOOTH_POINT_SIZE_GRANULARITY. #ifndef GL_SMOOTH_POINT_SIZE_GRANULARITY #define GL_SMOOTH_POINT_SIZE_GRANULARITY GL_POINT_SIZE_GRANULARITY #endif // GL_ALIASED_POINT_SIZE_RANGE was added in OpenGL 1.2. #ifndef GL_ALIASED_POINT_SIZE_RANGE #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #endif using namespace std; const int BLOB_DIAMETER = 5; #define BLOB_TEXTURE \ o, o, o, o, o, o, o, o,\ o, o, o, o, o, o, o, o,\ o, o, I, I, I, o, o, o,\ o, I, I, I, I, I, o, o,\ o, I, I, I, I, I, o, o,\ o, I, I, I, I, I, o, o,\ o, o, I, I, I, o, o, o,\ o, o, o, o, o, o, o, o #define CROSS_TEXTURE \ o, o, o, o, o, o, o, o,\ I, o, o, o, o, o, I, o,\ o, I, o, o, o, I, o, o,\ o, o, I, o, I, o, o, o,\ o, o, o, I, o, o, o, o,\ o, o, I, o, I, o, o, o,\ o, I, o, o, o, I, o, o,\ I, o, o, o, o, o, I, o // Declared in gllogerror.h. bool opengl_initialised = false; static bool double_buffered = false; static const int* wx_gl_attribs = NULL; bool GLACanvas::check_visual() { static const int wx_gl_attribs_full[] = { WX_GL_DOUBLEBUFFER, WX_GL_RGBA, WX_GL_DEPTH_SIZE, 16, 0 }; // Use a double-buffered visual if available, as it will give much smoother // animation. double_buffered = true; wx_gl_attribs = wx_gl_attribs_full; if (!IsDisplaySupported(wx_gl_attribs)) { ++wx_gl_attribs; if (!IsDisplaySupported(wx_gl_attribs)) { return false; } double_buffered = false; } return true; } string GetGLSystemDescription() { // If OpenGL isn't initialised we may get a SEGV from glGetString. if (!opengl_initialised) return "No OpenGL information available yet - try opening a file."; const char *p = (const char*)glGetString(GL_VERSION); if (!p) return "Couldn't read OpenGL version!"; string info; info += "OpenGL "; info += p; info += '\n'; info += (const char*)glGetString(GL_VENDOR); info += '\n'; info += (const char*)glGetString(GL_RENDERER); #if !(wxUSE_GLCANVAS_EGL-0) && \ (defined __WXGTK__ || defined __WXX11__ || defined __WXMOTIF__) info += string_format("\nGLX %0.1f\n", wxGLCanvas::GetGLXVersion() * 0.1); #else info += '\n'; #endif GLint red, green, blue; glGetIntegerv(GL_RED_BITS, &red); glGetIntegerv(GL_GREEN_BITS, &green); glGetIntegerv(GL_BLUE_BITS, &blue); GLint max_texture_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); GLint max_viewport[2]; glGetIntegerv(GL_MAX_VIEWPORT_DIMS, max_viewport); GLdouble point_size_range[2]; glGetDoublev(GL_SMOOTH_POINT_SIZE_RANGE, point_size_range); GLdouble point_size_granularity; glGetDoublev(GL_SMOOTH_POINT_SIZE_GRANULARITY, &point_size_granularity); info += string_format("R%dG%dB%d\n" "Max Texture size: %dx%d\n" "Max Viewport size: %dx%d\n" "Smooth Point Size %.3f-%.3f (granularity %.3f)", (int)red, (int)green, (int)blue, (int)max_texture_size, (int)max_texture_size, (int)max_viewport[0], (int)max_viewport[1], point_size_range[0], point_size_range[1], point_size_granularity); glGetDoublev(GL_ALIASED_POINT_SIZE_RANGE, point_size_range); if (glGetError() != GL_INVALID_ENUM) { info += string_format("\nAliased point size %.3f-%.3f", point_size_range[0], point_size_range[1]); } info += "\nDouble buffered: "; if (double_buffered) info += "true"; else info += "false"; const GLubyte* gl_extensions = glGetString(GL_EXTENSIONS); if (*gl_extensions) { info += '\n'; info += (const char*)gl_extensions; } return info; } static bool glpoint_sprite_works() { // Point sprites provide an easy, fast way for us to draw crosses by // texture mapping GL points. // // If we have OpenGL >= 2.0 then we definitely have GL_POINT_SPRITE. // Otherwise see if we have the GL_ARB_point_sprite or GL_NV_point_sprite // extensions. // // The symbolic constants GL_POINT_SPRITE, GL_POINT_SPRITE_ARB, and // GL_POINT_SPRITE_NV all give the same number so it doesn't matter // which we use. static bool glpoint_sprite = false; static bool checked = false; if (!checked) { float maxSize = 0.0f; glGetFloatv(GL_POINT_SIZE_MAX, &maxSize); if (maxSize >= 8) { glpoint_sprite = (atoi((const char *)glGetString(GL_VERSION)) >= 2); if (!glpoint_sprite) { const char * p = (const char *)glGetString(GL_EXTENSIONS); while (true) { size_t l = 0; if (memcmp(p, "GL_ARB_point_sprite", 19) == 0) { l = 19; } else if (memcmp(p, "GL_NV_point_sprite", 18) == 0) { l = 18; } if (l) { p += l; if (*p == '\0' || *p == ' ') { glpoint_sprite = true; break; } } p = strchr(p + 1, ' '); if (!p) break; ++p; } } } checked = true; } return glpoint_sprite; } void log_gl_error(const wxChar * str, GLenum error_code) { wxString msg; switch (error_code) { case GL_INVALID_ENUM: msg = "Invalid OpenGL enumerated value"; break; case GL_INVALID_VALUE: msg = "Invalid OpenGL numeric argument value"; break; case GL_INVALID_OPERATION: msg = "Invalid OpenGL operation"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: msg = "Invalid OpenGL framebuffer operation"; break; case GL_OUT_OF_MEMORY: msg = wmsg(/*Out of memory*/389); break; case GL_STACK_UNDERFLOW: msg = "OpenGL stack underflow"; break; case GL_STACK_OVERFLOW: msg = "OpenGL stack overflow"; break; default: msg.Format("Unknown OpenGL error code: %d", int(error_code)); break; } wxLogError(str, msg); } // // GLAPen // GLAPen::GLAPen() { components[0] = components[1] = components[2] = 0.0; } void GLAPen::SetColour(double red, double green, double blue) { components[0] = red; components[1] = green; components[2] = blue; } double GLAPen::GetRed() const { return components[0]; } double GLAPen::GetGreen() const { return components[1]; } double GLAPen::GetBlue() const { return components[2]; } void GLAPen::Interpolate(const GLAPen& pen, double how_far) { components[0] += how_far * (pen.GetRed() - components[0]); components[1] += how_far * (pen.GetGreen() - components[1]); components[2] += how_far * (pen.GetBlue() - components[2]); } struct ColourTriple { // RGB triple: values are from 0-255 inclusive for each component. unsigned char r, g, b; }; // Order must match that in enum gla_colour[] in gla.h. static const ColourTriple COLOURS[] = { { 0, 0, 0 }, // black { 100, 100, 100 }, // grey { 180, 180, 180 }, // light grey { 140, 140, 140 }, // light grey 2 { 90, 90, 90 }, // dark grey { 255, 255, 255 }, // white { 0, 100, 255}, // turquoise { 0, 255, 40 }, // green { 150, 205, 224 }, // indicator 1 { 114, 149, 160 }, // indicator 2 { 255, 255, 0 }, // yellow { 255, 0, 0 }, // red { 40, 40, 255 }, // blue { 255, 0, 255 }, // magenta }; bool GLAList::need_to_generate() { // Bail out if the list is already cached, or can't usefully be cached. if (flags & (GLACanvas::CACHED|GLACanvas::NEVER_CACHE)) return false; // Create a new OpenGL list to hold this sequence of drawing // operations. if (gl_list == 0) { gl_list = glGenLists(1); CHECK_GL_ERROR("GLAList::need_to_generate", "glGenLists"); #ifdef GLA_DEBUG printf("glGenLists(1) returned %u\n", (unsigned)gl_list); #endif if (gl_list == 0) { // If we can't create a list for any reason, fall back to just // drawing directly, and flag the list as NEVER_CACHE as there's // unlikely to be much point calling glGenLists() again. flags = GLACanvas::NEVER_CACHE; return false; } // We should have 256 lists for font drawing and a dozen or so for 2D // and 3D lists. So something is amiss if we've generated 1000 lists, // probably a infinite loop in the lazy list mechanism. assert(gl_list < 1000); } // https://www.opengl.org/resources/faq/technical/displaylist.htm advises: // // "Stay away from GL_COMPILE_AND_EXECUTE mode. Instead, create the // list using GL_COMPILE mode, then execute it with glCallList()." glNewList(gl_list, GL_COMPILE); CHECK_GL_ERROR("GLAList::need_to_generate", "glNewList"); return true; } void GLAList::finalise(unsigned int list_flags) { glEndList(); CHECK_GL_ERROR("GLAList::finalise", "glEndList"); if (list_flags & GLACanvas::NEVER_CACHE) { glDeleteLists(gl_list, 1); CHECK_GL_ERROR("GLAList::finalise", "glDeleteLists"); gl_list = 0; flags = GLACanvas::NEVER_CACHE; } else { flags = list_flags | GLACanvas::CACHED; } } bool GLAList::DrawList() const { if ((flags & GLACanvas::CACHED) == 0) return false; glCallList(gl_list); CHECK_GL_ERROR("GLAList::DrawList", "glCallList"); return true; } // // GLACanvas // BEGIN_EVENT_TABLE(GLACanvas, wxGLCanvas) EVT_SIZE(GLACanvas::OnSize) #ifdef wxHAS_DPI_INDEPENDENT_PIXELS EVT_MOVE(GLACanvas::OnMove) #endif END_EVENT_TABLE() // Pass wxWANTS_CHARS so that the window gets cursor keys on MS Windows. GLACanvas::GLACanvas(wxWindow* parent, int id) : wxGLCanvas(parent, id, wx_gl_attribs, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS), ctx(this), m_Translation(), blob_method(UNKNOWN), cross_method(UNKNOWN), x_size(0), y_size(0) { // Constructor. m_Quadric = NULL; m_Pan = 0.0; m_Tilt = 0.0; m_Scale = 0.0; m_VolumeDiameter = 1.0; m_SmoothShading = false; m_Texture = 0; m_Textured = false; m_Perspective = false; m_Fog = false; m_AntiAlias = false; list_flags = 0; alpha = 1.0; } GLACanvas::~GLACanvas() { // Destructor. if (m_Quadric) { gluDeleteQuadric(m_Quadric); CHECK_GL_ERROR("~GLACanvas", "gluDeleteQuadric"); } } void GLACanvas::FirstShow() { #ifdef wxHAS_DPI_INDEPENDENT_PIXELS content_scale_factor = wxGLCanvas::GetContentScaleFactor(); #endif // Update our record of the client area size and centre. GetClientSize(&x_size, &y_size); x_size *= content_scale_factor; y_size *= content_scale_factor; if (x_size < 1) x_size = 1; if (y_size < 1) y_size = 1; ctx.SetCurrent(*this); opengl_initialised = true; // Set the background colour of the canvas to black. glClearColor(0.0, 0.0, 0.0, 1.0); CHECK_GL_ERROR("FirstShow", "glClearColor"); // Set viewport. glViewport(0, 0, x_size, y_size); CHECK_GL_ERROR("FirstShow", "glViewport"); save_hints = false; vendor = wxString((const char *)glGetString(GL_VENDOR), wxConvUTF8); renderer = wxString((const char *)glGetString(GL_RENDERER), wxConvUTF8); { wxConfigBase * cfg = wxConfigBase::Get(); wxString s; if (cfg->Read(wxT("opengl_survex"), &s, wxString()) && s == wxT(VERSION) && cfg->Read(wxT("opengl_vendor"), &s, wxString()) && s == vendor && cfg->Read(wxT("opengl_renderer"), &s, wxString()) && s == renderer) { // The survex version, vendor and renderer are the same as those // we cached hints for, so use those hints. int v; if (cfg->Read(wxT("blob_method"), &v, 0) && (v == SPRITE || v == POINT || v == LINES)) { // How to draw blobs. blob_method = v; } if (cfg->Read(wxT("cross_method"), &v, 0) && (v == SPRITE || v == LINES)) { // How to draw crosses. cross_method = v; } } } if (m_Quadric) return; // One time initialisation follows. m_Quadric = gluNewQuadric(); CHECK_GL_ERROR("FirstShow", "gluNewQuadric"); if (!m_Quadric) { abort(); // FIXME need to cope somehow } glShadeModel(GL_FLAT); CHECK_GL_ERROR("FirstShow", "glShadeModel"); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // So text works. CHECK_GL_ERROR("FirstShow", "glPolygonMode"); //glAlphaFunc(GL_GREATER, 0.5f); //CHECK_GL_ERROR("FirstShow", "glAlphaFunc"); // We want glReadPixels() to read from the front buffer (which is the // default for single-buffered displays). if (double_buffered) { glReadBuffer(GL_FRONT); CHECK_GL_ERROR("FirstShow", "glReadBuffer"); } // Grey fog effect. GLfloat fogcolour[4] = { 0.5, 0.5, 0.5, 1.0 }; glFogfv(GL_FOG_COLOR, fogcolour); CHECK_GL_ERROR("FirstShow", "glFogfv"); // Linear fogging. glFogi(GL_FOG_MODE, GL_LINEAR); CHECK_GL_ERROR("FirstShow", "glFogi"); // Optimise for speed (compute fog per vertex). glHint(GL_FOG_HINT, GL_FASTEST); CHECK_GL_ERROR("FirstShow", "glHint"); // No padding on pixel packing and unpacking (default is to pad each // line to a multiple of 4 bytes). glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // For setting texture maps. CHECK_GL_ERROR("FirstShow", "glPixelStorei GL_UNPACK_ALIGNMENT"); glPixelStorei(GL_PACK_ALIGNMENT, 1); // For screengrabs and movies. CHECK_GL_ERROR("FirstShow", "glPixelStorei GL_PACK_ALIGNMENT"); // Load font wxString path = wmsg_cfgpth(); path += wxCONFIG_PATH_SEPARATOR; path += wxT("unifont.pixelfont"); if (!m_Font.load(path, content_scale_factor >= 2)) { // FIXME: do something better. // We have this message available: Error in format of font file “%s†fprintf(stderr, "Failed to parse compiled-in font data\n"); exit(1); } if (blob_method == UNKNOWN) { // Check if we can use GL_POINTS to plot blobs at stations. GLdouble point_size_range[2]; glGetDoublev(GL_SMOOTH_POINT_SIZE_RANGE, point_size_range); CHECK_GL_ERROR("FirstShow", "glGetDoublev GL_SMOOTH_POINT_SIZE_RANGE"); if (point_size_range[0] <= BLOB_DIAMETER && point_size_range[1] >= BLOB_DIAMETER) { blob_method = POINT; } else { blob_method = glpoint_sprite_works() ? SPRITE : LINES; } save_hints = true; } if (blob_method == POINT) { glPointSize(BLOB_DIAMETER); CHECK_GL_ERROR("FirstShow", "glPointSize"); } if (cross_method == UNKNOWN) { cross_method = glpoint_sprite_works() ? SPRITE : LINES; save_hints = true; } if (cross_method == SPRITE) { glGenTextures(1, &m_CrossTexture); CHECK_GL_ERROR("FirstShow", "glGenTextures"); glBindTexture(GL_TEXTURE_2D, m_CrossTexture); CHECK_GL_ERROR("FirstShow", "glBindTexture"); // Cross image for drawing crosses using texture mapped point sprites. const unsigned char crossteximage[128] = { #define o 0,0 #define I 255,255 CROSS_TEXTURE #undef o #undef I }; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); CHECK_GL_ERROR("FirstShow", "glPixelStorei"); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); CHECK_GL_ERROR("FirstShow", "glTexEnvi"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_WRAP_S"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_WRAP_T"); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 8, 8, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, (GLvoid *)crossteximage); CHECK_GL_ERROR("FirstShow", "glTexImage2D"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_MAG_FILTER"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_MIN_FILTER"); } if (blob_method == SPRITE) { glGenTextures(1, &m_BlobTexture); CHECK_GL_ERROR("FirstShow", "glGenTextures"); glBindTexture(GL_TEXTURE_2D, m_BlobTexture); CHECK_GL_ERROR("FirstShow", "glBindTexture"); // Image for drawing blobs using texture mapped point sprites. const unsigned char blobteximage[128] = { #define o 0,0 #define I 255,255 BLOB_TEXTURE #undef o #undef I }; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); CHECK_GL_ERROR("FirstShow", "glPixelStorei"); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); CHECK_GL_ERROR("FirstShow", "glTexEnvi"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_WRAP_S"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_WRAP_T"); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 8, 8, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, (GLvoid *)blobteximage); CHECK_GL_ERROR("FirstShow", "glTexImage2D"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_MAG_FILTER"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); CHECK_GL_ERROR("FirstShow", "glTexParameteri GL_TEXTURE_MIN_FILTER"); } } void GLACanvas::Clear() { // Clear the canvas. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CHECK_GL_ERROR("Clear", "glClear"); } void GLACanvas::ClearNative() { // Clear the canvas to the native background colour. wxColour background_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWFRAME); glClearColor(background_colour.Red() / 255., background_colour.Green() / 255., background_colour.Blue() / 255., 1.0); CHECK_GL_ERROR("ClearNative", "glClearColor"); glClear(GL_COLOR_BUFFER_BIT); CHECK_GL_ERROR("ClearNative", "glClear"); glClearColor(0.0, 0.0, 0.0, 1.0); CHECK_GL_ERROR("ClearNative", "glClearColor (2)"); } void GLACanvas::SetScale(Double scale) { if (scale != m_Scale) { for (auto & i : drawing_lists) { i.invalidate_if(INVALIDATE_ON_SCALE); } m_Scale = scale; } } #ifdef wxHAS_DPI_INDEPENDENT_PIXELS void GLACanvas::UpdateContentScaleFactor() { double new_content_scale_factor = wxGLCanvas::GetContentScaleFactor(); if (new_content_scale_factor == content_scale_factor) return; content_scale_factor = new_content_scale_factor; for (auto& i : drawing_lists) { i.invalidate_if(INVALIDATE_ON_HIDPI); } } void GLACanvas::OnMove(wxMoveEvent & event) { UpdateContentScaleFactor(); event.Skip(); } #endif void GLACanvas::OnSize(wxSizeEvent & event) { UpdateContentScaleFactor(); wxSize size = event.GetSize(); auto new_w = size.GetWidth() * content_scale_factor; auto new_h = size.GetHeight() * content_scale_factor; // The width and height go to zero when the panel is dragged right // across so we clamp them to be at least 1 to avoid problems. if (new_w < 1) new_w = 1; if (new_h < 1) new_h = 1; unsigned int mask = 0; if (new_w != x_size) mask |= INVALIDATE_ON_X_RESIZE; if (new_h != y_size) mask |= INVALIDATE_ON_Y_RESIZE; if (mask) { x_size = new_w; y_size = new_h; for (auto& i : drawing_lists) { i.invalidate_if(mask); } } event.Skip(); if (!opengl_initialised) return; // Set viewport. glViewport(0, 0, x_size, y_size); CHECK_GL_ERROR("OnSize", "glViewport"); } void GLACanvas::AddTranslationScreenCoordinates(int dx, int dy) { // Translate the data by a given amount, specified in screen coordinates. // Find out how far the translation takes us in data coordinates. SetDataTransform(); double x0, y0, z0; double x, y, z; gluUnProject(0.0, 0.0, 0.0, modelview_matrix, projection_matrix, viewport, &x0, &y0, &z0); CHECK_GL_ERROR("AddTranslationScreenCoordinates", "gluUnProject"); gluUnProject(dx, -dy, 0.0, modelview_matrix, projection_matrix, viewport, &x, &y, &z); CHECK_GL_ERROR("AddTranslationScreenCoordinates", "gluUnProject (2)"); // Apply the translation. AddTranslation(Vector3(x - x0, y - y0, z - z0)); } void GLACanvas::SetVolumeDiameter(glaCoord diameter) { // Set the size of the data drawing volume by giving the diameter of the // smallest sphere containing it. m_VolumeDiameter = max(glaCoord(1.0), diameter); } void GLACanvas::StartDrawing() { // Prepare for a redraw operation. ctx.SetCurrent(*this); glDepthMask(GL_TRUE); if (!save_hints) return; // We want to check on the second redraw. static int draw_count = 2; if (--draw_count != 0) return; if (cross_method != LINES) { SetColour(col_WHITE); Clear(); SetDataTransform(); BeginCrosses(); DrawCross(-m_Translation.GetX(), -m_Translation.GetY(), -m_Translation.GetZ()); EndCrosses(); static const unsigned char expected_cross[64 * 3] = { #define o 0,0,0 #define I 255,255,255 CROSS_TEXTURE #undef o #undef I }; if (!CheckVisualFidelity(expected_cross)) { cross_method = LINES; save_hints = true; } } if (blob_method != LINES) { SetColour(col_WHITE); Clear(); SetDataTransform(); BeginBlobs(); DrawBlob(-m_Translation.GetX(), -m_Translation.GetY(), -m_Translation.GetZ()); EndBlobs(); static const unsigned char expected_blob[64 * 3] = { #define o 0,0,0 #define I 255,255,255 BLOB_TEXTURE #undef o #undef I }; if (!CheckVisualFidelity(expected_blob)) { blob_method = LINES; save_hints = true; } } wxConfigBase * cfg = wxConfigBase::Get(); cfg->Write(wxT("opengl_survex"), wxT(VERSION)); cfg->Write(wxT("opengl_vendor"), vendor); cfg->Write(wxT("opengl_renderer"), renderer); cfg->Write(wxT("blob_method"), blob_method); cfg->Write(wxT("cross_method"), cross_method); cfg->Flush(); save_hints = false; } void GLACanvas::EnableSmoothPolygons(bool filled) { // Prepare for drawing smoothly-shaded polygons. // Only use this when required (in particular lines in lists may not be // coloured correctly when this is enabled). glPushAttrib(GL_ENABLE_BIT|GL_LIGHTING_BIT|GL_POLYGON_BIT); if (filled) { glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } else { glDisable(GL_LINE_SMOOTH); glDisable(GL_TEXTURE_2D); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } CHECK_GL_ERROR("EnableSmoothPolygons", "glPolygonMode"); if (filled && m_SmoothShading) { static const GLfloat mat_specular[] = { 0.2, 0.2, 0.2, 1.0 }; static const GLfloat light_position[] = { -1.0, -1.0, -1.0, 0.0 }; static const GLfloat light_ambient[] = { 0.3, 0.3, 0.3, 1.0 }; static const GLfloat light_diffuse[] = { 0.7, 0.7, 0.7, 1.0 }; glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 10.0); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } } void GLACanvas::DisableSmoothPolygons() { glPopAttrib(); } void GLACanvas::PlaceNormal(const Vector3 &v) { // Add a normal (for polygons etc.) glNormal3d(v.GetX(), v.GetY(), v.GetZ()); } void GLACanvas::SetDataTransform() { // Set projection. glMatrixMode(GL_PROJECTION); CHECK_GL_ERROR("SetDataTransform", "glMatrixMode"); glLoadIdentity(); CHECK_GL_ERROR("SetDataTransform", "glLoadIdentity"); double aspect = double(y_size) / double(x_size); Double near_plane = 1.0; if (m_Perspective) { Double lr = near_plane * tan(rad(25.0)); Double far_plane = m_VolumeDiameter * 5 + near_plane; // FIXME: work out properly Double tb = lr * aspect; glFrustum(-lr, lr, -tb, tb, near_plane, far_plane); CHECK_GL_ERROR("SetViewportAndProjection", "glFrustum"); } else { near_plane = 0.0; assert(m_Scale != 0.0); Double lr = m_VolumeDiameter / m_Scale * 0.5; Double far_plane = m_VolumeDiameter + near_plane; Double tb = lr; if (aspect >= 1.0) { tb *= aspect; } else { lr /= aspect; } glOrtho(-lr, lr, -tb, tb, near_plane, far_plane); CHECK_GL_ERROR("SetViewportAndProjection", "glOrtho"); } // Set the modelview transform for drawing data. glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR("SetDataTransform", "glMatrixMode"); glLoadIdentity(); CHECK_GL_ERROR("SetDataTransform", "glLoadIdentity"); if (m_Perspective) { glTranslated(0.0, 0.0, -near_plane); } else { glTranslated(0.0, 0.0, -0.5 * m_VolumeDiameter); } CHECK_GL_ERROR("SetDataTransform", "glTranslated"); // Get axes the correct way around (z upwards, y into screen) glRotated(-90.0, 1.0, 0.0, 0.0); CHECK_GL_ERROR("SetDataTransform", "glRotated"); glRotated(-m_Tilt, 1.0, 0.0, 0.0); CHECK_GL_ERROR("SetDataTransform", "glRotated"); glRotated(m_Pan, 0.0, 0.0, 1.0); CHECK_GL_ERROR("SetDataTransform", "CopyToOpenGL"); if (m_Perspective) { glTranslated(m_Translation.GetX(), m_Translation.GetY(), m_Translation.GetZ()); CHECK_GL_ERROR("SetDataTransform", "glTranslated"); } // Save projection matrix. glGetDoublev(GL_PROJECTION_MATRIX, projection_matrix); CHECK_GL_ERROR("SetDataTransform", "glGetDoublev"); // Save viewport coordinates. glGetIntegerv(GL_VIEWPORT, viewport); CHECK_GL_ERROR("SetDataTransform", "glGetIntegerv"); // Save modelview matrix. glGetDoublev(GL_MODELVIEW_MATRIX, modelview_matrix); CHECK_GL_ERROR("SetDataTransform", "glGetDoublev"); if (!m_Perspective) { // Adjust the translation so we don't change the Z position of the model double X, Y, Z; gluProject(m_Translation.GetX(), m_Translation.GetY(), m_Translation.GetZ(), modelview_matrix, projection_matrix, viewport, &X, &Y, &Z); double Tx, Ty, Tz; gluUnProject(X, Y, 0.5, modelview_matrix, projection_matrix, viewport, &Tx, &Ty, &Tz); glTranslated(Tx, Ty, Tz); CHECK_GL_ERROR("SetDataTransform", "glTranslated"); glGetDoublev(GL_MODELVIEW_MATRIX, modelview_matrix); } glEnable(GL_DEPTH_TEST); CHECK_GL_ERROR("SetDataTransform", "glEnable GL_DEPTH_TEST"); if (m_Textured) { glBindTexture(GL_TEXTURE_2D, m_Texture); glEnable(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); CHECK_GL_ERROR("ToggleTextured", "glTexParameteri GL_TEXTURE_WRAP_S"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); CHECK_GL_ERROR("ToggleTextured", "glTexParameteri GL_TEXTURE_WRAP_T"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); CHECK_GL_ERROR("ToggleTextured", "glTexParameteri GL_TEXTURE_MAG_FILTER"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); CHECK_GL_ERROR("ToggleTextured", "glTexParameteri GL_TEXTURE_MIN_FILTER"); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } else { glDisable(GL_TEXTURE_2D); } if (m_Fog) { glFogf(GL_FOG_START, near_plane); glFogf(GL_FOG_END, near_plane + m_VolumeDiameter); glEnable(GL_FOG); } else { glDisable(GL_FOG); } glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (m_AntiAlias) { glEnable(GL_LINE_SMOOTH); } else { glDisable(GL_LINE_SMOOTH); } } void GLACanvas::SetIndicatorTransform() { list_flags |= NEVER_CACHE; // Set the modelview transform and projection for drawing indicators. glDisable(GL_DEPTH_TEST); CHECK_GL_ERROR("SetIndicatorTransform", "glDisable GL_DEPTH_TEST"); glDisable(GL_FOG); CHECK_GL_ERROR("SetIndicatorTransform", "glDisable GL_FOG"); // Just a simple 2D projection. glMatrixMode(GL_PROJECTION); CHECK_GL_ERROR("SetIndicatorTransform", "glMatrixMode"); glLoadIdentity(); CHECK_GL_ERROR("SetIndicatorTransform", "glLoadIdentity (2)"); gluOrtho2D(0, x_size, 0, y_size); CHECK_GL_ERROR("SetIndicatorTransform", "gluOrtho2D"); // No modelview transform. glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR("SetIndicatorTransform", "glMatrixMode"); glLoadIdentity(); CHECK_GL_ERROR("SetIndicatorTransform", "glLoadIdentity"); glDisable(GL_TEXTURE_2D); CHECK_GL_ERROR("SetIndicatorTransform", "glDisable GL_TEXTURE_2D"); glDisable(GL_BLEND); CHECK_GL_ERROR("SetIndicatorTransform", "glDisable GL_BLEND"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); CHECK_GL_ERROR("SetIndicatorTransform", "glTexParameteri GL_TEXTURE_WRAP_S"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); CHECK_GL_ERROR("SetIndicatorTransform", "glTexParameteri GL_TEXTURE_WRAP_T"); glAlphaFunc(GL_GREATER, 0.5f); CHECK_GL_ERROR("SetIndicatorTransform", "glAlphaFunc"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); CHECK_GL_ERROR("SetIndicatorTransform", "glTexParameteri GL_TEXTURE_MAG_FILTER"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); CHECK_GL_ERROR("SetIndicatorTransform", "glTexParameteri GL_TEXTURE_MIN_FILTER"); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); CHECK_GL_ERROR("SetIndicatorTransform", "glHint"); } void GLACanvas::FinishDrawing() { // Complete a redraw operation. if (double_buffered) { SwapBuffers(); } else { glFlush(); CHECK_GL_ERROR("FinishDrawing", "glFlush"); } } void GLACanvas::DrawList(unsigned int l) { // FIXME: uncomment to disable use of lists for debugging: // GenerateList(l); return; if (l >= drawing_lists.size()) drawing_lists.resize(l + 1); // We generate the OpenGL lists lazily to minimise delays on startup. // So check if we need to generate the OpenGL list now. if (drawing_lists[l].need_to_generate()) { // Clear list_flags so that we can note what conditions to invalidate // the cached OpenGL list on. list_flags = 0; #ifdef GLA_DEBUG printf("generating list #%u... ", l); m_Vertices = 0; #endif GenerateList(l); #ifdef GLA_DEBUG printf("done (%d vertices)\n", m_Vertices); #endif drawing_lists[l].finalise(list_flags); } if (!drawing_lists[l].DrawList()) { // That list isn't cached (which means it probably can't usefully be // cached). GenerateList(l); } } void GLACanvas::DrawListZPrepass(unsigned int l) { glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); DrawList(l); glDepthMask(GL_FALSE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthFunc(GL_EQUAL); DrawList(l); glDepthMask(GL_TRUE); glDepthFunc(GL_LESS); } void GLACanvas::DrawList2D(unsigned int l, glaCoord x, glaCoord y, Double rotation) { glMatrixMode(GL_PROJECTION); CHECK_GL_ERROR("DrawList2D", "glMatrixMode"); glPushMatrix(); CHECK_GL_ERROR("DrawList2D", "glPushMatrix"); glTranslated(x, y, 0); CHECK_GL_ERROR("DrawList2D", "glTranslated"); if (rotation != 0.0) { glRotated(rotation, 0, 0, -1); CHECK_GL_ERROR("DrawList2D", "glRotated"); } DrawList(l); glMatrixMode(GL_PROJECTION); CHECK_GL_ERROR("DrawList2D", "glMatrixMode 2"); glPopMatrix(); CHECK_GL_ERROR("DrawList2D", "glPopMatrix"); } void GLACanvas::SetColour(const GLAPen& pen, double rgb_scale) { // Set the colour for subsequent operations. glColor4f(pen.GetRed() * rgb_scale, pen.GetGreen() * rgb_scale, pen.GetBlue() * rgb_scale, alpha); } void GLACanvas::SetColour(const GLAPen& pen) { // Set the colour for subsequent operations. glColor4d(pen.components[0], pen.components[1], pen.components[2], alpha); } void GLACanvas::SetColour(gla_colour colour, double rgb_scale) { // Set the colour for subsequent operations. rgb_scale /= 255.0; glColor4f(COLOURS[colour].r * rgb_scale, COLOURS[colour].g * rgb_scale, COLOURS[colour].b * rgb_scale, alpha); } void GLACanvas::SetColour(gla_colour colour) { // Set the colour for subsequent operations. if (alpha == 1.0) { glColor3ubv(&COLOURS[colour].r); } else { glColor4ub(COLOURS[colour].r, COLOURS[colour].g, COLOURS[colour].b, (unsigned char)(255 * alpha)); } } void GLACanvas::DrawText(glaCoord x, glaCoord y, glaCoord z, const wxString& str) { // Draw a text string on the current buffer in the current font. glRasterPos3d(x, y, z); CHECK_GL_ERROR("DrawText", "glRasterPos3d"); m_Font.write_string(str.data(), str.size()); } void GLACanvas::DrawIndicatorText(int x, int y, const wxString& str) { glRasterPos2d(x, y); CHECK_GL_ERROR("DrawIndicatorText", "glRasterPos2d"); m_Font.write_string(str.data(), str.size()); } void GLACanvas::GetTextExtent(const wxString& str, int * x_ext, int * y_ext) const { m_Font.get_text_extent(str.data(), str.size(), x_ext, y_ext); } void GLACanvas::BeginQuadrilaterals() { // Commence drawing of quadrilaterals. glBegin(GL_QUADS); } void GLACanvas::EndQuadrilaterals() { // Finish drawing of quadrilaterals. glEnd(); CHECK_GL_ERROR("EndQuadrilaterals", "glEnd GL_QUADS"); } void GLACanvas::BeginLines() { // Commence drawing of a set of lines. glBegin(GL_LINES); } void GLACanvas::EndLines() { // Finish drawing of a set of lines. glEnd(); CHECK_GL_ERROR("EndLines", "glEnd GL_LINES"); } void GLACanvas::BeginTriangles() { // Commence drawing of a set of triangles. glBegin(GL_TRIANGLES); } void GLACanvas::EndTriangles() { // Finish drawing of a set of triangles. glEnd(); CHECK_GL_ERROR("EndTriangles", "glEnd GL_TRIANGLES"); } void GLACanvas::BeginTriangleStrip() { // Commence drawing of a triangle strip. glBegin(GL_TRIANGLE_STRIP); } void GLACanvas::EndTriangleStrip() { // Finish drawing of a triangle strip. glEnd(); CHECK_GL_ERROR("EndTriangleStrip", "glEnd GL_TRIANGLE_STRIP"); } void GLACanvas::BeginPolyline() { // Commence drawing of a polyline. glBegin(GL_LINE_STRIP); } void GLACanvas::EndPolyline() { // Finish drawing of a polyline. glEnd(); CHECK_GL_ERROR("EndPolyline", "glEnd GL_LINE_STRIP"); } void GLACanvas::BeginPolyloop() { // Commence drawing of a polyloop. glBegin(GL_LINE_LOOP); } void GLACanvas::EndPolyloop() { // Finish drawing of a polyloop. glEnd(); CHECK_GL_ERROR("EndPolyloop", "glEnd GL_LINE_LOOP"); } void GLACanvas::BeginPolygon() { // Commence drawing of a polygon. glBegin(GL_POLYGON); } void GLACanvas::EndPolygon() { // Finish drawing of a polygon. glEnd(); CHECK_GL_ERROR("EndPolygon", "glEnd GL_POLYGON"); } void GLACanvas::PlaceVertex(glaCoord x, glaCoord y, glaCoord z) { // Place a vertex for the current object being drawn. #ifdef GLA_DEBUG m_Vertices++; #endif glVertex3d(x, y, z); } void GLACanvas::PlaceVertex(glaCoord x, glaCoord y, glaCoord z, glaTexCoord tex_x, glaTexCoord tex_y) { // Place a vertex for the current object being drawn. #ifdef GLA_DEBUG m_Vertices++; #endif glTexCoord2f(tex_x, tex_y); glVertex3d(x, y, z); } void GLACanvas::PlaceIndicatorVertex(glaCoord x, glaCoord y) { // Place a vertex for the current indicator object being drawn. PlaceVertex(x, y, 0.0); } void GLACanvas::BeginBlobs() { // Commence drawing of a set of blobs. if (blob_method == SPRITE) { glPushAttrib(GL_ENABLE_BIT|GL_POINT_BIT); CHECK_GL_ERROR("BeginBlobs", "glPushAttrib"); glBindTexture(GL_TEXTURE_2D, m_BlobTexture); CHECK_GL_ERROR("BeginBlobs", "glBindTexture"); glEnable(GL_ALPHA_TEST); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_ALPHA_TEST"); glPointSize(8); CHECK_GL_ERROR("BeginBlobs", "glPointSize"); glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE); CHECK_GL_ERROR("BeginBlobs", "glTexEnvi GL_POINT_SPRITE"); glEnable(GL_TEXTURE_2D); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_TEXTURE_2D"); glEnable(GL_POINT_SPRITE); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_POINT_SPRITE"); glBegin(GL_POINTS); } else if (blob_method == POINT) { glPushAttrib(GL_ENABLE_BIT); CHECK_GL_ERROR("BeginBlobs", "glPushAttrib"); glEnable(GL_ALPHA_TEST); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_ALPHA_TEST"); glEnable(GL_POINT_SMOOTH); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_POINT_SMOOTH"); glBegin(GL_POINTS); } else { glPushAttrib(GL_TRANSFORM_BIT|GL_VIEWPORT_BIT|GL_ENABLE_BIT); CHECK_GL_ERROR("BeginBlobs", "glPushAttrib"); SetIndicatorTransform(); glEnable(GL_DEPTH_TEST); CHECK_GL_ERROR("BeginBlobs", "glEnable GL_DEPTH_TEST"); glBegin(GL_LINES); } } void GLACanvas::EndBlobs() { // Finish drawing of a set of blobs. glEnd(); if (blob_method != LINES) { CHECK_GL_ERROR("EndBlobs", "glEnd GL_POINTS"); } else { CHECK_GL_ERROR("EndBlobs", "glEnd GL_LINES"); } glPopAttrib(); CHECK_GL_ERROR("EndBlobs", "glPopAttrib"); } void GLACanvas::DrawBlob(glaCoord x, glaCoord y, glaCoord z) { if (blob_method != LINES) { // Draw a marker. PlaceVertex(x, y, z); } else { double X, Y, Z; if (!Transform(Vector3(x, y, z), &X, &Y, &Z)) { printf("bad transform\n"); return; } // Stuff behind us (in perspective view) will get clipped, // but we can save effort with a cheap check here. if (Z <= 0) return; X -= BLOB_DIAMETER * 0.5; Y -= BLOB_DIAMETER * 0.5; PlaceVertex(X, Y + 1, Z); PlaceVertex(X, Y + (BLOB_DIAMETER - 1), Z); for (int i = 1; i < (BLOB_DIAMETER - 1); ++i) { PlaceVertex(X + i, Y, Z); PlaceVertex(X + i, Y + BLOB_DIAMETER, Z); } PlaceVertex(X + (BLOB_DIAMETER - 1), Y + 1, Z); PlaceVertex(X + (BLOB_DIAMETER - 1), Y + (BLOB_DIAMETER - 1), Z); } #ifdef GLA_DEBUG m_Vertices++; #endif } void GLACanvas::DrawBlob(glaCoord x, glaCoord y) { if (blob_method != LINES) { // Draw a marker. PlaceVertex(x, y, 0); } else { x -= BLOB_DIAMETER * 0.5; y -= BLOB_DIAMETER * 0.5; PlaceVertex(x, y + 1, 0); PlaceVertex(x, y + (BLOB_DIAMETER - 1), 0); for (int i = 1; i < (BLOB_DIAMETER - 1); ++i) { PlaceVertex(x + i, y, 0); PlaceVertex(x + i, y + BLOB_DIAMETER, 0); } PlaceVertex(x + (BLOB_DIAMETER - 1), y + 1, 0); PlaceVertex(x + (BLOB_DIAMETER - 1), y + (BLOB_DIAMETER - 1), 0); } #ifdef GLA_DEBUG m_Vertices++; #endif } void GLACanvas::BeginCrosses() { // Plot crosses. if (cross_method == SPRITE) { glPushAttrib(GL_ENABLE_BIT|GL_POINT_BIT); CHECK_GL_ERROR("BeginCrosses", "glPushAttrib"); glBindTexture(GL_TEXTURE_2D, m_CrossTexture); CHECK_GL_ERROR("BeginCrosses", "glBindTexture"); glEnable(GL_ALPHA_TEST); CHECK_GL_ERROR("BeginCrosses", "glEnable GL_ALPHA_TEST"); glPointSize(8); CHECK_GL_ERROR("BeginCrosses", "glPointSize"); glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE); CHECK_GL_ERROR("BeginCrosses", "glTexEnvi GL_POINT_SPRITE"); glEnable(GL_TEXTURE_2D); CHECK_GL_ERROR("BeginCrosses", "glEnable GL_TEXTURE_2D"); glEnable(GL_POINT_SPRITE); CHECK_GL_ERROR("BeginCrosses", "glEnable GL_POINT_SPRITE"); glBegin(GL_POINTS); } else { // To get the crosses to appear at a constant size and orientation on // screen, we plot them in the Indicator transform coordinates (which // unfortunately means they can't be usefully put in an opengl display // list). glPushAttrib(GL_TRANSFORM_BIT|GL_VIEWPORT_BIT|GL_ENABLE_BIT); CHECK_GL_ERROR("BeginCrosses", "glPushAttrib 2"); SetIndicatorTransform(); // Align line drawing to pixel centres to get pixel-perfect rendering // (graphics card and driver bugs aside). glTranslated(-0.5, -0.5, 0); CHECK_GL_ERROR("BeginCrosses", "glTranslated"); glEnable(GL_DEPTH_TEST); CHECK_GL_ERROR("BeginCrosses", "glEnable GL_DEPTH_TEST"); glBegin(GL_LINES); } } void GLACanvas::EndCrosses() { glEnd(); if (cross_method == SPRITE) { CHECK_GL_ERROR("EndCrosses", "glEnd GL_POINTS"); } else { CHECK_GL_ERROR("EndCrosses", "glEnd GL_LINES"); } glPopAttrib(); CHECK_GL_ERROR("EndCrosses", "glPopAttrib"); } void GLACanvas::DrawCross(glaCoord x, glaCoord y, glaCoord z) { if (cross_method == SPRITE) { // Draw a marker. PlaceVertex(x, y, z); } else { double X, Y, Z; if (!Transform(Vector3(x, y, z), &X, &Y, &Z)) { printf("bad transform\n"); return; } // Stuff behind us (in perspective view) will get clipped, // but we can save effort with a cheap check here. if (Z <= 0) return; // Round to integers before adding on the offsets for the // cross arms to avoid uneven crosses. X = rint(X); Y = rint(Y); // Need to extend lines by an extra pixel (which shouldn't get drawn by // the diamond-exit rule). PlaceVertex(X - 3, Y - 3, Z); PlaceVertex(X + 4, Y + 4, Z); PlaceVertex(X - 3, Y + 3, Z); PlaceVertex(X + 4, Y - 4, Z); } #ifdef GLA_DEBUG m_Vertices++; #endif } void GLACanvas::DrawRing(glaCoord x, glaCoord y) { // Draw an unfilled circle of radius 4 // Round to integers to get an even ring. x = rint(x); y = rint(y); glBegin(GL_LINE_LOOP); PlaceIndicatorVertex(x + 3.5, y - 1.5); PlaceIndicatorVertex(x + 1.5, y - 3.5); PlaceIndicatorVertex(x - 1.5, y - 3.5); PlaceIndicatorVertex(x - 3.5, y - 1.5); PlaceIndicatorVertex(x - 3.5, y + 1.5); PlaceIndicatorVertex(x - 1.5, y + 3.5); PlaceIndicatorVertex(x + 1.5, y + 3.5); PlaceIndicatorVertex(x + 3.5, y + 1.5); glEnd(); CHECK_GL_ERROR("DrawRing", "glEnd GL_LINE_LOOP"); } void GLACanvas::DrawRectangle(gla_colour fill, gla_colour edge, glaCoord x0, glaCoord y0, glaCoord w, glaCoord h) { // Draw a filled rectangle with an edge in the indicator plane. // (x0, y0) specify the bottom-left corner of the rectangle and (w, h) the // size. SetColour(fill); BeginQuadrilaterals(); PlaceIndicatorVertex(x0, y0); PlaceIndicatorVertex(x0 + w, y0); PlaceIndicatorVertex(x0 + w, y0 + h); PlaceIndicatorVertex(x0, y0 + h); EndQuadrilaterals(); if (edge != fill) { SetColour(edge); BeginPolyline(); PlaceIndicatorVertex(x0, y0); PlaceIndicatorVertex(x0 + w, y0); PlaceIndicatorVertex(x0 + w, y0 + h); PlaceIndicatorVertex(x0, y0 + h); PlaceIndicatorVertex(x0, y0); EndPolyline(); } } void GLACanvas::DrawShadedRectangle(const GLAPen & fill_bot, const GLAPen & fill_top, glaCoord x0, glaCoord y0, glaCoord w, glaCoord h) { // Draw a graduated filled rectangle in the indicator plane. // (x0, y0) specify the bottom-left corner of the rectangle and (w, h) the // size. glShadeModel(GL_SMOOTH); CHECK_GL_ERROR("DrawShadedRectangle", "glShadeModel GL_SMOOTH"); BeginQuadrilaterals(); SetColour(fill_bot); PlaceIndicatorVertex(x0, y0); PlaceIndicatorVertex(x0 + w, y0); SetColour(fill_top); PlaceIndicatorVertex(x0 + w, y0 + h); PlaceIndicatorVertex(x0, y0 + h); EndQuadrilaterals(); glShadeModel(GL_FLAT); CHECK_GL_ERROR("DrawShadedRectangle", "glShadeModel GL_FLAT"); } void GLACanvas::DrawCircle(gla_colour edge, gla_colour fill, glaCoord cx, glaCoord cy, glaCoord radius) { // Draw a filled circle with an edge. SetColour(fill); glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR("DrawCircle", "glMatrixMode"); glPushMatrix(); CHECK_GL_ERROR("DrawCircle", "glPushMatrix"); glTranslated(cx, cy, 0.0); CHECK_GL_ERROR("DrawCircle", "glTranslated"); assert(m_Quadric); gluDisk(m_Quadric, 0.0, radius, 36, 1); CHECK_GL_ERROR("DrawCircle", "gluDisk"); SetColour(edge); gluDisk(m_Quadric, radius - 1.0, radius, 36, 1); CHECK_GL_ERROR("DrawCircle", "gluDisk (2)"); glPopMatrix(); CHECK_GL_ERROR("DrawCircle", "glPopMatrix"); } void GLACanvas::DrawSemicircle(gla_colour edge, gla_colour fill, glaCoord cx, glaCoord cy, glaCoord radius, glaCoord start) { // Draw a filled semicircle with an edge. // The semicircle extends from "start" deg to "start"+180 deg (increasing // clockwise, 0 deg upwards). SetColour(fill); glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR("DrawSemicircle", "glMatrixMode"); glPushMatrix(); CHECK_GL_ERROR("DrawSemicircle", "glPushMatrix"); glTranslated(cx, cy, 0.0); CHECK_GL_ERROR("DrawSemicircle", "glTranslated"); assert(m_Quadric); gluPartialDisk(m_Quadric, 0.0, radius, 36, 1, start, 180.0); CHECK_GL_ERROR("DrawSemicircle", "gluPartialDisk"); SetColour(edge); gluPartialDisk(m_Quadric, radius - 1.0, radius, 36, 1, start, 180.0); CHECK_GL_ERROR("DrawSemicircle", "gluPartialDisk (2)"); glPopMatrix(); CHECK_GL_ERROR("DrawSemicircle", "glPopMatrix"); } void GLACanvas::EnableDashedLines() { // Enable dashed lines, and start drawing in them. glLineStipple(1, 0x3333); CHECK_GL_ERROR("EnableDashedLines", "glLineStipple"); glEnable(GL_LINE_STIPPLE); CHECK_GL_ERROR("EnableDashedLines", "glEnable GL_LINE_STIPPLE"); } void GLACanvas::DisableDashedLines() { glDisable(GL_LINE_STIPPLE); CHECK_GL_ERROR("DisableDashedLines", "glDisable GL_LINE_STIPPLE"); } bool GLACanvas::Transform(const Vector3 & v, double* x_out, double* y_out, double* z_out) const { // Convert from data coordinates to screen coordinates. // Perform the projection. return gluProject(v.GetX(), v.GetY(), v.GetZ(), modelview_matrix, projection_matrix, viewport, x_out, y_out, z_out); } void GLACanvas::ReverseTransform(Double x, Double y, double* x_out, double* y_out, double* z_out) const { // Convert from screen coordinates to data coordinates. // Perform the projection. gluUnProject(x, y, 0.0, modelview_matrix, projection_matrix, viewport, x_out, y_out, z_out); CHECK_GL_ERROR("ReverseTransform", "gluUnProject"); } Double GLACanvas::SurveyUnitsAcrossViewport() const { // Measure the current viewport in survey units, taking into account the // current display scale. assert(m_Scale != 0.0); list_flags |= INVALIDATE_ON_SCALE; Double result = m_VolumeDiameter / m_Scale; if (y_size < x_size) { result = result * x_size / y_size; } return result; } void GLACanvas::ToggleSmoothShading() { m_SmoothShading = !m_SmoothShading; } void GLACanvas::ToggleTextured() { m_Textured = !m_Textured; if (m_Textured && m_Texture == 0) { glGenTextures(1, &m_Texture); CHECK_GL_ERROR("ToggleTextured", "glGenTextures"); glBindTexture(GL_TEXTURE_2D, m_Texture); CHECK_GL_ERROR("ToggleTextured", "glBindTexture"); ::wxInitAllImageHandlers(); wxImage img; wxString texture(wmsg_cfgpth()); texture += wxCONFIG_PATH_SEPARATOR; texture += wxT("images"); texture += wxCONFIG_PATH_SEPARATOR; texture += wxT("texture.png"); if (!img.LoadFile(texture, wxBITMAP_TYPE_PNG)) { // FIXME fprintf(stderr, "Couldn't load image.\n"); exit(1); } // Generate mipmaps. gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, // was GL_LUMINANCE img.GetWidth(), img.GetHeight(), GL_RGB, GL_UNSIGNED_BYTE, img.GetData()); CHECK_GL_ERROR("ToggleTextured", "gluBuild2DMipmaps"); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); CHECK_GL_ERROR("ToggleTextured", "glTexEnvi"); } } bool GLACanvas::SaveScreenshot(const wxString & fnm, wxBitmapType type) const { const int width = x_size; const int height = y_size; unsigned char *pixels = (unsigned char *)malloc(3 * width * (height + 1)); if (!pixels) return false; glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)pixels); CHECK_GL_ERROR("SaveScreenshot", "glReadPixels"); unsigned char * tmp_row = pixels + 3 * width * height; // We need to flip the image vertically - this approach should be more // efficient than using wxImage::Mirror(false) as that creates a new // wxImage object. for (int y = height / 2 - 1; y >= 0; --y) { unsigned char * upper = pixels + 3 * width * y; unsigned char * lower = pixels + 3 * width * (height - y - 1); memcpy(tmp_row, upper, 3 * width); memcpy(upper, lower, 3 * width); memcpy(lower, tmp_row, 3 * width); } // NB wxImage constructor calls free(pixels) for us. wxImage grab(width, height, pixels); return grab.SaveFile(fnm, type); } bool GLACanvas::CheckVisualFidelity(const unsigned char * target) const { unsigned char pixels[3 * 8 * 8]; if (double_buffered) { glReadBuffer(GL_BACK); CHECK_GL_ERROR("FirstShow", "glReadBuffer"); } glReadPixels(x_size / 2 - 4, y_size / 2 - 5, 8, 8, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)pixels); CHECK_GL_ERROR("CheckVisualFidelity", "glReadPixels"); if (double_buffered) { glReadBuffer(GL_FRONT); CHECK_GL_ERROR("FirstShow", "glReadBuffer"); } #if 0 // Show what got drawn and what was expected for debugging. for (int y = 0; y < 8; ++y) { for (int x = 0; x < 8; ++x) { int o = (y * 8 + x) * 3; printf("%c", pixels[o] ? 'X' : '.'); } printf(" "); for (int x = 0; x < 8; ++x) { int o = (y * 8 + x) * 3; printf("%c", target[o] ? 'X' : '.'); } printf("\n"); } #endif return (memcmp(pixels, target, sizeof(pixels)) == 0); } void GLACanvas::ReadPixels(int width, int height, unsigned char * buf) const { CHECK_GL_ERROR("ReadPixels", "glReadPixels"); glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)buf); } void GLACanvas::PolygonOffset(bool on) const { if (on) { glPolygonOffset(1.0, 1.0); glEnable(GL_POLYGON_OFFSET_FILL); } else { glDisable(GL_POLYGON_OFFSET_FILL); } } survex-1.4.4/src/export3d.cc0000644000175000017500000000476314312176177012666 00000000000000/* survex3d.cc * Export from Aven as Survex .3d. */ /* Copyright (C) 2001,2002,2011,2013,2014,2015,2018,2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "export3d.h" #include "export.h" // For LABELS, etc #include "img.h" #include #include #include #include "message.h" #include "namecompare.h" #include "osalloc.h" #include "useful.h" using namespace std; Export3D::~Export3D() { if (pimg) { img_close(pimg); } } const int * Export3D::passes() const { static const int default_passes[] = { LEGS|SURF|LABELS|ENTS|FIXES|EXPORTS, 0 }; return default_passes; } void Export3D::header(const char* title, const char *, time_t, double, double, double, double, double, double) { // FIXME: cs? pimg = img_write_stream(fh, NULL, title, NULL, 0); } void Export3D::line(const img_point* p1, const img_point* p, unsigned flags, bool fPendingMove) { // FIXME: flags here aren't quite right. int img_flags = 0; if (flags & SURF) { img_flags |= img_FLAG_SURFACE; } if (flags & SPLAYS) { img_flags |= img_FLAG_SPLAY; } if (fPendingMove) { img_write_item(pimg, img_MOVE, 0, NULL, p1->x, p1->y, p1->z); } img_write_item(pimg, img_LINE, img_flags, NULL, p->x, p->y, p->z); } void Export3D::label(const img_point* p, const char* s, bool fSurface, int type) { // FIXME: flags here aren't quite right. int flags = (fSurface ? img_SFLAG_SURFACE : img_SFLAG_UNDERGROUND); switch (type) { case ENTS: flags |= img_SFLAG_ENTRANCE; break; case FIXES: flags |= img_SFLAG_FIXED; break; case EXPORTS: flags |= img_SFLAG_EXPORTED; break; } img_write_item(pimg, img_LABEL, flags, s, p->x, p->y, p->z); } void Export3D::footer() { img_close(pimg); pimg = nullptr; } survex-1.4.4/src/namecmp.c0000644000175000017500000000405613533602667012370 00000000000000/* namecmp.c */ /* Ordering function for station names */ /* Copyright (C) 1991-2002,2004 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "namecmp.h" int name_cmp(const char *a, const char *b, int separator) { while (1) { int cha = (unsigned char)*a, chb = (unsigned char)*b; /* done if end of either first string */ if (!cha || !chb) return cha - chb; /* check for end of non-numeric prefix */ if (isdigit(cha)) { /* sort numbers numerically and before non-numbers */ const char *sa, *sb, *ea, *eb; int res; if (!isdigit(chb)) return chb == separator ? 1 : -1; sa = a; while (*sa == '0') sa++; ea = sa; while (isdigit((unsigned char)*ea)) ea++; sb = b; while (*sb == '0') sb++; eb = sb; while (isdigit((unsigned char)*eb)) eb++; /* shorter sorts first */ res = (ea - sa) - (eb - sb); /* same length, all digits, so memcmp() sorts numerically */ if (!res) res = memcmp(sa, sb, ea - sa); /* more leading zeros sorts first */ if (!res) res = (sb - b) - (sa - a); if (res) return res; /* if numbers match, sort by suffix */ a = ea; b = eb; continue; } if (cha != chb) { if (cha == separator) return -1; if (isdigit(chb) || chb == separator) return 1; return cha - chb; } a++; b++; } } survex-1.4.4/src/thgeomag.c0000644000175000017500000001336514141575516012544 00000000000000/** * @file thgeomag.cxx */ /* Copyright (C) 2006 Martin Budaj * * based on GPL-licensed code by * Copyright (C) 2000 Edward A Williams * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thgeomag.h" #include #include "thgeomagdata.h" #define max(a,b) (((a) > (b)) ? (a) : (b)) /*struct magfield_ { double X, Y, Z; }; magfield_ magfield;*/ #define nmax thgeomag_maxdeg #define nmaxl thgeomag_maxdeg #define pi 3.14159265358979 #define a 6378.137 #define b 6356.7523142 #define r_0 6371.2 double thgeomag(double lat, double lon, double h, double dat) { int n,m; static double P[nmax+1][nmax+1]; static double DP[nmax+1][nmax+1]; static double gnm[nmax+1][nmax+1]; static double hnm[nmax+1][nmax+1]; static double sm[nmax+1]; static double cm[nmax+1]; static double root[nmax+1]; static double roots[nmax+1][nmax+1][2]; double yearfrac,sr,r,theta,c,s,psi,fn,fn_0,B_r,B_theta,B_phi,X,Y; /* Z */ double sinpsi, cospsi, inv_s; static int been_here = 0; double sinlat = sin(lat); double coslat = cos(lat); h = h / 1000; /* convert to geocentric */ sr = sqrt(a*a*coslat*coslat + b*b*sinlat*sinlat); /* sr is effective radius */ theta = atan2(coslat * (h*sr + a*a), sinlat * (h*sr + b*b)); /* theta is geocentric co-latitude */ r = h*h + 2.0*h * sr + (a*a*a*a - ( a*a*a*a - b*b*b*b ) * sinlat*sinlat ) / (a*a - (a*a - b*b) * sinlat*sinlat ); r = sqrt(r); /* r is geocentric radial distance */ c = cos(theta); s = sin(theta); /* protect against zero divide at geographic poles */ inv_s = 1.0 / (s + (s == 0.)*1.0e-8); /*zero out arrays */ for ( n = 0; n <= nmax; n++ ) { for ( m = 0; m <= n; m++ ) { P[n][m] = 0; DP[n][m] = 0; } } /* diagonal elements */ P[0][0] = 1; P[1][1] = s; DP[0][0] = 0; DP[1][1] = c; P[1][0] = c ; DP[1][0] = -s; /* these values will not change for subsequent function calls */ if( !been_here ) { for ( n = 2; n <= nmax; n++ ) { root[n] = sqrt((2.0*n-1) / (2.0*n)); } for ( m = 0; m <= nmax; m++ ) { double mm = m*m; for ( n = max(m + 1, 2); n <= nmax; n++ ) { roots[m][n][0] = sqrt((n-1)*(n-1) - mm); roots[m][n][1] = 1.0 / sqrt( n*n - mm); } } been_here = 1; } for ( n=2; n <= nmax; n++ ) { /* double root = sqrt((2.0*n-1) / (2.0*n)); */ P[n][n] = P[n-1][n-1] * s * root[n]; DP[n][n] = (DP[n-1][n-1] * s + P[n-1][n-1] * c) * root[n]; } /* lower triangle */ for ( m = 0; m <= nmax; m++ ) { /* double mm = m*m; */ for ( n = max(m + 1, 2); n <= nmax; n++ ) { /* double root1 = sqrt((n-1)*(n-1) - mm); */ /* double root2 = 1.0 / sqrt( n*n - mm); */ P[n][m] = (P[n-1][m] * c * (2.0*n-1) - P[n-2][m] * roots[m][n][0]) * roots[m][n][1]; DP[n][m] = ((DP[n-1][m] * c - P[n-1][m] * s) * (2.0*n-1) - DP[n-2][m] * roots[m][n][0]) * roots[m][n][1]; } } /* compute gnm, hnm at dat */ int mindex = (int)((dat - thgeomag_minyear) / thgeomag_step); if (mindex < 0) mindex = 0; if (mindex > thgeomag_maxmindex) mindex = thgeomag_maxmindex; yearfrac = dat - thgeomag_step*mindex - thgeomag_minyear; for (n=1;n<=nmaxl;n++) { for (m = 0;m<=nmaxl;m++) { if (mindex == thgeomag_maxmindex) { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac * thgeomag_GNMD[n][m]; hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac * thgeomag_HNMD[n][m]; } else { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_GNM[mindex+1][n][m] - thgeomag_GNM[mindex][n][m]); hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_HNM[mindex+1][n][m] - thgeomag_HNM[mindex][n][m]); } } } /* compute sm (sin(m lon) and cm (cos(m lon)) */ for (m = 0;m<=nmaxl;m++) { sm[m] = sin(m * lon); cm[m] = cos(m * lon); } /* compute B fields */ B_r = 0.0; B_theta = 0.0; B_phi = 0.0; fn_0 = r_0/r; fn = fn_0 * fn_0; for ( n = 1; n <= nmaxl; n++ ) { double c1_n=0; double c2_n=0; double c3_n=0; for ( m = 0; m <= n; m++ ) { double tmp = (gnm[n][m] * cm[m] + hnm[n][m] * sm[m]); c1_n += tmp * P[n][m]; c2_n += tmp * DP[n][m]; c3_n += m * (gnm[n][m] * sm[m] - hnm[n][m] * cm[m]) * P[n][m]; } /* fn=pow(r_0/r,n+2.0); */ fn *= fn_0; B_r += (n + 1) * c1_n * fn; B_theta -= c2_n * fn; B_phi += c3_n * fn * inv_s; } /* Find geodetic field components: */ psi = theta - (pi / 2.0 - lat); sinpsi = sin(psi); cospsi = cos(psi); X = -B_theta * cospsi - B_r * sinpsi; Y = B_phi; /* Z = B_theta * sinpsi - B_r * cospsi; */ /* field[0]=B_r; field[1]=B_theta; field[2]=B_phi; field[3]=X; field[4]=Y; field[5]=Z;*/ /* output fields */ /* find variation in radians */ /* return zero variation at magnetic pole X=Y=0. */ /* E is positive */ /* magfield.X = X; magfield.Y = Y; magfield.Z = Z; */ return (X != 0. || Y != 0.) ? atan2(Y, X) : (double) 0.; } survex-1.4.4/src/imgtest.c0000644000175000017500000000410014141575516012410 00000000000000/* imgtest.c */ /* Test img in unhosted mode */ /* Copyright (C) 2014,2020 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "img.h" int main(int argc, char **argv) { char *fnm; char *survey; img *pimg; unsigned long c_stations = 0; unsigned long c_legs = 0; if (argc < 2 || argc > 3) { fprintf(stderr, "Syntax: %s 3DFILE [SURVEY]\n", argv[0]); return 1; } fnm = argv[1]; survey = argv[2]; if (survey) { pimg = img_open_survey(fnm, survey); } else { pimg = img_open(fnm); } if (!pimg) { fprintf(stderr, "%s: Failed to open '%s' (error code %d)\n", argv[0], fnm, (int)img_error()); return 1; } printf("Title: \"%s\"\n", pimg->title); printf("Date: \"%s\"\n", pimg->datestamp); printf("Format-Version: %d\n", pimg->version); printf("Extended-Elevation: %s\n", pimg->is_extended_elevation ? "yes" : "no"); while (1) { img_point pt; int code = img_read_item(pimg, &pt); if (code == img_STOP) break; switch (code) { case img_LINE: c_legs++; break; case img_LABEL: c_stations++; break; case img_BAD: img_close(pimg); fprintf(stderr, "%s: img_read_item failed (error code %d)\n", argv[0], (int)img_error()); return 1; } } printf("Stations: %lu\nLegs: %lu\n", c_stations, c_legs); img_close(pimg); return 0; } survex-1.4.4/src/vector3.h0000644000175000017500000000512114141575516012332 00000000000000// vector3.h // // C++ class for 3-element vectors // // Copyright (C) 2000-2002, Mark R. Shinwell. // Copyright (C) 2002-2004,2005,2006,2015 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef Vector3_h #define Vector3_h #include class Vector3 { protected: double x, y, z; public: Vector3() : x(0.0), y(0.0), z(0.0) { } Vector3(double a, double b, double c) : x(a), y(b), z(c) { } double GetX() const { return x; } double GetY() const { return y; } double GetZ() const { return z; } double magnitude() const { return sqrt(x*x + y*y + z*z); } // Returns a value in *radians*. double gradient() const { return atan2(z, sqrt(x*x + y*y)); } void normalise(); void assign(double a, double b, double c) { x = a; y = b; z = c; } void assign(const Vector3 &v) { *this = v; } friend Vector3 operator-(const Vector3& o) { return Vector3(-o.x, -o.y, -o.z); } Vector3& operator*=(double); Vector3& operator/=(double); Vector3& operator+=(const Vector3&); Vector3& operator-=(const Vector3&); friend Vector3 operator*(double, const Vector3&); friend Vector3 operator*(const Vector3& v, double f) { return f * v; } friend Vector3 operator*(const Vector3&, const Vector3&); // cross product friend Vector3 operator+(const Vector3&, const Vector3&); friend Vector3 operator-(const Vector3&, const Vector3&); friend bool operator==(const Vector3&, const Vector3&); friend bool operator<(const Vector3&, const Vector3&); friend double dot(const Vector3&, const Vector3&); }; inline bool operator==(const Vector3& a, const Vector3& b) { return a.x == b.x && a.y == b.y && a.z == b.z; } // So we can use Vector3 as a key in a map... inline bool operator<(const Vector3& a, const Vector3& b) { if (a.x != b.x) return a.x < b.x; if (a.y != b.y) return a.y < b.y; return a.z < b.z; } #endif survex-1.4.4/src/cavernlog.cc0000644000175000017500000005424414206240621013061 00000000000000/* cavernlog.cc * Run cavern inside an Aven window * * Copyright (C) 2005-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "aven.h" #include "cavernlog.h" #include "filename.h" #include "mainfrm.h" #include "message.h" #include #include #include // For select(): #ifdef HAVE_SYS_SELECT_H #include #endif #include #include #include #include #define GVIM_COMMAND "gvim +'call cursor($l,$c)' $f" #define VIM_COMMAND "x-terminal-emulator -e vim +'call cursor($l,$c)' $f" #define NVIM_COMMAND "x-terminal-emulator -e nvim +'call cursor($l,$c)' $f" #define GEDIT_COMMAND "gedit $f +$l:$c" // Pluma currently ignores the column, but include it assuming some future // version will add support. #define PLUMA_COMMAND "pluma +$l:$c $f" #define EMACS_COMMAND "x-terminal-emulator -e emacs +$l:$c $f" #define NANO_COMMAND "x-terminal-emulator -e nano +$l,$c $f" #define JED_COMMAND "x-terminal-emulator -e jed $f -g $l" #define KATE_COMMAND "kate -l $l -c $c $f" #ifdef __WXMSW__ # define DEFAULT_EDITOR_COMMAND "notepad $f" #elif defined __WXMAC__ # define DEFAULT_EDITOR_COMMAND "open -t $f" #else # define DEFAULT_EDITOR_COMMAND VIM_COMMAND #endif enum { LOG_REPROCESS = 1234, LOG_SAVE = 1235 }; static const wxString badutf8_html( wxT("")); static const wxString badutf8(wxUniChar(0xfffd)); // New event type for passing a chunk of cavern output from the worker thread // to the main thread (or from the idle event handler if we're not using // threads). class CavernOutputEvent; wxDEFINE_EVENT(wxEVT_CAVERN_OUTPUT, CavernOutputEvent); class CavernOutputEvent : public wxEvent { public: char buf[1000]; int len; CavernOutputEvent() : wxEvent(0, wxEVT_CAVERN_OUTPUT), len(0) { } wxEvent * Clone() const { CavernOutputEvent * e = new CavernOutputEvent(); e->len = len; if (len > 0) memcpy(e->buf, buf, len); return e; } }; #ifdef CAVERNLOG_USE_THREADS class CavernThread : public wxThread { protected: virtual ExitCode Entry(); CavernLogWindow *handler; wxInputStream * in; public: CavernThread(CavernLogWindow *handler_, wxInputStream * in_) : wxThread(wxTHREAD_DETACHED), handler(handler_), in(in_) { } ~CavernThread() { wxCriticalSectionLocker enter(handler->thread_lock); handler->thread = NULL; } }; wxThread::ExitCode CavernThread::Entry() { while (true) { CavernOutputEvent * e = new CavernOutputEvent(); in->Read(e->buf, sizeof(e->buf)); size_t n = in->LastRead(); if (n == 0 || TestDestroy()) { delete e; return (wxThread::ExitCode)0; } if (n == 1 && e->buf[0] == '\n') { // Don't send an event with just a blank line in. in->Read(e->buf + 1, sizeof(e->buf) - 1); n += in->LastRead(); if (TestDestroy()) { delete e; return (wxThread::ExitCode)0; } } e->len = n; handler->QueueEvent(e); } } #else void CavernLogWindow::OnIdle(wxIdleEvent& event) { if (cavern_out == NULL) return; wxInputStream * in = cavern_out->GetInputStream(); if (!in->CanRead()) { // Avoid a tight busy-loop on idle events. wxMilliSleep(10); } if (in->CanRead()) { CavernOutputEvent * e = new CavernOutputEvent(); in->Read(e->buf, sizeof(e->buf)); size_t n = in->LastRead(); if (n == 0) { delete e; return; } e->len = n; QueueEvent(e); } event.RequestMore(); } #endif BEGIN_EVENT_TABLE(CavernLogWindow, wxHtmlWindow) EVT_BUTTON(LOG_REPROCESS, CavernLogWindow::OnReprocess) EVT_BUTTON(LOG_SAVE, CavernLogWindow::OnSave) EVT_BUTTON(wxID_OK, CavernLogWindow::OnOK) EVT_COMMAND(wxID_ANY, wxEVT_CAVERN_OUTPUT, CavernLogWindow::OnCavernOutput) #ifdef CAVERNLOG_USE_THREADS EVT_CLOSE(CavernLogWindow::OnClose) #else EVT_IDLE(CavernLogWindow::OnIdle) #endif EVT_END_PROCESS(wxID_ANY, CavernLogWindow::OnEndProcess) END_EVENT_TABLE() wxString escape_for_shell(wxString s, bool protect_dash) { #ifdef __WXMSW__ // Correct quoting rules are insane: // // http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx // // Thankfully wxExecute passes the command string to CreateProcess(), so // at least we don't need to quote for cmd.exe too. if (s.empty() || s.find_first_of(wxT(" \"\t\n\v")) != s.npos) { // Need to quote. s.insert(0, wxT('"')); for (size_t p = 1; p < s.size(); ++p) { size_t backslashes = 0; while (s[p] == wxT('\\')) { ++backslashes; if (++p == s.size()) { // Escape all the backslashes, since they're before // the closing quote we add below. s.append(backslashes, wxT('\\')); goto done; } } if (s[p] == wxT('"')) { // Escape any preceding backslashes and this quote. s.insert(p, backslashes + 1, wxT('\\')); p += backslashes + 1; } } done: s.append(wxT('"')); } #else size_t p = 0; if (protect_dash && !s.empty() && s[0u] == '-') { // If the filename starts with a '-', protect it from being // treated as an option by prepending "./". s.insert(0, wxT("./")); p = 2; } while (p < s.size()) { // Exclude a few safe characters which are common in filenames if (!isalnum(s[p]) && strchr("/._-", s[p]) == NULL) { s.insert(p, 1, wxT('\\')); ++p; } ++p; } #endif return s; } wxString get_command_path(const wxChar * command_name) { #ifdef __WXMSW__ wxString cmd; { DWORD len = 256; wchar_t *buf = NULL; while (1) { DWORD got; buf = (wchar_t*)osrealloc(buf, len * 2); got = GetModuleFileNameW(NULL, buf, len); if (got < len) break; len += len; } /* Strange Win32 nastiness - strip prefix "\\?\" if present */ wchar_t *start = buf; if (wcsncmp(start, L"\\\\?\\", 4) == 0) start += 4; wchar_t * slash = wcsrchr(start, L'\\'); if (slash) { cmd.assign(start, slash - start + 1); } osfree(buf); } #else wxString cmd = wxString(msg_exepth(), wxConvUTF8); #endif cmd += command_name; return cmd; } CavernLogWindow::CavernLogWindow(MainFrm * mainfrm_, const wxString & survey_, wxWindow * parent) : wxHtmlWindow(parent), mainfrm(mainfrm_), end(buf), survey(survey_) { int fsize = parent->GetFont().GetPointSize(); int sizes[7] = { fsize, fsize, fsize, fsize, fsize, fsize, fsize }; SetFonts(wxString(), wxString(), sizes); } CavernLogWindow::~CavernLogWindow() { #ifdef CAVERNLOG_USE_THREADS if (thread) stop_thread(); #endif if (cavern_out) { wxEndBusyCursor(); cavern_out->Detach(); } } #ifdef CAVERNLOG_USE_THREADS void CavernLogWindow::stop_thread() { // Killing the subprocess by its pid is theoretically racy, but in practice // it's not going to cause issues, and it's all the wxProcess API seems to // allow us to do. If we don't kill the subprocess, we need to wait for it // to write out some output - there seems to be no way to do the equivalent // of select() with a timeout on a wxInputStream. // // The only alternative to this seems to be to do: // // while (!s.CanRead()) { // if (TestDestroy()) return (wxThread::ExitCode)0; // wxMilliSleep(N); // } // // But that makes the log window update sluggishly, and we're using a // worker thread precisely to try to avoid having to do dumb stuff like // this. wxProcess::Kill(cavern_out->GetPid()); { wxCriticalSectionLocker enter(thread_lock); if (thread) { wxThreadError res; res = thread->Delete(NULL, wxTHREAD_WAIT_BLOCK); if (res != wxTHREAD_NO_ERROR) { // FIXME } } } // Wait for thread to complete. while (true) { { wxCriticalSectionLocker enter(thread_lock); if (!thread) break; } wxMilliSleep(1); } } void CavernLogWindow::OnClose(wxCloseEvent &) { if (thread) stop_thread(); Destroy(); } #endif void CavernLogWindow::OnLinkClicked(const wxHtmlLinkInfo &link) { wxString href = link.GetHref(); wxString title = link.GetTarget(); size_t colon2 = href.rfind(wxT(':')); if (colon2 == wxString::npos) return; size_t colon = href.rfind(wxT(':'), colon2 - 1); if (colon == wxString::npos) return; wxString cmd; wxChar * p = wxGetenv(wxT("SURVEXEDITOR")); if (p) { cmd = p; if (!cmd.find(wxT("$f"))) { cmd += wxT(" $f"); } } else { p = wxGetenv(wxT("VISUAL")); if (!p) p = wxGetenv(wxT("EDITOR")); if (!p) { cmd = wxT(DEFAULT_EDITOR_COMMAND); } else { cmd = p; if (cmd == "gvim") { cmd = wxT(GVIM_COMMAND); } else if (cmd == "vim") { cmd = wxT(VIM_COMMAND); } else if (cmd == "nvim") { cmd = wxT(NVIM_COMMAND); } else if (cmd == "gedit") { cmd = wxT(GEDIT_COMMAND); } else if (cmd == "pluma") { cmd = wxT(PLUMA_COMMAND); } else if (cmd == "emacs") { cmd = wxT(EMACS_COMMAND); } else if (cmd == "nano") { cmd = wxT(NANO_COMMAND); } else if (cmd == "jed") { cmd = wxT(JED_COMMAND); } else if (cmd == "kate") { cmd = wxT(KATE_COMMAND); } else { // Escape any $. cmd.Replace(wxT("$"), wxT("$$")); cmd += wxT(" $f"); } } } size_t i = 0; while ((i = cmd.find(wxT('$'), i)) != wxString::npos) { if (++i >= cmd.size()) break; switch ((int)cmd[i]) { case wxT('$'): cmd.erase(i, 1); break; case wxT('f'): { wxString f = escape_for_shell(href.substr(0, colon), true); cmd.replace(i - 1, 2, f); i += f.size() - 1; break; } case wxT('t'): { wxString t = escape_for_shell(title); cmd.replace(i - 1, 2, t); i += t.size() - 1; break; } case wxT('l'): { wxString l = escape_for_shell(href.substr(colon + 1, colon2 - colon - 1)); cmd.replace(i - 1, 2, l); i += l.size() - 1; break; } case wxT('c'): { wxString l; if (colon2 >= href.size() - 1) l = wxT("0"); else l = escape_for_shell(href.substr(colon2 + 1)); cmd.replace(i - 1, 2, l); i += l.size() - 1; break; } default: ++i; } } if (wxExecute(cmd, wxEXEC_ASYNC|wxEXEC_MAKE_GROUP_LEADER) >= 0) return; wxString m; // TRANSLATORS: %s is replaced by the command we attempted to run. m.Printf(wmsg(/*Couldn’t run external command: “%sâ€*/17), cmd.c_str()); m += wxT(" ("); m += wxString(strerror(errno), wxConvUTF8); m += wxT(')'); wxGetApp().ReportError(m); } void CavernLogWindow::process(const wxString &file) { SetPage(wxString()); #ifdef CAVERNLOG_USE_THREADS if (thread) stop_thread(); #endif if (cavern_out) { cavern_out->Detach(); cavern_out = NULL; } else { wxBeginBusyCursor(); } SetFocus(); filename = file; info_count = 0; link_count = 0; cur.resize(0); log_txt.resize(0); #ifdef __WXMSW__ SetEnvironmentVariable(wxT("SURVEX_UTF8"), wxT("1")); #else setenv("SURVEX_UTF8", "1", 1); #endif wxString escaped_file = escape_for_shell(file, true); wxString cmd = get_command_path(L"cavern"); cmd = escape_for_shell(cmd, false); cmd += wxT(" -o "); cmd += escaped_file; cmd += wxT(' '); cmd += escaped_file; cavern_out = wxProcess::Open(cmd); if (!cavern_out) { wxString m; m.Printf(wmsg(/*Couldn’t run external command: “%sâ€*/17), cmd.c_str()); m += wxT(" ("); m += wxString(strerror(errno), wxConvUTF8); m += wxT(')'); wxGetApp().ReportError(m); return; } // We want to receive the wxProcessEvent when cavern exits. cavern_out->SetNextHandler(this); #ifdef CAVERNLOG_USE_THREADS thread = new CavernThread(this, cavern_out->GetInputStream()); if (thread->Run() != wxTHREAD_NO_ERROR) { wxGetApp().ReportError(wxT("Thread failed to start")); delete thread; thread = NULL; } #endif } void CavernLogWindow::OnCavernOutput(wxCommandEvent & e_) { CavernOutputEvent & e = (CavernOutputEvent&)e_; if (e.len > 0) { ssize_t n = e.len; if (size_t(n) > sizeof(buf) - (end - buf)) abort(); memcpy(end, e.buf, n); log_txt.append((const char *)end, n); end += n; const unsigned char * p = buf; while (p != end) { int ch = *p; if (ch >= 0x80) { // Decode multi-byte UTF-8 sequence. if (ch < 0xc0) { // Invalid UTF-8 sequence. goto bad_utf8; } else if (ch < 0xe0) { /* 2 byte sequence */ if (end - p < 2) { // Incomplete UTF-8 sequence - try to read more. break; } int ch1 = *++p; if ((ch1 & 0xc0) != 0x80) { // Invalid UTF-8 sequence. goto bad_utf8; } ch = ((ch & 0x1f) << 6) | (ch1 & 0x3f); } else if (ch < 0xf0) { /* 3 byte sequence */ if (end - p < 3) { // Incomplete UTF-8 sequence - try to read more. break; } int ch1 = *++p; ch = ((ch & 0x1f) << 12) | ((ch1 & 0x3f) << 6); if ((ch1 & 0xc0) != 0x80) { // Invalid UTF-8 sequence. goto bad_utf8; } int ch2 = *++p; if ((ch2 & 0xc0) != 0x80) { // Invalid UTF-8 sequence. goto bad_utf8; } ch |= (ch2 & 0x3f); } else { // Overlong UTF-8 sequence. goto bad_utf8; } } ++p; if (false) { bad_utf8: // Resync to next byte which starts a UTF-8 sequence. while (p != end) { if (*p < 0x80 || (*p >= 0xc0 && *p < 0xf0)) break; ++p; } cur += badutf8_html; continue; } switch (ch) { case '\r': // Ignore. break; case '\n': { if (cur.empty()) continue; if (cur[0] == ' ') { if (source_line.empty()) { // Source line shown for context. Store it so we // can use the caret line to highlight it. swap(source_line, cur); } else { size_t caret = cur.rfind('^'); if (caret != wxString::npos) { size_t tilde = cur.rfind('~'); if (tilde == wxString::npos || tilde < caret) { tilde = caret; } cur = " "; // FIXME: Need to count each & entity as one character... cur.append(source_line, 1, caret - 1); if (caret < source_line.size()) { cur.append(""); cur.append(highlight ? highlight : wxT("")); cur.append(source_line, caret, tilde + 1 - caret); cur.append(""); } if (tilde + 1 < source_line.size()) { cur.append(source_line, tilde + 1, wxString::npos); } } else { // No caret in second line - just output both. source_line.replace(0, 1, " "); source_line += "
    \n "; source_line.append(cur, 1, wxString::npos); swap(cur, source_line); } cur += "
    \n"; AppendToPage(cur); cur.clear(); source_line.clear(); } continue; } if (!source_line.empty()) { // Previous line was a source line without column info // so just show it. source_line.replace(0, 1, " "); source_line += "
    \n"; AppendToPage(source_line); source_line.clear(); } #ifndef __WXMSW__ size_t colon = cur.find(':'); #else // If the path is "C:\path\to\file.svx" then don't split at the // : after the drive letter! FIXME: better to look for ": "? size_t colon = cur.find(':', 2); #endif if (colon != wxString::npos && colon < cur.size() - 2) { ++colon; size_t i = colon; while (i < cur.size() - 2 && cur[i] >= wxT('0') && cur[i] <= wxT('9')) { ++i; } if (i > colon && cur[i] == wxT(':') ) { colon = i; // Check for column number. while (++i < cur.size() - 2 && cur[i] >= wxT('0') && cur[i] <= wxT('9')) { } bool have_column = (i > colon + 1 && cur[i] == wxT(':')); if (have_column) { colon = i; } else { // If there's no colon, include a trailing ':' // so that we can unambiguously split the href // value up into filename, line and column. ++colon; } wxString tag = wxT(""); cur.insert(0, tag); size_t offset = colon + tag.size(); cur.insert(offset, wxT("")); offset += 4 + 2; if (!have_column) --offset; static const wxString & error_marker = wmsg(/*error*/93) + ":"; static const wxString & warning_marker = wmsg(/*warning*/4) + ":"; static const wxString & info_marker = wmsg(/*info*/485) + ":"; if (cur.substr(offset, error_marker.size()) == error_marker) { // Show "error" marker in red. highlight = wxT(""); cur.insert(offset, highlight); offset += 24 + error_marker.size() - 1; cur.insert(offset, wxT("")); } else if (cur.substr(offset, warning_marker.size()) == warning_marker) { // Show "warning" marker in orange. highlight = wxT(""); cur.insert(offset, highlight); offset += 27 + warning_marker.size() - 1; cur.insert(offset, wxT("")); } else if (cur.substr(offset, info_marker.size()) == info_marker) { // Show "info" marker in blue. ++info_count; highlight = wxT(""); cur.insert(offset, highlight); offset += 25 + info_marker.size() - 1; cur.insert(offset, wxT("")); } else { highlight = NULL; } ++link_count; } } // Save the scrollbar positions. int scroll_x = 0, scroll_y = 0; GetViewStart(&scroll_x, &scroll_y); cur += wxT("
    \n"); AppendToPage(cur); if (!link_count) { // Auto-scroll the window until we've reported a // warning or error. int x, y; GetVirtualSize(&x, &y); int xs, ys; GetClientSize(&xs, &ys); y -= ys; int xu, yu; GetScrollPixelsPerUnit(&xu, &yu); Scroll(scroll_x, y / yu); } else { // Restore the scrollbar positions. Scroll(scroll_x, scroll_y); } cur.clear(); break; } case '<': cur += wxT("<"); break; case '>': cur += wxT(">"); break; case '&': cur += wxT("&"); break; case '"': cur += wxT("""); continue; default: #ifdef wxUSE_UNICODE cur += wxChar(ch); #else // This approach means that highlighting of "error" or // "warning" won't work in translations where they contain // non-ASCII characters, but wxWidgets >= 3.0 in always // Unicode, so this corner case is already very uncommon, // and will become irrelevant with time. if (ch >= 128) { cur += wxString::Format(wxT("&#%u;"), ch); } else { cur += (char)ch; } #endif } } size_t left = end - p; end = buf + left; if (left) memmove(buf, p, left); Update(); return; } if (!source_line.empty()) { // Previous line was a source line without column info // so just show it. source_line.replace(0, 1, " "); source_line += "
    \n"; AppendToPage(source_line); source_line.clear(); } if (e.len <= 0 && buf != end) { // Truncated UTF-8 sequence. cur += badutf8_html; } if (!cur.empty()) { cur += "
    \n"; AppendToPage("
    " + cur); } /* TRANSLATORS: Label for button in aven’s cavern log window which * allows the user to save the log to a file. */ AppendToPage(wxString::Format(wxT(""), (int)LOG_SAVE, wmsg(/*&Save Log*/446).c_str())); wxEndBusyCursor(); delete cavern_out; cavern_out = NULL; if (e.len < 0) { /* Negative length indicates non-zero exit status from cavern. */ /* TRANSLATORS: Label for button in aven’s cavern log window which * causes the survey data to be reprocessed. */ AppendToPage(wxString::Format(wxT(""), (int)LOG_REPROCESS, wmsg(/*&Reprocess*/184).c_str())); return; } AppendToPage(wxString::Format(wxT(""), (int)LOG_REPROCESS, wmsg(/*&Reprocess*/184).c_str())); AppendToPage(wxString::Format(wxT(""), (int)wxID_OK)); Update(); init_done = false; { wxString file3d(filename, 0, filename.length() - 3); file3d.append(wxT("3d")); if (!mainfrm->LoadData(file3d, survey)) { return; } } // Don't stay on log if there there are only "info" diagnostics. if (link_count == info_count) { wxCommandEvent dummy; OnOK(dummy); } } void CavernLogWindow::OnEndProcess(wxProcessEvent & evt) { CavernOutputEvent * e = new CavernOutputEvent(); // Zero length indicates successful exit, negative length unsuccessful exit. e->len = (evt.GetExitCode() == 0 ? 0 : -1); QueueEvent(e); } void CavernLogWindow::OnReprocess(wxCommandEvent &) { process(filename); } void CavernLogWindow::OnSave(wxCommandEvent &) { wxString filelog(filename, 0, filename.length() - 3); filelog += wxT("log"); #ifdef __WXMOTIF__ wxString ext(wxT("*.log")); #else /* TRANSLATORS: Log files from running cavern (extension .log) */ wxString ext = wmsg(/*Log files*/447); ext += wxT("|*.log"); #endif wxFileDialog dlg(this, wmsg(/*Select an output filename*/319), wxString(), filelog, ext, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() != wxID_OK) return; filelog = dlg.GetPath(); FILE * fh_log = wxFopen(filelog, wxT("w")); if (!fh_log) { wxGetApp().ReportError(wxString::Format(wmsg(/*Error writing to file “%sâ€*/110), filelog.c_str())); return; } fwrite(log_txt.data(), log_txt.size(), 1, fh_log); fclose(fh_log); } void CavernLogWindow::OnOK(wxCommandEvent &) { if (init_done) { mainfrm->HideLog(this); } else { mainfrm->InitialiseAfterLoad(filename, survey); init_done = true; } } survex-1.4.4/src/aven.rc0000644000175000017500000000012214240562667012052 00000000000000AAA_aven ICON aven.ico #define wxUSE_DPI_AWARE_MANIFEST 1 #include "wx/msw/wx.rc" survex-1.4.4/src/moviemaker-legacy.cc0000644000175000017500000003744214141575516014517 00000000000000// // moviemaker.cc // // Class for writing movies from Aven for old libav/ffmpeg // // Copyright (C) 2004,2011,2012,2013,2014,2015,2016 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // /* Based on output-example.c: * * Libavformat API example: Output a media file in any supported * libavformat format. The default codecs are used. * * Copyright (c) 2003 Fabrice Bellard * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifdef HAVE_CONFIG_H #include #endif #define __STDC_CONSTANT_MACROS #include #include #include #include "moviemaker.h" #ifdef WITH_LIBAV extern "C" { # include # include # include # include } # ifndef AV_PKT_FLAG_KEY # define AV_PKT_FLAG_KEY PKT_FLAG_KEY # endif # ifndef HAVE_AV_GUESS_FORMAT # define av_guess_format guess_format # endif # ifndef HAVE_AVIO_OPEN # define avio_open url_fopen # endif # ifndef HAVE_AVIO_CLOSE # define avio_close url_fclose # endif # ifndef HAVE_AV_FRAME_ALLOC static inline AVFrame * av_frame_alloc() { return avcodec_alloc_frame(); } # endif # ifndef HAVE_AV_FRAME_FREE # ifdef HAVE_AVCODEC_FREE_FRAME static inline void av_frame_free(AVFrame ** frame) { avcodec_free_frame(frame); } # else static inline void av_frame_free(AVFrame ** frame) { free((*frame)->data[0]); free(*frame); *frame = NULL; } # endif # endif # ifndef HAVE_AVCODEC_OPEN2 // We always pass NULL for OPTS below. # define avcodec_open2(CTX, CODEC, OPTS) avcodec_open(CTX, CODEC) # endif # ifndef HAVE_AVFORMAT_NEW_STREAM // We always pass NULL for CODEC below. # define avformat_new_stream(S, CODEC) av_new_stream(S, 0) # endif # if !HAVE_DECL_AVMEDIA_TYPE_VIDEO # define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO # endif # if !HAVE_DECL_AV_CODEC_ID_NONE # define AV_CODEC_ID_NONE CODEC_ID_NONE # endif # if !HAVE_DECL_AV_PIX_FMT_RGB24 # define AV_PIX_FMT_RGB24 PIX_FMT_RGB24 # endif # if !HAVE_DECL_AV_PIX_FMT_YUV420P # define AV_PIX_FMT_YUV420P PIX_FMT_YUV420P # endif # ifndef AVIO_FLAG_WRITE # define AVIO_FLAG_WRITE URL_WRONLY # endif enum { MOVIE_NO_SUITABLE_FORMAT = 1, MOVIE_AUDIO_ONLY, MOVIE_FILENAME_TOO_LONG }; # ifndef HAVE_AVCODEC_ENCODE_VIDEO2 const int OUTBUF_SIZE = 200000; # endif #endif MovieMaker::MovieMaker() #ifdef WITH_LIBAV : oc(0), video_st(0), frame(0), outbuf(0), pixels(0), sws_ctx(0), averrno(0) #endif { #ifdef WITH_LIBAV static bool initialised_ffmpeg = false; if (initialised_ffmpeg) return; // FIXME: register only the codec(s) we want to use... avcodec_register_all(); av_register_all(); initialised_ffmpeg = true; #endif } #ifdef WITH_LIBAV static int write_packet(void *opaque, uint8_t *buf, int buf_size) { FILE * fh = (FILE*)opaque; size_t res = fwrite(buf, 1, buf_size, fh); return res > 0 ? res : -1; } static int64_t seek_stream(void *opaque, int64_t offset, int whence) { FILE * fh = (FILE*)opaque; return fseek(fh, offset, whence); } #endif #define MAX_EXTENSION_LEN 8 bool MovieMaker::Open(FILE* fh, const char * ext, int width, int height) { #ifdef WITH_LIBAV fh_to_close = fh; AVOutputFormat * fmt = NULL; char dummy_filename[MAX_EXTENSION_LEN + 3] = "x."; if (strlen(ext) <= MAX_EXTENSION_LEN) { strcpy(dummy_filename + 2, ext); // Pass "x." + extension to av_guess_format() to avoid having to deal // with wide character filenames. fmt = av_guess_format(NULL, dummy_filename, NULL); } if (!fmt) { // We couldn't deduce the output format from file extension so default // to MPEG. fmt = av_guess_format("mpeg", NULL, NULL); if (!fmt) { averrno = MOVIE_NO_SUITABLE_FORMAT; return false; } strcpy(dummy_filename + 2, "mpg"); } if (fmt->video_codec == AV_CODEC_ID_NONE) { averrno = MOVIE_AUDIO_ONLY; return false; } /* Allocate the output media context. */ oc = avformat_alloc_context(); if (!oc) { averrno = AVERROR(ENOMEM); return false; } oc->oformat = fmt; strcpy(oc->filename, dummy_filename); /* find the video encoder */ AVCodec *codec = avcodec_find_encoder(fmt->video_codec); if (!codec) { // FIXME : Erm - internal ffmpeg library problem? averrno = AVERROR(ENOMEM); return false; } // Add the video stream. video_st = avformat_new_stream(oc, codec); if (!video_st) { averrno = AVERROR(ENOMEM); return false; } // Set sample parameters. AVCodecContext *c = video_st->codec; c->bit_rate = 400000; /* Resolution must be a multiple of two. */ c->width = width; c->height = height; /* timebase: This is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. For fixed-fps content, * timebase should be 1/framerate and timestamp increments should be * identical to 1. */ #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 44, 0) // Old way, which now causes deprecation warnings. c->time_base.den = 25; // Frames per second. c->time_base.num = 1; #else video_st->time_base.den = 25; // Frames per second. video_st->time_base.num = 1; c->time_base = video_st->time_base; #endif c->gop_size = 12; /* emit one intra frame every twelve frames at most */ c->pix_fmt = AV_PIX_FMT_YUV420P; c->rc_buffer_size = c->bit_rate * 4; // Enough for 4 seconds c->rc_max_rate = c->bit_rate * 2; // B frames are backwards predicted - they can improve compression, // but may slow encoding and decoding. // if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) { // c->max_b_frames = 2; // } /* Some formats want stream headers to be separate. */ if (oc->oformat->flags & AVFMT_GLOBALHEADER) c->flags |= CODEC_FLAG_GLOBAL_HEADER; int retval; #ifndef HAVE_AVFORMAT_WRITE_HEADER // Set the output parameters (must be done even if no parameters). retval = av_set_parameters(oc, NULL); if (retval < 0) { averrno = retval; return false; } #endif retval = avcodec_open2(c, NULL, NULL); if (retval < 0) { averrno = retval; return false; } #ifndef HAVE_AVCODEC_ENCODE_VIDEO2 outbuf = NULL; if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) { outbuf = (unsigned char *)av_malloc(OUTBUF_SIZE); if (!outbuf) { averrno = AVERROR(ENOMEM); return false; } } #endif /* Allocate the encoded raw picture. */ frame = av_frame_alloc(); if (!frame) { averrno = AVERROR(ENOMEM); return false; } retval = av_image_alloc(frame->data, frame->linesize, c->width, c->height, c->pix_fmt, 1); if (retval < 0) { averrno = retval; return false; } if (c->pix_fmt != AV_PIX_FMT_YUV420P) { // FIXME need to allocate another frame for this case if we stop // hardcoding AV_PIX_FMT_YUV420P. abort(); } frame->format = c->pix_fmt; frame->width = c->width; frame->height = c->height; pixels = (unsigned char *)av_malloc(width * height * 6); if (!pixels) { averrno = AVERROR(ENOMEM); return false; } // Show the format we've ended up with (for debug purposes). // av_dump_format(oc, 0, fnm, 1); av_free(sws_ctx); sws_ctx = sws_getContext(width, height, AV_PIX_FMT_RGB24, width, height, c->pix_fmt, SWS_BICUBIC, NULL, NULL, NULL); if (sws_ctx == NULL) { fprintf(stderr, "Cannot initialize the conversion context!\n"); averrno = AVERROR(ENOMEM); return false; } if (!(fmt->flags & AVFMT_NOFILE)) { const int buf_size = 8192; void * buf = av_malloc(buf_size); oc->pb = avio_alloc_context(static_cast(buf), buf_size, 1, fh, NULL, write_packet, seek_stream); if (!oc->pb) { averrno = AVERROR(ENOMEM); return false; } } // Write the stream header, if any. #ifdef HAVE_AVFORMAT_WRITE_HEADER retval = avformat_write_header(oc, NULL); #else retval = av_write_header(oc); #endif if (retval < 0) { averrno = retval; return false; } averrno = 0; return true; #else (void)fh; (void)ext; (void)width; (void)height; return false; #endif } unsigned char * MovieMaker::GetBuffer() const { #ifdef WITH_LIBAV return pixels + GetWidth() * GetHeight() * 3; #else return NULL; #endif } int MovieMaker::GetWidth() const { #ifdef WITH_LIBAV assert(video_st); AVCodecContext *c = video_st->codec; return c->width; #else return 0; #endif } int MovieMaker::GetHeight() const { #ifdef WITH_LIBAV assert(video_st); AVCodecContext *c = video_st->codec; return c->height; #else return 0; #endif } bool MovieMaker::AddFrame() { #ifdef WITH_LIBAV AVCodecContext * c = video_st->codec; if (c->pix_fmt != AV_PIX_FMT_YUV420P) { // FIXME convert... abort(); } int len = 3 * c->width; { // Flip image vertically int h = c->height; unsigned char * src = pixels + h * len; unsigned char * dest = src - len; while (h--) { memcpy(dest, src, len); src += len; dest -= len; } } sws_scale(sws_ctx, &pixels, &len, 0, c->height, frame->data, frame->linesize); if (oc->oformat->flags & AVFMT_RAWPICTURE) { abort(); } // Encode this frame. #ifdef HAVE_AVCODEC_ENCODE_VIDEO2 AVPacket pkt; int got_packet; av_init_packet(&pkt); pkt.data = NULL; int ret = avcodec_encode_video2(c, &pkt, frame, &got_packet); if (ret < 0) { averrno = ret; return false; } if (got_packet && pkt.size) { // Write the compressed frame to the media file. if (pkt.pts != int64_t(AV_NOPTS_VALUE)) { pkt.pts = av_rescale_q(pkt.pts, c->time_base, video_st->time_base); } if (pkt.dts != int64_t(AV_NOPTS_VALUE)) { pkt.dts = av_rescale_q(pkt.dts, c->time_base, video_st->time_base); } pkt.stream_index = video_st->index; /* Write the compressed frame to the media file. */ ret = av_interleaved_write_frame(oc, &pkt); if (ret < 0) { averrno = ret; return false; } } #else out_size = avcodec_encode_video(c, outbuf, OUTBUF_SIZE, frame); // outsize == 0 means that this frame has been buffered, so there's nothing // to write yet. if (out_size) { // Write the compressed frame to the media file. AVPacket pkt; av_init_packet(&pkt); if (c->coded_frame->pts != (int64_t)AV_NOPTS_VALUE) pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, video_st->time_base); if (c->coded_frame->key_frame) pkt.flags |= AV_PKT_FLAG_KEY; pkt.stream_index = video_st->index; pkt.data = outbuf; pkt.size = out_size; /* Write the compressed frame to the media file. */ int ret = av_interleaved_write_frame(oc, &pkt); if (ret < 0) { averrno = ret; return false; } } #endif #endif return true; } bool MovieMaker::Close() { #ifdef WITH_LIBAV if (video_st && averrno == 0) { // No more frames to compress. The codec may have a few frames // buffered if we're using B frames, so write those too. AVCodecContext * c = video_st->codec; #ifdef HAVE_AVCODEC_ENCODE_VIDEO2 while (1) { AVPacket pkt; int got_packet; av_init_packet(&pkt); pkt.data = NULL; pkt.size = 0; int ret = avcodec_encode_video2(c, &pkt, NULL, &got_packet); if (ret < 0) { release(); averrno = ret; return false; } if (!got_packet) break; if (!pkt.size) continue; // Write the compressed frame to the media file. if (pkt.pts != int64_t(AV_NOPTS_VALUE)) { pkt.pts = av_rescale_q(pkt.pts, c->time_base, video_st->time_base); } if (pkt.dts != int64_t(AV_NOPTS_VALUE)) { pkt.dts = av_rescale_q(pkt.dts, c->time_base, video_st->time_base); } pkt.stream_index = video_st->index; /* Write the compressed frame to the media file. */ ret = av_interleaved_write_frame(oc, &pkt); if (ret < 0) { release(); averrno = ret; return false; } } #else while (out_size) { out_size = avcodec_encode_video(c, outbuf, OUTBUF_SIZE, NULL); if (out_size) { // Write the compressed frame to the media file. AVPacket pkt; av_init_packet(&pkt); if (c->coded_frame->pts != (int64_t)AV_NOPTS_VALUE) pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, video_st->time_base); if (c->coded_frame->key_frame) pkt.flags |= AV_PKT_FLAG_KEY; pkt.stream_index = video_st->index; pkt.data = outbuf; pkt.size = out_size; /* write the compressed frame in the media file */ int ret = av_interleaved_write_frame(oc, &pkt); if (ret < 0) { release(); averrno = ret; return false; } } } #endif av_write_trailer(oc); } release(); #endif return true; } #ifdef WITH_LIBAV void MovieMaker::release() { if (video_st) { // Close codec. avcodec_close(video_st->codec); video_st = NULL; } if (frame) { av_frame_free(&frame); } av_free(pixels); pixels = NULL; av_free(outbuf); outbuf = NULL; av_free(sws_ctx); sws_ctx = NULL; if (oc) { // Free the streams. for (size_t i = 0; i < oc->nb_streams; ++i) { av_freep(&oc->streams[i]->codec); av_freep(&oc->streams[i]); } if (!(oc->oformat->flags & AVFMT_NOFILE)) { // Release the AVIOContext. av_free(oc->pb); } // Free the stream. av_free(oc); oc = NULL; } if (fh_to_close) { fclose(fh_to_close); fh_to_close = NULL; } } #endif MovieMaker::~MovieMaker() { #ifdef WITH_LIBAV release(); #endif } const char * MovieMaker::get_error_string() const { #ifdef WITH_LIBAV switch (averrno) { case AVERROR(EIO): return "I/O error"; case AVERROR(EDOM): return "Number syntax expected in filename"; case AVERROR_INVALIDDATA: /* same as AVERROR_UNKNOWN: return "unknown error"; */ return "invalid data found"; case AVERROR(ENOMEM): return "not enough memory"; case AVERROR(EILSEQ): return "unknown format"; case AVERROR(ENOSYS): return "Operation not supported"; case AVERROR(ENOENT): return "No such file or directory"; case AVERROR_EOF: return "End of file"; case AVERROR_PATCHWELCOME: return "Not implemented in FFmpeg"; case 0: return "No error"; case MOVIE_NO_SUITABLE_FORMAT: return "Couldn't find a suitable output format"; case MOVIE_AUDIO_ONLY: return "Audio-only format specified"; case MOVIE_FILENAME_TOO_LONG: return "Filename too long"; } #endif return "Unknown error"; } survex-1.4.4/src/validate.c0000644000175000017500000001726614142042211012524 00000000000000/* validate.c * * Checks that SURVEX's data structures are valid and consistent * * NB The checks currently done aren't very comprehensive - more will be * added if bugs require them * * Copyright (C) 1993,1994,1996,2000,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "cavern.h" #include "filename.h" #include "message.h" #include "netbits.h" #include "validate.h" /* maximum absolute value allowed for a coordinate of a fixed station */ #define MAX_POS 10000000.0 static bool validate_prefix_tree(void); static bool validate_prefix_subtree(prefix *pfx); static bool validate_station_list(void); #if 0 extern void check_fixed(void) { /* not a requirement -- we allow hanging sections of survey * which get spotted and removed */ node *stn; printf("*** Checking fixed-ness\n"); /* NB: don't use FOR_EACH_STN as it isn't reentrant at present */ for (stn = stnlist; stn; stn = stn->next) { if (stn->status && !fixed(stn)) { printf("*** Station '"); print_prefix(stn->name); printf("' has status %d but isn't fixed\n", stn->status); } } } #endif #undef validate extern bool validate(void) { bool fOk = fTrue; if (!validate_prefix_tree()) fOk = fFalse; if (!validate_station_list()) fOk = fFalse; if (fOk) puts("*** Data structures passed consistency checks"); else puts("*** Data structures FAILED consistency checks"); return fOk; } static bool validate_prefix_tree(void) { bool fOk = fTrue; if (root->up != NULL) { printf("*** root->up == %p\n", root->up); fOk = fFalse; } if (root->right != NULL) { printf("*** root->right == %p\n", root->right); fOk = fFalse; } if (root->stn != NULL) { printf("*** root->stn == %p\n", root->stn); fOk = fFalse; } if (root->pos != NULL) { printf("*** root->pos == %p\n", root->pos); fOk = fFalse; } fOk &= validate_prefix_subtree(root); return fOk; } static bool validate_prefix_subtree(prefix *pfx) { bool fOk = fTrue; prefix *pfx2; pfx2 = pfx->down; /* this happens now, as nodes are freed after solving */ #if 0 if (pfx2 == NULL) { if (pfx->stn == NULL) { printf("*** Leaf prefix '"); print_prefix(pfx); printf("' has no station attached\n"); fOk = fFalse; } return fOk; } #endif while (pfx2 != NULL) { if (pfx2->stn != NULL && pfx2->stn->name != pfx2) { printf("*** Prefix '"); print_prefix(pfx2); printf("' ->stn->name is '"); print_prefix(pfx2->stn->name); printf("'\n"); fOk = fFalse; } if (pfx2->up != pfx) { printf("*** Prefix '"); print_prefix(pfx2); printf("' ->up is '"); print_prefix(pfx); printf("'\n"); fOk = fFalse; } fOk &= validate_prefix_subtree(pfx2); pfx2 = pfx2->right; } return fOk; } static bool validate_station_list(void) { bool fOk = fTrue; node *stn, *stn2; int d, d2; SVX_ASSERT(!stnlist || !stnlist->prev); /* NB: don't use FOR_EACH_STN as it isn't reentrant at present */ for (stn = stnlist; stn; stn = stn->next) { bool fGap = fFalse; #if 0 printf("V [%p]<-[%p]->[%p] ", stn->prev, stn, stn->next); print_prefix(stn->name); putnl(); #endif SVX_ASSERT(stn->prev == NULL || stn->prev->next == stn); SVX_ASSERT(stn->next == NULL || stn->next->prev == stn); for (d = 0; d <= 2; d++) { if (!stn->leg[d]) { fGap = fTrue; } else { if (fGap) { printf("*** Station '"); print_prefix(stn->name); printf("', leg %d is used, but an earlier leg isn't\n", d); fOk = fFalse; } stn2 = stn->leg[d]->l.to; SVX_ASSERT(stn2); #if 0 if (stn->status && !stn2->status) { printf("*** Station '"); print_prefix(stn->name); printf("' has status %d and connects to '", stn->status); print_prefix(stn2->name); printf("' which has status %d\n", stn2->status); fOk = fFalse; } #endif d2 = reverse_leg_dirn(stn->leg[d]); if (stn2->leg[d2] == NULL) { /* fine iff stn is at the disconnected end of a fragment */ node *s; /* NB: don't use FOR_EACH_STN as it isn't reentrant at present */ for (s = stnlist; s; s = s->next) if (s == stn) break; if (s) { printf("*** Station '"); print_prefix(stn->name); printf("', leg %d doesn't reciprocate from station '", d); print_prefix(stn2->name); printf("'\n"); fOk = fFalse; } } else if (stn2->leg[d2]->l.to == NULL) { printf("*** Station '"); print_prefix(stn2->name); printf("' [%p], leg %d points to NULL\n", stn2, d2); fOk = fFalse; } else if (stn2->leg[d2]->l.to!=stn) { /* fine iff stn is at the disconnected end of a fragment */ node *s; /* NB: don't use FOR_EACH_STN as it isn't reentrant at present */ for (s = stnlist; s; s = s->next) if (s == stn) break; if (s) { printf("*** Station '"); print_prefix(stn->name); printf("' [%p], leg %d reciprocates via station '", stn, d); print_prefix(stn2->name); printf("' to station '"); print_prefix(stn2->leg[d2]->l.to->name); printf("'\n"); fOk = fFalse; } } else if ((data_here(stn->leg[d]) != 0) ^ (data_here(stn2->leg[d2]) == 0)) { printf("*** Station '"); print_prefix(stn->name); printf("' [%p], leg %d reciprocates via station '", stn, d); print_prefix(stn2->name); if (data_here(stn->leg[d])) printf("' - data on both legs\n"); else printf("' - data on neither leg\n"); fOk = fFalse; } if (data_here(stn->leg[d])) { int i; for (i = 0; i < 3; i++) if (fabs(stn->leg[d]->d[i]) > MAX_POS) { printf("*** Station '"); print_prefix(stn->name); printf("', leg %d, d[%d] = %g\n", d, i, (double)(stn->leg[d]->d[i])); fOk = fFalse; } } } if (fixed(stn)) { if (fabs(POS(stn, 0)) > MAX_POS || fabs(POS(stn, 1)) > MAX_POS || fabs(POS(stn, 2)) > MAX_POS) { printf("*** Station '"); print_prefix(stn->name); printf("' fixed at coords (%f,%f,%f)\n", POS(stn, 0), POS(stn, 1), POS(stn, 2) ); fOk = fFalse; } } } } return fOk; } #undef dump_node extern void dump_node(node *stn) { int d; if (stn->name) print_prefix(stn->name); else printf(""); printf(" stn [%p] name (%p) colour %ld %sfixed\n", stn, stn->name, stn->colour, fixed(stn) ? "" : "un"); for (d = 0; d <= 2; d++) { if (stn->leg[d]) { printf(" leg %d -> stn [%p] rev %d ", d, stn->leg[d]->l.to, reverse_leg_dirn(stn->leg[d])); print_prefix(stn->leg[d]->l.to->name); putnl(); } } } /* This doesn't cover removed stations - might be nice to have * dump_entire_network() which iterates prefix tree */ #undef dump_network extern void dump_network(void) { node *stn; /* NB: don't use FOR_EACH_STN as it isn't reentrant at present */ for (stn = stnlist; stn; stn = stn->next) dump_node(stn); } survex-1.4.4/src/hash.h0000644000175000017500000000172513346142325011670 00000000000000/* hash.h */ /* String hashing function */ /* Copyright (C) 1995-2002 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef __cplusplus extern "C" { #endif int hash_string(const char *p); int hash_lc_string(const char *p); int hash_data(const char *p, size_t len); #ifdef __cplusplus } #endif survex-1.4.4/src/readval.h0000644000175000017500000000321514141575516012365 00000000000000/* readval.h * Routines to read a prefix or number from the current input file * Copyright (C) 1991-2003,2005,2010,2012,2013 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ extern int root_depr_count; enum { /* Can the prefix be omitted? */ PFX_OPT = 1, /* Read a survey? */ PFX_SURVEY = 2, /* Make implicit checks */ PFX_SUSPECT_TYPO = 4, /* Can the deprecated "root" be used? */ PFX_ALLOW_ROOT = 8, /* Warn if the read prefix contains a separator? */ PFX_WARN_SEPARATOR = 16, /* Anonymous stations OK? */ PFX_ANON = 32, /* */ PFX_NEW = 64, /* Read a station? */ PFX_STATION = 0 }; prefix *read_prefix(unsigned flags); real read_numeric(bool f_optional); real read_numeric_multi(bool f_optional, bool f_quadrants, int *p_n_readings); real read_bearing_multi_or_omit(bool f_quadrants, int *p_n_readings); unsigned int read_uint(void); void read_string(char **pstr, int *plen); void read_date(int *py, int *pm, int *pd); survex-1.4.4/src/namecmp.h0000644000175000017500000000170414141575516012370 00000000000000/* namecmp.h */ /* Ordering function for station names */ /* Copyright (C) 2001,2002,2008,2012 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef __cplusplus extern "C" { #endif extern int name_cmp(const char *a, const char *b, int separator); #ifdef __cplusplus }; #endif survex-1.4.4/src/handmask.xbm0000644000175000017500000000160114141575516013071 00000000000000#define handmask_width 32 #define handmask_height 32 static unsigned char handmask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x06, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0xf8, 0xff, 0x07, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xf8, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; survex-1.4.4/src/labelinfo.h0000644000175000017500000000705414141575516012707 00000000000000// // labelinfo.h // // Main frame handling for Aven. // // Copyright (C) 2000-2003,2005 Mark R. Shinwell // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef labelinfo_h #define labelinfo_h #include "aven.h" #include "img_hosted.h" #include "message.h" #include "vector3.h" #include "wx.h" // macOS headers pollute the global namespace with generic names like // "class Point", which clashes with our "class Point". So for __WXMAC__ // put our class in a namespace and define Point as a macro. #ifdef __WXMAC__ namespace svx { #endif class Point : public Vector3 { public: Point() {} explicit Point(const Vector3 & v) : Vector3(v) { } explicit Point(const img_point & pt) : Vector3(pt.x, pt.y, pt.z) { } double GetX() const { return x; } double GetY() const { return y; } double GetZ() const { return z; } }; #ifdef __WXMAC__ } #define Point svx::Point #endif #define LFLAG_NOT_ANON 0x01 #define LFLAG_NOT_WALL 0x02 #define LFLAG_SURFACE 0x04 #define LFLAG_UNDERGROUND 0x08 #define LFLAG_EXPORTED 0x10 #define LFLAG_FIXED 0x20 #define LFLAG_ENTRANCE 0x40 #define LFLAG_HIGHLIGHTED 0x80 class LabelInfo : public Point { wxString text; unsigned width; int flags; public: wxTreeItemId tree_id; LabelInfo() : Point(), text(), flags(0) { } LabelInfo(const img_point &pt, const wxString &text_, int flags_) : Point(pt), text(text_), flags(flags_) { if (text.empty()) flags &= ~LFLAG_NOT_ANON; } const wxString & GetText() const { return text; } wxString name_or_anon() const { if (!text.empty()) return text; /* TRANSLATORS: Used in place of the station name when talking about an * anonymous station. */ return wmsg(/*anonymous station*/56); } int get_flags() const { return flags; } void set_flags(int mask) { flags |= mask; } void clear_flags(int mask) { flags &= ~mask; } unsigned get_width() const { return width; } void set_width(unsigned width_) { width = width_; } bool IsEntrance() const { return (flags & LFLAG_ENTRANCE) != 0; } bool IsFixedPt() const { return (flags & LFLAG_FIXED) != 0; } bool IsExportedPt() const { return (flags & LFLAG_EXPORTED) != 0; } bool IsUnderground() const { return (flags & LFLAG_UNDERGROUND) != 0; } bool IsSurface() const { return (flags & LFLAG_SURFACE) != 0; } bool IsHighLighted() const { return (flags & LFLAG_HIGHLIGHTED) != 0; } bool IsAnon() const { return (flags & LFLAG_NOT_ANON) == 0; } bool IsWall() const { return (flags & LFLAG_NOT_WALL) == 0; } // This should really also return true for non-anonymous splay ends, and not // return true for anonymous stations in other situations, but the .3d // format doesn't tell us this information currently, and it's not trivial // to rediscover. bool IsSplayEnd() const { return IsAnon(); } }; #endif survex-1.4.4/src/guicontrol.h0000644000175000017500000001561714141575516013145 00000000000000// // guicontrol.h // // Handlers for events relating to the display of a survey. // // Copyright (C) 2000-2002,2005 Mark R. Shinwell // Copyright (C) 2001-2004,2006,2014,2015 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef guicontrol_h #define guicontrol_h #include "wx.h" class GfxCore; class GUIControl { GfxCore* m_View; enum { NO_DRAG = 0, LEFT_DRAG, MIDDLE_DRAG, RIGHT_DRAG } dragging; wxPoint m_DragStart; wxPoint m_DragRealStart; wxPoint m_DragLast; enum { drag_NONE, drag_MAIN, drag_COMPASS, drag_ELEV, drag_SCALE, drag_ZOOM } m_LastDrag; enum { lock_NONE, lock_ROTATE, lock_SCALE } m_ScaleRotateLock; bool m_ReverseControls; void HandleRotate(wxPoint); void HandleTilt(wxPoint); void HandleTranslate(wxPoint); void HandleScaleRotate(wxPoint); void HandleTiltRotate(wxPoint); void HandCursor(); void RestoreCursor(); void HandleNonDrag(const wxPoint & point); public: GUIControl(); void SetView(GfxCore* view); bool MouseDown() const; void OnDefaults(); void OnPlan(); void OnElevation(); void OnDisplayOverlappingNames(); void OnColourByDepth(); void OnColourByDate(); void OnColourByError(); void OnColourByHError(); void OnColourByVError(); void OnColourByGradient(); void OnColourByLength(); void OnColourBySurvey(); void OnColourByStyle(); void OnShowCrosses(); void OnShowStationNames(); void OnShowSurveyLegs(); void OnHideSplays(); void OnShowSplaysDashed(); void OnShowSplaysFaded(); void OnShowSplaysNormal(); void OnHideDupes(); void OnShowDupesDashed(); void OnShowDupesFaded(); void OnShowDupesNormal(); void OnShowSurface(); void OnMoveEast(); void OnMoveNorth(); void OnMoveSouth(); void OnMoveWest(); void OnToggleRotation(); void OnReverseControls(); void OnSlowDown(bool accel = false); void OnSpeedUp(bool accel = false); void OnStepOnceAnticlockwise(bool accel = false); void OnStepOnceClockwise(bool accel = false); void OnHigherViewpoint(bool accel = false); void OnLowerViewpoint(bool accel = false); void OnShiftDisplayDown(bool accel = false); void OnShiftDisplayLeft(bool accel = false); void OnShiftDisplayRight(bool accel = false); void OnShiftDisplayUp(bool accel = false); void OnZoomIn(bool accel = false); void OnZoomOut(bool accel = false); void OnToggleScalebar(); void OnToggleColourKey(); void OnViewCompass(); void OnViewClino(); void OnViewGrid(); void OnReverseDirectionOfRotation(); void OnShowEntrances(); void OnShowFixedPts(); void OnShowExportedPts(); void OnCancelDistLine(); void OnMouseMove(wxMouseEvent& event); void OnLButtonDown(wxMouseEvent& event); void OnLButtonUp(wxMouseEvent& event); void OnMButtonDown(wxMouseEvent& event); void OnMButtonUp(wxMouseEvent& event); void OnRButtonDown(wxMouseEvent& event); void OnRButtonUp(wxMouseEvent& event); void OnMouseWheel(wxMouseEvent& event); void OnKeyPress(wxKeyEvent &e); void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent&); void OnColourByUpdate(wxUpdateUIEvent&); void OnColourByDepthUpdate(wxUpdateUIEvent&); void OnColourByDateUpdate(wxUpdateUIEvent&); void OnColourByErrorUpdate(wxUpdateUIEvent&); void OnColourByHErrorUpdate(wxUpdateUIEvent&); void OnColourByVErrorUpdate(wxUpdateUIEvent&); void OnColourByGradientUpdate(wxUpdateUIEvent&); void OnColourByLengthUpdate(wxUpdateUIEvent&); void OnColourBySurveyUpdate(wxUpdateUIEvent&); void OnColourByStyleUpdate(wxUpdateUIEvent&); void OnShowCrossesUpdate(wxUpdateUIEvent&); void OnShowStationNamesUpdate(wxUpdateUIEvent&); void OnShowSurveyLegsUpdate(wxUpdateUIEvent&); void OnSplaysUpdate(wxUpdateUIEvent&); void OnHideSplaysUpdate(wxUpdateUIEvent&); void OnShowSplaysDashedUpdate(wxUpdateUIEvent&); void OnShowSplaysFadedUpdate(wxUpdateUIEvent&); void OnShowSplaysNormalUpdate(wxUpdateUIEvent&); void OnDupesUpdate(wxUpdateUIEvent&); void OnHideDupesUpdate(wxUpdateUIEvent&); void OnShowDupesDashedUpdate(wxUpdateUIEvent&); void OnShowDupesFadedUpdate(wxUpdateUIEvent&); void OnShowDupesNormalUpdate(wxUpdateUIEvent&); void OnShowSurfaceUpdate(wxUpdateUIEvent&); void OnMoveEastUpdate(wxUpdateUIEvent&); void OnMoveNorthUpdate(wxUpdateUIEvent&); void OnMoveSouthUpdate(wxUpdateUIEvent&); void OnMoveWestUpdate(wxUpdateUIEvent&); void OnToggleRotationUpdate(wxUpdateUIEvent&); void OnReverseControlsUpdate(wxUpdateUIEvent&); void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent&); void OnDefaultsUpdate(wxUpdateUIEvent&); void OnElevationUpdate(wxUpdateUIEvent&); void OnPlanUpdate(wxUpdateUIEvent&); void OnToggleScalebarUpdate(wxUpdateUIEvent&); void OnToggleColourKeyUpdate(wxUpdateUIEvent&); void OnViewCompassUpdate(wxUpdateUIEvent&); void OnViewClinoUpdate(wxUpdateUIEvent&); void OnViewGridUpdate(wxUpdateUIEvent&); void OnShowEntrancesUpdate(wxUpdateUIEvent&); void OnShowExportedPtsUpdate(wxUpdateUIEvent&); void OnShowFixedPtsUpdate(wxUpdateUIEvent&); void OnIndicatorsUpdate(wxUpdateUIEvent&); void OnCancelDistLineUpdate(wxUpdateUIEvent&); void OnViewPerspective(); void OnViewPerspectiveUpdate(wxUpdateUIEvent& cmd); void OnViewSmoothShading(); void OnViewSmoothShadingUpdate(wxUpdateUIEvent& cmd); void OnViewTextured(); void OnViewTexturedUpdate(wxUpdateUIEvent& cmd); void OnViewFog(); void OnViewFogUpdate(wxUpdateUIEvent& cmd); void OnViewSmoothLines(); void OnViewSmoothLinesUpdate(wxUpdateUIEvent& cmd); void OnToggleMetric(); void OnToggleMetricUpdate(wxUpdateUIEvent& cmd); void OnToggleDegrees(); void OnToggleDegreesUpdate(wxUpdateUIEvent& cmd); void OnTogglePercent(); void OnTogglePercentUpdate(wxUpdateUIEvent& cmd); void OnToggleTubes(); void OnToggleTubesUpdate(wxUpdateUIEvent& cmd); void OnViewFullScreenUpdate(wxUpdateUIEvent&); void OnViewFullScreen(); void OnViewBoundingBoxUpdate(wxUpdateUIEvent&); void OnViewBoundingBox(); void OnViewTerrainUpdate(wxUpdateUIEvent&); void OnViewTerrain(); }; #endif survex-1.4.4/src/img_hosted.c0000644000175000017500000000373514141575516013073 00000000000000/* img_hosted.c * Build img for use in Survex code * Copyright (C) 1997,1999,2000,2001,2011,2013,2014,2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "img_hosted.h" #define IMG_HOSTED 1 #include "img.c" static const int img_error2msg_map[] = { /* IMG_NONE */ 0, /* IMG_FILENOTFOUND */ /*Couldn’t open file “%sâ€*/24, /* TRANSLATORS: %s will be replaced by the filename that we were trying * to read when we ran out of memory. */ /* IMG_OUTOFMEMORY */ /*Out of memory trying to read file “%sâ€*/38, /* IMG_CANTOPENOUT */ /*Failed to open output file “%sâ€*/47, /* TRANSLATORS: Perhaps the user tried to load a different type of file as * a Survex .3d file, or the .3d file was corrupted. */ /* IMG_BADFORMAT */ /*Bad 3d image file “%sâ€*/106, /* IMG_DIRECTORY */ /*Filename “%s†refers to directory*/44, /* IMG_READERROR */ /*Error reading from file “%sâ€*/109, /* IMG_WRITEERROR */ /*Error writing to file “%sâ€*/110, /* IMG_TOONEW */ /*File “%s†has a newer format than this program can understand*/114 }; int img_error2msg(img_errcode err) { int err_int = (int)err; if (err_int < 0 || err_int > IMG_TOONEW) return 0; return img_error2msg_map[err_int]; } survex-1.4.4/src/cavern.h0000644000175000017500000003510114205617674012227 00000000000000/* cavern.h * SURVEX Cave surveying software - header file * Copyright (C) 1991-2022 Olly Betts * Copyright (C) 2004 Simeon Warner * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef CAVERN_H #define CAVERN_H /* Using covariances increases the memory required somewhat - may be * desirable to disable this for small memory machines */ /* #define NO_COVARIANCES 1 */ #include #include #include #include #include #include #include #include "img_hosted.h" #include "useful.h" /* Set EXPLICIT_FIXED_FLAG to 1 to force an explicit fixed flag to be used * in each pos struct, rather than using p[0]==UNFIXED_VAL to indicate * unfixed-ness. This may be slightly faster, but uses more memory. */ #ifndef EXPLICIT_FIXED_FLAG # define EXPLICIT_FIXED_FLAG 0 #endif typedef double real; /* so we can change the precision used easily */ #define HUGE_REAL HUGE_VAL #define REAL_EPSILON DBL_EPSILON #if (!EXPLICIT_FIXED_FLAG) # define UNFIXED_VAL HUGE_VAL /* if p[0]==UNFIXED_VAL, station is unfixed */ #endif #define SPECIAL_EOL 0x0001 #define SPECIAL_BLANK 0x0002 #define SPECIAL_KEYWORD 0x0004 #define SPECIAL_COMMENT 0x0008 #define SPECIAL_OMIT 0x0010 #ifndef NO_DEPRECATED #define SPECIAL_ROOT 0x0020 #endif #define SPECIAL_SEPARATOR 0x0040 #define SPECIAL_NAMES 0x0080 #define SPECIAL_DECIMAL 0x0100 #define SPECIAL_MINUS 0x0200 #define SPECIAL_PLUS 0x0400 #define SPECIAL_OPEN 0x0800 #define SPECIAL_CLOSE 0x1000 extern char *fnm_output_base; extern int fnm_output_base_is_dir; extern bool fExportUsed; extern int current_days_since_1900; /* Types */ typedef enum { Q_NULL = -1, Q_DEFAULT, Q_POS, Q_PLUMB, Q_LEVEL, Q_GRADIENT, Q_BACKGRADIENT, Q_BEARING, Q_BACKBEARING, Q_LENGTH, Q_BACKLENGTH, Q_DEPTH, Q_DX, Q_DY, Q_DZ, Q_COUNT, Q_DECLINATION, Q_LEFT, Q_RIGHT, Q_UP, Q_DOWN, Q_MAC } q_quantity; typedef enum { INFER_NULL = -1, INFER_EQUATES, INFER_EXPORTS, INFER_PLUMBS, INFER_SUBSURVEYS } infer_what; /* unsigned long to cope with 16-bit int-s */ #define BIT(N) (1UL << (N)) #define BITA(N) (1UL << ((N) - 'a')) #define TSTBIT(W, N) (((W)>>(N))&1) /* masks for quantities which are length and angles respectively */ #define LEN_QMASK (BIT(Q_LENGTH) | BIT(Q_BACKLENGTH) | BIT(Q_DEPTH) |\ BIT(Q_DX) | BIT(Q_DY) | BIT(Q_DZ) | BIT(Q_POS) | BIT(Q_COUNT) |\ BIT(Q_LEFT) | BIT(Q_RIGHT) | BIT(Q_UP) | BIT(Q_DOWN)) #define ANG_QMASK (BIT(Q_BEARING) | BIT(Q_BACKBEARING) |\ BIT(Q_GRADIENT) | BIT(Q_BACKGRADIENT) | BIT(Q_PLUMB) | BIT(Q_LEVEL) |\ BIT(Q_DECLINATION)) /* if you add/change the order, check factor_tab in commands.c */ typedef enum { UNITS_NULL = -1, UNITS_METRES, UNITS_FEET, UNITS_YARDS, UNITS_DEGS, UNITS_QUADRANTS, UNITS_GRADS, UNITS_PERCENT, UNITS_MINUTES, UNITS_MAC, UNITS_DEPRECATED_ALIAS_FOR_GRADS } u_units; /* don't reorder these values! They need to match with img.h too */ typedef enum { FLAGS_NOT = -2, FLAGS_UNKNOWN = -1, FLAGS_SURFACE, FLAGS_DUPLICATE, FLAGS_SPLAY, #if 0 /* underground, but through rock (e.g. radiolocation). Want to hide from * plots by default (so not cave) but don't want to include in surface * triangulation nets (so not surface) */ FLAGS_SKELETAL, /* FIXME */ #endif /* Don't need to match img.h: */ FLAGS_ANON_ONE_END, FLAGS_IMPLICIT_SPLAY, FLAGS_STYLE_BIT0, FLAGS_STYLE_BIT1, FLAGS_STYLE_BIT2 } flags; /* flags are currently stored in an unsigned char */ typedef int compiletimeassert_flags0[FLAGS_STYLE_BIT2 <= 7 ? 1 : -1]; /* Mask to AND with to get bits to pass to img library. */ #define FLAGS_MASK \ (BIT(FLAGS_SURFACE) | BIT(FLAGS_DUPLICATE) | BIT(FLAGS_SPLAY)) typedef int compiletimeassert_flags1[BIT(FLAGS_SURFACE) == img_FLAG_SURFACE ? 1 : -1]; typedef int compiletimeassert_flags2[BIT(FLAGS_DUPLICATE) == img_FLAG_DUPLICATE ? 1 : -1]; typedef int compiletimeassert_flags3[BIT(FLAGS_SPLAY) == img_FLAG_SPLAY ? 1 : -1]; typedef enum { /* Don't reorder these values! They need to match with img.h too. */ SFLAGS_SURFACE = 0, SFLAGS_UNDERGROUND, SFLAGS_ENTRANCE, SFLAGS_EXPORTED, SFLAGS_FIXED, SFLAGS_ANON, SFLAGS_WALL, /* These values don't need to match img.h, but mustn't clash. */ SFLAGS_USED = 11, SFLAGS_SOLVED = 12, SFLAGS_SUSPECTTYPO = 13, SFLAGS_SURVEY = 14, SFLAGS_PREFIX_ENTERED = 15 } sflags; /* Mask to AND with to get bits to pass to img library. */ #define SFLAGS_MASK (BIT(SFLAGS_SURFACE) | BIT(SFLAGS_UNDERGROUND) |\ BIT(SFLAGS_ENTRANCE) | BIT(SFLAGS_EXPORTED) | BIT(SFLAGS_FIXED) |\ BIT(SFLAGS_ANON) | BIT(SFLAGS_WALL)) typedef int compiletimeassert_sflags1[BIT(SFLAGS_SURFACE) == img_SFLAG_SURFACE ? 1 : -1]; typedef int compiletimeassert_sflags2[BIT(SFLAGS_UNDERGROUND) == img_SFLAG_UNDERGROUND ? 1 : -1]; typedef int compiletimeassert_sflags3[BIT(SFLAGS_ENTRANCE) == img_SFLAG_ENTRANCE ? 1 : -1]; typedef int compiletimeassert_sflags4[BIT(SFLAGS_EXPORTED) == img_SFLAG_EXPORTED ? 1 : -1]; typedef int compiletimeassert_sflags5[BIT(SFLAGS_FIXED) == img_SFLAG_FIXED ? 1 : -1]; typedef int compiletimeassert_sflags6[BIT(SFLAGS_ANON) == img_SFLAG_ANON ? 1 : -1]; typedef int compiletimeassert_sflags7[BIT(SFLAGS_WALL) == img_SFLAG_WALL ? 1 : -1]; /* enumeration of field types */ typedef enum { End = 0, Tape, Comp, Clino, BackTape, BackComp, BackClino, Left, Right, Up, Down, FrDepth, ToDepth, Dx, Dy, Dz, FrCount, ToCount, /* Up to here are readings are allowed multiple values * and have slot in the value[] array in datain.c. * (Depth, DepthChange, and Count can have multiple * readings, but are actually handled using tokens * above rather than as themselves). * * Fr must be the first reading after this comment! */ Fr, To, Station, Depth, DepthChange, Count, Dir, Newline, IgnoreAllAndNewLine, Ignore, IgnoreAll, /* IgnoreAll must be the last reading before this comment! * * Readings after this comment are only used in datain.c * so can have enum values >= 32 because we only use a * bitmask for those readings used in commands.c. */ CompassDATComp, CompassDATClino, CompassDATBackComp, CompassDATBackClino, CompassDATLeft, CompassDATRight, CompassDATUp, CompassDATDown, CompassDATFlags } reading; /* if IgnoreAll is >= 32, the compiler will choke on this */ typedef char compiletimeassert_reading[IgnoreAll < 32 ? 1 : -1]; /* position or length vector */ typedef real delta[3]; /* variance */ #ifdef NO_COVARIANCES typedef real var[3]; typedef var svar; #else typedef real var[3][3]; typedef real svar[6]; #endif /* station name */ typedef struct Prefix { struct Prefix *up, *down, *right; struct Node *stn; struct Pos *pos; const char *ident; const char *filename; unsigned int line; /* If (min_export == 0) then max_export is max # levels above is this * prefix is used (and so needs to be exported) (0 == parent only). * If (min_export > 0) then max_export is max # levels above this * prefix has been exported, and min_export is how far down the exports * have got (if min_export > 1 after a run, this prefix hasn't been * exported from below enough). * If INFER_EXPORTS is active when a station is encountered, we * set min_export = USHRT_MAX and max_export gets set as usual. Then at * the end of the run, we also mark stations with min_export == USHRT_MAX * and max_export > 0 as exported. */ unsigned short max_export, min_export; /* stn flags - e.g. surface, underground, entrance * also suspecttypo and survey */ unsigned short sflags; short shape; } prefix; /* survey metadata */ typedef struct Meta_data { size_t ref_count; /* Days since 1900 for start and end date of survey, or -1 if undated. */ int days1, days2; } meta_data; /* stuff stored for both forward & reverse legs */ typedef struct { struct Node *to; /* bits 0..1 = reverse leg number; bit7 is fFullLeg */ /* bit6 = fReplacementLeg (by reduction rules) */ /* bit5 = articulation leg (i.e. carries no error) */ unsigned char reverse; /* flags - e.g. surface, duplicate survey * only used if (FLAG_DATAHERE & !(FLAG_REPLACEMENTLEG|FLAG_FAKE)) * This could be only in linkfor, but this is actually more space * efficient. */ unsigned char flags; } linkcommon; #define FLAG_DATAHERE 0x80 #define FLAG_REPLACEMENTLEG 0x40 #define FLAG_ARTICULATION 0x20 #define FLAG_FAKE 0x10 /* an equate or leg inside an sdfix */ #define MASK_REVERSEDIRN 0x03 /* reverse leg - deltas & vars stored on other dirn */ typedef struct LinkRev { linkcommon l; } linkrev; /* forward leg - deltas & vars stored here */ typedef struct Link { linkcommon l; delta d; /* Delta */ svar v; /* Variances */ meta_data *meta; } linkfor; /* node - like a station, except several nodes are used to represent a * station with more than 3 legs connected to it */ typedef struct Node { struct Prefix *name; struct Link *leg[3]; struct Node *prev, *next; long colour; } node; /* station position */ typedef struct Pos { delta p; /* Position */ #if EXPLICIT_FIXED_FLAG unsigned char fFixed; /* flag indicating if station is a fixed point */ #endif } pos; /* typedef struct Inst { real zero, scale, units; } inst; */ /* Survey data styles */ #define STYLE_NORMAL 0 #define STYLE_DIVING 1 #define STYLE_CARTESIAN 2 #define STYLE_CYLPOLAR 3 #define STYLE_NOSURVEY 4 #define STYLE_PASSAGE 5 #define STYLE_IGNORE 6 typedef int compiletimeassert_style1[STYLE_NORMAL == img_STYLE_NORMAL ? 1 : -1]; typedef int compiletimeassert_style2[STYLE_DIVING == img_STYLE_DIVING ? 1 : -1]; typedef int compiletimeassert_style3[STYLE_CARTESIAN == img_STYLE_CARTESIAN ? 1 : -1]; typedef int compiletimeassert_style4[STYLE_CYLPOLAR == img_STYLE_CYLPOLAR ? 1 : -1]; typedef int compiletimeassert_style5[STYLE_NOSURVEY == img_STYLE_NOSURVEY ? 1 : -1]; /* various settings preserved by *BEGIN and *END */ typedef struct Settings { struct Settings *next; unsigned int Truncate; bool f_clino_percent; bool f_backclino_percent; bool f_bearing_quadrants; bool f_backbearing_quadrants; bool dash_for_anon_wall_station; unsigned char infer; enum {OFF, LOWER, UPPER} Case; int style; prefix *Prefix; prefix *begin_survey; /* used to check BEGIN and END match */ short *Translate; /* if short is >= 16 bits, which ANSI requires */ real Var[Q_MAC]; real z[Q_MAC]; real sc[Q_MAC]; real units[Q_MAC]; const reading *ordering; int begin_lineno; /* 0 means no block started in this file */ int flags; char* proj_str; /* Location at which we calculate the declination if * z[Q_DECLINATION] == HUGE_REAL. * * Latitude and longitude are in radians; altitude is in metres above the * ellipsoid. */ real dec_lat, dec_lon, dec_alt; /* Cached auto-declination in radians, or HUGE_REAL for no cached value. * Only meaningful if date1 != -1. */ real declination; double min_declination, max_declination; int min_declination_days, max_declination_days; const char* dec_filename; int dec_line; /* Copy of the text of the `*declination auto ...` line (malloced). */ char* dec_context; /* Grid convergence in radians. */ real convergence; meta_data * meta; } settings; /* global variables */ extern settings *pcs; extern prefix *root; extern prefix *anon_list; extern node *stnlist; extern unsigned long optimize; extern char * proj_str_out; extern PJ * pj_cached; extern char *survey_title; extern int survey_title_len; extern bool fExplicitTitle; extern long cLegs, cStns, cComponents; extern FILE *fhErrStat; extern img *pimg; extern real totadj, total, totplan, totvert; extern real min[6], max[6]; extern prefix *pfxHi[6], *pfxLo[6]; extern bool fQuiet; /* just show brief summary + errors */ extern bool fMute; /* just show errors */ extern bool fSuppress; /* only output 3d file */ /* macros */ #define POS(S, D) ((S)->name->pos->p[(D)]) #define POSD(S) ((S)->name->pos->p) #define data_here(L) ((L)->l.reverse & FLAG_DATAHERE) #define reverse_leg_dirn(L) ((L)->l.reverse & MASK_REVERSEDIRN) #define reverse_leg(L) ((L)->l.to->leg[reverse_leg_dirn(L)]) #if EXPLICIT_FIXED_FLAG # define pfx_fixed(N) ((N)->pos->fFixed) # define pos_fixed(P) ((P)->fFixed) # define fix(S) (S)->name->pos->fFixed = (char)fTrue # define fixpos(P) (P)->fFixed = (char)fTrue # define unfix(S) (S)->name->pos->fFixed = (char)fFalse #else # define pfx_fixed(N) ((N)->pos->p[0] != UNFIXED_VAL) # define pos_fixed(P) ((P)->p[0] != UNFIXED_VAL) # define fix(S) NOP # define fixpos(P) NOP # define unfix(S) POS((S), 0) = UNFIXED_VAL #endif #define fixed(S) pfx_fixed((S)->name) /* macros for special chars */ #define isEol(c) (pcs->Translate[(c)] & SPECIAL_EOL) #define isBlank(c) (pcs->Translate[(c)] & SPECIAL_BLANK) #define isKeywd(c) (pcs->Translate[(c)] & SPECIAL_KEYWORD) #define isComm(c) (pcs->Translate[(c)] & SPECIAL_COMMENT) #define isOmit(c) (pcs->Translate[(c)] & SPECIAL_OMIT) #ifndef NO_DEPRECATED #define isRoot(c) (pcs->Translate[(c)] & SPECIAL_ROOT) #endif #define isSep(c) (pcs->Translate[(c)] & SPECIAL_SEPARATOR) #define isNames(c) (pcs->Translate[(c)] & SPECIAL_NAMES) #define isDecimal(c) (pcs->Translate[(c)] & SPECIAL_DECIMAL) #define isMinus(c) (pcs->Translate[(c)] & SPECIAL_MINUS) #define isPlus(c) (pcs->Translate[(c)] & SPECIAL_PLUS) #define isOpen(c) (pcs->Translate[(c)] & SPECIAL_OPEN) #define isClose(c) (pcs->Translate[(c)] & SPECIAL_CLOSE) #define isSign(c) (pcs->Translate[(c)] & (SPECIAL_PLUS | SPECIAL_MINUS)) #define isData(c) (pcs->Translate[(c)] & (SPECIAL_OMIT | SPECIAL_ROOT|\ SPECIAL_SEPARATOR | SPECIAL_NAMES | SPECIAL_DECIMAL | SPECIAL_PLUS |\ SPECIAL_MINUS)) typedef struct nosurveylink { node *fr, *to; int flags; meta_data *meta; struct nosurveylink *next; } nosurveylink; extern nosurveylink *nosurveyhead; typedef struct lrud { struct lrud * next; prefix *stn; meta_data *meta; real l, r, u, d; } lrud; typedef struct lrudlist { lrud * tube; struct lrudlist * next; } lrudlist; extern lrudlist * model; extern lrud ** next_lrud; #endif /* CAVERN_H */ survex-1.4.4/src/img2aven.h0000664000175000017500000001540214205545366012463 00000000000000 LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON|LFLAG_NOT_WALL, LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_WALL, LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_WALL, LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_WALL, LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_NOT_ANON, LFLAG_ENTRANCE|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_NOT_ANON, LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_NOT_ANON, LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED|LFLAG_NOT_ANON, 0, LFLAG_SURFACE, LFLAG_UNDERGROUND, LFLAG_SURFACE|LFLAG_UNDERGROUND, LFLAG_ENTRANCE, LFLAG_SURFACE|LFLAG_ENTRANCE, LFLAG_UNDERGROUND|LFLAG_ENTRANCE, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE, LFLAG_EXPORTED, LFLAG_SURFACE|LFLAG_EXPORTED, LFLAG_UNDERGROUND|LFLAG_EXPORTED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED, LFLAG_ENTRANCE|LFLAG_EXPORTED, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED, LFLAG_FIXED, LFLAG_SURFACE|LFLAG_FIXED, LFLAG_UNDERGROUND|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_FIXED, LFLAG_ENTRANCE|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_FIXED, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_FIXED, LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED, LFLAG_SURFACE|LFLAG_UNDERGROUND|LFLAG_ENTRANCE|LFLAG_EXPORTED|LFLAG_FIXED, survex-1.4.4/src/export.h0000644000175000017500000000474614312170427012272 00000000000000/* export.h * Export to CAD-like formats (DXF, Skencil, SVG, EPS, HPGL) and also Compass * PLT. */ /* Copyright (C) 2004,2005,2012,2014,2015,2018 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SURVEX_INCLUDED_EXPORT_H #define SURVEX_INCLUDED_EXPORT_H #include "wx.h" class Model; class SurveyFilter; // Order here needs to match order of extension array in export.cc. typedef enum { FMT_3D, FMT_CSV, FMT_DXF, FMT_EPS, FMT_GPX, FMT_HPGL, FMT_JSON, FMT_KML, FMT_PLT, FMT_SK, FMT_POS, FMT_SVG, FMT_MAX_PLUS_ONE_ } export_format; struct format_info { const char* extension; int msg_filetype; unsigned mask; // Defaults for survexport (aven defaults to what is currently shown). unsigned defaults; }; extern const format_info export_format_info[]; #define LEGS 0x00000001 #define SURF 0x00000002 #define STNS 0x00000004 #define LABELS 0x00000008 #define XSECT 0x00000010 #define WALL1 0x00000020 #define WALL2 0x00000040 #define WALLS (WALL1|WALL2) #define PASG 0x00000080 #define ORIENTABLE 0x00000100 #define CENTRED 0x00000200 #define ENTS 0x00000400 #define FIXES 0x00000800 #define EXPORTS 0x00001000 #define PROJ 0x00002000 #define GRID 0x00004000 #define TEXT_HEIGHT 0x00008000 #define MARKER_SIZE 0x00010000 #define SCALE 0x00020000 #define FULL_COORDS 0x00040000 #define SPLAYS 0x00080000 #define CLAMP_TO_GROUND 0x00100000 #define DEFAULT_GRID_SPACING 100 // metres #define DEFAULT_TEXT_HEIGHT 0.6 #define DEFAULT_MARKER_SIZE 0.8 bool Export(const wxString &fnm_out, const wxString &title, const wxString &datestamp, const Model& model, const SurveyFilter* filter, double pan, double tilt, int show_mask, export_format format, double grid_, double text_height_, double marker_size_, double scale); #endif survex-1.4.4/src/filename.h0000644000175000017500000000333014141575516012525 00000000000000/* filename.h * Function prototypes for filename.c * Copyright (C) 1998-2003,2010 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FILENAME_H /* only include once */ #define FILENAME_H #ifdef __cplusplus extern "C" { #endif #include "useful.h" #include "osdepend.h" char * path_from_fnm(const char *fnm); char * base_from_fnm(const char *fnm); char * baseleaf_from_fnm(const char *fnm); char * leaf_from_fnm(const char *fnm); char * use_path(const char *pth, const char *lf); char * add_ext(const char *fnm, const char *ext); FILE *fopenWithPthAndExt(const char *pth, const char *fnm, const char *ext, const char *mode, char **fnmUsed); FILE *fopen_portable(const char *pth, const char *fnm, const char *ext, const char *mode, char **fnmUsed); FILE *safe_fopen(const char *fnm, const char *mode); FILE *safe_fopen_with_ext(const char *fnm, const char *ext, const char *mode); void safe_fclose(FILE *f); void filename_register_output(const char *fnm); void filename_delete_output(void); #ifdef __cplusplus } #endif #endif /* FILENAME_H */ survex-1.4.4/src/filelist.h0000644000175000017500000000176114141575516012566 00000000000000/* filelist.h * Filename extensions used by Survex programs * Copyright (C) 1993-2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #define EXT_SVX_DATA "svx" #define EXT_SVX_3D "3d" #define EXT_SVX_ERRS "err" #define EXT_SVX_POS "pos" #define EXT_SVX_MSG "msg" #define EXT_INI "ini" #define EXT_LOG "log" survex-1.4.4/src/netartic.h0000644000175000017500000000152013346142325012547 00000000000000/* netartic.h * Header file for network articulation point code * Copyright (C) 2000,2001 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ void articulate(void); survex-1.4.4/src/datain.h0000644000175000017500000000441314205617674012213 00000000000000/* datain.h * Header file for code that... * Reads in survey files, dealing with special characters, keywords & data * Copyright (C) 1994-2022 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_SETJMP_H # include #endif #include /* for FILE */ #include "message.h" /* for DIAG_WARN, etc */ typedef struct parse { FILE *fh; const char *filename; unsigned int line; long lpos; bool reported_where; struct parse *parent; #ifdef HAVE_SETJMP_H jmp_buf jbSkipLine; #endif } parse; extern int ch; extern parse file; extern bool f_export_ok; #define nextch() (ch = GETC(file.fh)) typedef struct { long offset; int ch; } filepos; void get_pos(filepos *fp); void set_pos(const filepos *fp); void skipblanks(void); /* reads complete data file */ void data_file(const char *pth, const char *fnm); void skipline(void); /* Read the current line into a string. * * The string is allocated with malloc() the caller is responsible for calling * free(). */ char* grab_line(void); /* The severity values are defined in message.h. */ #define DIAG_SEVERITY_MASK 0x03 #define DIAG_COL 0x04 #define DIAG_SKIP 0x08 #define DIAG_BUF 0x10 #define DIAG_TOKEN 0x20 #define DIAG_UINT 0x40 #define DIAG_DATE 0x80 #define DIAG_NUM 0x100 #define DIAG_STRING 0x200 void compile_diagnostic(int flags, int en, ...); void compile_diagnostic_at(int flags, const char * file, unsigned line, int en, ...); void compile_diagnostic_pfx(int flags, const prefix * pfx, int en, ...); void compile_diagnostic_token_show(int flags, int en); void compile_diagnostic_buffer(int flags, int en, ...); survex-1.4.4/src/hpgl.cc0000644000175000017500000001361514141575516012044 00000000000000/* hpgl.cc * Export from Aven as HPGL. */ /* Copyright (C) 1993-2003,2005,2010,2014,2015,2016,2019 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "hpgl.h" #include "useful.h" # define HPGL_USE_UC /*# define HPGL_USE_SR */ /* for text sized relative to page size */ # define HPGL_UNITS_PER_MM 40 # define HPGL_EOL "\003" /* terminates labelling commands: LB\003 */ # ifndef HPGL_USE_UC # define HPGL_SO "\016" /* shift in & shift out of extended character set */ # define HPGL_SI "\017" # endif # define HPGL_CROSS_SIZE 28 /* length of cross arms (in HPGL units) */ static long xpPageWidth, ypPageDepth; static long x_org = 0, y_org = 0; static bool fNewLines = fTrue; static bool fOriginInCentre = fFalse; /* Check if this line intersects the current page */ /* Initialise HPGL routines. */ void HPGL::header(const char *, const char *, time_t, double, double, double, double, double, double) { // FIXME: mm_across_page, mm_down_page, origin_in_centre, scale double PaperWidth = 9999999, PaperDepth = 9999999; fOriginInCentre = true; xpPageWidth = (long)(HPGL_UNITS_PER_MM * (double)PaperWidth); ypPageDepth = (long)(HPGL_UNITS_PER_MM * (double)PaperDepth); /* SR scales characters relative to P1 and P2 */ /* SI scales characters to size given (in cm) */ /* INitialise; Select Pen 1; */ /* Either: Scale chars Relative to P1 & P2 0.5,1.0 (2/3 deflt size) */ /* Or: Scale chars absolute to 2/3 of default size on A4 page */ fputs("IN;SP1;" #ifndef HPGL_USE_UC "CA-1;GM0,800;" /* Char set Alternate -1; Get Memory; */ #endif #ifdef HPGL_USE_SR "SR0.5,1.0;" #else "SI0.125,.179;" #endif , fh); if (fNewLines) PUTC('\n', fh); #ifndef HPGL_USE_UC /* define degree and copyright symbols */ fputs("DL32,10,30,12,30,13,29,13,27,12,26,10,26,9,27,9,29," "10,30;DL40,0,0;", fh); /* Hope this works! Seems to for BP */ if (fNewLines) PUTC('\n', fh); fputs("DL67,16,14,16,18,17,22,19,25,22,28,26,30,31,31,37,32," "43,32,49,31,53,30,58,28,61,25,63,22,64,18,64,14,63,10," "61,7,58,4,53,2,49,1,43,0,37,0,31,1,26,2,22,4,19,7,17,10," "16,14;", fh); if (fNewLines) PUTC('\n', fh); fputs("DL41,4,20,3,19,0,23,-4,24,-9,24,-14,23,-17,22,-20,19," "-21,16,-20,13,-17,10,-14,9,-9,8,-4,8,0,9,3,11,4,12;", fh); if (fNewLines) PUTC('\n', fh); #endif #if 0 /* and set clipping (Input Window!) on plotter (left,bottom,right,top) */ fprintf(fh, "IW%ld,%ld,%ld,%ld;", clip.x_min - x_org, clip.y_min - y_org, clip.x_min - x_org + xpPageWidth, clip.y_min - y_org + ypPageDepth); #endif } void HPGL::line(const img_point *p1, const img_point *p, unsigned /*flags*/, bool fPending) { if (fPending) { fprintf(fh, "PU%ld,%ld;", long(p1->x - x_org), long(p1->y - y_org)); } fprintf(fh, "PD%ld,%ld;", long(p->x - x_org), long(p->y - y_org)); } #define CS HPGL_CROSS_SIZE #define CS2 (2 * HPGL_CROSS_SIZE) void HPGL::cross(const img_point *p, bool /*fSurface*/) { fprintf(fh, "PU%ld,%ld;", long(p->x - x_org), long(p->y - y_org)); /* SM plots a symbol at each point, but it isn't very convenient here */ /* We can write PDPR%d,%dPR%d,%d... but the HP7475A manual doesn't say */ /* clearly if this will work on older plotters (such as the HP9872) */ fprintf(fh, "PD;PR%d,%d;PR%d,%d;PU%d,0;PD%d,%d;PU%d,%d;PA;", CS, CS, -CS2, -CS2, CS2, /*0,*/ -CS2, CS2, CS, -CS); if (fNewLines) PUTC('\n', fh); } #undef CS #undef CS2 void HPGL::label(const img_point *p, const char *s, bool /*fSurface*/, int) { /* LB is a text label, terminated with a ^C */ fprintf(fh, "PU%ld,%ld;LB", long(p->x - x_org), long(p->y - y_org)); while (*s) { switch (*s) { case '\xB0': #ifdef HPGL_USE_UC /* draw a degree sign */ fputs(HPGL_EOL ";UC1.25,7.5,99,.25,0,.125,-.25,0,-.5," "-.125,-.25,-.25,0,-.125,.25,0,.5,.125,.25;LB", fh); #else /* KLUDGE: this prints the degree sign if the plotter supports * extended chars or a space if not, since we tried to redefine * space. Nifty, eh? */ fputs(HPGL_SO " " HPGL_SI, fh); #endif break; case '\xA9': #ifdef HPGL_USE_UC /* (C) needs two chars to look right! */ /* This bit does the circle of the (C) symbol: */ fputs(HPGL_EOL ";", fh); if (fNewLines) PUTC('\n', fh); fputs("UC2,3.5,99,0,1,0.125,1,0.25,.75,0.375,.75," ".5,.5,.625,.25,.75,.25,.75,0,.75,-.25,.625,-.25," ".5,-.5,.375,-.75,.25,-.75,.125,-1,0,-1,-0.125,-1," "-0.25,-.75,-0.375,-.75,-.5,-.5,-.625,-.25,-.75,-.25," "-.75,0,-.75,.25,-.625,.25,-.5,.5,-.375,.75,-.25,.75," "-.125,1;", fh); if (fNewLines) PUTC('\n', fh); /* And this bit's the c in the middle: */ fputs("UC.5,5,99,-.125,.25,-.375,.5,-.5,.25,-.625,0," "-.625,-.25,-.375,-.25,-.375,-.75,-.125,-.75,.125,-.75," ".375,-.75,.375,-.25,.625,-.25,.625,0,.5,.25,.375,.5," ".125,.25;", fh); if (fNewLines) PUTC('\n', fh); fputs("LB", fh); #else fputs(HPGL_SO "(C)" HPGL_SI, fh); #endif break; default: PUTC(*s, fh); } s++; } fputs(HPGL_EOL ";", fh); if (fNewLines) PUTC('\n', fh); } void HPGL::footer() { /* Clear clipping window; New page. NB PG is a no-op on the HP7475A */ fputs("IW;PG;", fh); if (fNewLines) PUTC('\n', fh); } survex-1.4.4/src/guicontrol.cc0000644000175000017500000010300114142356022013252 00000000000000// // guicontrol.cc // // Handlers for events relating to the display of a survey. // // Copyright (C) 2000-2002,2005 Mark R. Shinwell // Copyright (C) 2001,2003,2004,2005,2006,2011,2012,2014,2015,2016 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifdef HAVE_CONFIG_H #include #endif #include "guicontrol.h" #include "gfxcore.h" #include const int DISPLAY_SHIFT = 10; const double FLYFREE_SHIFT = 0.2; const double ROTATE_STEP = 2.0; GUIControl::GUIControl() : dragging(NO_DRAG) { m_View = NULL; m_ReverseControls = false; m_LastDrag = drag_NONE; } void GUIControl::SetView(GfxCore* view) { m_View = view; } bool GUIControl::MouseDown() const { return (dragging != NO_DRAG); } void GUIControl::HandleTilt(wxPoint point) { // Handle a mouse movement during tilt mode. // wxGTK (at least) fails to update the cursor while dragging. m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_VERTICALLY); int dy = point.y - m_DragStart.y; if (m_ReverseControls != m_View->GetPerspective()) dy = -dy; m_View->TiltCave(Double(dy) * 0.36); m_DragStart = point; m_View->ForceRefresh(); } void GUIControl::HandleTranslate(wxPoint point) { // Handle a mouse movement during translation mode. // wxGTK (at least) fails to update the cursor while dragging. m_View->UpdateCursor(GfxCore::CURSOR_DRAGGING_HAND); int dx = point.x - m_DragStart.x; int dy = point.y - m_DragStart.y; if (m_ReverseControls) { dx = -dx; dy = -dy; } if (m_View->GetPerspective()) m_View->MoveViewer(0, -dy * .1, dx * .1); else m_View->TranslateCave(dx, dy); m_DragStart = point; } void GUIControl::HandleScaleRotate(wxPoint point) { // Handle a mouse movement during scale/rotate mode. // wxGTK (at least) fails to update the cursor while dragging. m_View->UpdateCursor(GfxCore::CURSOR_ZOOM_ROTATE); int dx, dy; int threshold; if (m_ScaleRotateLock == lock_NONE) { // Dragging to scale or rotate but we've not decided which yet. dx = point.x - m_DragRealStart.x; dy = point.y - m_DragRealStart.y; threshold = 8 * 8; } else { dx = point.x - m_DragStart.x; dy = point.y - m_DragStart.y; threshold = 5; } int dx2 = dx * dx; int dy2 = dy * dy; if (dx2 + dy2 < threshold) return; switch (m_ScaleRotateLock) { case lock_NONE: if (dx2 > dy2) { m_ScaleRotateLock = lock_ROTATE; // m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_HORIZONTALLY); } else { m_ScaleRotateLock = lock_SCALE; // m_View->UpdateCursor(GfxCore::CURSOR_ZOOM); } break; case lock_SCALE: if (dx2 >= 8 * dy2) { m_ScaleRotateLock = lock_ROTATE; // m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_HORIZONTALLY); } break; case lock_ROTATE: if (dy2 >= 8 * dx2) { m_ScaleRotateLock = lock_SCALE; // m_View->UpdateCursor(GfxCore::CURSOR_ZOOM); } break; } if (m_ScaleRotateLock == lock_ROTATE) { dy = 0; } else { dx = 0; } if (m_ReverseControls) { dx = -dx; dy = -dy; } if (m_View->GetPerspective()) { if (dy) m_View->MoveViewer(-dy * .1, 0, 0); } else { // up/down => scale. if (dy) m_View->SetScale(m_View->GetScale() * pow(1.06, 0.08 * dy)); // left/right => rotate. if (dx) m_View->TurnCave(Double(dx) * -0.36); if (dx || dy) m_View->ForceRefresh(); } m_DragStart = point; } void GUIControl::HandleTiltRotate(wxPoint point) { // Handle a mouse movement during tilt/rotate mode. if (m_View->IsExtendedElevation()) return; // wxGTK (at least) fails to update the cursor while dragging. m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_EITHER_WAY); int dx = point.x - m_DragStart.x; int dy = point.y - m_DragStart.y; if (m_ReverseControls != m_View->GetPerspective()) { dx = -dx; dy = -dy; } // left/right => rotate, up/down => tilt. // Make tilt less sensitive than rotate as that feels better. m_View->TurnCave(Double(dx) * -0.36); m_View->TiltCave(Double(dy) * 0.18); m_View->ForceRefresh(); m_DragStart = point; } void GUIControl::HandleRotate(wxPoint point) { // Handle a mouse movement during rotate mode. if (m_View->IsExtendedElevation()) return; // wxGTK (at least) fails to update the cursor while dragging. m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_HORIZONTALLY); int dx = point.x - m_DragStart.x; int dy = point.y - m_DragStart.y; if (m_ReverseControls != m_View->GetPerspective()) { dx = -dx; dy = -dy; } // left/right => rotate. m_View->TurnCave(Double(dx) * -0.36); m_View->ForceRefresh(); m_DragStart = point; } void GUIControl::RestoreCursor() { if (m_View->HereIsReal()) { m_View->UpdateCursor(GfxCore::CURSOR_POINTING_HAND); } else { m_View->UpdateCursor(GfxCore::CURSOR_DEFAULT); } } void GUIControl::HandleNonDrag(const wxPoint & point) { if (m_View->IsFullScreen()) { if (m_View->FullScreenModeShowingMenus()) { if (point.y > 8) m_View->FullScreenModeShowMenus(false); } else { if (point.y == 0) { m_View->FullScreenModeShowMenus(true); } } } if (m_View->CheckHitTestGrid(point, false)) { m_View->UpdateCursor(GfxCore::CURSOR_POINTING_HAND); } else if (m_View->PointWithinScaleBar(point)) { m_View->UpdateCursor(GfxCore::CURSOR_HORIZONTAL_RESIZE); } else if (m_View->PointWithinCompass(point)) { m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_HORIZONTALLY); } else if (m_View->PointWithinClino(point)) { m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_VERTICALLY); } else { RestoreCursor(); } } // // Mouse event handling methods // void GUIControl::OnMouseMove(wxMouseEvent& event) { // Mouse motion event handler. if (!m_View->HasData()) return; // Ignore moves which don't change the position. if (event.GetPosition() == m_DragStart) { return; } static long timestamp = LONG_MIN; if (dragging != NO_DRAG && m_ScaleRotateLock != lock_NONE && timestamp != LONG_MIN) { // If no motion for a second, reset the direction lock. if (event.GetTimestamp() - timestamp >= 1000) { m_ScaleRotateLock = lock_NONE; m_DragRealStart = m_DragStart; RestoreCursor(); } } timestamp = event.GetTimestamp(); wxPoint point(event.GetPosition()); // Check hit-test grid (only if no buttons are pressed). if (!event.LeftIsDown() && !event.MiddleIsDown() && !event.RightIsDown()) { HandleNonDrag(point); } // Update coordinate display if in plan view, // or altitude if in elevation view. m_View->SetCoords(point); switch (dragging) { case LEFT_DRAG: switch (m_LastDrag) { case drag_COMPASS: // Drag in heading indicator. m_View->SetCompassFromPoint(point); break; case drag_ELEV: // Drag in clinometer. m_View->SetClinoFromPoint(point); break; case drag_SCALE: m_View->SetScaleBarFromOffset(point.x - m_DragLast.x); break; case drag_MAIN: if (event.ControlDown()) { HandleTiltRotate(point); } else { HandleScaleRotate(point); } break; case drag_ZOOM: m_View->SetZoomBox(m_DragStart, point, !event.ShiftDown(), event.ControlDown()); break; case drag_NONE: // Shouldn't happen?! FIXME: assert or something. break; } break; case MIDDLE_DRAG: HandleTilt(point); break; case RIGHT_DRAG: HandleTranslate(point); break; case NO_DRAG: break; } m_DragLast = point; } void GUIControl::OnLButtonDown(wxMouseEvent& event) { if (m_View->HasData()) { m_DragStart = m_DragRealStart = event.GetPosition(); if (m_View->PointWithinCompass(m_DragStart)) { m_LastDrag = drag_COMPASS; m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_HORIZONTALLY); } else if (m_View->PointWithinClino(m_DragStart)) { m_LastDrag = drag_ELEV; m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_VERTICALLY); } else if (m_View->PointWithinScaleBar(m_DragStart)) { m_LastDrag = drag_SCALE; m_View->UpdateCursor(GfxCore::CURSOR_HORIZONTAL_RESIZE); } else if (event.ShiftDown()) { m_LastDrag = drag_ZOOM; m_View->UpdateCursor(GfxCore::CURSOR_ZOOM); } else { if (event.ControlDown() && !m_View->IsExtendedElevation()) { m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_EITHER_WAY); } else { m_View->UpdateCursor(GfxCore::CURSOR_ZOOM_ROTATE); } m_LastDrag = drag_MAIN; m_ScaleRotateLock = lock_NONE; } // We need to release and recapture for the cursor to update (noticed // with wxGTK). if (dragging != NO_DRAG) m_View->ReleaseMouse(); m_View->CaptureMouse(); dragging = LEFT_DRAG; } } void GUIControl::OnLButtonUp(wxMouseEvent& event) { if (m_View->HasData()) { if (dragging != LEFT_DRAG) return; if (event.MiddleIsDown()) { if (m_LastDrag == drag_ZOOM) m_View->UnsetZoomBox(); OnMButtonDown(event); return; } if (event.RightIsDown()) { if (m_LastDrag == drag_ZOOM) m_View->UnsetZoomBox(); OnRButtonDown(event); return; } if (m_LastDrag == drag_ZOOM) { m_View->ZoomBoxGo(); } m_View->ReleaseMouse(); m_LastDrag = drag_NONE; dragging = NO_DRAG; m_View->DragFinished(); if (event.GetPosition() == m_DragRealStart) { // Just a "click"... m_View->CheckHitTestGrid(m_DragStart, true); RestoreCursor(); } else { HandleNonDrag(event.GetPosition()); } } } void GUIControl::OnMButtonDown(wxMouseEvent& event) { if (m_View->HasData() && !m_View->IsExtendedElevation()) { m_DragStart = event.GetPosition(); m_View->UpdateCursor(GfxCore::CURSOR_ROTATE_VERTICALLY); if (dragging != NO_DRAG) { if (m_LastDrag == drag_ZOOM) m_View->UnsetZoomBox(); // We need to release and recapture for the cursor to update // (noticed with wxGTK). m_View->ReleaseMouse(); } m_View->CaptureMouse(); dragging = MIDDLE_DRAG; } } void GUIControl::OnMButtonUp(wxMouseEvent& event) { if (m_View->HasData()) { if (dragging != MIDDLE_DRAG) return; if (event.LeftIsDown()) { OnLButtonDown(event); return; } if (event.RightIsDown()) { OnRButtonDown(event); return; } dragging = NO_DRAG; m_View->ReleaseMouse(); m_View->DragFinished(); RestoreCursor(); } } void GUIControl::OnRButtonDown(wxMouseEvent& event) { if (m_View->HasData()) { if (dragging != NO_DRAG) { if (m_LastDrag == drag_ZOOM) m_View->UnsetZoomBox(); // We need to release and recapture for the cursor to update // (noticed with wxGTK). m_View->ReleaseMouse(); dragging = NO_DRAG; } if (m_View->HandleRClick(event.GetPosition())) return; m_DragStart = event.GetPosition(); m_View->UpdateCursor(GfxCore::CURSOR_DRAGGING_HAND); m_View->CaptureMouse(); dragging = RIGHT_DRAG; } } void GUIControl::OnRButtonUp(wxMouseEvent& event) { if (dragging != RIGHT_DRAG) return; if (event.LeftIsDown()) { OnLButtonDown(event); return; } if (event.MiddleIsDown()) { OnMButtonDown(event); return; } m_LastDrag = drag_NONE; m_View->ReleaseMouse(); dragging = NO_DRAG; RestoreCursor(); m_View->DragFinished(); } void GUIControl::OnMouseWheel(wxMouseEvent& event) { int dy = event.GetWheelRotation(); if (m_View->GetPerspective()) { m_View->MoveViewer(-dy, 0, 0); } else { m_View->SetScale(m_View->GetScale() * pow(1.06, -0.04 * dy)); m_View->ForceRefresh(); } } void GUIControl::OnDisplayOverlappingNames() { m_View->ToggleOverlappingNames(); } void GUIControl::OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->ShowingStationNames()); cmd.Check(m_View->ShowingOverlappingNames()); } void GUIControl::OnColourByDepth() { if (m_View->ColouringBy() == COLOUR_BY_DEPTH) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_DEPTH); } } void GUIControl::OnColourByDate() { if (m_View->ColouringBy() == COLOUR_BY_DATE) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_DATE); } } void GUIControl::OnColourByError() { if (m_View->ColouringBy() == COLOUR_BY_ERROR) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_ERROR); } } void GUIControl::OnColourByHError() { if (m_View->ColouringBy() == COLOUR_BY_H_ERROR) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_H_ERROR); } } void GUIControl::OnColourByVError() { if (m_View->ColouringBy() == COLOUR_BY_V_ERROR) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_V_ERROR); } } void GUIControl::OnColourByGradient() { if (m_View->ColouringBy() == COLOUR_BY_GRADIENT) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_GRADIENT); } } void GUIControl::OnColourByLength() { if (m_View->ColouringBy() == COLOUR_BY_LENGTH) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_LENGTH); } } void GUIControl::OnColourBySurvey() { if (m_View->ColouringBy() == COLOUR_BY_SURVEY) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_SURVEY); } } void GUIControl::OnColourByStyle() { if (m_View->ColouringBy() == COLOUR_BY_STYLE) { m_View->SetColourBy(COLOUR_BY_NONE); } else { m_View->SetColourBy(COLOUR_BY_STYLE); } } void GUIControl::OnColourByUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); } void GUIControl::OnColourByDepthUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_DEPTH); } void GUIControl::OnColourByDateUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_DATE); } void GUIControl::OnColourByErrorUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_ERROR); } void GUIControl::OnColourByHErrorUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_H_ERROR); } void GUIControl::OnColourByVErrorUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_V_ERROR); } void GUIControl::OnColourByGradientUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_GRADIENT); } void GUIControl::OnColourByLengthUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_LENGTH); } void GUIControl::OnColourBySurveyUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_SURVEY); } void GUIControl::OnColourByStyleUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ColouringBy() == COLOUR_BY_STYLE); } void GUIControl::OnShowCrosses() { m_View->ToggleCrosses(); } void GUIControl::OnShowCrossesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ShowingCrosses()); } void GUIControl::OnShowStationNames() { m_View->ToggleStationNames(); } void GUIControl::OnShowStationNamesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ShowingStationNames()); } void GUIControl::OnShowSurveyLegs() { m_View->ToggleUndergroundLegs(); } void GUIControl::OnShowSurveyLegsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasUndergroundLegs()); cmd.Check(m_View->ShowingUndergroundLegs()); } void GUIControl::OnHideSplays() { m_View->SetSplaysMode(SHOW_HIDE); } void GUIControl::OnShowSplaysDashed() { m_View->SetSplaysMode(SHOW_DASHED); } void GUIControl::OnShowSplaysFaded() { m_View->SetSplaysMode(SHOW_FADED); } void GUIControl::OnShowSplaysNormal() { m_View->SetSplaysMode(SHOW_NORMAL); } void GUIControl::OnSplaysUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSplays()); } void GUIControl::OnHideSplaysUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSplays()); cmd.Check(m_View->ShowingSplaysMode() == SHOW_HIDE); } void GUIControl::OnShowSplaysDashedUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSplays()); cmd.Check(m_View->ShowingSplaysMode() == SHOW_DASHED); } void GUIControl::OnShowSplaysFadedUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSplays()); cmd.Check(m_View->ShowingSplaysMode() == SHOW_FADED); } void GUIControl::OnShowSplaysNormalUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSplays()); cmd.Check(m_View->ShowingSplaysMode() == SHOW_NORMAL); } void GUIControl::OnHideDupes() { m_View->SetDupesMode(SHOW_HIDE); } void GUIControl::OnShowDupesDashed() { m_View->SetDupesMode(SHOW_DASHED); } void GUIControl::OnShowDupesFaded() { m_View->SetDupesMode(SHOW_FADED); } void GUIControl::OnShowDupesNormal() { m_View->SetDupesMode(SHOW_NORMAL); } void GUIControl::OnDupesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasDupes()); } void GUIControl::OnHideDupesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasDupes()); cmd.Check(m_View->ShowingDupesMode() == SHOW_HIDE); } void GUIControl::OnShowDupesDashedUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasDupes()); cmd.Check(m_View->ShowingDupesMode() == SHOW_DASHED); } void GUIControl::OnShowDupesFadedUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasDupes()); cmd.Check(m_View->ShowingDupesMode() == SHOW_FADED); } void GUIControl::OnShowDupesNormalUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasDupes()); cmd.Check(m_View->ShowingDupesMode() == SHOW_NORMAL); } void GUIControl::OnMoveEast() { m_View->TurnCaveTo(90.0); m_View->ForceRefresh(); } void GUIControl::OnMoveEastUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation() && m_View->GetCompassValue() != 90.0); } void GUIControl::OnMoveNorth() { m_View->TurnCaveTo(0.0); m_View->ForceRefresh(); } void GUIControl::OnMoveNorthUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->GetCompassValue() != 0.0); } void GUIControl::OnMoveSouth() { m_View->TurnCaveTo(180.0); m_View->ForceRefresh(); } void GUIControl::OnMoveSouthUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->GetCompassValue() != 180.0); } void GUIControl::OnMoveWest() { m_View->TurnCaveTo(270.0); m_View->ForceRefresh(); } void GUIControl::OnMoveWestUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation() && m_View->GetCompassValue() != 270.0); } void GUIControl::OnToggleRotation() { m_View->ToggleRotation(); } void GUIControl::OnToggleRotationUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation()); cmd.Check(m_View->HasData() && m_View->IsRotating()); } void GUIControl::OnReverseControls() { m_ReverseControls = !m_ReverseControls; } void GUIControl::OnReverseControlsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_ReverseControls); } void GUIControl::OnReverseDirectionOfRotation() { m_View->ReverseRotation(); } void GUIControl::OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation()); } void GUIControl::OnStepOnceAnticlockwise(bool accel) { if (m_View->GetPerspective()) { m_View->TurnCave(accel ? -5.0 * ROTATE_STEP : -ROTATE_STEP); } else { m_View->TurnCave(accel ? 5.0 * ROTATE_STEP : ROTATE_STEP); } m_View->ForceRefresh(); } void GUIControl::OnStepOnceClockwise(bool accel) { if (m_View->GetPerspective()) { m_View->TurnCave(accel ? 5.0 * ROTATE_STEP : ROTATE_STEP); } else { m_View->TurnCave(accel ? -5.0 * ROTATE_STEP : -ROTATE_STEP); } m_View->ForceRefresh(); } void GUIControl::OnDefaults() { m_View->Defaults(); } void GUIControl::OnDefaultsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); } void GUIControl::OnElevation() { // Switch to elevation view. m_View->SwitchToElevation(); } void GUIControl::OnElevationUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation() && !m_View->ShowingElevation()); } void GUIControl::OnHigherViewpoint(bool accel) { // Raise the viewpoint. if (m_View->GetPerspective()) { m_View->TiltCave(accel ? 5.0 * ROTATE_STEP : ROTATE_STEP); } else { m_View->TiltCave(accel ? -5.0 * ROTATE_STEP : -ROTATE_STEP); } m_View->ForceRefresh(); } void GUIControl::OnLowerViewpoint(bool accel) { // Lower the viewpoint. if (m_View->GetPerspective()) { m_View->TiltCave(accel ? -5.0 * ROTATE_STEP : -ROTATE_STEP); } else { m_View->TiltCave(accel ? 5.0 * ROTATE_STEP : ROTATE_STEP); } m_View->ForceRefresh(); } void GUIControl::OnPlan() { // Switch to plan view. m_View->SwitchToPlan(); } void GUIControl::OnPlanUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation() && !m_View->ShowingPlan()); } void GUIControl::OnShiftDisplayDown(bool accel) { if (m_View->GetPerspective()) m_View->MoveViewer(0, accel ? 5 * FLYFREE_SHIFT : FLYFREE_SHIFT, 0); else m_View->TranslateCave(0, accel ? 5 * DISPLAY_SHIFT : DISPLAY_SHIFT); } void GUIControl::OnShiftDisplayLeft(bool accel) { if (m_View->GetPerspective()) m_View->MoveViewer(0, 0, accel ? 5 * FLYFREE_SHIFT : FLYFREE_SHIFT); else m_View->TranslateCave(accel ? -5 * DISPLAY_SHIFT : -DISPLAY_SHIFT, 0); } void GUIControl::OnShiftDisplayRight(bool accel) { if (m_View->GetPerspective()) m_View->MoveViewer(0, 0, accel ? -5 * FLYFREE_SHIFT : -FLYFREE_SHIFT); else m_View->TranslateCave(accel ? 5 * DISPLAY_SHIFT : DISPLAY_SHIFT, 0); } void GUIControl::OnShiftDisplayUp(bool accel) { if (m_View->GetPerspective()) m_View->MoveViewer(0, accel ? -5 * FLYFREE_SHIFT : -FLYFREE_SHIFT, 0); else m_View->TranslateCave(0, accel ? -5 * DISPLAY_SHIFT : -DISPLAY_SHIFT); } void GUIControl::OnZoomIn(bool accel) { // Increase the scale. if (m_View->GetPerspective()) { m_View->MoveViewer(accel ? 5 * FLYFREE_SHIFT : FLYFREE_SHIFT, 0, 0); } else { m_View->SetScale(m_View->GetScale() * (accel ? 1.1236 : 1.06)); m_View->ForceRefresh(); } } void GUIControl::OnZoomOut(bool accel) { // Decrease the scale. if (m_View->GetPerspective()) { m_View->MoveViewer(accel ? -5 * FLYFREE_SHIFT : -FLYFREE_SHIFT, 0, 0); } else { m_View->SetScale(m_View->GetScale() / (accel ? 1.1236 : 1.06)); m_View->ForceRefresh(); } } void GUIControl::OnToggleScalebar() { m_View->ToggleScaleBar(); } void GUIControl::OnToggleScalebarUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ShowingScaleBar()); } void GUIControl::OnToggleColourKey() { m_View->ToggleColourKey(); } void GUIControl::OnToggleColourKeyUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->ColouringBy() != COLOUR_BY_NONE); cmd.Check(m_View->ShowingColourKey()); } void GUIControl::OnViewCompass() { m_View->ToggleCompass(); } void GUIControl::OnViewCompassUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation()); cmd.Check(m_View->ShowingCompass()); } void GUIControl::OnViewClino() { m_View->ToggleClino(); } void GUIControl::OnViewClinoUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation()); cmd.Check(m_View->ShowingClino()); } void GUIControl::OnShowSurface() { m_View->ToggleSurfaceLegs(); } void GUIControl::OnShowSurfaceUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasSurfaceLegs()); cmd.Check(m_View->ShowingSurfaceLegs()); } void GUIControl::OnShowEntrances() { m_View->ToggleEntrances(); } void GUIControl::OnShowEntrancesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && (m_View->GetNumEntrances() > 0)); cmd.Check(m_View->ShowingEntrances()); } void GUIControl::OnShowFixedPts() { m_View->ToggleFixedPts(); } void GUIControl::OnShowFixedPtsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && (m_View->GetNumFixedPts() > 0)); cmd.Check(m_View->ShowingFixedPts()); } void GUIControl::OnShowExportedPts() { m_View->ToggleExportedPts(); } void GUIControl::OnShowExportedPtsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && (m_View->GetNumExportedPts() > 0)); cmd.Check(m_View->ShowingExportedPts()); } void GUIControl::OnViewGrid() { m_View->ToggleGrid(); } void GUIControl::OnViewGridUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->ShowingGrid()); } void GUIControl::OnIndicatorsUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); } void GUIControl::OnViewPerspective() { m_View->TogglePerspective(); // Force update of coordinate display. if (m_View->GetPerspective()) { m_View->MoveViewer(0, 0, 0); } else { m_View->ClearCoords(); } } void GUIControl::OnViewPerspectiveUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && !m_View->IsExtendedElevation()); cmd.Check(m_View->GetPerspective()); } void GUIControl::OnViewSmoothShading() { m_View->ToggleSmoothShading(); } void GUIControl::OnViewSmoothShadingUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetSmoothShading()); } void GUIControl::OnViewTextured() { m_View->ToggleTextured(); } void GUIControl::OnViewTexturedUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetTextured()); } void GUIControl::OnViewFog() { m_View->ToggleFog(); } void GUIControl::OnViewFogUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetFog()); } void GUIControl::OnViewSmoothLines() { m_View->ToggleAntiAlias(); } void GUIControl::OnViewSmoothLinesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetAntiAlias()); } void GUIControl::OnToggleMetric() { m_View->ToggleMetric(); wxConfigBase::Get()->Write(wxT("metric"), m_View->GetMetric()); wxConfigBase::Get()->Flush(); } void GUIControl::OnToggleMetricUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetMetric()); } void GUIControl::OnToggleDegrees() { m_View->ToggleDegrees(); wxConfigBase::Get()->Write(wxT("degrees"), m_View->GetDegrees()); wxConfigBase::Get()->Flush(); } void GUIControl::OnToggleDegreesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetDegrees()); } void GUIControl::OnTogglePercent() { m_View->TogglePercent(); wxConfigBase::Get()->Write(wxT("percent"), m_View->GetPercent()); wxConfigBase::Get()->Flush(); } void GUIControl::OnTogglePercentUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->GetPercent()); } void GUIControl::OnToggleTubes() { m_View->ToggleTubes(); } void GUIControl::OnToggleTubesUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData() && m_View->HasTubes()); cmd.Check(m_View->GetTubes()); } void GUIControl::OnCancelDistLine() { m_View->ClearTreeSelection(); } void GUIControl::OnCancelDistLineUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->ShowingMeasuringLine()); } void GUIControl::OnKeyPress(wxKeyEvent &e) { if (!m_View->HasData() || (e.GetModifiers() &~ (wxMOD_CONTROL|wxMOD_SHIFT))) { // Pass on the event if there's no survey data, or if any modifier keys // other than Ctrl and Shift are pressed. e.Skip(); return; } // The changelog says this is meant to keep animation going while keys are // pressed, but that happens anyway (on linux at least - perhaps it helps // on windows?) FIXME : check! //bool refresh = m_View->Animate(); switch (e.GetKeyCode()) { case '/': case '?': if (m_View->CanLowerViewpoint() && !m_View->IsExtendedElevation()) OnLowerViewpoint(e.GetModifiers() == wxMOD_SHIFT); break; case '\'': case '@': case '"': // both shifted forms - US and UK kbd if (m_View->CanRaiseViewpoint() && !m_View->IsExtendedElevation()) OnHigherViewpoint(e.GetModifiers() == wxMOD_SHIFT); break; case 'C': case 'c': if (!m_View->IsExtendedElevation() && !m_View->IsRotating()) OnStepOnceAnticlockwise(e.GetModifiers() == wxMOD_SHIFT); break; case 'V': case 'v': if (!m_View->IsExtendedElevation() && !m_View->IsRotating()) OnStepOnceClockwise(e.GetModifiers() == wxMOD_SHIFT); break; case ']': case '}': OnZoomIn(e.GetModifiers() == wxMOD_SHIFT); break; case '[': case '{': OnZoomOut(e.GetModifiers() == wxMOD_SHIFT); break; case 'N': case 'n': OnMoveNorth(); break; case 'S': case 's': OnMoveSouth(); break; case 'E': case 'e': if (!m_View->IsExtendedElevation()) OnMoveEast(); break; case 'W': case 'w': if (!m_View->IsExtendedElevation()) OnMoveWest(); break; case 'Z': case 'z': if (!m_View->IsExtendedElevation()) m_View->RotateFaster(e.GetModifiers() == wxMOD_SHIFT); break; case 'X': case 'x': if (!m_View->IsExtendedElevation()) m_View->RotateSlower(e.GetModifiers() == wxMOD_SHIFT); break; case 'R': case 'r': if (!m_View->IsExtendedElevation()) OnReverseDirectionOfRotation(); break; case 'P': case 'p': if (!m_View->IsExtendedElevation() && !m_View->ShowingPlan()) OnPlan(); break; case 'L': case 'l': if (!m_View->IsExtendedElevation() && !m_View->ShowingElevation()) OnElevation(); break; case 'O': case 'o': OnDisplayOverlappingNames(); break; case WXK_DELETE: if (e.GetModifiers() == 0) OnDefaults(); break; case WXK_RETURN: if (e.GetModifiers() == 0) { // For compatibility with older versions. if (!m_View->IsExtendedElevation() && !m_View->IsRotating()) m_View->StartRotation(); } break; case WXK_SPACE: if (e.GetModifiers() == 0) { if (!m_View->IsExtendedElevation()) OnToggleRotation(); } break; case WXK_LEFT: if ((e.GetModifiers() &~ wxMOD_SHIFT) == wxMOD_CONTROL) { if (!m_View->IsExtendedElevation() && !m_View->IsRotating()) OnStepOnceAnticlockwise(e.GetModifiers() == wxMOD_SHIFT); } else { OnShiftDisplayLeft(e.GetModifiers() == wxMOD_SHIFT); } break; case WXK_RIGHT: if ((e.GetModifiers() &~ wxMOD_SHIFT) == wxMOD_CONTROL) { if (!m_View->IsExtendedElevation() && !m_View->IsRotating()) OnStepOnceClockwise(e.GetModifiers() == wxMOD_SHIFT); } else { OnShiftDisplayRight(e.GetModifiers() == wxMOD_SHIFT); } break; case WXK_UP: if ((e.GetModifiers() &~ wxMOD_SHIFT) == wxMOD_CONTROL) { if (m_View->CanRaiseViewpoint() && !m_View->IsExtendedElevation()) OnHigherViewpoint(e.GetModifiers() == wxMOD_SHIFT); } else { OnShiftDisplayUp(e.GetModifiers() == wxMOD_SHIFT); } break; case WXK_DOWN: if ((e.GetModifiers() &~ wxMOD_SHIFT) == wxMOD_CONTROL) { if (m_View->CanLowerViewpoint() && !m_View->IsExtendedElevation()) OnLowerViewpoint(e.GetModifiers() == wxMOD_SHIFT); } else { OnShiftDisplayDown(e.GetModifiers() == wxMOD_SHIFT); } break; case WXK_ESCAPE: if (e.GetModifiers() == 0) { if (m_View->ShowingMeasuringLine()) { OnCancelDistLine(); } else if (m_View->IsFullScreen()) { // Cancel full-screen mode on "Escape" if it isn't cancelling // the measuring line. m_View->FullScreenMode(); } } break; case WXK_F2: if (e.GetModifiers() == 0) m_View->ToggleFatFinger(); break; case WXK_F3: if (e.GetModifiers() == 0) m_View->ToggleHitTestDebug(); break; case WXK_F4: { if (e.GetModifiers() == 0) { const wxChar * msg; #if wxDEBUG_LEVEL if (wxTheAssertHandler) wxTheAssertHandler = NULL; else wxSetDefaultAssertHandler(); if (wxTheAssertHandler) msg = wxT("Assertions enabled"); else msg = wxT("Assertions disabled"); #else msg = wxT("wxWidgets was built without assertions"); #endif wxMessageBox(msg, wxT("Aven Debug"), wxOK | wxICON_INFORMATION); } break; } case WXK_F5: if (e.GetModifiers() == 0) { m_View->InvalidateAllLists(); m_View->ForceRefresh(); } break; case WXK_F6: if (e.GetModifiers() == 0) m_View->ToggleRenderStats(); break; default: e.Skip(); } //if (refresh) m_View->ForceRefresh(); } void GUIControl::OnViewFullScreenUpdate(wxUpdateUIEvent& cmd) { cmd.Check(m_View->IsFullScreen()); } void GUIControl::OnViewFullScreen() { m_View->FullScreenMode(); } void GUIControl::OnViewBoundingBoxUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasData()); cmd.Check(m_View->DisplayingBoundingBox()); } void GUIControl::OnViewBoundingBox() { m_View->ToggleBoundingBox(); } void GUIControl::OnViewTerrainUpdate(wxUpdateUIEvent& cmd) { cmd.Enable(m_View->HasTerrain()); cmd.Check(m_View->DisplayingTerrain()); } void GUIControl::OnViewTerrain() { m_View->ToggleTerrain(); } survex-1.4.4/src/gpx.cc0000644000175000017500000001302314205012024011656 00000000000000/* gpx.cc * Export from Aven as GPX. */ /* Copyright (C) 2012 Olaf Kähler * Copyright (C) 2012,2013,2014,2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "gpx.h" #include "export.h" // For LABELS, etc #include #include #include #include #include "useful.h" #include #include "aven.h" #include "message.h" using namespace std; #define WGS84_DATUM_STRING "EPSG:4326" static void html_escape(FILE *fh, const char *s) { while (*s) { switch (*s) { case '<': fputs("<", fh); break; case '>': fputs(">", fh); break; case '&': fputs("&", fh); break; default: PUTC(*s, fh); } ++s; } } static void discarding_proj_logger(void *, int, const char *) { } GPX::GPX(const char * input_datum) { /* Prevent stderr spew from PROJ. */ proj_log_func(PJ_DEFAULT_CTX, nullptr, discarding_proj_logger); pj = proj_create_crs_to_crs(PJ_DEFAULT_CTX, input_datum, WGS84_DATUM_STRING, NULL); if (pj) { // Normalise the output order so x is longitude and y latitude - by // default new PROJ has them switched for EPSG:4326 which just seems // confusing. PJ* pj_norm = proj_normalize_for_visualization(PJ_DEFAULT_CTX, pj); proj_destroy(pj); pj = pj_norm; } if (!pj) { wxString m = wmsg(/*Failed to initialise input coordinate system “%sâ€*/287); m = wxString::Format(m.c_str(), input_datum); throw m; } } GPX::~GPX() { if (pj) proj_destroy(pj); free((void*)trk_name); } const int * GPX::passes() const { static const int default_passes[] = { LABELS|ENTS|FIXES|EXPORTS, LEGS|SURF, 0 }; return default_passes; } /* Initialise GPX routines. */ void GPX::header(const char * title, const char *, time_t datestamp_numeric, double, double, double, double, double, double) { fputs( "\n" "\n", fh); if (title) { fputs("", fh); html_escape(fh, title); fputs("\n", fh); trk_name = strdup(title); } if (datestamp_numeric != time_t(-1)) { struct tm * tm = gmtime(&datestamp_numeric); if (tm) { char buf[32]; if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", tm)) { fputs("\n", fh); } } } // FIXME: optional in GPX, but perhaps useful: // // NB Not necessarily the same as the bounds in survex coords translated // to WGS84 lat+long... } void GPX::line(const img_point *p1, const img_point *p, unsigned /*flags*/, bool fPendingMove) { if (fPendingMove) { if (in_trkseg) { fputs("\n", fh); } else { fputs("", fh); if (trk_name) { fputs("", fh); html_escape(fh, trk_name); fputs("", fh); } fputs("\n", fh); in_trkseg = true; } PJ_COORD coord = {p1->x, p1->y, p1->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } PJ_COORD coord = {p->x, p->y, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.2f\n", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); } void GPX::label(const img_point *p, const char *s, bool /*fSurface*/, int type) { PJ_COORD coord = {p->x, p->y, p->z, HUGE_VAL}; coord = proj_trans(pj, PJ_FWD, coord); if (coord.xyzt.x == HUGE_VAL || coord.xyzt.y == HUGE_VAL || coord.xyzt.z == HUGE_VAL) { // FIXME report errors } // %.8f is at worst just over 1mm. fprintf(fh, "%.2f", coord.xyzt.x, coord.xyzt.y, coord.xyzt.z); html_escape(fh, s); fputs("", fh); // Add a "pin" symbol with colour matching what aven shows. switch (type) { case FIXES: fputs("Pin, Red", fh); break; case EXPORTS: fputs("Pin, Blue", fh); break; case ENTS: fputs("Pin, Green", fh); break; } fputs("\n", fh); } void GPX::footer() { if (in_trkseg) fputs("\n", fh); fputs("\n", fh); } survex-1.4.4/src/Makefile.in0000644000175000017500000036726214367066627012672 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = cavern$(EXEEXT) diffpos$(EXEEXT) dump3d$(EXEEXT) \ extend$(EXEEXT) sorterr$(EXEEXT) survexport$(EXEEXT) \ aven$(EXEEXT) check_PROGRAMS = imgtest$(EXEEXT) # FIXME: It looks like modern wx-config should give us this... @MACOS_TRUE@am__append_1 = -framework OpenGL subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = aven-cmdline.$(OBJEXT) aven-message.$(OBJEXT) \ aven-str.$(OBJEXT) aven-filename.$(OBJEXT) \ aven-osdepend.$(OBJEXT) aven-z_getopt.$(OBJEXT) \ aven-getopt1.$(OBJEXT) am_aven_OBJECTS = aven-aven.$(OBJEXT) aven-gfxcore.$(OBJEXT) \ aven-mainfrm.$(OBJEXT) aven-model.$(OBJEXT) \ aven-vector3.$(OBJEXT) aven-aboutdlg.$(OBJEXT) \ aven-namecompare.$(OBJEXT) aven-aventreectrl.$(OBJEXT) \ aven-export.$(OBJEXT) aven-export3d.$(OBJEXT) \ aven-guicontrol.$(OBJEXT) aven-gla-gl.$(OBJEXT) \ aven-glbitmapfont.$(OBJEXT) aven-gpx.$(OBJEXT) \ aven-json.$(OBJEXT) aven-kml.$(OBJEXT) aven-log.$(OBJEXT) \ aven-moviemaker.$(OBJEXT) aven-hpgl.$(OBJEXT) \ aven-cavernlog.$(OBJEXT) aven-avenprcore.$(OBJEXT) \ aven-printing.$(OBJEXT) aven-buttontaghandler.$(OBJEXT) \ aven-pos.$(OBJEXT) aven-date.$(OBJEXT) \ aven-img_hosted.$(OBJEXT) aven-useful.$(OBJEXT) \ aven-hash.$(OBJEXT) $(am__objects_1) aven_OBJECTS = $(am_aven_OBJECTS) am__DEPENDENCIES_1 = @WIN32_FALSE@aven_DEPENDENCIES = $(LIBOBJS) $(am__DEPENDENCIES_1) \ @WIN32_FALSE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @WIN32_TRUE@aven_DEPENDENCIES = avenrc.o $(LIBOBJS) \ @WIN32_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @WIN32_TRUE@ $(am__DEPENDENCIES_1) aven_LINK = $(CXXLD) $(aven_CXXFLAGS) $(CXXFLAGS) $(aven_LDFLAGS) \ $(LDFLAGS) -o $@ am__objects_2 = cmdline.$(OBJEXT) message.$(OBJEXT) str.$(OBJEXT) \ filename.$(OBJEXT) osdepend.$(OBJEXT) z_getopt.$(OBJEXT) \ getopt1.$(OBJEXT) am_cavern_OBJECTS = cavern.$(OBJEXT) date.$(OBJEXT) listpos.$(OBJEXT) \ commands.$(OBJEXT) datain.$(OBJEXT) netskel.$(OBJEXT) \ network.$(OBJEXT) readval.$(OBJEXT) matrix.$(OBJEXT) \ img_hosted.$(OBJEXT) netbits.$(OBJEXT) useful.$(OBJEXT) \ validate.$(OBJEXT) netartic.$(OBJEXT) thgeomag.$(OBJEXT) \ $(am__objects_2) cavern_OBJECTS = $(am_cavern_OBJECTS) cavern_DEPENDENCIES = $(am__DEPENDENCIES_1) am_diffpos_OBJECTS = diffpos.$(OBJEXT) namecmp.$(OBJEXT) \ img_hosted.$(OBJEXT) useful.$(OBJEXT) hash.$(OBJEXT) \ $(am__objects_2) diffpos_OBJECTS = $(am_diffpos_OBJECTS) diffpos_LDADD = $(LDADD) diffpos_DEPENDENCIES = $(LIBOBJS) am_dump3d_OBJECTS = dump3d.$(OBJEXT) date.$(OBJEXT) \ img_hosted.$(OBJEXT) useful.$(OBJEXT) $(am__objects_2) dump3d_OBJECTS = $(am_dump3d_OBJECTS) dump3d_LDADD = $(LDADD) dump3d_DEPENDENCIES = $(LIBOBJS) am_extend_OBJECTS = extend.$(OBJEXT) img_hosted.$(OBJEXT) \ useful.$(OBJEXT) hash.$(OBJEXT) $(am__objects_2) extend_OBJECTS = $(am_extend_OBJECTS) extend_LDADD = $(LDADD) extend_DEPENDENCIES = $(LIBOBJS) am_imgtest_OBJECTS = imgtest.$(OBJEXT) img.$(OBJEXT) imgtest_OBJECTS = $(am_imgtest_OBJECTS) imgtest_LDADD = $(LDADD) imgtest_DEPENDENCIES = $(LIBOBJS) am_sorterr_OBJECTS = sorterr.$(OBJEXT) $(am__objects_2) sorterr_OBJECTS = $(am_sorterr_OBJECTS) sorterr_LDADD = $(LDADD) sorterr_DEPENDENCIES = $(LIBOBJS) am_survexport_OBJECTS = survexport-survexport.$(OBJEXT) \ survexport-model.$(OBJEXT) survexport-export.$(OBJEXT) \ survexport-export3d.$(OBJEXT) survexport-namecompare.$(OBJEXT) \ useful.$(OBJEXT) hash.$(OBJEXT) img_hosted.$(OBJEXT) \ survexport-gpx.$(OBJEXT) survexport-hpgl.$(OBJEXT) \ survexport-json.$(OBJEXT) survexport-kml.$(OBJEXT) \ survexport-pos.$(OBJEXT) survexport-vector3.$(OBJEXT) \ $(am__objects_2) survexport_OBJECTS = $(am_survexport_OBJECTS) survexport_DEPENDENCIES = $(LIBOBJS) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) survexport_LINK = $(CXXLD) $(survexport_CXXFLAGS) $(CXXFLAGS) \ $(survexport_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = $(DEPDIR)/strcasecmp.Po $(DEPDIR)/strftime.Po \ ./$(DEPDIR)/aven-aboutdlg.Po ./$(DEPDIR)/aven-aven.Po \ ./$(DEPDIR)/aven-avenprcore.Po \ ./$(DEPDIR)/aven-aventreectrl.Po \ ./$(DEPDIR)/aven-buttontaghandler.Po \ ./$(DEPDIR)/aven-cavernlog.Po ./$(DEPDIR)/aven-cmdline.Po \ ./$(DEPDIR)/aven-date.Po ./$(DEPDIR)/aven-export.Po \ ./$(DEPDIR)/aven-export3d.Po ./$(DEPDIR)/aven-filename.Po \ ./$(DEPDIR)/aven-getopt1.Po ./$(DEPDIR)/aven-gfxcore.Po \ ./$(DEPDIR)/aven-gla-gl.Po ./$(DEPDIR)/aven-glbitmapfont.Po \ ./$(DEPDIR)/aven-gpx.Po ./$(DEPDIR)/aven-guicontrol.Po \ ./$(DEPDIR)/aven-hash.Po ./$(DEPDIR)/aven-hpgl.Po \ ./$(DEPDIR)/aven-img_hosted.Po ./$(DEPDIR)/aven-json.Po \ ./$(DEPDIR)/aven-kml.Po ./$(DEPDIR)/aven-log.Po \ ./$(DEPDIR)/aven-mainfrm.Po ./$(DEPDIR)/aven-message.Po \ ./$(DEPDIR)/aven-model.Po ./$(DEPDIR)/aven-moviemaker.Po \ ./$(DEPDIR)/aven-namecompare.Po ./$(DEPDIR)/aven-osdepend.Po \ ./$(DEPDIR)/aven-pos.Po ./$(DEPDIR)/aven-printing.Po \ ./$(DEPDIR)/aven-str.Po ./$(DEPDIR)/aven-useful.Po \ ./$(DEPDIR)/aven-vector3.Po ./$(DEPDIR)/aven-z_getopt.Po \ ./$(DEPDIR)/cavern.Po ./$(DEPDIR)/cmdline.Po \ ./$(DEPDIR)/commands.Po ./$(DEPDIR)/datain.Po \ ./$(DEPDIR)/date.Po ./$(DEPDIR)/diffpos.Po \ ./$(DEPDIR)/dump3d.Po ./$(DEPDIR)/extend.Po \ ./$(DEPDIR)/filename.Po ./$(DEPDIR)/getopt1.Po \ ./$(DEPDIR)/hash.Po ./$(DEPDIR)/img.Po \ ./$(DEPDIR)/img_hosted.Po ./$(DEPDIR)/imgtest.Po \ ./$(DEPDIR)/listpos.Po ./$(DEPDIR)/matrix.Po \ ./$(DEPDIR)/message.Po ./$(DEPDIR)/namecmp.Po \ ./$(DEPDIR)/netartic.Po ./$(DEPDIR)/netbits.Po \ ./$(DEPDIR)/netskel.Po ./$(DEPDIR)/network.Po \ ./$(DEPDIR)/osdepend.Po ./$(DEPDIR)/readval.Po \ ./$(DEPDIR)/sorterr.Po ./$(DEPDIR)/str.Po \ ./$(DEPDIR)/survexport-export.Po \ ./$(DEPDIR)/survexport-export3d.Po \ ./$(DEPDIR)/survexport-gpx.Po ./$(DEPDIR)/survexport-hpgl.Po \ ./$(DEPDIR)/survexport-json.Po ./$(DEPDIR)/survexport-kml.Po \ ./$(DEPDIR)/survexport-model.Po \ ./$(DEPDIR)/survexport-namecompare.Po \ ./$(DEPDIR)/survexport-pos.Po \ ./$(DEPDIR)/survexport-survexport.Po \ ./$(DEPDIR)/survexport-vector3.Po ./$(DEPDIR)/thgeomag.Po \ ./$(DEPDIR)/useful.Po ./$(DEPDIR)/validate.Po \ ./$(DEPDIR)/z_getopt.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(aven_SOURCES) $(cavern_SOURCES) $(diffpos_SOURCES) \ $(dump3d_SOURCES) $(extend_SOURCES) $(imgtest_SOURCES) \ $(sorterr_SOURCES) $(survexport_SOURCES) DIST_SOURCES = $(aven_SOURCES) $(cavern_SOURCES) $(diffpos_SOURCES) \ $(dump3d_SOURCES) $(extend_SOURCES) $(imgtest_SOURCES) \ $(sorterr_SOURCES) $(survexport_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ strcasecmp.c strftime.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ $(PROJ_CFLAGS) AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVEN_COPYRIGHT_MSG = @AVEN_COPYRIGHT_MSG@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMMAVERSION = @COMMAVERSION@ COPYRIGHT_MSG = @COPYRIGHT_MSG@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_TEXT = @EXTRA_TEXT@ HAVE_CXX11 = @HAVE_CXX11@ HTMLFILES = @HTMLFILES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JW = @JW@ LDFLAGS = @LDFLAGS@ LIBAV_CFLAGS = @LIBAV_CFLAGS@ LIBAV_LIBS = @LIBAV_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDOCDIR = @PKGDOCDIR@ PKGDOCDIR_EXPANDED = @PKGDOCDIR_EXPANDED@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRETTYPACKAGE = @PRETTYPACKAGE@ PROJ_CFLAGS = @PROJ_CFLAGS@ PROJ_LIBS = @PROJ_LIBS@ RELEASE = @RELEASE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WXCONFIG = @WXCONFIG@ WX_CFLAGS = @WX_CFLAGS@ WX_CONFIG = @WX_CONFIG@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_LIBS = @WX_LIBS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_HEADERS = cavern.h commands.h cmdline.h date.h datain.h debug.h\ filelist.h filename.h getopt.h hash.h img.c img.h img_hosted.h kml.h\ labelinfo.h listpos.h matrix.h message.h namecmp.h namecompare.h netartic.h\ netbits.h netskel.h network.h osalloc.h\ osdepend.h ostypes.h out.h readval.h str.h useful.h validate.h whichos.h\ glbitmapfont.h gllogerror.h guicontrol.h gla.h gpx.h moviemaker.h\ export3d.h exportfilter.h hpgl.h cavernlog.h aboutdlg.h aven.h avenpal.h\ gfxcore.h json.h log.h mainfrm.h pos.h vector3.h wx.h aventypes.h\ aventreectrl.h export.h model.h printing.h avenprcore.h img2aven.h\ thgeomag.h thgeomagdata.h moviemaker-legacy.cc LDADD = $(LIBOBJS) COMMONSRC = cmdline.c message.c str.c filename.c osdepend.c z_getopt.c getopt1.c cavern_SOURCES = cavern.c date.c listpos.c commands.c datain.c netskel.c \ network.c readval.c matrix.c img_hosted.c netbits.c useful.c \ validate.c netartic.c thgeomag.c \ $(COMMONSRC) cavern_LDADD = $(PROJ_LIBS) aven_SOURCES = aven.cc gfxcore.cc mainfrm.cc model.cc vector3.cc aboutdlg.cc \ namecompare.cc aventreectrl.cc export.cc export3d.cc guicontrol.cc gla-gl.cc \ glbitmapfont.cc gpx.cc json.cc kml.cc log.cc moviemaker.cc hpgl.cc \ cavernlog.cc avenprcore.cc printing.cc buttontaghandler.cc pos.cc \ date.c img_hosted.c useful.c hash.c \ brotatemask.xbm brotate.xbm handmask.xbm hand.xbm \ rotatemask.xbm rotate.xbm vrotatemask.xbm vrotate.xbm \ rotatezoom.xbm rotatezoommask.xbm \ $(COMMONSRC) dump3d_SOURCES = dump3d.c date.c img_hosted.c useful.c \ $(COMMONSRC) @WIN32_FALSE@aven_LDADD = $(LIBOBJS) $(WX_LIBS) $(PROJ_LIBS) $(LIBAV_LIBS) @WIN32_TRUE@aven_LDADD = avenrc.o $(LIBOBJS) $(LIBAV_LIBS) $(WX_LIBS) $(PROJ_LIBS) aven_CFLAGS = $(AM_CFLAGS) $(WX_CFLAGS) -DAVEN aven_CXXFLAGS = $(AM_CXXFLAGS) $(PROJ_CFLAGS) $(LIBAV_CFLAGS) $(WX_CXXFLAGS) aven_LDFLAGS = $(am__append_1) survexport_CXXFLAGS = $(AM_CXXFLAGS) $(PROJ_CFLAGS) $(WX_CXXFLAGS) survexport_LDFLAGS = survexport_LDADD = $(LIBOBJS) $(WX_LIBS) $(PROJ_LIBS) diffpos_SOURCES = diffpos.c namecmp.c img_hosted.c useful.c hash.c \ $(COMMONSRC) sorterr_SOURCES = sorterr.c $(COMMONSRC) extend_SOURCES = extend.c img_hosted.c useful.c hash.c \ $(COMMONSRC) survexport_SOURCES = survexport.cc model.cc export.cc export3d.cc \ namecompare.cc useful.c hash.c img_hosted.c \ gpx.cc hpgl.cc json.cc kml.cc pos.cc vector3.cc $(COMMONSRC) #testerr_SOURCES = testerr.c message.c filename.c useful.c osdepend.c imgtest_SOURCES = imgtest.c img.c all_sources = \ $(noinst_HEADERS) \ $(COMMONSRC) \ $(cavern_SOURCES) \ $(aven_SOURCES) \ $(dump3d_SOURCES) \ $(diffpos_SOURCES) \ $(sorterr_SOURCES) \ $(extend_SOURCES) \ $(survexport_SOURCES) EXTRA_DIST = \ aven.rc getopt.c gettexttomsg.pl gradient.pov gdtconvert gen_img2aven \ igrf13coeffs.txt igrf2c.py BUILT_SOURCES = z_getopt.c avenpal.h img2aven.h thgeomagdata.h PYTHON = python3 MAINTAINERCLEANFILES = \ $(BUILT_SOURCES) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) aven$(EXEEXT): $(aven_OBJECTS) $(aven_DEPENDENCIES) $(EXTRA_aven_DEPENDENCIES) @rm -f aven$(EXEEXT) $(AM_V_CXXLD)$(aven_LINK) $(aven_OBJECTS) $(aven_LDADD) $(LIBS) cavern$(EXEEXT): $(cavern_OBJECTS) $(cavern_DEPENDENCIES) $(EXTRA_cavern_DEPENDENCIES) @rm -f cavern$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cavern_OBJECTS) $(cavern_LDADD) $(LIBS) diffpos$(EXEEXT): $(diffpos_OBJECTS) $(diffpos_DEPENDENCIES) $(EXTRA_diffpos_DEPENDENCIES) @rm -f diffpos$(EXEEXT) $(AM_V_CCLD)$(LINK) $(diffpos_OBJECTS) $(diffpos_LDADD) $(LIBS) dump3d$(EXEEXT): $(dump3d_OBJECTS) $(dump3d_DEPENDENCIES) $(EXTRA_dump3d_DEPENDENCIES) @rm -f dump3d$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dump3d_OBJECTS) $(dump3d_LDADD) $(LIBS) extend$(EXEEXT): $(extend_OBJECTS) $(extend_DEPENDENCIES) $(EXTRA_extend_DEPENDENCIES) @rm -f extend$(EXEEXT) $(AM_V_CCLD)$(LINK) $(extend_OBJECTS) $(extend_LDADD) $(LIBS) imgtest$(EXEEXT): $(imgtest_OBJECTS) $(imgtest_DEPENDENCIES) $(EXTRA_imgtest_DEPENDENCIES) @rm -f imgtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imgtest_OBJECTS) $(imgtest_LDADD) $(LIBS) sorterr$(EXEEXT): $(sorterr_OBJECTS) $(sorterr_DEPENDENCIES) $(EXTRA_sorterr_DEPENDENCIES) @rm -f sorterr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sorterr_OBJECTS) $(sorterr_LDADD) $(LIBS) survexport$(EXEEXT): $(survexport_OBJECTS) $(survexport_DEPENDENCIES) $(EXTRA_survexport_DEPENDENCIES) @rm -f survexport$(EXEEXT) $(AM_V_CXXLD)$(survexport_LINK) $(survexport_OBJECTS) $(survexport_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strftime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-aboutdlg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-aven.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-avenprcore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-aventreectrl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-buttontaghandler.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-cavernlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-date.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-export.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-export3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-getopt1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-gfxcore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-gla-gl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-glbitmapfont.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-gpx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-guicontrol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-hpgl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-img_hosted.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-json.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-kml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-log.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-mainfrm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-message.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-model.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-moviemaker.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-namecompare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-osdepend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-pos.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-printing.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-useful.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-vector3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aven-z_getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cavern.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datain.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/date.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diffpos.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/img.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/img_hosted.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imgtest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listpos.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/namecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netartic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netbits.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netskel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/network.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osdepend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sorterr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-export.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-export3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-gpx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-hpgl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-json.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-kml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-model.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-namecompare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-pos.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-survexport.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/survexport-vector3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thgeomag.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useful.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/validate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z_getopt.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` aven-date.o: date.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-date.o -MD -MP -MF $(DEPDIR)/aven-date.Tpo -c -o aven-date.o `test -f 'date.c' || echo '$(srcdir)/'`date.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-date.Tpo $(DEPDIR)/aven-date.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='date.c' object='aven-date.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-date.o `test -f 'date.c' || echo '$(srcdir)/'`date.c aven-date.obj: date.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-date.obj -MD -MP -MF $(DEPDIR)/aven-date.Tpo -c -o aven-date.obj `if test -f 'date.c'; then $(CYGPATH_W) 'date.c'; else $(CYGPATH_W) '$(srcdir)/date.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-date.Tpo $(DEPDIR)/aven-date.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='date.c' object='aven-date.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-date.obj `if test -f 'date.c'; then $(CYGPATH_W) 'date.c'; else $(CYGPATH_W) '$(srcdir)/date.c'; fi` aven-img_hosted.o: img_hosted.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-img_hosted.o -MD -MP -MF $(DEPDIR)/aven-img_hosted.Tpo -c -o aven-img_hosted.o `test -f 'img_hosted.c' || echo '$(srcdir)/'`img_hosted.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-img_hosted.Tpo $(DEPDIR)/aven-img_hosted.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img_hosted.c' object='aven-img_hosted.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-img_hosted.o `test -f 'img_hosted.c' || echo '$(srcdir)/'`img_hosted.c aven-img_hosted.obj: img_hosted.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-img_hosted.obj -MD -MP -MF $(DEPDIR)/aven-img_hosted.Tpo -c -o aven-img_hosted.obj `if test -f 'img_hosted.c'; then $(CYGPATH_W) 'img_hosted.c'; else $(CYGPATH_W) '$(srcdir)/img_hosted.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-img_hosted.Tpo $(DEPDIR)/aven-img_hosted.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img_hosted.c' object='aven-img_hosted.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-img_hosted.obj `if test -f 'img_hosted.c'; then $(CYGPATH_W) 'img_hosted.c'; else $(CYGPATH_W) '$(srcdir)/img_hosted.c'; fi` aven-useful.o: useful.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-useful.o -MD -MP -MF $(DEPDIR)/aven-useful.Tpo -c -o aven-useful.o `test -f 'useful.c' || echo '$(srcdir)/'`useful.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-useful.Tpo $(DEPDIR)/aven-useful.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='useful.c' object='aven-useful.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-useful.o `test -f 'useful.c' || echo '$(srcdir)/'`useful.c aven-useful.obj: useful.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-useful.obj -MD -MP -MF $(DEPDIR)/aven-useful.Tpo -c -o aven-useful.obj `if test -f 'useful.c'; then $(CYGPATH_W) 'useful.c'; else $(CYGPATH_W) '$(srcdir)/useful.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-useful.Tpo $(DEPDIR)/aven-useful.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='useful.c' object='aven-useful.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-useful.obj `if test -f 'useful.c'; then $(CYGPATH_W) 'useful.c'; else $(CYGPATH_W) '$(srcdir)/useful.c'; fi` aven-hash.o: hash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-hash.o -MD -MP -MF $(DEPDIR)/aven-hash.Tpo -c -o aven-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-hash.Tpo $(DEPDIR)/aven-hash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hash.c' object='aven-hash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c aven-hash.obj: hash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-hash.obj -MD -MP -MF $(DEPDIR)/aven-hash.Tpo -c -o aven-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-hash.Tpo $(DEPDIR)/aven-hash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hash.c' object='aven-hash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi` aven-cmdline.o: cmdline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-cmdline.o -MD -MP -MF $(DEPDIR)/aven-cmdline.Tpo -c -o aven-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-cmdline.Tpo $(DEPDIR)/aven-cmdline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmdline.c' object='aven-cmdline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c aven-cmdline.obj: cmdline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-cmdline.obj -MD -MP -MF $(DEPDIR)/aven-cmdline.Tpo -c -o aven-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-cmdline.Tpo $(DEPDIR)/aven-cmdline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmdline.c' object='aven-cmdline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` aven-message.o: message.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-message.o -MD -MP -MF $(DEPDIR)/aven-message.Tpo -c -o aven-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-message.Tpo $(DEPDIR)/aven-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='message.c' object='aven-message.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c aven-message.obj: message.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-message.obj -MD -MP -MF $(DEPDIR)/aven-message.Tpo -c -o aven-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-message.Tpo $(DEPDIR)/aven-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='message.c' object='aven-message.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` aven-str.o: str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-str.o -MD -MP -MF $(DEPDIR)/aven-str.Tpo -c -o aven-str.o `test -f 'str.c' || echo '$(srcdir)/'`str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-str.Tpo $(DEPDIR)/aven-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='str.c' object='aven-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-str.o `test -f 'str.c' || echo '$(srcdir)/'`str.c aven-str.obj: str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-str.obj -MD -MP -MF $(DEPDIR)/aven-str.Tpo -c -o aven-str.obj `if test -f 'str.c'; then $(CYGPATH_W) 'str.c'; else $(CYGPATH_W) '$(srcdir)/str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-str.Tpo $(DEPDIR)/aven-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='str.c' object='aven-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-str.obj `if test -f 'str.c'; then $(CYGPATH_W) 'str.c'; else $(CYGPATH_W) '$(srcdir)/str.c'; fi` aven-filename.o: filename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-filename.o -MD -MP -MF $(DEPDIR)/aven-filename.Tpo -c -o aven-filename.o `test -f 'filename.c' || echo '$(srcdir)/'`filename.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-filename.Tpo $(DEPDIR)/aven-filename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filename.c' object='aven-filename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-filename.o `test -f 'filename.c' || echo '$(srcdir)/'`filename.c aven-filename.obj: filename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-filename.obj -MD -MP -MF $(DEPDIR)/aven-filename.Tpo -c -o aven-filename.obj `if test -f 'filename.c'; then $(CYGPATH_W) 'filename.c'; else $(CYGPATH_W) '$(srcdir)/filename.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-filename.Tpo $(DEPDIR)/aven-filename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filename.c' object='aven-filename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-filename.obj `if test -f 'filename.c'; then $(CYGPATH_W) 'filename.c'; else $(CYGPATH_W) '$(srcdir)/filename.c'; fi` aven-osdepend.o: osdepend.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-osdepend.o -MD -MP -MF $(DEPDIR)/aven-osdepend.Tpo -c -o aven-osdepend.o `test -f 'osdepend.c' || echo '$(srcdir)/'`osdepend.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-osdepend.Tpo $(DEPDIR)/aven-osdepend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdepend.c' object='aven-osdepend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-osdepend.o `test -f 'osdepend.c' || echo '$(srcdir)/'`osdepend.c aven-osdepend.obj: osdepend.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-osdepend.obj -MD -MP -MF $(DEPDIR)/aven-osdepend.Tpo -c -o aven-osdepend.obj `if test -f 'osdepend.c'; then $(CYGPATH_W) 'osdepend.c'; else $(CYGPATH_W) '$(srcdir)/osdepend.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-osdepend.Tpo $(DEPDIR)/aven-osdepend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdepend.c' object='aven-osdepend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-osdepend.obj `if test -f 'osdepend.c'; then $(CYGPATH_W) 'osdepend.c'; else $(CYGPATH_W) '$(srcdir)/osdepend.c'; fi` aven-z_getopt.o: z_getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-z_getopt.o -MD -MP -MF $(DEPDIR)/aven-z_getopt.Tpo -c -o aven-z_getopt.o `test -f 'z_getopt.c' || echo '$(srcdir)/'`z_getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-z_getopt.Tpo $(DEPDIR)/aven-z_getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='z_getopt.c' object='aven-z_getopt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-z_getopt.o `test -f 'z_getopt.c' || echo '$(srcdir)/'`z_getopt.c aven-z_getopt.obj: z_getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-z_getopt.obj -MD -MP -MF $(DEPDIR)/aven-z_getopt.Tpo -c -o aven-z_getopt.obj `if test -f 'z_getopt.c'; then $(CYGPATH_W) 'z_getopt.c'; else $(CYGPATH_W) '$(srcdir)/z_getopt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-z_getopt.Tpo $(DEPDIR)/aven-z_getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='z_getopt.c' object='aven-z_getopt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-z_getopt.obj `if test -f 'z_getopt.c'; then $(CYGPATH_W) 'z_getopt.c'; else $(CYGPATH_W) '$(srcdir)/z_getopt.c'; fi` aven-getopt1.o: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-getopt1.o -MD -MP -MF $(DEPDIR)/aven-getopt1.Tpo -c -o aven-getopt1.o `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-getopt1.Tpo $(DEPDIR)/aven-getopt1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='aven-getopt1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-getopt1.o `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c aven-getopt1.obj: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -MT aven-getopt1.obj -MD -MP -MF $(DEPDIR)/aven-getopt1.Tpo -c -o aven-getopt1.obj `if test -f 'getopt1.c'; then $(CYGPATH_W) 'getopt1.c'; else $(CYGPATH_W) '$(srcdir)/getopt1.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-getopt1.Tpo $(DEPDIR)/aven-getopt1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='aven-getopt1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CFLAGS) $(CFLAGS) -c -o aven-getopt1.obj `if test -f 'getopt1.c'; then $(CYGPATH_W) 'getopt1.c'; else $(CYGPATH_W) '$(srcdir)/getopt1.c'; fi` .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` aven-aven.o: aven.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aven.o -MD -MP -MF $(DEPDIR)/aven-aven.Tpo -c -o aven-aven.o `test -f 'aven.cc' || echo '$(srcdir)/'`aven.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aven.Tpo $(DEPDIR)/aven-aven.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aven.cc' object='aven-aven.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aven.o `test -f 'aven.cc' || echo '$(srcdir)/'`aven.cc aven-aven.obj: aven.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aven.obj -MD -MP -MF $(DEPDIR)/aven-aven.Tpo -c -o aven-aven.obj `if test -f 'aven.cc'; then $(CYGPATH_W) 'aven.cc'; else $(CYGPATH_W) '$(srcdir)/aven.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aven.Tpo $(DEPDIR)/aven-aven.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aven.cc' object='aven-aven.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aven.obj `if test -f 'aven.cc'; then $(CYGPATH_W) 'aven.cc'; else $(CYGPATH_W) '$(srcdir)/aven.cc'; fi` aven-gfxcore.o: gfxcore.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gfxcore.o -MD -MP -MF $(DEPDIR)/aven-gfxcore.Tpo -c -o aven-gfxcore.o `test -f 'gfxcore.cc' || echo '$(srcdir)/'`gfxcore.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gfxcore.Tpo $(DEPDIR)/aven-gfxcore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gfxcore.cc' object='aven-gfxcore.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gfxcore.o `test -f 'gfxcore.cc' || echo '$(srcdir)/'`gfxcore.cc aven-gfxcore.obj: gfxcore.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gfxcore.obj -MD -MP -MF $(DEPDIR)/aven-gfxcore.Tpo -c -o aven-gfxcore.obj `if test -f 'gfxcore.cc'; then $(CYGPATH_W) 'gfxcore.cc'; else $(CYGPATH_W) '$(srcdir)/gfxcore.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gfxcore.Tpo $(DEPDIR)/aven-gfxcore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gfxcore.cc' object='aven-gfxcore.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gfxcore.obj `if test -f 'gfxcore.cc'; then $(CYGPATH_W) 'gfxcore.cc'; else $(CYGPATH_W) '$(srcdir)/gfxcore.cc'; fi` aven-mainfrm.o: mainfrm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-mainfrm.o -MD -MP -MF $(DEPDIR)/aven-mainfrm.Tpo -c -o aven-mainfrm.o `test -f 'mainfrm.cc' || echo '$(srcdir)/'`mainfrm.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-mainfrm.Tpo $(DEPDIR)/aven-mainfrm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mainfrm.cc' object='aven-mainfrm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-mainfrm.o `test -f 'mainfrm.cc' || echo '$(srcdir)/'`mainfrm.cc aven-mainfrm.obj: mainfrm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-mainfrm.obj -MD -MP -MF $(DEPDIR)/aven-mainfrm.Tpo -c -o aven-mainfrm.obj `if test -f 'mainfrm.cc'; then $(CYGPATH_W) 'mainfrm.cc'; else $(CYGPATH_W) '$(srcdir)/mainfrm.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-mainfrm.Tpo $(DEPDIR)/aven-mainfrm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mainfrm.cc' object='aven-mainfrm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-mainfrm.obj `if test -f 'mainfrm.cc'; then $(CYGPATH_W) 'mainfrm.cc'; else $(CYGPATH_W) '$(srcdir)/mainfrm.cc'; fi` aven-model.o: model.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-model.o -MD -MP -MF $(DEPDIR)/aven-model.Tpo -c -o aven-model.o `test -f 'model.cc' || echo '$(srcdir)/'`model.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-model.Tpo $(DEPDIR)/aven-model.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='model.cc' object='aven-model.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-model.o `test -f 'model.cc' || echo '$(srcdir)/'`model.cc aven-model.obj: model.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-model.obj -MD -MP -MF $(DEPDIR)/aven-model.Tpo -c -o aven-model.obj `if test -f 'model.cc'; then $(CYGPATH_W) 'model.cc'; else $(CYGPATH_W) '$(srcdir)/model.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-model.Tpo $(DEPDIR)/aven-model.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='model.cc' object='aven-model.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-model.obj `if test -f 'model.cc'; then $(CYGPATH_W) 'model.cc'; else $(CYGPATH_W) '$(srcdir)/model.cc'; fi` aven-vector3.o: vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-vector3.o -MD -MP -MF $(DEPDIR)/aven-vector3.Tpo -c -o aven-vector3.o `test -f 'vector3.cc' || echo '$(srcdir)/'`vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-vector3.Tpo $(DEPDIR)/aven-vector3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='vector3.cc' object='aven-vector3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-vector3.o `test -f 'vector3.cc' || echo '$(srcdir)/'`vector3.cc aven-vector3.obj: vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-vector3.obj -MD -MP -MF $(DEPDIR)/aven-vector3.Tpo -c -o aven-vector3.obj `if test -f 'vector3.cc'; then $(CYGPATH_W) 'vector3.cc'; else $(CYGPATH_W) '$(srcdir)/vector3.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-vector3.Tpo $(DEPDIR)/aven-vector3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='vector3.cc' object='aven-vector3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-vector3.obj `if test -f 'vector3.cc'; then $(CYGPATH_W) 'vector3.cc'; else $(CYGPATH_W) '$(srcdir)/vector3.cc'; fi` aven-aboutdlg.o: aboutdlg.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aboutdlg.o -MD -MP -MF $(DEPDIR)/aven-aboutdlg.Tpo -c -o aven-aboutdlg.o `test -f 'aboutdlg.cc' || echo '$(srcdir)/'`aboutdlg.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aboutdlg.Tpo $(DEPDIR)/aven-aboutdlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aboutdlg.cc' object='aven-aboutdlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aboutdlg.o `test -f 'aboutdlg.cc' || echo '$(srcdir)/'`aboutdlg.cc aven-aboutdlg.obj: aboutdlg.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aboutdlg.obj -MD -MP -MF $(DEPDIR)/aven-aboutdlg.Tpo -c -o aven-aboutdlg.obj `if test -f 'aboutdlg.cc'; then $(CYGPATH_W) 'aboutdlg.cc'; else $(CYGPATH_W) '$(srcdir)/aboutdlg.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aboutdlg.Tpo $(DEPDIR)/aven-aboutdlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aboutdlg.cc' object='aven-aboutdlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aboutdlg.obj `if test -f 'aboutdlg.cc'; then $(CYGPATH_W) 'aboutdlg.cc'; else $(CYGPATH_W) '$(srcdir)/aboutdlg.cc'; fi` aven-namecompare.o: namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-namecompare.o -MD -MP -MF $(DEPDIR)/aven-namecompare.Tpo -c -o aven-namecompare.o `test -f 'namecompare.cc' || echo '$(srcdir)/'`namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-namecompare.Tpo $(DEPDIR)/aven-namecompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='namecompare.cc' object='aven-namecompare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-namecompare.o `test -f 'namecompare.cc' || echo '$(srcdir)/'`namecompare.cc aven-namecompare.obj: namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-namecompare.obj -MD -MP -MF $(DEPDIR)/aven-namecompare.Tpo -c -o aven-namecompare.obj `if test -f 'namecompare.cc'; then $(CYGPATH_W) 'namecompare.cc'; else $(CYGPATH_W) '$(srcdir)/namecompare.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-namecompare.Tpo $(DEPDIR)/aven-namecompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='namecompare.cc' object='aven-namecompare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-namecompare.obj `if test -f 'namecompare.cc'; then $(CYGPATH_W) 'namecompare.cc'; else $(CYGPATH_W) '$(srcdir)/namecompare.cc'; fi` aven-aventreectrl.o: aventreectrl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aventreectrl.o -MD -MP -MF $(DEPDIR)/aven-aventreectrl.Tpo -c -o aven-aventreectrl.o `test -f 'aventreectrl.cc' || echo '$(srcdir)/'`aventreectrl.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aventreectrl.Tpo $(DEPDIR)/aven-aventreectrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aventreectrl.cc' object='aven-aventreectrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aventreectrl.o `test -f 'aventreectrl.cc' || echo '$(srcdir)/'`aventreectrl.cc aven-aventreectrl.obj: aventreectrl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-aventreectrl.obj -MD -MP -MF $(DEPDIR)/aven-aventreectrl.Tpo -c -o aven-aventreectrl.obj `if test -f 'aventreectrl.cc'; then $(CYGPATH_W) 'aventreectrl.cc'; else $(CYGPATH_W) '$(srcdir)/aventreectrl.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-aventreectrl.Tpo $(DEPDIR)/aven-aventreectrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='aventreectrl.cc' object='aven-aventreectrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-aventreectrl.obj `if test -f 'aventreectrl.cc'; then $(CYGPATH_W) 'aventreectrl.cc'; else $(CYGPATH_W) '$(srcdir)/aventreectrl.cc'; fi` aven-export.o: export.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-export.o -MD -MP -MF $(DEPDIR)/aven-export.Tpo -c -o aven-export.o `test -f 'export.cc' || echo '$(srcdir)/'`export.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-export.Tpo $(DEPDIR)/aven-export.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export.cc' object='aven-export.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-export.o `test -f 'export.cc' || echo '$(srcdir)/'`export.cc aven-export.obj: export.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-export.obj -MD -MP -MF $(DEPDIR)/aven-export.Tpo -c -o aven-export.obj `if test -f 'export.cc'; then $(CYGPATH_W) 'export.cc'; else $(CYGPATH_W) '$(srcdir)/export.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-export.Tpo $(DEPDIR)/aven-export.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export.cc' object='aven-export.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-export.obj `if test -f 'export.cc'; then $(CYGPATH_W) 'export.cc'; else $(CYGPATH_W) '$(srcdir)/export.cc'; fi` aven-export3d.o: export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-export3d.o -MD -MP -MF $(DEPDIR)/aven-export3d.Tpo -c -o aven-export3d.o `test -f 'export3d.cc' || echo '$(srcdir)/'`export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-export3d.Tpo $(DEPDIR)/aven-export3d.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export3d.cc' object='aven-export3d.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-export3d.o `test -f 'export3d.cc' || echo '$(srcdir)/'`export3d.cc aven-export3d.obj: export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-export3d.obj -MD -MP -MF $(DEPDIR)/aven-export3d.Tpo -c -o aven-export3d.obj `if test -f 'export3d.cc'; then $(CYGPATH_W) 'export3d.cc'; else $(CYGPATH_W) '$(srcdir)/export3d.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-export3d.Tpo $(DEPDIR)/aven-export3d.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export3d.cc' object='aven-export3d.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-export3d.obj `if test -f 'export3d.cc'; then $(CYGPATH_W) 'export3d.cc'; else $(CYGPATH_W) '$(srcdir)/export3d.cc'; fi` aven-guicontrol.o: guicontrol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-guicontrol.o -MD -MP -MF $(DEPDIR)/aven-guicontrol.Tpo -c -o aven-guicontrol.o `test -f 'guicontrol.cc' || echo '$(srcdir)/'`guicontrol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-guicontrol.Tpo $(DEPDIR)/aven-guicontrol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guicontrol.cc' object='aven-guicontrol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-guicontrol.o `test -f 'guicontrol.cc' || echo '$(srcdir)/'`guicontrol.cc aven-guicontrol.obj: guicontrol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-guicontrol.obj -MD -MP -MF $(DEPDIR)/aven-guicontrol.Tpo -c -o aven-guicontrol.obj `if test -f 'guicontrol.cc'; then $(CYGPATH_W) 'guicontrol.cc'; else $(CYGPATH_W) '$(srcdir)/guicontrol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-guicontrol.Tpo $(DEPDIR)/aven-guicontrol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guicontrol.cc' object='aven-guicontrol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-guicontrol.obj `if test -f 'guicontrol.cc'; then $(CYGPATH_W) 'guicontrol.cc'; else $(CYGPATH_W) '$(srcdir)/guicontrol.cc'; fi` aven-gla-gl.o: gla-gl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gla-gl.o -MD -MP -MF $(DEPDIR)/aven-gla-gl.Tpo -c -o aven-gla-gl.o `test -f 'gla-gl.cc' || echo '$(srcdir)/'`gla-gl.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gla-gl.Tpo $(DEPDIR)/aven-gla-gl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gla-gl.cc' object='aven-gla-gl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gla-gl.o `test -f 'gla-gl.cc' || echo '$(srcdir)/'`gla-gl.cc aven-gla-gl.obj: gla-gl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gla-gl.obj -MD -MP -MF $(DEPDIR)/aven-gla-gl.Tpo -c -o aven-gla-gl.obj `if test -f 'gla-gl.cc'; then $(CYGPATH_W) 'gla-gl.cc'; else $(CYGPATH_W) '$(srcdir)/gla-gl.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gla-gl.Tpo $(DEPDIR)/aven-gla-gl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gla-gl.cc' object='aven-gla-gl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gla-gl.obj `if test -f 'gla-gl.cc'; then $(CYGPATH_W) 'gla-gl.cc'; else $(CYGPATH_W) '$(srcdir)/gla-gl.cc'; fi` aven-glbitmapfont.o: glbitmapfont.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-glbitmapfont.o -MD -MP -MF $(DEPDIR)/aven-glbitmapfont.Tpo -c -o aven-glbitmapfont.o `test -f 'glbitmapfont.cc' || echo '$(srcdir)/'`glbitmapfont.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-glbitmapfont.Tpo $(DEPDIR)/aven-glbitmapfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='glbitmapfont.cc' object='aven-glbitmapfont.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-glbitmapfont.o `test -f 'glbitmapfont.cc' || echo '$(srcdir)/'`glbitmapfont.cc aven-glbitmapfont.obj: glbitmapfont.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-glbitmapfont.obj -MD -MP -MF $(DEPDIR)/aven-glbitmapfont.Tpo -c -o aven-glbitmapfont.obj `if test -f 'glbitmapfont.cc'; then $(CYGPATH_W) 'glbitmapfont.cc'; else $(CYGPATH_W) '$(srcdir)/glbitmapfont.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-glbitmapfont.Tpo $(DEPDIR)/aven-glbitmapfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='glbitmapfont.cc' object='aven-glbitmapfont.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-glbitmapfont.obj `if test -f 'glbitmapfont.cc'; then $(CYGPATH_W) 'glbitmapfont.cc'; else $(CYGPATH_W) '$(srcdir)/glbitmapfont.cc'; fi` aven-gpx.o: gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gpx.o -MD -MP -MF $(DEPDIR)/aven-gpx.Tpo -c -o aven-gpx.o `test -f 'gpx.cc' || echo '$(srcdir)/'`gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gpx.Tpo $(DEPDIR)/aven-gpx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gpx.cc' object='aven-gpx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gpx.o `test -f 'gpx.cc' || echo '$(srcdir)/'`gpx.cc aven-gpx.obj: gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-gpx.obj -MD -MP -MF $(DEPDIR)/aven-gpx.Tpo -c -o aven-gpx.obj `if test -f 'gpx.cc'; then $(CYGPATH_W) 'gpx.cc'; else $(CYGPATH_W) '$(srcdir)/gpx.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-gpx.Tpo $(DEPDIR)/aven-gpx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gpx.cc' object='aven-gpx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-gpx.obj `if test -f 'gpx.cc'; then $(CYGPATH_W) 'gpx.cc'; else $(CYGPATH_W) '$(srcdir)/gpx.cc'; fi` aven-json.o: json.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-json.o -MD -MP -MF $(DEPDIR)/aven-json.Tpo -c -o aven-json.o `test -f 'json.cc' || echo '$(srcdir)/'`json.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-json.Tpo $(DEPDIR)/aven-json.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='json.cc' object='aven-json.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-json.o `test -f 'json.cc' || echo '$(srcdir)/'`json.cc aven-json.obj: json.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-json.obj -MD -MP -MF $(DEPDIR)/aven-json.Tpo -c -o aven-json.obj `if test -f 'json.cc'; then $(CYGPATH_W) 'json.cc'; else $(CYGPATH_W) '$(srcdir)/json.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-json.Tpo $(DEPDIR)/aven-json.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='json.cc' object='aven-json.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-json.obj `if test -f 'json.cc'; then $(CYGPATH_W) 'json.cc'; else $(CYGPATH_W) '$(srcdir)/json.cc'; fi` aven-kml.o: kml.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-kml.o -MD -MP -MF $(DEPDIR)/aven-kml.Tpo -c -o aven-kml.o `test -f 'kml.cc' || echo '$(srcdir)/'`kml.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-kml.Tpo $(DEPDIR)/aven-kml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kml.cc' object='aven-kml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-kml.o `test -f 'kml.cc' || echo '$(srcdir)/'`kml.cc aven-kml.obj: kml.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-kml.obj -MD -MP -MF $(DEPDIR)/aven-kml.Tpo -c -o aven-kml.obj `if test -f 'kml.cc'; then $(CYGPATH_W) 'kml.cc'; else $(CYGPATH_W) '$(srcdir)/kml.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-kml.Tpo $(DEPDIR)/aven-kml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kml.cc' object='aven-kml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-kml.obj `if test -f 'kml.cc'; then $(CYGPATH_W) 'kml.cc'; else $(CYGPATH_W) '$(srcdir)/kml.cc'; fi` aven-log.o: log.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-log.o -MD -MP -MF $(DEPDIR)/aven-log.Tpo -c -o aven-log.o `test -f 'log.cc' || echo '$(srcdir)/'`log.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-log.Tpo $(DEPDIR)/aven-log.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log.cc' object='aven-log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-log.o `test -f 'log.cc' || echo '$(srcdir)/'`log.cc aven-log.obj: log.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-log.obj -MD -MP -MF $(DEPDIR)/aven-log.Tpo -c -o aven-log.obj `if test -f 'log.cc'; then $(CYGPATH_W) 'log.cc'; else $(CYGPATH_W) '$(srcdir)/log.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-log.Tpo $(DEPDIR)/aven-log.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log.cc' object='aven-log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-log.obj `if test -f 'log.cc'; then $(CYGPATH_W) 'log.cc'; else $(CYGPATH_W) '$(srcdir)/log.cc'; fi` aven-moviemaker.o: moviemaker.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-moviemaker.o -MD -MP -MF $(DEPDIR)/aven-moviemaker.Tpo -c -o aven-moviemaker.o `test -f 'moviemaker.cc' || echo '$(srcdir)/'`moviemaker.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-moviemaker.Tpo $(DEPDIR)/aven-moviemaker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moviemaker.cc' object='aven-moviemaker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-moviemaker.o `test -f 'moviemaker.cc' || echo '$(srcdir)/'`moviemaker.cc aven-moviemaker.obj: moviemaker.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-moviemaker.obj -MD -MP -MF $(DEPDIR)/aven-moviemaker.Tpo -c -o aven-moviemaker.obj `if test -f 'moviemaker.cc'; then $(CYGPATH_W) 'moviemaker.cc'; else $(CYGPATH_W) '$(srcdir)/moviemaker.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-moviemaker.Tpo $(DEPDIR)/aven-moviemaker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moviemaker.cc' object='aven-moviemaker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-moviemaker.obj `if test -f 'moviemaker.cc'; then $(CYGPATH_W) 'moviemaker.cc'; else $(CYGPATH_W) '$(srcdir)/moviemaker.cc'; fi` aven-hpgl.o: hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-hpgl.o -MD -MP -MF $(DEPDIR)/aven-hpgl.Tpo -c -o aven-hpgl.o `test -f 'hpgl.cc' || echo '$(srcdir)/'`hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-hpgl.Tpo $(DEPDIR)/aven-hpgl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hpgl.cc' object='aven-hpgl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-hpgl.o `test -f 'hpgl.cc' || echo '$(srcdir)/'`hpgl.cc aven-hpgl.obj: hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-hpgl.obj -MD -MP -MF $(DEPDIR)/aven-hpgl.Tpo -c -o aven-hpgl.obj `if test -f 'hpgl.cc'; then $(CYGPATH_W) 'hpgl.cc'; else $(CYGPATH_W) '$(srcdir)/hpgl.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-hpgl.Tpo $(DEPDIR)/aven-hpgl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hpgl.cc' object='aven-hpgl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-hpgl.obj `if test -f 'hpgl.cc'; then $(CYGPATH_W) 'hpgl.cc'; else $(CYGPATH_W) '$(srcdir)/hpgl.cc'; fi` aven-cavernlog.o: cavernlog.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-cavernlog.o -MD -MP -MF $(DEPDIR)/aven-cavernlog.Tpo -c -o aven-cavernlog.o `test -f 'cavernlog.cc' || echo '$(srcdir)/'`cavernlog.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-cavernlog.Tpo $(DEPDIR)/aven-cavernlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cavernlog.cc' object='aven-cavernlog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-cavernlog.o `test -f 'cavernlog.cc' || echo '$(srcdir)/'`cavernlog.cc aven-cavernlog.obj: cavernlog.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-cavernlog.obj -MD -MP -MF $(DEPDIR)/aven-cavernlog.Tpo -c -o aven-cavernlog.obj `if test -f 'cavernlog.cc'; then $(CYGPATH_W) 'cavernlog.cc'; else $(CYGPATH_W) '$(srcdir)/cavernlog.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-cavernlog.Tpo $(DEPDIR)/aven-cavernlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cavernlog.cc' object='aven-cavernlog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-cavernlog.obj `if test -f 'cavernlog.cc'; then $(CYGPATH_W) 'cavernlog.cc'; else $(CYGPATH_W) '$(srcdir)/cavernlog.cc'; fi` aven-avenprcore.o: avenprcore.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-avenprcore.o -MD -MP -MF $(DEPDIR)/aven-avenprcore.Tpo -c -o aven-avenprcore.o `test -f 'avenprcore.cc' || echo '$(srcdir)/'`avenprcore.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-avenprcore.Tpo $(DEPDIR)/aven-avenprcore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='avenprcore.cc' object='aven-avenprcore.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-avenprcore.o `test -f 'avenprcore.cc' || echo '$(srcdir)/'`avenprcore.cc aven-avenprcore.obj: avenprcore.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-avenprcore.obj -MD -MP -MF $(DEPDIR)/aven-avenprcore.Tpo -c -o aven-avenprcore.obj `if test -f 'avenprcore.cc'; then $(CYGPATH_W) 'avenprcore.cc'; else $(CYGPATH_W) '$(srcdir)/avenprcore.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-avenprcore.Tpo $(DEPDIR)/aven-avenprcore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='avenprcore.cc' object='aven-avenprcore.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-avenprcore.obj `if test -f 'avenprcore.cc'; then $(CYGPATH_W) 'avenprcore.cc'; else $(CYGPATH_W) '$(srcdir)/avenprcore.cc'; fi` aven-printing.o: printing.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-printing.o -MD -MP -MF $(DEPDIR)/aven-printing.Tpo -c -o aven-printing.o `test -f 'printing.cc' || echo '$(srcdir)/'`printing.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-printing.Tpo $(DEPDIR)/aven-printing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='printing.cc' object='aven-printing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-printing.o `test -f 'printing.cc' || echo '$(srcdir)/'`printing.cc aven-printing.obj: printing.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-printing.obj -MD -MP -MF $(DEPDIR)/aven-printing.Tpo -c -o aven-printing.obj `if test -f 'printing.cc'; then $(CYGPATH_W) 'printing.cc'; else $(CYGPATH_W) '$(srcdir)/printing.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-printing.Tpo $(DEPDIR)/aven-printing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='printing.cc' object='aven-printing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-printing.obj `if test -f 'printing.cc'; then $(CYGPATH_W) 'printing.cc'; else $(CYGPATH_W) '$(srcdir)/printing.cc'; fi` aven-buttontaghandler.o: buttontaghandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-buttontaghandler.o -MD -MP -MF $(DEPDIR)/aven-buttontaghandler.Tpo -c -o aven-buttontaghandler.o `test -f 'buttontaghandler.cc' || echo '$(srcdir)/'`buttontaghandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-buttontaghandler.Tpo $(DEPDIR)/aven-buttontaghandler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buttontaghandler.cc' object='aven-buttontaghandler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-buttontaghandler.o `test -f 'buttontaghandler.cc' || echo '$(srcdir)/'`buttontaghandler.cc aven-buttontaghandler.obj: buttontaghandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-buttontaghandler.obj -MD -MP -MF $(DEPDIR)/aven-buttontaghandler.Tpo -c -o aven-buttontaghandler.obj `if test -f 'buttontaghandler.cc'; then $(CYGPATH_W) 'buttontaghandler.cc'; else $(CYGPATH_W) '$(srcdir)/buttontaghandler.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-buttontaghandler.Tpo $(DEPDIR)/aven-buttontaghandler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buttontaghandler.cc' object='aven-buttontaghandler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-buttontaghandler.obj `if test -f 'buttontaghandler.cc'; then $(CYGPATH_W) 'buttontaghandler.cc'; else $(CYGPATH_W) '$(srcdir)/buttontaghandler.cc'; fi` aven-pos.o: pos.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-pos.o -MD -MP -MF $(DEPDIR)/aven-pos.Tpo -c -o aven-pos.o `test -f 'pos.cc' || echo '$(srcdir)/'`pos.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-pos.Tpo $(DEPDIR)/aven-pos.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pos.cc' object='aven-pos.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-pos.o `test -f 'pos.cc' || echo '$(srcdir)/'`pos.cc aven-pos.obj: pos.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -MT aven-pos.obj -MD -MP -MF $(DEPDIR)/aven-pos.Tpo -c -o aven-pos.obj `if test -f 'pos.cc'; then $(CYGPATH_W) 'pos.cc'; else $(CYGPATH_W) '$(srcdir)/pos.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/aven-pos.Tpo $(DEPDIR)/aven-pos.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pos.cc' object='aven-pos.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(aven_CXXFLAGS) $(CXXFLAGS) -c -o aven-pos.obj `if test -f 'pos.cc'; then $(CYGPATH_W) 'pos.cc'; else $(CYGPATH_W) '$(srcdir)/pos.cc'; fi` survexport-survexport.o: survexport.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-survexport.o -MD -MP -MF $(DEPDIR)/survexport-survexport.Tpo -c -o survexport-survexport.o `test -f 'survexport.cc' || echo '$(srcdir)/'`survexport.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-survexport.Tpo $(DEPDIR)/survexport-survexport.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='survexport.cc' object='survexport-survexport.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-survexport.o `test -f 'survexport.cc' || echo '$(srcdir)/'`survexport.cc survexport-survexport.obj: survexport.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-survexport.obj -MD -MP -MF $(DEPDIR)/survexport-survexport.Tpo -c -o survexport-survexport.obj `if test -f 'survexport.cc'; then $(CYGPATH_W) 'survexport.cc'; else $(CYGPATH_W) '$(srcdir)/survexport.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-survexport.Tpo $(DEPDIR)/survexport-survexport.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='survexport.cc' object='survexport-survexport.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-survexport.obj `if test -f 'survexport.cc'; then $(CYGPATH_W) 'survexport.cc'; else $(CYGPATH_W) '$(srcdir)/survexport.cc'; fi` survexport-model.o: model.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-model.o -MD -MP -MF $(DEPDIR)/survexport-model.Tpo -c -o survexport-model.o `test -f 'model.cc' || echo '$(srcdir)/'`model.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-model.Tpo $(DEPDIR)/survexport-model.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='model.cc' object='survexport-model.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-model.o `test -f 'model.cc' || echo '$(srcdir)/'`model.cc survexport-model.obj: model.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-model.obj -MD -MP -MF $(DEPDIR)/survexport-model.Tpo -c -o survexport-model.obj `if test -f 'model.cc'; then $(CYGPATH_W) 'model.cc'; else $(CYGPATH_W) '$(srcdir)/model.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-model.Tpo $(DEPDIR)/survexport-model.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='model.cc' object='survexport-model.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-model.obj `if test -f 'model.cc'; then $(CYGPATH_W) 'model.cc'; else $(CYGPATH_W) '$(srcdir)/model.cc'; fi` survexport-export.o: export.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-export.o -MD -MP -MF $(DEPDIR)/survexport-export.Tpo -c -o survexport-export.o `test -f 'export.cc' || echo '$(srcdir)/'`export.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-export.Tpo $(DEPDIR)/survexport-export.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export.cc' object='survexport-export.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-export.o `test -f 'export.cc' || echo '$(srcdir)/'`export.cc survexport-export.obj: export.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-export.obj -MD -MP -MF $(DEPDIR)/survexport-export.Tpo -c -o survexport-export.obj `if test -f 'export.cc'; then $(CYGPATH_W) 'export.cc'; else $(CYGPATH_W) '$(srcdir)/export.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-export.Tpo $(DEPDIR)/survexport-export.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export.cc' object='survexport-export.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-export.obj `if test -f 'export.cc'; then $(CYGPATH_W) 'export.cc'; else $(CYGPATH_W) '$(srcdir)/export.cc'; fi` survexport-export3d.o: export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-export3d.o -MD -MP -MF $(DEPDIR)/survexport-export3d.Tpo -c -o survexport-export3d.o `test -f 'export3d.cc' || echo '$(srcdir)/'`export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-export3d.Tpo $(DEPDIR)/survexport-export3d.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export3d.cc' object='survexport-export3d.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-export3d.o `test -f 'export3d.cc' || echo '$(srcdir)/'`export3d.cc survexport-export3d.obj: export3d.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-export3d.obj -MD -MP -MF $(DEPDIR)/survexport-export3d.Tpo -c -o survexport-export3d.obj `if test -f 'export3d.cc'; then $(CYGPATH_W) 'export3d.cc'; else $(CYGPATH_W) '$(srcdir)/export3d.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-export3d.Tpo $(DEPDIR)/survexport-export3d.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='export3d.cc' object='survexport-export3d.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-export3d.obj `if test -f 'export3d.cc'; then $(CYGPATH_W) 'export3d.cc'; else $(CYGPATH_W) '$(srcdir)/export3d.cc'; fi` survexport-namecompare.o: namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-namecompare.o -MD -MP -MF $(DEPDIR)/survexport-namecompare.Tpo -c -o survexport-namecompare.o `test -f 'namecompare.cc' || echo '$(srcdir)/'`namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-namecompare.Tpo $(DEPDIR)/survexport-namecompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='namecompare.cc' object='survexport-namecompare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-namecompare.o `test -f 'namecompare.cc' || echo '$(srcdir)/'`namecompare.cc survexport-namecompare.obj: namecompare.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-namecompare.obj -MD -MP -MF $(DEPDIR)/survexport-namecompare.Tpo -c -o survexport-namecompare.obj `if test -f 'namecompare.cc'; then $(CYGPATH_W) 'namecompare.cc'; else $(CYGPATH_W) '$(srcdir)/namecompare.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-namecompare.Tpo $(DEPDIR)/survexport-namecompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='namecompare.cc' object='survexport-namecompare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-namecompare.obj `if test -f 'namecompare.cc'; then $(CYGPATH_W) 'namecompare.cc'; else $(CYGPATH_W) '$(srcdir)/namecompare.cc'; fi` survexport-gpx.o: gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-gpx.o -MD -MP -MF $(DEPDIR)/survexport-gpx.Tpo -c -o survexport-gpx.o `test -f 'gpx.cc' || echo '$(srcdir)/'`gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-gpx.Tpo $(DEPDIR)/survexport-gpx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gpx.cc' object='survexport-gpx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-gpx.o `test -f 'gpx.cc' || echo '$(srcdir)/'`gpx.cc survexport-gpx.obj: gpx.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-gpx.obj -MD -MP -MF $(DEPDIR)/survexport-gpx.Tpo -c -o survexport-gpx.obj `if test -f 'gpx.cc'; then $(CYGPATH_W) 'gpx.cc'; else $(CYGPATH_W) '$(srcdir)/gpx.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-gpx.Tpo $(DEPDIR)/survexport-gpx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gpx.cc' object='survexport-gpx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-gpx.obj `if test -f 'gpx.cc'; then $(CYGPATH_W) 'gpx.cc'; else $(CYGPATH_W) '$(srcdir)/gpx.cc'; fi` survexport-hpgl.o: hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-hpgl.o -MD -MP -MF $(DEPDIR)/survexport-hpgl.Tpo -c -o survexport-hpgl.o `test -f 'hpgl.cc' || echo '$(srcdir)/'`hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-hpgl.Tpo $(DEPDIR)/survexport-hpgl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hpgl.cc' object='survexport-hpgl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-hpgl.o `test -f 'hpgl.cc' || echo '$(srcdir)/'`hpgl.cc survexport-hpgl.obj: hpgl.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-hpgl.obj -MD -MP -MF $(DEPDIR)/survexport-hpgl.Tpo -c -o survexport-hpgl.obj `if test -f 'hpgl.cc'; then $(CYGPATH_W) 'hpgl.cc'; else $(CYGPATH_W) '$(srcdir)/hpgl.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-hpgl.Tpo $(DEPDIR)/survexport-hpgl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hpgl.cc' object='survexport-hpgl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-hpgl.obj `if test -f 'hpgl.cc'; then $(CYGPATH_W) 'hpgl.cc'; else $(CYGPATH_W) '$(srcdir)/hpgl.cc'; fi` survexport-json.o: json.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-json.o -MD -MP -MF $(DEPDIR)/survexport-json.Tpo -c -o survexport-json.o `test -f 'json.cc' || echo '$(srcdir)/'`json.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-json.Tpo $(DEPDIR)/survexport-json.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='json.cc' object='survexport-json.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-json.o `test -f 'json.cc' || echo '$(srcdir)/'`json.cc survexport-json.obj: json.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-json.obj -MD -MP -MF $(DEPDIR)/survexport-json.Tpo -c -o survexport-json.obj `if test -f 'json.cc'; then $(CYGPATH_W) 'json.cc'; else $(CYGPATH_W) '$(srcdir)/json.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-json.Tpo $(DEPDIR)/survexport-json.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='json.cc' object='survexport-json.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-json.obj `if test -f 'json.cc'; then $(CYGPATH_W) 'json.cc'; else $(CYGPATH_W) '$(srcdir)/json.cc'; fi` survexport-kml.o: kml.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-kml.o -MD -MP -MF $(DEPDIR)/survexport-kml.Tpo -c -o survexport-kml.o `test -f 'kml.cc' || echo '$(srcdir)/'`kml.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-kml.Tpo $(DEPDIR)/survexport-kml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kml.cc' object='survexport-kml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-kml.o `test -f 'kml.cc' || echo '$(srcdir)/'`kml.cc survexport-kml.obj: kml.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-kml.obj -MD -MP -MF $(DEPDIR)/survexport-kml.Tpo -c -o survexport-kml.obj `if test -f 'kml.cc'; then $(CYGPATH_W) 'kml.cc'; else $(CYGPATH_W) '$(srcdir)/kml.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-kml.Tpo $(DEPDIR)/survexport-kml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kml.cc' object='survexport-kml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-kml.obj `if test -f 'kml.cc'; then $(CYGPATH_W) 'kml.cc'; else $(CYGPATH_W) '$(srcdir)/kml.cc'; fi` survexport-pos.o: pos.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-pos.o -MD -MP -MF $(DEPDIR)/survexport-pos.Tpo -c -o survexport-pos.o `test -f 'pos.cc' || echo '$(srcdir)/'`pos.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-pos.Tpo $(DEPDIR)/survexport-pos.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pos.cc' object='survexport-pos.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-pos.o `test -f 'pos.cc' || echo '$(srcdir)/'`pos.cc survexport-pos.obj: pos.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-pos.obj -MD -MP -MF $(DEPDIR)/survexport-pos.Tpo -c -o survexport-pos.obj `if test -f 'pos.cc'; then $(CYGPATH_W) 'pos.cc'; else $(CYGPATH_W) '$(srcdir)/pos.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-pos.Tpo $(DEPDIR)/survexport-pos.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pos.cc' object='survexport-pos.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-pos.obj `if test -f 'pos.cc'; then $(CYGPATH_W) 'pos.cc'; else $(CYGPATH_W) '$(srcdir)/pos.cc'; fi` survexport-vector3.o: vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-vector3.o -MD -MP -MF $(DEPDIR)/survexport-vector3.Tpo -c -o survexport-vector3.o `test -f 'vector3.cc' || echo '$(srcdir)/'`vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-vector3.Tpo $(DEPDIR)/survexport-vector3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='vector3.cc' object='survexport-vector3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-vector3.o `test -f 'vector3.cc' || echo '$(srcdir)/'`vector3.cc survexport-vector3.obj: vector3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -MT survexport-vector3.obj -MD -MP -MF $(DEPDIR)/survexport-vector3.Tpo -c -o survexport-vector3.obj `if test -f 'vector3.cc'; then $(CYGPATH_W) 'vector3.cc'; else $(CYGPATH_W) '$(srcdir)/vector3.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/survexport-vector3.Tpo $(DEPDIR)/survexport-vector3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='vector3.cc' object='survexport-vector3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(survexport_CXXFLAGS) $(CXXFLAGS) -c -o survexport-vector3.obj `if test -f 'vector3.cc'; then $(CYGPATH_W) 'vector3.cc'; else $(CYGPATH_W) '$(srcdir)/vector3.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ mostlyclean-am distclean: distclean-am -rm -f $(DEPDIR)/strcasecmp.Po -rm -f $(DEPDIR)/strftime.Po -rm -f ./$(DEPDIR)/aven-aboutdlg.Po -rm -f ./$(DEPDIR)/aven-aven.Po -rm -f ./$(DEPDIR)/aven-avenprcore.Po -rm -f ./$(DEPDIR)/aven-aventreectrl.Po -rm -f ./$(DEPDIR)/aven-buttontaghandler.Po -rm -f ./$(DEPDIR)/aven-cavernlog.Po -rm -f ./$(DEPDIR)/aven-cmdline.Po -rm -f ./$(DEPDIR)/aven-date.Po -rm -f ./$(DEPDIR)/aven-export.Po -rm -f ./$(DEPDIR)/aven-export3d.Po -rm -f ./$(DEPDIR)/aven-filename.Po -rm -f ./$(DEPDIR)/aven-getopt1.Po -rm -f ./$(DEPDIR)/aven-gfxcore.Po -rm -f ./$(DEPDIR)/aven-gla-gl.Po -rm -f ./$(DEPDIR)/aven-glbitmapfont.Po -rm -f ./$(DEPDIR)/aven-gpx.Po -rm -f ./$(DEPDIR)/aven-guicontrol.Po -rm -f ./$(DEPDIR)/aven-hash.Po -rm -f ./$(DEPDIR)/aven-hpgl.Po -rm -f ./$(DEPDIR)/aven-img_hosted.Po -rm -f ./$(DEPDIR)/aven-json.Po -rm -f ./$(DEPDIR)/aven-kml.Po -rm -f ./$(DEPDIR)/aven-log.Po -rm -f ./$(DEPDIR)/aven-mainfrm.Po -rm -f ./$(DEPDIR)/aven-message.Po -rm -f ./$(DEPDIR)/aven-model.Po -rm -f ./$(DEPDIR)/aven-moviemaker.Po -rm -f ./$(DEPDIR)/aven-namecompare.Po -rm -f ./$(DEPDIR)/aven-osdepend.Po -rm -f ./$(DEPDIR)/aven-pos.Po -rm -f ./$(DEPDIR)/aven-printing.Po -rm -f ./$(DEPDIR)/aven-str.Po -rm -f ./$(DEPDIR)/aven-useful.Po -rm -f ./$(DEPDIR)/aven-vector3.Po -rm -f ./$(DEPDIR)/aven-z_getopt.Po -rm -f ./$(DEPDIR)/cavern.Po -rm -f ./$(DEPDIR)/cmdline.Po -rm -f ./$(DEPDIR)/commands.Po -rm -f ./$(DEPDIR)/datain.Po -rm -f ./$(DEPDIR)/date.Po -rm -f ./$(DEPDIR)/diffpos.Po -rm -f ./$(DEPDIR)/dump3d.Po -rm -f ./$(DEPDIR)/extend.Po -rm -f ./$(DEPDIR)/filename.Po -rm -f ./$(DEPDIR)/getopt1.Po -rm -f ./$(DEPDIR)/hash.Po -rm -f ./$(DEPDIR)/img.Po -rm -f ./$(DEPDIR)/img_hosted.Po -rm -f ./$(DEPDIR)/imgtest.Po -rm -f ./$(DEPDIR)/listpos.Po -rm -f ./$(DEPDIR)/matrix.Po -rm -f ./$(DEPDIR)/message.Po -rm -f ./$(DEPDIR)/namecmp.Po -rm -f ./$(DEPDIR)/netartic.Po -rm -f ./$(DEPDIR)/netbits.Po -rm -f ./$(DEPDIR)/netskel.Po -rm -f ./$(DEPDIR)/network.Po -rm -f ./$(DEPDIR)/osdepend.Po -rm -f ./$(DEPDIR)/readval.Po -rm -f ./$(DEPDIR)/sorterr.Po -rm -f ./$(DEPDIR)/str.Po -rm -f ./$(DEPDIR)/survexport-export.Po -rm -f ./$(DEPDIR)/survexport-export3d.Po -rm -f ./$(DEPDIR)/survexport-gpx.Po -rm -f ./$(DEPDIR)/survexport-hpgl.Po -rm -f ./$(DEPDIR)/survexport-json.Po -rm -f ./$(DEPDIR)/survexport-kml.Po -rm -f ./$(DEPDIR)/survexport-model.Po -rm -f ./$(DEPDIR)/survexport-namecompare.Po -rm -f ./$(DEPDIR)/survexport-pos.Po -rm -f ./$(DEPDIR)/survexport-survexport.Po -rm -f ./$(DEPDIR)/survexport-vector3.Po -rm -f ./$(DEPDIR)/thgeomag.Po -rm -f ./$(DEPDIR)/useful.Po -rm -f ./$(DEPDIR)/validate.Po -rm -f ./$(DEPDIR)/z_getopt.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(DEPDIR)/strcasecmp.Po -rm -f $(DEPDIR)/strftime.Po -rm -f ./$(DEPDIR)/aven-aboutdlg.Po -rm -f ./$(DEPDIR)/aven-aven.Po -rm -f ./$(DEPDIR)/aven-avenprcore.Po -rm -f ./$(DEPDIR)/aven-aventreectrl.Po -rm -f ./$(DEPDIR)/aven-buttontaghandler.Po -rm -f ./$(DEPDIR)/aven-cavernlog.Po -rm -f ./$(DEPDIR)/aven-cmdline.Po -rm -f ./$(DEPDIR)/aven-date.Po -rm -f ./$(DEPDIR)/aven-export.Po -rm -f ./$(DEPDIR)/aven-export3d.Po -rm -f ./$(DEPDIR)/aven-filename.Po -rm -f ./$(DEPDIR)/aven-getopt1.Po -rm -f ./$(DEPDIR)/aven-gfxcore.Po -rm -f ./$(DEPDIR)/aven-gla-gl.Po -rm -f ./$(DEPDIR)/aven-glbitmapfont.Po -rm -f ./$(DEPDIR)/aven-gpx.Po -rm -f ./$(DEPDIR)/aven-guicontrol.Po -rm -f ./$(DEPDIR)/aven-hash.Po -rm -f ./$(DEPDIR)/aven-hpgl.Po -rm -f ./$(DEPDIR)/aven-img_hosted.Po -rm -f ./$(DEPDIR)/aven-json.Po -rm -f ./$(DEPDIR)/aven-kml.Po -rm -f ./$(DEPDIR)/aven-log.Po -rm -f ./$(DEPDIR)/aven-mainfrm.Po -rm -f ./$(DEPDIR)/aven-message.Po -rm -f ./$(DEPDIR)/aven-model.Po -rm -f ./$(DEPDIR)/aven-moviemaker.Po -rm -f ./$(DEPDIR)/aven-namecompare.Po -rm -f ./$(DEPDIR)/aven-osdepend.Po -rm -f ./$(DEPDIR)/aven-pos.Po -rm -f ./$(DEPDIR)/aven-printing.Po -rm -f ./$(DEPDIR)/aven-str.Po -rm -f ./$(DEPDIR)/aven-useful.Po -rm -f ./$(DEPDIR)/aven-vector3.Po -rm -f ./$(DEPDIR)/aven-z_getopt.Po -rm -f ./$(DEPDIR)/cavern.Po -rm -f ./$(DEPDIR)/cmdline.Po -rm -f ./$(DEPDIR)/commands.Po -rm -f ./$(DEPDIR)/datain.Po -rm -f ./$(DEPDIR)/date.Po -rm -f ./$(DEPDIR)/diffpos.Po -rm -f ./$(DEPDIR)/dump3d.Po -rm -f ./$(DEPDIR)/extend.Po -rm -f ./$(DEPDIR)/filename.Po -rm -f ./$(DEPDIR)/getopt1.Po -rm -f ./$(DEPDIR)/hash.Po -rm -f ./$(DEPDIR)/img.Po -rm -f ./$(DEPDIR)/img_hosted.Po -rm -f ./$(DEPDIR)/imgtest.Po -rm -f ./$(DEPDIR)/listpos.Po -rm -f ./$(DEPDIR)/matrix.Po -rm -f ./$(DEPDIR)/message.Po -rm -f ./$(DEPDIR)/namecmp.Po -rm -f ./$(DEPDIR)/netartic.Po -rm -f ./$(DEPDIR)/netbits.Po -rm -f ./$(DEPDIR)/netskel.Po -rm -f ./$(DEPDIR)/network.Po -rm -f ./$(DEPDIR)/osdepend.Po -rm -f ./$(DEPDIR)/readval.Po -rm -f ./$(DEPDIR)/sorterr.Po -rm -f ./$(DEPDIR)/str.Po -rm -f ./$(DEPDIR)/survexport-export.Po -rm -f ./$(DEPDIR)/survexport-export3d.Po -rm -f ./$(DEPDIR)/survexport-gpx.Po -rm -f ./$(DEPDIR)/survexport-hpgl.Po -rm -f ./$(DEPDIR)/survexport-json.Po -rm -f ./$(DEPDIR)/survexport-kml.Po -rm -f ./$(DEPDIR)/survexport-model.Po -rm -f ./$(DEPDIR)/survexport-namecompare.Po -rm -f ./$(DEPDIR)/survexport-pos.Po -rm -f ./$(DEPDIR)/survexport-survexport.Po -rm -f ./$(DEPDIR)/survexport-vector3.Po -rm -f ./$(DEPDIR)/thgeomag.Po -rm -f ./$(DEPDIR)/useful.Po -rm -f ./$(DEPDIR)/validate.Po -rm -f ./$(DEPDIR)/z_getopt.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: all check check-am install install-am install-exec \ install-exec-am install-strip uninstall-am .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-hook .PRECIOUS: Makefile install-exec-hook: ln $(DESTDIR)$(bindir)/survexport$(EXEEXT) \ $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) || \ cp -p $(DESTDIR)$(bindir)/survexport$(EXEEXT) \ $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) uninstall-hook: rm -f $(DESTDIR)$(bindir)/3dtopos$(EXEEXT) @WIN32_TRUE@avenrc.o: $(srcdir)/aven.rc ../lib/icons/aven.ico @WIN32_TRUE@ pwd=`pwd` && cd $(srcdir) && `$(WX_CONFIG) --rescomp` --include-dir "$$pwd/../lib/icons" -o "$$pwd/avenrc.o" aven.rc ../lib/survex.pox: $(all_sources) ../lib/extract-msgs.pl cd $(srcdir)/../lib && ./extract-msgs.pl `echo $(all_sources)|perl -ne 'print "../src/$$_\n" for sort split'|uniq` > survex.pox z_getopt.c: getopt.c gettexttomsg.pl ./gettexttomsg.pl `test -f getopt.c || echo '$(srcdir)/'`getopt.c > z_getopt.c~ && mv z_getopt.c~ z_getopt.c avenpal.h: $(srcdir)/gdtconvert $(srcdir)/gradient.pov $(srcdir)/gdtconvert < $(srcdir)/gradient.pov > tmp-avenpal.h && mv tmp-avenpal.h avenpal.h img2aven.h: $(srcdir)/gen_img2aven $(srcdir)/gen_img2aven > tmp-img2aven.h && mv tmp-img2aven.h img2aven.h thgeomagdata.h: $(srcdir)/igrf2c.py $(srcdir)/igrf13coeffs.txt $(PYTHON) $(srcdir)/igrf2c.py $(srcdir)/igrf13coeffs.txt mv ../thgeomagdata.h . # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: survex-1.4.4/src/network.c0000644000175000017500000005403214142042211012414 00000000000000/* network.c * Survex network reduction - find patterns and apply network reductions * Copyright (C) 1991-2002,2005 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if 0 #define DEBUG_INVALID 1 #define VALIDATE 1 #define DUMP_NETWORK 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include "validate.h" #include "debug.h" #include "cavern.h" #include "message.h" #include "netbits.h" #include "network.h" #include "out.h" /* type field isn't vital - join3 is unused except for deltastar, so * we can set its value to indicate which type this is: * join3 == NULL for noose, join3 == join1 for ||, otherwise D* */ #ifdef EXPLICIT_STACKRED_TYPE #define SET_NOOSE(SR) (SR)->type = 1 #define IS_NOOSE(SR) ((SR)->type == 1) #define SET_PARALLEL(SR) (SR)->type = 0 #define IS_PARALLEL(SR) ((SR)->type == 0) #define SET_DELTASTAR(SR) (SR)->type = 2 #define IS_DELTASTAR(SR) ((SR)->type == 2) #else #define IS_NOOSE(SR) ((SR)->join3 == NULL) #define SET_NOOSE(SR) (SR)->join3 = NULL #define IS_PARALLEL(SR) ((SR)->join3 == (SR)->join1) #define SET_PARALLEL(SR) (SR)->join3 = (SR)->join1 #define IS_DELTASTAR(SR) (!IS_NOOSE(SR) && !IS_PARALLEL(SR)) #define SET_DELTASTAR(SR) NOP #endif typedef struct StackRed { struct Link *join1, *join2, *join3; #ifdef EXPLICIT_STACKRED_TYPE int type; /* 1 => noose, 0 => parallel legs, 2 => delta-star */ #endif struct StackRed *next; } stackRed; static stackRed *ptrRed; /* Ptr to TRaverse linked list for C*-*< , -*=*- */ /* can be altered by -z on command line */ unsigned long optimize = BITA('l') | BITA('p') | BITA('d'); /* Lollipops, Parallel legs, Iterate mx, Delta* */ extern void remove_subnets(void) { node *stn, *stn2, *stn3, *stn4; int dirn, dirn2, dirn3, dirn4; stackRed *trav; linkfor *newleg, *newleg2; bool fMore = fTrue; ptrRed = NULL; out_current_action(msg(/*Simplifying network*/129)); while (fMore) { fMore = fFalse; if (optimize & BITA('l')) { #if PRINT_NETBITS printf("replacing lollipops\n"); #endif /* _ * ( ) * * stn * | * * stn2 * stn /| * 4 * * stn3 --> stn4 *-* stn3 * : : : : */ /* NB can have non-fixed 0 nodes */ FOR_EACH_STN(stn, stnlist) { if (!fixed(stn) && three_node(stn)) { dirn = -1; if (stn->leg[1]->l.to == stn) dirn++; if (stn->leg[0]->l.to == stn) dirn += 2; if (dirn < 0) continue; stn2 = stn->leg[dirn]->l.to; if (fixed(stn2)) continue; SVX_ASSERT(three_node(stn2)); dirn2 = reverse_leg_dirn(stn->leg[dirn]); dirn2 = (dirn2 + 1) % 3; stn3 = stn2->leg[dirn2]->l.to; if (stn2 == stn3) continue; /* dumb-bell - leave alone */ dirn3 = reverse_leg_dirn(stn2->leg[dirn2]); trav = osnew(stackRed); newleg2 = (linkfor*)osnew(linkrev); newleg = copy_link(stn3->leg[dirn3]); dirn2 = (dirn2 + 1) % 3; stn4 = stn2->leg[dirn2]->l.to; dirn4 = reverse_leg_dirn(stn2->leg[dirn2]); #if 0 printf("Noose found with stn...stn4 = \n"); print_prefix(stn->name); putnl(); print_prefix(stn2->name); putnl(); print_prefix(stn3->name); putnl(); print_prefix(stn4->name); putnl(); #endif addto_link(newleg, stn2->leg[dirn2]); /* remove stn and stn2 */ remove_stn_from_list(&stnlist, stn); remove_stn_from_list(&stnlist, stn2); /* stack noose and replace with a leg between stn3 and stn4 */ trav->join1 = stn3->leg[dirn3]; newleg->l.to = stn4; newleg->l.reverse = dirn4 | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; trav->join2 = stn4->leg[dirn4]; newleg2->l.to = stn3; newleg2->l.reverse = dirn3 | FLAG_REPLACEMENTLEG; stn3->leg[dirn3] = newleg; stn4->leg[dirn4] = newleg2; trav->next = ptrRed; SET_NOOSE(trav); #if PRINT_NETBITS printf("remove noose\n"); #endif ptrRed = trav; fMore = fTrue; } } } if (optimize & BITA('p')) { #if PRINT_NETBITS printf("replacing parallel legs\n"); #endif FOR_EACH_STN(stn, stnlist) { /* * : * * stn3 * | : * * stn * stn3 * ( ) -> | * * stn2 * stn4 * | : * * stn4 * : */ if (!fixed(stn) && three_node(stn)) { stn2 = stn->leg[0]->l.to; if (stn2 == stn->leg[1]->l.to) { dirn = 2; } else if (stn2 == stn->leg[2]->l.to) { dirn = 1; } else { if (stn->leg[1]->l.to != stn->leg[2]->l.to) continue; stn2 = stn->leg[1]->l.to; dirn = 0; } /* stn == stn2 => noose */ if (fixed(stn2) || stn == stn2) continue; SVX_ASSERT(three_node(stn2)); stn3 = stn->leg[dirn]->l.to; /* 3 parallel legs (=> nothing else) so leave */ if (stn3 == stn2) continue; dirn3 = reverse_leg_dirn(stn->leg[dirn]); dirn2 = (0 + 1 + 2 - reverse_leg_dirn(stn->leg[(dirn + 1) % 3]) - reverse_leg_dirn(stn->leg[(dirn + 2) % 3])); stn4 = stn2->leg[dirn2]->l.to; dirn4 = reverse_leg_dirn(stn2->leg[dirn2]); trav = osnew(stackRed); newleg = copy_link(stn->leg[(dirn + 1) % 3]); /* use newleg2 for scratch */ newleg2 = copy_link(stn->leg[(dirn + 2) % 3]); { #ifdef NO_COVARIANCES vars sum; var prod; delta temp, temp2; addss(&sum, &newleg->v, &newleg2->v); SVX_ASSERT2(!fZeros(&sum), "loop of zero variance found"); mulss(&prod, &newleg->v, &newleg2->v); mulsd(&temp, &newleg2->v, &newleg->d); mulsd(&temp2, &newleg->v, &newleg2->d); adddd(&temp, &temp, &temp2); divds(&newleg->d, &temp, &sum); sdivvs(&newleg->v, &prod, &sum); #else svar inv1, inv2, sum; delta temp, temp2; /* if leg one is an equate, we can just ignore leg two * whatever it is */ if (invert_svar(&inv1, &newleg->v)) { if (invert_svar(&inv2, &newleg2->v)) { addss(&sum, &inv1, &inv2); if (!invert_svar(&newleg->v, &sum)) { BUG("matrix singular in parallel legs replacement"); } mulsd(&temp, &inv1, &newleg->d); mulsd(&temp2, &inv2, &newleg2->d); adddd(&temp, &temp, &temp2); mulsd(&newleg->d, &newleg->v, &temp); } else { /* leg two is an equate, so just ignore leg 1 */ linkfor *tmpleg; tmpleg = newleg; newleg = newleg2; newleg2 = tmpleg; } } #endif } osfree(newleg2); newleg2 = (linkfor*)osnew(linkrev); addto_link(newleg, stn2->leg[dirn2]); addto_link(newleg, stn3->leg[dirn3]); #if 0 printf("Parallel found with stn...stn4 = \n"); (dump_node)(stn); (dump_node)(stn2); (dump_node)(stn3); (dump_node)(stn4); printf("dirns = %d %d %d %d\n", dirn, dirn2, dirn3, dirn4); #endif SVX_ASSERT2(stn3->leg[dirn3]->l.to == stn, "stn3 end of || doesn't recip"); SVX_ASSERT2(stn4->leg[dirn4]->l.to == stn2, "stn4 end of || doesn't recip"); SVX_ASSERT2(stn->leg[(dirn+1)%3]->l.to == stn2 && stn->leg[(dirn + 2) % 3]->l.to == stn2, "|| legs aren't"); /* remove stn and stn2 (already discarded triple parallel) */ /* so stn!=stn4 <=> stn2!=stn3 */ remove_stn_from_list(&stnlist, stn); remove_stn_from_list(&stnlist, stn2); /* stack parallel and replace with a leg between stn3 and stn4 */ trav->join1 = stn3->leg[dirn3]; newleg->l.to = stn4; newleg->l.reverse = dirn4 | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; trav->join2 = stn4->leg[dirn4]; newleg2->l.to = stn3; newleg2->l.reverse = dirn3 | FLAG_REPLACEMENTLEG; stn3->leg[dirn3] = newleg; stn4->leg[dirn4] = newleg2; trav->next = ptrRed; SET_PARALLEL(trav); #if PRINT_NETBITS printf("remove parallel\n"); #endif ptrRed = trav; fMore = fTrue; } } } if (optimize & BITA('d')) { node *stn5, *stn6; int dirn5, dirn6, dirn0; linkfor *legAB, *legBC, *legCA; #if PRINT_NETBITS printf("replacing deltas with stars\n"); #endif FOR_EACH_STN(stn, stnlist) { /* printf("*");*/ /* * : * * stn5 : * | * stn5 * * stn2 | * / \ -> O stnZ * stn *---* stn3 / \ * / \ stn4 * * stn6 * stn4 * * stn6 : : * : : */ if (!fixed(stn) && three_node(stn)) { for (dirn0 = 0; ; dirn0++) { if (dirn0 >= 3) goto nodeltastar; /* continue outer loop */ dirn = dirn0; stn2 = stn->leg[dirn]->l.to; if (fixed(stn2) || stn2 == stn) continue; dirn2 = reverse_leg_dirn(stn->leg[dirn]); dirn2 = (dirn2 + 1) % 3; stn3 = stn2->leg[dirn2]->l.to; if (fixed(stn3) || stn3 == stn || stn3 == stn2) goto nextdirn2; dirn3 = reverse_leg_dirn(stn2->leg[dirn2]); dirn3 = (dirn3 + 1) % 3; if (stn3->leg[dirn3]->l.to == stn) { legAB = copy_link(stn->leg[dirn]); legBC = copy_link(stn2->leg[dirn2]); legCA = copy_link(stn3->leg[dirn3]); dirn = 0 + 1 + 2 - dirn - reverse_leg_dirn(stn3->leg[dirn3]); dirn2 = (dirn2 + 1) % 3; dirn3 = (dirn3 + 1) % 3; } else if (stn3->leg[(dirn3 + 1) % 3]->l.to == stn) { legAB = copy_link(stn->leg[dirn]); legBC = copy_link(stn2->leg[dirn2]); legCA = copy_link(stn3->leg[(dirn3 + 1) % 3]); dirn = (0 + 1 + 2 - dirn - reverse_leg_dirn(stn3->leg[(dirn3 + 1) % 3])); dirn2 = (dirn2 + 1) % 3; break; } else { nextdirn2:; dirn2 = (dirn2 + 1) % 3; stn3 = stn2->leg[dirn2]->l.to; if (fixed(stn3) || stn3 == stn || stn3 == stn2) continue; dirn3 = reverse_leg_dirn(stn2->leg[dirn2]); dirn3 = (dirn3 + 1) % 3; if (stn3->leg[dirn3]->l.to == stn) { legAB = copy_link(stn->leg[dirn]); legBC = copy_link(stn2->leg[dirn2]); legCA = copy_link(stn3->leg[dirn3]); dirn = (0 + 1 + 2 - dirn - reverse_leg_dirn(stn3->leg[dirn3])); dirn2 = (dirn2 + 2) % 3; dirn3 = (dirn3 + 1) % 3; break; } else if (stn3->leg[(dirn3 + 1) % 3]->l.to == stn) { legAB = copy_link(stn->leg[dirn]); legBC = copy_link(stn2->leg[dirn2]); legCA = copy_link(stn3->leg[(dirn3 + 1) % 3]); dirn = (0 + 1 + 2 - dirn - reverse_leg_dirn(stn3->leg[(dirn3 + 1) % 3])); dirn2 = (dirn2 + 2) % 3; break; } } } SVX_ASSERT(three_node(stn2)); SVX_ASSERT(three_node(stn3)); stn4 = stn->leg[dirn]->l.to; stn5 = stn2->leg[dirn2]->l.to; stn6 = stn3->leg[dirn3]->l.to; if (stn4 == stn2 || stn4 == stn3 || stn5 == stn3) break; dirn4 = reverse_leg_dirn(stn->leg[dirn]); dirn5 = reverse_leg_dirn(stn2->leg[dirn2]); dirn6 = reverse_leg_dirn(stn3->leg[dirn3]); #if 0 printf("delta-star, stn ... stn6 are:\n"); (dump_node)(stn); (dump_node)(stn2); (dump_node)(stn3); (dump_node)(stn4); (dump_node)(stn5); (dump_node)(stn6); #endif SVX_ASSERT(stn4->leg[dirn4]->l.to == stn); SVX_ASSERT(stn5->leg[dirn5]->l.to == stn2); SVX_ASSERT(stn6->leg[dirn6]->l.to == stn3); trav = osnew(stackRed); { linkfor *legAZ, *legBZ, *legCZ; node *stnZ; prefix *nameZ; svar invAB, invBC, invCA, tmp, sum, inv; var vtmp; svar sumAZBZ, sumBZCZ, sumCZAZ; delta temp, temp2; /* FIXME: ought to handle cases when some legs are * equates, but handle as a special case maybe? */ if (!invert_svar(&invAB, &legAB->v)) break; if (!invert_svar(&invBC, &legBC->v)) break; if (!invert_svar(&invCA, &legCA->v)) break; addss(&sum, &legBC->v, &legCA->v); addss(&tmp, &sum, &legAB->v); if (!invert_svar(&inv, &tmp)) { /* impossible - loop of zero variance */ BUG("loop of zero variance found"); } legAZ = osnew(linkfor); legBZ = osnew(linkfor); legCZ = osnew(linkfor); /* AZBZ */ /* done above: addvv(&sum, &legBC->v, &legCA->v); */ mulss(&vtmp, &sum, &inv); smulvs(&sumAZBZ, &vtmp, &legAB->v); adddd(&temp, &legBC->d, &legCA->d); divds(&temp2, &temp, &sum); mulsd(&temp, &invAB, &legAB->d); subdd(&temp, &temp2, &temp); mulsd(&legBZ->d, &sumAZBZ, &temp); /* leg vectors after transform are determined up to * a constant addition, so arbitrarily fix AZ = 0 */ legAZ->d[2] = legAZ->d[1] = legAZ->d[0] = 0; /* BZCZ */ addss(&sum, &legCA->v, &legAB->v); mulss(&vtmp, &sum, &inv); smulvs(&sumBZCZ, &vtmp, &legBC->v); /* CZAZ */ addss(&sum, &legAB->v, &legBC->v); mulss(&vtmp, &sum, &inv); smulvs(&sumCZAZ, &vtmp, &legCA->v); adddd(&temp, &legAB->d, &legBC->d); divds(&temp2, &temp, &sum); mulsd(&temp, &invCA, &legCA->d); /* NB: swapped arguments to negate answer for legCZ->d */ subdd(&temp, &temp, &temp2); mulsd(&legCZ->d, &sumCZAZ, &temp); osfree(legAB); osfree(legBC); osfree(legCA); /* Now add two, subtract third, and scale by 0.5 */ addss(&sum, &sumAZBZ, &sumCZAZ); subss(&sum, &sum, &sumBZCZ); mulsc(&legAZ->v, &sum, 0.5); addss(&sum, &sumBZCZ, &sumAZBZ); subss(&sum, &sum, &sumCZAZ); mulsc(&legBZ->v, &sum, 0.5); addss(&sum, &sumCZAZ, &sumBZCZ); subss(&sum, &sum, &sumAZBZ); mulsc(&legCZ->v, &sum, 0.5); nameZ = osnew(prefix); nameZ->pos = osnew(pos); nameZ->ident = NULL; nameZ->shape = 3; stnZ = osnew(node); stnZ->name = nameZ; nameZ->stn = stnZ; nameZ->up = NULL; nameZ->min_export = nameZ->max_export = 0; unfix(stnZ); add_stn_to_list(&stnlist, stnZ); legAZ->l.to = stnZ; legAZ->l.reverse = 0 | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; legBZ->l.to = stnZ; legBZ->l.reverse = 1 | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; legCZ->l.to = stnZ; legCZ->l.reverse = 2 | FLAG_DATAHERE | FLAG_REPLACEMENTLEG; stnZ->leg[0] = (linkfor*)osnew(linkrev); stnZ->leg[1] = (linkfor*)osnew(linkrev); stnZ->leg[2] = (linkfor*)osnew(linkrev); stnZ->leg[0]->l.to = stn4; stnZ->leg[0]->l.reverse = dirn4; stnZ->leg[1]->l.to = stn5; stnZ->leg[1]->l.reverse = dirn5; stnZ->leg[2]->l.to = stn6; stnZ->leg[2]->l.reverse = dirn6; addto_link(legAZ, stn4->leg[dirn4]); addto_link(legBZ, stn5->leg[dirn5]); addto_link(legCZ, stn6->leg[dirn6]); /* stack stuff */ trav->join1 = stn4->leg[dirn4]; trav->join2 = stn5->leg[dirn5]; trav->join3 = stn6->leg[dirn6]; trav->next = ptrRed; SET_DELTASTAR(trav); #if PRINT_NETBITS printf("remove delta*\n"); #endif ptrRed = trav; fMore = fTrue; remove_stn_from_list(&stnlist, stn); remove_stn_from_list(&stnlist, stn2); remove_stn_from_list(&stnlist, stn3); stn4->leg[dirn4] = legAZ; stn5->leg[dirn5] = legBZ; stn6->leg[dirn6] = legCZ; } } nodeltastar:; } } } } extern void replace_subnets(void) { stackRed *ptrOld; node *stn2, *stn3, *stn4; int dirn2, dirn3, dirn4; /* help to catch bad accesses */ stn2 = stn3 = stn4 = NULL; dirn2 = dirn3 = dirn4 = 0; out_current_action(msg(/*Calculating network*/130)); while (ptrRed != NULL) { /* printf("replace_subnets() type %d\n", ptrRed->type);*/ #if PRINT_NETBITS printf("replace_subnets\n"); if (IS_NOOSE(ptrRed)) printf("isnoose\n"); if (IS_PARALLEL(ptrRed)) printf("isparallel\n"); if (IS_DELTASTAR(ptrRed)) printf("isdelta*\n"); #endif if (!IS_DELTASTAR(ptrRed)) { linkfor *leg; leg = ptrRed->join1; leg = reverse_leg(leg); stn3 = leg->l.to; dirn3 = reverse_leg_dirn(leg); leg = ptrRed->join2; leg = reverse_leg(leg); stn4 = leg->l.to; dirn4 = reverse_leg_dirn(leg); SVX_ASSERT(fixed(stn3)); SVX_ASSERT(fixed(stn4)); SVX_ASSERT(data_here(stn3->leg[dirn3])); } if (IS_NOOSE(ptrRed)) { /* noose (hanging-loop) */ node *stn; delta e; linkfor *leg; int zero; SVX_ASSERT(fixed(stn3)); SVX_ASSERT(fixed(stn4)); leg = stn3->leg[dirn3]; stn2 = ptrRed->join1->l.to; dirn2 = reverse_leg_dirn(ptrRed->join1); zero = fZeros(&leg->v); if (!zero) { delta tmp; subdd(&e, &POSD(stn4), &POSD(stn3)); subdd(&tmp, &e, &leg->d); divds(&e, &tmp, &leg->v); } if (data_here(ptrRed->join1)) { adddd(&POSD(stn2), &POSD(stn3), &ptrRed->join1->d); if (!zero) { delta tmp; mulsd(&tmp, &ptrRed->join1->v, &e); adddd(&POSD(stn2), &POSD(stn2), &tmp); } } else { subdd(&POSD(stn2), &POSD(stn3), &stn2->leg[dirn2]->d); if (!zero) { delta tmp; mulsd(&tmp, &stn2->leg[dirn2]->v, &e); adddd(&POSD(stn2), &POSD(stn2), &tmp); } } fix(stn2); dirn2 = (dirn2 + 2) % 3; /* point back at stn again */ stn = stn2->leg[dirn2]->l.to; #if 0 printf("Replacing noose with stn...stn4 = \n"); print_prefix(stn->name); putnl(); print_prefix(stn2->name); putnl(); print_prefix(stn3->name); putnl(); print_prefix(stn4->name); putnl(); #endif if (data_here(stn2->leg[dirn2])) adddd(&POSD(stn), &POSD(stn2), &stn2->leg[dirn2]->d); else subdd(&POSD(stn), &POSD(stn2), &reverse_leg(stn2->leg[dirn2])->d); /* the "rope" of the noose is a new articulation */ stn2->leg[dirn2]->l.reverse |= FLAG_ARTICULATION; reverse_leg(stn2->leg[dirn2])->l.reverse |= FLAG_ARTICULATION; fix(stn); add_stn_to_list(&stnlist, stn); add_stn_to_list(&stnlist, stn2); osfree(stn3->leg[dirn3]); stn3->leg[dirn3] = ptrRed->join1; osfree(stn4->leg[dirn4]); stn4->leg[dirn4] = ptrRed->join2; } else if (IS_PARALLEL(ptrRed)) { /* parallel legs */ node *stn; delta e, e2; linkfor *leg; int dirn; stn = ptrRed->join1->l.to; stn2 = ptrRed->join2->l.to; SVX_ASSERT(fixed(stn3)); SVX_ASSERT(fixed(stn4)); dirn = reverse_leg_dirn(ptrRed->join1); dirn2 = reverse_leg_dirn(ptrRed->join2); leg = stn3->leg[dirn3]; if (leg->l.reverse & FLAG_ARTICULATION) { ptrRed->join1->l.reverse |= FLAG_ARTICULATION; stn->leg[dirn]->l.reverse |= FLAG_ARTICULATION; ptrRed->join2->l.reverse |= FLAG_ARTICULATION; stn2->leg[dirn2]->l.reverse |= FLAG_ARTICULATION; } if (fZeros(&leg->v)) e[0] = e[1] = e[2] = 0.0; else { delta tmp; subdd(&e, &POSD(stn4), &POSD(stn3)); subdd(&tmp, &e, &leg->d); divds(&e, &tmp, &leg->v); } if (data_here(ptrRed->join1)) { leg = ptrRed->join1; adddd(&POSD(stn), &POSD(stn3), &leg->d); } else { leg = stn->leg[dirn]; subdd(&POSD(stn), &POSD(stn3), &leg->d); } mulsd(&e2, &leg->v, &e); adddd(&POSD(stn), &POSD(stn), &e2); if (data_here(ptrRed->join2)) { leg = ptrRed->join2; adddd(&POSD(stn2), &POSD(stn4), &leg->d); } else { leg = stn2->leg[dirn2]; subdd(&POSD(stn2), &POSD(stn4), &leg->d); } mulsd(&e2, &leg->v, &e); subdd(&POSD(stn2), &POSD(stn2), &e2); fix(stn); fix(stn2); #if 0 printf("Replacing parallel with stn...stn4 = \n"); print_prefix(stn->name); putnl(); print_prefix(stn2->name); putnl(); print_prefix(stn3->name); putnl(); print_prefix(stn4->name); putnl(); #endif add_stn_to_list(&stnlist, stn); add_stn_to_list(&stnlist, stn2); osfree(stn3->leg[dirn3]); stn3->leg[dirn3] = ptrRed->join1; osfree(stn4->leg[dirn4]); stn4->leg[dirn4] = ptrRed->join2; } else if (IS_DELTASTAR(ptrRed)) { node *stnZ; node *stn[3]; int dirn[3]; linkfor *legs[3]; int i; linkfor *leg; legs[0] = ptrRed->join1; legs[1] = ptrRed->join2; legs[2] = ptrRed->join3; /* work out ends as we don't bother stacking them */ leg = reverse_leg(legs[0]); stn[0] = leg->l.to; dirn[0] = reverse_leg_dirn(leg); stnZ = stn[0]->leg[dirn[0]]->l.to; SVX_ASSERT(fixed(stnZ)); stn[1] = stnZ->leg[1]->l.to; dirn[1] = reverse_leg_dirn(stnZ->leg[1]); stn[2] = stnZ->leg[2]->l.to; dirn[2] = reverse_leg_dirn(stnZ->leg[2]); /*print_prefix(stnZ->name);printf(" %p\n",(void*)stnZ);*/ for (i = 0; i < 3; i++) { SVX_ASSERT2(fixed(stn[i]), "stn not fixed for D*"); leg = stn[i]->leg[dirn[i]]; SVX_ASSERT2(data_here(leg), "data not on leg for D*"); SVX_ASSERT2(leg->l.to == stnZ, "bad sub-network for D*"); stn2 = legs[i]->l.to; if (data_here(legs[i])) { adddd(&POSD(stn2), &POSD(stn[i]), &legs[i]->d); } else { subdd(&POSD(stn2), &POSD(stn[i]), &reverse_leg(legs[i])->d); } if (!fZeros(&leg->v)) { delta e, tmp; subdd(&e, &POSD(stnZ), &POSD(stn[i])); subdd(&e, &e, &leg->d); divds(&tmp, &e, &leg->v); if (data_here(legs[i])) { mulsd(&e, &legs[i]->v, &tmp); } else { mulsd(&e, &reverse_leg(legs[i])->v, &tmp); } adddd(&POSD(stn2), &POSD(stn2), &e); } fix(stn2); add_stn_to_list(&stnlist, stn2); osfree(leg); stn[i]->leg[dirn[i]] = legs[i]; /* transfer the articulation status of the radial legs */ if (stnZ->leg[i]->l.reverse & FLAG_ARTICULATION) { legs[i]->l.reverse |= FLAG_ARTICULATION; reverse_leg(legs[i])->l.reverse |= FLAG_ARTICULATION; } osfree(stnZ->leg[i]); stnZ->leg[i] = NULL; } /*printf("---%f %f %f\n",POS(stnZ, 0), POS(stnZ, 1), POS(stnZ, 2));*/ remove_stn_from_list(&stnlist, stnZ); osfree(stnZ->name); osfree(stnZ); } else { BUG("ptrRed has unknown type"); } ptrOld = ptrRed; ptrRed = ptrRed->next; osfree(ptrOld); } } survex-1.4.4/src/mainfrm.h0000644000175000017500000005147314211277144012403 00000000000000// // mainfrm.h // // Main frame handling for Aven. // // Copyright (C) 2000-2003,2005 Mark R. Shinwell // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018 Olly Betts // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef mainfrm_h #define mainfrm_h #include "wx.h" #include // for m_FileHistory #include #include #include #include #include "aventreectrl.h" #include "gfxcore.h" #include "guicontrol.h" #include "img_hosted.h" #include "labelinfo.h" #include "message.h" #include "model.h" #include "vector3.h" #include "aven.h" //#include "prefsdlg.h" #include #include using namespace std; #include #include #ifdef __WXMAC__ // Currently on macOS, we force use of a generic toolbar, which needs to be put // in a sizer. # define USING_GENERIC_TOOLBAR #endif #define MARK_FIRST 1 #define MARK_NEXT 2 #define MARK_PREV 3 enum { menu_FILE_LOG = 1000, menu_FILE_OPEN_TERRAIN, menu_FILE_PAGE_SETUP, menu_FILE_SCREENSHOT, menu_FILE_EXPORT, menu_FILE_EXTEND, menu_PRES_NEW, menu_PRES_OPEN, menu_PRES_SAVE, menu_PRES_SAVE_AS, menu_PRES_MARK, menu_PRES_EXPORT_MOVIE, menu_PRES_FREWIND, menu_PRES_REWIND, menu_PRES_REVERSE, menu_PRES_PLAY, menu_PRES_FF, menu_PRES_FFF, menu_PRES_PAUSE, menu_ROTATION_START, menu_ROTATION_STOP, menu_ROTATION_TOGGLE, menu_ROTATION_REVERSE, menu_ORIENT_MOVE_NORTH, menu_ORIENT_MOVE_EAST, menu_ORIENT_MOVE_SOUTH, menu_ORIENT_MOVE_WEST, menu_ORIENT_PLAN, menu_ORIENT_ELEVATION, menu_ORIENT_DEFAULTS, menu_VIEW_SHOW_LEGS, menu_VIEW_SPLAYS, menu_SPLAYS_HIDE, menu_SPLAYS_SHOW_DASHED, menu_SPLAYS_SHOW_FADED, menu_SPLAYS_SHOW_NORMAL, menu_VIEW_DUPES, menu_DUPES_HIDE, menu_DUPES_SHOW_DASHED, menu_DUPES_SHOW_FADED, menu_DUPES_SHOW_NORMAL, menu_VIEW_SHOW_CROSSES, menu_VIEW_SHOW_NAMES, menu_VIEW_SHOW_SURFACE, menu_VIEW_SHOW_OVERLAPPING_NAMES, menu_VIEW_SHOW_ENTRANCES, menu_VIEW_SHOW_FIXED_PTS, menu_VIEW_SHOW_EXPORTED_PTS, menu_VIEW_STATUS_BAR, menu_VIEW_GRID, menu_VIEW_BOUNDING_BOX, menu_VIEW_TERRAIN, menu_VIEW_SHOW_TUBES, menu_VIEW_PERSPECTIVE, menu_VIEW_SMOOTH_SHADING, menu_VIEW_TEXTURED, menu_VIEW_FOG, menu_VIEW_SMOOTH_LINES, menu_VIEW_FULLSCREEN, menu_VIEW_COLOUR_BY, menu_COLOUR_BY_DEPTH, menu_COLOUR_BY_DATE, menu_COLOUR_BY_ERROR, menu_COLOUR_BY_H_ERROR, menu_COLOUR_BY_V_ERROR, menu_COLOUR_BY_GRADIENT, menu_COLOUR_BY_LENGTH, menu_COLOUR_BY_SURVEY, menu_COLOUR_BY_STYLE, menu_IND_COMPASS, menu_IND_CLINO, menu_IND_COLOUR_KEY, menu_IND_SCALE_BAR, menu_CTL_INDICATORS, menu_CTL_SIDE_PANEL, menu_CTL_METRIC, menu_CTL_DEGREES, menu_CTL_PERCENT, menu_CTL_REVERSE, menu_CTL_CANCEL_DIST_LINE, menu_SURVEY_RESTRICT, menu_SURVEY_SHOW_ALL, menu_SURVEY_HIDE, menu_SURVEY_SHOW, menu_SURVEY_HIDE_SIBLINGS, textctrl_FIND, button_HIDE, listctrl_PRES }; class AvenPresList; class MainFrm : public wxFrame, public Model { wxFileHistory m_history; int m_SashPosition; bool was_showing_sidepanel_before_fullscreen; GfxCore* m_Gfx; wxWindow* m_Log; GUIControl* m_Control; wxSplitterWindow* m_Splitter; AvenTreeCtrl* m_Tree; wxTextCtrl* m_FindBox; // wxCheckBox* m_RegexpCheckBox; wxNotebook* m_Notebook; AvenPresList* m_PresList; wxString m_File; // Processed version of data - same as m_File if m_File is processed data. wxString m_FileProcessed; wxString m_Survey; // Strings for status bar reporting of distances. wxString here_text, coords_text, dist_text, distfree_text; int m_NumHighlighted = 0; bool pending_find; bool fullscreen_showing_menus; #ifdef PREFDLG PrefsDlg* m_PrefsDlg; #endif bool ProcessSVXFile(const wxString & file); // void FixLRUD(traverse & centreline); void CreateMenuBar(); void MakeToolBar(); void CreateSidePanel(); void UpdateStatusBar(); #ifdef USING_GENERIC_TOOLBAR wxToolBar * GetToolBar() const { wxSizer * sizer = GetSizer(); if (!sizer) return NULL; return (wxToolBar*)sizer->GetItem(size_t(0))->GetWindow(); } #endif public: MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size); // public for CavernLog. bool LoadData(const wxString& file, const wxString& prefix); void AddToFileHistory(const wxString & file); void InitialiseAfterLoad(const wxString & file, const wxString & prefix); void OnShowLog(wxCommandEvent& event); void OnMRUFile(wxCommandEvent& event); void OpenFile(const wxString& file, const wxString& survey = wxString()); void OnPresNewUpdate(wxUpdateUIEvent& event); void OnPresOpenUpdate(wxUpdateUIEvent& event); void OnPresSaveUpdate(wxUpdateUIEvent& event); void OnPresSaveAsUpdate(wxUpdateUIEvent& event); void OnPresMarkUpdate(wxUpdateUIEvent& event); void OnPresFRewindUpdate(wxUpdateUIEvent& event); void OnPresRewindUpdate(wxUpdateUIEvent& event); void OnPresReverseUpdate(wxUpdateUIEvent& event); void OnPresPlayUpdate(wxUpdateUIEvent& event); void OnPresFFUpdate(wxUpdateUIEvent& event); void OnPresFFFUpdate(wxUpdateUIEvent& event); void OnPresPauseUpdate(wxUpdateUIEvent& event); void OnPresStopUpdate(wxUpdateUIEvent& event); void OnPresExportMovieUpdate(wxUpdateUIEvent& event); void OnOpenTerrainUpdate(wxUpdateUIEvent& event); void DoFind(); void OnFind(wxCommandEvent& event); void OnIdle(wxIdleEvent& event); void OnGotoFound(wxCommandEvent& event); void OnHide(wxCommandEvent& event); void OnHideUpdate(wxUpdateUIEvent& ui); void OnOpen(wxCommandEvent& event); void OnOpenTerrain(wxCommandEvent&); void HideLog(wxWindow * log_window); void OnScreenshot(wxCommandEvent& event); void OnScreenshotUpdate(wxUpdateUIEvent& event); void OnFilePreferences(wxCommandEvent& event); void OnPrint(wxCommandEvent& event); void PrintAndExit(); void OnPageSetup(wxCommandEvent& event); void OnPresNew(wxCommandEvent& event); void OnPresOpen(wxCommandEvent& event); void OnPresSave(wxCommandEvent& event); void OnPresSaveAs(wxCommandEvent& event); void OnPresMark(wxCommandEvent& event); void OnPresFRewind(wxCommandEvent& event); void OnPresRewind(wxCommandEvent& event); void OnPresReverse(wxCommandEvent& event); void OnPresPlay(wxCommandEvent& event); void OnPresFF(wxCommandEvent& event); void OnPresFFF(wxCommandEvent& event); void OnPresPause(wxCommandEvent& event); void OnPresStop(wxCommandEvent& event); void OnPresExportMovie(wxCommandEvent& event); void OnExport(wxCommandEvent& event); void OnExtend(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnClose(wxCloseEvent&); void OnSetFocus(wxFocusEvent &) { if (m_Gfx) m_Gfx->SetFocus(); } void OnKeyPress(wxKeyEvent &e) { if (m_Gfx) { m_Gfx->SetFocus(); m_Gfx->OnKeyPress(e); } } void OnShowLogUpdate(wxUpdateUIEvent &ui) { ui.Enable(m_Log != NULL || (m_Splitter->GetWindow1() != m_Gfx && m_Splitter->GetWindow2() != m_Gfx)); ui.Check(m_Log == NULL); } void OnPrintUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); } void OnExportUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); } void OnExtendUpdate(wxUpdateUIEvent &ui) { ui.Enable(!IsExtendedElevation()); } // temporary bodges until event handling problem is sorted out: void OnDefaultsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDefaultsUpdate(event); } void OnPlanUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnPlanUpdate(event); } void OnElevationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnElevationUpdate(event); } void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDisplayOverlappingNamesUpdate(event); } void OnColourByUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByUpdate(event); } void OnColourByDepthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDepthUpdate(event); } void OnColourByDateUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDateUpdate(event); } void OnColourByErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByErrorUpdate(event); } void OnColourByHErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByHErrorUpdate(event); } void OnColourByVErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByVErrorUpdate(event); } void OnColourByGradientUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByGradientUpdate(event); } void OnColourByLengthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByLengthUpdate(event); } void OnColourBySurveyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourBySurveyUpdate(event); } void OnColourByStyleUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByStyleUpdate(event); } void OnShowCrossesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowCrossesUpdate(event); } void OnShowEntrancesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowEntrancesUpdate(event); } void OnShowFixedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowFixedPtsUpdate(event); } void OnShowExportedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowExportedPtsUpdate(event); } void OnShowStationNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowStationNamesUpdate(event); } void OnShowSurveyLegsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurveyLegsUpdate(event); } void OnSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSplaysUpdate(event); } void OnHideSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideSplaysUpdate(event); } void OnShowSplaysDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysDashedUpdate(event); } void OnShowSplaysFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysFadedUpdate(event); } void OnShowSplaysNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysNormalUpdate(event); } void OnDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDupesUpdate(event); } void OnHideDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideDupesUpdate(event); } void OnShowDupesDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesDashedUpdate(event); } void OnShowDupesFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesFadedUpdate(event); } void OnShowDupesNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesNormalUpdate(event); } void OnShowSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurfaceUpdate(event); } void OnMoveEastUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveEastUpdate(event); } void OnMoveNorthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveNorthUpdate(event); } void OnMoveSouthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveSouthUpdate(event); } void OnMoveWestUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveWestUpdate(event); } void OnToggleRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleRotationUpdate(event); } void OnReverseControlsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseControlsUpdate(event); } void OnToggleScalebarUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleScalebarUpdate(event); } void OnToggleColourKeyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleColourKeyUpdate(event); } void OnViewCompassUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewCompassUpdate(event); } void OnViewGridUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewGridUpdate(event); } void OnViewBoundingBoxUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewBoundingBoxUpdate(event); } void OnViewTerrainUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTerrainUpdate(event); } void OnViewClinoUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewClinoUpdate(event); } void OnViewPerspectiveUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewPerspectiveUpdate(event); } void OnViewSmoothShadingUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothShadingUpdate(event); } void OnViewTexturedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTexturedUpdate(event); } void OnViewFogUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFogUpdate(event); } void OnViewSmoothLinesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothLinesUpdate(event); } void OnViewFullScreenUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFullScreenUpdate(event); } void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseDirectionOfRotationUpdate(event); } void OnCancelDistLineUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnCancelDistLineUpdate(event); } void OnIndicatorsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnIndicatorsUpdate(event); } void OnDefaults(wxCommandEvent&) { if (m_Control) m_Control->OnDefaults(); } void OnPlan(wxCommandEvent&) { if (m_Control) m_Control->OnPlan(); } void OnElevation(wxCommandEvent&) { if (m_Control) m_Control->OnElevation(); } void OnDisplayOverlappingNames(wxCommandEvent&) { if (m_Control) m_Control->OnDisplayOverlappingNames(); } void OnColourByDepth(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDepth(); } void OnColourByDate(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDate(); } void OnColourByError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByError(); } void OnColourByHError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByHError(); } void OnColourByVError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByVError(); } void OnColourByGradient(wxCommandEvent&) { if (m_Control) m_Control->OnColourByGradient(); } void OnColourByLength(wxCommandEvent&) { if (m_Control) m_Control->OnColourByLength(); } void OnColourBySurvey(wxCommandEvent&) { if (m_Control) m_Control->OnColourBySurvey(); } void OnColourByStyle(wxCommandEvent&) { if (m_Control) m_Control->OnColourByStyle(); } void OnShowCrosses(wxCommandEvent&) { if (m_Control) m_Control->OnShowCrosses(); } void OnShowEntrances(wxCommandEvent&) { if (m_Control) m_Control->OnShowEntrances(); } void OnShowFixedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowFixedPts(); } void OnShowExportedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowExportedPts(); } void OnShowStationNames(wxCommandEvent&) { if (m_Control) m_Control->OnShowStationNames(); } void OnShowSurveyLegs(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurveyLegs(); } void OnHideSplays(wxCommandEvent&) { if (m_Control) m_Control->OnHideSplays(); } void OnShowSplaysDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysDashed(); } void OnShowSplaysFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysFaded(); } void OnShowSplaysNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysNormal(); } void OnHideDupes(wxCommandEvent&) { if (m_Control) m_Control->OnHideDupes(); } void OnShowDupesDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesDashed(); } void OnShowDupesFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesFaded(); } void OnShowDupesNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesNormal(); } void OnShowSurface(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurface(); } void OnMoveEast(wxCommandEvent&) { if (m_Control) m_Control->OnMoveEast(); } void OnMoveNorth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveNorth(); } void OnMoveSouth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveSouth(); } void OnMoveWest(wxCommandEvent&) { if (m_Control) m_Control->OnMoveWest(); } void OnToggleRotation(wxCommandEvent&) { if (m_Control) m_Control->OnToggleRotation(); } void OnReverseControls(wxCommandEvent&) { if (m_Control) m_Control->OnReverseControls(); } void OnToggleScalebar(wxCommandEvent&) { if (m_Control) m_Control->OnToggleScalebar(); } void OnToggleColourKey(wxCommandEvent&) { if (m_Control) m_Control->OnToggleColourKey(); } void OnViewCompass(wxCommandEvent&) { if (m_Control) m_Control->OnViewCompass(); } void OnViewClino(wxCommandEvent&) { if (m_Control) m_Control->OnViewClino(); } void OnViewGrid(wxCommandEvent&) { if (m_Control) m_Control->OnViewGrid(); } void OnViewBoundingBox(wxCommandEvent&) { if (m_Control) m_Control->OnViewBoundingBox(); } void OnViewTerrain(wxCommandEvent&) { if (m_Control) m_Control->OnViewTerrain(); } void OnViewPerspective(wxCommandEvent&) { if (m_Control) m_Control->OnViewPerspective(); } void OnViewSmoothShading(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothShading(); } void OnViewTextured(wxCommandEvent&) { if (m_Control) m_Control->OnViewTextured(); } void OnViewFog(wxCommandEvent&) { if (m_Control) m_Control->OnViewFog(); } void OnViewSmoothLines(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothLines(); } void OnViewFullScreen(wxCommandEvent&) { ViewFullScreen(); } void ViewFullScreen(); bool FullScreenModeShowingMenus() const; void FullScreenModeShowMenus(bool show); void OnReverseDirectionOfRotation(wxCommandEvent&) { if (m_Control) m_Control->OnReverseDirectionOfRotation(); } void OnCancelDistLine(wxCommandEvent&) { if (m_Control) m_Control->OnCancelDistLine(); } void OnToggleMetric(wxCommandEvent&) { if (m_Control) m_Control->OnToggleMetric(); } void OnToggleDegrees(wxCommandEvent&) { if (m_Control) m_Control->OnToggleDegrees(); } void OnTogglePercent(wxCommandEvent&) { if (m_Control) m_Control->OnTogglePercent(); } void OnToggleTubes(wxCommandEvent&) { if (m_Control) m_Control->OnToggleTubes(); } void OnToggleMetricUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleMetricUpdate(event); } void OnToggleDegreesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleDegreesUpdate(event); } void OnTogglePercentUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnTogglePercentUpdate(event); } void OnToggleTubesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleTubesUpdate(event); } // end of horrible bodges void OnViewSidePanelUpdate(wxUpdateUIEvent& event); void OnViewSidePanel(wxCommandEvent& event); void ToggleSidePanel(); bool ShowingSidePanel(); void SelectTreeItem(const LabelInfo* label) { if (label->tree_id.IsOk()) m_Tree->SelectItem(label->tree_id); else m_Tree->UnselectAll(); } void ClearTreeSelection(); void ClearCoords(); void SetCoords(const Vector3 &v); const LabelInfo * GetTreeSelection() const; void SetCoords(Double x, Double y, const LabelInfo * there); void SetAltitude(Double z, const LabelInfo * there); void ShowInfo(const LabelInfo *here = NULL, const LabelInfo *there = NULL); void DisplayTreeInfo(const wxTreeItemData* data = NULL); void TreeItemSelected(const wxTreeItemData* data); PresentationMark GetPresMark(int which); bool Animating() const { return m_Gfx && m_Gfx->Animating(); } // Restrict to subsurvey `survey` (or show all if `survey` empty). void RestrictTo(const wxString & survey); wxString GetSurvey() const { return m_Survey; } int GetNumHighlightedPts() const { return m_NumHighlighted; } const SurveyFilter* GetTreeFilter() const { return m_Tree->GetFilter(); } // Used when the tree filters change. FIXME: Overkill? void ForceFullRedraw() { m_Gfx->InvalidateAllLists(); m_Gfx->ForceRefresh(); } private: DECLARE_EVENT_TABLE() }; #endif survex-1.4.4/src/hpgl.h0000644000175000017500000000225414141575516011703 00000000000000/* hpgl.h * Export from Aven as HPGL. */ /* Copyright (C) 2005,2014,2015,2016 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "exportfilter.h" class HPGL : public ExportFilter { public: HPGL() {} void header(const char *, const char *, time_t, double, double, double, double, double, double); void line(const img_point *, const img_point *, unsigned, bool); void label(const img_point *, const char *, bool, int); void cross(const img_point *, bool); void footer(); }; survex-1.4.4/src/getopt.h0000644000175000017500000001450614141575516012256 00000000000000/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _GETOPT_H /* #ifdef __need_getopt */ # define _GETOPT_H 1 /* #endif */ /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include , but that does not exist if we are standalone. So: if __GNU_LIBRARY__ is not defined, include , which will pull in for us if it's from glibc. (Why ctype.h? It's guaranteed to exist and it doesn't flood the namespace with stuff the way some other headers do.) */ #if !defined __GNU_LIBRARY__ # include #endif #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; #ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { # if (defined __STDC__ && __STDC__) || defined __cplusplus const char *name; # else char *name; # endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 #endif /* need getopt */ /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, `optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in `optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU `getopt'. The argument `--' causes premature termination of argument scanning, explicitly telling `getopt' that there are no more options. If OPTS begins with `--', then non-option arguments are treated as arguments to the option '\0'. This behavior is specific to the GNU `getopt'. */ #if (defined __STDC__ && __STDC__) || defined __cplusplus # ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts); # else /* not __GNU_LIBRARY__ */ extern int getopt (); # endif /* __GNU_LIBRARY__ */ # ifndef __need_getopt extern int getopt_long (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); extern int getopt_long_only (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only); # endif #else /* not __STDC__ */ extern int getopt (); # ifndef __need_getopt extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); # endif #endif /* __STDC__ */ #ifdef __cplusplus } #endif /* Make sure we later can get all the definitions and declarations. */ #undef __need_getopt #endif /* getopt.h */ survex-1.4.4/OLDNEWS0000644000175000017500000022770114141575516011055 00000000000000Changes in 1.0.32: * aven: Fixed font sizes in "Print Preview" and printouts. * aven: In the print setup dialog, replaced "Orientation" radio buttons with "Plan" and "Elevation" buttons. * aven: Fixed info box on printouts of elevations, tilted views, and extend elevations. * aven: Added "fit on one page" option, and make it the default. * aven: Reorder "Cancel", "Preview", "Print" buttons and make "Print" the default button. * aven: Read settings back from the print dialog when the "Print" button is pressed (was only done for "Preview" previously). * aven: Sorted out the initial size of the "Print Preview" window. * aven: Fixed the window manager's close button on the "Print Preview" window - previously this was being ignored. * aven: Sorted out initial survey scaling when loading a survey at startup. * aven: Fixed the measuring line to work better when the survey tree is manipulated with keys. Tweaked redrawing of the measuring line to be a smidgen more efficient. Fixed the blob and ring size which were one pixel too small on Windows. * aven: Added "System Information:" section to the "About" dialog to hold information useful when reporting bugs. Currently it contains the wxWindows version, OS version, and colour depth information. * aven: Changed the "About" dialog's "Close" button to be "OK" for consistency with pretty much every other application. * aven: Added "File->Export as..." which integrates cad3d's functionality within aven. * aven: Updated a few icons. * cad3d: Added SVG export support from John Pybus * (Unix version): Fixed to allow compilation with GCC 3.4 * (MS Windows version): Upgrade to using innosetup 4 for the installer (we were using innosetup 2). This results in a much smaller download and the installer now translates itself into the currently set language. The installer will no longer work on Windows NT 3.51, but I seriously doubt anyone is still using that... * Updates to German translation. Changes in 1.0.31: * (MS Windows version): Fixed problems with the new printing code by building with a newer version of wxWindows (2.5.2 instead of 2.4.1). * aven: Fixed grid menu item so that it always correctly reflects whether the grid is enabled or not. * aven: Minor improvements to appearance of a few toolbar icons. * Updates to Catalan, French, Italian, Romanian, Slovak, and Spanish translations. * cavern: Fixed Romanian message which was appearing in English .err files. Changes in 1.0.30: * aven: Added printing directly from Aven! * aven: Fixed memory leak when showing the "About" dialog. * (MacOS X version): Now installable from a disk image package. * cavern: Equates are no longer considered when deciding which stations are flagged as surface and underground. * Romanian translation mostly completed. * (Unix version): Debian: Minor packaging tweaks. Changes in 1.0.29: * cad3d: Fixed problem with DXF files which stopped them loading with some drawing packages (introduced in 1.0.27). * aven: Changed File->Exit to File->Quit. * Removed some unused messages from the message files. * (Unix version): Fixed SRPMs to build on RedHat 9 and Fedora Core 1 (patch from John Pybus). * Romanian translation started. * (Unix version): Debian: Fixed new lintian warnings about missing quotes in menu files. Changes in 1.0.28: * Fixed 3d file reading code to fix incorrect unpacking of compressed station names in a rare case. Also checked other rare cases work correctly. Changes in 1.0.27: * cad3d: DXF output now puts surface legs, stations, and labels in separate layers. * (Unix version): distribute desc-svxedit.txt. Changes in 1.0.26: * cavern: Fixed interleaved topofil data style - the length was always being calculated as zero. * (Unix version): aven: "All Files" now shows files without extensions too. * aven: added Ctrl+Q as shortcut for File->Exit. * aven: depth colouring now uses a proper colour gradient. * (MacOS X version): aven: the keyboard and mouse now work! It turns out that we must apply resources *after* installing. * (MacOS X version): aven: now works when run from the MacOS X Finder. * (MacOS X version): look for message files and other resources relative to the binaries so that the user can install Survex from a disk image in the location of their choice. * (MacOS X version): fixed not to try to build aven if wxWindows isn't installed. * cad3d: fixed -e and -r options to not crash (the long versions have always worked). * extend: fixed to initialise an internal structure - failing to do so was probably causing crashes on some platforms. * Fixed standard graphics for "Note", "Warning", etc in the PostScript manual. * Documentation updated. * (Unix version): fixed svxedit man page which previously contained xcaverot documentation! * test suite: check that cavern doesn't report "nan" or "NaN" for any values. * (Unix version): fixed configure --enable-defaultlang=XX to work. * (Unix version): fixed configure code to turn on lots of GCC warnings and fixed most of them. * (MS Windows version): assorted tweaks to allow building with MS Visual C/C++. Changes in 1.0.25: * (MacOS X version): hopefully fixed building of aven. * (Unix version): updated config.guess and config.sub so should build out of the box on more Unix platforms. * (Unix version): Debian: added missing Build-Depends on xlibs-dev. * (Unix version): RPMs: give up supplying binary RPMs due to apparently insurmountable technical problems. Changes in 1.0.24: * cavern: fixed LEVEL (broken since around 1.0.8) and added test case. * cavern: corrected handling of declination in Compass DAT files and added test case; also added tests for other aspects of Compass DAT file reading. * printps/printpcl: fixed blank page detection in some obscure cases. * Documentation: started manual section on working with Compass data files. * (Unix version): fixed compilation problems with aven and getopt.h on MacOS X (and probably some other Unix versions). * (Unix version): Debian package now Build-Depends on gcc-3.2 and g++-3.2. Changes in 1.0.23: * Documentation: include 3d v3 file format description on MS Windows, MS DOS, and RISC OS too; include PNG graphics for manual on MS Windows; minor updates to manual. * Prefer wxWindows 2.4 if it's available. * (MacOS X version): detect MacOS X and look for MacOS X build of wxWindows; automatically add resource fork to aven binary. * Disabled experimental support for Chinese (LANG=zh) - it isn't currently working and makes the printer drivers unusable on Chinese versions of MS Windows. * (Unix version): tweaked debian packaging. * cavern: Handling of "*:" at start of file wasn't fully fixed in 1.0.19. Changes in 1.0.22: * aven: Fixed handling of extended elevations (and other flat surveys) - they are meant to be "locked flat" but this wasn't fully working before. * Documentation: 3d v3 file format description: fixed error in description of codes 0x01-0x0e; include it in binary packages (not only with the source code). Changes in 1.0.21: * cavern: when reading Compass DAT files, we now processes compass and clino backsights, and recognise the "X" flag which indicates a leg should be entirely ignored. And we now report correct line number with errors in Compass .MAK files. * cavern: if "*infer plumbs on", don't infer a plumb if the clino is +/- 90 degrees, but the backclino isn't (and vice versa). * cavern: fixed 3dx output so it actually works with Chasm once more. * cavern: don't allocate extra space needed for producing 3dx output for Chasm unless we're actually producing that output - saves about 8 bytes per station. * cavern: removed slightly too keen sanity check which could misfire in very unusual circumstances. * (MS Windows version): all .ico files except 3d.ico have been missing since 1.0.17 (or maybe 1.0.16) - fixed. You wouldn't notice this if you installed over an previous version. Changes in 1.0.20: * aven: update display when "Metric" or "Degrees" is toggled. * cavern: fixed handling of compass and clino corrections in Compass survey data - these were interpreted as radians rather than degrees so the correction was about 57 times too large!) * Improved handling of Compass PLT files - if the survey name is empty, don't insert a survey separator character. * Documentation: fixed incorrect markup which resulted in a bogus footnote. Changes in 1.0.19: * cavern: you can now process Compass format survey data (.DAT and .MAK files) - these can even be linked into a Survex dataset with "*include fulford.dat" or "*include lech.mak" to allow processing of mixed datasets. * cavern: major speedup (up to 60%) when reading in survey data containing a lot of stations in the same survey hierarchy level (which is how Compass files are handled). * cavern: don't warn about a compass reading on a plumbed leg if the plumb was inferred and the compass reading is zero. * cavern: reduced memory usage in code which reads a survey station name. * cavern: reported CPU time would go negative if cavern ran for more than about 36 minutes (highly unlikely but not impossible on a slow machine with a large, highly interconnect survey) - fixed. * cavern: avoid unnecessary work when --percentage isn't specified. * cavern: Writing "*:" at the start of a .svx file would crash cavern - fixed and added test case. This is an error anyway, but it shouldn't cause a crash. * Don't distribute unused toolbar icons. * Documentation: minor updates. Changes in 1.0.18: * (Unix version): Fixed "Process" action on .svx files. * (Unix version): File associations: if svxedit isn't installed, run gnome-edit instead. * (Unix version): In Debian packages, now include file associations and file icons in the survex package rather than survex-aven. * (Unix version): File associations were missing from RPM packages; moved aven and svxedit man pages to their respective subpackages; moved aven icons to the aven subpackage. * Documentation: added details of the 3d file format (version 3). * Updated TODO list. Changes in 1.0.17: * (MS Windows version): Fixed "Open in SvxEdit" to work (and if tcl isn't install this action now falls back to using notepad). SvxEdit now has its own icon. * (Unix version): Install mime types, icons, and file associations for Gnome. Note: at present GMC doesn't seem to notice new files being created (e.g. Process on a .svx file creates .3d and .err files) - you have to manually refresh the view. * Minor update to manual. Changes in 1.0.16: * (MS Windows version): Really fixed bug introduced in 1.0.14 which often stops programs from finding the message files. * (MS Windows version): Remove any existing "Open" file association for .svx files. Changes in 1.0.15: * (MS Windows version): Fixed bug introduced in 1.0.14 which often stops programs from finding the message files. * (MS Windows version): "Open in Notepad" is now the double-click action for .svx files once again, "Open in SvxEdit" is an action in the menu obtained with the right mouse button. Changes in 1.0.14: * svxedit: This is a Survex data entry editor from the therion team. It needs tcl and wish installed - for MS Windows an installer is available for free from Activeware. * Improved handling of Compass PLT files and CMAP xyz files - no longer change dots to spaces in survey and station names - instead use a space as the separator between survey name and station name. * aven: when picking non-overlapping labels, show a slight preference to shorter labels with the aim of displaying more labels. * aven: fixed hard to notice problem which could cause the cave to appear tilted sideways after a lot of manipulation. * cavern: Modest speed improvement (0.5% for sample dataset). * cavern: fixed a rarely sighted bug which caused erroneous error about some stations not being attached to a fixed point. * cavern: fixed clino readings and DIRECTION to work in interleaved data. * cavern: improved error reporting when an invalid value is given for a DIRECTION reading. * cavern: fixed "singular matrix" error when very low SDs were specified. * print*: if the --raw is used, the survey can now use the space this would have taken up. * Reading of ASCII 3d files now copes with MSDOS/MS Windows line endings once again. Added regression test for this. * (MS Windows version): Programs run from the command line now find message files without SURVEXHOME needing to be set. * Updated documentation. Changes in 1.0.13: * aven: Fixed bug which caused the occasional spurious leg to be shown connecting arbitrary stations. * extend: try to extend along a survey, and make breaks where other surveys join. * cavern: Number reading code reworked to allow repeat readings to be supported, but the actual repeat reading code is currently disabled, and everything should work exactly as before. * Experimental support for Chinese (LANG=zh) - only a few messages are currently translated. Changes in 1.0.12: * diffpos: fixed to work on 64bit architectures. * sorterr: fixed to work with more than 1024 traverses. * Fixed handling of iso-8859-2 character set and MS Windows code page 1250 (both cover Eastern European languages). * (MS Windows version): install file associations for Compass .plt and .plf files and for CMAP .xyz files. Also install the file icon for .plt and .plf files in case Compass isn't installed (thanks to Larry Fish for permission to include the icon). * (Unix version): running an installed program with an explicit path works again. * (Unix version): xcaverot: automatically switch on PDA mode if the screen is less than 640 pixels wide or less than 480 pixels high. * (Unix version): minor portability improvements. * Updates to Portuguese translation - all translations are now up-to-date. Changes in 1.0.11: * aven: improvements in 1.0.10 to the file type selector only work properly on MS Windows, and with wxGtk >= 2.3 on Unix (the latest stable release is 2.2.9 where this doesn't work). Fixed to work as well as possible on 2.2.9, and as intended on 2.3. * aven: fixed so that loading PLT files works regardless of the current locale (previously it would fail for locales where the decimal character wasn't '.'). * aven: key actions during autorotation no longer temporarily pause autorotation. * aven: switching to plan or elevation while rotating is now smooth. * aven: removed undocumented and confusing "free rotation mode". * (MS Windows version): aven: focus now set correctly after loading a file by double-clicking or from the command line. * cad3d: write dummy passage dimensions to .plt files to avoid Compass bug. * printwin/printps: now support coloured printouts. * print*: fixed to work correctly with PLT files. * extend: fixed to work correctly with PLT files. * Updates to Italian translation. * Minor documentation updates. Changes in 1.0.10: * (MS Windows version): aven: fixed assert failure upon turning on station names. * aven: only add a file to the list of recently used files if it was opened successfully. * aven: recognise ".plf" as a Compass PLT file too; and on Unix list "*.PLT", "*.PLF", "*.XYZ", and "*.3D" as well as the lowercase versions to help people who transfer files from MSDOS/MS Windows. * cavern: fixed bogus warning triggered by "*begin abc.def" (I'm not sure that this should be valid, but the warning given wasn't appropriate). * Fixed scaling problem when reading PLT file (feet->metres conversion factor was being applied backwards!) * Fixed potential problem when reading or writing a 3d file which couldn't be opened. * Translate dots to spaces in survey names in Compass PLT files. * Better handling of PLT files which have a D command before any M command. * Updates to German and Italian translations. Changes in 1.0.9: * aven: Fixed jerky start when auto-rotation begins. * cavern: Fixed Direction reading - bug previously made it unusable. * (MS Windows version): cad3d: fixed broken PLT output (had a double CR at the end of each line). * (Unix version): RPMs now have the docs in /usr/share/doc and the man pages in /usr/share/man to conform with the FHS (and where RedHat packages put them). * Updates to French, Spanish, Catalan, and Slovak translations. Changes in 1.0.8: * Slovak translation added; updated German, Catalan, and Spanish translations. * aven: reduced memory usage by around 25% and increased speed and responsiveness. * aven: rate of rotation and switching between plan and elevation now adjusted to the speed of redraw, so aven behaves in a similar way independent of the speed of the computer or size of the survey. * aven: provide list of most recently loaded files (preserved between runs of the program). * aven: settings for "Metric" and "Degrees" are preserved between runs. * aven: moved some menu items from "View" to "Controls" as they probably belong there and the "View" menu was getting out of hand. * aven: cursor keys now translate cave in the same way the mouse does (i.e. now work as in caverot and xcaverot). * aven: eliminated the "twinkling label" effect when dragging the cave with the right mouse button. * aven: the measuring line moves much more smoothly now: the mouse cursor now snaps to the nearest station, rather than just a near station; and when the line moves, we now only redraw the affected area of the window. * aven: resolved annoying limit on zooming in on large surveys. This was a crude way of preventing random lines due to overflow in the windowing system. Aven now clips lines itself at high zoom levels, and limits zoom in to approximately 1mm/pixel. * aven: zoom in/out with keyboard wasn't subject to any limits - now restricted to sane values as with zoom in/out with the mouse. * print*: added --raw switch to turn of info box, scale bar, and page footer. This can be useful if you want to import the output into another application. * print*: improved output when --no-border is used. * printpcl/printdm: Added new .ini setting "font_bitmap" which allows the user to choose between alternative fonts. Current we supply "default" and "bold". * printps/printhpgl: Fixed --skip-blanks which would incorrectly skip non-blank pages on rare occasions. * cavern: added support for BackCompass and BackClino. * cavern: implemented "*units clino percent". * cavern: added "*infer exports on". Any stations seen while this is on will have the necessary *export-s inferred when accessed from outside their own survey. This allows linking a survey which uses *export to one which doesn't. It's also useful for a maze cave where so many stations can be linked to that listing them explicitly isn't desirable. * cavern: N-S, E-W, and vertical ranges now only count stations which are in underground surveys. * cavern: *infer plumbs wasn't inferring -90 to be DOWN - fixed. * cavern: *infer was giving an internal error if the argument was unknown - now it gives the correct error message. * cavern: fixed handling of omitted clino readings when OMIT is *set to be different from MINUS and PLUS (new test omitclino). * cavern: fixed a bogus warning for any station which was only used in a line of data which was rejected because of an error. * cavern: added error if the *units factor is zero (e.g. "*units tape 0 feet"). * cavern: removed the ill-thought-out and never implemented LENGTHOUTPUT and ANGLEOUTPUT quantities. * cavern: resolved mismatch between bcra5.svx and the default SDs, and the odd values in bcra3.svx. We are now interpreting the BCRA limits as 2 standard deviations (previously bcra5.svx used 3 sds, bcra3 used 3.33 sds for tape and position, and .75 sds for compass and clino, and cavern used 1 sd by default). * ChangeLog now only includes entries since the previous release (the full file is 220K or so, and of interest to very few people). MSDOS and MS Windows versions now comfortably fit on a 1.44M floppy once again. * Test suite now checks that all programs will run successfully with "--help" and with "--version". This should avoid problems such as that which broke the printer drivers in 1.0.4-1.0.6. * (Unix version): uninstalled binaries now use the path they are run with to find support files, which means SURVEXHOME is no longer required, and has been removed. Changes in 1.0.7: * print*: halted with a failed assertion in 1.0.4-1.0.6. Changes in 1.0.6: * aven: "Reverse Controls" now works as in xcaverot and caverot. * aven: free rotation mode (engage by pressing control while left dragging, exit with Delete) improved. * aven: using File->Open when a file was already loaded caused a crash if a station was "grey highlighted" in the survey tree - fixed. * aven: added hourglass for "find" operation. * aven: reenabled loading of files by drag-and-drop (accidentally disabled in 1.0.4 and 1.0.5). * aven: improved handling of flat surveys (e.g. output of extend, surveys with no clino information). * aven: surveys with stations but no legs no longer cause the labels and crosses buttons to behave oddly. * aven: removed quite a bit of unused and superfluous code. * Spell-checked documentation. Changes in 1.0.5: * Fixed bug in img_open_survey() which could cause a crash if you tried to open an unrecognised file (i.e. not .3d, .pos, .plt, or .xyz format). * North and East were the wrong way round when reading in .plt files. * cad3d: Improved .plt file output a little - there's probably enough file structure for Compass to read them now. * Documentation updates. Changes in 1.0.4: * extend: previously only kept one name for an equated group of stations in the extended .3d file; now keeps all the names. * cad3d: if an output filename is given, use its extension to pick the default output format. * aven: movement with keyboard is now accelerated by Shift as in caverot. * print*: --no-borders fixed to work as documented; --no-cutlines added to turn off the dashed lines where pages join on multi-page printouts. * aven: tracked down two uninitialised variables which seems to fix the failure to load a survey on startup which some people have been experiencing on Microsoft Windows. * aven: code cleaned up - should improve performance a little. * img routines: img_rewind() now returns a value indicating success/failure. * Improvements to .plt file reading, notably that distances in the file are now interpreted as being in feet rather than metres. Also .plt files should now be recognised even with a different extension, and we cope with an odd special case better. * Added support for reading CMAP XYZ files. There are two variants of these - the "shot" format is fully implemented, the "station" format currently just reads the station names and positions - the legs are ignored (sadly the sample files I have do not match the format specification). * (MacOS X version): aven: aven now builds on MacOS X - we just need to sort out packaging now... * (MSDOS version): upgraded graphics library used to Allegro 4.0.1. * Documentation updates. Changes in 1.0.3: * aven: you can now select distances to be displayed in feet (or miles when you zoom right out) instead of metres, and angles to be in grads instead of degrees. * aven: show altitude of mouse pointer when in elevation view. * cad3d: fixed bug which caused --plt to crash on some platforms. * print*: added "Printing to `XXX'..." message to say where output is being written. * Updated French translation; minor updates to other translations (mostly sorting out clashing menu shortcuts in aven). * (Unix version): assorted portability tweaks. Changes in 1.0.2: * printdm/printpcl/printwin: take notice of font_size_labels setting in print.ini etc. * cavern: Topofil can now be used with DIVING and CYLPOLAR styles; TOPOFIL style is now synonymous with NORMAL. * cavern: *INFER EQUATES and *DATA TOPOFIL now work together correctly. * cavern: *FIX with 3 standard deviations but no covariances now works. * (MacOS X version): command line programs now build. We're working on Aven. * Updates to the Catalan and Spanish translations. * xcaverot: documented environmental variables XCAVEROT_INDICATOR_RADIUS and XCAVEROT_FONTNAME. * cad3d: added --plt option to produce crude approximation to Compass .plt files - should be good enough for reading into Carto. * img library enhanced to allow Compass .plt files to be read as if they were .3d files. Changes in 1.0.1: * (MS Windows version): printwin: fixed sizes of cross and page alignment ticks. * Updates to the Portuguese and Italian translations. Changes in 1.0.0: * Fixed --survey option supported by many programs which was broken in 0.99. * aven: altered colours of "fixed points" and "entrances" buttons to match the coloured blobs used to indicate them. * (MS Windows version): aven: changed current point highlighting in the survey tree to use a light grey background rather than bold (bold causes the text to "wriggle" as the highlight runs up or down). * (MS Windows version): file icons now have transparent backgrounds. * survex: removed conversion wrapper - you should use "cavern file.svx" instead of "survex file.svx". * (Unix version): GCC 2.95 sometimes fails with an internal error when trying to compile gfxcore.cc - if it does, the Makefile will now try recompiling with a lower optimisation level. * (Unix version): when doing an "in directory" build from source, the HTML manual is now installed in its own subdirectory as when doing a non "in directory" build. * German translation now completely up-to-date. Changes in 0.99: * Fixed bug in .3d file reading code which would incorrectly reconstruct the survey hierarchy in rare cases. * (MS Windows version): aven: fixed redraw problem for "N found". * (MS Windows version): minor tweaks to .err, .pos, and .svx file icons. * (Unix version): aven: Highlight of current station restores old background colour correctly rather than assuming it's white. * aven: Resolved a number of menu shortcut clashes. * (RISC OS version): fixed automatic detection of language. * cavern: improved error reporting from *data; better handling of some incorrect usages of *sd and *units. * Italian translation updated. Changes in 0.99-prerelease9: * aven: Side Panel can now be dragged or toggled shut and then reopened again; double-clicking on the divider now maximises the survey window rather than the side panel. * aven: .3d files can now be loaded using "drag and drop" from MS Windows Explorer, and X filemanagers which support XDND (e.g. Konqueror). * aven: fixed problems with selection handling in survey tree. * aven: Escape cancels distance measuring line; suppress distance measuring line during auto-rotation and animated tilting. * aven: entrance blobs now green to distinguish them from stations matching search. * aven: problems with dragging scalebar fixed. * (MS Windows version): aven: Loading file on start-up now works! * (MS Windows version): aven: Delete now works in the search box. * (Unix version): aven: Highlight current station in tree with grey background (don't seem to be able to use bold like we do on MS Windows). * cavern: Fixed handling of interleaved nosurvey data. * cavern: Diving and cylpolar styles now take DEPTHCHANGE where they used to take DZ. * (MS Windows version): Installer now uses a different compression method (bzip2) which reduces the download size by about 5% (and should help keep the installer small enough to fit on a 1.44M floppy). Bzip2 is a little slower to uncompress, but not appreciably so on the machines I've checked it on. * (MS Windows version): Should now install without errors for a non-admin user on MS Windows NT/2000/XP. * (MS Windows version): Installer should now allow installation on NT 3.51. * Updated manual (notably added documentation for interleaved data styles). * German and Brazillian Portuguese translations updated. Changes in 0.99-prerelease8: * aven: Ctrl + Arrow keys is now the preferred way to rotate and tilt (easier to remember than "C"/"V" and "'"/"/"). * aven: survey pane now gets initial focus so you no longer have to click on it before key presses are recognised. * (MS Windows version): aven: fixed problems with some keys being impossible to enter in search box, or not being recognised in survey pane. * (MS Windows version): aven: wxWindows messages files were missing. We now include them for languages which Survex also supports. * (MSDOS version): caverot: Shift and/or Ctrl + Arrow keys now works. * aven: Close button in About box is now always right in the bottom right corner. * Display copyright symbol rather than (C) where the current character set allows it. * (MSDOS version): caverot: default to 320x200 when running under Microsoft Windows 2000 and XP as we already do on NT. * (MSDOS version): fixed problem when running on DOS outside MS Windows. * (MSDOS version): detect current codepage rather than assuming it's 850. We now support codepages 437 and 850 (the common ones) - for other codepages we fall back to using 7-bit ASCII. * (Unix version): aven: now compiles cleanly with GCC3.0. Changes in 0.99-prerelease7: * (MS Windows version): aven was missing from 0.99-prerelease6 (if you installed over an old version you'd have kept the old aven). * caverot/xcaverot: Ctrl + Arrow keys is now the preferred way to rotate and tilt (easier to remember than "C"/"V" and "'"/"/"). * xcaverot: Shift-ed movement keys now work faster as in caverot. * cavern: fixed *calibrate depth/todepth/fromdepth/dz and *units dz to work in data styles diving and cylpolar. * cavern: fixed handling of malformed *data commands. * Various documentation clarifications. Changes in 0.99-prerelease6: * aven: fixed bogus lines caused by coordinate wrap-around; fixed problem in repeated zoom with [ or ]; tweaked layout and auto-sizing of left panel; station search now case insensitive; regexp search enabled; suppressed message box when wxWindows doesn't support the language Survex is set to use; fixed obscure crash in search highlighting; added "rubber band" between measured stations; Improved choice of menu short-cuts in translations. * (MS Windows version): don't include plain text versions of docs; fixed default action for 3d files to be "Open". * (MSDOS version): include text docs. * cavern: more intelligent and less verbose reporting of errors in nested included files (inspired by GCC 3.0). * cavern: improved reporting of syntax errors in survey data. * print*: improved reporting of invalid scales; interpret a single number less than one as the scale in the obvious way (so "0.001" means "1:1000"). * print*: "--crosses" no longer prevents "--station-names" from working. * print*: if running interactively, prompt for what elements to plot when run so MS Windows users don't have to resort to the command line. * Improved documentation for print.ini; Other minor documentation updates. * (Unix version) configure auto-probe for wxWindows updated to cope with wxWindows version 2.2.8 (still works with older versions too). * Diving and cylpolar styles now accept dz (change in depth) rather than requiring absolute depths and taking the difference. Changes in 0.99-prerelease5: * aven: improved initial sizing of window; "Toggle rotation" toolbar icon now works; handle files with only stations better; presentation code disabled for 1.0; releasing mouse over menubar now ends drag; don't highlight hidden stations; accelerator problems fixed; find now works. * (MS Windows version) aven: fixed crash on File/Open when a file was already loaded. * cavern: After *solve, reused points are no longer written to the .3d file a second time. * cavern: Warn that the undocumented extra "omit" allowed by *data is deprecated. * cavern: Give error if standard deviation argument to *sd isn't positive. * Consistent capitalisation of --help option descriptions. Changes in 0.99-prerelease4: * Minor improvements to manual and Unix man pages. * printps/printhpgl/printwin: --skip-blanks fixed. * printhpgl: fixed paper size for A1 landscape (was actually A2 portrait!) * (MSDOS version): graphics in HTML manual were corrupted (by being packed as text). * (RISC OS version): graphics were missing from HTML manual. * (RISC OS version and 286 DOS version): fixed programs to report themselves as part of "Survex" rather than "@PRETTYPACKAGE@". * (MSDOS version): pick a default language for messages by looking at the currently set country. * (Unix version): Improved test for whether build needs librx - before it was used if it was present, even if it wasn't needed. * (Unix version): Assorted minor debian tweaks. Changes in 0.99-prerelease3: * Documentation rearranged. Some sections which covered the same ground have been merged, and the documentation for each program is now available as a man page under Unix. * (Unix version): Fixed problem with incomplete versions being specified in debian package dependencies. * (Unix version): Fixed problems with not having librx on Linux (it's now built into libc). Changes in 0.99-prerelease2: * aven: fixed bug which caused occasional crash during mouse movement; station identifying didn't work after a resize until the survey was moved. * Asking for messages in language en_GB now tries language en as it was meant to. * printps/printhpgl/printwin: fixed typo which made --skip-blanks get it wrong in some rare cases. * (Unix version): Added man pages for 3dtopos and sorterr. * (Unix version): More minor tweaks to debian packages. * Include images with HTML documentation; other minor documentation changes. Changes in 0.99-prerelease1: * Major clean-up of Survex Manual; renamed from "svxdocs" to "manual". * Text documentation converted to HTML; BUGS and TODO merged, ZOMBIES removed. * Include HTML documentation overview page and manual in all versions (was only included in MS Windows before). * aven: added new functionality: toolbar, side panel with survey tree, find station, measure distance between two stations, click on station to centre. * aven: can now create presentations consisting of a set of views with movements between them. Useful for using aven as a "slide show" in a conference talk. * aven: handles loading file from command line better. * cavern: added error checks for "*flags" (with no arguments) and "*flags not". * cavern: you can now specify optional covariances to *FIX. * cavern: parser fixed to recover from errors as intended in a few situations where it was failing to. * cavern: implemented covariances for diving data. * cavern: added "cylpolar" data style - similar to diving, except the tape is measured horizontally rather than along the slope of the leg. * cavern: complain about *export-ing or *entrance-ing a station which is never used. * cavern: complain about *export after a *begin without an argument. * cavern: use *title only if at top of survey tree, else generate title from filename(s). * cavern: removed dummy *lrud command which was added for tunnel but isn't used by tunnel. * cavern: round coordinates to nearest cm when writing .3d file. * cavern: fixed reporting of node stats for stations fixed with error estimates. * cavern: no longer generate a .inf file - the .log file generated by the --log option makes the .inf file obsolete. * cavern: only apply special pathname handling to filenames in *include, not those on the command line. * cavern: *date now checks its argument. It expects an ISO format date (e.g. 2001.09.13) or range (e.g. 2001.09.12-2001.09.13). For cases where the exact date isn't know, the day and month can be omitted - e.g. 2001.09 and 2001 are also valid. * cavern: --new-format renamed to --chasm-format. * print*: If restricting to a subsurvey, use that survey name for the title of the printout. * print*: Detect .3d files produced by extend and handle them more appropriately (don't ask for view or bearing, and modify info box on printout). * print*: --skip-blanks now works on printwin/printpcl/printps; --skip-blanks now forces --no-border. * printps: thinner lines by default (0.1 points rather than 0.5). * printdm: added --calibrate option to print calibration page; if there's no calibration in the .ini file, refuse to print (apart from calibration pages) rather than printing to the wrong scale. * printwin: removed --output option - there is no output file. * extend: wasn't picking start station as documented - fixed and also enhanced to try to find an entrance with legs first. * survex: conversion wrapper doesn't use --output unless it is actually needed, and displays corresponding cavern command line, and (if appropriate) file. * cad3d: added --reduction option (from Leandro) which allows sketch output to be scaled down (default scale is 1:500); grid in sketch file is now visible by default; default output now goes in the current directory. * cad3d/3dtopos/sorterr: delete output file if there's an error writing to it. * 3dtopos: minor improvements to sort order. * hto2svx, svx2hto: Removed HTO support - Survex appears to be the only released software to ever have provided support, and an exchange format that nobody else supports is useless. * xcaverot: report more detailed error when .3d file can't be loaded. * `program --version' now works even if message file can't be found. * (Unix version): Fixed attempt to load messages from "DEFAULTLANG.msg" if both SURVEXLANG and LANG were unset. * Much more rigorous checking for operating system errors when reading and writing files. * (RISC OS version): query Territory module to find currently selected language, and use that for messages. * (UNIX version): man pages now have "Survex " on them; fixed minor flaws in man pages. * Distinguish between a "bad" .3d file and one which has a newer revision of the format than we understand. * img library can now read .pos files as if they were .3d files with just stations in, so all programs which can read .3d files can also now read .pos files. * Expanded testsuite further. * French, Brazillian Portuguese, and German translations brought almost completely up-to-date. * (Unix version): Lots of little improvements to debian packages (mostly from Wookey). Changes in 0.98: * (MS Windows version): New icons for .svx, .pos, and .err files. Tweaked .3d icon to work better in 256 colour modes. * Added tests for `*infer plumbs' and `*infer equates'. Changes in 0.98-prerelease6: * printwin: fixed new bug introduced in 0.98-prerelease4 which caused an internal error. * printwin: exit cleanly if no printer drivers are installed. * aven: surface surveys weren't being drawn when viewing from above (bug introduced in recent version). * aven/caverot/xcaverot/print*/cadgen/extend/diffpos/3dtopos: --survey command line option once more trims specified prefix from station names like it did in xcaverot/caverot in 0.98-prerelease4. * sorterr: Added --replace option to sort the .err file and replace the original with the sorted version (for use by MS Windows file associations); cope with empty .err file. * cavern: Added --log option to send output to a .log file. * cavern: --quiet no longer suppresses node statistics. * extend: give up if the .3d file is truncated or corrupted part way through. * (MS Windows version): sorterr.exe and 3dtopos.exe were missing; improvements to documentation; assorted fixes and improvements to file associations. * print*: reduced memory usage. * Fixed dropping of first character of survey station names when reading old .3d files. * (MS Windows version): aven.exe wasn't rebuilt for 0.98-prerelease - fixed the dodgy script. Changes in 0.98-prerelease5: * aven/print*/cadgen/extend/diffpos/3dtopos: Added --survey command line option to restrict the operation of the command to a sub-survey in the .3d file. * aven: initial scaling now ignores unused fixed points (unless there are no legs at all), and scales survey so it fits inside window. * aven: can now load a survey with no legs, only stations. * aven: --version now works, and --help produces more helpful output. * cavern: fixed bug with eating first character of line after interleaved data; corrected line numbers in some situations involving interleaved data. * cavern: fixed problem with points fixed with errors. * cavern: *title without quotes now stops at a comment; *title with no argument no longer allowed - use `*title ""' if you really mean to set an empty title. * Minor documentation updates. * 3dtopos: Fixed bug which resulted in station names and coordinates getting mismatched; output now defaults to current directory. Changes in 0.98-prerelease4: * diffpos: list added and deleted stations in sorted order; better error reporting. * 3dtopos: removed hardcoded limit on number of stations (was 100000); better error reporting. * Further tweaks to charset handling - look at LC_* as well as LANG; Check GUI codepage under MS Windows. * cavern: Allow *copyright/*date/*instrument/*team/*title between *begin and *export. * cavern: Fixed typo which prevented *instrument from being recognised as a valid command. * cavern: removed option to produce ascii .3d files. * cavern: on error, remove any existing .inf file for consistency with .3d and .err files. * cavern: interleaved nosurvey data style now works; nosurvey legs now count as a "use" of a fixed point. * cavern: give at most 5 warnings about use of any particular deprecated feature. Otherwise processing an old dataset just gives an avalanche of warnings which buries any other warnings or errors. * cavern: implemented `*infer equates'. * aven: if a .3d file is truncated or corrupted part way through, aven would previously load part of it without complaint. Fixed to complain and not load anything. * printwin: fixed problem where it hung when waiting for input. * print*: Added --output command line option to override the output setting in the .ini file (ignored by printwin). * .3d files now store prefixes for legs (the prefix is taken from the "from" station of the leg); Station names and leg prefixes in .3d files are now stored compressed. Despite now storing prefixes for legs, .3d files are now typically 25%-33% smaller than before. * xcaverot/caverot: Added --survey command line option which restricts the view to a sub-survey in the .3d file. e.g.: "caverot --survey 161.dream all.3d" * (MS Windows version): added explorer bindings for sorterr. * cavern/xcaverot/sorterr: fixed --help output to include long options. * Minor documentation updates. Changes in 0.98-prerelease3: * cavern/3dtopos: cavern no longer produces .pos files - they're mostly useful for hand plotting and are larger than the corresponding .3d files so most of the time they slow processing and then clutter up the disk. A new utility 3dtopos produces a .pos file from a .3d file, and has the added benefit that it sorts names with numbers in numerically (i.e. 2 before 10). * diffpos: the arguments can now be .pos or .3d files, or one of each. * cavern: improved parsing of unquoted *include/*title strings - used to end at the first literal space; now they end at the first BLANK character (space, tab, and comma by default). So the odd case of an unquoted string with commas or tabs will require quotes to be added. * All versions have been missing RTF, text, and PostScript versions of the documentation in the previous 2 prereleases. * cavern: Fixed articulation code wasn't quite. * cavern: an empty label was being added to the .3d file for a station fixed with standard deviations. Such labels are also now ignored by img on read-in. Changes in 0.98-prerelease2: * (MS Windows version): Fixed "Open" on a .3d file to open in aven rather than converting to a DXF. "Convert to DXF" now appears as a separate menu item. * cavern: Fixed bogus errors about matrix not being positive definite. * cavern: Fixed bug in articulation point code which could result in a traverse "exploding" in certain situations (introduced in 0.95). * cavern: Check for chunks of survey not connected to a fixed point is now done earlier on (which simplifies quite a bit of the network code). * xcaverot: Disabled "legs" and "surface" buttons in --pda mode - they make the button bar too wide. Changes in 0.98-prerelease1: * Covariance matrices are symmetric - now only store 6 of the 9 entries. Typically uses 10% less memory and is 15% faster. * caverot: adjust to speed of machine/size of survey on initial draw, rather than on first action from user. * (MS Windows version): now handle oe-ligatures. * (Unix version): discover character set by looking at $LANG. * (MS Windows version): discover character set from Windows. * Transliterate accented characters that can't be represented in the current character set. * Added support for Latin9 (iso-8859-15) character set. * printps/printpcl/printwin: Improved handling of accents on printouts. * aven: added optional grid; dashed surface survey now the default; Indicators moved to submenu of View menu. * aven: reporting errors in a message box wasn't working (wxWindows bug). * cavern: fixed *entrance - it was trying to insist its argument was a survey, not a station. * cavern: a leg with the same station at both ends now causes an error rather than just a warning. * cavern: added station name to "station equated to itself" message. * cavern: allow interleaved data formats. * sorterr: new utility for sorting .err files by various criteria. * xcaverot: buttons now size to widest label; added --pda switch to turn off less useful buttons for use on small screens (such as the ipaq PDA). Changes in 0.97: * Unchanged from 0.97-prerelease7. Changes in 0.97-prerelease7: * Messages relating to command line options are now translatable. * (MSDOS versions): now supply self-extracting zip archives. * (MS Windows version): after running cavern, wait for a key press before closing the window. * cavern: Very quiet mode (-qq) now produces absolutely no output if there are no errors or warnings. Changes in 0.97-prerelease6: * (MS Windows version): aven: if there are problems opening the message file, report them in a message box rather than printing text which the user will never see. * cavern: invalid data lines weren't being counted, so you'd get incorrect line numbers reported for further errors and warnings. * cavern: Added a SPLAY flag for indicating splay shots in chambers and large passages. * extend: ignore surface legs and splay legs; preserve duplicate flag on extended legs. * print*: if surface data isn't being plotted, ignore surface survey stations too, and select page layout based on underground data only. * (MS Windows version): get default language from Windows. * cavern: added *entrance command for indicating cave entrances. * Added "surface", "underground", "exported", "fixed", and "entrance" station flags to 3d format. * (DOS version): caverot: fixed bug Brian Clipstone reported where caverot would lock up when trying to plot a label off-screen. * xcaverot/caverot: tweaked sense of a few controls to be consistent with each other and with aven. * Strip leading '\' from station names read from old .3d files. * cavern: Better reporting of error stats involving a station fixed with errors. * aven: allow highlighting of fixed, exported, and entrance stations. Changes in 0.97-prerelease5: * survex: conversion wrapper now only creates __svxtmp.svx file if it has to - simple cases (such as "survex example.svx") don't need one; also always print warning that user should be using cavern instead. * Minor updates to documentation. * Survey stations names are no longer displayed with a leading '\' - this doesn't make sense now that root is deprecated, and didn't make much sense before to be honest. * cavern: *fix with two standard deviations (horizontal and vertical) was being rejected - fixed. * cavern: Fixed bug with station "\" appearing in the .err file for a station fixed with error estimates. * (non-Unix versions): remove path and extension and lower-case program name for use in error reporting. * (MS Windows version): added documentation overview page to HTML help. * Removed 255 character limit on station names in .3d and .3dx files. * caverot: overlapping label code wasn't allowing enough for vertical overlap. * cavern: after a bad *data command, ignore survey data until the next valid *data command. * printdm/printpcl: exit cleanly if bitmap font file is missing. * cavern: give a more helpful error on empty "*export" or "*prefix". * xcaverot: Fixed display of surface legs and related minor issues. * print*: Fixed handling of surface legs; `-S' now recognised as a short-form for `--surface'. * Added test of *solve command. * cavern: Added commands *date, *team, *instrument, *copyright - currently these are ignored, but they provide a place to put data when importing/exporting, and will be processed in future versions. * (MS Windows version): aven updated to same codebase as Unix version. Changes in 0.97-prerelease4: * Updated Portuguese and German translations. * aven: Accents now work in display; suppress "wxstd" warning box for English; speed improvements; redesign of indicators; rescale by dragging scalebar; allow surface legs to be hidden (they are by default); now defaults to plan view; depth bar labelling improved; added caverot-like handling of flat surveys (so output from extend is locked flat). * cavern: Complain if the same name is used for a survey and a station. * cavern: Added --warnings-are-errors command line option. * caverot/xcaverot: Middle button now tilts cave by dragging rather than toggling plan/elevation. * caverot: continue setup in background while help page is displayed; "R" (Reverse Rotation) now only affects the auto-rotation - it used to affect "C", "V", "/", and "'". * cavern: unused fix point warnings now work for stations fixed with error estimates; added test cases for this. * testsuite: Enhanced many existing tests to check for warnings. * Fixed to build on Solaris with Sun's compiler. * Minor corrections to documentation and man pages. * cavern: report *export errors at the file and line where the *begin for the survey involved was as that's much more useful. * cavern: allow "-" in station names by default. Changes in 0.97-prerelease3: * (Unix version): aven: Internationalised; Fixed serious drawing bug causing incorrect rendering and segfaults; Scale bar now draggable; Depth bar tidied up; Orientation menu changes; Menu accelerators fixed; Status bar disabled (various continuing problems and it doesn't really convey much useful info anyway); About box fixes; Fixed crashes on mouse actions when no survey loaded; Improved labelling of scale bar and indicators. * Created Swiss German and "German German" sub-versions of German translation. * (DOS version): caverot: fixed slight underallocation of memory which probably caused the bug Brian Clipstone reported. * cavern: Improved reporting of missing *export-s; added 2 more *export tests. * No longer trap SIGINT (Ctrl-C) or SIGTERM (Ctrl-\ on Unix) as we can't do anything useful. * Removed support for really old language names ("fren", "germ", "ital", etc) - use "fr", "de", "it", etc instead. * (RISC OS version): support a few extra accents in messages. * "Syntax" in command-line help messages now translated. Changes in 0.97-prerelease2: * cad3d: Fixed output from `--help'; -e, -D, -S short options now work; fixed infinite loop bug. * (Unix version): aven: leaving "about" box no longer causes segfault; toggle status bar now works; N/S/E/W selects view rather than moving cave; window close now works; now have ticks on appropriate menu items; fixed problems with rendering (some legs missing!); 3d file specified on command line now loaded; fixed occasional hangs; fixed terrible slowness during rotation; implemented indicators; various other bugs fixed. * Updated translations: pt de it (and fr partially) * Added tests for most commands and various other cases. * cavern: fixed *case (correct args are PRESERVE/TOUPPER/TOLOWER) and upper/lower were swapped. * Documentation brought more up-to-date. * caverot/xcaverot: fix missing end of list marker for surface data which typically resulted in a few extra bogus surface legs appearing. * printer drivers: fixed .ini file reading routine (bug introduced in 0.97-prerelease 1). * printps: postscript file meta information now includes the date of creation, and also the name of the user running printps (Unix only). * printer drivers: improved reporting of problems with print.ini files. * (MSDOS version): fallback DPMI provider and floating point emulator were missing in 0.97-prerelease1. * Better internationalisation - select localised system messages using setlocale(). Changes in 0.97-prerelease1: * extend: fixed bug which resulted in bogus output (added regression test); produce binary rather than ASCII .3d output. * cavern: don't report error stats for articulating traverses. * (UNIX version): `make uninstall' now removes the HTML documentation. * (UNIX version): printer drivers: Look for /etc/survex/print.ini rather than /share/survex/myprint.ini * cavern: added warning that use of ROOT character ('\' by default) is deprecated; updated documentation to mention this. * cavern: added *export command to allow scope of station names to be limited. If *export is never used, behaviour is as before. * cavern: added *flags command to allow surface surveys and duplicate surveys (to be ignored when calculating the total survey length) to be indicated. * new version of 3d file format which can store flags and is slightly more compact. NB New programs can load old .3d files, but old programs can't load new .3d files. * caverot/xcaverot: allow surface legs to be hidden (they are by default) * cavern: compass can be omitted on legs in diving data to indicate a plumbed leg. In this case the tape and depth gauge readings are combined to give the length of the leg. * cavern: *begin/*prefix reentry warning now gives the original location as a separate warning so smart editors will allow you to click on it to jump to that file and line. * printer drivers: put "http://www.survex.com/" on printouts in case someone who gets a printout wants to know more about Survex. * cavern: added easting, northing, altitude added as prefered aliases for dx, dy, dz. * cavern: bug fix: "*prefix \" or "*begin \" would cause an internal error. * xcaverot: "load" button now works; bearing always shown in range 0-360; / and ' now tilt cave; `u' and `d' now switch to view from above/below; shift-ed keys now work; `o' now turns off non-overlapping labels; `ctrl-L' toggles display of survey legs. * caverot: n/s/e/w/u/d now work as in xcaverot - the previous functions they had weren't actually useful; if memory is really tight, disable non-overlapping labels rather than dying with an error. * prefer balanced quotes (`...') to unbalanced ('...') in messages. * cavern: file reading errors now treated as fatal; unattached survey error now fatal. * survex: syntax errors in command line arguments now fatal. * cavern: if there are errors, don't produce output files. * cavern: bug fix: trying to report certain errors in really long lines could cause an internal error. * 3dtodxf: renamed to cad3d since it can now produce DXF or sketch format. * aven: rewritten to use wxwindows (under Unix only so far). * printwin: new native Microsoft Windows printer driver. * (MS Windows version): new installation wizard. * Use double precision floating point to pass numbers to/from .3d file reading routines to avoid rounding problems. * cavern: change of terminology - use "reading" instead of "datum", since datum more usually means a map datum in surveying. Changes in 0.96: * (MSDOS and MS Windows versions): fixed bug in message file handling introduced in 0.96-prerelease 1 - symptoms: messages incorrectly looked for in current directory, or just printing "???" and exiting. * cavern: attempting to *include a non-existent file used to complain: "In file included from example.svx:31:" / "cavern: Couldn't open data file 'bad.svx'" - now complain "example.svx:31: Couldn't open data file 'bad.svx'". * xcaverot: cursor keys now move the 3D centre of rotation rather than just the position of the survey in the window. Changes in 0.96-prerelease4: * cavern (RISC OS version): "is this a directory" test would never say "yes". * caverot: (MSDOS version) cursor keys and delete had stopped working (due to changes in allegro graphics library) - fixed. * xcaverot: Zoom in and out with keyboard now behaves exactly like clicking on buttons; Removed unused "select" button; Fixed significant memory leak. * aven: (MS Windows version) Mark Shinwell has written a Microsoft Windows version of aven, which is better in almost every way than the directx version of caverot (and we're working to fix the few shortfalls), so we've shelved directx caverot and are now including aven instead with the MS Windows version. Changes in 0.96-prerelease3: * caverot: DirectX version for Microsoft Windows. * caverot: (MSDOS version) 640x480 doesn't work under NT either, but 320x200 does so default to that instead. * caverot: --mode-picker option now listed by --help. Changes in 0.96-prerelease2: * caverot: (MSDOS version) --mode-picker now recognised anywhere on command line (had to be last previously). * caverot: (MSDOS version) messages from Allegro library now internationalised. * caverot: (MSDOS version) don't try to get 800x600 if running under NT - try 640x480 instead. Changes in 0.96-prerelease1: * xcaverot: Improved responsiveness; can now load multiple .3d files from command line; set defaults (press DELETE) now defaults scale that which fits the whole survey on the screen. * cavern: Fixed bug in DOS and Windows versions with handling of paths containing a mixture of "/" and "\". * 3dtodxf: added "--grid" option (supplied by Leandro); output file now defaults to same name as input file but with a ".dxf" extension. * caverot: now get accents with MSDOS version. * cavern: applied patch from Leandro to fix problem with diving and topofil styles. * 3dtodxf: can now produce an elevation view with --elevation=ANGLE option. Changes in 0.95: * Put aven in a separate RPM package since it depends on a stack of libraries which not everyone will want to have to install. Changes in 0.95-prerelease7: * Disabled experimental gross-error detection code. * Now build RPMs (for RedHat Linux - may also work with Mandrake and some others). Changes in 0.95-prerelease6: * Updated all translations. * Fixed another logic error in "only mentioned once in *equate with explicit prefix" check. * Minor fixes to get MSDOS (djgpp) and MS Windows (mingw) builds working. Changes in 0.95-prerelease5: * If no stations are fixed, the first station mentioned is supposed to be. But on some platforms (e.g. x86 Linux) the second station was being used instead (regression test firststn). Changes in 0.95-prerelease4: * Fixed typo which prevented documentation from installing. * Fixed logic error in "only mentioned once in *equate with explicit prefix" check. Changes in 0.95-prerelease3: * aven: updated to compile with new cvrotimg. * More fixes for compilation problems on non-Linux UNIX platforms. Changes in 0.95-prerelease2: * Minor tweaks to some messages. * 3dtodxf: Fixed calculation of bounding box if all coordinates are negative in one or more axes. * Added Wookey's man pages - these just list the command line options and point to the HTML documentation. * Fixes for compilation problems on non-Linux UNIX platforms. Changes in 0.95-prerelease1: * cavern: *fix with error values (one for same all round, two for horizontal and vertical, three for x, y, z) * Fixed RISC OS not treating "foo." as a directory * Improved behaviour when sgmltools not installed * cavern: Merged patches for generating .3dx files for chasm * Miscellaneous code tidying * Moved unresolvable issues from BUGS to ZOMBIES * cavern: Fixed articulation code bug (handling of some cases of components with multiple fixed points); added regression test * cavern: "*begin" / "*end foo" now gives more explicit error * cavern: More work on gross error detection * xcaverot: you can now set environmental variables XCAVEROT_FONTNAME, XCAVEROT_INDICATOR_RADIUS * extend: now starts from highest station with only one leg. If no such station exists then revert to the previous behaviour of starting from the highest station (but complain if we have no legs at all). * cavern: line numbers now correct for .svx files with Mac style lineends * cavern: improved error reporting in several cases * caverot: on RISC OS now fall back to using 2 or even just one screen bank if we can't find a mode where we can create 3 banks * cavern: added data styles "TOPOFIL" (like tape/compass/clino but with a counter instead of the tape), "CARTESIAN" (dx, dy, dz), and "NOSURVEY" (for unsurveyed connections between surveys) * cavern: can now suppress "unused fixed point" error on a station by station basis by using: "*fix reference " * cavern: new command "*require " to allow survey data to specify the minimum survex version required to process it * print*: now search multiple print.ini files so you can override settings in the shipped file rather than having to modify it. Search order is: ~/.survex/print.ini (unix only), /share/survex/myprint.ini, /share/survex/print.ini * Changed xcaverot rotation/zoom to be the same way round as caverot * diffpos, extend, xcaverot, caverot: Now use cmdline library to parse command line arguments and so support --help, --version, etc. * hto2svx, svx2hto, and survex wrapper now all support --help and --version * `configure --disable-aven' now disables building of aven * caverot: on RISC OS fall back to using 2 or just 1 screen bank if there's not enough video memory allocated for 3. * Documentation brought more up to date. * If a station is only referenced once, and that reference is in a *equate and with an explicit prefix (e.g. "*equate 1 possibletypo.6"), a warning is issued. Changes in 0.94-prerelease2: * Added test for "cavern would segfault in articulate() on second *solve" (bug3.svx) Changes in 0.94-prerelease1: * cavern: Fix for bug reported by Leandro - cavern would segfault in articulate() on second *solve * xcaverot: Applied patches from Leandro: fix menu buttons, keyboard shortcuts, colour of station markers, scalebar length and text display, mouse right-button "cave drag", centre-button "plan/elevation switch", zoom in/out menu button * cavern: Fixed "matrix wouldn't invert" problem with certain datasets; added regression test (bug2) * Check for sgmltools v3 (sgmltools-lite) as well as v2 * BorlandC and RISC OS config files are now regenerated when version number is updated Changes in 0.93: * Quick fix for problem with finding articulation points in particularly contorted components with 2 or more fixed points - for now each component is solved separately, but they aren't split at articulation points * Turned off some debug code left active by mistake * Test suite was missing a file Changes in 0.92: * 3dtodxf's DXF output can be opened by AutoCAD 13, 14 and 2000, as well as ArcView 3.x. Adobe Illustrator 8.0, and CorelDraw 8. [checked by Mike Yocum] * HTML documentation now has meaningful filenames (no more "x532.htm") * RISC OS documentation zip file now has correct filetype for Postscript version of docs * RISC OS binary distribution now includes !CLIcon GUI front end * Changed naming scheme for .zip archives to be more consistent * Added OLDNEWS with details of user-visible changes in much older versions Changes in 0.92-prerelease6: * Windows and MSDOS builds were missing 3dtodxf.exe * Updated French, German, Portuguese, and Italian translations * Windows archive for pre5 contained Linux binaries! (except caverot) Changes in 0.92-prerelease5: * printps: now allow separate font sizes (and fonts) for station labels and other text * print*/print.ini: allow different outputs to be specified for each operating system with sensible defaults in print.ini * print.ini: major overhaul of layout to improve readability * Another regression test case added * HACKING: new file containing nuggets of wisdom for developers * Added default s.d. for level legs * Fixed network reduction bug (undoing network simplifications didn't always restore removed stations to the station list) * Catch *begin with no matching *end * Catch *begin and matching *end in different files * Updated Portuguese, French, and German translations [Leandro/Eric/Gerhard] * Wrong warning was being given for `*equate 1 1' * xcaverot: fixed "step" button and keys * caverot: reduced exe size down to slightly more than 0.91 (allegro issue) Changes in 0.92-prerelease4: * cavern: "*infer" wasn't working due to internal token value mismatch * Short usage information now directs user to "--help" * print.ini: Tidied up comments about font size and line width for printps * printps: Line width now set correctly for all pages with ghostview * cavern: Fixed problem with highly *equate-d nodes (introduced in 0.92-pre1) * aven: Fixed redraw errors; enabled splash screen [mark] * cavern: Fixed deltastar network transformation to handle covariances * More test cases added to catch any regressions of recent bug fixes * Include alien.pl in distribution (helper script for compiling with BorlandC and on RISC OS) * cavern: tests for zero now use epsilon related tests, apart for on RISC OS where the FP emulation appears to cut corners and give slightly incorrect answers. * Now include Postscript version of documentation * HTML documentation now uses ".htm" extension instead of ".html" to placate crap unzip programs which can't handle anything over 8.3 * NEWS now describes user-visible changes; ChangeLog is now autogenerated from the CVS commit messages Changes in 0.92-prerelease3: * xcaverot: Switching between plan and elevation now smoother * xcaverot: Fixed poor handling of keypresses when rotating * xcaverot: Reenabled buttons and made plan/elev button work properly * aven: New experimental gtk-based xcaverot replacement Changes in 0.92-prerelease2: * Can now just run individual tests from test suite * cavern: Turned off stray debugging output in matrix.c * Improved various bits of debug code * cavern: Fixed minor problems when compiling with NO_COVARIANCES * In test suite, cavern failing now causes test to fail immediately * Include riscos/config.h.in and borlandc/config.h.in in distribution * cavern: Fixed bug when finding articulation points in a component with more than one fixed point Changes in 0.92-prerelease1: * caverot: Help screen incorrectly documented tilt as '/' and ':' - actually it's on '/' and ''' (single quote) * caverot: Previously assumed shift-singlequote is '@' which is true on UK keyboards but not on US keyboards. Quick fix: check both '@' and '"' for now. * "printps -b" now reports "option requires an argument" (used to segfault) * Updated printer driver command line options in manual * caverot: Fixed shift key to accelerate movements in allegro version * cavern: Disabled articulation point code (for now - there's a bug) * cavern: If a datafile isn't found, now try a lowercase version before giving up (so on Unix you can now process a DOS dataset by unpacking with "unzip -L" to force filenames of unpacked files to lower case) * diffpos: Fixed a couple of bugs; also now exits with status 1 if differences were reported * Added some tests for cavern and diffpos - more to follow * cavern: Covariance code now working and enabled by default * cavern: When equating two existing stations we need to replace the pos of one with the pos of the other. We used to look down the whole station list, now we just look at neighbouring nodes (noticeable time saving for large networks with many equates) * cavern: Renamed truncate function in commands.c to avoid clash with library truncate function on FreeBSD * cavern: Warn that *prefix and *default are deprecated * Fixed obscure problems when configure is rerun with a different prefix * If the environmental variable SURVEXLANG isn't set, LANG is now check before resorting to the default. LANG is a standard way to specify the language for GNU applications - SURVEXLANG is still useful as a way to specify an alternate language if Survex doesn't support your prefered language. * Cured superfluous copy of svxdocs in doc/svxdocs in source distribution * RISC OS and BorlandC builds now track copyright message and version number automatically * If LANG is set to "en_US", treat it as if it were "en-us" * xcaverot: Merged in changes from John Pybus and Mark Shinwell * cavern: *solve followed by some entirely unconnected survey now caught cleanly (used to hit an assert) * cavern: Corrected component and loop counts when there's hanging survey around Changes in 0.91: * Fixed problem with message files with accented characters * Fixed RISC OS specific problem if SURVEXLANG was set * xcaverot: Fixed to centre and scale cave on startup * Removed superfluous containing directory for RISC OS documentation Changes in 0.90: * caverot: MSDOS Allegro mode-picker now reappears if an invalid mode is chosen (caverot used to unhelpfully exit in this case). * caverot: Fixed cursor keys and delete in MSDOS Allegro version * fixed problem with US English messages * text files in DOS/Win32 zips now have ".txt" extension and DOS end-of-lines * 3dtodxf: Leandro Dybal Bertoni has made major improvements to DXF output * caverot: Right and Middle mouse button functions were swapped under RISC OS * caverot: BorlandC (pre-386) version wasn't erasing screen between redraws * HTML version of documentation now has a hyperlinked table of contents Changes in 0.90 beta3: * cavern: output files now go in current directory rather than the same directory where the first .svx file is found. You can set a different directory using the "--output" command line option, which can point to a directory or a file. * cavern: "*truncate off" rather than "*truncate 0" * survex: added wrapper to convert survex invocation into cavern invocation * hto filters moved into separate subdirectory of source distribution * cavern: fixed bug which included stations with 4 or more connections in the .3d file several times * added "miniam.pl" which generates makefiles for BorlandC and RISC OS * printdm/printpcl: weren't showing text - problem with new format font file * check for old SURVEXLANG codes (engi, fren, germ, ...) now case insensitive Changes in 0.90 beta2: * xcaverot: Fixed to handle > 2048 stations/legs * Spanish and Catalan translations updated (only French left to do) Changes in 0.90 beta1: * German, Italian, and Portuguese translations updated * Linux binaries now supplied (x86 RPM) * Documentation brought largely up to date Changes in 0.90 alpha5: * cavern: comment parsing fix * cavern: network reduction bug fixed * new messages extracted for translation * printps: much smaller postscript output * printps: real circles in postscript output * nicer infobox on printouts * caverot: help page improved * scale units on printout bug fixed Changes in 0.90 alpha4: * printps: made postscript bounding box slightly larger * printps: tweaked postscript output to reduce size (5% smaller for Kaninchenhoehle) Changes in 0.90 alpha3: * fixed bogus "Error writing printer output" message from printer drivers * minor cosmetic fixes to printer drivers * printps: added postscript bounding box * printps: fixed extra "%"s in postscript output * cavern: removed stray debug messages added in 0.90 alpha2 Changes in 0.90 alpha2: * cavern: fixed memory allocation bug (affected *include and *title) Changes in 0.90 alpha1: * cavern: Halt after 50 errors to save swamping user * now use GNU getopt to parse command line options * cavern: -f and @ removed * cavern: -n, -t and -u replaced by *-commands * source code tidied up considerably * new format message files - now internally use unicode (in UTF-8) and should be faster and smaller * new format font file for printdm/printpcl (faster and smaller) * cavern: GCC format error/warning messages to allow clicking on messages to jump to the problem line in editors which support it (e.g. GNU emacs and jed) * Now uses GNU automake under Unix which makes my life a lot easier and also provides "make install" * xcaverot: now checks for failing to open the X display Changes in 0.81: * survex: Network reduction bug fixed (fix carried back from 0.90 development) Changes in 0.80: * Added ChangeLog * DOS binary distribution now includes files: BUGS NEWS TODO ChangeLog * Cross-compiler build for DOS now has debugging information stripped from .exe files once more, so they are rather smaller * Sources now include configure.in for those wanting to do major development work * Unix versions now build use GNU autoconf - to build just unpack, run "./configure" then "make" * Messages file now represents accents like in HTML (e.g. é for é) * caverot: fixed up standard DOS (allegro) version to work much better. In particular, it will now try to choose a video mode for itself (use --mode-picker at the end of the command line to get the mode picker), and keyboard and mouse initialisation problems are cured * survex: You can now use DOS or UNIX style filenames (/ or \ for directory separator) on any platform and they will be translated to the native format for your OS. This makes datasets much more portable. * survex: "Unique" option changed to "Truncate" and now truncates names if set * Removed artificial limit on survey station name length (was 12 characters per prefix component) * Many other minor changes Changes in 0.72: * Expiry timeout removed from all programs Changes in 0.71: * printdm: Native Printer support for Cannon BJ printers. * caverot: DJGPP version for use of more than 640K * xcaverot: Updated to have most of the features of Caverot (non-overlapping labels, scale bar & tilt/direction indicators) Changes in 0.70: * Language support for Catalan, Spanish, and Italian added * caverot: tilt indicator added * caverot: constant speed rotation (e.g. for small caves on fast computers) * caverot: Smooth plan <-> elevation transitions on faster machines * caverot: Two files can be read in and displayed in different colour (eg cave and surface data) * caverot: Extended memory version so big datasets can be displayed on DOS version * Printer Drivers: INI file used instead of multiple configuration files. * Printer Drivers: Defaults set-able for all print settings * Printer Drivers: Option to print tilted plots * printhpgl: now has origin in centre of page option (and is default) * printdm/printpcl: Printer font made ISO-8859-1 compatible * Printer Drivers: Dotted borders to facilitate cutting to size with scissors * Printer Drivers: Scale bar length limited to save time on large plots * survex: If adjusted tape is negative then warning generated * survex: User-definable characters for input (e.g. for odd characters in imported station names) Changes in 0.62: * printdm: bug-fix: a graphics postfix setting had been added to dm.cfg, but if this was not used then printing would go wrong * printpcl: added an option for printers that do not understand the PCL Vertical Tab command - see PCL.cfg Changes in 0.61: * Includes a new version of caverot that arranges the labels so that they don't overlap. Changes in 0.60: * French and German translations greatly improved * survex: Survey grades now supported * survex: *calibrate, *data, and *units enhanced in a backwards compatible way * survex: survey network is now split at articulation points (faster/less memory) * survex: Omitted clino readings give a vertical sd of tape/sqrt(10) * survex: filenames with spaces are now supported - just put them in quotes ("") * diffpos/3dtodxf: improved and made more robust * caverot: "sliding point" code improved to work even in really extreme cases * caverot: added a "compass" * caverot: memory usage improved, so it now copes with larger files * And a host of more minor improvements and bug-fixes survex-1.4.4/config.h.in0000644000175000017500000001750414367066626012047 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Copyright Message for Aven */ #undef AVEN_COPYRIGHT_MSG /* Copyright Message for Aven in UTF-8 */ #undef AVEN_COPYRIGHT_MSG_UTF8 /* For old systems which don't define it themselves */ #undef CLOCKS_PER_SEC /* Version number of package (comma-separated) */ #undef COMMAVERSION /* Copyright Message */ #undef COPYRIGHT_MSG /* Copyright Message in UTF-8 */ #undef COPYRIGHT_MSG_UTF8 /* Location of platform independent support files */ #undef DATADIR /* Define to 1 if you have the `avcodec_encode_video2' function. */ #undef HAVE_AVCODEC_ENCODE_VIDEO2 /* Define to 1 if you have the `avcodec_free_frame' function. */ #undef HAVE_AVCODEC_FREE_FRAME /* Define to 1 if you have the `avcodec_open2' function. */ #undef HAVE_AVCODEC_OPEN2 /* Define to 1 if you have the `avformat_new_stream' function. */ #undef HAVE_AVFORMAT_NEW_STREAM /* Define to 1 if you have the `avformat_write_header' function. */ #undef HAVE_AVFORMAT_WRITE_HEADER /* Define to 1 if you have the `avio_close' function. */ #undef HAVE_AVIO_CLOSE /* Define to 1 if you have the `avio_open' function. */ #undef HAVE_AVIO_OPEN /* Define to 1 if you have the `av_frame_alloc' function. */ #undef HAVE_AV_FRAME_ALLOC /* Define to 1 if you have the `av_frame_free' function. */ #undef HAVE_AV_FRAME_FREE /* Define to 1 if you have the `av_guess_format' function. */ #undef HAVE_AV_GUESS_FORMAT /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 /* Define to 1 if you have the declaration of `AVMEDIA_TYPE_VIDEO', and to 0 if you don't. */ #undef HAVE_DECL_AVMEDIA_TYPE_VIDEO /* Define to 1 if you have the declaration of `AV_CODEC_ID_NONE', and to 0 if you don't. */ #undef HAVE_DECL_AV_CODEC_ID_NONE /* Define to 1 if you have the declaration of `AV_PIX_FMT_RGB24', and to 0 if you don't. */ #undef HAVE_DECL_AV_PIX_FMT_RGB24 /* Define to 1 if you have the declaration of `AV_PIX_FMT_YUV420P', and to 0 if you don't. */ #undef HAVE_DECL_AV_PIX_FMT_YUV420P /* Define to 1 if you have the declaration of `lround', and to 0 if you don't. */ #undef HAVE_DECL_LROUND /* Define to 1 if you have the `difftime' function. */ #undef HAVE_DIFFTIME /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `getc_unlocked' function. */ #undef HAVE_GETC_UNLOCKED /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the header file. */ #undef HAVE_GL_GLEXT_H /* Define to 1 if you have the header file. */ #undef HAVE_GL_GL_H /* Define to 1 if you have the `hypot' function. */ #undef HAVE_HYPOT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the `lround' function. */ #undef HAVE_LROUND /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_OPENGL_GLEXT_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENGL_GL_H /* Define to 1 if you have the `popen' function. */ #undef HAVE_POPEN /* Define to 1 if you have the `putc_unlocked' function. */ #undef HAVE_PUTC_UNLOCKED /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the header file. */ #undef HAVE_SETJMP_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Name of package (capitalised) */ #undef PRETTYPACKAGE /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* The size of `wxChar', as computed by sizeof. */ #undef SIZEOF_WXCHAR /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Use libav for movie export */ #undef WITH_LIBAV /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef int16_t /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to `unsigned int' if does not define. */ #undef size_t /* strcasecmp define for systems which call it something else */ #undef strcasecmp /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Use getc_unlocked() and putc_unlocked() where available, since they are * faster, and we don't multithread file accesses. */ #ifdef HAVE_GETC_UNLOCKED # define GETC(F) getc_unlocked(F) #else # define GETC(F) getc(F) #endif #ifdef HAVE_PUTC_UNLOCKED # define PUTC(C, F) putc_unlocked(C, F) #else # define PUTC(C, F) putc(C, F) #endif survex-1.4.4/Makefile.am0000644000175000017500000000513614206067247012046 00000000000000## Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I m4 SUBDIRS = . lib src doc tests # We never want to implicitly recurse into the vim subdirectory, but we still # want to distribute the files there. DIST_SUBDIRS = $(SUBDIRS) vim EXTRA_DIST = TODO OLDNEWS\ desc.txt desc-aven.txt survex.spec extra_bin = lib/*.msg\ lib/unifont.pixelfont extra_txt = lib/*.svx extra_files = $(extra_bin) $(extra_txt) # FIXME: need to keep in step with bin_PROGRAMS in src/Makefile.am mingw_progs = cavern diffpos dump3d extend sorterr survexport aven AUTHORS: doc/AUTHORS.htm w3m -dump doc/AUTHORS.htm > AUTHORS HACKING: doc/HACKING.htm w3m -dump doc/HACKING.htm > HACKING TODO: doc/TODO.htm w3m -dump doc/TODO.htm > TODO # Create Aven.app for macOS - run as e.g.: # make create-aven-app APP_PATH=Aven.app create-aven-app: mkdir -p '$(APP_PATH)/Contents/MacOS' '$(APP_PATH)/Contents/Resources' cp lib/Info.plist '$(APP_PATH)/Contents' printf APPLAVEN > '$(APP_PATH)/Contents/PkgInfo' for zip in lib/icons/*.iconset.zip ; do \ set -e; \ unzip -d '$(APP_PATH)/Contents/Resources' "$$zip"; \ i=`echo "$$zip"|sed 's!.*/\(.*\)\.zip$$!\1!'`; \ iconutil --convert icns '$(APP_PATH)/Contents/Resources/'"$$i"; \ rm -rf '$(APP_PATH)/Contents/Resources/'"$$i"; \ done mingw : all mingw_iss mingw_iss : survex.iss $(RM) -rf iss_tmp mkdir iss_tmp cp $(extra_txt) survex.iss iss_tmp : # so the installer can display the license cp COPYING iss_tmp/COPYING.txt cd doc && cp @HTMLFILES@ ../iss_tmp : # convert LF to CR+LF perl -p -i -e 's/\n/\r\n/' iss_tmp/* for f in $(mingw_progs) ; do cp src/$$f.exe iss_tmp ; done cp lib/icons/*.ico lib/images/*.png iss_tmp : # not needed if we build wx without threads: gzip -dc /usr/share/doc/mingw32-runtime/mingwm10.dll.gz > iss_tmp/mingwm10.dll mkdir iss_tmp/manual cp doc/manual/*.htm iss_tmp/manual : # convert LF to CR+LF perl -p -i -e 's/\n/\r\n/' iss_tmp/manual/* cp doc/manual/*.png iss_tmp/manual cp $(extra_bin) iss_tmp for f in "`$(WX_CONFIG) --prefix`"/share/locale/*/LC_MESSAGES/wxstd.mo ; do \ a=`echo "$$f"|sed 's!^.*/\([^/]*\)/LC_MESSAGES/wxstd\.mo$$!\1!'`; \ mkdir iss_tmp/$$a; \ cp "$$f" iss_tmp/$$a; \ printf 'Source: "%s\\wxstd.mo"; DestDir: "{app}\\%s"\n' "$$a" "$$a"; \ done > iss_tmp/i18nfiles.iss cp lib/*.isl iss_tmp : # Also need to reduce colour depth it appears: : # src/png2bmp lib/icons/aven_about.png iss_tmp/logo.bmp cp /usr/i686-w64-mingw32/share/proj/proj.db iss_tmp DISPLAY= wine "c:/Program Files/Inno Setup 6/ISCC.exe" iss_tmp/survex.iss mv iss_tmp/Output/*.exe . $(RM) -rf iss_tmp .PHONY: mingw mingw_iss survex-1.4.4/m4/0000755000175000017500000000000014367067014010405 500000000000000survex-1.4.4/m4/ax_cxx_compile_stdcxx_11.m40000644000175000017500000001300014213523625015454 00000000000000# ============================================================================ # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html # ============================================================================ # # SYNOPSIS # # AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the C++11 # standard; if necessary, add switches to CXXFLAGS to enable support. # # The first argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with # preference for an extended mode. # # The second argument, if specified 'mandatory' or if left unspecified, # indicates that baseline C++11 support is required and that the macro # should error out if no mode with that support is found. If specified # 'optional', then configuration proceeds regardless, after defining # HAVE_CXX11 if and only if a supporting mode is found. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[ template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; struct Base { virtual void f() {} }; struct Child : public Base { virtual void f() override {} }; typedef check> right_angle_brackets; int a; decltype(a) b; typedef check check_type; check_type c; check_type&& cr = static_cast(c); auto d = a; auto l = [](){}; // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] struct use_l { use_l() { l(); } }; // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } ]]) AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl m4_if([$1], [], [], [$1], [ext], [], [$1], [noext], [], [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], [$2], [optional], [ax_cxx_compile_cxx11_required=false], [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])]) AC_LANG_PUSH([C++])dnl ac_success=no AC_CACHE_CHECK(whether $CXX supports C++11 features by default, ax_cv_cxx_compile_cxx11, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [ax_cv_cxx_compile_cxx11=yes], [ax_cv_cxx_compile_cxx11=no])]) if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi m4_if([$1], [noext], [], [dnl if test x$ac_success = xno; then for switch in -std=gnu++11 -std=gnu++0x; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) m4_if([$1], [ext], [], [dnl if test x$ac_success = xno; then dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf for switch in -std=c++11 -std=c++0x +std=c++11; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) fi else if test x$ac_success = xno; then HAVE_CXX11=0 AC_MSG_NOTICE([No compiler with C++11 support was found]) else HAVE_CXX11=1 AC_DEFINE(HAVE_CXX11,1, [define if the compiler supports basic C++11 syntax]) fi AC_SUBST(HAVE_CXX11) fi ]) survex-1.4.4/desc.txt0000644000175000017500000000054014141575516011464 00000000000000The development branch of Survex, a software suite to process, view, and print cave survey data. Survex is cross-platform (Linux/Unix, and Microsoft Windows). It includes English, French, German, Portuguese, Catalan, and Spanish internationalisations. It can deal with extremely large and complex datasets and can read survey data from many sources. survex-1.4.4/install-sh0000755000175000017500000003577614367066627012044 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: survex-1.4.4/config.sub0000755000175000017500000010511614367066627012005 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: survex-1.4.4/lib/0000755000175000017500000000000014367067015010634 500000000000000survex-1.4.4/lib/ca.po0000644000175000017500000026273114211755350011504 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2016-06-12 08:34:00 +0000\n" "Last-Translator: Adolfo Jayme \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Fitxer" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotació" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientació" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Visualitza" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Controls" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Ajuda" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&Presentació" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Utilització" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Memòria insuficient" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Memòria insuficient (es necessiten %lu bytes més)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Memòria insuficient: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Per processar aquestes dades topogràfiques es requereix la versió %s de Survex (o superior)." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "info" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "alerta" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "error" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "Al fitxer inclòs des de %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix ja no s’utilitza - fes servir *begin i *end en el seu lloc" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Caràcter “%c†no permès al nom d’una estació (utilitza *SET NAMES per definir els caràcters permesos)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Camp que no es pot ometre" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "S’espera un camp numèric, trobat “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "Trobat “%sâ€, esperant “PRESERVEâ€, “TOUPPERâ€, o “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Error detectat al programa! Si us plau comunica-ho als autors" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Comandament desconegut “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Estació “%s†igualada a ella mateixa" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "La lectura de la brúixola no es pot ometre excepte en tirades a plom" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Lectura de longitut no es pot ometre" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Fi de línia no buit" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Hi havia %d alerta(es)." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "L'execució de l'ordre “%s†ha fallit" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Error llegint el fitxer" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Massa errors - procés abandonat" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT ja no s’utilitza - fes servir *CALIBRATE/DATA/SD/UNITS amb l’argument DEFAULT en el seu lloc" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Lectura de brúixola en una tirada vertical" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END sense el corresponent BEGIN en aquest fitxer" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN sense el corresponent END en aquest fitxer" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "L’estació “%s†no ha estat exportada des de la topografia “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "“%s†des d'una topografia inexistent “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†no pot ser a la vegada una estació i una topografia" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "Esperant un nom d’estació" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "Trobat “%sâ€, esperant “EQUATESâ€, “EXPORTSâ€, o “PLUMBSâ€" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "Trobat “%sâ€, esperant “ON†o “OFFâ€" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Sols una estació a la ordre EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Quantitat “%s†desconeguda" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unitats “%s†desconegudes" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "El sistema de coordenades és desconegut" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "El sistema de coordenades no és vàlid: %s" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "No s’han pogut convertir les coordenades: %s" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 #, fuzzy msgid "Matching BEGIN command has no survey name" msgstr "La instrucció BEGIN corresponent no te prefix" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unitats “%s†invàlides per a quantitat" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Instrument “%s†desconegut" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "El factor d’escala ha d’èsser 1.0 pel comandament DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "El factor d'escala ha de ser diferent de zero" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Configuració “%s†desconeguda" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Classe de caràcter desconeguda “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Cap dada de topografía" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Nom de fitxer “%s†referit a un directori" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "La topografia no es pas completament connectada a estacions fixes" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Estació ja fixada o igualada a un punt fixat" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "No s’ha pogut obrir el fitxer de sortida “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "La desviació estàndard ha d’ésser positiva" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Tirada amb la mateixa estació a ambdues puntes (“%sâ€) - error de transcripció?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Lectura del clino superior a %.f%s (valor absolut)" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Intent d’igualar dues estacions fixades en coordenades diferents: “%s†i “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Igualant dues estacions fixades a les mateixes coordenades: “%s†i “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Comandament FIX sense coordenades - es fixará a (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Estació fixada previament a les mateixes coordenades" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, fuzzy, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Més d’un comandament FIX sense coordenades: “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT ha de seguir immediatament a “*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Any invàlid (< 1900 ó > 2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Lectura de brúixola sospitosa" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Lectura de longitut negativa" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "La mateixa estació ha estat fixada dos cops sense coordenades" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Lectura de longitut inferior a la diferència de profunditats" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Camp “%s†no permès en aquest estil de dades “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Manquen camps per l’estil de dades “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Estil de dades “%s†desconegut" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "L’estació “%s†ja ha estat exportada anteriorment" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Camp duplicat “%sâ€" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG “%s†desconegut" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "Manca \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, fuzzy, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "L’estació “%s†sols s’ha utilitzat una vegada, amb un prefix explícit - error tipogràfic?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "Les següents estacions no són conectades a un punt fixe:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "La topografia no te punts fixats. Tanmateix he fixat %s a (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Punt fixat no utilitzat “%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Xarxa resolta per reducció - cap sistema d’equacions per resoldre." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Resolent un sistema de %d equacions" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "El camp “%s†duplica camp(s) precedent(s)" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Resolent una equació" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Distància ajustada negativa" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "La data és en el futur!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "La data final és anterior a la inicial" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "S’ha especificat una secció transversal a l’estació inexistent “%sâ€" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Les lectures de CLINO i BACKCLINO han de ser del mateix tipus" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Mes invàlid" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "El dia del mes és invàlid" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "Les versions %d a %d de format de fitxer 3d son admeses" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "Esperant un nom de topografia" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "No s’ha pogut obrir el fitxer “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "No s’ha pogut escriure el fitxer “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Utilitzacions futures d’aquesta funció obsoleta no seran informats" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "Les lectures de TAPE i BACKTAPE difereixen de %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Les lectures de COMPASS i BACKCOMPASS difereixen de %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Les lectures de CLINO i BACKCLINO difereixen de %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†obsolet - utilitza “*data %s …†en el seu lloc" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Fitxer d’imatge 3d “%s†dolent" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Data i hora no disponibles." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Error al llegir el fitxer “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Error escribint al fitxer “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Error escribint a fitxer" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Hi havia %d alerta(es) i %d error(s) - no s’han generat fitxers de sortida." #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "El fitxer “%s†te un format més nou del que aquest programa pot entendre" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Nord" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Alçat en" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Planta" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "&Alçat" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Alçat" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Planta" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Calculant estadístiques" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "Esperant una cadena de caràcters" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "Manquen arguments" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "Sobren arguments" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "FITXER" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Esborrant les seqüències terminals" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Connectant seqüències" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Calculant seqüències" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Calculant les seqüències terminals" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Simplificant la xarxa" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Calculant la xarxa" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "Trobat “%sâ€, esperant “F†o “Bâ€" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Longitut total de les tirades de topografía = %7.2f%s (%7.2f%s corregit)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Longitut total en projecció horitzontal = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Longitut vertical total de les tirades de topografía = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Desnivell total = %4.2f%s (des de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensió Nord-Sud = %4.2f%s (des de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensió Est-Oest = %4.2f%s (des de %s a %4.2f%s a %s a %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Hi ha 1 bucle." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Hi ha %ld bucles." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Temps de CPU utilitzat %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Temps utilitzat %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Temps utilitzat no disponible" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Temps utilitzat %5.2fs (%5.2fs temps CPU)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Longitut original %6.2fm (%3d tirades), reduits %6.2fm (%5.2fm/tirada). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Error %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Error N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "mostra aquesta ajuda i surt" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "mostra informació de la versió i surt" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPCIÓ" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Escala" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Prova “%s --help†per a més informació.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, fuzzy, c-format msgid "Processed: %s" msgstr "Processada en %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "Vista en planta, %s a dalt" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Alçat en direcció %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Alçat en direcció %s, inclinació %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Alçat desenvolupat" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "La topografía conté 1 estació," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "La topografía conté %ld estacions," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " unides per 1 tirada." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " unides per %ld tirades." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "node" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "nodes" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "La topografía conté %ld components connectats." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Desa el Registre" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argument numèric “%s†fora de rang" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "L’argument “%s†no és un enter" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "L’argument “%s†no és un nombre" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "Esperant “DUPLICATEâ€, “SPLAYâ€, o “SURFACEâ€" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "Esperant “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, o “SURFACEâ€" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "Esperant “F†o “Mâ€" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "L’estació “%s†ha estat referenciada per *entrance o *export pero no s’ha utilitzat mai" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Manca el BEGIN corresponent" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 #, fuzzy msgid "Survey name doesn’t match BEGIN" msgstr "El prefix no correspon al del BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 #, fuzzy msgid "Survey name omitted from END" msgstr "Prefix omès al END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Est X , Nord Y , Altitud Z)" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (color)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "Esperant dada, trobat “%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "sols carrega la sub-topografia amb prefix" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "El factor *UNITS ha de ser diferent de zero" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "No hi ha dades topogràfiques en el fitxer 3d “%sâ€" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Direcció" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "A propòsit de %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Selecciona un fitxer de terreny per veure" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Fitxers de terreny" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 #, fuzzy msgid "Select a survey file to view" msgstr "Selecciona un fitxer 3d per a visualitzar" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Fitxers Survex 3d" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Tots els fitxers" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Fitxers Survex svx" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "Fitxers CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "Fitxers DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "Fitxers EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "Fitxers GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "Fitxers KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Fitxers Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Fitxers Survex pos" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "Fitxers SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "Fitxers JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Eina per visualitzar topografies" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Aquest programa es software lliure. Pots redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General de GNU segons és publicada per la Free Software Foundation, bé de la versió 2 de dita llicència o bé (segons la teva elecció) de qualsevol versió posterior." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Sense data" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE no pot ser el primer camp" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE no pot ser el darrer camp" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Camps en més d’una línia, però sense NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "El camp “%s†ha de precedir NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE sols pot ser precedit per STATION, DEPTH, i COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "No es poden calibrar quantitats angulars i de longitud juntes" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Exporta..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "&Auto-Rotar\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Inverteix el sentit" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Vista cap al &Nord" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Vista cap al &Est" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Vista cap al &Sud" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Vista cap a l’&Oest" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&Planta" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Alça&t" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "Restablei&x la vista per defecte" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Vista" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elements" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d pàgines (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Una pàgina" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azimut" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Nom d’estació" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Noms d’estació" #: ../src/survexport.cc:141 #: n:475 #, fuzzy msgid "station labels" msgstr "noms d’estació" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Creus" #: ../src/survexport.cc:140 #: n:474 #, fuzzy msgid "station markers" msgstr "creus" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Tirades Subterrànies" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "tirades subterrànies" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Seccións transversals" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "seccións transversals" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Parets" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "parets" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Galeries" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "galeries" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Angle d’inclinació" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Marcs de la pàgina" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Llegenda" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Pàgines en blanc" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Noms d’estació\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "Galeries Tu&bulars\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 #, fuzzy msgid "Terr&ain" msgstr "Terrain (&q)" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Creus\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Graella\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "&Límits del Quadre\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "&Tirades Subterrànies\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Tirades de topografía de super&fície\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "tirades de topografía de superfície" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "Noms &Sobreposats" #: ../src/mainfrm.cc:906 #: n:450 #, fuzzy msgid "Co&lour by" msgstr "C&olour by" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "Marca les &Entrades" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "Marca els Punts f&ixats" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "Marca els Punts Expo&rtats" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Entrades" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "entrades" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Punts fixats" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "punts fixats" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Punts Exportats" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "punts exportats" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Perspecti&va" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "Parets amb te&xtura" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "&Atenúa els objectes llunyans" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Tirades S&uavitzades" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "&Mode Pantalla Sencera\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Color per &Profunditat" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Color per &Data" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 #, fuzzy msgid "Colour by &Error" msgstr "Color per &Error" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 #, fuzzy msgid "Colour by &Horizontal Error" msgstr "Color per &Horizontal Error" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 #, fuzzy msgid "Colour by &Vertical Error" msgstr "Color per &Vertical Error" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 #, fuzzy msgid "Colour by &Gradient" msgstr "Color per &Gradient" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 #, fuzzy msgid "Colour by &Length" msgstr "Color per &Longitut" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 #, fuzzy msgid "Colour by &Survey" msgstr "Color per &Topografia" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Brúixola" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Clino" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "Barra d’&Escala" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Inverteix el sentit\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Cancel.la la linía de mesura\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "I&ndicadors" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: l’opció “%s†és ambígua\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: l’opció “%c%s†no accepta arguments\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: l’opció “--%s†no accepta arguments\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: l’opció “%s†necessita un argument\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l’opció necessita un argument -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: l’opció “--%s†és desconeguda\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: l’opció “%c%s†és desconeguda\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: l’opció no és vàlida -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nova Presentació" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Obrir Presentació..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "&Desa la Presentació" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Desa la Presentació &Com..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Marca" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "&Reprodueix" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Exporta com Animació..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Selecciona un nom de fitxer de sortida" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Presentacions Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Desa la captura de pantalla" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Selecciona una presentació per obrir" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Error en el format del fitxer de presentació “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Fitxers Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Fitxers CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Presentació Modificada" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "La presentació actual ha estat modificada. Abandonar els canvis no desats?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Recerca infroctuosa." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Troba" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Amaga" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Altitud" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Sols es pot visualitzar un fitxer 3d alhora." #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Recuadre Lateral" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f E, %.2f N" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Des de %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Dist %.2f%s, Azim %03.1f%s, Grd %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Metric" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Graus" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Percentatge" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "peu" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: H %.2f%s, Azim %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Topografies" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Presentació" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Mostra-ho tot" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Est" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Nord" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Obrir...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Obrir &Terreny..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Mostra el &Registre" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Imprimir...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "Configuració de la &pàgina..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Captura de pantalla..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "&Alçat Desenvolupat..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Exporta com..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Exporta com:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Exporta" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Informació del Sistema:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Vista prèvia de la impressió" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Imprimir" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Imprimir..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Tirades de topografía de super&fície" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Temps: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Aquesta versió de %s requereix OpenGL per funcionar, i no està disponible." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Amaga" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "A&tenúa" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Mostra" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Llegint dades, espereu si us plau…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "L’estació %s no s’ha trobat" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "No s’han trobat les tirades %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Inici des de l’estació %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "Extenent cap a l’esquerra des de l’estació %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "Extenent cap a la dreta des de l’estació %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "Extenent cap a l’esquerra des de la tirada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "Extenent cap a la dreta des de la tirada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "Trencant el bucle a l’estació %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "Trencant el bucle a la tirada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Canviant la direcció de l’alçat extès des de l’estació %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Canviant la direcció de l’alçat extès des de la tirada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "Aplicant fitxer d’especificacions: “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Escrivint %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "No s’ha pogut analitzar el fitxer d’errors .err" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Mogut per (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Afegit: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Esborrat: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 #, fuzzy msgid "Reentering an existing survey is deprecated" msgstr "Reentrar en un nivell de prefix existent ja no s’utilitza" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Originalment entrat aqui" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT ja no s’utilitza" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "generar sortida CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "generar sortida DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "generar sortida EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "generar sortida GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "generar sortida HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "generar sortida JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "generar sortida KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "generar sortida Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "generar sortida Survex POS" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "generar sortida Compass PLT per a Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "generar sortida SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Error en el format del fitxer de fonts “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "Superfície Sòli&da" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d trobades" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Preferències..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Dibuixa les parets" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Estimació heurística de les dades LRUD" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Marcar les estacions topogràfiques amb creus" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "Ressaltar les estacions marcades com entrades" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Ressaltar les estacions marcades com punts fixes" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Ressaltar les estacions exportades" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Marcar les estacions topogràfiques amb els seus noms" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Permet que els noms es sobreposin (més ràpid)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Mostra les tirades subterrànies" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Mostra les tirades de superfí:cie" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "Coloreja les tirades de superfí:cie segons profunditat" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Dibuixa les tirades de superfí:cie amb línies puntejades" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Dibuixa una quadrícula" #: n:362 #~ msgid "metric units" #~ msgstr "unitats en sistema mètric" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "unitats en sistema imperial" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "graus (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "graus centesimals" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Mostra les distàncies en" #: n:367 #~ msgid "Display angles in" #~ msgstr "Mostra els angles en" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Inverteix el sentit dels controls" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Mostra l’escala gràfica" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Mostra l’escala de profunditat" #: n:371 #~ msgid "Display compass" #~ msgstr "Mostra la bruíxola" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Mostra el clinòmetre" #: n:373 #~ msgid "Display side panel" #~ msgstr "Mostra el panell lateral" survex-1.4.4/lib/de.msg0000664000175000017500000003740214312174554011661 00000000000000Svx Msg þÿ >î©Nicht genug Speicher vorhanden (%lu Bytes nicht gefunden).Zum Verarbeiten dieser Vermessungsdaten ist Survex-Version %s oder neuer erforderlich.Zwischen zwei anonymen Messpunkten kann keine Messstrecke seinWarnungIn von %s:%u aus eingelesener Datei: *prefix ist veraltet - stattdessen *begin und *end verwendenUngültiges Zeichen »%c« in Messpunktname (erlaubte Zeichen können mit *SET NAMES definiert werden)Eintragung fehltZahl erwartet, »%s« gelesen»PRESERVE«, »TOUPPER« oder »TOLOWER« erwartet, »%s« gelesenFehler im Programm, bitte informieren Sie die Programmierer darüberUnbekanntes Befehl »%s«Messpunkt »%s« mit sich selbst gleichgesetztKompassablesung darf nur bei Lotstrecken weggelassen werdenEnde der Zeile ist nicht leerEs gab %d Warnungen.Externer Befehl konnte nicht ausgeführt werden: »%s«Fehler beim Einlesen der DateiAbbruch wegen zu vieler Fehler*DEFAULT ist veraltet - stattdessen *CALIBRATE/DATA/SD/UNITS mit DEFAULT-Argument verwendenKompassablesung für geloteten Schacht angegebenEND ohne entsprechendes BEGIN in dieser DateiBEGIN ohne entsprechendes END in dieser DateiKonnte Datei »%s« nicht öffnenROOT ist veraltetMesspunkt »%s« nicht aus Vermessung »%s« exportiert»%s« kann nicht ein Messpunkt und eine Vermessung seinMesspunktname erwartetErneutes Einführen einer Vermessung ist veraltetBereits hier verwendet»EQUATES«, »EXPORTS« oder »PLUMBS« erwartet, »%s« gelesen»ON« oder »OFF« erwartet, »%s« gelesenNur ein Messpunkt im EQUATE-Befehl angegebenUnbekannte Größe »%s«Unbekannte Einheit(en) »%s«Zugehöriges BEGIN hatte kein VermessungsnamenUnpassende Einheit »%s« für diese GrößeNicht genug Speicher vorhanden beim Einlesen der Datei »%s«Unbekanntes Instrument »%s«Skalenfaktor für die DECLINATION muss 1.0 seinUngültige Einstellung »%s«Unbekannte Zeichenklasse »%s«Keine Vermessungsdaten vorhandenDateiname »%s« bezeichnet ein VerzeichnisTeile der Vermessung sind nicht mit festen Messpunkten verbundenMesspunkt ist schon fest oder gleich einem festen PunktAusgabedatei »%s« konnte nicht geöffnet werdenStandardabweichung muss positiv seinAufrufMessstrecke mit einem auf sich selbst bezogenen Messpunkt (»%s«) – Tippfehler?Neigungseintrag übertrifft %.f%s (Absolutwert)Versuch, zwei verschiedene feste Messpunkte gleichzusetzen: »%s« und »%s«Zwei identische feste Punkte miteinander gleichgesetzt: »%s« und »%s«FIX-Befehl ohne Koordinatenwerte, wurde auf (0,0,0) gesetztMesspunkt schon auf die gleichen Koordinaten festgelegtanonymer Messpunkt*EXPORT muss unmittelbar auf »*BEGIN « folgenUngültiges Jahr (< 1900 oder > 2078)Seltsamer KompasswertNegativer LängeneintragGleicher Messpunkt zweimal ohne Koordinaten angegebenLängeneintrag ist kleiner als HöhenunterschiedMessgröße »%s« ist beim Datenformat »%s« nicht erlaubtZu wenige Messwerte für Datenformat »%s«Datenformat »%s« unbekanntMesspunkt »%s« ist bereits exportiertMessgröße »%s« mehrfach angegebenFLAG »%s« unbekannt" fehltMesspunkt »%s« nur einmal erwähnt, mit explizitem Vermessungsnamen - Tippfehler?Die folgenden Messpunkte haben keine festen Koordinaten:Vermessung hat keine Festpunkte. %s wurde als Nullpunkt (0,0,0) gewähltFester Messpunkt »%s« wird nicht verwendetNetzausgleichung gelöst durch Reduktion - kein Gleichungssystem erforderlich.Löse System mit %d Gleichungen und UnbekanntenAssuming 2 digit year is %dEintrag »%s« wiederholt frühere(n)Eine Gleichung wird gelöstNegative korrigierte StreckenlängeDatum liegt in der Zukunft!Das Enddatum ist früher als das AnfangsdatumFarbe je nach &LängeÜberschneidung an nicht existierendem Messpunkt »%s« angegebenCLINO- und BACKCLINO-Eintrag müssen den gleichen Typ habenFarbe je nach &GefälleUngültiger MonatUngültiger MonatstagVersionen %d bis %d des 3D-Dateiformats werden unterstütztName einer Vermessung erwartet.espec file to control extendingshow breaks with surface survey legs in outputPlumbed CLINO and BACKCLINO readings can't be in the same directionFehlerLängeneintrag fehltWeitere Vorkommen dieser veralteten Funktionalität werden nicht gemeldet werden%TAPE- und BACKTAPE-Eintrag differieren um %sCOMPASS- und BACKCOMPASS-Eintrag differieren um %sCLINO- und BACKCLINO-Eintrag differieren um %sMesspunktnameCSV-DateienCSV-Ausgabe erzeugen»F« oder »M« erwartet»*data %s %c …« ist veraltet - verwenden Sie stattdessen »*data %s …«Daten werden eingelesen - bitte warten…3D-Bilddatei »%s« ist fehlerhaft%a,%Y.%m.%d %H:%M:%S %ZDatum und Uhrzeit nicht feststellbar.Fehler beim Lesen der Datei »%s«Fehler beim Schreiben in die Datei »%s«Fehler beim Schreiben in eine Datei.err-Datei konnte nicht interpretiert werdenEs gab %d Warnungen und %d Fehler - keine Ausgabedatei erstellt.Datei »%s« ist in einem neueren Format, als dieses Programm verarbeiten kannNordenAufriss auf die Ebene&GrundrissAufrissDrucken und Beenden (3D-Datei erforderlich)Statistik wird berechnetTextfeld erwartetzu wenige Argumentezu viele ArgumenteDATEIEinseitig angeschlossene Messzüge werden entferntMesszüge zwischen Abzweigungen werden verbundenMesszüge zwischen Abzweigungen werden berechnetEinseitig angeschlossene Messzüge werden berechnetNetzwerk wird vereinfachtNetzwerk wird ausgeglichen»F« oder »B« erwartet, »%s« gelesenGesamtlänge der Messstrecken = %7.2f%s (%7.2f%s ausgeglichen)Gesamte Horizontallänge der Messstrecken = %7.2f%sGesamte Vertikallänge der Messstrecken = %7.2f%sVertikale Erstreckung = %4.2f%s (von %s auf %4.2f%s bis %s auf %4.2f%s)Nord-Süd-Erstreckung = %4.2f%s (von %s bei %4.2f%s bis %s bei %4.2f%s)Ost-West-Erstreckung = %4.2f%s (von %s bei %4.2f%s bis %s bei %4.2f%s)Es gibt eine Ringverbindung.Es gibt %ld Ringverbindungen.Benötigte Rechenzeit (CPU) %5.2fsBenötigte Zeit %5.2fsBenötigte Zeit nicht feststellbarBenötigte Zeit %5.2fs (%5.2fs CPU-Zeit)&Protokoll anzeigenUrsprüngliche Länge %6.2fm (%3d Strecken), verändert um %6.2fm (%5.2fm/Messstrecke). Fehler %6.2f%%Fehler belanglosGitter erzeugen (Vorgabe %sm)Texthöhe der Messpunktbezeichnungen (Vorgabe %s)Diese Hilfemeldung anzeigen und BeendenVersionsinformation ausgeben und beendenMesspunktmarkierungsgröße (Vorgabe %s)OPTIONMaßstabinclude items exported by defaultDXF-Ausgabe erzeugenVersuchen Sie »%s --help« für weitere Hinweise. Skencil-Ausgabe erzeugenCompass PLT-Ausgabe für Carto erzeugenSVG-Ausgabe erzeugenNo terrain data near area of surveyOrt für Ausgabedateien festlegenNur kurze Zusammenfassung zeigen (-qq zeigt nur Fehler)Keine .err-Datei erstellenWarnungen als Fehler behandelnSurvex POS-DateienBerechnung von Seite %sGrundriß, %s obenAufriss in Richtung %sAusgabe in .log-Datei protokollierenVersion des 3D-Dateiformats für die AusgabeVermessung enthält 1 Messpunkt,Vermessung enthält %ld Messpunkte, verbunden durch 1 Messstrecke. verbunden durch %ld Messstrecken.VerzweigungspunktVerzweigungspunkteNetzwerk hat %ld zusammenhängende Teile.Nach horizontalem Fehlerfaktor sortierenNach vertikalem Fehlerfaktor sortierenNach prozentualem Fehlerfaktor sortierenNach Fehlern pro Messstrecke sortieren.err-Datei durch sortierte Version ersetzen&Neu berechnenNumerisches Argument »%s« ist nicht im gültigen BereichArgument »%s« ist keine GanzzahlArgument »%s« ist keine Zahl»DUPLICATE«, »SPLAY« oder »SURFACE« erwartet»NOT«, »DUPLICATE«, »SPLAY« oder »SURFACE« erwartetIn *entrance oder *export wird sich auf den Messpunkt »%s« bezogen, er wird aber nirgends verwendetAbwicklungKein entsprechendes BEGINVermessungsnamen passt nicht zu BEGINVermessungsnamen vor END fehlt( Rechtsw.,Hochwert, Höhe )Farbtiefe: %d bpp (Farbe)Datum erwartet, »%s« gelesenNur Teilvermessung mit diesem Präfix ladenFaktor nach *UNITS muss von Null verschieden sein&Bildschirmabzug...Keine Vermessungsdaten in 3D-Datei »%s«Blickricht.An den Anfang der Datei und neu einlesenÜber %sVermessungsdatei zur Ansicht wählenSurvex 3D-DateienAlle DateienVisualisierungsprogramm für Vermessungsdaten&Datei&Rotieren&Orientierung&Ansicht&Steuerung&Hilfe&Präsentationscale (50, 0.02, 1:50 and 2:100 all mean 1:50)DATEI1 DATEI2 [SCHWELLE]Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wünschen) jeder späteren Version.Ö&ffnen... Ctrl+ONicht datiertNEWLINE kann nicht der erste Eintrag seinNEWLINE kann nicht der letzte Eintrag seinAbwechselnde Einträge, aber kein NEWLINEEintrag »%s« muss vor NEWLINE stehenVor NEWLINE kann nur STATION, DEPTH oder COUNT stehenWinkel und Längen können nicht gleichzeitig kalibriert werden%s-FehlerprotokollAlle Vermessungsdateien&Exportieren...Auto&matisch rotieren Space%d/%d↑%s 1:%.0f&Andere Richtung%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0f&Perspektive&WandtexturDunsteffe&ktNach &NordenNach &OstenNach &SüdenNach &WestenExtended 1:%.0fAlles zeigenAndere ausblenden&Abwicklung...&Grundriss&Aufriss&Gestrichelt&Doppelte MessstreckenExport format not specified and not known from output file extensionExport format not specified&Zurück zur voreingestellten AnsichtDATEI1 und DATEI2 können .pos- oder .3d-Dateien sein SCHWELLE ist die max. zu ignorierende Abweichung entlang beliebiger Achsen in Metern (Vorgabe %s)Elemente%d Seiten (%dx%d)Eine SeiteRichtungMesspunktnamenKreuzeMessstrecken unter GrundNeigungSeitenrahmenLegendeLeerseitenEINGABE-3D-DATEI [AUSGABE-3D-DATEI]ERR-DATEI [WIE_VIELE][VERMESSUNGSDATEI]Messpunkt&namen Ctrl+NKreu&ze Ctrl+XMessstrecken unter Gr&und Ctrl+LÜber&lappende Namen&Kompass&Neigungsanzeige&Farbschlüssel&Maßstab (in Ansicht »Perspektive« ungenutzt)Zeit: Richtung &umkehren Ctrl+RMesslinie &abschalten Escape Sekunden (0 = auto; *6 = 6 mal auto)AnsichtAufriss in Richtung %s, Neigung %s&AufrissReferenz zu Messpunkt »%s« aus nicht existierender Vermessung »%s«Initialisierung des Eingabekoordinatensystems »%s« ist gescheitertInitialisierung des Ausgabekoordinatensystems »%s« ist gescheitertFarbe je nach &FehlernNicht in SchleifeMessstrecken an der &Oberfläche Ctrl+FFarbe je nach &TiefeFarbe je nach &Datum&Eingänge hervorheben&Festpunkte hervorhebenE&xportierte Punkte hervorheben&Gitter Ctrl+GGeglättete &Messstrecken&Richtungsanzeiger%s: Die Option »%s« ist nicht eindeutig Input coordinate system must be specified for “*DECLINATION AUTOâ€%s: Die Option »%c%s« erlaubt kein Argument %s: Die Option »--%s« erlaubt kein Argument No survey date specified - using 0 for magnetic declination%s: Die Option »%s« benötigt ein Argument %s: Die Option verlangt ein Argmuent -- %c %s: Unbekannte Option »--%s« %s: Unbekannte Option »%c%s« Expected number or “AUTOâ€%s: ungültige Option -- %c &Neue Präsentation&Präsentation öffnen...Präsentation &speichernPräsentation speichern &als...&MarkierenAbspie&len&Exportieren als Film...&Begrenzendes Rechteck Ctrl+BName der Ausgabedatei wählenAven PräsentationenBildschirmabzug speichernZu öffnende Präsentation auswählenFormatfehler in der Präsentationsdatei »%s«Compass PLT DateiCAMP XYZ DateiModifizierte PräsentationDie aktuelle Präsentation wurde verändert. Abbrechen, ohne die Änderungen zu speichern?Kein Treffer gefunden.SVX-Dateien für SurvexCompass DAT- und MAK-DateienFilm exportierenSuchenVerstecken%d gefundene(n) Messpunkt(e) versteckenHöheEs kann nur eine 3D-Datei zugleich angezeigt werden.&Seitliches Kontrollfeld%.2f R, %.2f HVon %s ausH %.2f%s, V %.2f%s%s: %s, Dist %.2f%s, Richt. %03.1f%s, Gefälle %s&Metrisch&Grad°áµ3D-Pa&ssagen Ctrl+T&Einstellungen...Wände einzeichnenLROU-Werte heuristisch schätzenMesspunkte durch Kreuze markierenMesspunkte an den Eingängen hervorhebenFeste Messpunkte hervorhebenExportierte Messpunkte hervorhebenMesspunkte mit ihren Namen beschriftenÜberlappende Beschriftungen zulassen (schneller)&Vollbild-Modus F11Messstrecken unter Grund anzeigenMessstrecken an der Oberfläche anzeigenOberflächenvermessung nach Höhe einfärbenOberflächenstrecken gestrichelt zeichnenGitter einzeichnenMeterenglische EinheitenAltgrad (°)Neugrad (gon)Längen anzeigen inWinkel anzeigen inMaus-Steuerung umkehrenMaßstab anzeigenTiefenskala anzeigenKompass anzeigenNeigungsmesser anzeigenSeitliches Kontrollfeld anzeigen%s: H %.2f%s, Richt. %03.1f%s%s: V %.2f%sVermessungenPräsentationRechtswertHochwert&Drucken... Ctrl+P&Seite einrichten...&Exportieren als...Exportieren&Clino versteckenMaßstab &versteckenFarbschlüssel &verstecken&Kompass versteckenHide si&blingsNicht genug Speicher vorhandenSysteminformation:Skalenfaktor muss von Null verschieden seinTrennzeichen im VermessungsnamenÜberschneidungenWändePassagenDatumsangaben einer Vermessung zeigen (wenn vorhanden)*alias-Befehl ist fehlerhaftDruckvorschauDrucken&Drucken...Exportieren als:In die Datei »%s« konnte nicht geschrieben werdenMessstrecken an der Ober&flächeWegpunkt bearbeitenDiese Version von %s benötigt zum Funktionieren OpenGL, was jedoch nicht verfügbar ist.&Hilfslinien (splay)&Verstecken&Dunsteffekt&ZeigenExportformatDXF-DateienEPS-DateienGPX-DateienHPGL-Dateien für PlotterCompass PLT-Dateien für CartoSkencil-DateienSVG-DateienEingängeFestpunkteExportierte PunkteUrsprung in der MitteVollständige Koordinatenkmmcm Meilen Meileftin&Prozentual∞GrundrissKiwi PlanUnknown coordinate systemCoordinate system unsuitable for outputFailed to convert coordinates: %sThe input projection is set but the output projection isn'tThe output projection is set but the input projection isn'tCoordinates can't be omitted when coordinate system has been specifiedCoordinate projectionMehr als ein FIX-Befehl ohne Koordinaten für Messpunkt »%s«Station “%s†fixed before CS command first usedInvalid coordinate system: %sKML-DateienJSON-Dateien&Protokoll SpeichernProtokolldateienFarbe je nach Verme&ssungTerr&ain&Colour byGeländedatei zur Ansicht wählenGeländedateienGelände&modell öffnen...EPS-Ausgabe erzeugenGPX-Ausgabe erzeugenHPGL-Ausgabe erzeugenJSON-Ausgabe erzeugenKML-Ausgabe erzeugenSurvex POS-Ausgabe erzeugenbearing (90, 90d, 100g all mean 90°)tilt (45, 45d, 50g, 100% all mean 45°)plan view (equivalent to --tilt=-90)elevation view (equivalent to --tilt=0)Messstrecken an der OberflächeHilfslinien (splay)EingängeFestpunkteExportierte PunkteÜberschneidungenWändePassagenUrsprung in der MitteVollständige KoordinatenMesspunktmarkierungenMesspunktbezeichnungenMessstrecken unter GrundBefestigt am BodenBefestigt am BodenUnits “%s†are deprecated, assuming “grads†- see manual for detailsFarbe je nach &horizontalen FehlernFarbe je nach &vertikalen FehlernColour by St&yleExpecting quadrant bearing, found “%sâ€Declination: %s, grid convergence: %.1f%sInformationconvert MOVE and LINE into LEGproduce Survex 3d outputVerschoben um (%3.2f,%3.2f,%3.2f): %sHinzugefügt: %sEntfernt: %sMesspunkt konnte nicht gefunden werden: %sMessstrecke konnte nicht gefunden werden: %s → %sBei diesem Messpunkt wird begonnen: %sVon diesem Messpunkt aus nach links erweitern: %sVon diesem Messpunkt aus nach rechts erweitern: %sVon dieser Messstrecke aus nach links erweitern: %s → %sVon dieser Messstrecke aus nach rechts erweitern: %s → %sMessschleife wird an diesem Messpunkt unterbrochen: %sMessschleife wird an dieser Messstrecke unterbrochen: %s → %sErweiterungsrichtung von Messpunkt %s wird umgekehrtErweiterungsrichtung von Messstrecke wird umgekehrt: %s → %sSpezifikationsdatei wird angewendet: »%s«%s wird geschrieben…survex-1.4.4/lib/ru.po0000644000175000017500000032212114240110617011526 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 22:05:08 +0000\n" "Last-Translator: vsuhachev \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Файл" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "Ð’&ращение" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&ОриентациÑ" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Вид" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Управление" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "По&мощь" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&ПрезентациÑ" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "ИÑпользование" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "ÐедоÑтаточно памÑти" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "ÐедоÑтаточно памÑти (невозможно выделить %lu байт)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Возникла нехватка памÑти при чтении файл “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ данных Ñтой топо-Ñъемки требуетÑÑ Survex верÑии %s и Ñтарше." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "инфо" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "предупреждение" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "ошибка" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "Ð’ файле включенном из %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix уÑтарел - иÑпользуйте *begin и *end вмеÑто него" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Символ “%c†недопуÑтим в имени пикета (иÑпользуйте *SET NAMES Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимых Ñимволов)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Поле не может быть пропущено" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "ОжидаетÑÑ Ñ‡Ð¸Ñловое значение, но вмеÑто него получено “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "ВмеÑто “%s†ожидаютÑÑ â€œPRESERVEâ€, “TOUPPER†или “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Обнаружена ошибка в программе! ПожалуйÑта Ñообщите о ней авторам" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¼Ð°Ð½Ð´Ð° “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Пикет “%s†был объÑвлен Ñквивалентным Ñамому Ñебе" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "Ðзимут не может быть пропущен за иÑключением вертикальных замеров" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Значение длинны не может отÑутÑтвовать" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Конец Ñтроки не пуÑÑ‚" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Получено %d предупреждений." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Ðевозможно выполнить внешнюю команду: “%sâ€" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Ошибка при чтении файла" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Возникло Ñлишком много ошибок - выполнение прервано" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT уÑтарело - иÑпользуйте *CALIBRATE/DATA/SD/UNITS Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ DEFAULT вмеÑто него" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Ðзимут указан Ð´Ð»Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ замера" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END без ÑоответÑтвующего BEGIN в Ñтом файле" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN без ÑоответÑтвующего END в Ñтом файле" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "Ð˜Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° “%s†не ÑкÑпортировано из топо-Ñъемки “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "СÑылка на пикет “%s†из неÑущеÑтвующей топо-Ñъемки “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†не может быть одновременно именем пикета и топо-Ñъемки" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "ОжидаетÑÑ Ð¸Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð°" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "ВмеÑто “%s†ожидаютÑÑ â€œEQUATESâ€, “EXPORTS†или “PLUMBSâ€" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "ВмеÑто “%s†ожидаютÑÑ â€œON†или “OFFâ€" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Указано только одно Ð¸Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° в команде EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "ÐеизвеÑтный тип замеров “%sâ€" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%sâ€" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "Единица Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%s†ÑчитаетÑÑ ÑƒÑтаревшей, иÑпользуйте “grads†- подробноÑти в руководÑтве пользователÑ" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÑиÑтема координат" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑиÑтема координат: %s" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "СиÑтема координат не подходит Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° результатов" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "Ðеудача при переводе координат: %s" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð°, а Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð½ÐµÑ‚" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð°, а иÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð½ÐµÑ‚" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "Координаты не могут быть пропущены еÑли указана ÑиÑтема координат" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "СиÑтема координат должна быть определена перед иÑпользованием “*DECLINATION AUTOâ€" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "ОжидаетÑÑ Ñ‡Ð¸Ñло или “AUTOâ€" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "Дата Ñъёмки не указана - иÑпользовано магнитное Ñклонение 0" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "Магнитное Ñклонение: %s, Ñближение меридианов: %.1f%s" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "Ð”Ð»Ñ ÑоответÑтвующей команды BEGIN не указано Ð¸Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-Ñъемки" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "ÐедрпуÑÑ‚Ð¸Ð¼Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%sâ€ Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "ÐеизвеÑтный инÑтрумент “%sâ€" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "МаÑштабный коÑффициент должен равнÑтьÑÑ 1.0 Ð´Ð»Ñ DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "МаÑштабный коÑффициент должен быть ненулевым" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка “%sâ€" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "ÐеизвеÑтный клаÑÑ Ñимволов “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Ðет данных топо-Ñъемки" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° “%s†ÑÑылаетÑÑ Ð½Ð° каталог файловой ÑиÑтемы" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "ИмеютÑÑ Ñ†ÐµÐ¿Ð¾Ñ‡ÐºÐ¸ замеров не привÑзанные к фикÑированным пикетам (виÑÑщие)" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Пикет уже зафикÑирован или Ñквивалентен другому зафикÑированному пикету" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Ðевозможно открыть выходной файл “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "Стандартное отклонение должно быть положительным чиÑлом" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Замер Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ именем пикета (“%sâ€) на обоих концах замера - опечатка?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "ÐбÑолютное значение угла больше %.f%s" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Попытка объÑвить Ñквивалентными два фикÑированных пикета Ñ Ð½ÐµÐ¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ координатами: “%s†и “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "ОбъÑвление ÑквивалентноÑти Ð´Ð»Ñ Ð´Ð²ÑƒÑ… фикÑированных пикетов Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ координатами: “%s†и “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Команда FIX без ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚ - выполнена фикÑÐ°Ñ†Ð¸Ñ Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°Ð¼Ð¸ (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Пикет Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже зафикÑирован Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ же координатами" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Повторное иÑпользование команды FIX без координат Ð´Ð»Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "Пикет “%s†фикÑируетÑÑ Ð¿Ñ€ÐµÐ¶Ð´Ðµ чем командой CS задана ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð½Ð°Ñ ÑиÑтема" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "Команда *EXPORT должна Ñледовать непоÑредÑтвенно поÑле команды “*BEGIN <имÑ_Ñъемки>â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "Ð”Ð»Ñ Ð³Ð¾Ð´Ð°, указанного 2 цифрами иÑпользую значение %d" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Введите год в промежутке от 1900 до 2078" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Подозрительное значение азимута" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Отрицательное значение длинны замера" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Один и тот же пикет заыикÑирован дважды без ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Длинна замера меньше чем изменение глубины" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€œ%s†не допуÑтимы Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данных “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "ÐедоÑтаточно значений Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данных “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "ÐеизвеÑтный Ñтиль топо-данных “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Пикет Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ “%s†уже ÑкÑпортирован" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Дублирование значений Ð´Ð»Ñ â€œ%s†в определении ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данных" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG “%s†- неизвеÑтный флаг" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "ÐедоÑтающие \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "СÑылка на пикет “%s†вÑтречаетрÑÑ ÐµÐ´Ð¸Ð½Ñтвенный раз и только Ñ Ñвным указанием имени топо-Ñъемки - возможно Ñто опечатка?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "Следующие пикеты не ÑвÑзаны Ñ Ñ„Ð¸ÐºÑированными пикетами (виÑÑщие пикеты):" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "Ð’ топо-Ñъемке не определено фикÑированных пикетов. ПоÑтому \"%s\" зафикÑировано Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°Ð¼Ð¸ (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "ФикÑированный пикет “%s†нигде не иÑпользуетÑÑ" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Ð¡ÑŠÐµÐ¼Ð¾Ñ‡Ð½Ð°Ñ Ñеть вычиÑлена путем ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ - нет ÑиÑтемы уравнений Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ" #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Решение ÑиÑтемы из %d уравнений" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "Тип значений “%s†дублирует один из типов значений в данном Ñтиле топо-данных" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Решение одного уравнениÑ" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Ð’ результате коррекций получена Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð° в замере" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "Дата больше текущей даты!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° меньше начальной" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Размеры ÑÐµÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° определены Ð´Ð»Ñ Ð½ÐµÑущеÑтвующего пикета “%sâ€" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ CLINO и BACKCLINO должны иметь одинаковый тип" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "У вертикальных замеров CLINO и BACKCLINO не могут Ñовпадать" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "ÐедопуÑтимый меÑÑц" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "ÐедопуÑтимый день меÑÑца" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "ПоддерживаютÑÑ Ð²ÐµÑ€Ñии формата 3d файла Ñ %d по %d" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "ОжидаетÑÑ Ð¸Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-Ñъемки" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Ðевозможно открыть файл “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Ðевозможно Ñохранить файл “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Дальнейшее иÑпользование уÑтаревших и не рекомендованных к иÑпользованию возможноÑтей не будет порождать Ñообщений" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ TAPE и BACKTAPE различаютÑÑ Ð½Ð° %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ COMPASS и BACKCOMPASS различаютÑÑ Ð½Ð° %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ CLINO и BACKCLINO различаютÑÑ Ð½Ð° %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†уÑтарело - иÑпользуйте “*data %s …†вмеÑто него" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Файл “%s†не раÑпознан как корректный .3d файл Survex" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Дата и Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ´Ð¾Ñтупны." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· файла “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Ошибка запиÑи в файла “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Ошибка запиÑи в файл" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Визникло %d предупреждений и %d ошибок - результирующие файлы не Ñозданы." #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Файл “%s†имеет более новый формат, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ не может работать" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Север" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Разрез-Ñечение по азимуту" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "П&лан" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "&Разрез" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Разрез" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Вид Ñверху" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "Вид Ñнизу" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "РаÑчет ÑтатиÑтики" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "ОжидаетÑÑ Ñтроковое значение" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "Ñлишком мало аргументов" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "Ñлишком много аргументов" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "ФÐЙЛ" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Удаление тупиковых веток" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Соединение веток" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "РаÑчет колец" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "РаÑчет тупиковых веток" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Упрощение Ñъемочной Ñети" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "РаÑчет Ñъемочной Ñети" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "ВмеÑто “%s†ожидаетÑÑ â€œF†или “Bâ€" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð´Ð»Ð¸Ð½Ð° замеров = %7.2f%s (%7.2f%s поÑле коррекции)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Ð¡ÑƒÐ¼Ð¼Ð°Ñ€Ð½Ð°Ñ Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° замеров (план) = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Ð¡ÑƒÐ¼Ð¼Ð°Ñ€Ð½Ð°Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð° замеров (разрез) = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Ðмплитуда = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Диапазон Север-Юг = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Диапазон ВоÑток-Запад = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "КоличеÑтво колец: 1" #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "КоличеÑтво колец: %ld" #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Затрачено времени процеÑÑора: %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Затрачено времени вÑего: %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Отчет о затраченном времени недоÑтупен" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Затрачено времени %5.2fs (%5.2fs затрачено процеÑÑором)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "ÐŸÐµÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %6.2fм (%3d замеров), откорректировано на %6.2fм (%5.2fм/замер). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Ошибка %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Ошибка N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "показать Ñправку и выйти" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "вывеÑти информацию о верÑии и выйти" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "ОПЦИЯ" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "МаÑштаб" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "маÑштаб (50, 0.02, 1:50 и 2:100 - вÑе Ñто равно 1:50)" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Выполните “%s --helpâ€ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "Обработано: %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "↑%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "%s↔%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "%s↔%s ∡%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "Разрез 1:%.0f" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "План, верх Ñтраницы Ñориентирован на азимут %s" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Разрез-проекциÑ, направление взглÑда - азимут %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "план (Ñквивалентно --tilt=-90)" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Разрез-проекциÑ, направление взглÑда - азимут %s, угол %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "разрез (Ñквивалентно --tilt=0)" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Разрез-развертка" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "Топо-Ñъемка Ñодержит пикетов: 1," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "Топо-Ñъемка Ñодержит пикетов: %ld," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " замеров: 1." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " замеров: %ld." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "реберных узлов Ñъемочной Ñети" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "реберных узлов Ñъемочной Ñети" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "Топо-Ñъемка имеет %ld ÑвÑзанных компонентов." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Сохранить журнал" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&ПерераÑчитать" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "чиÑловой аргумент “%s†имеет недопуÑтимое значение" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "аргумент “%s†не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "аргумент “%s†не ÑвлÑетÑÑ Ñ‡Ð¸Ñлом" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "ОжидаетÑÑ â€œDUPLICATEâ€, “SPLAY†или “SURFACEâ€" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "ОжидаетÑÑ â€œNOTâ€, “DUPLICATEâ€, “SPLAY†или “SURFACEâ€" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "ОжидаетÑÑ â€œF†или “Mâ€" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "ОжидаетÑÑ Ñ€ÑƒÐ¼Ð± (quadrant), получено “%sâ€" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "Ðа пикет “%s†еÑть ÑÑылки в командах *entrance или *export но пикет не иÑпользуетÑÑ" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Ðет ÑоответÑтвующей команды BEGIN" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "Ð˜Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-Ñъемки не Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, указанным в команде BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "Ð˜Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾Ñъемки указано в BEGIN, но отÑутÑтвует в END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Ðа ВоÑток, Ðа Север, Вверх )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Глубина цвета: %d bpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (цветное)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "ВмеÑто “%s†ожидаетÑÑ Ð´Ð°Ñ‚Ð°" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "обрабатывать топо-Ñъемки только Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ñ‹Ð¼ префикÑом" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "раÑпечатать и выйти (нуобходимо указать 3d файл)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "указать меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ… файлов" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "отображать только краткие итоги (-qq Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ошибок)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "не Ñоздавать файл .err" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "трактовать Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ðº ошибки" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "выводить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в .log файл" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "указать верÑию формата в котором будет ÑохранÑÑ‚ÑÑ 3d файл" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "файл .espec Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¾Ð¹" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "отображать разрывы нитки на разрезе развертке Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ линий поверхноÑтной Ñъемки" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "КоÑффициент в команде *UNITS должен быть ненулевым" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Данные топо-Ñъемки не найдены в файле “%sâ€" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Ðзимут" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "О программе %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Выберите файл Ñ Ñ€ÐµÐ»ÑŒÐµÑ„Ð¾Ð¼ поверхноÑти Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Файлы рельефа поверхноÑти" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "Ðет данных о поверхноÑти над районом подземной Ñъемки" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "Выберите топо-Ñъемку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Survex 3d файлы" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Ð’Ñе файлы" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "Ð’Ñе файлы топо-Ñъемок" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Survex svx файлы" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "DAT и MAK файлы Compass" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "CSV файлы" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "DXF файлы" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "EPS файлы" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "GPX файлы" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "HPGL файлы (Ð´Ð»Ñ Ð¿Ð»Ð¾Ñ‚Ñ‚ÐµÑ€Ð°)" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "KML файлы" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "Compass PLT файлы Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Carto" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Skencil файлы" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Survex pos файлы" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "SVG файлы" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "JSON файлы" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Файлы журнала" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "ИнÑтрумент Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ топо-Ñъемок пещер" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Эта программа ÑвлÑетÑÑ Ñвободным программным обеÑпечением; Ð’Ñ‹ можете раÑпроÑтранÑть и/или изменÑть его в ÑоответÑтвии Ñ ÑƒÑловиÑми GNU General Public Licence, опубликованной Фондом Ñвободного программного обеÑпечениÑ; дейÑтвительно либо Ð´Ð»Ñ Ð²ÐµÑ€Ñии 2 Лицензии, либо (по вашему выбору) любой более поздней верÑии." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "ФÐЙЛ1 ФÐЙЛ2 [ПОРОГ]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "ФÐЙЛ1 и ФÐЙЛ2 могут быть .pos или .3d файлами\nПОРОГ Ñто макÑимальное игнорируемое изменение в метрах вдоль любой из координатных оÑей (по умолчанию %s)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "ВХОДÐОЙ_3D_ФÐЙЛ [ВЫХОДÐОЙ_3D_ФÐЙЛ]" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "ERR_ФÐЙЛ [СКОЛЬКО]" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "[ФÐЙЛ_ТОПОСЪЕМКИ]" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Дата не указана" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "Ðе в кольце" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE не может быть первым значением" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE не может быть поÑледним значением" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Стиль данных подразумевает наличие перевода Ñтроки, но NEWLINE отÑутÑтвует" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "Значение “%s†должно быть перед NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "Значению NEWLINE могут предшеÑтвовать только Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ STATION, DEPTH или COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "ÐедопуÑтимо ÑовмеÑтно калибровать величины Ð´Ð»Ñ ÑƒÐ³Ð»Ð¾Ð² и длин" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° *alias" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "Журнал ошибок %s" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&ЭкÑпортi..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Ðв&томатичеÑкое вращение\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&ПоменÑть направление вращениÑ" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Ðа &Север" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Ðа &ВоÑток" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Ðа &Юг" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Ðа &Запад" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&План" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "&Разрез" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "ВоÑÑтановить об&зор по умолчанию" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Вид" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Элементы" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Формат ÑкÑпорта" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d Ñтраниц (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Одна Ñтраница" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Ðзимут" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "азимут (90, 90d, 100g - вÑе Ñто равно 90°)" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Ð˜Ð¼Ñ ÐŸÐ¸ÐºÐµÑ‚Ð°" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Пикеты" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "значки пикетов" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Подземные замеры" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "подземные замеры" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "СечениÑ" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "ÑечениÑ" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Стены ходов" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "Ñтены ходов" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Пещерныхе ходы" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "пещерныхе ходы" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "Ðачало координат в центре" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "начало координат в центре" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "Полные координаты" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "полные координаты" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "Прикрепить к поверхноÑти" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "прикрепить к поверхноÑти" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Угол наклона" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "угол наклона (45, 45d, 50g, 100% - вÑе Ñто равно 45°)" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Границы Ñтраницы" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "УÑловные обозначениÑ" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "ПуÑтые Ñтраницы" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "&Объемные ходы\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "П&оверхноÑть" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "Пикет&Ñ‹\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Сетка\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "Вме&щающий прÑмоугольник\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "Под&Ð·ÐµÐ¼Ð½Ð°Ñ Ð½Ð¸Ñ‚ÐºÐ°\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "ПоверхноÑтна&Ñ Ð½Ð¸Ñ‚ÐºÐ°\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "поверхноÑÑ‚Ð½Ð°Ñ Ð½Ð¸Ñ‚ÐºÐ°" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "П&ерекрывающиеÑÑ Ð½Ð°Ð´Ð¿Ð¸Ñи" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "&РаÑкраÑка по" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "ПодÑветить &входы" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "ПодÑветить &фикÑированные точки" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "ПодÑветить &ÑкÑпортированные точки" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Входы" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "входы" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "ФикÑированные точки" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "фикÑированные точки" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "ЭкÑпортированные пикеты" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "ÑкÑпортированные пикеты" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "&ПерÑпектива" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "ТекÑтурированные &Ñтены" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "&ЗатенÑть отдаленные объекты" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Сглаживать &линии" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "ПолноÑкранный &режим\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "РаÑкраÑка по &глубине" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "РаÑкраÑка по д&ате" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "РаÑкраÑка по &ошибкам на кольцах" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "РаÑкраÑка по гори&зонтальной компоненте в ошибках" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "РаÑкраÑка по &вертикальной компоненте в ошибках" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "РаÑкраÑка по &уклону хода" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "РаÑкраÑка по &длине" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "РаÑкраÑка по &топо-Ñъемке" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "РаÑкраÑка по &Ñтилю" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&КомпаÑ" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Угломер" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "&Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ ÑˆÐºÐ°Ð»Ð°" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "&МаÑштаб" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Инвертировать управление\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Выйти из режима измерениÑ\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "И&ндикаторы" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%s†неоднозначна\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%c%s†не допуÑкает ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ--%s†не допуÑкает ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%s†требует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: Ð¾Ð¿Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ аргумент -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ â€œ--%sâ€\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ â€œ%c%sâ€\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&ÐÐ¾Ð²Ð°Ñ Ð¿Ñ€ÐµÐ·Ð°Ð½Ñ‚Ð°Ñ†Ð¸Ñ" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Открвть презентацию..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "&Сохранить презентацию" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Со&хранить презентацию как..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "От&метить" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "&ВоÑпроизвеÑти" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&ЭкÑпортировать видео..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "ЭкÑпортировать видео" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Выберите Ð¸Ð¼Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ файла" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Презентации Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Сохранить Ñнимок Ñкрана" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Выберите презентацию Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Ошибка формата в презентации “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Файлы Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Файлы CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð±Ñ‹Ð»Ð° изменена. Отменить не Ñохраненные изменениÑ?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Совпадений не найдено." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "ПоиÑк" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Скрыть" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "Скрыть %d найденных пикетов" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Ð’Ñ‹Ñота" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Ð’Ñ‹ можете проÑматривать только один 3d файл одновременно." #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Ð‘Ð¾ÐºÐ¾Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f Ð’, %.2f С" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "От %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "Проложение%.2f%s, Перепад %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Дл %.2f%s, Ðз %03.1f%s, Угл %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&МетричеÑкие длины" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&ГрадуÑÑ‹" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Печать" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "км" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "м" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "Ñм" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr " миль" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr " милÑ" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "футов" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "дюймов" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "Скрыть &компаÑ" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "Скрыть &угол" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "Скрыть &маÑштабную шкалу" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "Скрыть &цветовую шкалу" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: Проложение %.2f%s, Ðзимут %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: Перепад %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Топо-Ñъемки" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Режим презентации" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Показать вÑе" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Скрыть оÑтальные" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "Скрыть оÑтальные на &Ñтом уровне" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "ВоÑтоÑное отклонение (Easting)" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Северное отклонение (Northing)" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Открыть...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Открыть &Рельеф..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Показать &журнал" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Печать...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "&ÐаÑтройки Ñтраницы..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Снимок Ñкрана..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Разрез-раз&вертка..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&ЭкÑпортировать как..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "ЭкÑпортировать как:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "ЭкÑпортировать" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑиÑтеме:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Предварительный проÑмотр печати" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Печать" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Печать..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "&ПоверхноÑтнные замеры" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Редактировать точку маршрута" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr " (не иÑпользуетÑÑ Ñ Ð¿ÐµÑ€Ñпективной проекцией)" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "ВремÑ: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr " Ñекунд (0 = авто; *6 = 6 раз авто)" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Ð”Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %s Ð´Ð»Ñ Ñвоей работы требует библиотеку OpenGL, но она не найдена." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "Разделитель в имени топо-Ñъемки" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "анонимный пикет" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "ОтÑутÑтвует замер между Ð´Ð²ÑƒÐ¼Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñ‹Ð¼Ð¸ пикетами" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "&Ð’Ñпомогательные замеры" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "вÑпомогательные замеры" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "&ДублирующиеÑÑ Ð—Ð°Ð¼ÐµÑ€Ñ‹" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Скрыть" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "ÐŸÐ¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ð°Ñ &ÑркоÑть" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "Пун&ктир" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Показать" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Чтение иÑходных данных - пожалуйÑта ожидайте…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "Ðе удалоÑÑŒ найти пикет %s" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "Ðе удалоÑÑŒ найти замер %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Развертка начата от пикета %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "От пикета %s развертка влево" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "От пикета %s развертка вправо" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "От замера %s → %s развертка влево" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "От замера %s → %s развертка вправо" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "Разрыв кольца на пикете %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "Разрыв кольца на замере %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Изменение Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¸ Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Изменение Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¸ Ñ Ð·Ð°Ð¼ÐµÑ€Ð° %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "Применение файла (specfile): “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Сохранение %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "Ñортировать по величине горизонтальной ÑоÑтавлÑющей ошибки" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "Ñортировать по величине вертикальной ÑоÑтавлÑющей ошибки" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "Ñортировать по проценту ошибки отноÑительно длинны кольца" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "Ñортировать по Ñредней величине ошибки на замер" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "заменить .err файл на переÑортированный" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "Ðевозможно произвеÑти разбор файла .err" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Перемещено на (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Добавлено: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Удалено: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "Повторное определение Ð´Ð»Ñ ÑƒÐ¶Ðµ ÑущеÑтвующей топо-Ñъемки уÑтарело и не рекомендуетÑÑ Ðº иÑпользованию" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Первоначально вÑтречено здеÑÑŒ" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "Корневой Ñимвол в именах пикетов (ROOT Ñимвол, \"\\\") уÑтарел и не рекомендуетÑÑ Ðº иÑпользованию" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "повторно перечитать файл" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "отображать информацию о датах топо-Ñъемок (еÑли она приÑутÑтвует)" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "Ошибка в инициализации входной ÑиÑтемы координат “%sâ€" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "Ошибка в инициализации выходной ÑиÑтемы координат “%sâ€" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "ÐŸÑ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "Ñоздавать Ñетку (по умолчанию %sм)" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "выÑота текÑта Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñей имен пикетов (по умолчанию %s)" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "размер значка пикета (по умолчанию %s)" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "Ñоздавать CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "Ñоздавать DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "Ñоздавать EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "Ñоздавать GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "Ñоздавать HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "Ñоздавать JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "Ñоздавать KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "Ñоздавать Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "Ñоздавать Survex POS" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "Ñоздавать Compass PLT Ð´Ð»Ñ Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "Ñоздавать SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "Формат ÑкÑпорта не указан и его невозможно определить по раÑширению файла" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "Формат ÑкÑпорта не указан" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "включены Ñлементы, ÑкÑпортируемые по умолчанию" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Ошибка в формате файла шрифтов “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "ÐÐµÐ¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð²ÐµÑ€&хноÑть" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d найдено" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&ÐаÑтройки..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Отображать Ñтены ходов" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "ОпределÑть замеры ЛПВÐ(LRUD) оÑновываÑÑÑŒ на ÑвриÑтике" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Отображать пикеты в виде креÑтов" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "ПодÑветить пикеты, отмеченные как входа" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "ПодÑветить пикеты, отмеченные как фикÑированные точки" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "ПодÑветить ÑкÑпортированные пикеты" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Отобразить имена пикетов" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Разрешить надпиÑÑм Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ пикетов перекрывать другие надпиÑи (ÑкороÑть отриÑовки выроÑтет)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Отобразить замеры выполнение под землей" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Отобразить замеры выполнение на поверхноÑти" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "РаÑкрашивать поверхноÑтные Ñъемки по глубине" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Выводить поверхноÑтные замеры пунктирной линией" #: n:361 #~ msgid "Draw a grid" #~ msgstr "РиÑовать Ñетку" #: n:362 #~ msgid "metric units" #~ msgstr "метричеÑких единицах" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "английÑких имперÑких единицах" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "градуÑах (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "градах" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Отображать замеры в" #: n:367 #~ msgid "Display angles in" #~ msgstr "Отображать углы в" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Инвертировать управление проÑмотром" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Отображать маÑштабную шкалу" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Отображать шкалу глубин" #: n:371 #~ msgid "Display compass" #~ msgstr "Отобразить компаÑ" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Отобразить угол" #: n:373 #~ msgid "Display side panel" #~ msgstr "Отобразить боковую панель" survex-1.4.4/lib/bcra5.svx0000644000175000017500000000066714141575516012323 00000000000000; BCRA Grade 5 specification file ; tape error ; 95.44% of readings are within 0.1m (2 S.D.) *sd length backlength 0.05 metres ; compass error ; 95.44% of readings are within 1 degree (2 S.D.) *sd bearing backbearing 0.5 degrees ; clino error ; 95.44% of readings are within 1 degree (2 S.D.) *sd gradient backgradient 0.5 degrees ; station position error ; 95.44% of positions are within 0.1m (2 S.D.) *sd position 0.05 metres survex-1.4.4/lib/survex.pot0000644000175000017500000023247214312174552012641 00000000000000# Survex translation template. # Copyright (C) YEAR COPYRIGHT HOLDERS # This file is distributed under the same licence as Survex. # msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI:SE +ZONE\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "" #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "" #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "" #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "" #. TRANSLATORS: Emitted after second and subsequent "FIX" command #. with no coordinates. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "" #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "" #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "" #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "" #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "" #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "" #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "" #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr "" #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr "" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "" #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr "" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "" #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "" #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "" #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "" #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "" #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "" #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "" #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "" #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "" #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "" #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "" #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "" #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/dump3d.c:54 #: n:486 msgid "convert MOVE and LINE into LEG" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:159 #: n:487 msgid "produce Survex 3d output" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "" #: n:348 #~ msgid "Draw passage walls" #~ msgstr "" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "" #: n:361 #~ msgid "Draw a grid" #~ msgstr "" #: n:362 #~ msgid "metric units" #~ msgstr "" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "" #: n:366 #~ msgid "Display measurements in" #~ msgstr "" #: n:367 #~ msgid "Display angles in" #~ msgstr "" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "" #: n:369 #~ msgid "Display scale bar" #~ msgstr "" #: n:370 #~ msgid "Display depth bar" #~ msgstr "" #: n:371 #~ msgid "Display compass" #~ msgstr "" #: n:372 #~ msgid "Display clinometer" #~ msgstr "" #: n:373 #~ msgid "Display side panel" #~ msgstr "" survex-1.4.4/lib/it.po0000644000175000017500000026461314211756366011546 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 00:39:01 +0000\n" "Last-Translator: Roberto Maugeri \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&File" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotazione" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientazione" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Vista" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Controlli" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Aiuto" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&Presentazione" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Utilizzo" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Memoria insufficiente" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Memoria insufficiente (ci vorrebbero altri %lu bytes)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Memoria insufficiente: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Questi dati di topografia possono essere trattati da Survex versione %s o superiore." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "info" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "avvertimento" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "errore" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "Nel file inserito da %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix é sconsigliato - usare invece *begin e *end" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Carattere “%c†non permesso nel nome di stazione (usare *SET NAMES per cambiare i caratteri permessi)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Questo campo non puó essere omesso" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "Questo campo é numerico, trovato “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "Trovato “%sâ€, atteso “PRESERVEâ€, “TOUPPER†o “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Individuato un errore nel programma! Per favore comunicatelo agli autori" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Comando sconosciuto “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Stazione “%s†uguagliata a se stessa" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "La lettura della bussola non puó essere omessa qui eccettto che nelle battute verticali" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "La distanza non puó essere omessa" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Fine della linea non vuota" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Ci sono %d avvertimenti." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Esecuzione del comando “%s†fallita" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Errore nella lettura del file" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Troppi errori - processo interrotto" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT é sconsigliato - usare invece *CALIBRATE/DATA/SD/UNITS con argomento DEFAULT" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Lettura della bussola in una battuta verticale" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "C’é un END senza il corrispondente BEGIN in questo file" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "C’é un BEGIN senza il corrispondente END in questo file" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "La stazione “%s†non é stata esportata dal rilievo “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "riferimento alla stazione “%s†di un rilievo “%s†non esistente" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†non può essere contemporaneamente una stazione e un rilievo" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "Manca il nome della stazione" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "Trovato “%sâ€, atteso “EQUATESâ€, “EXPORTS†o “PLUMBSâ€" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "Trovato “%sâ€, atteso “ON†o “OFFâ€" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Solo una stazione nel comando EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Quantitá “%s†sconosciuta" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unitá “%s†sconosciute" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 #, fuzzy msgid "Matching BEGIN command has no survey name" msgstr "Il BEGIN corrispondente non ha prefisso" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unitá “%s†non valida per questa quantitá" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Strumento “%s†sconosciuto" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Il fattore di scala per il comando DECLINATION deve essere 1.0" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Il fattore di scala deve essere diverso da zero" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Parametro “%s†sconosciuto" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Carattere sconosciuto classe “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Mancano i dati topografici" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Il nome del file “%s†corrisponde ad una directory" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "La topografia non é completamente connessa alle stazioni fisse" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Stazione giá fissata o uguagliata ad un punto fisso" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Non riesco ad aprire il file di uscita “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "La deviazione standard deve essere positiva" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Alle estremitá di una battuta c’é la stessa stazione (“%sâ€) - Errore di trascrizione?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Lettura del clinometro superiore a %.f%s (valore assoluto)" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Tentativo di uguagliare due stazioni fisse differenti: “%s†e “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Uguagliate due stazioni fisse identiche: “%s†e “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Comando FIX senza coordinate - fissato a (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Stazione giá fissata alle stesse coordinate" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, fuzzy, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Piú di un comando FIX senza coordinate: “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT deve seguire “*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Anno non valido (<1900 o >2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Lettura della bussola sospetta" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Distanza negativa" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "La stessa stazione é stata fissata due volte senza coordinate" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "La distanza é minore del dislivello" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Dato “%s†non permesso nel tipo di dati “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Mancano dati per il tipo di dati “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Tipo di dati “%s†sconosciuto" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Stazione “%s†giá esportata" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Dato duplicato “%sâ€" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG “%s†sconosciuto" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "Manca \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, fuzzy, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "La statione “%s†é ha un unico riferimento, con un prefisso esplicito - errore di scrittura?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "Le seguenti stazioni non sono connesse ad un punto fisso:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "La topografia non ha punti fissi. Quindi %s é stata fissata a (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Punto fisso non usato “%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Rete risolta per riduzione - nessun sistema da risolvere." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Sto risolvendo un sistema di %d equazioni" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "La lettura “%s†duplica precedenti letture" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Sto risolvendo una equazione" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Distanza corretta negativa" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "La data é nel futuro!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "La data finale é anteriore a quella finale" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Sezione trasversale specificata per una stazione non esistente: “%sâ€" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Le letture CLINO e BACKCLINO devono essere dello stesso tipo" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Mese non valido" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Giorno del mese non valido" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "Sono supportati i file 3D dalla versione %d alla versione %d" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "Manca il nome del rilievo" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Non riesco ad aprire il file “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Non posso scrivere il file “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Usi futuri di questa funzionalitá non piú usata non verranno segnalati" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "Le letture TAPE e BACKTAPE differiscono di %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Le letture COMPASS e BACKCOMPASS differiscono di %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Le letture CLINO e BACKCLINO differiscono di %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†é una funzionalitá non piú usata - usare “*data %s …â€" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "File immagine 3d “%s†errato" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Data e ora non disponibili." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Errore nella lettura del file “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Errore nella scrittura del file “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Errore nella scrittura del file" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Ci sono %d avvertimenti e %d errori - nessun file prodotto." #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Il file “%s†é ha un nuovo formato che questo programma non puó capire" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Nord" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Profilo in direzione" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Pianta" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "P&rofilo" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Profilo" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Pianta" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Sto calcolando le statistiche" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "Questo é un campo di tipo stringa" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "Numero di parametri insufficiente" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "Troppi parametri" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "FILE" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Sto rimuovendo le traverse terminali" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "So connettendo le traverse" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Sto calcolando le traverse" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Sto calcolando le traverse terminali" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Sto semplificando la rete" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Sto calcolando la rete" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "Trovato “%sâ€, atteso “F†o “Bâ€" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Sviluppo spaziale = %7.2f%s (%7.2f%s corretto)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Sviluppo planimetrico = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Totale delle componenti verticali delle battute = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Dislivello totale = %4.2f%s (da %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Estensione Nord-Sud = %4.2f%s (da %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Estensione Est-Ovest = %4.2f%s (da %s a %4.2f%s a %s a %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "C’é una poligonale chiusa." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Ci sono %ld poligonali chiuse." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Tempo CPU utilizzato %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Tempo totale %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Tempo totale non disponibile" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Tempo totale %5.2fs (tempo CPU %5.2fs)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Lunghezza originale %6.2fm (%3d battute), ridotta %6.2fm (%5.2fm/battuta). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Errore %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Errore N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "mostra questo aiuto ed esce" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "Mostra informazioni sulla versione ed esce" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPZIONI" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Scala" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Usare “%s --help†per ulteriori informazioni.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, fuzzy, c-format msgid "Processed: %s" msgstr "In corso su %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "Vista in pianta, %s in alto" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Elevazione orientata a %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Elevazione orientata a %s, inclinata di %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Profilo longitudinale" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "La topografia contiene una stazione," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "La topografia contiene %ld stazioni," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " unite per una battuta." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " unite per %ld battute." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "nodo" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "nodi" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "La topografia contiene %ld componenti connesse." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Salva Log" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&Riprocessa" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argomento numerico “%s†al di fuori dell’intervallo consentito" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "L’argomento “%s†non é un intero" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "L’argomento “%s†non é un numero" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "Atteso “DUPLICATEâ€, “SPLAY†o “SURFACEâ€" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "Atteso “NOTâ€, “DUPLICATEâ€, “SPLAY†o “SURFACEâ€" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "Atteso “F†o “Mâ€" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "Stazione “%s†referenziata da *entrance o *export ma mai usata" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Manca il BEGIN corrispondente" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 #, fuzzy msgid "Survey name doesn’t match BEGIN" msgstr "Il prefisso non corrisponde con il BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 #, fuzzy msgid "Survey name omitted from END" msgstr "Prefisso omesso in END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Est (X), Nord (Y), Quota Z )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Profondità display: %d bpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (colore)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "Attesa una data, trovato “%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "carica un sotto-rilievo con prefisso" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "stampa ed esci (richiede un file 3d)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "seleziona dove salvare i file" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "mostra solamente un breve riassunto (-qq per i soli errori)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "non creare il file .err" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "cambia gli avvisi in errori" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "usa il file .log" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "specifica il formato di file 3D da generare" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "Il fattore *UNITS deve essere diverso da zero" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Nel file 3D “%s†non ci sono dati di topografia" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Direzione" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "Informazioni su %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Seleziona un modello digitale del suolo da visualizzare" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "File di modelli digitali del suolo" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "Seleziona un file di rilievo da vedere" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "File Survex 3d" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Tutti i file" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "Tutti i file di rilievo" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "File Survex svx" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "File Compass DAT e MAK" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "File CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "File DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "File EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "File GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "HPGL per plotter" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "File KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "Compass PLT per Carto" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "File Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "File Survex pos" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "File SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "File JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "File di log" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Strumento di visualizzazione rilievi" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Questo programma è software libero; è lecito redistribuirlo o modificarlo secondo i termini della Licenza Pubblica Generica GNU come è pubblicata dalla Free Software Foundation; o la versione 2 della licenza o (a propria scelta) una versione successiva." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "FILE1 FILE2 [LIMITE]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "FILE1 e FILE2 possono essere file .pos o .3d\nLIMITE è il massimo cambiamento ignorabile lungo gli assi in metri (predefinito %s)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Senza data" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE non puó essere la prima lettura" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE non puó essere l’ultima lettura" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Letture su piú linee, ma nessuna NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "La lettura “%s†deve precedere NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE puó essere preceduto solamente da STATION, DEPTH e COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "Le quantitá di lunghezza e angolari non possono essere calibrate insieme" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Esporta..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "&Auto-Rotazione\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Inverte la direzione" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Vista verso &Nord" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Vista verso &Est" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Vista verso &Sud" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Vista verso &Ovest" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&Pianta" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Pro&filo" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "Ripristina la &vista predefinita" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Vista" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elementi" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Formato d'esportazione" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d pagine (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Una pagina" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azimut" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Nome di stazione" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Nome di stazione" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "etichette di stazione" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Croci" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "simboli di stazione" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Battute del rilievo sotterraneo" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "battute del rilievo sotterraneo" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Sezioni trasversali" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "sezioni trasversali" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Pareti" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "pareti" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Passaggi" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "passaggi" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Angolo di inclinazione" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Bordi pagina" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Didascalia" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Pagine bianche" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Nome di stazione\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "Passaggi come &Tubi\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 #, fuzzy msgid "Terr&ain" msgstr "T&errain" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Croci\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Griglia\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "B&ordo riquadro\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "&Battute del rilievo sotterraneo\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Battute topografia di Super&ficie\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "battute topografia di superficie" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "Nomi &Sovrapposti" #: ../src/mainfrm.cc:906 #: n:450 #, fuzzy msgid "Co&lour by" msgstr "Color&i secondo" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "Marca gli Ing&ressi" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "Marca i &punti fissi" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "Marca i p&unti esportati" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Ingressi" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "ingressi" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Punti fissi" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "punti fissi" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Punti Esportati" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "punti esportati" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Prospetti&va" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "Pareti con te&xture" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Sbiadisce g&li oggetti distanti" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Battute topografiche &ammorbidite" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "&Modo schermo pieno\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Colori secondo &profonditá" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 #, fuzzy msgid "Colour by D&ate" msgstr "Colori secondo &Data" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 #, fuzzy msgid "Colour by &Error" msgstr "Colori secondo &Errore" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "Colori secondo Errore &Orizzontale" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "Colori secondo Errore &Verticale" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 #, fuzzy msgid "Colour by &Gradient" msgstr "Colori secondo &Scivolo" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 #, fuzzy msgid "Colour by &Length" msgstr "Colori secondo &Lunghezza" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 #, fuzzy msgid "Colour by &Survey" msgstr "Colori secondo &Topografia" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Bussola" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Clinometro" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "Barra di controllo della &Scala" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Inverte il senso\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Cancella la linea di misura\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "I&ndicatori" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: l’opzione “%s†è ambigua\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: l’opzione “%c%s†non permette un argomento\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: l’opzione “--%s†non permette un argomento\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: l’opzione “%s†richiede un argomento\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l’opzione richiede un argomento -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: opzione non riconosciuta “--%sâ€\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: opzione non riconosciuta “%c%sâ€\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opzione non valida -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nuova Presentazione" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Apri Presentazione..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "&Salva Presentazione" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Salva Presentazione &come..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "Se&gna" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "&Visualizza" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Esporta come Animazione..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "Esporta filmato" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Seleziona un file di uscita" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Presentazione Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Salva Schermo catturato" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Seleziona una presentazione da aprire" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Errore nel formato del file di presentazione “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "File Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "File CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Presentazione Modificata" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "La presentazione corrente é stata modificata. Abbandonare i cambiamenti non salvati?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Nessun elemento trovato." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Trova" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Nascondi" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "nascondi %d stazioni trovate" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Quota" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "É possibile visualizzare solamente un file 3D alla volta." #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Riquadro Laterale" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f E, %.2f N" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Da %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "O %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Dist %.2f%s, Azm. %03.1f%s, Scivolo %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Metrico" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Gradi" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Percento" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr " miglia" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr " miglio" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "pd" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "in" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "&Nascondi Bussola" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "&Nascondi Inclinazione" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "&Nascondi Scala" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: O %.2f%s, Azm. %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Rilievi" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Presentazione" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Visualizza tutto" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Nascondi altri" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Est" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Nord" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Apri...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Apri Modello Digitale &Terrestre..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Mostra &Log" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "Stam&pa...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "&Imposta pagina..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Cattura schermo..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Profilo Lo&ngitudinale..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "E&sporta come..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Esporta come:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Esporta" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Informazioni sul Sistema:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Anteprima di stampa" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Stampa" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Stampa..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Battute topografia di Super&ficie" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Modifica Waypoint" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr " (inutilizzato nella vista in prospettiva)" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Tempo: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Questa versione di %s richiede le librerie OpenGL, ma non sono disponibili." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Nascondi" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Sbiadire" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Mostra" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Sto leggendo i dati - attendere per favore…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "La stazione %s non é stata trovata" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "Tiro %s → %s non trovato" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Inizio dalla stazione %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "Sviluppo verso sinistra a partire dalla stazione %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "Sviluppo verso destra a partire dalla stazione %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "Sviluppo verso sinistra a partire dal tiro %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "Sviluppo verso destra a partire dal tiro %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "Topografia interrotta alla stazione %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "Topografia interrotta al tiro %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Cambia lo sviluppo del disegno a partire dalla stazione %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Cambia lo sviluppo del disegno a partire dal tiro %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "Applicazione del file di specifiche: “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Scrittura %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "ordina secondo il fattore di errore orizzontale" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "ordina secondo il fattore di errore verticale" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "ordina secondo l'errore percentuale" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "ordina secondo l'errore per tiro" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "sostituisci il file .err con quello riordinato" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "Non posso analizzare il file .err degli errori" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Spostato da (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Aggiunto: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Rimosso: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 #, fuzzy msgid "Reentering an existing survey is deprecated" msgstr "Reimmettere un prefisso di livello giá esistente é sconsigliato" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Giá utilizzato qui" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT é sconsigliato" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "riavvolgi il file e rileggilo una seconda volta" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "Inizializzazione del sistema di coordinate d'ingresso “%s†fallito" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "Inizializzazione del sistema di coordinate di uscita “%s†fallito" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "Genera la griglia (predefinita %sm)" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "Altezza etichette di stazione (predefinita %s)" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "Dimensioni simbolo di stazione (predefinito %s)" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "produce un file CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "produce un file DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "produce un file EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "produce un file GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "produce un file HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "produce un file JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "produce un file KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "produce un file Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "produce un file Survex POS" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "produce un file Compass PLT per Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "produce un file SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Errore nel formato del file dei caratteri “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "Superficie S&olida" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d trovate" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Preferenze..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Disegna le pareti" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Stima lel letture DSSS con ragionamento euristico" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Segna le stazioni con croci" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "Evidenzia le stazioni segnate come ingressi" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Evidenzia le stazioni segnate come punti fissi" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Evidenzia le stazioni che sono esportate" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Segna le stazioni con i loro nomi" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Permetti che i nomi si sovrappongano (piú veloce)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Mostra i tiri del rilievo sotteraneo" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Mostra i tiri del rilievo di superficie" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "Colora i rilievi superficiali per la profonditá" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Disegna i tiri in superficie con linee tratteggiate" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Disegna una griglia" #: n:362 #~ msgid "metric units" #~ msgstr "metri" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "unitá inglesi" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "gradi sessagesimali (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "gradi decimali" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Mostra le distanze in" #: n:367 #~ msgid "Display angles in" #~ msgstr "Mostra gli angoli in" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Inverte il senso dei controlli" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Mostra la scala" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Mostra barra delle profonditá" #: n:371 #~ msgid "Display compass" #~ msgstr "Mostra bussola" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Mostra clinometro" #: n:373 #~ msgid "Display side panel" #~ msgstr "Mostra pannello laterale" survex-1.4.4/lib/ChineseSimplified.isl0000644000175000017500000004741514206061246014654 00000000000000; *** Inno Setup version 6.1.0+ Chinese Simplified messages *** ; ; To download user-contributed translations of this file, go to: ; https://jrsoftware.org/files/istrans/ ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). ; ; Maintained by Zhenghan Yang ; Email: 847320916@QQ.com ; Translation based on network resource ; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation ; [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=简体中文 ; If Language Name display incorrect, uncomment next line ; LanguageName=<7B80><4F53><4E2D><6587> ; About LanguageID, to reference link: ; https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c LanguageID=$0804 LanguageCodePage=936 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** åº”ç”¨ç¨‹åºæ ‡é¢˜ SetupAppTitle=安装 SetupWindowTitle=安装 - %1 UninstallAppTitle=å¸è½½ UninstallAppFullTitle=%1 å¸è½½ ; *** Misc. common InformationTitle=ä¿¡æ¯ ConfirmTitle=确认 ErrorTitle=错误 ; *** SetupLdr messages SetupLdrStartupMessage=现在将安装 %1。您想è¦ç»§ç»­å—? LdrCannotCreateTemp=ä¸èƒ½åˆ›å»ºä¸´æ—¶æ–‡ä»¶ã€‚安装中断。 LdrCannotExecTemp=ä¸èƒ½æ‰§è¡Œä¸´æ—¶ç›®å½•中的文件。安装中断。 HelpTextNote= ; *** å¯åŠ¨é”™è¯¯æ¶ˆæ¯ LastErrorMessage=%1.%n%n错误 %2: %3 SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或者获å–程åºçš„æ–°å‰¯æœ¬ã€‚ SetupFileCorrupt=安装文件已æŸå。请获å–程åºçš„æ–°å‰¯æœ¬ã€‚ SetupFileCorruptOrWrongVer=安装文件已æŸå,或是与这个安装程åºçš„版本ä¸å…¼å®¹ã€‚è¯·ä¿®æ­£è¿™ä¸ªé—®é¢˜æˆ–èŽ·å–æ–°çš„程åºå‰¯æœ¬ã€‚ InvalidParameter=æ— æ•ˆçš„å‘½ä»¤è¡Œå‚æ•°ï¼š%n%n%1 SetupAlreadyRunning=å®‰è£…ç¨‹åºæ­£åœ¨è¿è¡Œã€‚ WindowsVersionNotSupported=这个程åºä¸æ”¯æŒå½“å‰è®¡ç®—机è¿è¡Œçš„Windows版本。 WindowsServicePackRequired=这个程åºéœ€è¦ %1 æœåŠ¡åŒ… %2 或更高。 NotOnThisPlatform=这个程åºå°†ä¸èƒ½è¿è¡ŒäºŽ %1。 OnlyOnThisPlatform=这个程åºå¿…é¡»è¿è¡ŒäºŽ %1。 OnlyOnTheseArchitectures=这个程åºåªèƒ½åœ¨ä¸ºä¸‹åˆ—处ç†å™¨ç»“构设计的Windows版本中进行安装:%n%n%1 WinVersionTooLowError=这个程åºéœ€è¦ %1 版本 %2 或更高。 WinVersionTooHighError=这个程åºä¸èƒ½å®‰è£…于 %1 版本 %2 或更高。 AdminPrivilegesRequired=åœ¨å®‰è£…è¿™ä¸ªç¨‹åºæ—¶æ‚¨å¿…须以管ç†å‘˜èº«ä»½ç™»å½•。 PowerUserPrivilegesRequired=åœ¨å®‰è£…è¿™ä¸ªç¨‹åºæ—¶æ‚¨å¿…须以管ç†å‘˜èº«ä»½æˆ–有æƒé™çš„用户组身份登录。 SetupAppRunningError=安装程åºå‘现 %1 当剿­£åœ¨è¿è¡Œã€‚%n%n请先关闭所有è¿è¡Œçš„窗å£ï¼Œç„¶åŽç‚¹å‡»â€œç¡®å®šâ€ç»§ç»­ï¼Œæˆ–æŒ‰â€œå–æ¶ˆâ€é€€å‡ºã€‚ UninstallAppRunningError=å¸è½½ç¨‹åºå‘现 %1 当剿­£åœ¨è¿è¡Œã€‚%n%n请先关闭所有è¿è¡Œçš„窗å£ï¼Œç„¶åŽç‚¹å‡»â€œç¡®å®šâ€ç»§ç»­ï¼Œæˆ–æŒ‰â€œå–æ¶ˆâ€é€€å‡ºã€‚ ; *** å¯åŠ¨é—®é¢˜ PrivilegesRequiredOverrideTitle=é€‰æ‹©å®‰è£…ç¨‹åºæ¨¡å¼ PrivilegesRequiredOverrideInstruction=é€‰æ‹©å®‰è£…æ¨¡å¼ PrivilegesRequiredOverrideText1=%1 å¯ä»¥ä¸ºæ‰€æœ‰ç”¨æˆ·å®‰è£…(需è¦ç®¡ç†å‘˜æƒé™),或仅为您安装。 PrivilegesRequiredOverrideText2=%1 åªèƒ½ä¸ºæ‚¨å®‰è£…,或为所有用户安装(需è¦ç®¡ç†å‘˜æƒé™)。 PrivilegesRequiredOverrideAllUsers=为所有用户安装(&A) PrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(&A) (建议选项) PrivilegesRequiredOverrideCurrentUser=åªä¸ºæˆ‘安装(&M) PrivilegesRequiredOverrideCurrentUserRecommended=åªä¸ºæˆ‘安装(&M) (建议选项) ; *** 其它错误 ErrorCreatingDir=安装程åºä¸èƒ½åˆ›å»ºç›®å½•“%1â€ã€‚ ErrorTooManyFilesInDir=ä¸èƒ½åœ¨ç›®å½•“%1â€ä¸­åˆ›å»ºæ–‡ä»¶ï¼Œå› ä¸ºé‡Œé¢çš„æ–‡ä»¶å¤ªå¤š ; *** 安装程åºå…¬å…±æ¶ˆæ¯ ExitSetupTitle=é€€å‡ºå®‰è£…ç¨‹åº ExitSetupMessage=安装程åºè¿˜æœªå®Œæˆå®‰è£…。如果您现在退出,程åºå°†ä¸èƒ½å®‰è£…。%n%n您å¯ä»¥ä»¥åŽå†è¿è¡Œå®‰è£…程åºå®Œæˆå®‰è£…。%n%n现在退出安装程åºå—? AboutSetupMenuItem=关于安装程åº(&A)... AboutSetupTitle=å…³äºŽå®‰è£…ç¨‹åº AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4 AboutSetupNote= TranslatorNote= ; *** 按钮 ButtonBack=< 上一步(&B) ButtonNext=下一步(&N) > ButtonInstall=安装(&I) ButtonOK=确定 ButtonCancel=å–æ¶ˆ ButtonYes=是(&Y) ButtonYesToAll=全是(&A) ButtonNo=å¦(&N) ButtonNoToAll=å…¨å¦(&O) ButtonFinish=完æˆ(&F) ButtonBrowse=æµè§ˆ(&B)... ButtonWizardBrowse=æµè§ˆ(&R)... ButtonNewFolder=新建文件夹(&M) ; *** “选择语言â€å¯¹è¯æ¡†æ¶ˆæ¯ SelectLanguageTitle=选择安装语言 SelectLanguageLabel=选择安装时è¦ä½¿ç”¨çš„语言。 ; *** 公共å‘导文字 ClickNext=点击“下一步â€ç»§ç»­ï¼Œæˆ–ç‚¹å‡»â€œå–æ¶ˆâ€é€€å‡ºå®‰è£…程åºã€‚ BeveledLabel= BrowseDialogTitle=æµè§ˆæ–‡ä»¶å¤¹ BrowseDialogLabel=在下列列表中选择一个文件夹,然åŽç‚¹å‡»â€œç¡®å®šâ€ã€‚ NewFolderName=新建文件夹 ; *** “欢迎â€å‘导页 WelcomeLabel1=欢迎使用 [name] 安装å‘导 WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%næŽ¨èæ‚¨åœ¨ç»§ç»­å®‰è£…å‰å…³é—­æ‰€æœ‰å…¶å®ƒåº”用程åºã€‚ ; *** “密ç â€å‘导页 WizardPassword=å¯†ç  PasswordLabel1=è¿™ä¸ªå®‰è£…ç¨‹åºæœ‰å¯†ç ä¿æŠ¤ã€‚ PasswordLabel3=请输入密ç ï¼Œç„¶åŽç‚¹å‡»â€œä¸‹ä¸€æ­¥â€ç»§ç»­ã€‚密ç åŒºåˆ†å¤§å°å†™ã€‚ PasswordEditLabel=密ç (&P): IncorrectPassword=您所输入的密ç ä¸æ­£ç¡®ï¼Œè¯·é‡è¯•。 ; *** “许å¯åè®®â€å‘导页 WizardLicense=许å¯åè®® LicenseLabel=继续安装å‰è¯·é˜…读下列é‡è¦ä¿¡æ¯ã€‚ LicenseLabel3=请仔细阅读下列许å¯å议。您在继续安装å‰å¿…é¡»åŒæ„这些åè®®æ¡æ¬¾ã€‚ LicenseAccepted=æˆ‘åŒæ„æ­¤åè®®(&A) LicenseNotAccepted=我ä¸åŒæ„æ­¤åè®®(&D) ; *** “信æ¯â€å‘导页 WizardInfoBefore=ä¿¡æ¯ InfoBeforeLabel=请在继续安装å‰é˜…读下列é‡è¦ä¿¡æ¯ã€‚ InfoBeforeClickLabel=如果您想继续安装,点击“下一步â€ã€‚ WizardInfoAfter=ä¿¡æ¯ InfoAfterLabel=请在继续安装å‰é˜…读下列é‡è¦ä¿¡æ¯ã€‚ InfoAfterClickLabel=如果您想继续安装,点击“下一步â€ã€‚ ; *** “用户信æ¯â€å‘导页 WizardUserInfo=ç”¨æˆ·ä¿¡æ¯ UserInfoDesc=请输入您的信æ¯ã€‚ UserInfoName=用户å(&U): UserInfoOrg=组织(&O): UserInfoSerial=åºåˆ—å·(&S): UserInfoNameRequired=您必须输入用户å。 ; *** “选择目标目录â€å‘导页 WizardSelectDir=选择目标ä½ç½® SelectDirDesc=您想将 [name] 安装在哪里? SelectDirLabel3=安装程åºå°†å®‰è£… [name] 到下列文件夹中。 SelectDirBrowseLabel=点击“下一步â€ç»§ç»­ã€‚如果您想选择其它文件夹,点击“æµè§ˆâ€ã€‚ DiskSpaceGBLabel=è‡³å°‘éœ€è¦æœ‰ [gb] GB çš„å¯ç”¨ç£ç›˜ç©ºé—´ã€‚ DiskSpaceMBLabel=è‡³å°‘éœ€è¦æœ‰ [mb] MB çš„å¯ç”¨ç£ç›˜ç©ºé—´ã€‚ CannotInstallToNetworkDrive=å®‰è£…ç¨‹åºæ— æ³•安装到一个网络驱动器。 CannotInstallToUNCPath=å®‰è£…ç¨‹åºæ— æ³•安装到一个UNC路径。 InvalidPath=æ‚¨å¿…é¡»è¾“å…¥ä¸€ä¸ªå¸¦é©±åŠ¨å™¨å·æ ‡çš„完整路径,例如:%n%nC:\APP%n%n或下列形å¼çš„UNC路径:%n%n\\server\share InvalidDrive=您选定的驱动器或 UNC 共享ä¸å­˜åœ¨æˆ–ä¸èƒ½è®¿é—®ã€‚请选选择其它ä½ç½®ã€‚ DiskSpaceWarningTitle=没有足够的ç£ç›˜ç©ºé—´ DiskSpaceWarning=安装程åºè‡³å°‘éœ€è¦ %1 KB çš„å¯ç”¨ç©ºé—´æ‰èƒ½å®‰è£…ï¼Œä½†é€‰å®šé©±åŠ¨å™¨åªæœ‰ %2 KB çš„å¯ç”¨ç©ºé—´ã€‚%n%n您一定è¦ç»§ç»­å—? DirNameTooLong=文件夹å称或路径太长。 InvalidDirName=文件夹å称无效。 BadDirName32=文件夹åç§°ä¸èƒ½åŒ…å«ä¸‹åˆ—任何字符:%n%n%1 DirExistsTitle=文件夹已存在 DirExists=文件夹:%n%n%1%n%nå·²ç»å­˜åœ¨ã€‚您一定è¦å®‰è£…到这个文件夹中å—? DirDoesntExistTitle=文件夹ä¸å­˜åœ¨ DirDoesntExist=文件夹:%n%n%1%n%nä¸å­˜åœ¨ã€‚您想è¦åˆ›å»ºæ­¤æ–‡ä»¶å¤¹å—? ; *** “选择组件â€å‘导页 WizardSelectComponents=选择组件 SelectComponentsDesc=您想安装哪些程åºçš„组件? SelectComponentsLabel2=选择您想è¦å®‰è£…çš„ç»„ä»¶ï¼›æ¸…é™¤æ‚¨ä¸æƒ³å®‰è£…的组件。然åŽç‚¹å‡»â€œä¸‹ä¸€æ­¥â€ç»§ç»­ã€‚ FullInstallation=完全安装 ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=简æ´å®‰è£… CustomInstallation=自定义安装 NoUninstallWarningTitle=组件已存在 NoUninstallWarning=å®‰è£…ç¨‹åºæ£€æµ‹åˆ°ä¸‹åˆ—组件已在您的电脑中安装:%n%n%1%n%nå–æ¶ˆé€‰å®šè¿™äº›ç»„ä»¶å°†ä¸èƒ½å¸è½½å®ƒä»¬ã€‚%n%n您一定è¦ç»§ç»­å—? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceGBLabel=当å‰é€‰æ‹©çš„ç»„ä»¶è‡³å°‘éœ€è¦ [gb] GB çš„ç£ç›˜ç©ºé—´ã€‚ ComponentsDiskSpaceMBLabel=当å‰é€‰æ‹©çš„ç»„ä»¶è‡³å°‘éœ€è¦ [mb] MB çš„ç£ç›˜ç©ºé—´ã€‚ ; *** “选择附加任务â€å‘导页 WizardSelectTasks=选择附加任务 SelectTasksDesc=您想è¦å®‰è£…ç¨‹åºæ‰§è¡Œå“ªäº›é™„加任务? SelectTasksLabel2=选择您想è¦å®‰è£…程åºåœ¨å®‰è£… [name] 时执行的附加任务,然åŽç‚¹å‡»â€œä¸‹ä¸€æ­¥â€ã€‚ ; *** “选择开始èœå•文件夹â€å‘导页 WizardSelectProgramGroup=选择开始èœå•文件夹 SelectStartMenuFolderDesc=安装程åºåº”该在哪里放置程åºçš„å¿«æ·æ–¹å¼ï¼Ÿ SelectStartMenuFolderLabel3=安装程åºçŽ°åœ¨å°†åœ¨ä¸‹åˆ—å¼€å§‹èœå•文件夹中创建程åºçš„å¿«æ·æ–¹å¼ã€‚ SelectStartMenuFolderBrowseLabel=点击“下一步â€ç»§ç»­ã€‚如果您想选择其它文件夹,点击“æµè§ˆâ€ã€‚ MustEnterGroupName=您必须输入一个文件夹å。 GroupNameTooLong=æ–‡ä»¶å¤¹åæˆ–路径太长。 InvalidGroupName=æ–‡ä»¶å¤¹åæ˜¯æ— æ•ˆçš„。 BadGroupName=文件夹åä¸èƒ½åŒ…å«ä¸‹åˆ—任何字符:%n%n%1 NoProgramGroupCheck2=ä¸åˆ›å»ºå¼€å§‹èœå•文件夹(&D) ; *** “准备安装â€å‘导页 WizardReady=准备安装 ReadyLabel1=安装程åºçŽ°åœ¨å‡†å¤‡å¼€å§‹å®‰è£… [name] 到您的电脑中。 ReadyLabel2a=点击“安装â€ç»§ç»­æ­¤å®‰è£…程åºã€‚如果您想è¦å›žé¡¾æˆ–修改设置,请点击“上一步â€ã€‚ ReadyLabel2b=点击“安装â€ç»§ç»­æ­¤å®‰è£…程åºï¼Ÿ ReadyMemoUserInfo=用户信æ¯ï¼š ReadyMemoDir=目标ä½ç½®ï¼š ReadyMemoType=安装类型: ReadyMemoComponents=选定组件: ReadyMemoGroup=开始èœå•文件夹: ReadyMemoTasks=附加任务: ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile DownloadingLabel=正在下载附加文件... ButtonStopDownload=åœæ­¢ä¸‹è½½(&S) StopDownload=您确定è¦åœæ­¢ä¸‹è½½å—? ErrorDownloadAborted=下载已中止 ErrorDownloadFailed=下载失败:%1 %2 ErrorDownloadSizeFailed=获å–下载大å°å¤±è´¥ï¼š%1 %2 ErrorFileHash1=校验文件哈希失败:%1 ErrorFileHash2=无效的文件哈希:预期 %1,实际 %2 ErrorProgress=无效的进度:%1,总共%2 ErrorFileSize=文件大å°é”™è¯¯ï¼šé¢„期 %1,实际 %2 ; *** “正在准备安装â€å‘导页 WizardPreparing=正在准备安装 PreparingDesc=å®‰è£…ç¨‹åºæ­£åœ¨å‡†å¤‡å®‰è£… [name] 到您的电脑中。 PreviousInstallNotCompleted=å…ˆå‰ç¨‹åºçš„安装/å¸è½½æœªå®Œæˆã€‚您需è¦é‡æ–°å¯åŠ¨æ‚¨çš„ç”µè„‘æ‰èƒ½å®Œæˆå®‰è£…。%n%nåœ¨é‡æ–°å¯åŠ¨ç”µè„‘åŽï¼Œå†è¿è¡Œå®‰è£…å®Œæˆ [name] 的安装。 CannotContinue=安装程åºä¸èƒ½ç»§ç»­ã€‚è¯·ç‚¹å‡»â€œå–æ¶ˆâ€é€€å‡ºã€‚ ApplicationsFound=ä¸‹åˆ—åº”ç”¨ç¨‹åºæ­£åœ¨ä½¿ç”¨çš„æ–‡ä»¶éœ€è¦æ›´æ–°è®¾ç½®ã€‚它是建议您å…许安装程åºè‡ªåŠ¨å…³é—­è¿™äº›åº”ç”¨ç¨‹åºã€‚ ApplicationsFound2=ä¸‹åˆ—åº”ç”¨ç¨‹åºæ­£åœ¨ä½¿ç”¨çš„æ–‡ä»¶éœ€è¦æ›´æ–°è®¾ç½®ã€‚它是建议您å…许安装程åºè‡ªåŠ¨å…³é—­è¿™äº›åº”ç”¨ç¨‹åºã€‚安装完æˆåŽï¼Œå®‰è£…程åºå°†å°è¯•釿–°å¯åŠ¨åº”ç”¨ç¨‹åºã€‚ CloseApplications=自动关闭该应用程åº(&A) DontCloseApplications=ä¸è¦å…³é—­è¯¥åº”用程åº(&D) ErrorCloseApplications=å®‰è£…ç¨‹åºæ— æ³•自动关闭所有应用程åºã€‚在继续之å‰ï¼Œæˆ‘ä»¬å»ºè®®æ‚¨å…³é—­æ‰€æœ‰ä½¿ç”¨éœ€è¦æ›´æ–°çš„å®‰è£…ç¨‹åºæ–‡ä»¶ã€‚ PrepareToInstallNeedsRestart=安装程åºå¿…须釿–°å¯åŠ¨è®¡ç®—æœºã€‚é‡æ–°å¯åŠ¨è®¡ç®—æœºåŽï¼Œè¯·å†æ¬¡è¿è¡Œå®‰è£…程åºä»¥å®Œæˆ [name] 的安装。%n%n是å¦ç«‹å³é‡æ–°å¯åŠ¨ï¼Ÿ ; *** “正在安装â€å‘导页 WizardInstalling=正在安装 InstallingLabel=å®‰è£…ç¨‹åºæ­£åœ¨å®‰è£… [name] 到您的电脑中,请ç¨ç­‰ã€‚ ; *** “安装完æˆâ€å‘导页 FinishedHeadingLabel=[name] å®‰è£…å®Œæˆ FinishedLabelNoIcons=安装程åºå·²åœ¨æ‚¨çš„电脑中安装了 [name]。 FinishedLabel=安装程åºå·²åœ¨æ‚¨çš„电脑中安装了 [name]。此应用程åºå¯ä»¥é€šè¿‡é€‰æ‹©å®‰è£…çš„å¿«æ·æ–¹å¼è¿è¡Œã€‚ ClickFinish=点击“完æˆâ€é€€å‡ºå®‰è£…程åºã€‚ FinishedRestartLabel=è¦å®Œæˆ [name] 的安装,安装程åºå¿…须釿–°å¯åŠ¨æ‚¨çš„ç”µè„‘ã€‚æ‚¨æƒ³è¦ç«‹å³é‡æ–°å¯åЍå—? FinishedRestartMessage=è¦å®Œæˆ [name] 的安装,安装程åºå¿…须釿–°å¯åŠ¨æ‚¨çš„ç”µè„‘ã€‚%n%n您想è¦ç«‹å³é‡æ–°å¯åЍå—? ShowReadmeCheck=是,我想查阅自述文件 YesRadio=是,立å³é‡æ–°å¯åŠ¨ç”µè„‘(&Y) NoRadio=å¦ï¼Œç¨åŽé‡æ–°å¯åŠ¨ç”µè„‘(&N) ; used for example as 'Run MyProg.exe' RunEntryExec=è¿è¡Œ %1 ; used for example as 'View Readme.txt' RunEntryShellExec=查阅 %1 ; *** “安装程åºéœ€è¦ä¸‹ä¸€å¼ ç£ç›˜â€æç¤º ChangeDiskTitle=安装程åºéœ€è¦ä¸‹ä¸€å¼ ç£ç›˜ SelectDiskLabel2=请æ’å…¥ç£ç›˜ %1 并点击“确定â€ã€‚%n%n如果这个ç£ç›˜ä¸­çš„æ–‡ä»¶å¯ä»¥åœ¨ä¸‹åˆ—文件夹之外的文件夹中找到,请输入正确的路径或点击“æµè§ˆâ€ã€‚ PathLabel=路径(&P): FileNotInDir2=文件“%1â€ä¸èƒ½åœ¨â€œ%2â€å®šä½ã€‚请æ’入正确的ç£ç›˜æˆ–选择其它文件夹。 SelectDirectoryLabel=请指定下一张ç£ç›˜çš„ä½ç½®ã€‚ ; *** å®‰è£…çŠ¶æ€æ¶ˆæ¯ SetupAborted=å®‰è£…ç¨‹åºæœªå®Œæˆå®‰è£…。%n%nè¯·ä¿®æ­£è¿™ä¸ªé—®é¢˜å¹¶é‡æ–°è¿è¡Œå®‰è£…程åºã€‚ AbortRetryIgnoreSelectAction=选择æ“作 AbortRetryIgnoreRetry=é‡è¯•(&T) AbortRetryIgnoreIgnore=忽略错误并继续(&I) AbortRetryIgnoreCancel=å…³é—­å®‰è£…ç¨‹åº ; *** å®‰è£…çŠ¶æ€æ¶ˆæ¯ StatusClosingApplications=正在关闭应用程åº... StatusCreateDirs=正在创建目录... StatusExtractFiles=正在解压缩文件... StatusCreateIcons=æ­£åœ¨åˆ›å»ºå¿«æ·æ–¹å¼... StatusCreateIniEntries=正在创建 INI æ¡ç›®... StatusCreateRegistryEntries=正在创建注册表æ¡ç›®... StatusRegisterFiles=正在注册文件... StatusSavingUninstall=正在ä¿å­˜å¸è½½ä¿¡æ¯... StatusRunProgram=正在完æˆå®‰è£…... StatusRestartingApplications=正在é‡å¯åº”用程åº... StatusRollback=正在撤销更改... ; *** 其它错误 ErrorInternal2=内部错误:%1 ErrorFunctionFailedNoCode=%1 失败 ErrorFunctionFailed=%1 å¤±è´¥ï¼›é”™è¯¯ä»£ç  %2 ErrorFunctionFailedWithMessage=%1 å¤±è´¥ï¼›é”™è¯¯ä»£ç  %2.%n%3 ErrorExecutingProgram=ä¸èƒ½æ‰§è¡Œæ–‡ä»¶ï¼š%n%1 ; *** 注册表错误 ErrorRegOpenKey=打开注册表项时出错:%n%1\%2 ErrorRegCreateKey=创建注册表项时出错:%n%1\%2 ErrorRegWriteKey=写入注册表项时出错:%n%1\%2 ; *** INI 错误 ErrorIniEntry=在文件“%1â€ä¸­åˆ›å»ºINIæ¡ç›®æ—¶å‡ºé”™ã€‚ ; *** 文件å¤åˆ¶é”™è¯¯ FileAbortRetryIgnoreSkipNotRecommended=跳过这个文件(&S) (䏿ލè) FileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续(&I) (䏿ލè) SourceIsCorrupted=æºæ–‡ä»¶å·²æŸå SourceDoesntExist=æºæ–‡ä»¶â€œ%1â€ä¸å­˜åœ¨ ExistingFileReadOnly2=无法替æ¢çŽ°æœ‰æ–‡ä»¶ï¼Œå› ä¸ºå®ƒæ˜¯åªè¯»çš„。 ExistingFileReadOnlyRetry=移除åªè¯»å±žæ€§å¹¶é‡è¯•(&R) ExistingFileReadOnlyKeepExisting=ä¿ç•™çŽ°æœ‰æ–‡ä»¶(&K) ErrorReadingExistingDest=å°è¯•读å–现有文件时出错: FileExistsSelectAction=选择æ“作 FileExists2=文件已ç»å­˜åœ¨ã€‚ FileExistsOverwriteExisting=覆盖已ç»å­˜åœ¨çš„æ–‡ä»¶(&O) FileExistsKeepExisting=ä¿ç•™çŽ°æœ‰çš„æ–‡ä»¶(&K) FileExistsOverwriteOrKeepAll=ä¸ºæ‰€æœ‰çš„å†²çªæ–‡ä»¶æ‰§è¡Œæ­¤æ“作(&D) ExistingFileNewerSelectAction=选择æ“作 ExistingFileNewer2=现有的文件比安装程åºå°†è¦å®‰è£…的文件更新。 ExistingFileNewerOverwriteExisting=覆盖已ç»å­˜åœ¨çš„æ–‡ä»¶(&O) ExistingFileNewerKeepExisting=ä¿ç•™çŽ°æœ‰çš„æ–‡ä»¶(&K) (推è) ExistingFileNewerOverwriteOrKeepAll=ä¸ºæ‰€æœ‰çš„å†²çªæ–‡ä»¶æ‰§è¡Œæ­¤æ“作(&D) ErrorChangingAttr=å°è¯•改å˜ä¸‹åˆ—现有的文件的属性时出错: ErrorCreatingTemp=å°è¯•在目标目录创建文件时出错: ErrorReadingSource=å°è¯•读å–ä¸‹åˆ—æºæ–‡ä»¶æ—¶å‡ºé”™ï¼š ErrorCopying=å°è¯•å¤åˆ¶ä¸‹åˆ—文件时出错: ErrorReplacingExistingFile=å°è¯•替æ¢çŽ°æœ‰çš„æ–‡ä»¶æ—¶å‡ºé”™ï¼š ErrorRestartReplace=釿–°å¯åŠ¨æ›¿æ¢å¤±è´¥ï¼š ErrorRenamingTemp=å°è¯•釿–°å‘½å以下目标目录中的一个文件时出错: ErrorRegisterServer=无法注册 DLL/OCX:%1 ErrorRegSvr32Failed=RegSvr32 å¤±è´¥ï¼›é€€å‡ºä»£ç  %1 ErrorRegisterTypeLib=无法注册类型库:%1 ; *** å¸è½½æ˜¾ç¤ºå字标记 ; used for example as 'My Program (32-bit)' UninstallDisplayNameMark=%1 (%2) ; used for example as 'My Program (32-bit, All users)' UninstallDisplayNameMarks=%1 (%2, %3) UninstallDisplayNameMark32Bit=32ä½ UninstallDisplayNameMark64Bit=64ä½ UninstallDisplayNameMarkAllUsers=所有用户 UninstallDisplayNameMarkCurrentUser=当å‰ç”¨æˆ· ; *** 安装åŽé”™è¯¯ ErrorOpeningReadme=å°è¯•打开自述文件时出错。 ErrorRestartingComputer=安装程åºä¸èƒ½é‡æ–°å¯åŠ¨ç”µè„‘ï¼Œè¯·æ‰‹åŠ¨é‡å¯ã€‚ ; *** å¸è½½æ¶ˆæ¯ UninstallNotFound=文件“%1â€ä¸å­˜åœ¨ã€‚无法å¸è½½ã€‚ UninstallOpenError=文件“%1â€ä¸èƒ½æ‰“开。无法å¸è½½ã€‚ UninstallUnsupportedVer=此版本的å¸è½½ç¨‹åºæ— æ³•识别å¸è½½æ—¥å¿—文件“%1â€çš„æ ¼å¼ã€‚无法å¸è½½ UninstallUnknownEntry=在å¸è½½æ—¥å¿—中é‡åˆ°ä¸€ä¸ªæœªçŸ¥çš„æ¡ç›® (%1) ConfirmUninstall=您确认想è¦å®Œå…¨åˆ é™¤ %1 åŠå®ƒçš„æ‰€æœ‰ç»„ä»¶å—? UninstallOnlyOnWin64=这个安装程åºåªèƒ½åœ¨64ä½Windows中进行å¸è½½ã€‚ OnlyAdminCanUninstall=这个安装的程åºéœ€è¦æœ‰ç®¡ç†å‘˜æƒé™çš„用户æ‰èƒ½å¸è½½ã€‚ UninstallStatusLabel=正在从您的电脑中删除 %1,请ç¨ç­‰ã€‚ UninstalledAll=%1 已顺利地从您的电脑中删除。 UninstalledMost=%1 å¸è½½å®Œæˆã€‚%n%n有一些内容无法被删除。您å¯ä»¥æ‰‹åŠ¨åˆ é™¤å®ƒä»¬ã€‚ UninstalledAndNeedsRestart=è¦å®Œæˆ %1 çš„å¸è½½ï¼Œæ‚¨çš„ç”µè„‘å¿…é¡»é‡æ–°å¯åŠ¨ã€‚%n%n您想立å³é‡æ–°å¯åŠ¨ç”µè„‘å—? UninstallDataCorrupted=文件“%1â€å·²æŸå,无法å¸è½½ ; *** å¸è½½çŠ¶æ€æ¶ˆæ¯ ConfirmDeleteSharedFileTitle=删除共享文件å—? ConfirmDeleteSharedFile2=系统中包å«çš„下列共享文件已ç»ä¸å†è¢«å…¶å®ƒç¨‹åºä½¿ç”¨ã€‚您想è¦å¸è½½ç¨‹åºåˆ é™¤è¿™äº›å…±äº«æ–‡ä»¶å—?%n%nå¦‚æžœè¿™äº›æ–‡ä»¶è¢«åˆ é™¤ï¼Œä½†è¿˜æœ‰ç¨‹åºæ­£åœ¨ä½¿ç”¨è¿™äº›æ–‡ä»¶ï¼Œè¿™äº›ç¨‹åºå¯èƒ½ä¸èƒ½æ­£ç¡®æ‰§è¡Œã€‚如果您ä¸èƒ½ç¡®å®šï¼Œé€‰æ‹©â€œå¦â€ã€‚把这些文件ä¿ç•™åœ¨ç³»ç»Ÿä¸­ä»¥å…引起问题。 SharedFileNameLabel=文件å: SharedFileLocationLabel=ä½ç½®ï¼š WizardUninstalling=å¸è½½çŠ¶æ€ StatusUninstalling=正在å¸è½½ %1... ; *** Shutdown block reasons ShutdownBlockReasonInstallingApp=正在安装 %1。 ShutdownBlockReasonUninstallingApp=正在å¸è½½ %1。 ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 版本 %2 AdditionalIcons=é™„åŠ å¿«æ·æ–¹å¼ï¼š CreateDesktopIcon=创建桌é¢å¿«æ·æ–¹å¼(&D) CreateQuickLaunchIcon=创建快速è¿è¡Œæ å¿«æ·æ–¹å¼(&Q) ProgramOnTheWeb=%1 网站 UninstallProgram=å¸è½½ %1 LaunchProgram=è¿è¡Œ %1 AssocFileExtension=å°† %2 文件扩展å与 %1 建立关è”(&A) AssocingFileExtension=正在将 %2 文件扩展å与 %1 建立关è”... AutoStartProgramGroupDescription=å¯åŠ¨ç»„ï¼š AutoStartProgram=自动å¯åЍ %1 AddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想è¦ç»§ç»­å—? survex-1.4.4/lib/pt_BR.po0000644000175000017500000026237714205617674012146 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 22:05:08 +0000\n" "Last-Translator: Olly Betts \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Arquivo" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotação" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientação" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Visualisar" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Controles" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "A&juda" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "A&presentação" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Uso" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Memória insuficiente" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Memória insuficiente (são necesssários mais %lu bytes)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Memória insuficiente: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Para processar estes dados é necessária a versão %s (ou posterior) do Survex." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "aviso" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "erro" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "No arquivo incluído em %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix descontinuado - use *begin e *end em seu lugar" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Caractere “%c†não permitido em nome de base (use *SET NAMES para configurar os caracteres permitidos)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Campo não pode ser omitido" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "Esperava valor numérico, encontrei “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "Encontrado “%sâ€, quando era esperado “PRESERVEâ€, “TOUPPER†ou “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Erro no programa! Por favor, comunique aos autores" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Comando desconhecido “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Base “%s†igualada a ela mesma" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "Azimute não pode ser omitido exceto em visadas em prumo" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Distância não pode ser omitido" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Final da linha não está em branco" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Há %d alerta(s)." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "A execução do comando “%s†falhou" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Erro ao ler o arquivo" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Hà muitos erros - desistindo" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT decontinuado - use *CALIBRATE/DATA/SD/UNITS com argumento DEFAULT em seu lugar" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Azimute fornecido numa visada vertical" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END sem o BEGIN correspondente neste arquivo" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN sem o END correspondente neste arquivo" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "Base “%s†não exportada da topo “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†não pode ser nome de base e de topografia ao mesmo tempo" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "Esperava um nome de base" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "Encontrado “%s†quando “EQUATESâ€, “EXPORTS†ou “PLUMBS†era esperado" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "Encontrado “%s†quando “ON†ou “OFF†eram esperados" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Apenas uma base para o comando EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Tipo de quantidade “%s†desconhecida" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unidade “%s†desconhecida" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 #, fuzzy msgid "Matching BEGIN command has no survey name" msgstr "O BEGIN correspondente não tem prefixo" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unidade “%s†inválida para tipo de quantidade" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Instrumento “%s†desconhecido" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Fator de escala tem que ser 1.0 para comando DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Fator de escala não pode ser zero" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Configuração “%s†desconhecida" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Classe de caracteres desconhecida: “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Nenhum dado topográfico" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Nome de arquivo “%s†referencia diretório ao invés de arquivo" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "Topografia não completamente conectada a bases posicionadas" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Base já posicionada ou com correspondência a uma base posicionada" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Não foi possível abrir arquivo de saída “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "Desvio-padrão deve ser positivo" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Visada com mesma base em ambas as pontas (“%sâ€) - erro de digitação?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Inclinação maior que %.f%s em valor absoluto" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Tentativa de igualar duas bases posicionadas em coordenadas diferentes: “%s†e “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Igualando duas bases posicionadas nas mesmas coordenadas: “%s†e “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Comando FIX sem coordenadas - atribuindo (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Base já posicionada nessas coordenadas" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, fuzzy, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Mais de um comando FIX sem coordenadas: “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT deve estar logo após um “*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Ano inválido (< 1900 or > 2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Azimute suspeito" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Distância negativa" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Mesma base posicionada duas vezes sem coordenadas" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Distância menor que mudança de profundidade" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Campo “%s†não é permitido em tipo de visada “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Faltam campos necessários ao tipo de visada “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Tipo de visada “%s†desconhecido" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Base “%s†já foi exportada" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Campo “%s†duplicado" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG “%s†com problemas" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "Falta \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, fuzzy, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "Base “%s†utilizada apenas uma vez, e com um prefixo explícito - erro de digitação?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "As seguintes bases não estão conectadas a uma base posicionada:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "Topografia sem bases posicionadas. Assim %s foi posicionada em (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Base posicionada não usada “%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Coordenadas já calculadas - nenhum sistema de equações para resolver." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Resolvendo sistema de %d equações" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "Valor “%s†duplica valor(es) anterior(es)" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Resolvendo uma equação" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Distância ajustada negativa" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "Data está no futuro!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "Data final do intervalo ocorre antes da data inicial" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Especificada secção cruzada numa base “%s†inexistente" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Valores de CLINO e BACKCLINO têm que ser do mesmo tipo" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Mês inválido" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Dia inválido" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "Esperando nome de topografia" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Impossível abrir arquivo “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Não foi possível gravar o arquivo “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Futuros usos deste recurso desaconselhado não serão reportados" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Ângulos de COMPASS e BACKCOMPASS diferem em %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Ângulos de CLINO e BACKCLINO diferem em %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†obsoleto - use “*data %s …†no lugar" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Arquivo de imagem 3d “%s†com problemas" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Data e hora não disponível." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Erro lendo arquivo “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Erro escrevendo no arquivo “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Erro escrevendo em arquivo" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Há %d alerta(s) e %d erro(s) - nenhum arquivo de saída criado" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Arquivo “%s†tem um formato mais novo do que este programa consegue entender" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Norte" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Perfil em" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Planta" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "Pe&rfil" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Perfil" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Planta" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Calculando estatísticas" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "Esperando cadeia de caracteres" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "número de argumentos insuficiente" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "número de argumentos excessivo" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "ARQUIVO" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Removendo seqüências de ponta" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Concatenando seqüências" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Calculando seqüências" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Calculando seqüências de ponta" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Simplificando rede de visadas" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Calculando rede de visadas" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "Encontrado “%s†quando “F†ou “B†eram esperados" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Desenvolvimento linear das visadas = %7.2f%s (%7.2f%s corrigidos)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Desenvolvimento horizontal das visadas = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Desenvolvimento vertical das visadas = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Desnível = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensão Norte-Sul = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensão Leste-Oeste = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Há 1 loop." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Há %ld loops." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Tempo de CPU gasto %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Tempo gasto %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Tempo gasto não disponível" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Tempo gasto %5.2fs (tempo de CPU %5.2fs)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Desenvolvimento Original %6.2fm (%3d visadas), deslocado %6.2fm (%5.2fm/visada). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Erro %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Erro N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "exibir esta mensagem e sair" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "exibir número de versão e sair" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPÇÃO" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Escala" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Tente “%s --help†para maiores informações.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, fuzzy, c-format msgid "Processed: %s" msgstr "Processada em %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Perfil retificado" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "Topografia contém somente uma base," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "Topografia contém %ld bases," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " unidas por uma única visada." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " unidas por %ld visadas." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "nodo" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "nodos" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "Topografia tem %ld componentes interligados." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Guardar Registro" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&Reprocesssar" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argumento numérico “%s†fora dos limites" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "argumento “%s†não é um número inteiro" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "argumento “%s†não é um número" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "“DUPLICATEâ€, “SPLAY†ou “SURFACE†eram esperados" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "“NOTâ€, “DUPLICATEâ€, “SPLAY†ou “SURFACE†eram esperados" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "“F†ou “M†eram esperados" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "Base “%s†referenciada por *entrance ou *export mas nunca usada" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Não há BEGIN correspondente" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 #, fuzzy msgid "Survey name doesn’t match BEGIN" msgstr "Prefixo não corresponde ao do BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 #, fuzzy msgid "Survey name omitted from END" msgstr "Prefixo omitido no END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Leste, Norte, Altura )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Profundidade: %d bpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (cor)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "Esperando data, encontrado “%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 #, fuzzy msgid "only load the sub-survey with this prefix" msgstr "carregue apenas a sub-topografia com prefixo" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "Fator em *UNITS não pode ser zero" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Não há dados de topografia no arquivo 3d “%sâ€" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Olhando para" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "Sobre %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Escolha um arquivo de relevo de superfície para examinar" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Arquivos de relevo de superfície" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 #, fuzzy msgid "Select a survey file to view" msgstr "Selecione um arquivo 3d para ser visualizado" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Arquivos 3d do Survex" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Todos os arquivos" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 #, fuzzy msgid "Survex svx files" msgstr "Arquivos svx do Survex" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "Arquivos CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "Arquivos DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "Arquivos EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "Arquivos GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "Arquivos KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Arquivos Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Arquivos Survex pos" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "Arquivos SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "Arquivos JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Arquivos de registro" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Ferramenta de visualização de Levantamento topográfico" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Este programa é um software de livre distribuição, que pode ser copiado e distribuído sob os termos da Licença Pública Geral GNU, conforme publicada pela Free Software Foundation, versão 2 da licença ou (a critério do autor) qualquer versão posterior." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Sem data" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE não pode ser o primeiro valor" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE não pode ser o último valor" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Valores em mais de uma linha sem NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "Valor “%s†deve estar antes do NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE só pode ser precedido por STATION, DEPTH e COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "Não é possível calibrar ângulos e comprimentos ao mesmo tempo" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Exportar..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Au&to-Rodar\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Inverter Sentido" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Olhar para &Norte" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Olhar para &Leste" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Olhar para &Sul" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Olhar para &Oeste" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&Planta" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Per&fil" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "&Restaurar Vista Predefinida" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Vista" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elementos" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Formato para exportar" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d páginas (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Uma página" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azimute" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Nome de base" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Nomes de base" #: ../src/survexport.cc:141 #: n:475 #, fuzzy msgid "station labels" msgstr "nomes de base" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Marcas de base" #: ../src/survexport.cc:140 #: n:474 #, fuzzy msgid "station markers" msgstr "marcas de base" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Visadas Subterrâneas" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "visadas subterrâneas" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Secções cruzadas" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "secções cruzadas" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Parede" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "parede" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Passagem" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "passagem" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Ângulo de inclinação" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Bordas da Página" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Legenda" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Páginas em branco" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Nomes de base\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "&Tubos de Passagem\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 #, fuzzy msgid "Terr&ain" msgstr "Terra&in" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Marcas de base\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Grade\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "Caixa &Barreira\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "&Visadas Subterrâneas\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Visadas de Super&fície\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "visadas de superfície" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "Nomes &Sobrepostos" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "Destacar &Entradas" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "Destacar Bases Fi&xadas" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "Destacar Bases Export&adas" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Entradas" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "entradas" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Bases Fixadas" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "bases fixadas" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Bases Exportadas" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "bases exportadas" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Pe&rspectiva" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "Parede Texturi&zadas" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Distância de desvanecimento de Ob&jectos" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Visadas S&uavizadas" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "Modo Ecrã &Completo\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Colorir de acordo com &Profundidade" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Colorir de acordo com &Data" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 #, fuzzy msgid "Colour by &Error" msgstr "Colorir de acordo com &Erros" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 #, fuzzy msgid "Colour by &Horizontal Error" msgstr "Colorir de acordo com Erros &Horizontal" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 #, fuzzy msgid "Colour by &Vertical Error" msgstr "Colorir de acordo com Erros &Vertical" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 #, fuzzy msgid "Colour by &Length" msgstr "Colorir de acordo com Desenvo&lvimento" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 #, fuzzy msgid "Colour by &Survey" msgstr "Colorir de acordo com &Topografia" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Bússola" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Clinômetro" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "Barra de &Escala" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Inverter Sentido\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Cancelar linha de medida\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "I&ndicadores" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: opção “%s†é ambígua\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: opção “%c%s†não permite argumentos\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: opção “--%s†não permite argumentos\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: opção “%s†requer um argumento\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opção requer um argumento -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: opção “--%s†não reconhecida\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: opção “%c%s†não reconhecida\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opção inválida -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nova Apresentação" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Abrir Apresentação..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "Guardar Apre&sentação" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "&Guardar Apresentação como..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Marcar" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "Reprodu&zir" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Exportar como Filme..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Escolha um nome de arquivo de saída" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Apresentações Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Guardar a Captura de Ecrã" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Escolha uma apresentação para abrir" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Erro no formato da apresentação “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Arquivos Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Arquivos CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Apresentação Modificada" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "A apresentação actual foi modificada. Abandonar as alterações não guardadas ?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Nada foi encontrado." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Procurar" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Esconder" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Altura" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Só é possível examinar um arquivo 3d de cada vez" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Painel lateral" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f L, %.2f N" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "De %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Dist %.2f%s, Azim %03.1f%s, Gradient %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Métrico" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Graus" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 #, fuzzy msgid "&Percent" msgstr "P&ercent" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "ft" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 #, fuzzy msgid "&Hide Compass" msgstr "&Esconder Bússola" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 #, fuzzy msgid "&Hide Clino" msgstr "&Esconder Clinômetro" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 #, fuzzy msgid "&Hide scale bar" msgstr "&Esconder barra de escala" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: H %.2f%s, Azim %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Topográficos" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Apresentação" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Mostrar tudo" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Esconder outros" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Leste" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Norte" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Abrir...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Abrir &Terreno..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Mostrar &Registro" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Imprimir...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "Configuração de &Página..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Captura de Ecrã..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Perfil Retifica&do..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Exportar como..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Exportar" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Informação sobre o Sistema:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Visualizar impressão" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Imprimir" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Imprimir..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Visadas de Super&fície" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Editar Waypoint" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Tempo: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Esta versão de %s necessita que o OpenGL funcione, mas não está." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Esconder" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Desvanecer" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 #, fuzzy msgid "&Dashed" msgstr "Das&hed" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Mostrar" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Lendo dados - por favor, aguarde…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "Falha ao procurar a base %s" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, fuzzy, c-format msgid "Failed to find leg %s → %s" msgstr "Não foi encontrada a visada %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Começando a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, fuzzy, c-format msgid "Extending to the left from station %s" msgstr "Estendendo-se para a esquerda a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, fuzzy, c-format msgid "Extending to the right from station %s" msgstr "Estendendo-se para a direita a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, fuzzy, c-format msgid "Extending to the left from leg %s → %s" msgstr "A estender para a esquerda a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, fuzzy, c-format msgid "Extending to the right from leg %s → %s" msgstr "A estender para a direita a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "A terminar ciclo de levantamento na base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, fuzzy, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "A terminar ciclo de levantamento na visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, fuzzy, c-format msgid "Swapping extend direction from station %s" msgstr "A trocar direcção estendida a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, fuzzy, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "A trocar a direcção da extensão a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "A aplicar arquivo de especificações (specfile): “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Escrevendo %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "Não foi possível analisar arquivo de erros (.err)" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Movido por (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Acrescentado: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Removido: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 #, fuzzy msgid "Reentering an existing survey is deprecated" msgstr "A re-utilização de um prefixo é desaconselhada" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Prefixo usado originalmente aqui" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT descontinuado" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "produzir arquivo CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "produzir arquivo DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "produzir arquivo EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "produzir arquivo GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "produzir arquivo HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "produzir arquivo JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "produzir arquivo KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "produzir arquivo Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "produzir arquivo Survex POS" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "produzir arquivo Compass PLT para o Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "produzir arquivo SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Erro no formato do arquivo de fontes “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "Superfície Só&lida" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d bases encontradas" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Preferências..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Desenhar Paredes da Passagem" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Estimar leituras LRUD baseadas na heurística" #: n:350 #, fuzzy #~ msgid "Mark survey stations with crosses" #~ msgstr "Marcar as base com cruzes" #: n:351 #, fuzzy #~ msgid "Highlight stations marked as entrances" #~ msgstr "Realçar base marcadas como de entradas" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Realçar bases marcadas como pontos fixos" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Realçar bases que são exportadas" #: n:354 #, fuzzy #~ msgid "Mark survey stations with their names" #~ msgstr "Marcar base com os nomes delas" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Permitir que os nomes se sobreponham na apresentação (mais rápido)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #, fuzzy #~ msgid "Display underground survey legs" #~ msgstr "Apresenta as visadas subterrâneas" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #, fuzzy #~ msgid "Display surface survey legs" #~ msgstr "Apresentar as visadas de superfície" #: n:359 #, fuzzy #~ msgid "Colour surface surveys by depth" #~ msgstr "Colorir topográficos de superficie segundo a profundidade" #: n:360 #, fuzzy #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Desenhar visadas de superficie com linhas tracejadas" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Desenhar um grade" #: n:362 #~ msgid "metric units" #~ msgstr "unidades métricas" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "unidades imperiais" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "graus (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "ângulos" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Apresentar medidas em" #: n:367 #~ msgid "Display angles in" #~ msgstr "Apresentar ângulos em" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Inverter a direcção dos controlos do rato" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Apresentar Barra de escala" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Apresentar Barra de profundidade" #: n:371 #~ msgid "Display compass" #~ msgstr "Apresentar bússola" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Apresentar inclinómetro" #: n:373 #~ msgid "Display side panel" #~ msgstr "Apresentar painel lateral" survex-1.4.4/lib/de_CH.po0000644000175000017500000026626114240111352012053 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-16 03:14:41 +0000\n" "Last-Translator: Olly Betts \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de_CH\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Datei" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotieren" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientierung" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Ansicht" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Steuerung" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Hilfe" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&Präsentation" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Aufruf" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Nicht genug Speicher vorhanden" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Nicht genug Speicher vorhanden (%lu Bytes nicht gefunden)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Nicht genug Speicher vorhanden beim Einlesen der Datei «%s»" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Zum Verarbeiten dieser Vermessungsdaten ist Survex-Version %s oder neuer erforderlich." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "Information" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "Warnung" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "Fehler" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "In von %s:%u aus eingelesener Datei:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix ist veraltet - stattdessen *begin und *end verwenden" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Ungültiges Zeichen «%c» in Messpunktname (erlaubte Zeichen können mit *SET NAMES definiert werden)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Eintragung fehlt" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "Zahl erwartet, «%s» gelesen" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "«PRESERVE», «TOUPPER» oder «TOLOWER» erwartet, «%s» gelesen" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Fehler im Programm, bitte informieren Sie die Programmierer darüber" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Unbekanntes Befehl «%s»" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Messpunkt «%s» mit sich selbst gleichgesetzt" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "Kompassablesung darf nur bei Lotstrecken weggelassen werden" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Längeneintrag fehlt" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Ende der Zeile ist nicht leer" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Es gab %d Warnungen." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Externer Befehl konnte nicht ausgeführt werden: «%s»" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Fehler beim Einlesen der Datei" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Abbruch wegen zu vieler Fehler" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT ist veraltet - stattdessen *CALIBRATE/DATA/SD/UNITS mit DEFAULT-Argument verwenden" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Kompassablesung für geloteten Schacht angegeben" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END ohne entsprechendes BEGIN in dieser Datei" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN ohne entsprechendes END in dieser Datei" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "Messpunkt «%s» nicht aus Vermessung «%s» exportiert" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "Referenz zu Messpunkt «%s» aus nicht existierender Vermessung «%s»" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "«%s» kann nicht ein Messpunkt und eine Vermessung sein" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "Messpunktname erwartet" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "«EQUATES», «EXPORTS» oder «PLUMBS» erwartet, «%s» gelesen" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "«ON» oder «OFF» erwartet, «%s» gelesen" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Nur ein Messpunkt im EQUATE-Befehl angegeben" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Unbekannte Grösse «%s»" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unbekannte Einheit(en) «%s»" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 #, fuzzy msgid "Matching BEGIN command has no survey name" msgstr "Zugehöriges BEGIN hatte kein Vermessungsnamen" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unpassende Einheit «%s» für diese Grösse" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Unbekanntes Instrument «%s»" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Skalenfaktor für die DECLINATION muss 1.0 sein" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Skalenfaktor muss von Null verschieden sein" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Ungültige Einstellung «%s»" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Unbekannte Zeichenklasse «%s»" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Keine Vermessungsdaten vorhanden" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Dateiname «%s» bezeichnet ein Verzeichnis" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "Teile der Vermessung sind nicht mit festen Messpunkten verbunden" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Messpunkt ist schon fest oder gleich einem festen Punkt" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Ausgabedatei «%s» konnte nicht geöffnet werden" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "Standardabweichung muss positiv sein" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Messstrecke mit einem auf sich selbst bezogenen Messpunkt («%s») – Tippfehler?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Neigungseintrag übertrifft %.f%s (Absolutwert)" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Versuch, zwei verschiedene feste Messpunkte gleichzusetzen: «%s» und «%s»" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Zwei identische feste Punkte miteinander gleichgesetzt: «%s» und «%s»" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "FIX-Befehl ohne Koordinatenwerte, wurde auf (0,0,0) gesetzt" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Messpunkt schon auf die gleichen Koordinaten festgelegt" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, fuzzy, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Mehr als ein FIX-Befehl ohne Koordinaten für Messpunkt «%s»" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT muss unmittelbar auf «*BEGIN » folgen" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Ungültiges Jahr (< 1900 oder > 2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Seltsamer Kompasswert" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Negativer Längeneintrag" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Gleicher Messpunkt zweimal ohne Koordinaten angegeben" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Längeneintrag ist kleiner als Höhenunterschied" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Messgrösse «%s» ist beim Datenformat «%s» nicht erlaubt" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Zu wenige Messwerte für Datenformat «%s»" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Datenformat «%s» unbekannt" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Messpunkt «%s» ist bereits exportiert" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Messgrösse «%s» mehrfach angegeben" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG «%s» unbekannt" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "\" fehlt" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, fuzzy, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "Messpunkt «%s» nur einmal erwähnt, mit explizitem Vermessungsnamen - Tippfehler?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "Die folgenden Messpunkte haben keine festen Koordinaten:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "Vermessung hat keine Festpunkte. %s wurde als Nullpunkt (0,0,0) gewählt" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Fester Messpunkt «%s» wird nicht verwendet" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Netzausgleichung gelöst durch Reduktion - kein Gleichungssystem erforderlich." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Löse System mit %d Gleichungen und Unbekannten" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "Eintrag «%s» wiederholt frühere(n)" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Eine Gleichung wird gelöst" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Negative korrigierte Streckenlänge" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "Datum liegt in der Zukunft!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "Das Enddatum ist früher als das Anfangsdatum" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Überschneidung an nicht existierendem Messpunkt «%s» angegeben" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "CLINO- und BACKCLINO-Eintrag müssen den gleichen Typ haben" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Ungültiger Monat" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Ungültiger Monatstag" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "Versionen %d bis %d des 3D-Dateiformats werden unterstützt" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "Name einer Vermessung erwartet" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Konnte Datei «%s» nicht öffnen" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "In die Datei «%s» konnte nicht geschrieben werden" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Weitere Vorkommen dieser veralteten Funktionalität werden nicht gemeldet werden" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "TAPE- und BACKTAPE-Eintrag differieren um %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "COMPASS- und BACKCOMPASS-Eintrag differieren um %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "CLINO- und BACKCLINO-Eintrag differieren um %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "«*data %s %c …» ist veraltet - verwenden Sie stattdessen «*data %s …»" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "3D-Bilddatei «%s» ist fehlerhaft" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Datum und Uhrzeit nicht feststellbar." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Fehler beim Lesen der Datei «%s»" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Fehler beim Schreiben in die Datei «%s»" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Fehler beim Schreiben in eine Datei" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Es gab %d Warnungen und %d Fehler - keine Ausgabedatei erstellt." #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Datei «%s» ist in einem neueren Format, als dieses Programm verarbeiten kann" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Norden" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Aufriss auf die Ebene" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Grundriss" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "&Aufriss" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Aufriss" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Grundriss" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Statistik wird berechnet" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "Textfeld erwartet" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "zu wenige Argumente" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "zu viele Argumente" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "DATEI" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Einseitig angeschlossene Messzüge werden entfernt" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Messzüge zwischen Abzweigungen werden verbunden" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Messzüge zwischen Abzweigungen werden berechnet" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Einseitig angeschlossene Messzüge werden berechnet" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Netzwerk wird vereinfacht" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Netzwerk wird ausgeglichen" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "«F» oder «B» erwartet, «%s» gelesen" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Gesamtlänge der Messstrecken = %7.2f%s (%7.2f%s ausgeglichen)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Gesamte Horizontallänge der Messstrecken = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Gesamte Vertikallänge der Messstrecken = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Vertikale Erstreckung = %4.2f%s (von %s auf %4.2f%s bis %s auf %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Nord-Süd-Erstreckung = %4.2f%s (von %s bei %4.2f%s bis %s bei %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Ost-West-Erstreckung = %4.2f%s (von %s bei %4.2f%s bis %s bei %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Es gibt eine Ringverbindung." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Es gibt %ld Ringverbindungen." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Benötigte Rechenzeit (CPU) %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Benötigte Zeit %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Benötigte Zeit nicht feststellbar" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Benötigte Zeit %5.2fs (%5.2fs CPU-Zeit)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Ursprüngliche Länge %6.2fm (%3d Strecken), verändert um %6.2fm (%5.2fm/Messstrecke). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Fehler %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Fehler belanglos" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "Diese Hilfemeldung anzeigen und Beenden" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "Versionsinformation ausgeben und beenden" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPTION" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Massstab" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Versuchen Sie «%s --help» für weitere Hinweise.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, fuzzy, c-format msgid "Processed: %s" msgstr "Berechnung von Seite %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "Grundriss, %s oben" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Aufriss in Richtung %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Aufriss in Richtung %s, Neigung %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Abwicklung" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "Vermessung enthält 1 Messpunkt," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "Vermessung enthält %ld Messpunkte," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " verbunden durch 1 Messstrecke." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " verbunden durch %ld Messstrecken." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "Verzweigungspunkt" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "Verzweigungspunkte" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "Netzwerk hat %ld zusammenhängende Teile." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Protokoll Speichern" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&Neu berechnen" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "Numerisches Argument «%s» ist nicht im gültigen Bereich" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "Argument «%s» ist keine Ganzzahl" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "Argument «%s» ist keine Zahl" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "«DUPLICATE», «SPLAY» oder «SURFACE» erwartet" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "«NOT», «DUPLICATE», «SPLAY» oder «SURFACE» erwartet" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "«F» oder «M» erwartet" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "In *entrance oder *export wird sich auf den Messpunkt «%s» bezogen, er wird aber nirgends verwendet" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Kein entsprechendes BEGIN" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 #, fuzzy msgid "Survey name doesn’t match BEGIN" msgstr "Vermessungsnamen passt nicht zu BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 #, fuzzy msgid "Survey name omitted from END" msgstr "Vermessungsnamen vor END fehlt" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Rechtsw.,Hochwert, Höhe )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Farbtiefe: %d bpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (Farbe)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "Datum erwartet, «%s» gelesen" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "Nur Teilvermessung mit diesem Präfix laden" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "Drucken und Beenden (3D-Datei erforderlich)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "Ort für Ausgabedateien festlegen" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "Nur kurze Zusammenfassung zeigen (-qq zeigt nur Fehler)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "Keine .err-Datei erstellen" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "Warnungen als Fehler behandeln" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "Ausgabe in .log-Datei protokollieren" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "Version des 3D-Dateiformats für die Ausgabe" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "Faktor nach *UNITS muss von Null verschieden sein" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Keine Vermessungsdaten in 3D-Datei «%s»" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Blickricht." #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "Über %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Geländedatei zur Ansicht wählen" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Geländedateien" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "Vermessungsdatei zur Ansicht wählen" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Survex 3D-Dateien" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Alle Dateien" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "Alle Vermessungsdateien" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "SVX-Dateien für Survex" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "Compass DAT- und MAK-Dateien" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "CSV-Dateien" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "DXF-Dateien" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "EPS-Dateien" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "GPX-Dateien" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "HPGL-Dateien für Plotter" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "KML-Dateien" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "Compass PLT-Dateien für Carto" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Skencil-Dateien" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Survex POS-Dateien" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "SVG-Dateien" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "JSON-Dateien" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Protokolldateien" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Visualisierungsprogramm für Vermessungsdaten" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wünschen) jeder späteren Version." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "DATEI1 DATEI2 [SCHWELLE]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "DATEI1 und DATEI2 können .pos- oder .3d-Dateien sein\nSCHWELLE ist die max. zu ignorierende Abweichung entlang beliebiger Achsen in Metern (Vorgabe %s)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "EINGABE-3D-DATEI [AUSGABE-3D-DATEI]" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "ERR-DATEI [WIE_VIELE]" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "[VERMESSUNGSDATEI]" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Nicht datiert" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "Nicht in Schleife" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE kann nicht der erste Eintrag sein" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE kann nicht der letzte Eintrag sein" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Abwechselnde Einträge, aber kein NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "Eintrag «%s» muss vor NEWLINE stehen" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "Vor NEWLINE kann nur STATION, DEPTH oder COUNT stehen" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "Winkel und Längen können nicht gleichzeitig kalibriert werden" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "*alias-Befehl ist fehlerhaft" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "%s-Fehlerprotokoll" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Exportieren..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Auto&matisch rotieren\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Andere Richtung" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Nach &Norden" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Nach &Osten" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Nach &Süden" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Nach &Westen" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&Grundriss" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "&Aufriss" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "&Zurück zur voreingestellten Ansicht" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Ansicht" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elemente" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Exportformat" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d Seiten (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Eine Seite" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Richtung" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Messpunktname" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Messpunktnamen" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "Messpunktbezeichnungen" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Kreuze" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "Messpunktmarkierungen" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Messstrecken unter Grund" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "Messstrecken unter Grund" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Überschneidungen" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "Überschneidungen" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Wände" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "Wände" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Passagen" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "Passagen" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "Ursprung in der Mitte" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "Ursprung in der Mitte" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "Vollständige Koordinaten" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "Vollständige Koordinaten" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "Befestigt am Boden" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "Befestigt am Boden" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Neigung" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Seitenrahmen" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Legende" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Leerseiten" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "Messpunkt&namen\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "3D-Pa&ssagen\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "Kreu&ze\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Gitter\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "&Begrenzendes Rechteck\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "Messstrecken unter Gr&und\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Messstrecken an der &Oberfläche\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "Messstrecken an der Oberfläche" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "Über&lappende Namen" #: ../src/mainfrm.cc:906 #: n:450 #, fuzzy msgid "Co&lour by" msgstr "&Colour by" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "&Eingänge hervorheben" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "&Festpunkte hervorheben" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "E&xportierte Punkte hervorheben" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Eingänge" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "Eingänge" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Festpunkte" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "Festpunkte" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Exportierte Punkte" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "Exportierte Punkte" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "&Perspektive" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "&Wandtextur" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Dunsteffe&kt" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Geglättete &Messstrecken" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "&Vollbild-Modus\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Farbe je nach &Tiefe" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Farbe je nach &Datum" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 #, fuzzy msgid "Colour by &Error" msgstr "Farbe je nach &Fehlern" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "Farbe je nach &horizontalen Fehlern" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "Farbe je nach &vertikalen Fehlern" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 #, fuzzy msgid "Colour by &Gradient" msgstr "Farbe je nach &Gefälle" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 #, fuzzy msgid "Colour by &Length" msgstr "Farbe je nach &Länge" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 #, fuzzy msgid "Colour by &Survey" msgstr "Farbe je nach Verme&ssung" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Kompass" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Neigungsanzeige" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "&Farbschlüssel" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "&Massstab" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "Richtung &umkehren\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "Messlinie &abschalten\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "&Richtungsanzeiger" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: Die Option «%s» ist nicht eindeutig\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: Die Option «%c%s» erlaubt kein Argument\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: Die Option «--%s» erlaubt kein Argument\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: Die Option «%s» benötigt ein Argument\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: Die Option verlangt ein Argmuent -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: Unbekannte Option «--%s»\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: Unbekannte Option «%c%s»\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ungültige Option -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Neue Präsentation" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Präsentation öffnen..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "Präsentation &speichern" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Präsentation speichern &als..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Markieren" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "Abspie&len" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Exportieren als Film..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "Film exportieren" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Name der Ausgabedatei wählen" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Aven Präsentationen" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Bildschirmabzug speichern" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Zu öffnende Präsentation auswählen" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Formatfehler in der Präsentationsdatei «%s»" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Compass PLT Datei" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "CAMP XYZ Datei" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Modifizierte Präsentation" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "Die aktuelle Präsentation wurde verändert. Abbrechen, ohne die Änderungen zu speichern?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Kein Treffer gefunden." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Suchen" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Verstecken" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "%d gefundene(n) Messpunkt(e) verstecken" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Höhe" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Es kann nur eine 3D-Datei zugleich angezeigt werden." #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Seitliches Kontrollfeld" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f R, %.2f H" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Von %s aus" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Dist %.2f%s, Richt. %03.1f%s, Gefälle %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Metrisch" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Grad" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Prozentual" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr " Meilen" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr " Meile" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "ft" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "in" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "&Kompass verstecken" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "&Clino verstecken" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "Massstab &verstecken" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "Farbschlüssel &verstecken" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: H %.2f%s, Richt. %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Vermessungen" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Präsentation" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Alles zeigen" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Andere ausblenden" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Rechtswert" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Hochwert" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "Ö&ffnen...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Gelände&modell öffnen..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "&Protokoll anzeigen" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Drucken...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "&Seite einrichten..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Bildschirmabzug..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "&Abwicklung..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Exportieren als..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Exportieren als:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Exportieren" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Systeminformation:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Druckvorschau" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Drucken" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Drucken..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Messstrecken an der Ober&fläche" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Wegpunkt bearbeiten" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr " (in Ansicht «Perspektive» ungenutzt)" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Zeit: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr " Sekunden (0 = auto; *6 = 6 mal auto)" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Diese Version von %s benötigt zum Funktionieren OpenGL, was jedoch nicht verfügbar ist." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "Trennzeichen im Vermessungsnamen" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 #, fuzzy msgid "anonymous station" msgstr "anonymer Messpunkt" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "Zwischen zwei anonymen Messpunkten kann keine Messstrecke sein" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "&Hilfslinien (splay)" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "Hilfslinien (splay)" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "&Doppelte Messstrecken" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Verstecken" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Dunsteffekt" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "&Gestrichelt" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Zeigen" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Daten werden eingelesen - bitte warten…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "Messpunkt konnte nicht gefunden werden: %s" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "Messstrecke konnte nicht gefunden werden: %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Bei diesem Messpunkt wird begonnen: %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "Von diesem Messpunkt aus nach links erweitern: %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "Von diesem Messpunkt aus nach rechts erweitern: %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "Von dieser Messstrecke aus nach links erweitern: %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "Von dieser Messstrecke aus nach rechts erweitern: %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "Messschleife wird an diesem Messpunkt unterbrochen: %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "Messschleife wird an dieser Messstrecke unterbrochen: %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Erweiterungsrichtung von Messpunkt %s wird umgekehrt" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Erweiterungsrichtung von Messstrecke wird umgekehrt: %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "Spezifikationsdatei wird angewendet: «%s»" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "%s wird geschrieben…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "Nach horizontalem Fehlerfaktor sortieren" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "Nach vertikalem Fehlerfaktor sortieren" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "Nach prozentualem Fehlerfaktor sortieren" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "Nach Fehlern pro Messstrecke sortieren" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr ".err-Datei durch sortierte Version ersetzen" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr ".err-Datei konnte nicht interpretiert werden" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Verschoben um (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Hinzugefügt: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Entfernt: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 #, fuzzy msgid "Reentering an existing survey is deprecated" msgstr "Erneutes Einführen einer Vermessung ist veraltet" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Bereits hier verwendet" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT ist veraltet" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "An den Anfang der Datei und neu einlesen" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "Datumsangaben einer Vermessung zeigen (wenn vorhanden)" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "Initialisierung des Eingabekoordinatensystems «%s» ist gescheitert" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "Initialisierung des Ausgabekoordinatensystems «%s» ist gescheitert" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "Gitter erzeugen (Vorgabe %sm)" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "Texthöhe der Messpunktbezeichnungen (Vorgabe %s)" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "Messpunktmarkierungsgrösse (Vorgabe %s)" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "CSV-Ausgabe erzeugen" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "DXF-Ausgabe erzeugen" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "EPS-Ausgabe erzeugen" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "GPX-Ausgabe erzeugen" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "HPGL-Ausgabe erzeugen" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "JSON-Ausgabe erzeugen" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "KML-Ausgabe erzeugen" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "Skencil-Ausgabe erzeugen" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "Survex POS-Ausgabe erzeugen" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "Compass PLT-Ausgabe für Carto erzeugen" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "SVG-Ausgabe erzeugen" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Formatfehler in der Schriftdatei «%s»" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "&Durchgezogene Oberfläche" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d gefunden" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Einstellungen..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Wände einzeichnen" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "LROU-Werte heuristisch schätzen" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Messpunkte durch Kreuze markieren" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "Messpunkte an den Eingängen hervorheben" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Feste Messpunkte hervorheben" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Exportierte Messpunkte hervorheben" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Messpunkte mit ihren Namen beschriften" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Überlappende Beschriftungen zulassen (schneller)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Messstrecken unter Grund anzeigen" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Messstrecken an der Oberfläche anzeigen" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "Oberflächenvermessung nach Höhe einfärben" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Oberflächenstrecken gestrichelt zeichnen" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Gitter einzeichnen" #: n:362 #~ msgid "metric units" #~ msgstr "Meter" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "englische Einheiten" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "Altgrad (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "Neugrad (gon)" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Längen anzeigen in" #: n:367 #~ msgid "Display angles in" #~ msgstr "Winkel anzeigen in" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Maus-Steuerung umkehren" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Massstab anzeigen" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Tiefenskala anzeigen" #: n:371 #~ msgid "Display compass" #~ msgstr "Kompass anzeigen" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Neigungsmesser anzeigen" #: n:373 #~ msgid "Display side panel" #~ msgstr "Seitliches Kontrollfeld anzeigen" survex-1.4.4/lib/ru.msg0000664000175000017500000007064514312174554011725 00000000000000Svx Msg þÿ q‘©ÐедоÑтаточно памÑти (невозможно выделить %lu байт).Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ данных Ñтой топо-Ñъемки требуетÑÑ Survex верÑии %s и Ñтарше.ОтÑутÑтвует замер между Ð´Ð²ÑƒÐ¼Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñ‹Ð¼Ð¸ пикетамипредупреждениеВ файле включенном из %s:%u: *prefix уÑтарел - иÑпользуйте *begin и *end вмеÑто негоСимвол “%c†недопуÑтим в имени пикета (иÑпользуйте *SET NAMES Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимых Ñимволов)Поле не может быть пропущеноОжидаетÑÑ Ñ‡Ð¸Ñловое значение, но вмеÑто него получено “%sâ€Ð’меÑто “%s†ожидаютÑÑ â€œPRESERVEâ€, “TOUPPER†или “TOLOWERâ€ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° ошибка в программе! ПожалуйÑта Ñообщите о ней авторамÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¼Ð°Ð½Ð´Ð° “%sâ€ÐŸÐ¸ÐºÐµÑ‚ “%s†был объÑвлен Ñквивалентным Ñамому ÑебеÐзимут не может быть пропущен за иÑключением вертикальных замеровКонец Ñтроки не пуÑтПолучено %d предупреждений.Ðевозможно выполнить внешнюю команду: “%sâ€ÐžÑˆÐ¸Ð±ÐºÐ° при чтении файлаВозникло Ñлишком много ошибок - выполнение прервано*DEFAULT уÑтарело - иÑпользуйте *CALIBRATE/DATA/SD/UNITS Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ DEFAULT вмеÑто негоÐзимут указан Ð´Ð»Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ замераEND без ÑоответÑтвующего BEGIN в Ñтом файлеBEGIN без ÑоответÑтвующего END в Ñтом файлеÐевозможно открыть файл “%sâ€ÐšÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð¹ Ñимвол в именах пикетов (ROOT Ñимвол, "") уÑтарел и не рекомендуетÑÑ Ðº иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸ÑŽÐ˜Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° “%s†не ÑкÑпортировано из топо-Ñъемки “%sâ€â€œ%s†не может быть одновременно именем пикета и топо-ÑъемкиОжидаетÑÑ Ð¸Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð°ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ðµ определение Ð´Ð»Ñ ÑƒÐ¶Ðµ ÑущеÑтвующей топо-Ñъемки уÑтарело и не рекомендуетÑÑ Ðº иÑпользованиюПервоначально вÑтречено здеÑьВмеÑто “%s†ожидаютÑÑ â€œEQUATESâ€, “EXPORTS†или “PLUMBSâ€Ð’меÑто “%s†ожидаютÑÑ â€œON†или “OFFâ€Ð£ÐºÐ°Ð·Ð°Ð½Ð¾ только одно Ð¸Ð¼Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° в команде EQUATEÐеизвеÑтный тип замеров “%sâ€ÐеизвеÑÑ‚Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%sâ€Ð”Ð»Ñ ÑоответÑтвующей команды BEGIN не указано Ð¸Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-ÑъемкиÐедрпуÑÑ‚Ð¸Ð¼Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%sâ€ Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÑВозникла нехватка памÑти при чтении файл “%sâ€ÐеизвеÑтный инÑтрумент “%sâ€ÐœÐ°Ñштабный коÑффициент должен равнÑтьÑÑ 1.0 Ð´Ð»Ñ DECLINATIONÐеизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка “%sâ€ÐеизвеÑтный клаÑÑ Ñимволов “%sâ€Ðет данных топо-ÑÑŠÐµÐ¼ÐºÐ¸Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° “%s†ÑÑылаетÑÑ Ð½Ð° каталог файловой ÑиÑтемыИмеютÑÑ Ñ†ÐµÐ¿Ð¾Ñ‡ÐºÐ¸ замеров не привÑзанные к фикÑированным пикетам (виÑÑщие)Пикет уже зафикÑирован или Ñквивалентен другому зафикÑированному пикетуÐевозможно открыть выходной файл “%sâ€Ð¡Ñ‚андартное отклонение должно быть положительным чиÑломИÑпользованиеЗамер Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ именем пикета (“%sâ€) на обоих концах замера - опечатка?ÐбÑолютное значение угла больше %.f%sПопытка объÑвить Ñквивалентными два фикÑированных пикета Ñ Ð½ÐµÐ¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ координатами: “%s†и “%sâ€ÐžÐ±ÑŠÑвление ÑквивалентноÑти Ð´Ð»Ñ Ð´Ð²ÑƒÑ… фикÑированных пикетов Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ координатами: “%s†и “%sâ€ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° FIX без ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚ - выполнена фикÑÐ°Ñ†Ð¸Ñ Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°Ð¼Ð¸ (0,0,0)Пикет Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже зафикÑирован Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ же координатамианонимный пикетКоманда *EXPORT должна Ñледовать непоÑредÑтвенно поÑле команды “*BEGIN <имÑ_Ñъемки>â€Ð’ведите год в промежутке от 1900 до 2078Подозрительное значение азимутаОтрицательное значение длинны замераОдин и тот же пикет заыикÑирован дважды без ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð”Ð»Ð¸Ð½Ð½Ð° замера меньше чем изменение Ð³Ð»ÑƒÐ±Ð¸Ð½Ñ‹Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€œ%s†не допуÑтимы Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данных “%sâ€ÐедоÑтаточно значений Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данных “%sâ€ÐеизвеÑтный Ñтиль топо-данных “%sâ€ÐŸÐ¸ÐºÐµÑ‚ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ “%s†уже ÑкÑпортированДублирование значений Ð´Ð»Ñ â€œ%s†в определении ÑÑ‚Ð¸Ð»Ñ Ñ‚Ð¾Ð¿Ð¾-данныхFLAG “%s†- неизвеÑтный флагÐедоÑтающие "СÑылка на пикет “%s†вÑтречаетрÑÑ ÐµÐ´Ð¸Ð½Ñтвенный раз и только Ñ Ñвным указанием имени топо-Ñъемки - возможно Ñто опечатка?Следующие пикеты не ÑвÑзаны Ñ Ñ„Ð¸ÐºÑированными пикетами (виÑÑщие пикеты):Ð’ топо-Ñъемке не определено фикÑированных пикетов. ПоÑтому "%s" зафикÑировано Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°Ð¼Ð¸ (0,0,0)ФикÑированный пикет “%s†нигде не иÑпользуетÑÑÐ¡ÑŠÐµÐ¼Ð¾Ñ‡Ð½Ð°Ñ Ñеть вычиÑлена путем ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ - нет ÑиÑтемы уравнений Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸ÑРешение ÑиÑтемы из %d ÑƒÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ð¹Ð”Ð»Ñ Ð³Ð¾Ð´Ð°, указанного 2 цифрами иÑпользую значение %dТип значений “%s†дублирует один из типов значений в данном Ñтиле топо-данныхРешение одного уравнениÑÐ’ результате коррекций получена Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð° в замереДата больше текущей даты!ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° меньше начальнойРаÑкраÑка по &длинеРазмеры ÑÐµÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° определены Ð´Ð»Ñ Ð½ÐµÑущеÑтвующего пикета “%sâ€Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ CLINO и BACKCLINO должны иметь одинаковый типРаÑкраÑка по &уклону ходаÐедопуÑтимый меÑÑцÐедопуÑтимый день меÑÑцаПоддерживаютÑÑ Ð²ÐµÑ€Ñии формата 3d файла Ñ %d по %dОжидаетÑÑ Ð¸Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-Ñъемкифайл .espec Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¾Ð¹Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°Ñ‚ÑŒ разрывы нитки на разрезе развертке Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ линий поверхноÑтной ÑъемкиУ вертикальных замеров CLINO и BACKCLINO не могут ÑовпадатьошибкаЗначение длинны не может отÑутÑтвоватьДальнейшее иÑпользование уÑтаревших и не рекомендованных к иÑпользованию возможноÑтей не будет порождать Ñообщений%Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ TAPE и BACKTAPE различаютÑÑ Ð½Ð° %sÐ—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ COMPASS и BACKCOMPASS различаютÑÑ Ð½Ð° %sÐ—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ CLINO и BACKCLINO различаютÑÑ Ð½Ð° %sÐ˜Ð¼Ñ ÐŸÐ¸ÐºÐµÑ‚Ð°CSV файлыÑоздавать CSVОжидаетÑÑ â€œF†или “Mâ€â€œ*data %s %c …†уÑтарело - иÑпользуйте “*data %s …†вмеÑто негоЧтение иÑходных данных - пожалуйÑта ожидайте…Файл “%s†не раÑпознан как корректный .3d файл Survex%a,%Y.%m.%d %H:%M:%S %ZДата и Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ´Ð¾Ñтупны.Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· файла “%sâ€ÐžÑˆÐ¸Ð±ÐºÐ° запиÑи в файла “%sâ€ÐžÑˆÐ¸Ð±ÐºÐ° запиÑи в файлÐевозможно произвеÑти разбор файла .errВизникло %d предупреждений и %d ошибок - результирующие файлы не Ñозданы.Файл “%s†имеет более новый формат, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ не может работатьСеверРазрез-Ñечение по азимутуП&ланРазрезраÑпечатать и выйти (нуобходимо указать 3d файл)РаÑчет ÑтатиÑтикиОжидаетÑÑ Ñтроковое значениеÑлишком мало аргументовÑлишком много аргументовФÐЙЛУдаление тупиковых ветокСоединение ветокРаÑчет колецРаÑчет тупиковых ветокУпрощение Ñъемочной ÑетиРаÑчет Ñъемочной ÑетиВмеÑто “%s†ожидаетÑÑ â€œF†или “Bâ€ÐžÐ±Ñ‰Ð°Ñ длина замеров = %7.2f%s (%7.2f%s поÑле коррекции)Ð¡ÑƒÐ¼Ð¼Ð°Ñ€Ð½Ð°Ñ Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° замеров (план) = %7.2f%sÐ¡ÑƒÐ¼Ð¼Ð°Ñ€Ð½Ð°Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð° замеров (разрез) = %7.2f%sÐмплитуда = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)Диапазон Север-Юг = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)Диапазон ВоÑток-Запад = %4.2f%s (от %s на %4.2f%s до %s на %4.2f%s)КоличеÑтво колец: 1КоличеÑтво колец: %ldЗатрачено времени процеÑÑора: %5.2fsЗатрачено времени вÑего: %5.2fsОтчет о затраченном времени недоÑтупенЗатрачено времени %5.2fs (%5.2fs затрачено процеÑÑором)Показать &Ð¶ÑƒÑ€Ð½Ð°Ð»ÐŸÐµÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %6.2fм (%3d замеров), откорректировано на %6.2fм (%5.2fм/замер). Ошибка %6.2f%%Ошибка N/AÑоздавать Ñетку (по умолчанию %sм)выÑота текÑта Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñей имен пикетов (по умолчанию %s)показать Ñправку и выйтивывеÑти информацию о верÑии и выйтиразмер значка пикета (по умолчанию %s)ОПЦИЯМаÑштабвключены Ñлементы, ÑкÑпортируемые по умолчаниюÑоздавать DXFВыполните “%s --helpâ€ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации. Ñоздавать SkencilÑоздавать Compass PLT Ð´Ð»Ñ CartoÑоздавать SVGÐет данных о поверхноÑти над районом подземной Ñъемкиуказать меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ… файловотображать только краткие итоги (-qq Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ошибок)не Ñоздавать файл .errтрактовать Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ðº ошибкиSurvex pos файлыОбработано: %sПлан, верх Ñтраницы Ñориентирован на азимут %sРазрез-проекциÑ, направление взглÑда - азимут %sвыводить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в .log файлуказать верÑию формата в котором будет ÑохранÑÑ‚ÑÑ 3d файлТопо-Ñъемка Ñодержит пикетов: 1,Топо-Ñъемка Ñодержит пикетов: %ld, замеров: 1. замеров: %ld.реберных узлов Ñъемочной Ñетиреберных узлов Ñъемочной ÑетиТопо-Ñъемка имеет %ld ÑвÑзанных компонентов.Ñортировать по величине горизонтальной ÑоÑтавлÑющей ошибкиÑортировать по величине вертикальной ÑоÑтавлÑющей ошибкиÑортировать по проценту ошибки отноÑительно длинны кольцаÑортировать по Ñредней величине ошибки на замерзаменить .err файл на переÑортированный&ПерераÑчитатьчиÑловой аргумент “%s†имеет недопуÑтимое значениеаргумент “%s†не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑломаргумент “%s†не ÑвлÑетÑÑ Ñ‡Ð¸ÑломОжидаетÑÑ â€œDUPLICATEâ€, “SPLAY†или “SURFACEâ€ÐžÐ¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ â€œNOTâ€, “DUPLICATEâ€, “SPLAY†или “SURFACEâ€Ðа пикет “%s†еÑть ÑÑылки в командах *entrance или *export но пикет не иÑпользуетÑÑРазрез-разверткаÐет ÑоответÑтвующей команды BEGINÐ˜Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾-Ñъемки не Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, указанным в команде BEGINÐ˜Ð¼Ñ Ñ‚Ð¾Ð¿Ð¾Ñъемки указано в BEGIN, но отÑутÑтвует в END( Ðа ВоÑток, Ðа Север, Вверх )Глубина цвета: %d bpp (цветное)ВмеÑто “%s†ожидаетÑÑ Ð´Ð°Ñ‚Ð°Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ топо-Ñъемки только Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ñ‹Ð¼ префикÑомКоÑффициент в команде *UNITS должен быть ненулевым&Снимок Ñкрана...Данные топо-Ñъемки не найдены в файле “%sâ€Ðзимутповторно перечитать файлО программе %sВыберите топо-Ñъемку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑмотраSurvex 3d файлыВÑе файлыИнÑтрумент Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ топо-Ñъемок пещер&ФайлВ&ращение&ОриентациÑ&Вид&УправлениеПо&мощь&ПрезентациÑмаÑштаб (50, 0.02, 1:50 и 2:100 - вÑе Ñто равно 1:50)ФÐЙЛ1 ФÐЙЛ2 [ПОРОГ]Эта программа ÑвлÑетÑÑ Ñвободным программным обеÑпечением; Ð’Ñ‹ можете раÑпроÑтранÑть и/или изменÑть его в ÑоответÑтвии Ñ ÑƒÑловиÑми GNU General Public Licence, опубликованной Фондом Ñвободного программного обеÑпечениÑ; дейÑтвительно либо Ð´Ð»Ñ Ð²ÐµÑ€Ñии 2 Лицензии, либо (по вашему выбору) любой более поздней верÑии.&Открыть... Ctrl+OДата не указанаNEWLINE не может быть первым значениемNEWLINE не может быть поÑледним значениемСтиль данных подразумевает наличие перевода Ñтроки, но NEWLINE отÑутÑтвуетЗначение “%s†должно быть перед NEWLINEЗначению NEWLINE могут предшеÑтвовать только Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ STATION, DEPTH или COUNTÐедопуÑтимо ÑовмеÑтно калибровать величины Ð´Ð»Ñ ÑƒÐ³Ð»Ð¾Ð² и длинЖурнал ошибок %sÐ’Ñе файлы топо-Ñъемок&ЭкÑпортi...Ðв&томатичеÑкое вращение Space%d/%d↑%s 1:%.0f&ПоменÑть направление вращениÑ%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0f&ПерÑпективаТекÑтурированные &Ñтены&ЗатенÑть отдаленные объектыÐа &СеверÐа &ВоÑтокÐа &ЮгÐа &ЗападРазрез 1:%.0fПоказать вÑеСкрыть оÑтальныеРазрез-раз&вертка...&План&РазрезПун&ктир&ДублирующиеÑÑ Ð—Ð°Ð¼ÐµÑ€Ñ‹Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ ÑкÑпорта не указан и его невозможно определить по раÑширению файлаФормат ÑкÑпорта не указанВоÑÑтановить об&зор по умолчаниюФÐЙЛ1 и ФÐЙЛ2 могут быть .pos или .3d файлами ПОРОГ Ñто макÑимальное игнорируемое изменение в метрах вдоль любой из координатных оÑей (по умолчанию %s)Элементы%d Ñтраниц (%dx%d)Одна ÑтраницаÐзимутÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²ÐŸÐ¸ÐºÐµÑ‚Ñ‹ÐŸÐ¾Ð´Ð·ÐµÐ¼Ð½Ñ‹Ðµ замерыУгол наклонаГраницы ÑтраницыУÑловные обозначениÑПуÑтые ÑтраницыВХОДÐОЙ_3D_ФÐЙЛ [ВЫХОДÐОЙ_3D_ФÐЙЛ]ERR_ФÐЙЛ [СКОЛЬКО][ФÐЙЛ_ТОПОСЪЕМКИ]&ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð² Ctrl+NПикет&Ñ‹ Ctrl+XПод&Ð·ÐµÐ¼Ð½Ð°Ñ Ð½Ð¸Ñ‚ÐºÐ° Ctrl+LП&ерекрывающиеÑÑ Ð½Ð°Ð´Ð¿Ð¸Ñи&КомпаÑ&Угломер&Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ ÑˆÐºÐ°Ð»Ð°&МаÑштаб (не иÑпользуетÑÑ Ñ Ð¿ÐµÑ€Ñпективной проекцией)ВремÑ: &Инвертировать управление Ctrl+R&Выйти из режима Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Escape Ñекунд (0 = авто; *6 = 6 раз авто)ВидРазрез-проекциÑ, направление взглÑда - азимут %s, угол %s&РазрезСÑылка на пикет “%s†из неÑущеÑтвующей топо-Ñъемки “%sâ€ÐžÑˆÐ¸Ð±ÐºÐ° в инициализации входной ÑиÑтемы координат “%sâ€ÐžÑˆÐ¸Ð±ÐºÐ° в инициализации выходной ÑиÑтемы координат “%sâ€Ð Ð°ÑкраÑка по &ошибкам на кольцахÐе в кольцеПоверхноÑтна&Ñ Ð½Ð¸Ñ‚ÐºÐ° Ctrl+FРаÑкраÑка по &глубинеРаÑкраÑка по д&атеПодÑветить &входыПодÑветить &фикÑированные точкиПодÑветить &ÑкÑпортированные точки&Сетка Ctrl+GСглаживать &линииИ&ндикаторы%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%s†неоднозначна СиÑтема координат должна быть определена перед иÑпользованием “*DECLINATION AUTOâ€%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%c%s†не допуÑкает ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° %s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ--%s†не допуÑкает ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° Дата Ñъёмки не указана - иÑпользовано магнитное Ñклонение 0%s: Ð¾Ð¿Ñ†Ð¸Ñ â€œ%s†требует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° %s: Ð¾Ð¿Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ аргумент -- %c %s: неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ â€œ--%s†%s: неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ â€œ%c%s†ОжидаетÑÑ Ñ‡Ð¸Ñло или “AUTOâ€%s: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ -- %c &ÐÐ¾Ð²Ð°Ñ Ð¿Ñ€ÐµÐ·Ð°Ð½Ñ‚Ð°Ñ†Ð¸Ñ&Открвть презентацию...&Сохранить презентациюСо&хранить презентацию как...От&метить&ВоÑпроизвеÑти&ЭкÑпортировать видео...Вме&щающий прÑмоугольник Ctrl+BВыберите Ð¸Ð¼Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ файлаПрезентации AvenСохранить Ñнимок ÑкранаВыберите презентацию Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸ÑОшибка формата в презентации “%sâ€Ð¤Ð°Ð¹Ð»Ñ‹ Compass PLTФайлы CMAP XYZÐ˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸ÑÐ¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð±Ñ‹Ð»Ð° изменена. Отменить не Ñохраненные изменениÑ?Совпадений не найдено.Survex svx файлыDAT и MAK файлы CompassЭкÑпортировать видеоПоиÑкСкрытьСкрыть %d найденных пикетовВыÑотаВы можете проÑматривать только один 3d файл одновременно.&Ð‘Ð¾ÐºÐ¾Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ%.2f Ð’, %.2f СОт %sПроложение%.2f%s, Перепад %.2f%s%s: %s, Дл %.2f%s, Ðз %03.1f%s, Угл %s&МетричеÑкие длины&ГрадуÑы°áµ&Объемные ходы Ctrl+T&ÐаÑтройки...Отображать Ñтены ходовОпределÑть замеры ЛПВÐ(LRUD) оÑновываÑÑÑŒ на ÑвриÑтикеОтображать пикеты в виде креÑтовПодÑветить пикеты, отмеченные как входаПодÑветить пикеты, отмеченные как фикÑированные точкиПодÑветить ÑкÑпортированные пикетыОтобразить имена пикетовРазрешить надпиÑÑм Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ пикетов перекрывать другие надпиÑи (ÑкороÑть отриÑовки выроÑтет)ПолноÑкранный &режим F11Отобразить замеры выполнение под землейОтобразить замеры выполнение на поверхноÑтиРаÑкрашивать поверхноÑтные Ñъемки по глубинеВыводить поверхноÑтные замеры пунктирной линиейРиÑовать ÑеткуметричеÑких единицаханглийÑких имперÑких единицахградуÑах (°)градахОтображать замеры вОтображать углы вИнвертировать управление проÑмотромОтображать маÑштабную шкалуОтображать шкалу глубинОтобразить компаÑОтобразить уголОтобразить боковую панель%s: Проложение %.2f%s, Ðзимут %03.1f%s%s: Перепад %.2f%sТопо-ÑъемкиРежим презентацииВоÑтоÑное отклонение (Easting)Северное отклонение (Northing)&Печать... Ctrl+P&ÐаÑтройки Ñтраницы...&ЭкÑпортировать как...ЭкÑпортироватьСкрыть &уголСкрыть &маÑштабную шкалуСкрыть &цветовую шкалуСкрыть &компаÑСкрыть оÑтальные на &Ñтом уровнеÐедоÑтаточно памÑÑ‚Ð¸Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑиÑтеме:МаÑштабный коÑффициент должен быть ненулевымРазделитель в имени топо-ÑъемкиСечениÑСтены ходовПещерныхе ходыотображать информацию о датах топо-Ñъемок (еÑли она приÑутÑтвует)ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° *aliasПредварительный проÑмотр печатиПечать&Печать...ЭкÑпортировать как:Ðевозможно Ñохранить файл “%sâ€&ПоверхноÑтнные замерыРедактировать точку Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð°Ð”Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %s Ð´Ð»Ñ Ñвоей работы требует библиотеку OpenGL, но она не найдена.&Ð’Ñпомогательные замеры&Ð¡ÐºÑ€Ñ‹Ñ‚ÑŒÐŸÐ¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ð°Ñ &ÑркоÑть&ПоказатьФормат ÑкÑпортаDXF файлыEPS файлыGPX файлыHPGL файлы (Ð´Ð»Ñ Ð¿Ð»Ð¾Ñ‚Ñ‚ÐµÑ€Ð°)Compass PLT файлы Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² CartoSkencil файлыSVG файлыВходыФикÑированные точкиЭкÑпортированные пикетыÐачало координат в центреПолные координатыкммÑм миль милÑфутовдюймов&Печать∞Вид ÑверхуВид ÑнизуÐеизвеÑÑ‚Ð½Ð°Ñ ÑиÑтема координатСиÑтема координат не подходит Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° результатовÐеудача при переводе координат: %sИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð°, а Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð½ÐµÑ‚Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð°, а иÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð½ÐµÑ‚ÐšÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ñ‹ не могут быть пропущены еÑли указана ÑиÑтема ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚ÐŸÑ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ðµ иÑпользование команды FIX без координат Ð´Ð»Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° “%sâ€ÐŸÐ¸ÐºÐµÑ‚ “%s†фикÑируетÑÑ Ð¿Ñ€ÐµÐ¶Ð´Ðµ чем командой CS задана ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð½Ð°Ñ ÑиÑтемаÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑиÑтема координат: %sKML файлыJSON файлы&Сохранить журналФайлы журналаРаÑкраÑка по &топо-ÑъемкеП&оверхноÑть&РаÑкраÑка поВыберите файл Ñ Ñ€ÐµÐ»ÑŒÐµÑ„Ð¾Ð¼ поверхноÑти Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÑФайлы рельефа поверхноÑтиОткрыть &Рельеф...Ñоздавать EPSÑоздавать GPXÑоздавать HPGLÑоздавать JSONÑоздавать KMLÑоздавать Survex POSазимут (90, 90d, 100g - вÑе Ñто равно 90°)угол наклона (45, 45d, 50g, 100% - вÑе Ñто равно 45°)план (Ñквивалентно --tilt=-90)разрез (Ñквивалентно --tilt=0)поверхноÑÑ‚Ð½Ð°Ñ Ð½Ð¸Ñ‚ÐºÐ°Ð²Ñпомогательные замерывходыфикÑированные точкиÑкÑпортированные пикетыÑечениÑÑтены ходовпещерныхе ходыначало координат в центреполные координатызначки Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÐµÑ‚Ð¾Ð²Ð¿Ð¾Ð´Ð·ÐµÐ¼Ð½Ñ‹Ðµ замерыПрикрепить к поверхноÑтиприкрепить к поверхноÑтиЕдиница Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ â€œ%s†ÑчитаетÑÑ ÑƒÑтаревшей, иÑпользуйте “grads†- подробноÑти в руководÑтве пользователÑРаÑкраÑка по гори&зонтальной компоненте в ошибкахРаÑкраÑка по &вертикальной компоненте в ошибкахРаÑкраÑка по &ÑтилюОжидаетÑÑ Ñ€ÑƒÐ¼Ð± (quadrant), получено “%sâ€ÐœÐ°Ð³Ð½Ð¸Ñ‚ное Ñклонение: %s, Ñближение меридианов: %.1f%sинфоconvert MOVE and LINE into LEGproduce Survex 3d outputПеремещено на (%3.2f,%3.2f,%3.2f): %sДобавлено: %sУдалено: %sÐе удалоÑÑŒ найти пикет %sÐе удалоÑÑŒ найти замер %s → %sРазвертка начата от пикета %sОт пикета %s развертка влевоОт пикета %s развертка вправоОт замера %s → %s развертка влевоОт замера %s → %s развертка вправоРазрыв кольца на пикете %sРазрыв кольца на замере %s → %sИзменение Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¸ Ñ Ð¿Ð¸ÐºÐµÑ‚Ð° %sИзменение Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚ÐºÐ¸ Ñ Ð·Ð°Ð¼ÐµÑ€Ð° %s → %sПрименение файла (specfile): “%sâ€Ð¡Ð¾Ñ…ранение %s…survex-1.4.4/lib/zh_CN.po0000644000175000017500000025377614240110751012123 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 22:05:08 +0000\n" "Last-Translator: Qingqing Li \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "文件(&F)" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "旋转(&R)" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "æ–¹å‘(&O)" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "查看(&V)" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "控制(&C)" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "帮助(&H)" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "演示文档(&P)" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "使用" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "内存耗尽" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "内存耗尽(ä¸è¶³ %lu 字节)" #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "è¯•å›¾è¯»å–æ–‡ä»¶â€œ%sâ€æ—¶å†…å­˜ä¸è¶³" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "å¤„ç†æ­¤æµ‹é‡æ•°æ®éœ€è¦Survex %s 或以上版本。" #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "警告" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "错误" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "在文件中包括 %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix已弃用 - 请改用*beginå’Œ*end" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "ç«™å中ä¸å…许使用字符“%câ€ï¼ˆä½¿ç”¨ *SET NAMES 设置å…许使用的字符)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "字段ä¸èƒ½çœç•¥" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "éœ€è¦æ•°å­—字段,找到“%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "找到“%sâ€ï¼Œéœ€è¦â€œPRESERVEâ€ã€â€œTOUPPERâ€ã€â€œTOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "检测到程åºé”™è¯¯ï¼è¯·å°†æ­¤æŠ¥å‘Šç»™ä½œè€…" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "未知的命令 “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "站“%sâ€ç­‰åŒäºŽå®ƒè‡ªèº«" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "é™¤äº†åž‚ç›´æµ‹é‡æ®µï¼Œæ–¹ä½æ•°æ®ä¸å¯çœç•¥" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "è·ç¦»æ•°æ®ä¸å¯èƒœè·¯" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "行尾ä¸ä¸ºç©º" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "有 %d æ¡è­¦å‘Šã€‚" #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "命令 “%s†执行失败" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "è¯»å–æ–‡ä»¶æ—¶å‘生错误" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "错误太多 - 放弃" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "䏿ލè*DEFAULT - 使用带DEFAULT傿•°çš„*CALIBRATE/DATA/SD/UNITS代替" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "åž‚ç›´æµ‹é‡æ®µä¸Šçš„罗盘读数" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "此文件中END没有匹é…çš„BEGIN" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "此文件中BEGIN没有匹é…çš„END" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "站“%sâ€æœªä»Žæµ‹é‡â€œ%sâ€ä¸­å¯¼å‡º" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "站“%sâ€å¼•用自ä¸å­˜åœ¨çš„æµ‹é‡â€œ%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%sâ€ä¸èƒ½æ—¢æ˜¯ä¸€ä¸ªæµ‹ç«™åˆæ˜¯ä¸€ä¸ªæµ‹é‡" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "需è¦ç«™å" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "找到“%sâ€ï¼Œéœ€è¦â€œEQUATESâ€ã€â€œEXPORTSâ€æˆ–“PLUMBSâ€" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "找到“%sâ€ï¼Œéœ€è¦â€œONâ€æˆ–“OFFâ€" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "EQUATEå‘½ä»¤ä¸­åªæœ‰ä¸€ä¸ªç«™" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "未知é‡â€œ%sâ€" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "未知å•ä½â€œ%sâ€" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "å•ä½â€œ%sâ€å·²å¼ƒç”¨ï¼Œå‡å®šä¸ºâ€œgradsâ€-有关详细信æ¯ï¼Œè¯·å‚阅手册" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "æœªçŸ¥åæ ‡ç³»" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "æ— æ•ˆåæ ‡ç³»ï¼š%s" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "åæ ‡ç³»ä¸é€‚åˆè¾“出" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "转æ¢å标失败:%s" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "设置了输入投影,但未设置输出投影" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "设置了输出投影,但未设置输入投影" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "æŒ‡å®šåæ ‡ç³»åŽï¼Œåæ ‡ä¸èƒ½çœç•¥" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "必须为“*DECLINATION AUTOâ€æŒ‡å®šè¾“入忠‡ç³»" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "éœ€è¦æ•°å­—或“AUTOâ€" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "æœªæŒ‡å®šæµ‹é‡æ—¥æœŸ-使用0作为ç£åè§’" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "匹é…çš„BEGIN命令没有测é‡åç§°" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "é‡çš„å•ä½â€œ%sâ€æ— æ•ˆ" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "未知工具“%sâ€" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "DECLINATION的比例因å­å¿…须为1.0" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "比例因å­å¿…须为éžé›¶" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "未知设置“%sâ€" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "未知字符类“%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "æ— æµ‹é‡æ•°æ®" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "文件å“%sâ€å¼•用了目录" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "测é‡å¹¶éžå…¨éƒ¨è¿žæŽ¥åˆ°å›ºå®šç«™" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "站已ç»å›ºå®šæˆ–ç­‰åŒåˆ°ä¸€ä¸ªå›ºå®šç‚¹" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "无法打开输出文件“%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "标准å差必须是正数" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "æµ‹é‡æ®µçš„两端有åŒä¸€ä¸ªç«™(“%sâ€)—输入错误?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "倾角读数超过 %.f%s(ç»å¯¹å€¼ï¼‰" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "å°è¯•ç­‰åŒä¸¤ä¸ªä¸ç›¸ç­‰çš„固定站“%sâ€å’Œâ€œ%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "ç­‰åŒä¸¤ä¸ªç›¸ç­‰çš„固定点:“%sâ€å’Œâ€œ%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "FIXå‘½ä»¤æ²¡æœ‰åæ ‡â€”固定在 (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "站已ç»å›ºå®šåœ¨åŒä¸€åæ ‡" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "站“%sâ€å·²ç»æœ‰FIXå‘½ä»¤ä½†æ²¡æœ‰åæ ‡" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "在首次使用CS命令å‰ï¼Œç«™â€œ%sâ€å·²å›ºå®š" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT必须紧跟ç€â€œ*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "å‡è®¾ä¸¤ä½æ•°å¹´ä»½ä¸º%d" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "无效年份(<1900 或 >2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "å¯ç–‘的罗盘读数" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "负的皮尺读数" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "åŒä¸€ä¸ªç«™ç‚¹å›ºå®šä¸¤æ¬¡ï¼Œæ— åæ ‡" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "皮尺读数å°äºŽæ·±åº¦å˜åŒ–" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "ä¸å…许读å–“%sâ€ä¸ºâ€œ%sâ€æ•°æ®æ ·å¼" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "æ•°æ®æ ·å¼â€œ%sâ€çš„读数太少" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "æœªçŸ¥çš„æ•°æ®æ ·å¼â€œ%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "站“%sâ€å·²å¯¼å‡º" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "é‡å¤è¯»å–“%sâ€" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "未知的标志“%sâ€" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "已丢失 \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "站“%sâ€åªå¼•用了一次,并且有明确的测é‡å称—输入错误?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "下列测é‡ç«™æœªè¿žæŽ¥åˆ°å›ºå®šç‚¹ï¼š" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "æµ‹é‡æ²¡æœ‰å›ºå®šç‚¹ã€‚ 因此,我将%s固定在 (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "未使用的固定点“%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "通过归约法解网络-æ— è”立方程å¼å¯è§£ã€‚" #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "è§£%dè”立方程" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "读å–“%sâ€ä¸Žä»¥å‰çš„读å–é‡å¤" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "解一个方程" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "负调整è·ç¦»è¯»æ•°" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "日期在未æ¥ï¼" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "ç»“æŸæ—¥æœŸèŒƒå›´åœ¨å¼€å§‹æ—¥æœŸä¹‹å‰" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "在ä¸å­˜åœ¨çš„站“%sâ€å¤„指定的横截é¢" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "倾角和åŽè§†å€¾è§’的读数必须是åŒä¸€ç±»åž‹" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "垂直的倾角和åŽè§†å€¾è§’度数ä¸èƒ½åœ¨åŒä¸€æ–¹å‘" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "无效的月份" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "æ— æ•ˆçš„æ—¥æœŸå·æ•°" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "支æŒ%d到%dçš„3d文件格å¼ç‰ˆæœ¬" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "éœ€è¦æµ‹é‡åç§°" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "无法打开文件 “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "无法写入文件“%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "ä¸ä¼šæŠ¥å‘Šæ­¤å·²å¼ƒç”¨åŠŸèƒ½çš„è¿›ä¸€æ­¥ä½¿ç”¨" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "%sçš„è·ç¦»è¯»å–å’ŒåŽè§†è·ç¦»è¯»å–ä¸ä¸€è‡´" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "%s的方ä½è¯»æ•°å’ŒåŽè§†æ–¹ä½è¯»æ•°ä¸ä¸€è‡´" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "%s的倾角读数和åŽè§†å€¾è§’读数ä¸ä¸€è‡´" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …â€å·²å¼ƒç”¨-请改用“*data %s …â€" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "错误的3då›¾åƒæ–‡ä»¶â€œ%sâ€" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "日期和时间ä¸å¯ç”¨ã€‚" #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "è¯»å–æ–‡ä»¶â€œ%sâ€æ—¶å‡ºé”™" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "写入文件“%sâ€æ—¶å‡ºé”™" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "写入文件出错" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "有%d个警告和%d个错误-未生æˆè¾“出文件。" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "文件“%sâ€çš„æ ¼å¼æ¯”æ­¤ç¨‹åºæ‰€èƒ½ç†è§£çš„è¦æ–°" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "北" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "ä»°è§’" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "å¹³é¢å›¾(&L)" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "ç«‹é¢(&E)" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "ç«‹é¢" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "计划" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "仰视平é¢" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "正在计算统计数æ®" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "应为字符串字段" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "å¤ªå°‘å‚æ•°" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "çš„å‚æ•°å¤ªå¤š" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "文件" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "删除尾部导线" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "串è”导线" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "计算导线" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "计算尾部导线" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "简化网络" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "计算网络" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "找到“%sâ€ï¼Œåº”为“Fâ€æˆ–“Bâ€" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "æµ‹é‡æ®µçš„æ€»é•¿åº¦ = %7.2f%s (%7.2f%s 调整过的)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "æµ‹é‡æ®µçš„æ€»å¹³é¢é•¿åº¦ = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "æµ‹é‡æ®µçš„æ€»åž‚直长度 = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "垂直范围 = %4.2f%s(从%sä½äºŽ%4.2f%s处到%sä½äºŽ%4.2f%s处)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "有一个环路" #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "有%ld个环路" #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "CPU使用时间%5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "使用时间%5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "使用时间ä¸å¯ç”¨" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "使用时间%5.2fs(%5.2fs CPU时间)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "原始长度%6.2fm(%3d个段),移动了%6.2fm(%5.2fm/段)。 " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "误差 %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "误差 ä¸é€‚用(导线长度为0)" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "显示该求助信æ¯å¹¶é€€å‡º" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "显示版本信æ¯å¹¶é€€å‡º" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "选项" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "比例尺" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "比例(50〠0.02ã€1:50 å’Œ 2:100 å‡ä¸º 1:50)" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "请å°è¯•“%s --helpâ€èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "已处ç†ï¼š%s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "扩展1:%.0f" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "å¹³é¢å›¾ï¼Œçº¸ä¸Š%s" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "ç«‹é¢ï¼Œé¢æœ%s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "å¹³é¢å›¾ (equivalent to --tilt=-90)" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "ç«‹é¢æœå‘%s,倾斜%s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "ç«‹é¢å›¾(equivalent to --tilt=0)" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "ç«‹é¢å±•开图" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "测é‡åŒ…å«1个测é‡ç«™ï¼Œ" #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "测é‡åŒ…å«%ld个测é‡ç«™ï¼Œ" #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " ç”±1æ¡æµ‹é‡æ®µè¿žæŽ¥ã€‚" #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " ç”±%ldæ¡æµ‹é‡æ®µè¿žæŽ¥ã€‚" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "节点" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "节点" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "æµ‹é‡æœ‰%ld个连接的组件。" #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "ä¿å­˜æ—¥å¿—(&S)" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "釿–°å¤„ç†(&R)" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "æ•°å€¼å‚æ•°â€œ%sâ€è¶…出范围" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "傿•°â€œ%sâ€ä¸æ˜¯æ•´æ•°" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "傿•°â€œ%sâ€ä¸æ˜¯æ•°å­—" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "应为“DUPLICATEâ€ã€â€œSPLAYâ€æˆ–“SURFACEâ€" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "应为“NOTâ€ã€â€œDUPLICATEâ€ã€â€œSPLAYâ€æˆ–“SURFACEâ€" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "应为“Fâ€æˆ–“Mâ€" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "测é‡ç«™â€œ%sâ€ç”± *entrance 或 *export 引用,但从未使用" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "没有匹é…BEGIN" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "测é‡å称与BEGINä¸åŒ¹é…" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "调查å称被从END处çœç•¥" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( å‘东, å‘北, æµ·æ‹” )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "显示深度:%d bpp(æ¯åƒç´ ä½æ•°)" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (彩色)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "éœ€è¦æ—¥æœŸï¼Œå‘现“%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "仅加载具有此å‰ç¼€çš„å­æµ‹é‡" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "打å°å¹¶é€€å‡ºï¼ˆéœ€è¦3d文件)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "设置输出文件的ä½ç½®" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "ä»…æ˜¾ç¤ºç®€è¦æ‘˜è¦ï¼ˆ-qq仅用于错误)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "ä¸åˆ›å»º.err文件" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "将警告转æ¢ä¸ºé”™è¯¯" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "日志输出到.log文件" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "指定è¦è¾“出的3d文件格å¼ç‰ˆæœ¬" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "用.especæ–‡ä»¶æ¥æŽ§åˆ¶æ‰©å±•" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "ä½¿ç”¨è¾“å‡ºä¸­çš„åœ°é¢æµ‹é‡æ®µæ˜¾ç¤ºä¸­æ–­" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "*UNITS å› å­å¿…须为éžé›¶" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "3d文件“%sâ€ä¸­æ²¡æœ‰æµ‹é‡æ•°æ®" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "å°é¢" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "关于%s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "é€‰æ‹©è¦æŸ¥çœ‹çš„地形文件" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "地形文件" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "测é‡åŒºåŸŸé™„近无地形数æ®" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "é€‰æ‹©è¦æŸ¥çœ‹çš„æµ‹é‡æ–‡ä»¶" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Survex 3d 文件" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "全部文件" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "æ‰€æœ‰æµ‹é‡æ–‡ä»¶" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Survex svx 文件" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "Compass DAT å’Œ MAK 文件" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "CSV 文件" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "DXF 文件" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "EPS 文件" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "GPS 文件" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "绘图仪用HPGL" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "KML 文件" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "与Carto一起使用的Compass PLT" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Skencil 文件" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Survex pos 打开" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "SVG 文件" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "JSON 文件" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "日志文件" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "测é‡å¯è§†åŒ–工具" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "æœ¬ç¨‹åºæ˜¯è‡ªç”±è½¯ä»¶ï¼›æ‚¨å¯ä»¥æ ¹æ®è‡ªç”±è½¯ä»¶åŸºé‡‘会å‘布的GNU通用公共许å¯è¯çš„æ¡æ¬¾é‡æ–°å‘布和/或修改它;许å¯è¯çš„第2版或(由您选择)任何更高版本。" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "文件1 文件2 [阈值]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "文件1和文件2å¯ä»¥æ˜¯.pos或.3d文件\n阈值为延任何轴å¯å¿½ç•¥çš„æ”¹å˜çš„æœ€å¤§å€¼ï¼Œå•ä½â€œç±³â€(默认 %s)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "å–æ¶ˆéšè—" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "ä¸åœ¨çŽ¯è·¯ä¸­" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "交错的读数,但没有NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "必须在NEWLINEå‰è¯»å–“%sâ€" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINEå‰åªèƒ½æœ‰STATIONã€DEPTHå’ŒCOUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "æ— æ³•åŒæ—¶æ ¡å‡†è§’度和长度é‡" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "错误的*alias命令" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "%s错误日志" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "导出(&E)..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "åå‘(&R)" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "查看" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "元素" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "导出格å¼" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d页(%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "一页" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "æ–¹ä½" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "æ–¹ä½ (90, 90d, 100g å‡ä¸º 90°)" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "ç«™å" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "ç«™å" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "站标签" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "格点" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "站标志" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "åœ°ä¸‹æµ‹é‡æ®µ" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "åœ°ä¸‹æµ‹é‡æ®µ" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "截é¢" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "截é¢" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "墙" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "墙" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "通é“" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "通é“" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "免忠‡" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "免忠‡" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "è´´ç€åœ°é¢" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "è´´ç€åœ°é¢" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "倾角" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "倾斜角(45, 45d, 50g, 100% å‡ç­‰åŒäºŽ 45°)" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "页é¢è¾¹æ¡†" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "图例" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "空白页" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "格点(&C)\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "网格(&G)\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "åœ°è¡¨æµ‹é‡æ®µ" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "å…¥å£" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "å…¥å£" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "固定点" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "固定点" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "导出站" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "导出站" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "罗盘(&C)" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "缩放æ (&S)" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s:选项“%sâ€å«ä¹‰ä¸æ˜Žç¡®\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s:选项“%c%sâ€ä¸æŽ¥å—傿•°\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s:选项“--%sâ€ä¸æŽ¥å—傿•°\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%sï¼šå‚æ•°â€œ%sâ€éœ€è¦å‚æ•°\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s:无法识别的选项“--%sâ€\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s:无法识别的选项“%c%sâ€\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s:选项无效 -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "新演示文档(&N)" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "打开演示文档...(&O)" #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "ä¿å­˜æ¼”示文档(&S)" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "ä¿å­˜æ¼”示文档为...(&V)" #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "播放(&Y)" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "" #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "导出视频" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "选择输出文件å" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Aven演示文档" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "ä¿å­˜æˆªå›¾" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "选择打开一个演示文档" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "演示文档“%sâ€çš„æ ¼å¼é”™è¯¯" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Compass PLT 打开" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "CMAP XYZ 打开" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "修改演示文档" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "当剿¼”ç¤ºæ–‡æ¡£å·²è¢«ä¿®æ”¹ã€‚è¦æ”¾å¼ƒæœªä¿å­˜çš„æ›´æ”¹å—?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "未找到匹é…内容。" #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "查找" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "éšè—" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "æµ·æ‹”" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f东%.2f北" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "自 %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, fuzzy, c-format msgid "H %.2f%s, V %.2f%s" msgstr "横%.2f%s, 垂直 %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "百分比(&P)" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "åƒç±³" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "ç±³" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "厘米" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "英里" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "英里" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "英尺" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "英寸" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "演示文档" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "显示全部" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "éšè—å…¶ä»–" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "å‘东" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "å‘北" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "打开(&O)...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "打开地形...(&T)" #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "显示日志(&L)" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "打å°(&P)...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "页é¢è®¾ç½®(&a)..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "截图(&S)..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "" #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "" #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "导出" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "打å°é¢„览" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "打å°" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "打å°(&P)..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "编辑航点" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "时间: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 #, fuzzy msgid " secs (0 = auto; *6 = 6 times auto)" msgstr " ç§’ (0 = 自动; *6 = 6 times 自动)" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "此版本的%sè¿è¡Œéœ€è¦çš„OpenGLä¸å¯ç”¨ã€‚" #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "éšè—(&H)" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "显示(&S)" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "首选项(&P)..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "基于å¯å‘法估计左å³ä¸Šä¸‹è¯»æ•°" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "çªå‡ºæ˜¾ç¤ºæ ‡è®°ä¸ºå…¥å£çš„ç«™" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "çªå‡ºæ˜¾ç¤ºæ ‡è®°ä¸ºå›ºå®šç‚¹çš„ç«™" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "ä½¿ç”¨ç«™åæ ‡è®°æµ‹é‡ç«™" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "å…许å称在显示时é‡å ï¼ˆæ›´å¿«ï¼‰" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "æ˜¾ç¤ºåœ°ä¸‹æµ‹é‡æ®µ" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "æ˜¾ç¤ºåœ°è¡¨æµ‹é‡æ®µ" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "地表颜色按深度渲染" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "ä½¿ç”¨è™šçº¿ç”»åœ°è¡¨æµ‹é‡æ®µ" #: n:361 #~ msgid "Draw a grid" #~ msgstr "绘制网格" #: n:362 #~ msgid "metric units" #~ msgstr "公制å•ä½" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "英制å•ä½" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "度(°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "" #: n:366 #~ msgid "Display measurements in" #~ msgstr "" #: n:367 #~ msgid "Display angles in" #~ msgstr "角度显示为" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "" #: n:369 #~ msgid "Display scale bar" #~ msgstr "显示比例尺" #: n:370 #~ msgid "Display depth bar" #~ msgstr "显示深度æ " #: n:371 #~ msgid "Display compass" #~ msgstr "显示罗盘" #: n:372 #~ msgid "Display clinometer" #~ msgstr "" #: n:373 #~ msgid "Display side panel" #~ msgstr "æ˜¾ç¤ºä¾§é¢æ¿" survex-1.4.4/lib/extract-msgs.pl0000755000175000017500000001203214141575516013533 00000000000000#!/usr/bin/perl -w require 5.008; use bytes; use strict; use POSIX; use Locale::PO; sub pot_creation_date { return strftime "%Y-%m-%d %H:%M:%S +0000", gmtime(); } use integer; my (%msgs, @uses, %comment, %loc); my $translator_comment; while () { if (m!(/[/*])\s*(TRANSLATORS:.*?)\s*\z!) { my ($comment_type, $comment) = ($1, $2); if ($comment_type eq '/*') { while ($comment !~ s!\s*\*/\z!! && defined($_ = )) { if (m!^\s*\*?\s*(.*?)\s*\z!) { # */ on a line by itself results in '/' for $1. last if $1 eq '/'; $comment .= "\n$1"; } } } else { # // comment - see if there are further // comments immediately # following. while (defined($_ = ) && m!//\s*(.*?)\s*\z!) { $comment .= "\n$1"; } } $comment =~ s/\n+$//; if (defined $translator_comment) { print STDERR "$ARGV:$.: Ignored TRANSLATORS comment: $translator_comment\n"; } $translator_comment = $comment; last if !defined $_; } while (m!/\*(.*?)\*/(\d+)\b!g) { my ($msg, $msgno) = ($1, $2); # Handle there being a comment before the comment with the message in. $msg =~ s!.*/\*!!; if (exists $msgs{$msgno}) { if ($msgs{$msgno} ne $msg) { print STDERR "$ARGV:$.: Mismatch for message number $msgno:\n"; print STDERR "$msgs{$msgno}\n$msg\n"; } } else { $msgs{$msgno} = $msg; } if (defined $translator_comment) { if (exists $comment{$msgno} && $comment{$msgno} ne $translator_comment) { print STDERR "Different TRANSLATOR comments for message #$msgno\n"; print STDERR "${$uses[$msgno]}[0]: $comment{$msgno}\n"; print STDERR "$ARGV:$.: $translator_comment\n"; } else { $comment{$msgno} = $translator_comment; } undef $translator_comment; } push @{$uses[$msgno]}, "$ARGV:$."; } } continue { # Reset $. for each input file. close ARGV if eof; } my $num_list = Locale::PO->load_file_asarray("survex.pot"); my $first = 1; foreach my $po_entry (@{$num_list}) { my $msgno = ''; my $ref = $po_entry->reference; if (defined $ref && $ref =~ /^n:(\d+)$/m) { $msgno = $1; } if ($first) { $first = 0; if ($po_entry->msgid eq '""') { chomp(my $header = $po_entry->dump); print $header; next; } print << "END"; # Survex translation template. # Copyright (C) YEAR COPYRIGHT HOLDERS # This file is distributed under the same licence as Survex. # msgid "" msgstr "" "Project-Id-Version: survex\\n" "Report-Msgid-Bugs-To: olly\@survex.com\\n" "POT-Creation-Date: ${\(pot_creation_date)}\\n" "PO-Revision-Date: YEAR-MO-DA HO:MI:SE +ZONE\\n" "Language-Team: LANGUAGE \\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=utf-8\\n" "Content-Transfer-Encoding: 8bit\\n" END } my $msg; if (exists $msgs{$msgno}) { $msg = $msgs{$msgno}; delete $msgs{$msgno}; } else { print STDERR "../lib/survex.pot:", $po_entry->loaded_line_number, ": Message number $msgno is in survex.pot but not found in source - preserving\n" unless $po_entry->obsolete; $msg = $po_entry->dequote($po_entry->msgid); } if (exists $comment{$msgno}) { my $new = $comment{$msgno}; my $old = $po_entry->automatic; $po_entry->automatic($new); if (defined $old) { $old =~ s/\s+/ /g; $new =~ s/\s+/ /g; if ($old ne $new) { print STDERR "Comment for message #$msgno changed:\n"; print STDERR "../lib/survex.pot:", $po_entry->loaded_line_number, ": [$old]\n"; print STDERR "${$uses[$msgno]}[0]: [$new]\n"; } } } if (defined $po_entry->automatic) { if (!exists $comment{$msgno}) { my $fake_err = ": Comment for message #$msgno not in source code\n"; if ($msgno ne '' && exists($uses[$msgno])) { print STDERR join($fake_err, "../lib/survex.pot:".$po_entry->loaded_line_number, @{$uses[$msgno]}), $fake_err if exists($uses[$msgno]); my $x = $po_entry->automatic; $x =~ s/\n/\n * /g; print STDERR " /* $x */\n"; } else { # Currently unused message. # print STDERR $fake_err; # my $x = $po_entry->automatic; # $x =~ s/\n/\n * /g; # print STDERR " /* $x */\n"; } } my $automatic = "\n" . $po_entry->automatic; $automatic =~ s/\n/\n#. /g; while ($automatic =~ s/\n#. \n/\n#.\n/g) { } print $automatic; } if ($msgno =~ /^\d+$/) { for (@{$uses[$msgno]}) { print "\n#: ", $_; } print "\n#: n:$msgno"; } print "\n#, c-format" if $msg =~ /\%[a-z0-9.]/; if ($msg =~ s/(?:^|[^\\])"/\\"/g) { print STDERR "Escaping unescaped \" in message number $msgno\n"; } print "\n"; print "#~ " if $po_entry->obsolete; print "msgid \"$msg\"\n"; print "#~ " if $po_entry->obsolete; print "msgstr \"\"\n"; } for my $msgno (sort keys %msgs) { next if ($msgno == 0 || $msgno >= 1000); print STDERR "New message number $msgno\n"; for (@{$uses[$msgno]}) { print "\n#: ", $_; } my $msg = $msgs{$msgno}; print "\n#: n:$msgno"; print "\n#, c-format" if $msg =~ /\%[a-z0-9.]/; if ($msg =~ s/(?:^|[^\\])"/\\"/g) { print STDERR "Escaping unescaped \" in message number $msgno\n"; } print "\nmsgid \"$msg\"\n"; print "msgstr \"\"\n"; } survex-1.4.4/lib/survex.xml0000644000175000017500000000226514141575516012637 00000000000000 Survex Raw Survey Data Survex Processed Data Survex Station Positions Survex Loop Closure Errors Compass Plot File CMAP Processed Data survex-1.4.4/lib/Greek.isl0000644000175000017500000010440214206061523012311 00000000000000; *** Inno Setup version 6.1.0+ Greek messages *** ; ; To download user-contributed translations of this file, go to: ; https://jrsoftware.org/files/istrans/ ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). ; ; Originally translated by Anastasis Chatzioglou, baldycom@hotmail.com ; Updated by XhmikosR [XhmikosR, my_nickname at yahoo dot com] ; Updated to version 6.1.0+ by Vasileios Karamichail, v.karamichail@outlook.com ; [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=Ελληνικά LanguageID=$0408 LanguageCodePage=1253 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=Εγκατάσταση SetupWindowTitle=Εγκατάσταση - %1 UninstallAppTitle=Απεγκατάσταση UninstallAppFullTitle=%1 Απεγκατάσταση ; *** Misc. common InformationTitle=ΠληÏοφοÏίες ConfirmTitle=Επιβεβαίωση ErrorTitle=Σφάλμα ; *** SetupLdr messages SetupLdrStartupMessage=Θα εκτελεστεί η εγκατάσταση του %1. Θέλετε να συνεχίσετε; LdrCannotCreateTemp=Σφάλμα στη δημιουÏγία Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου. Η εγκατάσταση τεÏματίστηκε LdrCannotExecTemp=ΑδÏνατη η εκτέλεση αÏχείου στον φάκελο Ï€ÏοσωÏινών αÏχείων. Η εγκατάσταση τεÏματίστηκε HelpTextNote= ; *** Startup error messages LastErrorMessage=%1.%n%nΣφάλμα %2: %3 SetupFileMissing=Το αÏχείο %1 λείπει από τον κατάλογο εγκατάστασης. ΔιοÏθώστε το Ï€Ïόβλημα ή αποκτήστε ένα νέο αντίγÏαφο του Ï€ÏογÏάμματος. SetupFileCorrupt=Το αÏχείο εγκατάστασης είναι κατεστÏαμμένο. ΠαÏακαλώ Ï€Ïομηθευτείτε ένα νέο αντίγÏαφο του Ï€ÏογÏάμματος. SetupFileCorruptOrWrongVer=Το αÏχείο εγκατάστασης είναι κατεστÏαμμένο ή δεν είναι συμβατό με αυτήν την έκδοση του Ï€ÏογÏάμματος εγκατάστασης. ΔιοÏθώστε το Ï€Ïόβλημα ή αποκτήστε ένα νέο αντίγÏαφο του Ï€ÏογÏάμματος. InvalidParameter=Μία μη έγκυÏη παÏάμετÏος χÏησιμοποιήθηκε στη γÏαμμή εντολών:%n%n%1 SetupAlreadyRunning=Η εγκατάσταση Ï„Ïέχει ήδη. WindowsVersionNotSupported=Αυτό το Ï€ÏόγÏαμμα δεν υποστηÏίζει την έκδοση των Windows που εκτελεί ο υπολογιστής σας. WindowsServicePackRequired=Αυτό το Ï€ÏόγÏαμμα χÏειάζεται το %1 Service Pack %2 ή νεότεÏο. NotOnThisPlatform=Αυτό το Ï€ÏόγÏαμμα δεν μποÏεί να εκτελεστεί σε %1. OnlyOnThisPlatform=Αυτό το Ï€ÏόγÏαμμα μποÏεί να εκτελεστεί μόνο σε %1. OnlyOnTheseArchitectures=Αυτό το Ï€ÏόγÏαμμα μποÏεί να εγκατασταθεί μόνο σε εκδόσεις των Windows που έχουν σχεδιαστεί για τις ακόλουθες αÏχιτεκτονικές επεξεÏγαστών:%n%n%1 WinVersionTooLowError=Αυτό το Ï€ÏόγÏαμμα απαιτεί %1 έκδοση %2 ή μεταγενέστεÏη. WinVersionTooHighError=Αυτό το Ï€ÏόγÏαμμα δεν μποÏεί να εγκατασταθεί σε %1 έκδοση %2 ή μεταγενέστεÏη. AdminPrivilegesRequired=ΠÏέπει να είστε συνδεδεμένοι ως διαχειÏιστής κατά την εγκατάσταση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… Ï€ÏογÏάμματος. PowerUserPrivilegesRequired=ΠÏέπει να είστε συνδεδεμένοι ως διαχειÏιστής ή ως μέλος της ομάδας Power User κατά την εγκατάσταση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… Ï€ÏογÏάμματος. SetupAppRunningError=Ο Οδηγός Εγκατάστασης εντόπισε ότι η εφαÏμογή %1 εκτελείται ήδη.%n%nΠαÏακαλώ κλείστε την εφαÏμογή τώÏα και πατήστε ΟΚ για να συνεχίσετε, ή ΆκυÏο για έξοδο. UninstallAppRunningError=Ο Οδηγός Απεγκατάστασης εντόπισε ότι η εφαÏμογή %1 εκτελείται ήδη.%n%nΠαÏακαλώ κλείστε την εφαÏμογή τώÏα και πατήστε ΟΚ για να συνεχίσετε, ή ΆκυÏο για έξοδο. ; *** Startup questions PrivilegesRequiredOverrideTitle=Επιλέξτε ΤÏόπο Εγκατάστασης PrivilegesRequiredOverrideInstruction=Επιλέξτε τον Ï„Ïόπο εγκατάστασης PrivilegesRequiredOverrideText1=Το %1 μποÏεί να εγκατασταθεί για όλους τους χÏήστες (απαιτεί δικαιώματα διαχειÏιστή) ή μόνο για εσάς. PrivilegesRequiredOverrideText2=Το %1 μποÏεί να εγκατασταθεί μόνο για εσάς ή για όλους τους χÏήστες (απαιτεί δικαιώματα διαχειÏιστή). PrivilegesRequiredOverrideAllUsers=Εγκατάσταση για &όλους τους χÏήστες PrivilegesRequiredOverrideAllUsersRecommended=Εγκατάσταση για όλ&ους τους χÏήστες (συνιστάται) PrivilegesRequiredOverrideCurrentUser=Εγκατάσταση μόνο για &εμένα PrivilegesRequiredOverrideCurrentUserRecommended=Εγκατάσταση μόνο για &εμένα (συνιστάται) ; *** Misc. errors ErrorCreatingDir=Η εγκατάσταση δεν μπόÏεσε να δημιουÏγήσει τον φάκελο "%1" ErrorTooManyFilesInDir=Δεν είναι δυνατή η δημιουÏγία ενός αÏχείου στον φάκελο "%1" επειδή πεÏιέχει πολλά αÏχεία ; *** Setup common messages ExitSetupTitle=Τέλος Εγκατάστασης ExitSetupMessage=Η εγκατάσταση δεν έχει ολοκληÏωθεί. Αν την τεÏματίσετε τώÏα, το Ï€ÏόγÏαμμα δεν θα εγκατασταθεί.%n%nΜποÏείτε να εκτελέσετε ξανά την εγκατάσταση αÏγότεÏα.%n%nΈξοδος; AboutSetupMenuItem=&Σχετικά με την Εγκατάσταση... AboutSetupTitle=Σχετικά με την Εγκατάσταση AboutSetupMessage=%1 έκδοση %2%n%3%n%n%1 αÏχική σελίδα:%n%4 AboutSetupNote= TranslatorNote= ; *** Buttons ButtonBack=< &Πίσω ButtonNext=&Επόμενο > ButtonInstall=&Εγκατάσταση ButtonOK=ΟΚ ButtonCancel=&ΑκυÏο ButtonYes=Î&αι ButtonYesToAll=Îαι σε &Ολα ButtonNo=ÎŒ&χι ButtonNoToAll=Όχι &σε όλα ButtonFinish=&Τέλος ButtonBrowse=&Αναζήτηση... ButtonWizardBrowse=Ανα&ζήτηση... ButtonNewFolder=&ΔημιουÏγία νέου φακέλου ; *** "Select Language" dialog messages SelectLanguageTitle=Επιλογή Γλώσσας ÎŸÎ´Î·Î³Î¿Ï Î•Î³ÎºÎ±Ï„Î¬ÏƒÏ„Î±ÏƒÎ·Ï‚ SelectLanguageLabel=Επιλέξτε τη γλώσσα που θέλετε να χÏησιμοποιήσετε κατά την εγκατάσταση. ; *** Common wizard text ClickNext=Πατήστε Επόμενο για να συνεχίσετε ή ΆκυÏο για να τεÏματίσετε την εγκατάσταση. BeveledLabel= BrowseDialogTitle=Αναζήτηση Φακέλου BrowseDialogLabel=Επιλέξτε ένα φάκελο από την ακόλουθη λίστα και πατήστε ΟΚ. NewFolderName=Îέος φάκελος ; *** "Welcome" wizard page WelcomeLabel1=Καλως οÏίσατε στον Οδηγό Εγκατάστασης του [name] WelcomeLabel2=Θα γίνει εγκατάσταση του [name/ver] στον υπολογιστή σας.%n%nΣυνιστάται να κλείσετε όλες τις άλλες εφαÏμογές Ï€Ïιν συνεχίσετε. ; *** "Password" wizard page WizardPassword=Κωδικός ΠÏόσβασης PasswordLabel1=Αυτή η εγκατάσταση Ï€ÏοστατεÏεται με κωδικό Ï€Ïόσβασης. PasswordLabel3=ΠαÏακαλώ εισάγετε τον κωδικό και πατήστε Επόμενο. PasswordEditLabel=&Κωδικός: IncorrectPassword=Ο κωδικός που έχετε εισάγει είναι λανθασμένος. ΠαÏακαλώ, Ï€Ïοσπαθήστε ξανά. ; *** "License Agreement" wizard page WizardLicense=Άδεια ΧÏήσης LicenseLabel=ΠαÏακαλώ διαβάστε Ï€Ïοσεκτικά τις ακόλουθες πληÏοφοÏίες Ï€Ïιν συνεχίσετε. LicenseLabel3=ΠαÏακαλώ διαβάστε την ακόλουθη Άδεια ΧÏήσης. Θα Ï€Ïέπει να αποδεχτείτε τους ÏŒÏους της Ï€Ïιν συνεχίσετε την εγκατάσταση. LicenseAccepted=&Δέχομαι τους ÏŒÏους της Άδειας ΧÏήσης LicenseNotAccepted=Δεν &αποδέχομαι τους ÏŒÏους της Άδειας ΧÏήσης ; *** "Information" wizard pages WizardInfoBefore=ΠληÏοφοÏίες InfoBeforeLabel=ΠαÏακαλώ διαβάστε Ï€Ïοσεκτικά τις ακόλουθες πληÏοφοÏίες Ï€Ïιν συνεχίσετε. InfoBeforeClickLabel=Όταν είστε έτοιμοι να συνεχίσετε με τον Οδηγό Εγκατάστασης, πατήστε Επόμενο. WizardInfoAfter=ΠληÏοφοÏίες InfoAfterLabel=ΠαÏακαλώ διαβάστε Ï€Ïοσεκτικά τις ακόλουθες πληÏοφοÏίες Ï€Ïιν συνεχίσετε. InfoAfterClickLabel=Όταν είστε έτοιμοι να συνεχίσετε με τον Οδηγό Εγκατάστασης, πατήστε Επόμενο. ; *** "User Information" wizard page WizardUserInfo=ΠληÏοφοÏίες ΧÏήστη UserInfoDesc=ΠαÏακαλώ εισάγετε τα στοιχεία σας. UserInfoName=&Ονομα ΧÏήστη: UserInfoOrg=&ΕταιÏεία: UserInfoSerial=&ΣειÏιακός ΑÏιθμός: UserInfoNameRequired=ΠÏέπει να εισάγετε ένα όνομα. ; *** "Select Destination Location" wizard page WizardSelectDir=Επιλογή Φακέλου Εγκατάστασης SelectDirDesc=Î Î¿Ï Î¸Î­Î»ÎµÏ„Îµ να εγκατασταθεί το [name]; SelectDirLabel3=Ο Οδηγός Εγκατάστασης θα εγκαταστήσει το [name] στον ακόλουθο φάκελο. SelectDirBrowseLabel=Για να συνεχίσετε, πατήστε Επόμενο. Εάν θέλετε να επιλέξετε διαφοÏετικό φάκελο, πατήστε Αναζήτηση. DiskSpaceGBLabel=ΑπαιτοÏνται τουλάχιστον [gb] GB ελεÏθεÏου χώÏου στο δίσκο. DiskSpaceMBLabel=ΑπαιτοÏνται τουλάχιστον [mb] MB ελεÏθεÏου χώÏου στο δίσκο. CannotInstallToNetworkDrive=Η εγκατάσταση δεν μποÏεί να γίνει σε δίσκο δικτÏου. CannotInstallToUNCPath=Η εγκατάσταση δεν μποÏεί να γίνει σε διαδÏομή UNC. InvalidPath=ΠÏέπει να δώσετε την πλήÏη διαδÏομή με το γÏάμμα δίσκου, για παÏάδειγμα:%n%nC:\APP%n%nή μια διαδÏομή UNC της μοÏφής:%n%n\\server\share InvalidDrive=Ο τοπικός δίσκος ή ο δίσκος δικτÏου που έχετε επιλέξει δεν υπάÏχει ή δεν είναι Ï€Ïοσβάσιμος. ΠαÏακαλώ, επιλέξτε άλλον. DiskSpaceWarningTitle=ΑνεπαÏκής ΧώÏος στο Δίσκο DiskSpaceWarning=Η εγκατάσταση χÏειάζεται τουλάχιστον %1 KB ελεÏθεÏο χώÏο στο δίσκο αλλά ο επιλεγμένος δίσκος διαθέτει μόνον %2 KB.%n%nΘέλετε να συνεχίσετε παÏόλα αυτά; DirNameTooLong=Το όνομα ή η διαδÏομή του φακέλου είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î·. InvalidDirName=Το όνομα του φακέλου δεν είναι έγκυÏο. BadDirName32=Το όνομα του φακέλου δεν μποÏεί να πεÏιλαμβάνει κανέναν από τους παÏακάτω χαÏακτήÏες:%n%n%1 DirExistsTitle=Ο Φάκελος ΥπάÏχει DirExists=Ο φάκελος:%n%n%1%n%nυπάÏχει ήδη. Θέλετε να γίνει η εγκατάσταση σε αυτόν τον φάκελο παÏόλα αυτά; DirDoesntExistTitle=Ο Φάκελος Δεν ΥπάÏχει DirDoesntExist=Ο φάκελος:%n%n%1%n%nδεν υπάÏχει. Θέλετε να δημιουÏγηθεί; ; *** "Select Components" wizard page WizardSelectComponents=Επιλογή ΛειτουÏγιών Μονάδων SelectComponentsDesc=Ποια στοιχεία θέλετε να εγκατασταθοÏν; SelectComponentsLabel2=Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε, αποεπιλέξτε τα στοιχεία που δεν θέλετε να εγκαταστήσετε. Πατήστε Επόμενο όταν είστε έτοιμοι να συνεχίσετε. FullInstallation=ΠλήÏης εγκατάσταση ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Τυπική εγκατάσταση CustomInstallation=ΠÏοσαÏμοσμένη εγκατάσταση NoUninstallWarningTitle=Οι ΛειτουÏγικές Μονάδες ΥπάÏχουν NoUninstallWarning=Ο Οδηγός Εγκατάστασης εντόπισε ότι τα ακόλουθα στοιχεία είναι ήδη εγκατεστημένα στον υπολογιστή σας:%n%n%1%n%nΑποεπιλέγοντας αυτά τα στοιχεία δεν θα απεγκατασταθοÏν.%n%nΘέλετε να συνεχίσετε παÏόλα αυτά; ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceGBLabel=Η Ï„Ïέχουσα επιλογή απαιτεί τουλάχιστον [gb] GB χώÏου στο δίσκο. ComponentsDiskSpaceMBLabel=Η Ï„Ïέχουσα επιλογή απαιτεί τουλάχιστον [mb] MB χώÏου στο δίσκο. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Επιλογή Επιπλέον ΕνεÏγειών SelectTasksDesc=Ποιες επιπλέον ενέÏγειες θέλετε να γίνουν; SelectTasksLabel2=Επιλέξτε τις επιπλέον ενέÏγειες που θέλετε να γίνουν κατά την εγκατάσταση του [name] και πατήστε Επόμενο. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Επιλογή Φακέλου ÎœÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξης SelectStartMenuFolderDesc=Î Î¿Ï Î¸Î­Î»ÎµÏ„Îµ να τοποθετηθοÏν οι συντομεÏσεις του Ï€ÏογÏάμματος; SelectStartMenuFolderLabel3=Η εγκατάσταση θα δημιουÏγήσει τις συντομεÏσεις του Ï€ÏογÏάμματος στον ακόλουθο φάκελο του Î¼ÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξη. SelectStartMenuFolderBrowseLabel=Για να συνεχίσετε, πατήστε Επόμενο. Αν θέλετε διαφοÏετικό φάκελο, πατήστε Αναζήτηση. MustEnterGroupName=ΠÏέπει να εισαγάγετε ένα όνομα φακέλου. GroupNameTooLong=Το όνομα ή η διαδÏομή του φακέλου είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î·. InvalidGroupName=Το όνομα του φακέλου δεν είναι έγκυÏο. BadGroupName=Το όνομα του φακέλου δεν μποÏεί να πεÏιλαμβάνει κανέναν από τους παÏακάτω χαÏακτήÏες:%n%n%1 NoProgramGroupCheck2=&ΧωÏίς δημιουÏγία φακέλου στο Î¼ÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξης. ; *** "Ready to Install" wizard page WizardReady=Έτοιμα για Εγκατάσταση ReadyLabel1=Ο Οδηγός Εγκατάστασης είναι έτοιμος να ξεκινήσει την εγκατάσταση του [name] στον υπολογιστή σας. ReadyLabel2a=Πατήστε Εγκατάσταση για να συνεχίσετε με την εγκατάσταση ή πατήστε Πίσω, εάν θέλετε να ελέγξετε ή να αλλάξετε τυχόν Ïυθμίσεις. ReadyLabel2b=Πατήστε Εγκατάσταση για να συνεχίσετε την εγκατάσταση. ReadyMemoUserInfo=ΠληÏοφοÏίες ΧÏήστη: ReadyMemoDir=Φάκελος Ï€ÏοοÏισμοÏ: ReadyMemoType=Είδος εγκατάστασης: ReadyMemoComponents=Επιλεγμένες λειτουÏγικές μονάδες: ReadyMemoGroup=Φάκελος στο Î¼ÎµÎ½Î¿Ï ÎˆÎ½Î±Ïξη: ReadyMemoTasks=Επιπλέον ενέÏγειες: ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile DownloadingLabel=Λήψη Ï€Ïόσθετων αÏχείων... ButtonStopDownload=&Διακοπή λήψης StopDownload=Είστε βέβαιοι ότι θέλετε να διακόψετε τη λήψη; ErrorDownloadAborted=Η λήψη ακυÏώθηκε ErrorDownloadFailed=Η λήψη απέτυχε: %1 %2 ErrorDownloadSizeFailed=Η λήψη του μεγέθους απέτυχε: %1 %2 ErrorFileHash1=Αποτυχία Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÎ¼Î¿Ï hash: %1 ErrorFileHash2=Μη έγκυÏο hash: αναμενόμενο %1, βÏέθηκε %2 ErrorProgress=Μη έγκυÏη Ï€Ïόοδος: %1 από %2 ErrorFileSize=Μη έγκυÏο μέγεθος αÏχείου: αναμενόμενο %1, βÏέθηκε %2 ; *** "Preparing to Install" wizard page WizardPreparing=ΠÏοετοιμασία Εγκατάστασης PreparingDesc=Ο Οδηγός Εγκατάστασης Ï€Ïοετοιμάζεται για την εγκατάσταση του [name] στον υπολογιστή σας. PreviousInstallNotCompleted=Η εγκατάσταση/αφαίÏεση ενός Ï€ÏοηγοÏμενου Ï€ÏογÏάμματος δεν ολοκληÏώθηκε. Θα χÏειαστεί να κάνετε επανεκκίνηση του υπολογιστή σας για να ολοκληÏωθεί.%n%nΜετά την επανεκκίνηση του υπολογιστή σας, εκτελέστε ξανά τον Οδηγό Εγκατάστασης για να ολοκληÏώσετε την εγκατάσταση/αφαίÏεση του [name]. CannotContinue=Η εγκατάσταση δεν μποÏεί να συνεχιστεί. ΠαÏακαλώ πατήστε ΆκυÏο για τεÏματισμό. ApplicationsFound=Οι ακόλουθες εφαÏμογές χÏησιμοποιοÏν αÏχεία που Ï€Ïέπει να ενημεÏωθοÏν από τον Οδηγό Εγκατάστασης. Συνιστάται να επιτÏέψετε στον Οδηγό Εγκατάστασης να κλείσει αυτόματα αυτές τις εφαÏμογές. ApplicationsFound2=Οι ακόλουθες εφαÏμογές χÏησιμοποιοÏν αÏχεία που Ï€Ïέπει να ενημεÏωθοÏν από τον Οδηγό Εγκατάστασης. Συνιστάται να επιτÏέψετε στον Οδηγό Εγκατάστασης να κλείσει αυτόματα αυτές τις εφαÏμογές. Μετά την ολοκλήÏωση της εγκατάστασης, ο Οδηγός Εγκατάστασης θα επιχειÏήσει να κάνει επανεκκίνηση των εφαÏμογών. CloseApplications=&Αυτόματο κλείσιμο των εφαÏμογών DontCloseApplications=&ΧωÏίς κλείσιμο των εφαÏμογών ErrorCloseApplications=Ο Οδηγός Εγκατάστασης δεν μπόÏεσε να κλείσει αυτόματα όλες τις εφαÏμογές. Συνιστάται να κλείσετε όλες τις εφαÏμογές που χÏησιμοποιοÏν αÏχεία που Ï€Ïέπει να ενημεÏωθοÏν από τον Οδηγό Εγκατάστασης Ï€ÏÎ¿Ï„Î¿Ï ÏƒÏ…Î½ÎµÏ‡Î¯ÏƒÎµÏ„Îµ. PrepareToInstallNeedsRestart=Ο Οδηγός Εγκατάστασης Ï€Ïέπει να κάνει επανεκκίνηση του υπολογιστή σας. Μετά την επανεκκίνηση του υπολογιστή σας, εκτελέστε ξανά τον Οδηγό Εγκατάστασης για να ολοκληÏώσετε την εγκατάσταση του [name].%n%nΘα θέλατε να κάνετε επανεκκίνηση τώÏα; ; *** "Installing" wizard page WizardInstalling=Εγκατάσταση InstallingLabel=ΠαÏακαλώ πεÏιμένετε καθώς γίνεται η εγκατάσταση του [name] στον υπολογιστή σας. ; *** "Setup Completed" wizard page FinishedHeadingLabel=ΟλοκλήÏωση του ÎŸÎ´Î·Î³Î¿Ï Î•Î³ÎºÎ±Ï„Î¬ÏƒÏ„Î±ÏƒÎ·Ï‚ του [name] FinishedLabelNoIcons=Ο Οδηγός Εγκατάστασης ολοκλήÏωσε την εγκατάσταση του [name] στον υπολογιστή σας. FinishedLabel=Ο Οδηγός Εγκατάστασης ολοκλήÏωσε την εγκατάσταση του [name] στον υπολογιστή σας. Η εφαÏμογή μποÏεί να ξεκινήσει επιλέγοντας κάποια από τις εγκατεστημένες συντομεÏσεις. ClickFinish=Πατήστε Τέλος για να τεÏματίσετε τον Οδηγό Εγκατάστασης. FinishedRestartLabel=Για να ολοκληÏώσετε την εγκατάσταση του [name], ο Οδηγός Εγκατάστασης Ï€Ïέπει να κάνει επανεκκίνηση του υπολογιστή σας. Θα θέλατε να κάνετε επανεκκίνηση τώÏα; FinishedRestartMessage=Για να ολοκληÏώσετε την εγκατάσταση του [name], ο Οδηγός Εγκατάστασης Ï€Ïέπει να κάνει επανεκκίνηση του υπολογιστή σας.%n%nΘα θέλατε να κάνετε επανεκκίνηση τώÏα; ShowReadmeCheck=Îαι, θα ήθελα να δω το αÏχείο README YesRadio=&Îαι, να γίνει επανεκκίνηση τώÏα NoRadio=&Οχι, θα κάνω επανεκκίνηση αÏγότεÏα ; used for example as 'Run MyProg.exe' RunEntryExec=Εκτέλεση του %1 ; used for example as 'View Readme.txt' RunEntryShellExec=ΠÏοβολή του %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=Ο Οδηγός Εγκατάστασης χÏειάζεται τον επόμενο δίσκο SelectDiskLabel2=ΠαÏακαλώ, εισάγετε τον δίσκο %1 και πατήστε ΟΚ.%n%nΕάν τα αÏχεία Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… δίσκου βÏίσκονται σε φάκελο διαφοÏετικό από αυτόν που εμφανίζεται παÏακάτω, πληκτÏολογήστε τη σωστή διαδÏομή ή πατήστε Αναζήτηση. PathLabel=&ΔιαδÏομή: FileNotInDir2=Το αÏχείο "%1" δε βÏέθηκε στο "%2". ΠαÏακαλώ εισάγετε το σωστό δίσκο ή επιλέξτε κάποιον άλλο φάκελο. SelectDirectoryLabel=ΠαÏακαλώ καθοÏίσετε την τοποθεσία του επόμενου δίσκου. ; *** Installation phase messages SetupAborted=Η εγκατάσταση δεν ολοκληÏώθηκε.%n%nΠαÏακαλώ, διοÏθώστε το Ï€Ïόβλημα και εκτελέστε ξανά τον Οδηγό Εγκατάστασης. AbortRetryIgnoreSelectAction=Επιλέξτε ενέÏγεια AbortRetryIgnoreRetry=&Δοκιμή AbortRetryIgnoreIgnore=&Αγνόηση και συνέχεια AbortRetryIgnoreCancel=ΑκυÏώση εγκατάστασης ; *** Installation status messages StatusClosingApplications=Κλείσιμο εφαÏμογών... StatusCreateDirs=ΔημιουÏγία φακέλων... StatusExtractFiles=Αποσυμπίεση αÏχείων... StatusCreateIcons=ΔημιουÏγία συντομεÏσεων... StatusCreateIniEntries=ΔημιουÏγία καταχωÏήσεων INI... StatusCreateRegistryEntries=ΔημιουÏγία καταχωÏήσεων στο μητÏώο... StatusRegisterFiles=ΚαταχώÏηση αÏχείων... StatusSavingUninstall=Αποθήκευση πληÏοφοÏιών απεγκατάστασης... StatusRunProgram=ΟλοκλήÏωση εγκατάστασης... StatusRestartingApplications=Επανεκκίνηση εφαÏμογών... StatusRollback=ΕπαναφοÏά αλλαγών... ; *** Misc. errors ErrorInternal2=ΕσωτεÏικό σφάλμα: %1 ErrorFunctionFailedNoCode=%1 απέτυχε ErrorFunctionFailed=%1 απέτυχε, κωδικός %2 ErrorFunctionFailedWithMessage=%1 απέτυχε, κωδικός %2.%n%3 ErrorExecutingProgram=Δεν είναι δυνατή η εκτέλεση του αÏχείου:%n%1 ; *** Registry errors ErrorRegOpenKey=Σφάλμα ανάγνωσης ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼Î·Ï„Ïώου:%n%1\%2 ErrorRegCreateKey=Σφάλμα δημιουÏγίας ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼Î·Ï„Ïώου:%n%1\%2 ErrorRegWriteKey=Σφάλμα καταχώÏησης ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼Î·Ï„Ïώου:%n%1\%2 ; *** INI errors ErrorIniEntry=Σφάλμα στη δημιουÏγία καταχώÏησης INI στο αÏχείο "%1". ; *** File copying errors FileAbortRetryIgnoreSkipNotRecommended=&ΠαÏάλειψη Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… αÏχείου (δεν συνιστάται) FileAbortRetryIgnoreIgnoreNotRecommended=ΠαÏάλειψη σφάλματος και &συνέχεια (δεν συνιστάται) SourceIsCorrupted=Το αÏχείο Ï€Ïοέλευσης είναι κατεστÏαμμένο SourceDoesntExist=Το αÏχείο Ï€Ïοέλευσης "%1" δεν υπάÏχει ExistingFileReadOnly2=Το υπάÏχον αÏχείο δεν μπόÏεσε να αντικατασταθεί επειδή είναι μόνο για ανάγνωση. ExistingFileReadOnlyRetry=&ΚαταÏγήστε το χαÏακτηÏιστικό μόνο για ανάγνωση και δοκιμάστε ξανά ExistingFileReadOnlyKeepExisting=&ΔιατηÏήστε το υπάÏχον αÏχείο ErrorReadingExistingDest=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια ανάγνωσης του υπάÏχοντος αÏχείου: FileExistsSelectAction=Επιλέξτε ενέÏγεια FileExists2=Το αÏχείο υπάÏχει ήδη. FileExistsOverwriteExisting=&Αντικατάσταση υπάÏχοντος αÏχείου FileExistsKeepExisting=&ΔιατήÏηση υπάÏχοντος αÏχείου FileExistsOverwriteOrKeepAll=&Îα γίνει το ίδιο για τις επόμενες διενέξεις ExistingFileNewerSelectAction=Επιλέξτε ενέÏγεια ExistingFileNewer2=Το υπάÏχον αÏχείο είναι νεότεÏο από αυτό που Ï€Ïοσπαθεί να εγκαταστήσει ο Οδηγός Εγκατάστασης. ExistingFileNewerOverwriteExisting=&Αντικατάσταση υπάÏχοντος αÏχείου ExistingFileNewerKeepExisting=&ΔιατήÏηση υπάÏχοντος αÏχείου (συνιστάται) ExistingFileNewerOverwriteOrKeepAll=&Îα γίνει το ίδιο για τις επόμενες διενέξεις ErrorChangingAttr=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια αλλαγής των χαÏακτηÏιστικών του υπάÏχοντος αÏχείου: ErrorCreatingTemp=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια δημιουÏγίας ενός αÏχείου στον φακέλο Ï€ÏοοÏισμοÏ: ErrorReadingSource=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια ανάγνωσης του αÏχείου Ï€Ïοέλευσης: ErrorCopying=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια αντιγÏαφής ενός αÏχείου: ErrorReplacingExistingFile=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια αντικατάστασης του υπάÏχοντος αÏχείου: ErrorRestartReplace=Η ΕπανεκκίνησηΑντικατάσταση απέτυχε: ErrorRenamingTemp=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια μετονομασίας ενός αÏχείου στον φακέλο Ï€ÏοοÏισμοÏ: ErrorRegisterServer=Δεν είναι δυνατή η καταχώÏιση του DLL/OCX: %1 ErrorRegSvr32Failed=Το RegSvr32 απέτυχε με κωδικό εξόδου %1 ErrorRegisterTypeLib=Δεν είναι δυνατή η καταχώÏιση της βιβλιοθήκης Ï„Ïπων: %1 ; *** Uninstall display name markings ; used for example as 'My Program (32-bit)' UninstallDisplayNameMark=%1 (%2) ; used for example as 'My Program (32-bit, All users)' UninstallDisplayNameMarks=%1 (%2, %3) UninstallDisplayNameMark32Bit=32-bit UninstallDisplayNameMark64Bit=64-bit UninstallDisplayNameMarkAllUsers=Ολοι οι χÏήστες UninstallDisplayNameMarkCurrentUser=ΤÏέχων χÏήστης ; *** Post-installation errors ErrorOpeningReadme=ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια ανοίγματος του αÏχείου README. ErrorRestartingComputer=Ο Οδηγός Εγκατάστασης δεν μπόÏεσε να κάνει επανεκκίνηση του υπολογιστή. ΠαÏακαλώ επανεκκινήσετε τον υπολογιστή μόνοι σας. ; *** Uninstaller messages UninstallNotFound=Το αÏχείο "%1" δεν υπάÏχει. Δεν είναι δυνατή η απεγκατάσταση. UninstallOpenError=Το αÏχείο "%1" δεν ήταν δυνατό να ανοίξει. Δεν είναι δυνατή η απεγκατάσταση UninstallUnsupportedVer=Το αÏχείο καταγÏαφής απεγκατάστασης "%1" είναι σε μοÏφή που δεν αναγνωÏίζεται από αυτήν την έκδοση του ÎŸÎ´Î·Î³Î¿Ï Î‘Ï€ÎµÎ³ÎºÎ±Ï„Î¬ÏƒÏ„Î±ÏƒÎ·Ï‚. Δεν ήταν δυνατή η απεγκατάσταση UninstallUnknownEntry=Μια άγνωστη καταχώÏηση (%1) εντοπίστηκε στο αÏχείο καταγÏαφής απεγκατάστασης ConfirmUninstall=Είστε βέβαιοι ότι θέλετε να καταÏγήσετε εντελώς το %1 και όλα τα στοιχεία του; UninstallOnlyOnWin64=Αυτή η εγκατάσταση μποÏεί να απεγκατασταθεί μόνο σε Windows 64-bit. OnlyAdminCanUninstall=Αυτή η εγκατάσταση μποÏεί να απεγκατασταθεί μόνο από χÏήστη με δικαιώματα διαχειÏιστή. UninstallStatusLabel=ΠαÏακαλώ πεÏιμένετε μέχÏι να καταÏγηθεί το %1 από τον υπολογιστή σας. UninstalledAll=Το %1 αφαιÏέθηκε με επιτυχία από τον υπολογιστή σας. UninstalledMost=Το %1 αφαιÏέθηκε με επιτυχία.%n%nΟÏισμένα στοιχεία δεν ήταν δυνατό να καταÏγηθοÏν. Αυτά μποÏοÏν να αφαιÏεθοÏν από εσάς. UninstalledAndNeedsRestart=Για να ολοκληÏώσετε την απεγκατάσταση του %1, ο υπολογιστής σας Ï€Ïέπει να επανεκκινηθεί.%n%nΘα θέλατε να κάνετε επανεκκίνηση τώÏα; UninstallDataCorrupted=Το "%1" αÏχείο είναι κατεστÏαμμένο. Δεν ήταν δυνατή η απεγκατάσταση ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=ΚατάÏγηση ΚοινόχÏηστου ΑÏχείου; ConfirmDeleteSharedFile2=Το σÏστημα υποδεικνÏει ότι το ακόλουθο κοινόχÏηστο αÏχείο δεν χÏησιμοποιείται πλέον από κανένα Ï€ÏόγÏαμμα. Θέλετε να καταÏγηθεί αυτό το κοινόχÏηστο αÏχείο;%n%nΕάν κάποιο Ï€ÏόγÏαμμα εξακολουθεί να το χÏησιμοποιεί, ενδέχεται να μην λειτουÏγήσει σωστά. Εάν δεν είστε βέβαιοι, επιλέξτε Όχι. Αφήνοντάς το στο σÏστημά σας δεν θα Ï€Ïοκληθεί καμία ζημιά. SharedFileNameLabel=Όνομα ΑÏχείου: SharedFileLocationLabel=Τοποθεσία: WizardUninstalling=ΠÏόοδος Απεγκατάστασης StatusUninstalling=Απεγκατάσταση %1... ; *** Shutdown block reasons ShutdownBlockReasonInstallingApp=Εγκατάσταση του %1. ShutdownBlockReasonUninstallingApp=Απεγκατάσταση του %1. ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 έκδοση %2 AdditionalIcons=Επιπλέον συντομεÏσεις: CreateDesktopIcon=ΔημιουÏγία συντόμευσης στην &επιφάνεια εÏγασίας CreateQuickLaunchIcon=ΔημιουÏγία συντόμευσης στη &ΓÏήγοÏη Εκκίνηση ProgramOnTheWeb=Το %1 στο Internet UninstallProgram=Απεγκατάσταση του %1 LaunchProgram=Εκκίνηση του %1 AssocFileExtension=&Συσχέτιση του %1 με την επέκταση αÏχείου %2 AssocingFileExtension=Γίνεται συσχέτιση του %1 με την επέκταση αÏχείου "%2"... AutoStartProgramGroupDescription=Εκκίνηση: AutoStartProgram=Αυτόματη εκκίνηση του %1 AddonHostProgramNotFound=Το %1 δε βÏέθηκε στο φάκελο που επιλέξατε.%n%nΘέλετε να συνεχίσετε παÏόλα αυτά; survex-1.4.4/lib/Hungarian.isl0000644000175000017500000005441514206061566013207 00000000000000; *** Inno Setup version 6.1.0+ Hungarian messages *** ; Based on the translation of Kornél Pál, kornelpal@gmail.com ; István Szabó, E-mail: istvanszabo890629@gmail.com ; ; To download user-contributed translations of this file, go to: ; http://www.jrsoftware.org/files/istrans/ ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=Magyar LanguageID=$040E LanguageCodePage=1250 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial CE ;TitleFontSize=29 ;CopyrightFontName=Arial CE ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=TelepítÅ‘ SetupWindowTitle=%1 - TelepítÅ‘ UninstallAppTitle=Eltávolító UninstallAppFullTitle=%1 Eltávolító ; *** Misc. common InformationTitle=Információk ConfirmTitle=MegerÅ‘sít ErrorTitle=Hiba ; *** SetupLdr messages SetupLdrStartupMessage=%1 telepítve lesz. Szeretné folytatni? LdrCannotCreateTemp=Ãtmeneti fájl létrehozása nem lehetséges. A telepítés megszakítva LdrCannotExecTemp=Fájl futattása nem lehetséges az átmeneti könyvtárban. A telepítés megszakítva HelpTextNote= ; *** Startup error messages LastErrorMessage=%1.%n%nHiba %2: %3 SetupFileMissing=A(z) %1 fájl hiányzik a telepítÅ‘ könyvtárából. Kérem hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból! SetupFileCorrupt=A telepítési fájlok sérültek. Kérem, szerezzen be új másolatot a programból! SetupFileCorruptOrWrongVer=A telepítési fájlok sérültek, vagy inkompatibilisek a telepítÅ‘ ezen verziójával. Hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból! InvalidParameter=A parancssorba átadott paraméter érvénytelen:%n%n%1 SetupAlreadyRunning=A TelepítÅ‘ már fut. WindowsVersionNotSupported=A program nem támogatja a Windows ezen verzióját. WindowsServicePackRequired=A program futtatásához %1 Service Pack %2 vagy újabb szükséges. NotOnThisPlatform=Ez a program nem futtatható %1 alatt. OnlyOnThisPlatform=Ezt a programot %1 alatt kell futtatni. OnlyOnTheseArchitectures=A program kizárólag a következÅ‘ processzor architektúrákhoz tervezett Windows-on telepíthetÅ‘:%n%n%1 WinVersionTooLowError=A program futtatásához %1 %2 verziója vagy késÅ‘bbi szükséges. WinVersionTooHighError=Ez a program nem telepíthetÅ‘ %1 %2 vagy késÅ‘bbire. AdminPrivilegesRequired=Csak rendszergazdai módban telepíthetÅ‘ ez a program. PowerUserPrivilegesRequired=Csak rendszergazdaként vagy kiemelt felhasználóként telepíthetÅ‘ ez a program. SetupAppRunningError=A telepítÅ‘ úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez. UninstallAppRunningError=Az eltávolító úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez. ; *** Startup questions PrivilegesRequiredOverrideTitle=Telepítési mód kiválasztása PrivilegesRequiredOverrideInstruction=Válasszon telepítési módot PrivilegesRequiredOverrideText1=%1 telepíthetÅ‘ az összes felhasználónak (rendszergazdai jogok szükségesek), vagy csak magának. PrivilegesRequiredOverrideText2=%1 csak magának telepíthetÅ‘, vagy az összes felhasználónak (rendszergazdai jogok szükségesek). PrivilegesRequiredOverrideAllUsers=Telepítés &mindenkinek PrivilegesRequiredOverrideAllUsersRecommended=Telepítés &mindenkinek (ajánlott) PrivilegesRequiredOverrideCurrentUser=Telepítés csak &nekem PrivilegesRequiredOverrideCurrentUserRecommended=Telepítés csak &nekem (ajánlott) ; *** Misc. errors ErrorCreatingDir=A TelepítÅ‘ nem tudta létrehozni a(z) "%1" könyvtárat ErrorTooManyFilesInDir=Nem hozható létre fájl a(z) "%1" könyvtárban, mert az már túl sok fájlt tartalmaz ; *** Setup common messages ExitSetupTitle=Kilépés a telepítÅ‘bÅ‘l ExitSetupMessage=A telepítés még folyamatban van. Ha most kilép, a program nem kerül telepítésre.%n%nMásik alkalommal is futtatható a telepítés befejezéséhez%n%nKilép a telepítÅ‘bÅ‘l? AboutSetupMenuItem=&Névjegy... AboutSetupTitle=TelepítÅ‘ névjegye AboutSetupMessage=%1 %2 verzió%n%3%n%nAz %1 honlapja:%n%4 AboutSetupNote= TranslatorNote= ; *** Buttons ButtonBack=< &Vissza ButtonNext=&Tovább > ButtonInstall=&Telepít ButtonOK=OK ButtonCancel=Mégse ButtonYes=&Igen ButtonYesToAll=&Mindet ButtonNo=&Nem ButtonNoToAll=&Egyiket se ButtonFinish=&Befejezés ButtonBrowse=&Tallózás... ButtonWizardBrowse=T&allózás... ButtonNewFolder=Új &könyvtár ; *** "Select Language" dialog messages SelectLanguageTitle=TelepítÅ‘ nyelvi beállítás SelectLanguageLabel=Válassza ki a telepítés alatt használt nyelvet. ; *** Common wizard text ClickNext=A folytatáshoz kattintson a 'Tovább'-ra, a kilépéshez a 'Mégse'-re. BeveledLabel= BrowseDialogTitle=Válasszon könyvtárt BrowseDialogLabel=Válasszon egy könyvtárat az alábbi listából, majd kattintson az 'OK'-ra. NewFolderName=Új könyvtár ; *** "Welcome" wizard page WelcomeLabel1=Üdvözli a(z) [name] TelepítÅ‘varázslója. WelcomeLabel2=A(z) [name/ver] telepítésre kerül a számítógépén.%n%nAjánlott minden, egyéb futó alkalmazás bezárása a folytatás elÅ‘tt. ; *** "Password" wizard page WizardPassword=Jelszó PasswordLabel1=Ez a telepítés jelszóval védett. PasswordLabel3=Kérem adja meg a jelszót, majd kattintson a 'Tovább'-ra. A jelszavak kis- és nagy betű érzékenyek lehetnek. PasswordEditLabel=&Jelszó: IncorrectPassword=Az ön által megadott jelszó helytelen. Próbálja újra. ; *** "License Agreement" wizard page WizardLicense=LicencszerzÅ‘dés LicenseLabel=Olvassa el figyelmesen az információkat folytatás elÅ‘tt. LicenseLabel3=Kérem, olvassa el az alábbi licencszerzÅ‘dést. A telepítés folytatásához, el kell fogadnia a szerzÅ‘dést. LicenseAccepted=&Elfogadom a szerzÅ‘dést LicenseNotAccepted=&Nem fogadom el a szerzÅ‘dést ; *** "Information" wizard pages WizardInfoBefore=Információk InfoBeforeLabel=Olvassa el a következÅ‘ fontos információkat a folytatás elÅ‘tt. InfoBeforeClickLabel=Ha készen áll, kattintson a 'Tovább'-ra. WizardInfoAfter=Információk InfoAfterLabel=Olvassa el a következÅ‘ fontos információkat a folytatás elÅ‘tt. InfoAfterClickLabel=Ha készen áll, kattintson a 'Tovább'-ra. ; *** "User Information" wizard page WizardUserInfo=Felhasználó adatai UserInfoDesc=Kérem, adja meg az adatait! UserInfoName=&Felhasználónév: UserInfoOrg=&Szervezet: UserInfoSerial=&Sorozatszám: UserInfoNameRequired=Meg kell adnia egy nevet! ; *** "Select Destination Location" wizard page WizardSelectDir=Válasszon célkönyvtárat SelectDirDesc=Hova települjön a(z) [name]? SelectDirLabel3=A(z) [name] az alábbi könyvtárba lesz telepítve. SelectDirBrowseLabel=A folytatáshoz, kattintson a 'Tovább'-ra. Ha másik könyvtárat választana, kattintson a 'Tallózás'-ra. DiskSpaceGBLabel=Legalább [gb] GB szabad területre van szükség. DiskSpaceMBLabel=Legalább [mb] MB szabad területre van szükség. CannotInstallToNetworkDrive=A TelepítÅ‘ nem tud hálózati meghajtóra telepíteni. CannotInstallToUNCPath=A TelepítÅ‘ nem tud hálózati UNC elérési útra telepíteni. InvalidPath=Teljes útvonalat adjon meg, a meghajtó betűjelével; például:%n%nC:\Alkalmazás%n%nvagy egy hálózati útvonalat a következÅ‘ alakban:%n%n\\kiszolgáló\megosztás InvalidDrive=A kiválasztott meghajtó vagy hálózati megosztás nem létezik vagy nem elérhetÅ‘. Válasszon egy másikat. DiskSpaceWarningTitle=Nincs elég szabad terület DiskSpaceWarning=A TelepítÅ‘nek legalább %1 KB szabad lemezterületre van szüksége, viszont a kiválasztott meghajtón csupán %2 KB áll rendelkezésre.%n%nMindenképpen folytatja? DirNameTooLong=A könyvtár neve vagy az útvonal túl hosszú. InvalidDirName=A könyvtár neve érvénytelen. BadDirName32=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1 DirExistsTitle=A könyvtár már létezik DirExists=A könyvtár:%n%n%1%n%nmár létezik. Mindenképp ide akar telepíteni? DirDoesntExistTitle=A könyvtár nem létezik DirDoesntExist=A könyvtár:%n%n%1%n%nnem létezik. Szeretné létrehozni? ; *** "Select Components" wizard page WizardSelectComponents=ÖsszetevÅ‘k kiválasztása SelectComponentsDesc=Mely összetevÅ‘k kerüljenek telepítésre? SelectComponentsLabel2=Jelölje ki a telepítendÅ‘ összetevÅ‘ket; törölje a telepíteni nem kívánt összetevÅ‘ket. Kattintson a 'Tovább'-ra, ha készen áll a folytatásra. FullInstallation=Teljes telepítés ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Szokásos telepítés CustomInstallation=Egyéni telepítés NoUninstallWarningTitle=LétezÅ‘ összetevÅ‘ NoUninstallWarning=A telepítÅ‘ úgy találta, hogy a következÅ‘ összetevÅ‘k már telepítve vannak a számítógépre:%n%n%1%n%nEzen összetevÅ‘k kijelölésének törlése, nem távolítja el azokat a számítógéprÅ‘l.%n%nMindenképpen folytatja? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceGBLabel=A jelenlegi kijelölés legalább [gb] GB lemezterületet igényel. ComponentsDiskSpaceMBLabel=A jelenlegi kijelölés legalább [mb] MB lemezterületet igényel. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=További feladatok SelectTasksDesc=Mely kiegészítÅ‘ feladatok kerüljenek végrehajtásra? SelectTasksLabel2=Jelölje ki, mely kiegészítÅ‘ feladatokat hajtsa végre a TelepítÅ‘ a(z) [name] telepítése során, majd kattintson a 'Tovább'-ra. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Start Menü könyvtára SelectStartMenuFolderDesc=Hova helyezze a TelepítÅ‘ a program parancsikonjait? SelectStartMenuFolderLabel3=A TelepítÅ‘ a program parancsikonjait a Start menü következÅ‘ mappájában fogja létrehozni. SelectStartMenuFolderBrowseLabel=A folytatáshoz kattintson a 'Tovább'-ra. Ha másik mappát választana, kattintson a 'Tallózás'-ra. MustEnterGroupName=Meg kell adnia egy mappanevet. GroupNameTooLong=A könyvtár neve vagy az útvonal túl hosszú. InvalidGroupName=A könyvtár neve érvénytelen. BadGroupName=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1 NoProgramGroupCheck2=&Ne hozzon létre mappát a Start menüben ; *** "Ready to Install" wizard page WizardReady=Készen állunk a telepítésre ReadyLabel1=A TelepítÅ‘ készen áll, a(z) [name] számítógépre telepítéshez. ReadyLabel2a=Kattintson a 'Telepítés'-re a folytatáshoz, vagy a "Vissza"-ra a beállítások áttekintéséhez vagy megváltoztatásához. ReadyLabel2b=Kattintson a 'Telepítés'-re a folytatáshoz. ReadyMemoUserInfo=Felhasználó adatai: ReadyMemoDir=Telepítés célkönyvtára: ReadyMemoType=Telepítés típusa: ReadyMemoComponents=Választott összetevÅ‘k: ReadyMemoGroup=Start menü mappája: ReadyMemoTasks=KiegészítÅ‘ feladatok: ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile DownloadingLabel=További fájlok letöltése... ButtonStopDownload=&Letöltés megállítása StopDownload=Biztos, hogy leakarja állítani a letöltést? ErrorDownloadAborted=Letöltés megszakítva ErrorDownloadFailed=A letöltés meghiúsult: %1 %2 ErrorDownloadSizeFailed=Hiba a fájlméret lekérése során: %1 %2 ErrorFileHash1=Fájl Hash (hasítóérték) hiba: %1 ErrorFileHash2=Érvénytelen hash fájl, várt érték: %1, számított: %2 ErrorProgress=Érvénytelen folyamat: %1 : %2 ErrorFileSize=Érvénytelen fájlméret, várt méret %1, számított: %2 ; *** "Preparing to Install" wizard page WizardPreparing=Felkészülés a telepítésre PreparingDesc=A TelepítÅ‘ felkészül a(z) [name] számítógépre történÅ‘ telepítéshez. PreviousInstallNotCompleted=gy korábbi program telepítése/eltávolítása nem fejezÅ‘dött be. Újra kell indítania a számítógépét a másik telepítés befejezéséhez.%n%nA számítógépe újraindítása után ismét futtassa a TelepítÅ‘t a(z) [name] telepítésének befejezéséhez. CannotContinue=A telepítés nem folytatható. A kilépéshez kattintson a 'Mégse'-re. ApplicationsFound=A következÅ‘ alkalmazások olyan fájlokat használnak, amelyeket a TelepítÅ‘nek frissíteni kell. Ajánlott, hogy engedélyezze a TelepítÅ‘nek ezen alkalmazások automatikus bezárását. ApplicationsFound2=A következÅ‘ alkalmazások olyan fájlokat használnak, amelyeket a TelepítÅ‘nek frissíteni kell. Ajánlott, hogy engedélyezze a TelepítÅ‘nek ezen alkalmazások automatikus bezárását. A telepítés befejezése után, a TelepítÅ‘ megkísérli az alkalmazások újraindítását. CloseApplications=&Alkalmazások automatikus bezárása DontCloseApplications=&Ne zárja be az alkalmazásokat ErrorCloseApplications=A TelepítÅ‘ nem tudott minden alkalmazást automatikusan bezárni. A folytatás elÅ‘tt ajánlott minden, a TelepítÅ‘ által frissítendÅ‘ fájlokat használó alkalmazást bezárni. PrepareToInstallNeedsRestart=A telepítÅ‘nek most újra kell indítania a számítógépet. Az újraindítás után, futtassa újból ezt a telepítÅ‘t, hogy befejezze a [name] telepítését.%n%nÚjra szeretné most indítani a gépet? ; *** "Installing" wizard page WizardInstalling=Telepítés InstallingLabel=Kérem várjon, amíg a(z) [name] telepítése zajlik. ; *** "Setup Completed" wizard page FinishedHeadingLabel=A(z) [name] telepítésének befejezése FinishedLabelNoIcons=A TelepítÅ‘ végzett a(z) [name] telepítésével. FinishedLabel=A TelepítÅ‘ végzett a(z) [name] telepítésével. Az alkalmazást a létrehozott ikonok kiválasztásával indíthatja. ClickFinish=Kattintson a 'Befejezés'-re a kilépéshez. FinishedRestartLabel=A(z) [name] telepítésének befejezéséhez újra kell indítani a számítógépet. Újraindítja most? FinishedRestartMessage=A(z) [name] telepítésének befejezéséhez, a TelepítÅ‘nek újra kell indítani a számítógépet.%n%nÚjraindítja most? ShowReadmeCheck=Igen, szeretném elolvasni a FONTOS fájlt YesRadio=&Igen, újraindítás most NoRadio=&Nem, késÅ‘bb indítom újra ; used for example as 'Run MyProg.exe' RunEntryExec=%1 futtatása ; used for example as 'View Readme.txt' RunEntryShellExec=%1 megtekintése ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=A TelepítÅ‘nek szüksége van a következÅ‘ lemezre SelectDiskLabel2=Helyezze be a(z) %1. lemezt és kattintson az 'OK'-ra.%n%nHa a fájlok a lemez egy a megjelenítettÅ‘l különbözÅ‘ mappájában találhatók, írja be a helyes útvonalat vagy kattintson a 'Tallózás'-ra. PathLabel=Ú&tvonal: FileNotInDir2=A(z) "%1" fájl nem található a következÅ‘ helyen: "%2". Helyezze be a megfelelÅ‘ lemezt vagy válasszon egy másik mappát. SelectDirectoryLabel=Adja meg a következÅ‘ lemez helyét. ; *** Installation phase messages SetupAborted=A telepítés nem fejezÅ‘dött be.%n%nHárítsa el a hibát és futtassa újból a TelepítÅ‘t. AbortRetryIgnoreSelectAction=Válasszon műveletet AbortRetryIgnoreRetry=&Újra AbortRetryIgnoreIgnore=&Hiba elvetése és folytatás AbortRetryIgnoreCancel=Telepítés megszakítása ; *** Installation status messages StatusClosingApplications=Alkalmazások bezárása... StatusCreateDirs=Könyvtárak létrehozása... StatusExtractFiles=Fájlok kibontása... StatusCreateIcons=Parancsikonok létrehozása... StatusCreateIniEntries=INI bejegyzések létrehozása... StatusCreateRegistryEntries=Rendszerleíró bejegyzések létrehozása... StatusRegisterFiles=Fájlok regisztrálása... StatusSavingUninstall=Eltávolító információk mentése... StatusRunProgram=Telepítés befejezése... StatusRestartingApplications=Alkalmazások újraindítása... StatusRollback=Változtatások visszavonása... ; *** Misc. errors ErrorInternal2=BelsÅ‘ hiba: %1 ErrorFunctionFailedNoCode=Sikertelen %1 ErrorFunctionFailed=Sikertelen %1; kód: %2 ErrorFunctionFailedWithMessage=Sikertelen %1; kód: %2.%n%3 ErrorExecutingProgram=Nem hajtható végre a fájl:%n%1 ; *** Registry errors ErrorRegOpenKey=Nem nyitható meg a rendszerleíró kulcs:%n%1\%2 ErrorRegCreateKey=Nem hozható létre a rendszerleíró kulcs:%n%1\%2 ErrorRegWriteKey=Nem módosítható a rendszerleíró kulcs:%n%1\%2 ; *** INI errors ErrorIniEntry=Hiba lépett fel az INI bejegyzés során, ebben a fájlban: "%1". ; *** File copying errors FileAbortRetryIgnoreSkipNotRecommended=&Fájl kihagyása (nem ajánlott) FileAbortRetryIgnoreIgnoreNotRecommended=&Hiba elvetése és folytatás (nem ajánlott) SourceIsCorrupted=A forrásfájl megsérült SourceDoesntExist=A(z) "%1" forrásfájl nem létezik ExistingFileReadOnly2=A fájl csak olvashatóként van jelölve, ezért nem cserélhetÅ‘ le. ExistingFileReadOnlyRetry=Csak &olvasható tulajdonság eltávolítása és újra próbálkozás ExistingFileReadOnlyKeepExisting=&LétezÅ‘ fájl megtartása ErrorReadingExistingDest=Hiba lépett fel a fájl olvasása közben: FileExistsSelectAction=Mit tegyünk? FileExists2=A fájl már létezik. FileExistsOverwriteExisting=A &létezÅ‘ fájl felülírása FileExistsKeepExisting=A &már létezÅ‘ fájl megtartása FileExistsOverwriteOrKeepAll=&Tegyük ezt, a következÅ‘ fájlütközések esetén is ExistingFileNewerSelectAction=Mit kíván tenni? ExistingFileNewer2=A létezÅ‘ fájl újabb a telepítésre kerülÅ‘nél ExistingFileNewerOverwriteExisting=A &létezÅ‘ fájl felülírása ExistingFileNewerKeepExisting=&Tartsuk meg a létezÅ‘ fájlt (ajánlott) ExistingFileNewerOverwriteOrKeepAll=&Tegyük ezt, a következÅ‘ fájlütközések esetén is ErrorChangingAttr=Hiba lépett fel a fájl attribútumának módosítása közben: ErrorCreatingTemp=Hiba lépett fel a fájl telepítési könyvtárban történÅ‘ létrehozása közben: ErrorReadingSource=Hiba lépett fel a forrásfájl olvasása közben: ErrorCopying=Hiba lépett fel a fájl másolása közben: ErrorReplacingExistingFile=Hiba lépett fel a létezÅ‘ fájl cseréje közben: ErrorRestartReplace=A fájl cseréje az újraindítás után sikertelen volt: ErrorRenamingTemp=Hiba lépett fel fájl telepítési könyvtárban történÅ‘ átnevezése közben: ErrorRegisterServer=Nem lehet regisztrálni a DLL-t/OCX-et: %1 ErrorRegSvr32Failed=Sikertelen RegSvr32. A visszaadott kód: %1 ErrorRegisterTypeLib=Nem lehet regisztrálni a típustárat: %1 ; *** Uninstall display name markings ; used for example as 'My Program (32-bit)' UninstallDisplayNameMark=%1 (%2) ; used for example as 'My Program (32-bit, All users)' UninstallDisplayNameMarks=%1 (%2, %3) UninstallDisplayNameMark32Bit=32-bit UninstallDisplayNameMark64Bit=64-bit UninstallDisplayNameMarkAllUsers=Minden felhasználó UninstallDisplayNameMarkCurrentUser=Jelenlegi felhasználó ; *** Post-installation errors ErrorOpeningReadme=Hiba lépett fel a FONTOS fájl megnyitása közben. ErrorRestartingComputer=A TelepítÅ‘ nem tudta újraindítani a számítógépet. Indítsa újra kézileg. ; *** Uninstaller messages UninstallNotFound=A(z) "%1" fájl nem létezik. Nem távolítható el. UninstallOpenError=A(z) "%1" fájl nem nyitható meg. Nem távolítható el UninstallUnsupportedVer=A(z) "%1" eltávolítási naplófájl formátumát nem tudja felismerni az eltávolító jelen verziója. Az eltávolítás nem folytatható UninstallUnknownEntry=Egy ismeretlen bejegyzés (%1) található az eltávolítási naplófájlban ConfirmUninstall=Biztosan el kívánja távolítani a(z) %1 programot és minden összetevÅ‘jét? UninstallOnlyOnWin64=Ezt a telepítést csak 64-bites Windows operációs rendszerrÅ‘l lehet eltávolítani. OnlyAdminCanUninstall=Ezt a telepítést csak adminisztrációs jogokkal rendelkezÅ‘ felhasználó távolíthatja el. UninstallStatusLabel=Legyen türelemmel, amíg a(z) %1 számítógépérÅ‘l történÅ‘ eltávolítása befejezÅ‘dik. UninstalledAll=A(z) %1 sikeresen el lett távolítva a számítógéprÅ‘l. UninstalledMost=A(z) %1 eltávolítása befejezÅ‘dött.%n%nNéhány elemet nem lehetettet eltávolítani. Törölje kézileg. UninstalledAndNeedsRestart=A(z) %1 eltávolításának befejezéséhez újra kell indítania a számítógépét.%n%nÚjraindítja most? UninstallDataCorrupted=A(z) "%1" fájl sérült. Nem távolítható el. ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Törli a megosztott fájlt? ConfirmDeleteSharedFile2=A rendszer azt jelzi, hogy a következÅ‘ megosztott fájlra már nincs szüksége egyetlen programnak sem. Eltávolítja a megosztott fájlt?%n%nHa más programok még mindig használják a megosztott fájlt, akkor az eltávolítása után lehet, hogy nem fognak megfelelÅ‘en működni. Ha bizonytalan, válassza a Nemet. A fájl megtartása nem okoz problémát a rendszerben. SharedFileNameLabel=Fájlnév: SharedFileLocationLabel=Helye: WizardUninstalling=Eltávolítás állapota StatusUninstalling=%1 eltávolítása... ; *** Shutdown block reasons ShutdownBlockReasonInstallingApp=%1 telepítése. ShutdownBlockReasonUninstallingApp=%1 eltávolítása. ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1, verzió: %2 AdditionalIcons=További parancsikonok: CreateDesktopIcon=&Asztali ikon létrehozása CreateQuickLaunchIcon=&Gyorsindító parancsikon létrehozása ProgramOnTheWeb=%1 az interneten UninstallProgram=Eltávolítás - %1 LaunchProgram=Indítás %1 AssocFileExtension=A(z) %1 &társítása a(z) %2 fájlkiterjesztéssel AssocingFileExtension=A(z) %1 társítása a(z) %2 fájlkiterjesztéssel... AutoStartProgramGroupDescription=Indítópult: AutoStartProgram=%1 automatikus indítása AddonHostProgramNotFound=A(z) %1 nem található a kiválasztott könyvtárban.%n%nMindenképpen folytatja? survex-1.4.4/lib/pl.po0000644000175000017500000026647514211753703011545 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2016-08-20 00:43:08 +0000\n" "Last-Translator: Mateusz Golicz \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Plik" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Obrót" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "Orientac&ja" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Widok" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Sterowanie" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "Pomo&c" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "Pre&zentacja" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Użycie" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Brak wolnej pamiÄ™ci" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Brak wolnej pamiÄ™ci (nie mogÄ™ przydzielić %lu bajtów)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Brak wolnej pamiÄ™ci podczas odczytu pliku: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Wersja Survex'a co najmniej %s jest wymagana aby przetworzyć ten plik" #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "info" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "ostrzeżenie" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "błąd" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "W pliku dołączonym z %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix jest przestarzaÅ‚y - użyj *begin i *end" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Znak “%c†nie jest dozwolony w nazwie punktu (użyj *SET NAMES aby ustalić dozwolone znaki)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Nie można pominąć tego pola" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "SpodziewaÅ‚em siÄ™ liczby, znalazÅ‚em “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "ZnalazÅ‚em “%sâ€, spodziewaÅ‚em siÄ™ “PRESERVEâ€, “TOUPPER†lub “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Wykryto błąd w programie! ProszÄ™ poinformować autorów!" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Nieznane polecenie “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Punkt “%s†utożsamiony sam z sobÄ…" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "Nie można pominąć azymutu, z wyjÄ…tkiem odcinków pionowych" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Nie można pominąć dÅ‚ugoÅ›ci" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Niespodziewana treść na koÅ„cu linii" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Zanotowano ostrzeżeÅ„: %d" #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "WywoÅ‚anie zewnÄ™trznego polecenia “%s†nie powiodÅ‚o siÄ™" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Błąd podczas odczytu pliku" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Za dużo błędów - poddajÄ™ siÄ™" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT jest przestarzaÅ‚y - użyj *CALIBRATE/DATA/SD/UNITS z argumentem DEFAULT" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Wskazano azymut na odcinku pionowym" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END bez odpowiadajÄ…cego mu BEGIN" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN bez odpowiadajÄ…cego mu END" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "Punkt “%s†nie wyeksportowany z sesji “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "Odniesienie do punktu “%s†z nieistniejÄ…cej sesji “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†nie może być jednoczeÅ›nie nazwÄ… punktu i sesji" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "SpodziewaÅ‚em siÄ™ nazwy punktu" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "ZnalazÅ‚em “%sâ€, spodziewaÅ‚em siÄ™ “EQUATESâ€, “EXPORTS†lub “PLUMBSâ€" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "ZnalazÅ‚em “%sâ€, spodziewaÅ‚em siÄ™ “ON†lub “OFFâ€" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Podano tylko jeden punkt w poleceniu EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Nieznana wielkość “%sâ€" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Nieznana jednostka “%sâ€" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "Nieznany ukÅ‚ad współrzÄ™dnych" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "NieprawidÅ‚owy ukÅ‚ad współrzÄ™dnych: %s" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "UkÅ‚ad współrzÄ™dnych nieodpowiedni dla wyjÅ›cia" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "Nie udaÅ‚o siÄ™ przetworzyć współrzÄ™dnych: %s" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "Ustalono wejÅ›ciowy ukÅ‚ad współrzÄ™dnych, ale brak instrukcji co do wyjÅ›ciowego" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "Ustalono wyjÅ›ciowy ukÅ‚ad współrzÄ™dnych, ale brak instrukcji co do wejÅ›ciowego" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "Nie można pominąć współrzÄ™dnych jeÅ›li wskazano ukÅ‚ad współrzÄ™dnych" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "Należy wskazać wejÅ›ciowy ukÅ‚ad współrzÄ™dnych dla “*DECLINATION AUTOâ€" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "SpodziewaÅ‚em siÄ™ liczby lub “AUTOâ€" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "Brak danych o dacie pomiaru - przyjmujÄ™ 0 jako deklinacjÄ™ magnetycznÄ…" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "Odpowiednie polecenie BEGIN jest bez nazwy sesji" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "NieprawidÅ‚owa jednostka “%s†dla wielkoÅ›ci" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Nieznany instrument “%sâ€" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Współczynnik skalowania musi wynosić 1.0 dla DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Współczynnik skalowania musi być niezerowy" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Nieznana opcja “%sâ€" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Nieznana klasa znaków “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Brak danych pomiarowych" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Nazwa “%s†odnosi siÄ™ do katalogu" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "Pomiar nie tworzy spójnej caÅ‚oÅ›ci" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Punkt już zostaÅ‚ ustalony lub zrównany z punktem ustalonym" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Nie udaÅ‚o siÄ™ otworzyć pliku wyjÅ›ciowego “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "Odchylenie standardowe musi być dodanie" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Odcinek pomiarowy z tym samym punktem (“%sâ€) po obydwóch stronach - literówka?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Wartość klinometru powyżej %.f%s (bezwzglÄ™dnie)" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Próba zrównania dwóch różnych punktów ustalonych: “%s†i “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "ZrównujÄ™ dwa tożsame punkty ustalone: “%s†and “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Polecenie FIX bez współrzÄ™dnych - ustalam na (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Ponowne ustalenie punktu na tych samych współrzÄ™dnych" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Ponowny FIX bez współrzÄ™dnych dla punktu “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "Punkt “%s†ustalony przed użyciem polecenia CS" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT musi nastÄ™pować bezpoÅ›rednio po “*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Wprowadź rok pomiÄ™dzy 1900 a 2078" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Podejrzany azymut" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Ujemna wartość dÅ‚ugoÅ›ci" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Ten sam punkt ustalony dwukrotnie bez współrzÄ™dnych" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Wartość dÅ‚ugoÅ›ci jest mniejsza niż zmiana głębokoÅ›ci" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Wartość “%s†nie jest dozwolona w formacie danych “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Za maÅ‚o wartoÅ›ci dla formatu danych “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Format danych “%s†jest nieznany" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Punkt “%s†już zostaÅ‚ wyeksportowany" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Zdublowana wartość “%sâ€" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "Nieznany FLAG “%sâ€" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "BrakujÄ…cy \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "Jednorazowe odwoÅ‚anie do punktu “%s†- literówka?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "NastÄ™pujÄ…ce punkty nie sÄ… dołączone do pomiaru:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "Pomiar nie ma żadnych punktów ustalonych. W zwiÄ…zku z tym, ustalam %s w pozycji (0, 0, 0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Niewykorzystany punkt ustalony “%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Sieć rozwiÄ…zana poprzez redukcjÄ™ - brak ukÅ‚adu równaÅ„ do rozwiÄ…zania." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "RozwiÄ…zywanie ukÅ‚adu %d równaÅ„" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "Wartość “%s†dubluje poprzednio okreÅ›lone wartoÅ›ci" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "RozwiÄ…zywanie jednego równania" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Po korekcji wartość dÅ‚ugoÅ›ci jest ujemna!" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "Data w przyszÅ‚oÅ›ci!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "Data koÅ„cowa jest wczeÅ›niejsza niż poczÄ…tkowa" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Przekrój okreÅ›lony na nieistniejÄ…cym punkcie “%sâ€" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "WartoÅ›ci CLINO i BACKCLINO muszÄ… być tego samego typu" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "Pionowe wartoÅ›ci CLINO i BACKCLINO nie mogÄ… być w tym samym kierunku" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Błędny miesiÄ…c" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Błędny dzieÅ„ miesiÄ…ca" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "obsÅ‚ugiwane wersje formatu 3d od %d do %d" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "SpodziewaÅ‚em siÄ™ nazwy sesji" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Nie można otworzyć pliku “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Nie da siÄ™ zapisywać do pliku “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Kolejne zauważone użycia tej przestarzaÅ‚ej opcji nie bÄ™dÄ… raportowane" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "wartoÅ›ci TAPE i BACKTAPE nie zgadzajÄ… siÄ™ o %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "wartoÅ›ci COMPASS i BACKCOMPASS nie zgadzajÄ… siÄ™ o %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "wartoÅ›ci CLINO i BACKCLINO nie zgadzajÄ… siÄ™ o %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†jest przestarzaÅ‚e - proszÄ™ używać “*data %s …â€" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Błędny plik 3d “%sâ€" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Data i czas nie sÄ… dostÄ™pne" #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Błąd przy odczycie pliku “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Błąd zapisu do pliku “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Błąd zapisu do pliku" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "WystÄ…piÅ‚o ostrzeżeÅ„: %d i błędów: %d - nie wygenerowano plików wyjÅ›ciowych." #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Plik “%s†jest w nowszym formacie, którego ten program nie rozumie" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Północ" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Przekrój zrzutowany na" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "Widok p&lanu" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "&Przekrój" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Przekrój" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Plan" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "Kiwi Plan" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Obliczanie statystyk" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "OczekiwaÅ‚em pola tekstowego" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "za maÅ‚o argumentów" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "za dużo argumentów" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "PLIK" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Usuwanie Å›lepych sekwencji" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "ÅÄ…czenie sekwencji" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Przeliczanie sekwencji" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Przeliczanie Å›lepych sekwencji" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Upraszczanie sieci" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Obliczanie sieci" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "ZnalazÅ‚em “%sâ€, oczekiwaÅ‚em “F†or “Bâ€" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "ÅÄ…czna dÅ‚ugość odcinków pomiarowych = %7.2f%s (%7.2f%s po poprawkach)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "ÅÄ…czna dÅ‚ugość zrzutowana odcinków pomiarowych = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "ÅÄ…czne przewyższenie odcinków pomiarowych = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "RozciÄ…gÅ‚ość pionowa = %4.2f%s (od %s w %4.2f%s do %s w %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "RozciÄ…gÅ‚ość Północ-PoÅ‚udnie = %4.2f%s (od %s w %4.2f%s do %s w %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "RozciÄ…gÅ‚ość Wschód-Zachód = %4.2f%s (od %s w %4.2f%s do %s w %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Wykryto 1 pÄ™tlÄ™." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Wykryto %ld pÄ™tli." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Czas CPU %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Czas pracy %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Brak informacji o czasie pracy" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Czas pracy %5.2fs (%5.2fs czasu CPU)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Pierwodna dÅ‚ugość %6.2fm (%3d odcinków), przesuniÄ™to o %6.2fm (%5.2fm/odcinek). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Błąd %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Błąd N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "wyÅ›wietl tÄ™ pomoc i wyjdź" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "wyÅ›wietl informacje o wersji i wyjdź" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPCJA" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Skala" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Użyj “%s --help†aby uzyskać wiÄ™cej informacji.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "Przetworzono: %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "↑%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "%s↔%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "%s↔%s ∡%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "RozwiniÄ™ty 1:%.0f" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "Widok planu, %s w górÄ™ strony" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Przekrój patrzÄ…c na %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Przekrój patrzÄ…c na %s, pochylony o %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Przekrój rozwiniÄ™ty" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "Pomiar zawiera 1 punkt" #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "Pomiar zawiera %ld punktów" #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " połączonych 1 odcinkiem." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " połączonych %ld odcinkami." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "wÄ™zeÅ‚" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "wÄ™zÅ‚y" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "Pomiar posiada %ld spójnych komponentów" #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Zapisz dziennik" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&Przetwórz ponownie" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argument liczbowy “%s†poza dozwolonym zakresem" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "argument “%s†nie jest liczbÄ… caÅ‚kowitÄ…" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "argument “%s†nie jest liczbÄ…" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "SpodziewaÅ‚em siÄ™ “DUPLICATEâ€, “SPLAYâ€, albo “SURFACEâ€" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "SpodziewaÅ‚em siÄ™ “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, albo “SURFACEâ€" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "SpodziewaÅ‚em siÄ™ “F†albo “Mâ€" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "Nazwa punktu “%s†jest przywoÅ‚ywana w *entrance lub w *export, ale poza tym nie używana" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Brak odpowiadajÄ…cego BEGIN" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "Nazwa sesji nie odpowiada tej z BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "Nie wskazano nazwy sesji po END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Wschód, Północ, Wysokość )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Głębokość koloru: %dbpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (kolor)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "SpodziewaÅ‚em siÄ™ daty, znalazÅ‚em “%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "wczytaj tylko sesje z tym prefiksem" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "drukuj i wyjdź (wymaga pliku 3d)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "ustaw Å›cieżkÄ™ plików wyjÅ›ciowych" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "wyÅ›wietl tylko krótkie podsumowanie (-qq pokaże tylko błędy)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "nie generuj pliku .err" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "traktuj ostrzeżenia jak błędy" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "zapisuj komunikaty do pliku dziennika" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "okreÅ›l wersjÄ™ formatu 3d na wyjÅ›ciu" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "Plik .espec z instrukcjami rozwiniÄ™cia" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "Współczynnik *UNITS musi być niezerowy" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Brak danych pomiarowych w pliku 3d “%sâ€" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "PatrzÄ…c na" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "O %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Wybierz plik terenu do wczytania" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Pliki terenu" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "Wybierz plik pomiarowy do wczytania" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Pliki Survex 3d" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Wszystkie pliki" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "Wszystkie pliki pomiarowe" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Pliki Survex svx" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "Pliki Compass DAT i MAK" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "Pliki CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "Pliki DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "Pliki EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "Pliki GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "HPGL dla plotterów" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "Pliki KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "Pliki PLT do użytku z Carto" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Pliki Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Pliki Survex pos" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "Pliki SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "Pliki JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Pliki dziennika" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "NarzÄ™dzie do wizualizacji danych pomiarowych" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Niniejszy program jest wolnym oprogramowaniem; możesz go rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez FundacjÄ™ Wolnego Oprogramowania - wedÅ‚ug wersji 2-giej tej Licencji lub którejÅ› z późniejszych wersji." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "PLIK1 PLIK2 [PRÓG]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "PLIK1 oraz PLIK2 mogÄ… być plikami .pos lub .3d\nPRÓG jest maksymalnÄ… wielkoÅ›ciÄ… przesuniÄ™cia w każdej z osi, która bÄ™dzie ignorowana (domyÅ›lnie: %s)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "WEJÅšCIOWY_PLIK_3D [WYJÅšCIOWY_PLIK_3D]" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "PLIK_ERR [JAK_WIELE]" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "[PLIK_POMIAROWY]" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Bez daty" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "Nie w pÄ™tli" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE nie może być pierwszÄ… wielkoÅ›ciÄ…" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE nie może być ostatniÄ… wielkoÅ›ciÄ…" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Brak NEWLINE w definicji przeplatanego formatu" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "Wartość “%s†musi poprzedzać NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE może nastÄ™pować tylko po STATION, DEPTH i COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "Nie można kalibrować równoczeÅ›nie wielkoÅ›ci kÄ…towych i liniowych" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "NieprawidÅ‚owe polecenie *alias" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "Dziennki błędów %s" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Eksport..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Au&toobrót\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Odwróć kierunki" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Na &północ" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Na &wschód" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Na poÅ‚u&dnie" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Na &zachód" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "Widok p&lanu" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Prze&krój" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "Przywróć do&myÅ›lny widok" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Widok" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elementy" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Format eksportu" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d stron (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Jedna strona" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azymut" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Nazwy punktów" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "nazwy punktów" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Krzyże" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "znaczników punktów" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Odcinki podziemne" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "odcinki podziemne" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Przekroje" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "przekroje" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Åšciany" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "Å›ciany" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Obrys korytarzy" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "obrys korytarzy" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "Zero na Å›rodku" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "zero na Å›rodku" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "PeÅ‚ne współrzÄ™dne" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "peÅ‚ne współrzÄ™dne" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "KÄ…t pochyÅ‚u" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Ramki" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Legenda" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Puste strony" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Nazwy punktów\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "Obrys korytar&zy\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "Te&ren" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Krzyże\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Siatka\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "&PudeÅ‚ko\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "Od&cinki podziemn\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "O&dcinki powierzchniowe\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "odcinki powierzchniowe" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "NakÅ‚ada&j nazwy" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "Ko&loruj wedÅ‚ug" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "PodÅ›wietl &otwory" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "PodÅ›wietl punkty &ustalone" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "PodÅ›wietl w&yeksportowane punkty" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Otwory" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "otwory" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Punkty ustalone" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "punkty ustalone" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Wyeksportowane punkty" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "wyeksportowane punkty" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Perspektyw&a" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "&Teksturuj Å›ciany" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Przyciemnij dalekie Ob&iekty" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "&WygÅ‚adzone odcinki pomiarowe" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "PeÅ‚ny &Ekran\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Koloruj po &GłębokoÅ›ci" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Koloruj po Da&cie" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "Koloruj po &Błędzie" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "Koloruj po Błędzie Po&ziomym" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "Koloruj po Błędzie &Pionowym" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "Koloruj po &Upadzie" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "Koloruj po &DÅ‚ugoÅ›ci" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "Koloruj po &Sesji" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Kompas" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "Kli&nometr" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "&ObjaÅ›nienie kolorów" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "&PodziaÅ‚ka liniowa" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Odwróć sens\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Anuluj pomiar dÅ‚ugoÅ›ci\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "&Wskaźniki" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: opcja “%s†jest niejednoznaczna\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: opcja “%c%s†nie pozwala na argument\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: opcja “--%s†nie pozwala na argument\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: opcja “%s†wymaga argumentu\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcja wymaga argumentu -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: nieznana opcja “--%sâ€\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: nieznana opcja “%c%sâ€\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: nieprawidÅ‚owa opcja -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nowa prezentacja" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "Otwórz &prezentacjÄ™..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "&Zapisz prezentacjÄ™" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Zap&isz prezentacjÄ™ jako..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Oznacz" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "O&dtwarzaj" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Eksportuj jako film..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "Eksportuj klip" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Wybierz nazwÄ™ pliku wyjÅ›ciowego" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Prezentacje Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Zapisz zrzut ekranu" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Wybierz prezentacjÄ™ do wczytania" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Błąd w formacie pliku prezentacji “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Pliki Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Pliki CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Prezentacja zmodyfikowana" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "Aktualna prezentacja byÅ‚a modyfikowana. Porzucić niezachowane zmiany?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Nie znaleziono pasujÄ…cych." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Szukaj" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Ukryj" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "Ukryj %d znalezionych punktów" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Wysokość" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Możesz przeglÄ…dać tylko jeden plik 3d" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "Panel &boczny" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, fuzzy, c-format msgid "%.2f E, %.2f N" msgstr "%.2f W, %.2f P" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Od %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Odlg %.2f%s, Az %03.1f%s, Upadzie %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Metryczne" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Stopni" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Procent" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr " mil" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr " mila" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr " stóp" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr " cali" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "&Ukryj kompas" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "&Ukryj klinometr" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "&Ukryj podziaÅ‚kÄ™ linowÄ…" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "&Ukryj objaÅ›nienie kolorów" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: H %.2f%s, Az %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Sesje pomiarowe" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Prezentacja" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Pokaż wszystko" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Ukryj inne" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Wschód" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Północ" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Otwórz...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Otwórz &Teren..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "&Pokaż dziennik" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Drukuj...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "&Ustawienia strony..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Zrzut ekranu..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Przekrój &RozwiniÄ™ty..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Eksportuj jako..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Eksportuj jako:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Eksport" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Informacje o systemie:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "PodglÄ…d wydruku" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Drukuj" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Drukuj..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Odcinki &powierzchniowe" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Edytuj punkt nawigacyjny" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr " (nieużywany w widoku perspektywy)" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Czas: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr " sekund (0 = auto, *6 = 6 razy auto)" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Ta wersja %s wymaga OpenGL, który jednak nie jest dostÄ™pny." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "Separator w nazwie sesji pomiarowej" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "punkt anonimowy" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "Nie można dokonać pomiaru pomiÄ™dzy dwoma anonimowymi punktami" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "Domiary &boczne" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "domiary boczne" #: ../src/mainfrm.cc:890 #: n:251 #, fuzzy msgid "&Duplicate Legs" msgstr "Duplicate Le&gs" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Ukryj" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Przyciemnij" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "Po&każ" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "OdczytujÄ™ dane - proszÄ™ czekać…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "Nie odnaleziono punktu %s" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "Nie odnaleziono odcinka %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Rozpoczynam od punktu %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "Rozwijam w lewo od punktu %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "Rozwijam w prawo od punktu %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "Rozwijam w lewo od odcinka %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "Rozwijam w prawo od odcinka %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "ÅamiÄ™ pÄ™tlÄ™ na punkcie %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "ÅamiÄ™ pÄ™tlÄ™ na odcinku %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Zamieniam kierunek rozwiniÄ™cia poczÄ…wszy od punktu %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Zamieniam kierunek rozwiniÄ™cia poczÄ…wszy od odcinka %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "StosujÄ™ specfile: “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "ZapisujÄ™ %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "posortuj po błędzie poziomym" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "posortuj po błędzie pionowym" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "posortuj po błędzie procentowym" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "posortuj po wielkoÅ›ci błędu na odcinek" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "zastÄ…p plik .err przesortowanÄ… wersjÄ…" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "Błąd podczas przetwarzania pliku .err" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "PrzesuniÄ™to o (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Dodano: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "UsuniÄ™to: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "Ponowne wejÅ›cie do wprowadzonego już pomiaru jest wycofywane z użycia" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Pierwotnie wprowadzono tutaj" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT jest wycofywany z użycia" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "przewiÅ„ plik i odczytaj go po raz drugi" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "pokaż daty pomiarów (jeÅ›li dostÄ™pne)" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "Błąd podczas inicjalizacji wejÅ›ciowego ukÅ‚adu współrzÄ™dnych “%sâ€" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "Błąd podczas inicjalizacji wyjÅ›ciowego ukÅ‚adu współrzednych “%sâ€" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "UkÅ‚ad współrzÄ™dnych" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "wygeneruj siatkÄ™ (domyÅ›lnie %sm)" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "wysokość czcionki nazw punktów (domyÅ›lnie %s)" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "rozmiar znacznika punktu (domyÅ›lnie %s)" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "wyjÅ›cie w formacie CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "wyjÅ›cie w formacie DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "wyjÅ›cie w formacie EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "wyjÅ›cie w formacie GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "wyjÅ›cie w formacie HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "wyjÅ›cie w formacie JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "wyjÅ›cie w formacie KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "wyjÅ›cie w formacie Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "wyjÅ›cie w formacie Survex POS" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "wyjÅ›cie w formacie Compass PLT dla programu Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "wyjÅ›cie w formacie SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "NieprawidÅ‚owy format pliku czcionki “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "znaleziono: %d" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Preferencje..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Rysuj obrys korytarza" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Oszacuj LRUDy metodÄ… heurystycznÄ…" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Oznacz punkty pomiarowe krzyżami" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "PodÅ›wietl punkty oznaczone jako otwory" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "PodÅ›wietl punkty o ustalonej pozycji" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "PodÅ›wietl wyeksportowane punkty pomiarowe" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Oznacz punkty pomiarowe ich nazwami" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Nazwy mogÄ… siÄ™ nakÅ‚adać (dziaÅ‚a szybciej)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Pokaż odcinki podziemne" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Pokaż odcinki powierzchniowe" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "Koloruj odcinki powierzchniowe po głębokoÅ›ci" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Rysuj odcinki powierzchniowe liniÄ… przerywanÄ…" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Rysuj siatkÄ™" #: n:362 #~ msgid "metric units" #~ msgstr "jednostkach metrycznych" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "jednostkach brytyjskich" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "stopniach (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "gradach" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Pokaż odlegÅ‚oÅ›ci w" #: n:367 #~ msgid "Display angles in" #~ msgstr "Pokaż kÄ…ty w" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Odwrotne kierunki obrotu" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Pokaż skalÄ™ liniowÄ…" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Pokaż skalÄ™ głębokoÅ›ci" #: n:371 #~ msgid "Display compass" #~ msgstr "Pokaż kompas" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Pokaż klinometr" #: n:373 #~ msgid "Display side panel" #~ msgstr "Pokaż panel boczny" survex-1.4.4/lib/pt.po0000644000175000017500000026164714205617674011562 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 22:05:08 +0000\n" "Last-Translator: Olly Betts \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Ficheiro" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotação" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientação" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Vista" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Comandos" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Ajuda" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "A&presentação" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Uso" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Memória insuficiente" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Memória insuficiente (são necesssários mais %lu bytes)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Memória insuficiente: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Para processar estes dados é necessária a versão %s (ou posterior) do Survex." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "alerta" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "erro" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "No arquivo incluído em %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix descontinuado - use *begin e *end em seu lugar" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Caractere “%c†não permitido em nome de base (use *SET NAMES para configurar os caracteres permitidos)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Campo não pode ser omitido" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "Esperava valor numérico, encontrei “%sâ€" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "Encontrei “%s†quando eram esperados “PRESERVEâ€, “TOUPPER†ou “TOLOWERâ€" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Erro no programa! Por favor, comunique aos autores" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Comando desconhecido “%sâ€" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "Base “%s†igualada a ela mesma" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "Azimute não pode ser omitido exceto em visadas em prumo" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Distância não pode ser omitido" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Final da linha não está em branco" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Há %d alerta(s)." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Falhou a execução do comando “%sâ€" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Erro ao ler o ficheiro" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Demasiados erros - desistindo" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT decontinuado - use *CALIBRATE/DATA/SD/UNITS com argumento DEFAULT em seu lugar" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Azimute fornecido numa visada vertical" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END sem o BEGIN correspondente neste ficheiro" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN sem o END correspondente neste ficheiro" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "Base “%s†não exportada da topo “%sâ€" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "“%s†não pode ser nome de base e de topografia ao mesmo tempo" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "Esperava um nome de base" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "Encontrado “%s†quando “EQUATESâ€, “EXPORTS†ou “PLUMBS†era esperado" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "Encontrado “%s†quando “ON†ou “OFF†eram esperados" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Apenas uma base para o comando EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Tipo de quantidade “%s†desconhecida" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unidade “%s†desconhecida" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 #, fuzzy msgid "Matching BEGIN command has no survey name" msgstr "O BEGIN correspondente não tem prefixo" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unidade “%s†inválida para tipo de quantidade" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Instrumento “%s†desconhecido" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Fator de escala tem que ser 1.0 para comando DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Fator de escala não pode ser zero" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Configuração “%s†desconhecida" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Classe de caracteres desconhecida: “%sâ€" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Nenhum dado topográfico" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Nome de arquivo “%s†referencia diretório ao invés de arquivo" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "Topografia não completamente conectada a bases posicionadas" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Base já posicionada ou com correspondência a uma base posicionada" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Não foi possível abrir arquivo de saída “%sâ€" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "Desvio-padrão deve ser positivo" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Visada com mesma base em ambas as pontas (“%sâ€) - erro de digitação?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Inclinação maior que %.f%s em valor absoluto" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Tentativa de igualar duas bases posicionadas em coordenadas diferentes: “%s†e “%sâ€" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Igualando duas bases posicionadas nas mesmas coordenadas: “%s†e “%sâ€" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Comando FIX sem coordenadas - atribuindo (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Base já posicionada nessas coordenadas" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, fuzzy, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Mais de um comando FIX sem coordenadas: “%sâ€" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT deve estar logo após um “*BEGIN â€" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Ano inválido (< 1900 or > 2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Azimute suspeito" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Distância negativa" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Mesma base posicionada duas vezes sem coordenadas" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Distância menor que mudança de profundidade" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Campo “%s†não é permitido em tipo de visada “%sâ€" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Faltam campos necessários ao tipo de visada “%sâ€" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Tipo de visada “%s†desconhecido" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "Base “%s†já foi exportada" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Campo “%s†duplicado" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG “%s†com problemas" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "Falta \"" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, fuzzy, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "Base “%s†utilizada apenas uma vez, e com um prefixo explícito - erro de digitação?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "As seguintes bases não estão conectadas a uma base posicionada:" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "Topografia sem bases posicionadas. Assim %s foi posicionada em (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Base posicionada não usada “%sâ€" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Coordenadas já calculadas - nenhum sistema de equações para resolver." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Resolvendo sistema de %d equações" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "Valor “%s†duplica valor(es) anterior(es)" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Resolvendo uma equação" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Distância ajustada negativa" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "A data é no futuro!" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "Data final do intervalo ocorre antes da data inicial" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Especificada secção cruzada numa base “%s†inexistente" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Valores de CLINO e BACKCLINO têm que ser do mesmo tipo" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Mês inválido" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Dia inválido" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "Esperando nome de topografia" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Impossível abrir ficheiro “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Não foi possível escrever no ficheiro “%sâ€" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Futuros usos deste recurso desaconselhado não serão reportados" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Ângulos de COMPASS e BACKCOMPASS diferem em %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Ângulos de CLINO e BACKCLINO diferem em %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "“*data %s %c …†obsoleto - use “*data %s …†no lugar" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Ficheiro de imagem 3d “%s†com problemas" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Data e hora não disponível." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Erro ao ler o ficheiro “%sâ€" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Erro escrevendo no arquivo “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Erro escrevendo em arquivo" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Há %d alerta(s) e %d erro(s) - nenhum arquivo de saída criado" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Arquivo “%s†tem um formato mais novo do que este programa consegue entender" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Norte" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Perfil em" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Planta" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "Pe&rfil" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Perfil" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Planta" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Calculando estatísticas" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "Esperando cadeia de caracteres" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "número de argumentos insuficiente" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "número de argumentos excessivo" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "FICHEIRO" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Removendo seqüências de ponta" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Concatenando seqüências" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Calculando seqüências" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Calculando seqüências de ponta" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Simplificando rede de visadas" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Calculando rede de visadas" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "Encontrado “%s†quando “F†ou “B†eram esperados" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Desenvolvimento linear das visadas = %7.2f%s (%7.2f%s corrigidos)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Desenvolvimento horizontal das visadas = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Desenvolvimento vertical das visadas = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Desnível = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensão Norte-Sul = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Extensão Leste-Oeste = %4.2f%s (de %s a %4.2f%s a %s a %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Há 1 loop." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Há %ld loops." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Tempo de CPU gasto %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Tempo gasto %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Tempo gasto não disponível" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Tempo gasto %5.2fs (tempo de CPU %5.2fs)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Desenvolvimento Original %6.2fm (%3d visadas), deslocado %6.2fm (%5.2fm/visada). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Erro %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Erro N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "exibir esta mensagem e sair" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "exibir número de versão e sair" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPÇÃO" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Escala" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Tente “%s --help†para mais informações.\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, fuzzy, c-format msgid "Processed: %s" msgstr "Processada em %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Perfil retificado" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "Topografia contém somente uma base," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "Topografia contém %ld bases," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " unidas por uma única visada." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " unidas por %ld visadas." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "nodo" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "nodos" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "Topografia tem %ld componentes interligados." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Guardar Registo" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argumento numérico “%s†fora dos limites" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "argumento “%s†não é um número inteiro" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "argumento “%s†não é um número" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "“DUPLICATEâ€, “SPLAY†ou “SURFACE†eram esperados" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "“NOTâ€, “DUPLICATEâ€, “SPLAY†ou “SURFACE†eram esperados" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "“F†ou “M†eram esperados" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "Base “%s†referenciada por *entrance ou *export mas nunca usada" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "Não há BEGIN correspondente" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 #, fuzzy msgid "Survey name doesn’t match BEGIN" msgstr "Prefixo não corresponde ao do BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 #, fuzzy msgid "Survey name omitted from END" msgstr "Prefixo omitido no END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Leste, Norte, Altura )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr "" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "Esperando data, encontrado “%sâ€" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 #, fuzzy msgid "only load the sub-survey with this prefix" msgstr "carregue apenas a sub-topografia com prefixo" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "Fator em *UNITS não pode ser zero" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Não há dados de topografia no ficheiro 3d “%sâ€" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Olhando para" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "Acerca de %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Escolha um arquivo de relevo de superfície para examinar" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Arquivos de relevo de superfície" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 #, fuzzy msgid "Select a survey file to view" msgstr "Selecione um arquivo 3d para ser visualizado" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Ficheiros de Survex 3d" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Todos os ficheiros" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 #, fuzzy msgid "Survex svx files" msgstr "Ficheiros de Survex svx" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "Ficheiros CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "Ficheiros DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "Ficheiros EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "Ficheiros GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "Ficheiros KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Ficheiros Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Ficheiros Survex pos" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "Ficheiros SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "Ficheiros JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Ficheiros de registo" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Ferramenta de visualização de Levantamento topográfico" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Este programa é um software de livre distribuição, que pode ser copiado e distribuído sob os termos da Licença Pública Geral GNU, conforme publicada pela Free Software Foundation, versão 2 da licença ou (a critério do autor) qualquer versão posterior." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Sem data" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE não pode ser o primeiro valor" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE não pode ser o último valor" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Valores em mais de uma linha sem NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "Valor “%s†deve estar antes do NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE só pode ser precedido por STATION, DEPTH e COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "Não é possível calibrar ângulos e comprimentos ao mesmo tempo" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Exportar..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Au&to-Rodar\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&Inverter Sentido" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Olhar para &Norte" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Olhar para &Leste" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Olhar para &Sul" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Olhar para &Oeste" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "&Planta" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Per&fil" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "&Restaurar Vista Predefinida" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Vista" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Elementos" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Formato para exportar" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d páginas (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Uma página" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azimute" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Nome de base" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Nomes de base" #: ../src/survexport.cc:141 #: n:475 #, fuzzy msgid "station labels" msgstr "nomes de base" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Marcas de base" #: ../src/survexport.cc:140 #: n:474 #, fuzzy msgid "station markers" msgstr "marcas de base" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Visadas Subterrâneas" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "visadas subterrâneas" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Secções cruzadas" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "secções cruzadas" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Parede" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "parede" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Passagem" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "passagem" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Grau de inclinação" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Margens da Página" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Legenda" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Páginas em branco" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Nomes de base\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "&Tubos de Passagem\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 #, fuzzy msgid "Terr&ain" msgstr "Terra&in" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Marcas de base\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Grade\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "Caixa &Barreira\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "&Visadas Subterrâneas\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Visadas de Super&fície\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "visadas de superfície" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "Nomes &Sobrepostos" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "Destacar &Entradas" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "Destacar Bases Fi&xadas" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "Destacar Bases Export&adas" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Entradas" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "entradas" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Bases Fixadas" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "bases fixadas" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Bases Exportadas" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "bases exportadas" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Pe&rspectiva" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "Parede Texturi&zadas" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Distância de desvanecimento de Ob&jectos" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Visadas S&uavizadas" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "Modo Ecrã &Completo\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Colorir de acordo com &Profundidade" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Colorir de acordo com &Data" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 #, fuzzy msgid "Colour by &Error" msgstr "Colorir de acordo com Err&os" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 #, fuzzy msgid "Colour by &Horizontal Error" msgstr "Colorir de acordo com Erros &Horizontal" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 #, fuzzy msgid "Colour by &Vertical Error" msgstr "Colorir de acordo com Erros &Vertical" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Bússola" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&Clinômetro" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "Barra de &Escala" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "&Inverter Sentido\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Cancelar linha de medida\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "I&ndicadores" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s: opção “%s†é ambígua\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s: opção “%c%s†não recebe nenhum argumento\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s: opção “--%s†não recebe nenhum argumento\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: opção “%s†requer um argumento\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opção requer um argumento -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s: a opção “--%s†é desconhecida\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s: a opção “%c%s†é desconhecida\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opção inválida -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nova Apresentação" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Abrir Apresentação..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "Guardar Apre&sentação" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "&Guardar Apresentação como..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Marcar" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "Reprodu&zir" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Exportar como Filme..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Escolha um nome de arquivo de saída" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Apresentações Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Guardar a Captura de Ecrã" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Escolha uma apresentação para abrir" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Erro no formato da apresentação “%sâ€" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Ficheiros Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Ficheiros CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Apresentação Modificada" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "A apresentação actual foi modificada. Abandonar as alterações não guardadas ?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Nada foi encontrado." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Procurar" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Esconder" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Altura" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Só é possível examinar um arquivo 3d de cada vez" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Painel lateral" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f L, %.2f N" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "De %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, fuzzy, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s: %s, Dist %.2f%s, Azim %03.1f%s, Gradient %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Métrico" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Graus" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "P&ercentagem" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "ft" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 #, fuzzy msgid "&Hide Compass" msgstr "&Esconder Bússola" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 #, fuzzy msgid "&Hide Clino" msgstr "&Esconder Clinômetro" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 #, fuzzy msgid "&Hide scale bar" msgstr "&Esconder Barra de escala" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s: H %.2f%s, Azim %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s: V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Topográficos" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Apresentação" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Mostrar tudo" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Ocultar outros" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Leste" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Norte" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Abrir...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Abrir &Terreno..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Mostrar &Registo" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Imprimir...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "Configuração de &Página..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Captura de Ecrã..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Perfil Retifica&do..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Exportar como..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Exportar como:" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Exportar" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Informação sobre o Sistema:" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Pré-visualização de Impressão" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Imprimir" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Imprimir..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Visadas de Super&fície" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Tempo: " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Esta versão de %s necessita que o OpenGL funcione, mas não está." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&Esconder" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Desvanecer" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 #, fuzzy msgid "&Dashed" msgstr "Das&hed" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Mostrar" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Lendo dados - por favor, aguarde…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "Falha ao procurar a base %s" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, fuzzy, c-format msgid "Failed to find leg %s → %s" msgstr "Não foi encontrada a visada %s → %s" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Começando a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, fuzzy, c-format msgid "Extending to the left from station %s" msgstr "Estendendo-se para a esquerda a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, fuzzy, c-format msgid "Extending to the right from station %s" msgstr "Estendendo-se para a direita a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, fuzzy, c-format msgid "Extending to the left from leg %s → %s" msgstr "A estender para a esquerda a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, fuzzy, c-format msgid "Extending to the right from leg %s → %s" msgstr "A estender para a direita a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "A terminar ciclo de levantamento na base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, fuzzy, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "A terminar ciclo de levantamento na visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, fuzzy, c-format msgid "Swapping extend direction from station %s" msgstr "A trocar direcção estendida a partir da base %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, fuzzy, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "A trocar a direcção da extensão a partir da visada %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "A aplicar ficheiro de especificações (specfile): “%sâ€" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Escrevendo %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "Não foi possível analisar arquivo de erros (.err)" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Movido por (%3.2f,%3.2f,%3.2f): %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Acrescentado: %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Removido: %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 #, fuzzy msgid "Reentering an existing survey is deprecated" msgstr "A re-utilização de um prefixo é desaconselhada" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Prefixo usado originalmente aqui" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT descontinuado" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Erro no formato do arquivo de fontes “%sâ€" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "Superfície Só&lida" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d bases encontradas" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Preferências..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Desenhar Paredes da Passagem" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Estimar leituras LRUD baseadas na heurística" #: n:350 #, fuzzy #~ msgid "Mark survey stations with crosses" #~ msgstr "Marcar as base com cruzes" #: n:351 #, fuzzy #~ msgid "Highlight stations marked as entrances" #~ msgstr "Realçar base marcadas como de entradas" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Realçar bases marcadas como pontos fixos" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Realçar bases que são exportadas" #: n:354 #, fuzzy #~ msgid "Mark survey stations with their names" #~ msgstr "Marcar base com os nomes delas" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Permitir que os nomes se sobreponham na apresentação (mais rápido)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #, fuzzy #~ msgid "Display underground survey legs" #~ msgstr "Apresenta as visadas subterrâneas" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #, fuzzy #~ msgid "Display surface survey legs" #~ msgstr "Apresentar as visadas de superfície" #: n:359 #, fuzzy #~ msgid "Colour surface surveys by depth" #~ msgstr "Colorir topográficos de superficie segundo a profundidade" #: n:360 #, fuzzy #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Desenhar visadas de superficie com linhas tracejadas" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Desenhar uma grelha" #: n:362 #~ msgid "metric units" #~ msgstr "unidades métricas" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "unidades imperiais" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "graus (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "ângulos" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Apresentar medidas em" #: n:367 #~ msgid "Display angles in" #~ msgstr "Apresentar ângulos em" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Inverter a direcção dos controlos do rato" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Apresentar Barra de escala" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Apresentar Barra de profundidade" #: n:371 #~ msgid "Display compass" #~ msgstr "Apresentar bússola" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Apresentar inclinómetro" #: n:373 #~ msgid "Display side panel" #~ msgstr "Apresentar painel lateral" survex-1.4.4/lib/icons/0000755000175000017500000000000014367067015011747 500000000000000survex-1.4.4/lib/icons/survey_tree.xpm0000644000175000017500000000067214141575516014776 00000000000000/* XPM */ static char *survey_tree_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #2759D8", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XX XXXXXXXXXXXX", "XX XXXXXXXX.XXX", "XX XX.XXX", "XX XXXXXXXX.XXX", "XX XXXXXXXXXXXX", "XX XXXXXXX..XXX", "XX XX.XXX", "XX XX XXXX..X.X", "XX XX XXXXXXXXX", "XX XX XXXXXXXXX", "XX XX X..XXX", "XX XXXXXXXX.XXX", "XX XXXXXXX..X.X", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/pres_stop.xpm0000644000175000017500000000067014141575516014436 00000000000000/* XPM */ static char *pres_stop_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXX XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX ....... XXX", "XXX XXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/tubes.xpm0000644000175000017500000000074114141575516013541 00000000000000/* XPM */ static char *tubes_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 6 1", " c #000000", ". c #474747", "X c #D3B637", "o c #F2CE41", "O c #848484", "+ c None", /* pixels */ "+++++++++++++++", "+++++++++++++++", "++++++ ++", "+++++ XXXXX ++", "++++ XXXXX o ++", "+++ XXXXX oo ++", "++ XXXXX ooo ++", "+ oooo ++", "+ .... oooo ++", "+ ... O ooo +++", "+ .. OO oo ++++", "+ . OOO o +++++", "+ OOOO ++++++", "+ +++++++", "+++++++++++++++" }; survex-1.4.4/lib/icons/defaults.xpm0000644000175000017500000000066714141575516014235 00000000000000/* XPM */ static char *defaults_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000084", ". c #848484", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXX XXX", "XX XXX XXXX .X", "XX X XXXXXXX X", "XX XXXXXXXX X", "XX XXXXXXX X", "XX XXXXX .X", "XXXXXXXXXXX. XX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/find.xpm0000644000175000017500000000070214141575516013334 00000000000000/* XPM */ static char *find_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 4 1", " c #000000", ". c #1094A5", "X c #FFFFFF", "o c None", /* pixels */ "ooooooooooooooo", "ooo ooooooooo", "oo XXX oooooooo", "o XXXXX ooooooo", "o XXXX. ooooooo", "o XXXX. ooooooo", "oo X.. ooooooo", "ooo oooooo", "ooooooo ooooo", "oooooooo oooo", "ooooooooo ooo", "oooooooooo oo", "ooooooooooo oo", "ooooooooooooooo", "ooooooooooooooo" }; survex-1.4.4/lib/icons/open_pres.xpm0000644000175000017500000000072614141575516014414 00000000000000/* XPM */ static char *open_pres_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 5 1", " c #000000", ". c #3FB205", "X c #4ACC00", "o c #FFFFFF", "O c None", /* pixels */ "OOOOOOOOOOOOOOO", "OOOOOOOOO OOO", "OOOOOOOO OOO O ", "OOOOOOOOOOOOO ", "O OOOOOOOO ", " XoX OOOO", " oXoXoXoXo OOOO", " XoXoXoXoX OOOO", " oXoX ", " XoX ......... ", " oX ......... O", " X ......... OO", " ......... OOO", " OOOO", "OOOOOOOOOOOOOOO" }; survex-1.4.4/lib/icons/Aven.iconset.zip0000644000175000017500000057647114213532000014750 00000000000000PK L‚nT Aven.iconset/UT ´.b´.bux èèPK K‚nTZ¹)}}Aven.iconset/icon_32x32.pngUT þ³.bþ³.bux èè‰PNG  IHDR szzô pHYs¼¼Ï$tEXtSoftwarewww.inkscape.org›î< IDATX…Å—LÔeÇ__î΃CóN5Y¦bŠ – fF¤cj557¤Uιj«Ö´–ÚïÔMÍ?Ђ¡™ÎàSÚü‘°Ôlnš á ‡ž÷îÓßC”´õÙž?îyžÏçõ~žçý‹Í6—ËEMÍIÊÊŠ‰‹kå£Tl6øé'¼YY4©*Ë\.öõ•m°XØZW§­zÆyþùérõêU¹kØíRX¸G&L°É… ZÎß#?N“ÑÈܾÀGDpöÝw¹ÙÖ¦:v IMMöööî`‡CdëV‘†9{ö¬$$XÄëíaµr ½'Ùh$Åf£¡¸¯ˆV@É̴ȉ'º±Û;V¤ªªKÿÒ¥)RUÕ™ÿÞ{8 –ôÂÖGD°)6–ïNŸÆ2{vW¿47ë±Ùl]NžÄÝuLó@T:E  ˆŽ†}ûÌlÚddèP±±½ƒNxã Ø±æÏ‡Aƒ´¾Ý»q\¹Â÷MM<8üstE`Ît¸ªžÒÊJ†GEa2›¡¢Â›o~Ep°‰ìì3 ÉÉ`6w‡WWÃìÙšÁæÎÕüsý:ääÐ|ó&+U•¹3¯ÃÃúÃ<{+k®_gj^§òóiq: DGG3|ø(ÆŒÑcµBBlÛâWjçNxúi˜aË pHYsóóÒé *tEXtSoftwarewww.inkscape.org›î<íIDATxœíy|U¶Ç¿…„B‚‚ Š@Q@Q‘aS„DD1ã óÐŸŠ£8¸ŽŒŽàŒòÇŒ¢#. #›(#‚¬  °CBBB’>ïÓKUuwRÕélßçSHuwÝ[÷œ{î¹g»P‹ZÔ¢µ¨E-jQ‹Ó®ªî@ DpÐÐóo¬á³|à¨ç:œ¨ôÞ9D-„FpÐè\œ4qðŒ}@°ø Xç¹vD²£µˆZ–€TÐu˜ãi«µ±JQø°šŠ#xY×^`0•<•†Ó™óšw B})6RS¡M8ÿ|8ïÞ–£ R‹" x È%ÈlŒŠBºtAž}Y¶ ÉÏGD"sed sæ >ˆ\qS¦døøOŸkÜ„ŠÛ€Á¾øbäå—‘={"G𲮜ä£;ïDš4)•r€¿¡R«a ðA·_?ä믷»òì*.F.DFBê×ÉyÀdà̪ÄšŠË€íX³Kdñâª%z¨+7yí5¤}ûŒpxˆ/ïàœêJà½ÀK4넘4 î»\ß>/6n„õëaëVÈÊ‚ÌL8~NžÔ+1êÔ&M eKHIQ%²}{8ûlç/°x1<÷,ZôãíÀ=Àœ?ùÔF} ËÌéÚùåg³qÕ*äñÇ‘+¯´¥´•zw’–†|ò rℳ~|û-Ò«WÐçº@r%mµÇÅÀF ƒär!ãÆ!……ö{ß>äé§‘Ö­+n„Œ­ 愾ú éÐ!è3wW9¬Sm ¸ x¨ë½‘œ o½7ß\ö33á™gà_ÿÒ=}(4nܘvíÚ‘’’BóæÍiРqqqÔ©S‡ÜÜ\ ÉÊÊ"33“-[¶°}ûvÜnwÈçuïO=×]gï%‹ŠàÅõ7æPÝ`н':¨¼eVtîŒüúkÙ³ª yâ $>>ølMII‘±cÇÊìÙ³eïÞ½âÇ—¥K—Êĉ¥k×®âr¹‚¶sýõöúë½¶nEºu Úç×1;©Niˆ|@î»O [Ö ®Yƒ´m8ˆuëÖ•1cÆÈŠ+Äív;&ziعs§üõ¯•–-[´[¯òê«ö™ ¨?^ X–g}‰AžªÅ¢W¿>òÁöoúôÀYŸ ãÇ—D”èÁP\\,3gΔóÏ??€† Còòì3¼yHbb|Å)Êñ¨˜3½pj*²e‹½{æ™ÀY?hÐ Ù³gO…ÞŠ“'OʤI“¤nݺ¦þtïŽ=jŸ Ö®EZ´x¯Ï˜J§Pâà¿Xˆ7r¤ýóì³V±[OÞ}÷Ýʤ¸ÈûïÜÞ²e‹´oßÞÔ·.]œI‚Œ ¤U«&øGЩBp p ËšùöÛöèý÷u[èý}³fÍdýúõLqV®éÝ[dóæ çååÉ€L<Ø™©ú×_‘æÍ˜`tU,RˆžG¾—jÓY¿ÞþÀìØa¶³7oÞ\¶oß^Ô6 ¨HäÉ'EZ´ùâ‹2¾Z$C† 1ЉbèUnëÕ31À1TzÖ8œ |Eäß~;rü¸³AéÓÇÿûÄÄDùñÇ#Nç X·NäÚkE¢£E&O¶õ“'NÈUW]e’t»w;{ß™3ƒî jnax‰øxdÊg!¢4ãs^ýõQ·¸Ý"/¼ Ò¨‘ˆ<ð€£ŸgffJÆ }}þÝ÷­·0Áoª„’¼€Eä_pjºNÁ:û»víñ½}6m¹ñF%<ˆôí«Ë€CLž<Ù×ïØX5S;yïýûÕìlÇ惘¤öÑ(”ïºùfäÈ‘ðˆŸ™‰DGûŸµ`Á‚rP¶ ¸Ý*æ›6õ?5U$ ¢ˆ.gu–¯ïáH¿¿ü%@ ´¯ÊÚ@_4bÖ×Ù¸8äŸÿ ðÞëÍ7ýÏkÙ²¥”””„EŒ2±y³È 7ø "Mšˆ|÷]¹ûàƒúúß»·ó÷?x©SÇÄÏW}C"x(Á@üV­ï¿/ñEtíô>3--­\ĉ7ÞiÖÌLüøx‘™3ËýèE‹ùúß RRâ| 41Àêª!sp4bù7Ý„:T~⋘ýèS§N-7AŒ(,,”…ýú‰¸\fâ»\"'F¤C‡™Æfÿ~çc0eŠi|Oh¢Hà: ÃËÅÆ"/¾Ù½NüÏŸ={vDˆâÅ]wÝ%qqqrgÛ¶’•àg€áÃUˆÜn·ÄÆÆúÞaófçc°lY€pqÕ\áîGý×¾Nµh|óMäï½.¿ÜßFzzzDˆ""ò÷¿ÿ]¢££ý»”-ä­Ö­E®¾ZäøñˆµSRRbjgÛ6çc°~}ÜVtTäiéŒôë‡8yâ‹ }ûúÛ™2eJDˆ2wî\©_¿¾uPåšîÝeo„ LÙÙÙ¦6v>60À„Ê&<Àåhb¤¯#ÑѺM G±±{g´ Þ^n‚lÚ´)À—Ÿ””$ãÆ““'O–ûùVÌ›7Ï×NÓ¦áÁܹ poeÞ<„EäŸ}vå„fÏšåo³Q£FRXX61Ž=*ݺu3 f—.]dÙ²ea?³,¤¥¥ùÚ80¼1˜0!€FTñÏæZ—ž=‘ììŠ'¾ˆŠLcàǬY³Â"„Ûí69iêׯ/=ô„õ<;8räˆ$%%ùÚœ1#¼1hÓ&€†Wñ’2\.ä‘G4¦2ˆï½†õ÷¡M›6a‰êñãÇûžÑ©S'Y¼x±ãg8Å£>êk31QÓÉ" þ+…Æ…ÆF7F,¨\Â{¯õëÍqs&LpDˆ3fH\\œÄÇÇKZZšäçç;£dX³fÔ©SÇ×çÇsþÞ'O"íÚU.Mʸâ V© â{¯‘#Êg´|öÙg¶ñí·ßJÓ¦M¥C‡2þüphé0Å 6mžöÿÇ?%~…1@GàcC.òðýZ•ÄQË¢1R&11Q–/_^*!víÚ%íÛ·—1cÆÈ±cÇÊARû8räˆtíÚÕD°O?uþ¾³f™£ŸŒ±Š`€Qhöª¯‘ 4ý¹ª o¼–/7+„ 2wîÜ „(((ÁƒWڬрŽ;šˆÿ¿ÿëü=?üP­ªÞgÄÄ(=*‚Ñj–­QÕ‹üPWzºy6¸\.yì±Çõk×ÊáÇ#CYøê«¯¤I“&¦q:Ô™ÄíÖ:Ö<ÆF"ÏíÐêW&‘ÿýöóðªêúðétèÐAV¬Xq–…}ûöÉèÑ£2†Fr¶t<¨„¶NÆ>}‰#ÏwPD~i×’%ÈYgØÀeÕªU‘¥rìß¿_&L˜ ‰‰‰¦ö£¢§žræ[¶ II |—~ý”ø‘d€xàekC;:O½®×Þ½È 7×”»uë&Ó§O—C‡EŒèEEE²`Á9r¤ÄÅÅ´Ù²¥V ±Û·[]½Æõ„døp?ñC1€Óìà ÙháDFŽ„×^Óâ 5ééðÈ#°kWàg±±±tïÞë®»Ž«®ºŠÔÔT5jdë¹………lÚ´‰U«V±dÉ-ZÄÁƒ¾øLœ¨E&ì`ß>5 .4ß?÷\<’,¥¥þùO8tÈ÷ç`–„ÖÙñ•TKL„×_‡á•bT¬x*#¿ôRpF0⬳΢eË–œ}öÙ$''§EHD„£G’MVV‡|NݺpûíðøãZQÄ.-Ò‰—í¿×\£WTTàoÂe€8´BÕ8ãÍ‹.‚Ù³¡];û®)()9s´NÀÂ…Zú%ÒèÐA ×]`S˜P\¬5 ž~Œ%aÐ ­c Á ¬¤ÁÖ¨Èïd¼9z4¼újÍù¥!:~û[½ŽÏ?‡¯¿†¥Kµèc8HNÖB×]7Ü È)¶o‡ÛnƒU«Ì÷/¼P `„CÒ`0K‘Â?ÿž}ÖyC5 ˆz;¦U?·mÓebß>ÈÉñWq¹”Øgž©E¡Z·†K.sÎ)_?ÒÓáž{´-/¢£¡woèÒÅyÁ+/Jc€ß¤Bå /¨ˆ|òIU\N74h 3¹{÷Êi¯ @•ÓXò{““á–[ E {ÏÉÍ…AŠ×Qüm{ÿS§ŽÿfQ‘–Y»ürøïí5^‹ð°q#\vY ñÛ·‡±cíçNUÖóó?+|¸ôÒ@1³a\y¥Š¥Ü\{©…}¼óŽŽùO?ùïÅÆB¿~ª›Ø•¾«W볎7Ýþ -abbàúëUù;ÓP¤Ôí†iÓT¡™3Ç^‡jQ:rrTÑ»ãóŒmÜÒÒ kW{Ï).†O?…yótÉö@€IhYú£ 9¡ð[<9d))º½HN†Nt¹{7ˆèssე[{ô€zõl¿o- Xµ úôåËÍ÷SS•)¬†P8v fÎÔj¦äÀWQF2(ñÏ=Wg}V–YüÿôLŸ®šs§Nák¦§Dt¿í60 ãâtoíµæs JÃŽðý>Àz 'A2ƒ3€‰‰Jä¤$=Á+f `þ|U»wW©Q‹Ð8p†U#ATÓ¼¹šyínE`Å ûÃÕûÀÍèùE›@gx³fj Œ;ì)-Z¯žŠ¬HìåÔ´™”¤^*£éË/uoÜ­›3ÑX°fîí—,1ß÷šs„<£4Çëz¿aƒév‘í-[.„d€ŽðäOüßÁƒðóÏдid,{^Ò¥—êqªFóç®]ºe,*Ro£ÝýpUÃhÎÝ¿ß?.TEÏÉ»ìÞ­KȦÛÛ€>@ÄöQ!»”7çz­Šùùº–=ªÁ‹±8$&Fí™™æ=qq±†_Í«khóæåo«"qè ¦ `4ç6k¦»ë’WV­‚> Øâ}\”®ê !`4 ýö£ž/²³UÌÅÄ(aÂuøˆÀ'ŸÀ?˜‰oľ}zàÓ¡CpõÕæÀ”ê‚¥KUäÿðƒù~—.ªà:ñŒ«>´l™iL ʽ‡[<;I>îhÉV¾Bæq-ãêC˖п¿. N±zµúª}q¹HHH ϸW4 U+jéÝÛy[·[8=dVÎ4@ó =/'G]ê{ö˜o£uþ?)oC¡4H@kÌÇdÁˆfš2ÃIœQQjëïÙÓ~”Jq1Lžì· ôïߟ»ï¾›† ²{÷n^zé%~ü1¸%sȘ:µj•D§ e!#CE¾%jg30=A¼ÂPª-Õ~†çÏA.˜\€F ÷2~7)I÷·vŒ:7ê ôìÙ“'žxÂôyaa!÷Þ{/ÛCÄ`7m û›¡²ñÕWÚ®“„ŒPQÞÂ…ÛßOQ«^NÐF!»+zÚ”Qçæù÷ 70ðé»99ðá‡0k–*Š¥aÇOãQQŒ;6àó¸¸8ÒÒÒ|·mk^ÿ÷íÓ=vÿþegðD ^^¿~fâ'%i_zôpFü“'u|ù¥‰ø%¨„D%J7µ¶|>T4Ü‹ÙÀEèD¾WغU“F–,1kÄFx=…mÚ´¡qãÆA¿Ó¹sgâ㵜mBüþ÷jR6âóÏÕ>1iRè¶"Œ UBŸ|ÒޚѶ­Š|» ^êÏâÂ=‰NÇ.ÜH"(ˆˆ.5Ü2ê¨eý}©¸úÄ Ý÷ÿë_BÍš±b_|ñ…ïÄíP~á…ê\²&­üò‹nKÃIZyçÝÖíïÞ„Œ¡C!Þa•ý}ûÔ~±y³éö^ :aªA…˜(ññtü»€µ.-g èqæ>=>*ʯL¥¤¤ðÊ+¯ÐÀ0•·oßθqãÈËË£NøÓŸÊø]»”Á,¶sš5ƒW^Q‰Qrr”aÒÓÍ÷7VÛC“&¥ÿ>6nTs¶e¥ûÝAe9bäŠî^óü™f ¯0|¥½KOì¶‹6¨í g°›6mÊ­·ÞJ‹-ؼy3éééä{”†+®Ðtj;(.ÖuvùòÀ]Á!ÊÁ¹j•*t¿þj¾Ÿš 7ÞèÜïávkØ›1ô˃iÀ(%J·²ŠÞÂÔè,ŒØŠžwé¬vÚÖHàEôÌ€2‘˜÷Ýç,pTìΛdÒ°!<ÿ¼¦X¹\~ÞÛgi|¼>œâùùº¿·0SZžý-çO¬X„b€Ÿñ+{÷»àOá?d`ÐÒž?º!0 !•кuÕâæ$JÖ·[­l‹VøèÓG÷ôO<¡–=#RRTówâ·÷"+K•=‹!l^÷CÐU1@àLÔÂçý¬« þ+êØbøj/ü§m_ üp‰õƒÖ­Õ‡¬8rD=leUöp¹ü< |Y·NÛ±Dí|‰.ŸÕ6ü5 >öü™4tyÖ,ÑÜ2o@ÓR g˜RÀ‹XT4>ƒVõ!5úö\šuë`Á‚à9ò‰‰êıZí ¸¾øB·¸x]¸¡æÝj‹` ð6ºXàRó¤÷³ah®™3€±.ÝÓ–-€)¨¨ô!1QÝ¿:D&ÑôÄ Ý‹‰•œ cÆØÉ7Âëÿ°è¹Àø'Qµ†IØy@ ·¬~è0›+ᄌYœ×4"¸µøÜ;Ç«ñí··wá n]@NIñßk×.<âïÜ©¦n ñ·¢²F•°Ûñ×,þmüÐ¥¢í6`áv*Ê(ëþGÊwFý<ô<»'1l•22´~ߢE*rË c”N8ë}ˆªóPëix$*¾×÷Ìà Ÿ}ìÒs|Mp©×ªê 4¢êÌX+ðœÀfû”î.ÇÏ^R¢ûê©S5»¨<0zôœ0@q±¦wYªn”  {3@S£`|ý¾€1œcr¨¹à¨K­Y= ¡šŠÚ >ölxQÔ dëP'É(ÓšZõÞ{w¦Ç܃hW·8|X½xÆ$4`æ”akdFƒ‘Fþ¿Âe#ÛÄ‹]ð”PÓ ¤pð °Qàe1”›-¼ƒ2Î4 ~ò­[U¬\é<™Ä©øå%þ>óÛ­E¥Ô ?ª!ˆŸòw“áþ 'qÁ·.HCÅ}7à9t›huÅÄ %g7 Œt 8FÍÓ=0¬±Þd’7Þ¦,v%€×…;kV@½™(Óï°ßjõ„—ÿû¡‡=*_aÕürÛ+]ð˜K‰•ŒVŸ©8 ÙKÅRy¼ ,CU 6 @-pÓ§ëÚl'ÀŽ(,Ô-žÅ…[Œ†lÝŽê*5Þ×ïo¸÷W„,W†ØàRC7|̨Ç_ ¬˜â`Y(BݨPK DZ½Z>ëÖ…ü-`f€`ààAe¨ŸÍñ¸Ьœ2«nÔ$xÀý³ "rÁ1—†]†ºD½ˆAïou:Ù]~E3e¾À³Ü\¿í HY~À¼X%ÀæÍº¤Xì+PɳØfßj ¢<ë¿Ñ_¡N —&]ƒj÷Öeá=àk â(^ÛÁ$ f×;Ôv°dI í ˜ðfᦧ,#ÓÐÝŽ9+ÿAÊÙÞ¬ýlÖ–)\ .Õ‚- =€þ&ÿ@)ÈC×fS®|q±2ÀÔ©fgUäçk®Å_€¦cÝCùMÝÕ·‰Ž‰ˆfŸVER¾1ôÃ{íâðqQ¨/ã–óx.¹DÏà3uíµHrrÀyA»yêA`œaÀW”ý‹ ë‡KàNýAaÀ•éÝi˜ˆÔ¯ò4M–a€ÕPüÉ0ÐU®ä4˜*P„¶ <#ÐÙ²ØËq¶!.7Zt¡†T$ˆ<ï¯/û•ËDQ¬Là½vxô;%¦ê á×ÁˆŸ‹ó¥æÔ€@WàºRÊþUå@t—2F`M)Œàø\ÔYÚ QLFâoÚˆØgÐ窺OÁ ÐAàYŸB0ÂIÑè";¸ A˜9öô„Àó†ÌhUÕ}* ¢Jñ,VFx] 9¥ >å b9u ÐD Ç0ˆ+ªý±Ñ¢ÛØÃ&X*6CÏkáEE¢çW{\diÈgñ§7D÷áZq™@˜‘ù• $y–þï g¯…Ô˜oÄ,Qólµ‡g×ð¼¥ÿ™çWußj âƒÌ¤Ib(U!ðhåÀilâé ÏLz\ Ø2kÅ\&¦ÚBà1K߬ Šmµ‚Ào<"Ô8'Íê©ÖðØ Œ}¯ªûTã p†ÀAöÛÄR*®ºÁ£Ø¾cé÷ðªîW„ÀíGƒ0Âr›¤š:Qêz–.£‹ù=ø¾‚!ÐBàã LàÕ¶ŸuâT+ ›h¼QŸYö¯j×KéšLwè-F5áˆ÷ù}Cÿ>¨êþÔxxÖ×¢1|îR˜Á{e ,uáŽuîTš")ð€¡/+ËþE-lCà<§%´§.ÔUèYŸ_,öCÃô-Vàýef¤Û©…¢vù?LX%ï€!ŠD9÷Š¿Hu¸ýˆ-°ÅÒF‰ø‹\Ô¢¢!ê±»H´Öðs¢VÆ6˜¡@`¶G2ØÖÚ=Òè QëŸõ™'DÃÑkáA•ië¢Å¢RNhÜÞ5hŽB0ä£ +óаuo^p"À™‚&j^‰f {¯€‡]§@>ß) Ñýz_·rê¡.·À'rº„xŸ*¨'p‡À—EÑ)áw‹î6.®êw©î¨V›`ÙëÆñuC J3úrгhE‘ï€ïÊY½ì´Aµg+D]Ò^¥0/ÊjQ‹ZÔ¢µ8ñÿóv%`¡IEND®B`‚PKL‚nT8yx¿)8 Aven.iconset/icon_512x512@2x.pngUT ´.b´.bux èèìýõW”ÏÿŒ/Ý  ( HH7¨ -Ò ÒÝÍ‚€€(©tJww-%"©t7¨t÷îw–×çý=÷?pÿvï9=ëî53Ïy>13×µªÊ²¸4¸„@^Nú ‚AþÁÆAiÙƒÁ_8Nr:®e&òŠB/ø„ÚMFÛMÝÑÂÍÓÄÅâééÉií`ëjfâdÎéèb™º'F<„ÈK?ë•¶³à饡ÑÜw¸/Ÿ"U4Z"5Nñäu„÷‰€Z83yšÚSÞ(÷Ë…ZãjÄì÷˜Â†Ëiý}‚ýd›í=nƒ8:iõ>=ºl™ËpÀˆÄÖ¹wƹ|×à»Û½¡þ~Ã}C_b’ÿïõÿú+BíÑ6„¼L¿½ÆiçĬÿºl Þ}n ¯žöwY"ªfP ,6ÈßkIMáõc·¬#x4¼ŒG•DîußИ²ÒÑçg,Zi†ØÂ‚×ÜÜÖÙ# õ´Óøv¨;]iii²©ûæA>RJó¹íÌ1ýòe/%*ž›6ìn¿4&«<ŒÜEŒ@lƒöU»¥¤×ÃI‰" ÿ‰êøýºD ÆýÇ“çÙc\§¡@÷kÉÿ¤‘)” )…ÿ:ü V%…·L5Ÿ —Ò|Üa'x° ¿rú»ÿèók±b`ø•‡>ù£¢„àÝÚÞ<} âxÍiàäq»]gÙ=¡Z ,‰î]½‡ ¤ÚÿwÅ/i!©ó óFN©#ìPÐüè„|˜ºHIpiá‹+d[c¾{[oÍ€SÌÑh;z)€YÚ€ÿ˜á¨cr9VZÍÓ“F0e•[3È£{7¾‚ÀŒŸ`TŽð| gâä‡HKK3-2­ìídº¡+cþKe&¶¢¬ &êm”Åýøôe„œ©*šøÜ{Nêó´Ñ,^§{ªC|±rýä¨ìÎJAh§Ïö´_’Ć«ý÷)f !«‘Ny(Ř4C¬öS´MHMQ A~„4ÓÁ=Ó¦DÕE1â RÂoÛ•B6Q\ϧ¶¤ª¬HpÈÿëÖ= ÇÆ>æÍ=ûi!Ñ ¼F T,M\»gJL Ï”î¦8‚âsбS<ÊèÓ_ÿÍ@Ô+ƒås)ɬl{r’Éy‹÷9AÏ7ÃÑïFBZ^ »”rÌbßÛëÿ±’Ý8Öù‰0ê]D×§Þ­1ßN¡N|® —³Ó µEÿ„¹‰Ú ú´®zª+oQ9û”næ¨-IbgCæxùöÞ‰ƒOüWRÂoÙ³$Ž*n¥™ÞÔ£¬ :¥bß›ùN"¯xw9ÒQcÈ•$I¬Õì{QC'>‡ÐÀ‰»Ü`rÖÀ*Çr@ÿ.ÿ’‚ýÅëŸ\P‚JK¢õ-úŸ}ÃéºL?Ò©É”œ@ï@Ëû²Líw±‰ó¢Ak@ÕÊ1‡½©:^ˆ’œ¬ZÜ[ðò+›jöûëÖç§A#ccÙ.æçÏÄiŸ!j‰;¹Ê^ÞGmñh²èŒ¢­´O½“¤¯w¸ý ­÷o¹ö¹ö˜n¥°w©óæ%·Ýn”®¥ùÑ+Î\9-)§ÿ濾¦¡ÏêŠ:ˆ¤.*R­ /Ûf>å·m–øL£Z2©"9ò£Ry›hDt[¨–5&Ñó`éèh¹eyÎÑíùêðëe~cô½w($»à¯. ÃÒaÉ“ÏIÕ.F³:GJL^žWyØË½®V¦¶õìJá?¸=/'¼½™s\èJ-Sÿ©vH”(”žo-ªŒœØ rÔa¬=ÌY*Ë_óŸR5£Õy%;vVóÓJ¶“µÊ,ÏîbƒÄƒ -ÉÛF~rëûͧ1>uò£I@N²Âåpî‚Jj¨àD†XW¥`“м‡Årɡۭ”" Oö9T1ɶE½q43Þx}îm’íþBøÓDcÚ+ˆ% þczIêôØau©KHA¿PKYÇÅEßܲEôê‘øã/]/.Vñ.n\/vxÏ/]¦Ž%-£¸:• ¾B›%y±Ž}¢B=ýBJpùyÖWçØÏŸ"B¿FúÉ¥O·ß’àâ-ÀQéípŸê®§`\Ÿé(hcÀЗuŒSœïÅ&å"¡UÎé–PðÐÑž–Iއ'Ë@ÔjìU¼DëŸv5ú=.€d‘ÁR%~ TT˜­Q„ä—±wõÒé*r ²Ì·ýð¹jÛHA&!­h‹T5ásrúÝE‚Z;lв&¾•#Š‘]?Ê…O5áIêw9"TÔÙøq„g3áBvE»‹˜6;oïÉ÷ÕW7>4M’¤ßr&’{ËãG}…rù]GZñÏH6èóN †Dͪâ¡ÿ‹j™¾±wÒ0z/œT5U é¬Õ›Û’Ðï¦Ê7WŠÁ}ï$ж¾îwÇ&r;ÅyÂyÌÜû–ÔÙÄi^ n»¸·i.NüØžº]ã ¦ûV²,xN­»cs“<f u¿+Ôž â=¹ŽN)Úµ§Ï1v/lìÏN|Ø—>ÝmàöhEH ¦á°ké²|¼ÏÄâ܇³Wù™Tü¿ï&L6¶¨í–kÛÎS5»»Ž'²š¥Ë1•ÕXtÖZs»³•êš§?9ð€0õAv>t–½ËßiU‚FÊF¹iŒÝ™™Ñ,}ïÇ\?¹ÓÄ.ë´LгqÛÓ´žÓ•꘥?©üäéL0ó÷xîx£ê+þ<ö A¡]ZoÏa_w^bóï\#¦jøµÑy!l½ŸÛ_dgÞ:ýIŒD'?ê"äŒÊ’„•â.QwÖ!/ƒâKƒ/8D¯—s;̶ù"Lö  0ßý¦«õmé ø0[t1;Þa—·w­aîE!èå²6àC)æ‰MòˆÃ>½’Øýö`ùx}^ãY¾éö5c;¬ :¬Éû 9’»ænÜY÷¾={tVU¡Ú)>Ý­•Xià'0 Ýkì<_tU ÊS(#Ãx²7(Xa—rè8*œ@ÿm‘°ðhIbI±FÙX¸œ¼ÿu™-ºbÒòÑ“§µÊäc„vT´Ç2þ‡VW>Ë ‘š5„¤J_Ù[6n±Ëtu@Wåfª{ŸMP?ÝÇõÐfùhíØ Cß~È–s—G'|èÍT[á)¹Læg8÷i&Ô)31üªõTL^¥AÙoEKÐaù¨ãñûyÄ£»<6Äö¬]2~¸ ¤ðömá”ÖíÕó`ÌIkéž®vnÛ[ÌÖÓ_;©€MÆe}F©ž´»ª‹Õ ó"ücAËD£[ç¢pã{RËæƒTáÇ{Fã+í†a¥AÜ4/²2lâ—ÿµ6lÞxœ½f3×’ËÔ¸ŒÚ¸qïÏô/‘Ïá=Íþ×Ë·ç&ãO¨x1.:EÔ“‰æ‰†á¼¾K¹ß:Ì+]¬ˆÜjó…üè%^­•Iú+é÷VKI‚D†Þ‹^hõŽ Êä¼›héTŒ#wóϚΨØü]˜!ßF㢛> ý1X«ÌÈpø- ²è?U†ŸÄÝiÿäÉ æš…6VlO2¢?~É£ìaÀQ™@e†ëÖ/K5®`ÊE”áÉ0iÚÍa65 p{rzù°Á_.4Ž¡I{u×ϸ¬VL·JBR~Û®L8:¦Ôåˆ&Ó¯R4FÙ®š‘®)#½‚g‚Ú´Ò«ñwá|ìŠr æ\ùË(çÕÁ–d·†Öódž»oQPv&;hÀ’žÅd:¦ÿP$9 u¨í+ÅËÍÿGÇbæA²©eÁ_4ÓE¦:ºø§¬V¹ª¬û=Ó–¸ºKup®Ã¥$¸Ñúw4מ’²Ü…åÒýs þ2ÓöÃ<µœ-kK™ W‘rN~§bçZ/Ö7t žUQ{šÂ:‚Ä¿ë0-ß}K¸z)E±ýP¶äÍãÆ[‹5úº¦Ìpô©Å6n‡ø÷7é(ä`(%Ω#í¸ä÷-cï{ýà H:=œ?KãormçÍ-†CÓ^Üëe®ÎÍ¡Ik¿üóëfwbœ )ÃQd®è,d¥»ÇäL”Ý;£â³µHãõ9Û :\3à5¾: Ñ£8 <]fß~Húà.¿nÆ›`ìRî ƒ9J÷½nœ…vù¶™àºíóât?Ù+ùëçÐn舌 œïáüÇêiï–3n¿¾KËë)ÖöÝ Juü°þ$3ƒ‡Ç^È”QØ£—ËÇ#ec´{Ó°­Q8Äý®5)fõ<ÎÉç¯Ùø)ZIèüˆyxJǶޏFcàS£’±0®¡Dê O>g¸£ìˆ½§ËîYùî1qÿ~cdø‘¦6("ŸKà cÉpŠÆÚY´Ogþ'¦¯~Íi\æ|/â²)¹o¯Q÷0÷º9DŸJŸz¨5®â"ÖYí]3Ç}ð·`¥e¿tLzAy9–3Ó̈œ°Xé·hžžëvÛǦáß^uJ³7à¤:sõ •fa¾>}„çŽsõ´7W°ŽÝ´ËK,DÃååÞátÚÇ„õOsóhoš_`#[ïÜ×cÙL3Á§ªÖ†B .„OO7uså %S‹z—‡{äÆä£0¹Æß¿ç]á4ÞĹÓ.ÁV{±X®—D~‡½*™ ”зå;4hX)¨}´Xez-²xLÎ¥z[4(/úÎv'­¿}#nx¾¼ic¾‹º!­ö‚›8©÷¸ •ñUãF?iÇdy¨L$ádWè^“_„½ŽNL¼kål­³/¡œß\óD: ÷;¹yxF9ªæb!ïäà{r`—*J¡¾û¡-{ï¿oó‘Ê{q•ºÎ¥»¾wd{pS¨wnüry=~¥v¬¶Aªõçˆg &QÔÜ+Ø})¨q¼;qÝ]ŸÓ°×Q•Ê‚CJÌ<§ŒDoúÂêlB ³|IâsçbÛoW×ßY->˜móØ]þÄ›à„¤üå¥4ðyð<Î}g ´½Ü@PU"w‰îõ›èB2+Í=Æ)ä…Ó˜ÒÁA·HùÓ‘ Ã+5M)âz-û#´®Ÿl1Ýv°iE¤â™'#˜HAyCsé*Yá{ÉÑßÅïgÚÒ’&!™”èw ìëä󮯱+{Oÿ˜¤K¿¶éƼXFó C¤{ÎÓBcã¬Æ±›Ý‚†Óú~~-#“·Þ™ÅÇ"_§»Œ`Ô l ´, –[/DÎðó)TÏ‚U¡í‡+6s÷ ¡ J¨Lg7—Õ’ö)¾Œ®¿‰‹ÏÖ`ŸÂ.Γå/õþ/ìc`}T‹¿3ª dI+ö÷f}_JtàøpHHV;.~¥ê»çœ©°sµ'êumŸ$ôkawJÍo5ÑfBŸ1KOPK—–Xl®¡Û,º3'º9_*mú“¨ÎÀÈ7"wÐBœ‡¢‚¢¥‡…£5”²WŽÐ±Ôa‰5::Bê :×­œÓ Êì|N8ƒDÜKÉäåí¦!DØ#x¡¡“Ö ›öó¢‡ ·&ïï,îûMªù8Ä’6¸d_· Óx¹}º4á†÷Áa·ÇÓO÷·<¶)#4äå~²:­„–§`n¦‘é´ÑÀ/UT¤œ«ÜS§ÑõÃl1‘¾_zH¦ Ã{ú syw!rË»X»(ïС £ÂÁàz*üµ{­û¼³‘Døù„ÖY‡zñÁ¿1•Ãf÷è®tå+rA0¢²F¼ÃåÑUn3qXþ^}Ãfˆ¦õyðÀ_¨}áÛØò´­}ô}5õ[¥ôSÍu·ÛÌ/Né³ø‘K]$¿!IÑ·2ÊÓù‹Åg”ɆzõËm7<†[ÃüN·_ä}ôxÌÒ2u=Àµ¶;o-¼Ú`ãü>0Ôkû»îNþ‡UÛV†õåµç2Ö—CW1šü|§ª£QqœíiÏ}Ñ{û7LJ?¿TA• ßj~ ò<𪱜C4í¹—²iTC‡¤³, îÈÕ1ÖlrcbÕO·JÚE¤‹~QÆGè.A÷.¦*ºªE¦e)‚žô©3ˆòbB#Û©ÕÓÝmMgíÃ×:zAìȋਣ¡6®#¶+v¹’•íºŽü>û”gŠßoûùÕµƒK½`ßÇ£\M÷)¾µ}ŒzŠ…\n ¹!œþtª0=ÑÀeø<èVÆŒab¶nÏÁ¢ûÙ$ô+[áDuÞµøÕ Öõ’õ„Ê6 ! ™îP~­ƒÀˆ’E.h@s—ˆgÃn1´5ªÄžQ~ŒxI¹vú/41Åq¬U´š÷{Ì€ñ8’kÚ§!YfÐr°×BTáç}=%ÏÊFßx "öö„ÞKêQgÚ`zÛkÂðÖ¹J¯ü¥¥eÉÛgZòò{çv{ú×K¾ Û‡œíÓpþ7?ip¿¼½ M†‰ìp)v•¶ÍPoãuyU¼Gõü¢ãQ;¢Ÿ÷ºög¿sTFæl£8˜ßìÃÜ诫Sµºø|Ï‘ßVÆn${ÒÏTÊfDçxátóª„7EÿÝdÓø6õ¬oYüqoálŸ€M ¬xµÎõTŸÚ¤À2)r©ÌdÂl%° j°K¾ 5› Š€¾úp;¢—÷æ¶–‡wáCÐååÙ>›»æ²ûžbVè'æHQøþ‹Ip‰ì4ÂOèÕ¥Y=½®¬ U;EäýfIà§\çˆ5ƒ–Ò1à%Ì‹´«¾²i002¤`ËÈPîýHÑÿãÇCðÆÉ‰ÛÏ< Z7Xµö–ÍÚþþý››¿IiÏÊ \hñD\œ–´L·xrA.//w¦«‚ÓE=«Ý·5ë—àkS¢;‡Kg»s”ˆí©wæéž/–ÚUÛ[‰yý}ܸF8]Û/2¤–L OèçHË{Ø(hP’˜(h“ `öy—H÷¸‹Z“àÔ ÉãOÌð_ ))¯šÝ‹ Z’““ß™›Ç&'˦á/oðÛŒƒ6ÇÆÌΧ÷†RkLº1ì¦aW§Ûýfkß?—ê5Dܨt^{5YªÓÝì¾} 6"â ?ðÓ%~ø¾ƒ*ãÃ{v3¨çKD*â½½“Ö¯í÷b‰Ê‚™pïøj¶1°Pû೘T<–4ãt&8%ñ_†Ù¬Ò³‚×x™^â‚ûpmЩoÀ@ñÙMÇ€†âÒÒìhÇ}ÏvLNÿMø JˆÕŽ? OÓ­èl$ÉjÚFßõY°k+S…µJF˜|NtGBJöjRŒ€4š^x­`êÏ€ùì cÉ £{o?W:†®žÌcn5[ËÚGçûôó}AfQÑT³hñ„»Ÿ¶gõm¾çÕ.¯%7® \FÃ[™Ðá)#èÐÑÆë“'•Q”rîÛ]âç°º©¨§)¦oL¥=ï êì'³\†C—=ñSµoH ÝôA„fþ©&$ÏN‡JL[ÎXÖHe0£DØ>¥žabû;GXXx}}Ýi§ªïwµ¹€Ü djÝ­Ì–kF$Ì~}“yª[~º=¥'‹÷I³l>G<]T%Ö|`ù_‰É¡é6ÓcŒ.ؽ퇇w¾/¢ö5ÌUŠD ØˆþÕç÷õöeñ=‰ÖcËgs&ý¤ÛLUììÛ}ýÊÊ„ösõy¯>ÓLV½ë¨³‚Oã ©nO–ÕDQŒ‰xz|Ô,+gª‡T`^þ!Dß7ù¹ã*†"þ<¾*BÒòãaWÏÂ’·Uʤ’ œîdˆ"uÐTFm-Ÿ²Äå;¹]¡Ëõø¢Ò-%TËÝÙºÁLÉL‹g¾gv Ou^¨Åjrг S—7ã'ðo¼J9~Zâv¼ S»ö‡ˆ|ÄÄu­,¸çþ]J½ñA{$%ö)-Õsiwï“•†û»›´ywJ1„ßCÏoQ‹5J~—ˆŠ¸ý‘º>Ûþ›O諘>7œ.š,èHWc9b’ù©veàÍß¶ö³GCmS„°ÍQ¥´ýØØÞËÒ‡^ï‹û–Ž…ØÓ; rO‹È‰ÝYÆ×%¤ÜÇØü7áªWŸIu æu(ã)á%5ò-* zXh XâÚNÄsOÑÃC ;†³TÉÄä=ôæÙX¾’ÙÑz?hûáŠ6Ÿ#!.èöï]:S†›c ¥s:90êXW‘À¡ä9£:ô#žâ™¨cÿD…2Q¢ÇA4ÐI‡¸nj³T5:›!ipXøó;oãçך(¦gS僩‚Ñ8dÌÜ7^í—›÷·å,šÝƒ 2=>kW©icC¯ïßgV:fº§T*}ßå¨í‘½Ó²%‚ø1´Lúû#¶é‡æÚ-í%ÄIœ~ÑÓM‘cÓ(–Wÿ;[Çn™é/ ££3Ëd¬YªÝ¹ÞŸ,äÌÀk9üÎæaÅ^öúërÖòfêš¶©Y'êÅíþJIEi|È®úrÌsòù{Ed޲ÁÈ`îH©˜ŒSÑ–ŸSÄ`>þ8í–I‘(/¯0âæ¸é  ïïx™ù@B]“³)ÈÍÖë½–O´¢ òñÌU¶SœÛríÂ+è^›ÔâQæÖ× ÖÛ5#º,8s‚Ì0è'Wô$$¼! ú;D‚Ñwꃫí¬ÔÚ¼´y/ÆÖÓwR(ŸÕhàÞB‹ë¢÷–ówj˘oz_IÍ1003ÄSA0cRS0–1ʶ“¥‡Òë?îqîœîÌŒ)()ñ#8”¾rEŸïÔœíçDè¬M”Z#t/¾^Q~¸ 9~V^ß ˆ¹ŽµÒ|øÊkçÙ­aùJûYôDC\^K]a[ø„b¶Ë[¢^u‹—Íej¿Þý€OÝ5šýr¦ÉµÀ=-g²Kì’é «Y:Ó³2CJ}ˆB‚6‹ð·Ç0aæöê½b{âñŰç1˜¨-qz?rÛ%‰Æk¿¶œáñì¼S“eæå×slûŠ‚†©Úîç½-ÄTo=Æœáó•zã\o?gA»U˜æAó‰­ÎF‡E^±Å£sB«ûϯIù¨?’°d© ÷m䢪œiOú×¹^À;ºõn”÷úèlïJЃҦÅC‡…UXéFæ›åñæ Ù {ôñ"4Ç6 –L;Ð{o:±î› .U}»ôMJÜ4Œž¾_Tyw—]Bó¢ýÁ3LR”û/ 6mœz4JK(¼æZLŽïòP%æ>ŠùÌhA´{\¿3ƒ¾÷c»%‡ôuJŽ^~”€JBä¶«Ò£eå,ìkï®b—ÚNõ\›mM ;ÐüÇe€Œ}¢%® µTU—#Â;æÿÜFCO~‚à U7ï t¼>_”.38 á¯†Ò>ÈÞD¡7ÖŒDºTŒVÙÒ~øxÈŽËÏîqË×gzf)¸”IÛ«Í\€6t=_ðTÏ{M¢Œ³[RѾ:…ó:¶_2gléôáè58pÛçæ!ƒœ*ØòÙÂr°Rù(rsYÍ9¹N#wcCÔŠ2ŽÔ3ìn©·yz,8í ëˆ9Dzør\çþlj£/‰~åÊ“†\ÂÁÀÂç;Ò‰$.`"¯§gkƒ<ƒ·™"Š*‰1ñ¢Í{ û¥<£Ý‰;0LÏ-ãÅ;áq*ÂBûèæ ÇÖ%I7‡‚ÇTˆ†×;€Lሣ—1UM°÷BÜž'‹¸³õÑz¦¹§Uú¤ù°•ê[ƒ©ÍËo÷£ƒ>ˆ3uýîMÈMøÄ–¶Çñ.jF<[A‘Èe¢çh ëF-‚²ß§«®—º÷&å 45ïc|óÜ_œT“fR »=›w®¤[d¸¢XgÌ^91d¿ógj4qßσÜãº}ðñTÞ¼«'ZÄ—›Vhä$g;³êÂÉçO@\Û–;+p™é¼~+¸äÇëØvz¥ä˜‘ôI­ý\BIyóG µ«ífx¶ådkm)[á"i^ Èjægæ–/¯ÏÎæžÍ [ጣ}×ÃBúôˆöÆ­éRÏ)‚’7o0 ºØ9ë—ª„芩ö£Dw å+o¼lÍSHôa ¥gVNûÃoý»ç¦mcªX‘ºuʰÚ¡¼®Ûþ "Àÿzª‹k » àNýkö2'êQ†a]ë5§~€pÈÉCÝ"oº›¿*Óf Km&ŠÅNF_âÓŠ|ÑÚG‹m=YJ ôñãÇ¡x÷Tß’§²ï;¯eø7ÐHÝhå|¸ž“4Ã,5rLß´TÆ€ÐëaEøD„£OEHqŽ"Å#c‰FŠ5€JÆ ÖspV@˜éDÓ‰{]ý-(2lkv''‰øVÑ~õѶ¼é‘äͨÈO.ÜÐ墂e"h¥r\£Ç^ørÛyiüÍ Ä2Ãêsàô|¼š´t€’¤1'JòMA.¬›¨ûâ0åFöãÖs¼JürdpðÝÉŸ_ë››6G\q>ë®Ád^j;*kkëIgÂc Ö Ȥìr Zn!å­¿EúG˜Ð*V*{ʤžRRÄÒç¡q¡B1ß mŒ2­ç½c -+ 4ú_Yo3u”ÊFÓ)¦ ÅöÒ–%!¡}ñÈÅÅ¥ñæh ’ŠvÅg÷ÜnŸ}ñ©‰ rP"¬ÂÔœÍØ(÷8k•ÉÌƒŽƒžÁ4מªe#«Ñ©ÂŒ–üøö ¯ÉÑ»´JéWÎÏô=iñéú¿-êŠyô’ŠÏŠ˜‚íme#ëbͲ×û‹mò f@ÞïÌ5Œˆüi=§{[Žo?§ *?›8Í·Ü—ÉxQl›ORD‹ }Yu!)홨|ÐÑÜAÉ0’¿Ýw¹Ö*µJgð¢Ó÷åh=‰é¿ d/Ðï9f@À€²ÁdzüøW»¿/gã2ªÅPJ/°°¥Œ·ƒëýªy5QµqB—wj²ý¼“†D†TÆ!ÊÝü(¦®–9Èq9;´+Q¬fiŸÖÙ4Y^—wW¸{6·’lYª~£êç|Þ•¨û£¸ø‚H”œél%Š©Û„’…ó”¾+¨ÇŽqç{ŒIç‹£wV£ݺj³ a.ÆWnÛL’¿ V¨­æ´LqÈEÞƒ¾å„›L¤$¡íúÂzº¤Í!I$ŽE´¸Ì´ÍBÙo=&Ž!7*:ñ1r%‚eþ;5õ3_vQìå-.]8,Üæ?ÉqqqÁ@{Zö_("ë–ɹÎqßA1e]³µ7|-È ñsâÚ{eЬ% ^”bÞËGTÜ0Ž¥ƒ9¥ï ŠÆk‡mrIÏ_2”‡ý,™N³Ö:²$òŠ%š:–ôlß3) Š"&B) Ä=V0ÝóÏ©$ælB·©WŽ›¾:u&Êï™è ,Ÿ|L¡ÄW´ ”Ö¬·§ÿ¼â™W¼3Øhø¾þx;r9ʦUž&èwá¤"ý‰œÒw±Ò$C+ûýVSj^ÆyC‡N[,0ú>hX„'/²c.}g³5êØ6Îöo# +:¢Óì>B¹hŸ#ÐtKXHEi 9ÓúÞTö³Rœ|vVéLþAs„4N©‡5,úDÆ«Ḧ|”3Õm ¼:sß*¡sú%s°™4ïõXP0Y×€ºe/ÕÒEÂëg|6(þŒõ‰o2&¬`~J§ÜVÃ^l —óûGØŠýÐR”*öÕyôï'º©m×òå‰úŸQ”zûeU€^€‹4JÜÉc{NŽö†<·”=—è—CÈŒ÷ôåj†4qž®¼Çã4>ý71©0þ c0M£T†Wûåá—hG”ÄeM ô8¤”ªúúÞ·Þî)À­âõ½+"êoýÐZ»E|JC*½xÄvEG5¯…Õ—é#®‘6Ö“¿h-M3ªoâRÓ£hïÿé—”*Ñ,Ó®µ"Iq¯Ž:ÊAÀ)9[ð?®þƒ4.7]Ùx¶‘¼äDÅÔ {BŽúÁ´€Ž›¤ñ}`é›…YÚ_cåéîqÚØ[™D‘”z,ÎoÞ¼¹Ø’Dô/wË+Oš‡ï Rn°¯2?…ÅŒ—çv6O3HLHøþU˰±Í7™×2Êý¤Nã±ãm‘®®ìŒ¥ÜùZ—MŒä* ~@pû˜’¤êgÏÒÑîüDƒÁoŠÃñöºeûV[µÉÅpŠÜH†xYN8S‡Þ| ü|~ÍãBÒ v«“wÖK9·ù>7— éŵƟísÚÚÃý è•Å~‰È›Šž¾m „…Ñë² Ì+¥–ìŒKœï‘D8ÿ'¯=k JØ4{î ÿ]–.ÜÊl@xÓ––>ÝIt(Ýë‰ÈÐ*IØj*‚ØÂ Û!jH_ÇÅÁ1tÓF|ðFýpºw ÁÝÝ5" ñðk NOœ:I¬€8äŽz¹fÙü1|(E‡%Zcù²@¹Ò³ÂôÇð°Åï\ùñ £%dªÎÔì5¢eøOr"–vG^>:Vl¸'òðuô‡P<Êß@éõfEšÂ¿’e(0|É+ ÊâoþÐÃŒÊ^~ AZm¸™-ö ¡M›OçhvÐ’qûåwÚ¢FëxwÒ?ÓUŒkß?ç¼þ*µ#ÏJ*™¯è,šQfà{cí’„Sk ¦fsµ_¼°Sm3Á¶ý¤Ö Æâïþ·ºUÓÆ“7T¼ßEp ½R”ÆÜcœþ’1þÅUçÇz‡Ÿ·×ž0Õ³”ÂOØÞ³W|úÜ@âˆï~[AGxæÑñJ‚Þ¼²ëö=¼#þËúbÚ’7K632”*h¹7ßTë°0+‚IÙ —þ".nyBËÌâå*Ó²yV h ¹PB*ÎxîÔwƒa:6qÃxå…çfùÅÚ^‹  r§Ó VSß Eÿ†³áBp/àþê/¡‰7ÁzgûÞÜ.L<ÓÔfReºuIÏÌ0 2|ŠÝÉ3ü<l”Þmüìœs|y¼9))ÄÃo $¹;©ú-‡±]hŸ37v²“«ß=ƒÉ?'Y—gm+6š¶2Yå1Ú§Ûîï5㉸9@h#¶:%á([é[ µÚ_cc;Njԅ×>ñ–æŒ6põÀÈpp*tù“øúwGˆÑ8ÑËA[„»Èê<2†p¡VóÚ!—•cô‚Øà3•öÕéöQÈÚÏ~”Äjâåq¶§£vO+þ8±qAûe³Öt-åV&T‚×bZÂÅÿ¨ßáxr\ê&/Ú1ò^'µ%l8}Rþ–2*ÜŒv]îdÊPšÉ¥eMÓ­±ØÓ}…zÓé»~¾]ïp\jO¹‰¼ÈË‚-œ:N¶_ý›B\gÇl“¶ßT3# U³Qɘ³Ô ”ó…ïq†\ï ~~x½±+T{æÌýŠ&ïK ¡ S³†4D-E¤#ÈiÆÜA’5ýd³C–®J²«Š€ß\/!&×zëkŽP<Ƕö³VFÄy|ܼt¿#Ó)ÊÈÏÿU³)¿¤ BnKÂZG¢Ï÷SebnSøƒ“„~‰à$7 Ÿ¹m?ìÞ•&‰ý-\¹Ž0ÉúäœPù…/k»¼ã«ŠDºrP׋ü)C_Žî0"–Ü– ¿4Þ¢GKÊG»>£ ˆï@Pà>wáQDžÇ{%i¸±µ5Öäj¹I½—›òc 1˜P%‚àöº[]E§ [CÛŽvÝé$ÑHzýj'ÒÄ\.ð4!}™ò¿1œ#®e"wxÒ ðËOÔ¼¾Pi³³’NI\ãûœ¾¬@¸·N_¾Ò½Ò¼ý-‘#Ên®þó˜Šd:PÔ)æ›4^pïš• âÐÐÑ<<¿ƒ wÒˆ½ÓP`Ò7w(ƒlyÍý¤~ÄåV˶ª|Wìªpwq2¦b9^¨fNZ]-VÏâküZüe?3zÏŒxò°e¿]È›!žÖ ÅdSÖ ü  µFDpÊ“ôm‹(’<žºO…‹¾ ;ùBî9yãnMϪP¢Ù´Öî¹[M¸X‹Þ &’Èú8YôQzD˨SC«)¬[ÁgŠ>ËÕÒ³<9ÅíñÙF¢Ño ÓŽŽŽ¿;NKÜ’ÿSúˆÊách¡EÉl­¥kútLòÎ;µ„É-›£ò\VèMí>rGܦÜè‰y:ÔN¬wÈÇ3+&óÈÄCc­żÎt¦6DÄ|ä‘ôÔ§Eý5›ÙZV¤–úûŠ÷À±Ýù³GKv÷‚‡TÊŸܦXÁ¸Vú1ó!–H_[ ÌíÍSkg.áKø¿ŠºåMÞkÅL‰ôWŸifЉ#<* ¥lNï;Ûe¿4@ä2=1¢³vkˆÝ(œ(7H,Ó;þ~ßqùëÉ1 Þ=ØŒe_Ï‘+вŠ€ýûh žÏ¿°/0X¤‘köëS§˜‹˜6zX8².<ó¾©nš@徚,su ~ŠèSVV¶Lz–æ1k 'â$ݱŸœjkÑ»‚ò>¢áýžÎÂ’7Yk­þF]=Yb¡>-FŠÎ¶ÂÙk˜Èy°VéSgý)ªq"çÕ6úšK‰$ÖH¥aá/U Ê`¼œ`­ïe¦„î=ûÕiMË5@¯èÑOÇÔN™Õ™þÑ,±Ãž_ §’ãËHc˜k—2(Ø5f,3/%Î>¨6ñîÓÜ‹_Is5îÁþ1"©FWˆ÷陂¶ÝÇð†x)…J ¡BÒåŸV™t¢ Žÿ"ˆÒ¬0l£zf‚@‹ìiù•³rµmr}öár¾ƒSÑJš¬D†‘põ÷©~ãèy»Ö‡¯ìÙ>îKa FÜÖ¤7{žÐh¢_$Iæ){Ô' .BâAÑ€t$‘¦!ÄzŒï2š kVß.Íç_>½Ä<"HfUÇNß E߇ugZ­ÙhOõ‰…k¤ÖÆÏ¯fóÎŽûΫB±èOüµ…ã­ä§–ªs‡P%Am1Ã<ßì¬ÿp¥ØÖЂÃ1~:./Ñ`ÑÈo3nÜ÷x¼œ6œƒ]ú½É‰Uã ætuÞÉ;k›7—îz”MlaЏ¯r}VFF¦=*5w áyä½vBvÙJK¢4ܧ649”Åæ$î¯òuï--€è‰¸þ[PbŠàð=ï’¡”±(W%ÍV e”uù-Ïr)Z)×:ÛHRÞüsax¡¥áDÁ'.nþ4žå¥‡Ç;žŸ$F™ªO?ñúÓ64NÛS8÷R ‰CDë¹I¶Î'õÀì@»Ãù謮 ££B²Ú/€U€ú‰[>©ÚŠ•'xÙ±à1g²¿´„Œå¯ž§½&,ÏÃO=Çb[ ·™Ð€¿‰!e/ÃA[a%š—"{)FËiù¬W·+]Ðùm¤&Š÷¦æägA.FÙéPˆc¥poÇÀ(yx–C)çÌ#”î ¾¨±¨´OíXÛ\_çöÜÓÿù…umÆph±­ÙPõ³f¤Yô¬·7öz ««NÑ´Ïbr ¿Þ·ž(¦H°?rŸ'SvRñý£ ›vY åvH›9 2 t¿œêøÈÛ\îDˆ|®Þ}„Ìæˆ~“è z”™‘1l[Ñ–ßß!g­”ßG·ÍŒ žé‡&rr[©®·g~‘Ú¤+ú£Ì‘Íä‹~cSãˆcñÛ¦d&Ù“~ gúvè{ús{nÊžM«®ØT8N)5K‹ë¼°2ó½rrú í[¦ »¥½Œ²æSÍé:öê>O¦ÇÏÇò¹Íqsódö®_GðÛN~RJ¸ à[¦4’êØ#‘ˆ °¶V­È°vͧ8 Ä,Ô¢JI“ʳ`‡¹½º;áúî­ §ÙRÌ£Jׂ3ÝÙ¯@|_‹ʉ%‹ß×­sñ¼çªö¼Lªh6/d?KʈID§ ?íñ˜ŠIºQØn}ê4ÏŒ™y˜äSLMú×Ò¤2ÿw†Ñ)Ýë[ËöRm‘;)ÀÀѬ _¿i.`ú—Iå©å¼‚°‘ryìÀ¢ £÷h°`> nðeQ \ºå¬^Ò{mþýµÛÞ<5W»x€ÌöäÁaŸ.±íd¹»ÊíÅeÃ54 ßo}+¹ÛAúœÅ˜gô7Rb¾¯2SÊT‰'õY'ñ:7€öùü’ÞJsE’n0Ë2Óÿ Þ®–ù}´ØjÉ—¤ß…jŒšeº½oè‰BŒ”YP{¾}¤0¸¼=¿&Nn¼ÿ¶]èµôªÓ·‡Qåï_Šâa„?«éÑtÈr¢º²p¨°ëfLiYžL—–*ä| êÄ—[:•|[aÈm*}ÒÞñå'‘䔇‡€··wûgï«¿ðëv6NÉÔ™¥çN×(OmaRúÄ‘áBIèQ¼+lgH7G¦Ö%Ã?{å+R#·”à2¯MW^œ—"–;c¡“Õì½}q;m·öié‰b jžwáf(ƒ)Û1¤r™<Ù¤š\˜»Ã;.„³ÊH3Ñ¥c(¢˜Ñ2ék8vÔÙê±ÄÆÍ6qvÌï¢,'"׿Ù+Zw È¼/­åèÝŸ!pŒZt:ñF *z¦jõÕ÷´®E‰FÍÔXÖ¥¿ôýfë\ð¥©Â鿽ý¦_¸ŸíRN¯÷#ggU»­¡Äæ!MPÈd*°Ó)Ð\€˜ÛþÞ’ª¾{÷îB°PNÕÿªHïc‡[Q /ýn?ôõÇ–^ߣþ_÷elþþÎ[__¯t\’0ú® ü¡¢ãÃÕ©?µòkãs‡×S›ø#Ì«‹gªz?†‡d‹pr‡*ÂSÃ0ðø.‰D:´.%`h@Ýܤ|ch—dÁJØ…Ö ÌŠ¶SRvãqYÑs³¤9¡j]6ª­µûï™3Tøy_\/ }ØÇ¹pًׄ„ˉý|Bÿ§…3%CÙ„Z{o?Dc5?m0z™m>ðT¯þÓ—/äPLrœo#’ž¢ûôB®C9‹@×ÓùüȬbúÕd)µ¨ÇÎykéSÏDaþ‰Ä•\t1¢Ùzw½TT˜'‘g‘𿹇q?H.-„¡ÏÌMau¸¼ÄòÚ©ê㻤¼|ÜÛ»Gõ5ívëômªQ<¢fD ÍýIžz…&áƒ?s^Û“Ét¢,²Ä¸9Ñ)KX…»Ï‘hðž Í‹®qT _à¼~ágÊÐÐ=êáÓí[ê …DN —z3;¥ß[L°ýÃ’¸]jËËâe»˜C¿)ü12R`=–_ª×0œx8,NɬtdþDWÜ–ꘂïO`̇5Š !Áù¨‚=ºÞáë©]-ðâqHƒÆC}÷šú:@ ]ÇóJ^í)™ñˆ&«ÒJð5)]]š†TÇ5°FçœÞ¼ ’Ä7HÁ_ ÿ×<Ë/‚—_M~Öé\ÞÊÃ}môñ‹r€Ä¼ ^š«²Ç¥Êë÷¯¿¯JÿÀîÉ|ñÞf¢ØyXxë‚'Rµ_;–ån»¶‹ÿ6z]ð-0OOùP6!·È‚¢ëd ¤oIÇ>ÀwÇý{)¯ycÂóš\W;‚X2œRwz»  N m/y+YÍŽ‹|¦jYS𣶼r3úû¦ù/óR˜"F³ÌÑ]϶£|—tÿÔ„*סßñðJ™ÊÏ—<]¿X‰Â/Ö¬}“9Á"­ªöuŠý¿³‚ó‚îlÛ|’[Þk£Eñî¤( -žçÏ;ÜïÉÛµ¬âêÏœ›ŒD® "O@ßÄ¡â£~GÕ@îâ¼yücÈ]N0 ýJµ6uŒh¾ær¶ïDµšÀÅ$Š*k‡ýëÛ11Šþ+×uk¸ýÓÆÔµ°ÏÆ@˘¼¿áÞ¯™p¤­¼Q%º€4Æ>œm®Ó;Úû)ywÈëìJ⽎%qéëD'\äïÕUB³_–ÅË}:Ü~>ñ~%ÅÖ¾ÕI3·]ç!g Óh3 šrç õZ'Y8M ž, ž­Ë‘T®±òvÕíѦÂpÏìÉúH ßã¯_Öú)9Þ*nó‘šÕÛͼ°°`–Q“@oW¦½Øk)$|Dâ2ï ßÅ«]“’öxˆd’ˆòå€e{¤Ç×þ•~vÒC–r3 Âa¸3"ÀÁKq(£«÷ú[~/Ë5|¡jÃö‰¶¤¿ãæW6 «Ýî³ý%(‘··ý+†å£púáó ä~ºôKZcf¤ÞÊ´žø©tÄÙ2(ÑóÍ|à†zka¹?¼–S: †ZÄ'02ýà|ϺSÍÅÐXùƒ—¦˜á¹-EË“›èŸÛbÌg³¡V¿zŽ.CþüQà ©—=ïßÿd{¿Ât|½FzÏ9np~«Ý²}Š 7ºÿòJŽÙµüZdêïüLr¨t×îñH¶»-ï×HºåíÊVTˆ–(n¬Ñòøvº¤c®&‘=a1š>ùG®õÁM†UÖô :)ß¹ç₩à²kþ©g¹4Wn}t|éçöoœõ/"DýyPršO nãqÂ:"vóµÏ{•ƒ ò#ÙfêÃæ­ÑÙOU? ˆ4Ó[Ó@Ù ^©Ç:ïãb ê]_XU›kwùV-À5m§+QL<5¬·¿¯ïýxÞ·‚újk²nùoá>wîa Õ® ã 6ˆWXhrÛ#aÌ,ÔÀð¸„ÜtÞEz”šeïSëÓ¥ç÷ÖåL93g½5¨(IB¿{Þ\ŽÌnpòRw°ØE˜ç)$懢õI¿…D¶=0ª~ù¤=ÜðP:·Q5ujš´4ÕñCí¯F¬Q|º}w˜^á£Ë&ÎÕR KÊß“0.÷àœ;ÞtÚ] $„6,Eýµ·‰¬f¢Ÿ½d4x·ùìgÇÁ„½X,€ÓûŸg6¥XâB\7“^¶2„Ž6:¯UV81­¯‡øSãÄfˆÓU»;wâBÞS^ÂŒ¸-Ê´cG’vI»L«ü33+FŒErµ !'­«Ü ÿܽ[(`þþ}Ä*ŠëTIÔ¼‰Ò·Ÿ˜hÚxeÓ—h§>Ï… 0¹¦ž1Úè‚GŒñ‚S°õ¥çŸ­zé$`Ø;¾o$EmÅôâñð(.mÏ9¦.ùšŒ.%;´Q쵎+qÿ§:TÔ¹äGvö˜IZÄËâe†<„ÄùÎSŒb½aÒ/^T’tÃ!=Ò t%í·7¶|6ãOn"ÃÉû2ÄG¸ðiÐý·‹$“&»Ë½”ö,$D‘Ù·W&F[-û]í!!rÉ<£Å_sò“|½éFµÔó‚͈X’Lc°kaV>Uy¨¶¢Ž\âë8ŸU‡vÐkðnÁiÞ²ÄöELÙ²ìÉýÑwÿš3ð壻…*èì%ÿP ¿”#(ƒ‰’DëKÇÅyÒÃæ÷¨®óÂó@àQÂe¤q·a(rJü*·DtµéùV7á‘ÁM®Ù¦2sÖL¨B¿P@ jí·/âzEÆ‹APÓTh*Iz ×§µ©D'ÅrÙŒ=h"Ð}Ï_88\L.Ø0}D_ô‹Oæ·»žµÝ$j=§Wœƒ>„Œå1<}´Ö³]‡ YüÝ\WÄ/R¨mÿ„ þ£‰ ¥&Ðíá¢KBÖx!Ê@Bg¡Ú¦x¦Ü¡SæR› S£mvÒ7k÷¸,²_òaHœý‹´yˆìUó¶r¼Õ¯ò®t—´ì-$FÎýæÂÙçô_o†¸ïǺKIuzí#}R°¾•=̃ëìwòÚ•7oºZ~P£<ÜzSôcd=²^_MR ûC 킸qÀ%*«Î ÅvR*š®>^®VÔíÆ¶§·7JË‹ŽŠòàþ÷f÷mì›­¿þO:¤¢Fdç¤I`+1åôôè¨ÿJ4¿;*¸±¯H5È;8L'Æ—è¯[ɼY a•®_„HÙ‚˜¯w¶wýüêtØ[?.åçw1%äý»Êš?Jìà6ûþ©²\›ÂŒê轇‰¾\Õg¼  0ˆ}˜&ä̰cûå)5€ìž{Ud…’â}Rwc÷ŽòÒÁŒ <Ÿ‡l+ÒžpgÚr¬¡TÁè0úªÌà«Ût*ô¼ ÊÝ)":¯‡o”rU£„G3+ÆLÕËÓr(.å*@¢ÄÐäo HÄŽÄkYK*°„W%Ø rL3­Þ¼EEE~í1 ðÌ‘¿ÔhÔI¶VÌ÷ .–Ÿç¼â6ÿx¹ÄpOè°y–ö§ŠÉ²Àà:Ä M²k‡…3™îÙU¬µ”ÎFJNazssÐMt²3Ÿ#ýÁî‘Úƒ³K*ìQ‚iÃi•³ël?o ÉŸ¨3ãÿ•~pµ^ÒZ`›z™ËÇõä®RÞ…£ÀQ[ ˜„Õ#ô -º˜ì:É “(ý¾µU Ÿ Vo?Wê_ÙbG£Dqr– ¿ìôû¶ä(±9ø+†ªJY²®ÿÔÍþ¦éIf.à€s ô{¦†èb¿ˆt*2¼ÿA×>~JË$“Œ~ L —a*^ðÝo{jÐ<îñ©=P?3úWd7hÇÈv‹ ”7œLÄÝ…!ã‡7­¸ߎm!dYüÙ³(.Üó[^s_“XZzÃ$µão]{‚1ÁÅoDXwç›xo"åÆ}€1¼Ü’DX‹~NÿÖ‹Q+ÙZ†ïCŽ¡*;†­ãÏ¥P‚!ÈF ƒŠTOê ¬f ›Ñ“,t³v58þÂ*Ò̺C çOóbdýe ìä'ªg¨K Žç¸¨(Gþß1PùÐ$$j` d“eFU‚ʺb_í,ÍĨ Nºÿ ıNEØ­xb…¯÷AÍuþ›8H]šVfx#¤QýìØÄèúL»¿¨ÿÕ  ª‘+dµ·}Ø·•cÿ†½\¹DÄoûâfÏwÝ!—õŠ‘êO!£EêÈØlë¿…&Â|ÄÆ cJý,£•Ù»L ¡Zeº Nü.¸%áf”q…Î'Ôu¿½¯ú¯î!IØ|øèbe—ßãÙõ‘^Fa^xÉÉã\óš²( µç‚¤&Äú„.S#‹Š;\[©›ÿμ¸!q×zÁBŒí4ÀÑPé¼ö=3£Øwè/#ž}³{ŽÉHFÂX8àÔ©íb¡¿”‡÷î$3'dõ;šsB úFœÂàD,#Ð>¬GéÉ:Uþ¾ÙŽÒ”Â}t¾Ÿ¦Œ  Ÿ€4gbbBžÉ²B yŽV~ý©¨Çö5 ✋3 \y¾Œ"c‰7Z ?Ð};ËZ}N^úEwgàˆÄõSâßã!Aï“_²‡Þ¿VþÀšÝÍŽ7‡róóu•™\Rìq¯i&JÂüqp‚o¯íY°£ÀÈ÷¾b>E㬦e¢ªªâöx:˜A / ($ „éó}ÁP’«™™p‘ÕãK±©«ýãË'êùøÿþm½=›{ëlz•/Gbnn® *SÞjwÎRô¹ßÿŸ¨[PÙšC)ܶ÷jí¬E#äþ€šwh€"¬]eÖ'Æ2²®®ª*5Unà}¹‘XTÞ—±êÒM¿5ÀÕ-"‚º¬„L²oV¸¥½/SâJÒ"N—,,–°ùùù.&’­ñ"u|*îÀŠø¬z*4sD6‚ô1•d€Xä=Žß›FbDESonn*+Ôs^ æ>ø)f„ ªÙ“}SQ9nS³•XYãE±…Q¦Ø¡ö§®®®ýýý8ˆ¤Î{M[t7/Gjo|+J÷ìg{~Ä2Š ×H}+È ø÷Cä30HÙ$­ÍËbÈCS#TnÚ$ü/õiŸLwþÎã¶À¿8ec .4Ýžªð´xAÅÕz€ÊÕ~ñm—ê9HÀ+ÏÓœª³†'ú]¬„™å¨1ÀêÒºµŒf”‰´]}œæ%ׯ¯ ðìötχ{=hH¶.nU;.¦tªßÉ#¯[éíquò÷e@@û¶â6¡¢r«UªÝižh`!'»3×="‰ÛÙ.¼]JUNEÌy|\bhµ5NJdnÐÖÇÞÄ8S¸Íe¢ÕD£óÅÔt•Ö\½=âŪµlÔƒ•«íŠ-ÀHN§£c*·÷ù¬`@ªSóÛ?{ö,A=‚<]½Fø¾|={ß©¦aŽ{à„T R»ãHÜ’—7}÷ %ñåì˜OvOà4ø7øbU>H*ФûC•õ³–äåùõíÅmˆIïl­õï܈]9†ÞM`¦É0,qÚF$jÒz$²Ä®$<¶ŸÚâ!’dÓ°+ ©(bá.ùîðÅLå\Ôa gËf…á «Ú·]!†G+=Û5#X4H«‡Æ~W¼]\tIÅnÅ϶õw@zÐAçÓn)#<†R’K¸ºíW{£æŸq,òZ?@ÞV0Ex{|}ÛÓÓà \•€Ý´¨c{YRœdZQƒ^J£ÿôf÷G¬¬@öS•Ú‹>?‰Sè‹äR -X ÿhY*@ɽØ/èJ© éâ¾g1ÉÉÔðÐõêêêÆËÍÔÃK¿rûÛŽ?ß"µ›ÝXÍú¢KH,z<ˆñ¹=¢½\ÜžÞQ£"'‡5»×«£«etð—èJhâÃôЬT‡ßvV™qUBË`cPıõð/^ËÎRG¦„ÿ•ÓѺür$~¿ÿž®µ&£qøÆôÔzë.;©†K­®Y}4Çú¾PöŸ^T³ ü¬Ò§Ïå_¿Ÿ©0–nízï¡`1ÉüÝ»F‡4÷àk@BjÁÓ 5Ëhž>Oç1s.ú,—í½ÛàwsØ8j+8ж»ýSH'ý´²ª˜ÚI)fn\§­çC—^Š˜¯h˜€­VhEÉŽ=ö‡Š5Jº:bÉÒû¯×#x3¯ ðË-}ï¯õŒ!_Õw÷_ô~D–¦q?é®,Îè_œÒ> ú!ÖÖ1ÉE ÐXã/œºB5 Q(?–pÏßccö}Èûe‘÷Nžœ¸‘’Š=›ÒÌÕ‡smÅ'bÑû¿•Y5óÆ¯ FeLç´ð¤S^1$™÷‘øB2K ClW‘ ¯Åà2@»á§Ìå5~—.ð‹>Éf‹ÕŽ%ÇENÂB1@×åÈ DH§UÙÏ ô‰T#kfPñâPvŽõ®Ÿ«E¸O1è:—T”R`W§NÝ@hxE«C<Áð[½Ótõ7¶+:ò—Ú×·¶ZòO;^„â¶‚”AÞFw´10Ÿšú/»éxq+‚Ø×0¼QÛ ˆ W0@³ƒÌÎÛY˧]‡ËÙÔ Òñß( §SáHßçÝ%RCPéÙ–#„œ`W£ˆ€K-žŽ%ÞÒi ©©%íÿ~è*ÃíbG}¶9@\‘I׉B‡v•PêãG(†¾Cµ7‰O­E?‡{öövžN‰ÖLbÑûÁ8ô@¿KñÐQç}¶ËüÀtM  º{ …×÷ÌŽím¡1t8 ßó=÷w¦gù¥O§ë‡<>v©£Hå:½ ô ;øq®²Ð¼Y„PœQf ¥¾:÷´H—z뀟rYÞ#Û¦óùó¨ïÃçÛ8S-žûÃß?ßÿ»?näABéRŒ7°pû@çõ »+·9œßiÇÌ¥[³¹Ñ ÍT¾Q_ ¥”šâ îß,ÎÖÕ¡ ,9àû¬·EoVŒK½×> R 9= ¬sEö?$~5Õ—`ñ88\ï¥åX¥ÉKÙvú¹:Þàõ=\ÜAÝ%?3þï>YÞ&’ýd*Ü2OQƒz½ÞU3}¢'RÏ·:æ"µ9<¦E»€_ïƒ4ÖBÆêâdLE^I©wëXgæ&³Ýzù_I³¨¨^*”d¹¨ ÃeçúP²Nò0‰H²¶ý’‹àØ0õØ‘$]x `6÷Ÿ¹]rÈÄôÿò(65u{þýjÀšÑKå 1ëùŽ‘­ÅdžÜ‚‚ã½–ý7eºü}¼áCQ´¢I{ªŽ #Xþ×"Õ_B’^?ê~¦ÛÈ£³qØ#Æøt×Vñ™93ÍîÁ=Ò–“W›©ŽIö)¼‘fÊé"½Yσ§›\ ÖRc–·€L¿ÖÕUIžv¯Ÿ%s”JTéD3ÿxáÊ7¤/®Ï_¾ú°K.àæBdá(g¼öþc¡ÃÃü èðƒ'ZÃ4ÀÿU3üÛ˜÷Q‘¸dþ˜ã‰‰ç”g•Ý OßÜ_‚þñë/Æ;ÓUÈý]À$¢Ííá©@¤ÇËÇ3 ×/ Õ e¯€EÕ«“§™eÉN4Ø Ò¶ĭΦó#…Í%¥sJ¼l^ÇÍ‘OëMãóaž€¯>G/¡ÛÍwææÏlÆ 3EP¤{.¶?ûãYhuJÞ²ò–ê´æeÁôKvÍ}6(/ux ÿ­sQ–à á‰#Ô¥?–˜É-5"¹äèè(MOµËpÌÍ_¨KíÆâþ9%eà¬þÁÁ\Ũ2ŽUŠ]ÓÕžˆ¨2A+b}§ ³ùðÁt<½†Ye51œThš¨B?EwÜ,ú‘ýLlHÅäó™je^(Ä(Iþ„Ñ+@+îc££FÕÂ39yøÓT$o¿¨å¼"!##;s—iýÀxýϯœ¨2Ï>Ú(ŽÇNNÆêÉÈ3™ÛåjЙQgzØLO>µš›è!ìE\¬jÖ—¦Ãõøq(WÇM\µù€HMVÈàJw˜õB3¿°°pþËÜ Áðèb-šŒr+"ÒNºôÇÏŸß¼7£†t­Ç±««‘eù§›(ÛÕrŽu¸šî‰}¥„)…sr%{z¾wð·`ö&²Q¦Ée˜Ðy¶Á‘$@®+Þk9rrr§1%ÁØôôÝépýÕ>§6ߣhK†:~T4î·_? ­-.@,ž@@ÿZÿeóÈ©7`fHÈТÅP·^†âeý#9M r°S3R=±Eœ3˜‰¸±Üɤ?s¿ Jç ÿG‚û£¥:5•¬«îx÷ž.ßž/yÚµ… 7þeîKˆ'îDÇB¤„|Å…Úÿ„¨öKY輓‡ûTÕì{ ¦@d£J‰æòº» `"¬ #OɸÈÛe?À'ŠÔ‘g¬‚óõ—ƒÍ gÄí¹hófÌ£˜/ëâHQcOÌ´æp"˜OƒT #úÍ¿ëØí¦ó?G†û ßÀcuj,ª¬~1XR~}1Wi‚öŸõ¯ü°½vƒ­–¾³Œö$I„´Šø)yª £‡][ÕÅ=­žò‹õ¶sãž9Ö²/!uçñ[ÃÿBœÄ3GìžÀ(»_HÏsHÒÓðrµ;9 Er6‡Ÿó €áÖ½¯Y»‹m©›C©5Ä+3®‘ &IÌ›']Äwކ!Öj ƒÏa>‰ Ø»z0nûÍØääR •é»L[¹¶TI$ëeLEEÖHü=jbÓ¨‡ÝÔÔøÄÊrjØU"‰‹¬šÈת.®®ÔŽA}àl" à™þgɆзªª°Ý†¥½?›K[®ð­ò¥®c£wÿ 1r¬1AÉgû8´"°ÁäÍùŽp¯"u§óƒ ­á²¿ç×:í~Âöîüá%øôi‰†>¬vFÀ»*¦ðEp4‡ØÄÊݸØn¶Xjç¶ŒÊQxýŒVÂ. |Ö\´Ÿë VàjLÛÛ7 ¯~R{¸L+'á^ËÈ ?..•€‹J†›‡É¥ÌˆØ±¢¶ŽP ¢cÑÑÑyNþk8]´ ÿÍ-1rø8/)ëk"ÁxAI Àá½åê 6Ø{Œƒõxâû¶€qÉûÊDŒzúûWªúè\=Ô„ Η ™ ¼CÍW¡€Ç€P5;Û™ùÂe$±ndÄDƒŽŠ‚¼µ›NìÏŸæ)C¼”‘¿™þ˜#¶¢2^ Lbs19Eog†OT&¢2ª|hRßÞ<åÆL –@ÞÍb{ïf×DZúéãÁ¦ç»35azŽmüvçCMääÜï~ 8.>ˆC,¹Ô…V×ÔÔ]Râ1ÊF!ÿ³OQUµ^àÕç¹$·'@œ¨•€½Û10”Úý€Û) 0©²àj`c:ÆÓ.`@+¤l¿4 Ðá@0˜ÎJq5õ Ï"§`Æ2³®Æ+¤y»¼åb=^å#ßáÒïçDÓkß?Þ)ž–Å–^·–PkÅ û¶ç>áíµžŽîÇå݆¡„Õ·L‘U Šg÷URŸ€K+Ò"š,]éEKÒðDã'>äTGÄÍsÉÿI¢‘²I>µ ½óä2·/Ã##Í€lzgaáò7/ñƒPz8äÓ}Á(ë±|QVC¿_?¿A×kHy´ðË÷ܮ籀d$pSÚ”‘|Ô sŽIwV¸oŸ)»A3_$%W¾Rª€ªtàù¢o´ÃB3 6:îé ˆø‡ÕLõãx•|ð¶‰"˜¬|•Le›Øè-ò)<.­§¶Ž.îß?j®{Ð1æ9ùyr¼à¤QÎ!*wkx%è¾¾[Ã#¼>”å%ë™t‚¯¯¿Kà2*'°"A©µ›‰õJnc¶r~}x}+vCCÞrÜÓãõ-Y©'þ—¡b4ø¡¡ºê€T˜d‘‰µ€ >~ÅŒò;PÕ[EL¤ôQà|¦Oå«J—–n]þ,h ƒønk•h~¦`×TÍyEàûHls4ûe­ÍÄG½zô¶KÉÛñ“î@a‡‚H|ΓsÓkóá7hv[*Ks2:Zðåú¿‰šêVòßê*…jõê!!(Ä*¶(w+j‹m&C4€:˜¼n¯_vœM"Îæÿ.¶‰JÞ·ÓÅefŽ|\”SVV*[åVö3Moó].ãÔììØ5{î;Øq[|@žÍlIÎ)›$Š@z~v =¶ÃÂye÷Tì}ÚÑ–mȰ *èyΫƒÛó3žZÛ©(ä´ýÎS˜Ã[AAnáúG¾hó9Mâ1Çð‚­ÎF"l}¶‹¼À±ãvR÷Ã=ã ¶c¸ê¼ý­ÏŸé_iˆhââyT ”¿HÇÓ&òTÏböè^ì·B}jf•úkšjÓ^Üò–=Bz ;®¥tþ?CKû}[ÇÎ#âç•&ݘ *Íú›ÝþšºgÆ@*Úò‡:(wæ­›=­©ƒIââÖ(y^Œ¾}µýˆ}ß›„„5joaų£&ÕäòhÃmÑ@&ÐYÚ K¢ð‡Þ…jÁD’718dÌÄôôô›n Õþ×"ž{ƒ¦Ê6½àÞ;<%$LØX„0÷© ^ÝØÀŠøÊc¶p~ƒÊMBeü)ÚɼÙþ¾sòÒL¤·×K£¥ÔÓØK}÷ÅÊz=î‰ sÛ™Ž­³"ÅF¾™CÔ2òÿ Ä„èeévàhÊ›ÿ±•Ø# u¶©Çëòòšf?*„Üq¯N‚<«Ò™ìMêïº ~ŽØÁ+Ú&õÿ~êxœ Á©W‡Gõw²ì>]-mo ðÝ`~´q9À×E@z #w›¨r: Ý„{ÙÃʲ müßþÃB!“'•¸=¬EITcGˆaј8S ^¤›õC;9Ÿ|.7lK!¤цºÚ”,áåHþò…|Ñg›ã÷ؘ¼¢¢Û“äðRݺàc•®[Êsj^GòV†,ËWs¥ {ÍxùJ5é=é€)»ŠøT–YDª˜IèSÈÈ ,â‚>[üù¾=KÐϯìÇâû£¹òdsjøwŽ,j !v{~} œ·Ó²”¡ß¡ ò&tV™oc7—ÇM‡ßï {ì$í>9ÙÆªè(OÍšJ¸¿0ÒƒTöv`ãkÚAu„ÞÓ-lÝe kAXV[Cн¶9<Ýhwgë"Á|ÿ’¥Ÿ‰Z OK{€IÀCù;­än%g0]4q¦ÆÒö˜kµXÖ_F’Zvs‚XÕk/=kÀøšXlîÒMlL;úPæÅíÁrðA'–jÞÇ]>Ò2ÎfìÍÁg[ ö¢^‘·ÁñZ×Ò>.%| $5’!.ìsòG‡ ¡b„òæïXAtY8ƒší|£ó¼ÇœýúÆÆLTW(e ƒ}2O}ü.ôåEßzDezÏí[HŒêG,fÈ7€K˜úÞÓÀ>zAK„Œ´Í]†ÿ¤îÚzü< ±í©G ¤b½œ¸¤s·úÿâªz¾¢ ¢L,,zûý‘2(âÙèzZ n™ÁÅÀö,±FoT!ÖÖó®õñ7ƒCf¦µ±ªEOQÅŽ“r Dµ[µƒõ¥{ ÊQÏv‚êlíYžqFÞãXàêÈö£§·w&Šœyl3Ùã{È“Ž%•‡ÄYà?Ïy;kF}Õã¼EˆD3Ý›oªÏ¹Y¥ÔpYUööæv{¢˜a'Ú?b32­-[~±ÚdÚ¦ tJöè}m4>äš¼D¦0}­ëÛ ¾?>{žCŒ ]EÀƒê¦­Ï éqðÞû$+#‘Ícþ3&#cxαC‰"‹ÌyþÁ}«_ß0è.²wŸH6RIÌ{à^>njrê&°lÐû‡†5«ìÀ‘sîA5 j’òFžöú‚^c™êÛÀøçyB¸tR£Ð±®{r$§Ê°zH½°ñók}ùÈmy´ÁïôË)¶å&@üKÞ6… Ùþ/B>'dw®a.ê(žN|ùo}AŒ‘Ë:öÉ?s‹­F»§ø4ëpЪRÏæüpûOÏQÆÐÁ)<ó@½X­Û#.3½ýÑr^¢a5mžœÇÞ¼<~Û?4„ñPB"ãp­¯ÆiåE±f™pºÜIÿȈåÉŸ_ÈG}ï7u¯Yf<ù´&›ì|¦í¾ˆGˆL¤‹°ÞùÞr(ýcdÓ'è³È3c-ûÈ[Ä49ìI¿×*£i½hü{Ö4?¯ÿˆ~iò>–4½ÿß¹‚½…«¹zŽT{Óõ±’î¨áá®È®M•P :¤í>±´…,z÷ݪ8çLPIÍÕofg¤ê;cðÙZˆÊ8ìî ÇøŽâˆÂé#z5÷±;­À½{B—!t¢2[té@ÑäâIiéÓ9µ÷ZÊÅ)Õ+H€’¶k–- .hýìïÏvßžTLâîôøb4QªÃ;[kÝýýóý¦ë½–Óq£ä–ù÷OÔÝuS†×ê‚QzL,Ý×û-ÛÓ_©@.[|J”^?–Æñ¸ÿöø·ûêÕ_–Î?øŠXlÈSHão½ežÌý;š,±ÐÚžîlßf{²;—˜h|´± J&@ŒmµÆeÚE+J%æUÉŽ‘ÀioQ^{8¸2ù§Ê_ŸÚ4ê¨Yéïo§ëÝ­=ªd!=|ßS©l.>-¬À´h"Þõ}±êK.ä =œ;!Ípaó™àžÉÖpºÈPƒËM8`û$aWf`‘\6¶_þý}0©7{Óò+Mx´¶Hiº¸½*£#w¬¿0~¶™"©ÂWÇge¬ #¨A>‡Ý/à\tleÝsEåù—³Ý9^Óì(:qѨpízÏ}Cäñ‚åÎàËÃ>zû¾KúA„Aó´2ƒ¥HÀƒWŸá·+0”9kxâ’cµF…ƒ¨ü¯ÆƒÝàF)YE…~ Àüìüš|Ní€ðÄé¨å“Sñ´$yHŒÍí¼*M#è0œ›] ‰Õh rëe÷ÉÖÛ|üÁÌŠ¡Ž9»Eü2½Ô{> ÿ~uÏùR¶»GúÁäãl@Õæ½“§’\¬½i±Q.'´ z³m´÷b·ÐŒäñ’ûRL?wZƒÐ°Àå¶{ÎõÔ#ž¨c.;.dQL6-›küåg4YÇÎÇuRäëéüw³* õ@€ûÿ¿@ÜGß}w†/|ÚyÎÞb/B/‚|ÀÌ=ÝJ› ¶9gi¦A‹á4ù`L¯ÛÓ){ÙKyy‹YÄW­Ye†Z‘wó7›‚Ë›>Î%š›4/*\ÿêa:k#Ï7!Ï7z1–à}¾?§ÌÀ`:UÖÐUkmñ0Voc}}´Ü@ô!íÏvÿk§Xâ¹fwö…O˃åÎrÿDªõOŸêæAŽúY,F—>Q×ǧå;-¸yüòk×mñFfötuMiñ‰:&É @p¸è¼WN·Ä"ø=lô$w¶Óí©-àcOG11ôº ó^'¡á³‚3nß'\ñú«q?©k»þú`™­¬ÞŠQ0¦Óíé^kPÁ“·pত)rv49´«^óưÅãôð©.Û´²K’G@æ˜$”êÔ|÷x@ÂúHâ"Ðb(åpÚ,Úùh]~Îy¸ÄÃ^»?…$)äl/¨ÓEßG‚S)Ç-7.¼‡Ke²»ÞÃ5r‰SPlA¦•hqíŸfßg`XÏ'ð»x„¤›þ ½û¹úóD{Y¬ë\»¿èíÕiŽíTùúú:À×Ý:ÞζqRõB‡YòEÿ)­‰“Ýû€ˆUQÒÜjãŒ×.sv>hèèLu|qyT?ÞhÔýaS÷-× ò1µ7‡ãå©Îkß›à¬ßäøDW˜}ÿ”mØæÔÊ”GZ–¾ëgê‹Ä4;шõΗDɬW¢ž³ÊÇÛÿ&"[Y2Ëq7ï¥1§‚<{V%[âà™SÎÝùÁÞÚ›{[шðpÁ¯ì–ùDTÆ¢òHAŒI@#FH{q±mßGa,ö§Oøÿ¦*FÂI§[<+våž^.¯„™üf“góJÅRJmÔÇ£x»¯K¾Dd¡JñQ}Þ7Z‰ßÓcŒ†ùîw†RÎ*32¬Ú?VèÚ™0Ü R¤YªýH}j>+b#¿ÃÐ]!5Ë™jsI"øõ¢ž–Å*O!5õ?˜6aïßø{{s”)˵v8â¾>Û[æj…⦟õ ÿ--lÊ0Lú!æÈÈ`y‚|*3_!ñCRæA8Жï1ê×ÈuÃ7ýßEÞ×ÿºÙÑ]9«LÚj[þŒ÷[(.$v˘é LÌÁ¥ñøíV*6­zࡘª'ŠÌ°á>sò¸*¡ØÑã«ïô9$.¤deíE]Ð?†.Ý|¿qä ÿÌïêòÍ~3 \-‡‰eìÌè»KBVn.(ln»wD³Ä$Îñ¹LI¢”ð–9ù›n²€Ÿ÷Zû|W¢L$*`Æð›K·ãýc÷^^r*S•’svÜÝÇùÊuéL^`î†S#¿^aþpbµø‰GÖ¥™ìÛn>¥3“¨¼®¬yŽ*¸¢ j\¹ºA+êñn±Õ›Ük%€•D$®²@¤­ çzõƒ¹ %÷yxW&õ€ÖeUÏ2®îõˆ[~ÌœbË`;Y›ÞCHiu$Îßè¨ú/V'VcÅw"Ÿá—ý²Ôtã¯Vïãêızζ“7ÌŠI°_9²ö²¤ÎŸÛ|Ïyæ…l¦Ê‡h=çW.Sù¯Î§¼¡‚ÓôW'Ï8}ÑsÊd­6ËgsÙoÏÉïD¼#a§óÂ%?­Pí|‹ÓâÙøTzØí¹Øäæ´b1yÚO¢¿¿Þ¹öÕ3ä=3QŒ¦2šš÷}’HÈeQɨ¥-˜~ø‡lpSiG·“èCE{uz®€$4Dš˜3ÃÎ<õ™ù$ÚÞµ<ÄKÀøÞ(rñ¯ÎÊDW‰«}h’ËÇô~¢¢JÛÄ]¦ì•óë¦Å%r 9ŽKí=ß¿ÏF1‘j‚ÆÖË‘›cO [§=ÒbŠ´ˆ,†C^}¶c‰p lšÝo¿V\™fÿùåÙn¢á¿ù -Ÿ)bþüo'üâz)[©-×§vl™…¹t߉Ê[i”é~MulO^‚Ÿ5Œ©û 6æj5’+‰Ïš”«í„U-KîÝ–ñ ³òÎLM_íµï®ew/åËŽ€ÍùŽx¤M Ç C§ëb¬¹Tò µ: ÉaÔ{T¯Mj¯ !ç.”Ñ‘‘kWÛ–+úþ§=hh }xf9ü¸ÝþÁÁZZ–u6Í­LAKxoyo¤Ò#‹s‡9ù÷[ç©Ùké"ÉÔï”ÕQ¤>–Ðp“ &å[ )@wg‘™)§f¿€Û°€IGw/À‚ímÏÍÏG>­p{€Æóç(ìZåï€#LzÜF4E~ «Ka]þéžïÑÑrËòaŸ’ ˆ_(cê!ÒŠ¸¡ä£PÎÞ GWÛÿÖŸåœ)ȓʗtQ´5éÌ~ÿ&Jú²žË))åÕO­òdBáÂêÊæ?¿°î|üòˆvKµêÛÌ„#ì–0oËtÍEåWÆËðÚ|ç–€´“! ¶>?C1E~ŽÎ‰Ü!ºõM®×ñ*v,8\ÀH^ŸíRó¼Ãö¿>ÛèÂW‡&bטܪ+ ¸°™™™úµôŒ«–¾ûްƒ§e`^:#?‡–d×)¼Ê-< Õ 9ï(¥U¬EÄÓõ ™Lú¸¸ƒªS¿r`M·)ö¯k¦óâN4ðHÞ•#]A>³´£]iŒ‚|7m +«ÅZà£t!”œWÉòø4»æWlÕéë– h&ú8@mÿw~¨mWÉí\í-{=çÕçðˆÃkIœ.à‡uj,¹Xxy㿲k¹ü}4W¥ŸàÏ+vR\ÌwÅØˆ8ÖùÒ~YyÙï¼lúBõ>@ eOxF‘âÂÀd0ƒ€CojÏul±Sò›]ÇÍðÀ4VÖˆzû9ä£Ùuëld€Ÿjº;X÷ÐÿxHùKÑ’ð¤ÁAÅÉR—å‰o‹ô©ÒÀ¿Ro =Û Ös¸[Ìu²™ ¸}È ’k¹òÐÒe“ÈDmÿ«$‘Ÿ3ȶ «] f ­7<ë[sÊk`@ùÞÇ›’þÈÕo¹³Q§Àv÷7»o\i¹Úâ¹_O;0ñóKÐÒí°ª·u÷½¿ œ¡©Žg“£š™D³u¼ Œ†÷K¾¡¦%`ÞÐ:ÍÈPlÝ»§"f¢âw• Z”9™±Ü´ìï ­÷RJáG>*”€†/+àö ù ¥7Õïäç~1 ƒqþÆûòæx• òwŒ:2ö;‹|#@9¨\ÓûœWɶ´ŠÀû:jXÈH³ æ<⾩¡HÅBQ‚‘'dOÿ!OÈZ›!ëHú#~»1çä[Ù™™?¤ðÛ¾éð`'ÛæsZhÔ!Aiä÷Œ••µ~­I÷!±ñT¹ò9Ýiiªkj뢩‚Ž›-ûí5´#c>g!ÎkƒÞPçhÇö G/òŽR.2˜³ƒ·‰9écþ™$;‚F Åë ³ &­,9I¬*:¨*^ÌÉŠ†tæêž¾>õ: À§c²?¿½Éí³™@>%ü;å ‡?ác 6-ýwæ›â Z:äjAáááann®jћǜ­/Þ¼yS¨ßă¼¡TàÛrýd`‘bbb¿Ú!¯¨È4¹j Ç¢œ¶ü#–ñˆ[x0Qµçþb¦r¯øÁéK")û‹mÈc«~©N=uS]ŒÑ…ê㟕3øÒ5¡ˆÖF™&ncÒ É[=ìO3bU£Žm0 gwî‰~1 »¾Åv*‰{¬—”$gjÊ´Ë£GA==Ò¯¿òŒ¬®®Ê å¨4¸ýý ‚‰™öØAîÌßü=Ç"¢c:È\è_éŽ'Œˆ~ó`¥û˜W `JW@šÜˆ9yëµ}#?ÁEìÌ$…Uµù$³÷1™û+.…¯Ž–ÆX¾µq$€b×++XNtW³ûÝ“ñûêù0Ïd[í6NÂf· É2{qAJÈøZÝ—Aü^ïŽéÉÌŠ÷;*†:À6Ž;O§ºgë*ýš’e×Ny³ 7ÏS÷»5J‰…íá Lä”*Y/ñ…¼ñöìÇüMKz[°AlÐÉ®C™,¹¹Ip-#{dJÿ˜™m¤×Ñ9¸9ÞìŸDŠŠë‘n<Õ¼X£Ï~E0g½î7Y!È0 °Ããs°û¨àì\/Íâ!_2‡ÙˆÕ^î÷·ýÞ4’–ž/u6“S «h硵mNÅäǦ%°d9×Ђ3{Ó¢óÐ~¿Î~»lê×J}2ÕP!€(j*÷ºB©€˜Ûß\õ\"3c†ƒPyÐüd·h>,Á’þ Y¶|Þ¿=…âí ÒÒèy#¤Q’2Æ5^¨{¹Gø$Åk™õî~©¯ivºOZÜ‘‹BÒ¹^¸¸Àêcn >ï^•ÁeyF„) c–ïœ5“6=ÔÞâ[÷¸ïú9YòǼ>D5½â€ÕÃþ¿Ã»;3ª5ùHègèÝ:9U¾ivî$v¹•ƒÊp4ðo*,ûå#ŸŒžWï¥ ¾Èz#<æŠ-ˆÇ‰È%¦7XR+'˜Ì(^ýb Gˆ©ŽiŸ²Ôó¶ ‚ªj›‹žÏ~'ïÚýJ7…5%¢ðÊGý6K|}¿g'Û–ÍJßbE ­\÷¼Pé£É•€¶ÜHÒN:VÎÓB Ö°”bæ8–ÿÜ£~÷Ãðñå à»üžÄÓžZ¶KÇýGD‹çœ2©X½ˆßË>÷¯%¢%*JQïV\7‡” eºH]>}z¹k…ãµ;_*g2Q‚Œ™ì»b;üÚG6.¢ /T:è¼› ·ÌLµER®CŒ“'V .dkŠ, ßks5»–—¶é?-=Ÿ“Ñ,)R7ÙTrûáÁ;Z¨Úi×üF}HzX¿;7”Õ¡ˆ5Íç4K‹ë‰ÆOROU˜¯iVP¤yôX1z‹çЈÜl&!ñõÀß \ ô\ ®‡…”5í ùŸ…û˜„!œßl›}˜|×o=„¼F—õ~OÉÑ*Ó›S^åžCAØy9™Æ&ž9¿ML@FZwë™WßvOßµâŒHryg¥Á;æâó¿f…—©þw ãÄvŒ^8Š>ìWÎP.”K^Yàø;Rèõøƒt%†Õ¸cæ£e\Ú¦¥àrµcç)ÜaѪxÞëd–¢6ß—íÖ-C?0 r?'Iµ™xŸ!>÷Øå{ËAjn™úüsªÀ ÈêÏ÷_FÓ‰xìÈøP?3 ” Ä:€¾x?s±ä—~±,Äü¶Ë» Ja°þ|©‡¤Êy¯Ÿ‡:íÖY¬DíJ“*ƒö¡Á!/¼Ž=ìYœ=!…+ÌÆ´²ÇnßL^ÞÍзîXÆJ7Ö§ÚÈ{ÉÏ ²UK&G´´ = NSé”iß“0J½á*zÓ[{c´œ|øç¬± B¼+ Aå dûomÔÐ yc'òw£|˜˜`§S©DÜö-à‚{æƒÆÏc™XR;ý§ôÍ2N´ÊlDc…¬‡hÆŽ:ìSïjïë¥hÉ Ù"e-Db™nÙúá0ðõ_žâ˜õuý·^ `óèè!;¯I/î+ri[=Bïm¹Ý‡³:[ËûYò› !'¶lrì¤GÐó%"¤ E¯p³æõzÓ§†Û7D ù¥ " ˆÑŒ\ýq&#çÕÝ…å¸ëí¯›Æ$[‹`2‰ŒŸ[tØjûF8\Ÿu: áQ΂™á·}ÑóåhÄ9rðö²rˆ?ǶîR;·5鎻u¦pôMŽãgn…—·‚KI“KîÛÆ·>ÇÛíþ¼¯Œãs„÷Qhýñ«M³ï'm¼´˜®Izy;Z•s©Úðz="ö7QQÑ×$¡'Zû^´ –‰ôm…ƒÄÕéõåˆÇ_hà½íT×ÞÂÏÏKr¿3‹s…ƃsE=eÿóoÙÈ¥±åÇŸ#àùcYip!ò°I—9˜ƒöì‘cWü¦×/î)öÁ‚çf#lsÈQœŒ:\dHûo‚—þt;Õè>ßh¼?Îb-÷»paÔõlj˜m¾©®Ò&†6È(þˆ˜ëU±—שƣŻuÖ(Þ\ûW2?Þï‘ K{ NŒüÑî+[WÚ•2Ío>º¦ß„—ü{7}6x¯›?¨|\4™æ¾XÁ&—’ -]4u†¢Ý*˜Òœ¡ ƒ)†Õ¬û§ií1f7ÄíÕw2|5Y^(o®uìΚD)¬w”¼†Êš [Ë=Uê}Ö÷W²DµÓF,BŠEV¨fñ»#ñ ;¦T ˜yu†*H ¶"ºC-àê‰âÎRÑú²»"[å¶#ZÀ~ø*é7MŽs¶ÇŒå¹Ç×±·` ÷[’8v^¼´\Ðæ–“ãVÙøü…¼ðmZ‡Šü3Ä{Jô믃6&÷X6ÖaŸS¶¥ÚrüÇüõ«{XÍ•c‡ðu*^vŒ{ÄtYͼñ´ýæÁ‹‰9%ÚxÉv}#ùìï{X,ãæÔS»©|œ# …߯2:ýéàÒ!}ýõêò\^>ƒj°üEvt‚‰p[ A?†²k)/Ä®Æ3w.xfÞŠ/{<~-u¾7š±Ëdú’‰òÁL.®Õ‹•Àv¸6Cþ!‰ž©ÙÐS†!FÒKó0ÂÎtÏ®“¿õñäWò7$…gþ†|¨Ð²l¯5 ¦¤‘/†‘ëýTVÄ@ÂÌ —·’¾Qôì—GÊŸ“µhnë8áﻀ¡FË ,â¶N§|Kh‘à,ÝS¦œÎØ2ØÚciD”Ùé4nÜS‡xÕù¯®l³&ñ|k䮨ãk[ІŒýüÊË‹úhJ°õ.j~·üøtø@ç ej‰¥ ’`ãþcÃ>RT¾Ã!'j¿¹»OAžBçy•Œçt:Q œðÓ»ÈcOÃg³Ä›þƒ“Áù¬¡ަ¦˜X”HJ½™Êd\Éj0ÑòÑ€ÒÜï"õÿ mãÜá·Knrô¢r—¯SAùÜ£ +nOÔíõJ^âCQ`·º"só ÅP8?ßïî€ché›Üágxøõ;ËÔ‚­L‹;å‰/î#A ¤g‡žñðäú)-J âÇÏ÷õöJ2ÇÔþ/¼óf?ɳR^–è¯Î&6—¤ €/¾ãkÙÁ#i!$åš@¨"Ÿ(p—[U[}ôC;¥:5HõÁ¦1H`L©o,*"0¯ß ߇Î)»Üs‡ü@ÌÖác?àû‘¦ñ_J dú¡¥x;/SàßÏêPjñLe‡ë×ßÝ“ñMú&rc2ã®[ßž?„1K]Ÿmv&i}á$xùAªÁ˜ÌLTéd¶Ç0€úî„§›zVÌêj«¤y‡,ò‡õ î ”$ö`º…2àø¾×¹2£-”\%AÎÄýÑP…($$ñ"8ó!ÊG¯ –<>®z_Û[M¾}Ùæf™w7ÿÜ”èÙžXkñÕ<.úèÑà1Sª&:Iw>[<ÛËä·o¥0Ôf%°22"ÆŽÓ\+Oõ·þx¨DOkÞ\ˆýU™‚‚CÛšõùãO8!P^¼ð¨Î”Üs¡ îZõÝß×eÏœr÷¶Ök™dIyWqz»¸t½·R‘ˆë;•$ Ä…क$äj]¾LDø=EÈr@¤Y»‡ÇT’Q?Ó4)“µ¬š&‰Rbžlݼ¾¶kè n¨>=áõy‹2YÓ«Ï¥º&ÆzØÄ‚g»5Îÿ¼½ËãßSaˆ‘ „åX^s¢Ð)ž(‰xÖ+§qèJdx<0^j—^âwöدw<"c1†Aä\Óå¤ïJ‹GgÒ³J«ØôÛóÈ’ò÷¾{A ,E3..ËZekaþ(ø½?fßNól Õûh\ç}+8°/4¼…Å®žè{Òú%oÿW¿tÚç_çÊ\Ó™\¬­¹]˜æ½ øoÉ_<Ò®B²÷#î”uq-v#É´Nz¤ÊCBÎŽt>?^{ÜÌçoW¬|¿o/ñ¯Ê¬ü¿ºy[VK¾9„Cv3QÔæízª‚>½ˆ£e„œ²ûx¤ûCÒùXü7ü$#ŒÍØ‘ò¸à~ªc*[/^JžD –Yxÿ¢Ñ|ˆÉߘO·®šþ†ŒE A •G+j÷ÎX—æd¿‚:Ù­8¯î§ÚÆ\ˆ‘Ý‚¨¯×Dþì¿Zy“ŠIÙý+¤›5%7©—h¬ †ÔÓ"ˆºg©.†ŒÌáÀú‹‘Œƒ“±Ñ’Däo ƒ1¾ p¹.kÐg‰P¾>ãvfà³ÿúvpÎê‘ÄÁó¦gPKPwD»ZÌä71=§üÍ!{”G>ˆûŠ!>{=¿¼<Ø©ñ(E>³˜Mê.e 'KƒVºËN–T®ÎBå㳠ŧämê«y´ëñá7–SòÅä˜th¨òÂÜå X¿ÇLþ¨6îKXÍüvO™}qð'Çiˆÿ`%ì¿<“#~ûvsyÖºSðköt[/¸K-çíѾ®I6­Ábó„{m÷«›!´¸É8n¹¥”öB0صï£- ŸQfêðØØ×\Þ‰º ßãxïØú<8ËÁ`*⎪¢Ïv‚œ×ì¤S3ÙÌEÝß[e)ÝŸ’_yž—hgfö%“éú».$ü%Fó×ÀƒÚm‹Ð«ý™ÌWûêÐÀ®°’ ôWÈ Þ¼ëÅ?¿(ßÕy£nf·£ýã‡Sz¾EIim |¿}û’ʤ$ÎéPΡûÕÚ4ÄKËû}©Cìl?¬?~w{zm]O÷îB¹¥ø °èT„´.éÌ.J)Ó±‹ÁË•ýÿÈú˸(·°ožº¥‘TRi%¤»n‘éž)FA¤»k‘’n†îîyÎa_×}¿Ïó~ØöþmÖ¬µÎãøÇ±Žužã?sÑMý‰'J=2rUÈáðX° ×’øAž·(ý)KWéü÷pëšDoy€¨Øy:ÖÆ¨b™<êkÁáž{ÕOÊÚ€àsoô mÚ¯UsµGŠ>¯ jÛfÖA Êl§F Ç€>ayFT·/ž¬dYý'íãóf?ùI^žnðñ_Åá6ÉêwK"q¨'äÝ5’ç2ë8¡ØÇ32âð¼½'nbÊhn¦ž8‰³DtMB¥B¢0¡(ƒÒTù Û–J—™ž1î’—°j˜ ­¿)ŒfŒ\Uaõ!¹[b؉­|>iËüòË \“ÆzuÆœÍçôŦ»— [Q°C¸ô¤´:ž–…'O|yás_~c/“oûG²¢^}‰w"”“¦x’“fû"÷DÍ<»6ಞ1Q0¯ñœ¯Ä0ÇÓqR9·žÊ4`üøö· ‰&¶%ÒÓ\MIS å°}3Z*¨º¶åìûŠ‹[üž#Ëk ŒäoÄÙôôĆó¾é¤2crœÅW,-ò"ÊÕÓcÏbÏUD±?¡™ºÓ­úócÀïc;E €Q®ùƒL¹9L­ÙúÇ+ÉË»tÓ ö­ØÔ Ôr‰]ã0ƒîøNvlYfGêxþ¤€Rîwì0Œ.¼ô'…*VAó›êlÁð|-í3IïÇc½©[c?è­lšÔï)âðaçJl§Ú‹é±fceÎ+· ÑZ½m”dä|‡KlqUP¼åïÔBžéOÂÝôÇã^DvÁÐxSÅÓ®”»cx- ü¨®ul—ÍŽaͼD¿[QÊ ®.%ß`…ê(+WX‚¿~­Uñæ“eý–œ†g` hYTä~¯ÿƒ.hTÏ:ŽEkm”ÕjXƒ,»e2DJG•„ð·'Ú?’ *ÌuN€:aÆÝÂß¾Ml‡A¬aOµ³5™&mßèiAÙ ‡•[Gý÷ Þ?Ëyð'Ëù6ãÌï ýdšúEíÚ‡,û•^¼¾¾b³_[ã™™¾˜ N(ZL•œ9Hóè ¼Á°ºü-Ç¿åÎYÛü³-4ÜHÙPº-w?li³ ÖMýÿŽò8Jçá͹Ŋ‹FùH»ÌÃ3„Â,¬=ðdöˆkR @B*ú ŸA둊ýƒz¿º ?´×º†8Ãñ,‚Áy²XÿáÕjõ¤Yø¬S•ez`\ÒÛD\&…©GWçYAïM–'ÜGª4è÷"©»… åC¹Á^ÓÖ‚OÍ̃¼ž „¦9×wÇ4¨3“ÓªJLêH€žVxYDmXŒëÌí•—kQ% ÝÉfµûO‰Œ0NÀ­žt¹þ7*h… zèØëYáý‘®A«ËK 6,SïvvšFO{ôË]›n÷Ò+þà&8Š\-'•Ñ‹e|zI7ý?˜Oj}$ j<%HÝ~ä{Z‰ õ’‘Ý–«öühà0ý†Îh{Òë^þä¾í s]1¢ÿ/×èînM‰i˜//ÏZV­»àpçŠP¨Ô01”š•Ã÷Þ;LBú×{U6²’¶‹ ¬¤(fL¯µO¦›?õf: ™òA™`)óë ÷9ÈÆnaÎ4µÓÂ~gyÒíôž×]6àÓbר7©ß×Ð;Ã;ÃJäòÍRø{»BXÙ°’¸Žo"ÚhÍŸäm?êÍþF%¬ê+‚OgÇÑZbˆ’̯zT&žó-…ßoáaëGÜI†0‚c¯³*þw¨·CþÔÜ:Ú'@ë’µØxó²×2 –ÊF#Ée ÖýÒ\ù=A“íéÈ1[PìžñDP1þMþ`·Nðyùÿrz³Í¹MbrÆnû°zÆÎ¿¶{F¯þƨß1Û‰P-}þÉï€í5gqlN#H Oyy^¯ÒĘ˂95T¶5VV9RšÕ«“4TóS  oÓWuïùíì<½,¢œcÉsGùS%” }2>† u«y÷ëèM(4€‡5x™>¿E\BDºQå"ÀOñÙttÍ––˜U;ØFß5º»fÈ V+¹æ`@—(t ^â-ÿùc–Ÿ-©ÝÉ»ú½F¹Å.³£#ó.Ü  :Ѭ½yGŒ* †ÉûJòýñÛ¢å¹æiø «·3Ç^¾ÛÌï Q40ýÓ16ù¦`Ö•î—jpõb.H1•¿"Vc7ý0ÉXŸ†zk¯UD´êY7í8P½Ìt½adêL%%¤ÎÅUãö!Iâ„ IzS´@<3guq¥Biê×àW57þE˜£X.Ýw°5Ä1:ÃÿãP’´oŒÞ°~ã0µj{,R¶föØ¿KÉåÝÛ“7Só†ÚLòÜS ñ¼¥B0°v253Ó\Ñtˆ¡¥4«c¼w‹o))J½È9ÝúR þQ©¹ÍEå΀Žrƒ'ãz}™ ‡uäT˜7=ðŒ’"›Æ^oL½ SÏ0Î/ÈÌS]*,zÄÑOÆqQxáK‡ÝpÐÅ ®ôÚZ£ÏiTX¦Z8EzöeÒ u×ë<àR´V`ë¶ÝÑ©ˆ@d¸P0y¾Oèú„Ñ’W[H?WÆ=/…ÒBmGwú5DúõÃ…Ô˜øå… Ô6ZõõW­ð´n”=ûcÒ?—Š¢(Mèù øè\‰»©ãE((Ž>TNYþO¼»Ç–~Hòõ^`Ûó#Mîm¹û>!CÀªª 8Æ\Öæ”Æt•€Z±jHÓRŒ¨Ã›/ÞŠ®ÏÄbg¾y)S0½›$Ú;P`°PãÞáÐõôߨ¬`ÐI8ØäžíV¹9ˆt² ŽÔ2Ä BžŸ)Ú„bÿ·Ãó¶É]³·mrõ_û7ùW@¶ÀáÏ'¥oÔÿ[®ÞëäépéÀÖ‰+uÂæƒ`ÊÝ™qjã¥:·VÐs <â[Ö—_ߤI.s Ol.®Ü6L@:¡%¥!è°P[µß[xʳ»éÅ6Võê2K@(£,9ó]ÈN¨ÜÁÍÔùû:šÁ™_°×ù8’’qî<ÖãA"¬gðӌШe^†_ ó†±[Š.‚å<úí@±¤”¾ßÙŹq€4X윖VÄJmì"°Lõë &*‰¹ãª©¡øø7,HRV©ùF€ØpñJ`«¥&±mR¹¼8@¯}ð'w™ö0úÄJ„ŒÞNÝ¡óÄÊ:0XEzM÷вUÿjÍH[¬B¥×;ÐùÚwé’GŽ˜¿&ÍŒdíb˜¦1OÐLÝèr`IJƒì"Ârl4fÅQ&Ý„íã@ÓÁrÔÄ” BJô*kû÷æy=99 WËp»9J¡Ú9÷tnœ˜xÐŽu°×„‚>H=ÁÔŠˆ’Ú7À¯Þ†FK{©²ßal†v·GPn›ø¶ÆÎZr/%½Õ€Ÿ«ðˆï¢=[ºö]\Ü’Htz`©}0Üï-utzª^R™‘üÀÌ~ÿ‡ZÈáÊmÀ§äâÚuÌCKQ0 â­­ymbÄÛh%vÊ»ÞoÙÝióî¿»Õ=BÎ{¡6ð /Cƹ— à´0 ç¹¹ú—oY/unÜ6ÓJ—0AÁðxxÀ’ó˜LŠ3{mYÆsuŽ­çsتIŽ„àà³à$Ì®v¼?‚ý- X¿?§ÇØ©ßSD'¯ þÇÑ÷††„gzZ÷¢Ÿ%X|¹ôçEÇ V€Er{-T< ú÷¯tôµí3¦ƒ–íG f—ÒFÜÀ#Rš ›í Îf—­/ÿVdÙ]l±p²érS‘i’·ƒoÙ⎟r‡­gòˆR-ì¬94r°µ`®<ñ¯ÔŸûV—Ì}”Ц/1“!è½æ|SgG¨ ªºaÙ‰Y¬Þ3àñ_)l.-ð¼é¦ôœ&[—y!p:¸biHÏâO,©/chp³ÿ!n7qÉèIáQÚù¢„}ó÷Ò&TÍŸ‚°3Óÿ °8X•ël‡™é´úµR•}§Do“Ò«"G°äL'žª·ÒMž¥£¿J+GDšLý¸šÏ3ïüþ±bl—¾Cl[nFž‰(à’iª8HqÛiœõ=ì—¯Ó×azwÞDÈ(™‹*xfXö¯8NmwÏi}°M`åðøÀ®vøŠ$ŒïeÀÉ®=Ó]ª @Ûù?{ ¥Å¤*ÉR`:ÖE!‰Š劊 ÕoZZÙ~FÓÜœ˜Ù>Î'qœŒžI…s ôj\E–6!,þcnGvœ f¨OrçŒõ«{އJš`šp£Ò¥ñ±áÊ•ÿí@çU±ƒPq¦½è4rö |»%M¡!“l¶‡ªŒ( h¿þhg¸Cˆ(»ÿGà_*½5„´s$.àÇÅæwþc»ßÖ´îeÏÎCƒäYR¶ÎÙ2ªî@÷x§{ /'o}jGõ ‚Ê$æ÷«ÎsBg…•Ͻw.޳PÁBå ¡9ôúãJùÙ”4÷·ý0¼q~Áƒ’ß H¤ó±ú;_amGÛ~syv”•µ$õ‹0¿ýÌ^€µ1?wȈ®]¼@e™‹(/¶ð £æ«ÿfh<&[fúÊÔiåì†]’!ÓoðÿrwdV³˜(ÅÕrT&Ï€„j2·Ëøð·P@9>ž­mWå‘v­FF˜xµ1 =Ÿ?ß»½=—íOBEL3-}ÀX*]àIÜ}Ä´ÎØǺÙÔ@±×+ö¼ÛXÉ6qÖ,Åh†6AIcª”ÒmñÍ¿ðc¾‚Ç`œlY›žï{æÇÇG×W×”ðÅvMð 4 PTîëê¢ÈÐÐÒQ¹RSñÙt@KkÕ´¬4yN÷#ah¨x{t`‰følì>µž¬Ï4ê–~ 7¾gl@* ¶gŒ‹È°)º˜© Bºæ ï ¥ J:ïß#vër¾uxijÿ‘ÂÄ€‘\‹’ rý¦LZ„‰î¨5§$ƒ» MËü†Ãì¨)ÐÎÐq°tÐE‰ 4rL‚à ËuºIÛU™Ç³O®.,‡$™Þ‚ ¼)PRb&¼¯>Ú7®¬c|ü7CY ÅBÐ"êaÆý 5¿ó<…™âµ@¥]h{ˆÎѾµ¼|mÃòahÞsØéôË g<: ÿYèÀŸ£ Š?hH† Øï´w ±j„±e½æ{Œ*…˜4!öšÄ?íb•Öwü¾x‡‰|m½®ØŸÔ;Ÿ)z‡É €hâÅþweeX?w•¦¡~w@ÛL%†©w{*ýÛ·(%AÂàÜ ®[Ø*Sª±»-Y•dêô F‰¨‰’ªý í… $:æÅF¾Ô²´¼,#ÎHñ×io‹N<¶ÕI›‚!|´âÔžû÷yfϼ<€£Îþ*¯³ª!Z¯‹W%Y”N›Àn[_v¯ÊLÉsè“0ð1p±âVµï±ãÑ_%e˜ c¶"Qº÷°Ç·©k3=pßÓl q( :Û–þ®ÐžæÜ<Õ¢²Úï¸÷¥Vawl ®Ê‘ "Q—hw4g$¡ÌŸ€ŒŠÏ–F«¿õLãØY&ÞÕÅëÅOeÞ†âÁG¢³¾B—y(ٯǴ{)mr×âxíI“ç€ñ;žqºÒÉÍý‡¼Æÿ~Ã8ÙÁù¿uÇY‰ õôò.À>Ý—?7¦žÙx©:”Õ-¡ÚŸÄëÁnì$¾Vâèú­^ñÿÊzLUSYΤÄ&À_¥ÕüõG*SÄg;0ÀÝE¾Ñ6¸¬c}Ñâ+}}vo>oÂxýëÕþ&üy‰Ôß@gÓèˆg9¸\rá) :ÿ «‹ 2ÒçÜ 0©åQYØTÜ2ó‘þxyè…ÌL]{ªßJ+qýç¸[¥* {„ï"0Ö²å@ZçÉ&ïÛOmM8ë볃ƒ)Ï&V¤¸Mí¼­Ф¿ŠCZ sFIÒž.Z ‡„ÿÇ O)Ø^˜TŠˆgý²×ÒÚñ«D¡ÝÁEC »ã¢“d{"T"`ŒÅ@.—•»¶kW‘¾"ø·¶„Î~{¸Ýƒ$RΩTàúØ›ü·9óAíö#ZÔéí•Ë¿ÄTkî…„8 µSÃÚjVÁ@ßw"Ú›¯¹ýOˆOöËbzëÍBâw†µÏÔüWB.²*Ȉh*‰;*Ý’£›ª‘&¸ ÂàEýjЃ¼R»i’TAµ“y¹o“…ä'{Žj g÷ Þäi``úýÅœ¹ö` R:,ôËრ"«€`ܯ¢DÞV ¯bY[ ª-ý§?ñSp¾ 2‚Ér!³¦RêϧJhæ|‹týºš<÷ª+ú¦ˆdÙ—…†âíêÞCÝ^j¾²X¢û‹?´#‰ì¡‘Þ9üß]~|WÖ@ÈØNž+^“û”¾‰ž*oW¨¨±Ï?î[WK•*3­­ª´‰]oš5}qd3—>UöoFFéÃ¥p^!ÿÿX@-T:Ä|Gÿ§v·u$`œ;UyÚ+,Q5f^|šS¶x^˜µ#Öí™Hzät-×'úLزÉåeùŒÙuï ‘ÖDŸ—5r> \^—eWŽ <¹:)[Ç? ã~W˳2œ|Ñ¿DûPï%œ¿~‰‡wzü6–.„§O’6”™´ÆÙs ¸yq?Ãð[“¦l@³€.ŽËÓú®*'¿â8u"(£©Iù¨¯žã:€œžÀRi.Ëý¥r÷âÿe¨ã>àýÀÝ©nñ=¾>¦ kñÛ¥T»½þÝÏÏ(ù%²;k„ü‚µÔCŒ*r[G D8ã>çC¹Ä)qš9Ý&Ô:{Ý7®èz¾Ïɾ캻=û„8|ÛÅóªg€$jëÒý|c[ ^ ]îQ”hlæ[0y>Vb}ŠºØNÛÞMʆˆ~à ªXEÓÜn¬kß×Ì޳fÍ®åX]&M\NÇ·NW)iáEe†€ w„ r'ÌÀÑ!Õ Þ‡ .#€ØH#ÓK<7fȹÐ=÷k6¾6%,Ò›e¸½Þþô#"‚Òʦ³Þõìr™rsS÷HòÍ_‘Ky×gœ¦ø‹þ+ñÈÀy mXþ†~O¥Tc@·×ë?Ç“l¸¬FàŒ=|~˜JÁU¬lîÓÐÆ†±³@€Gi¨Ó ûz“».ý¯º¢ã³Çý¡^´Läã3ñª²|u¤‰þÌÓHȈzÊ.E“1 t i˜ê.¶±GæËff.‚Òf`q?± À½à{ÀÖ¯Doô GõÉ¿o>Å{qayßüƒ£ýcê§äaø½‘?Ú†¦ÁÊ\…¸@s¸/šqÐLÖ#äžXÍ;{í}ðÜuxHæwÂoñ&ŒÉòC€ï_þõY;¢ýsªSAÉ%>Às>ùj©‡Q"æ7ÞTBì0Öz…¦do?=ìeËd`ùŠ1‡C¤ó{CóÀ‚0úývìIáoš¯­2TTUGý§9L ®¼Íg©ëC#òœÿ¯cPfo\¼¥QD$*WR{jì±FL¾< ÿÆè}(oڱȃ‡ÀË@ ·rJjRô»\*òöÎFA%É;ZN'‡›n/«ÞÑŒH5Ù÷ŽÓd,†®Š lT Ï–.ll²€}±­iÌfêé. wZ|[‘ûÞm·Ç„ ¶Ú§—µ+´Œëä)¤õîL;¾Ø³·Ýä–Çìû4¬º"$Ì¿n?bŒÃ+ƒór¢¿Í¼\ ÀÿƒÙÜòN¿æÏKªg26cÌ­£–Æõ)à}e»1?‹ÒaÎì<áA×/¼wž %[d"7EH“†=°Ê‘†ÓŒ0ø€¦¤"rð¤“cÖ‚Íì§e@ãlî¼è Ræ\wŽOŸ@£ivÿnO6$m‰º€2½£ï ™$ï¾ÒŠX5ÉýwȺL'êÕ±ñ·–f› ÐAšg±}*@Jè×ô±“‹;»p”Ïz<ˆ{‡¾¥ó¿*i¼„¤¸xz`:BÒeNèÉ™m­:©ü«ŒþÃŽÃöGžu¯.òƒëE@ŽÖ«x½0’ÇkOA+¾%¢¼:2b¾ñjcràtåÈèÇwgFÿsP~ ˆz’šl.1d§ij±Žä1Ù·nX“D%6%cLÌræA²°”&x›©àιÝ\MΓĥn®*§¼ ¢àDµp‚IWàé]\–39+=áþK´w`›ta† ¶ìc—¿Ý§ŒˆEØ"$ÐÑ¡ø!@Å¿§”¬NŽÒw–¼Ž¬Puùx›ã·õÇêWöÿõ&Æ‹üþÇ“&ØÞ—8aÓÑ)!…îÐPóˆTŒÉÈ=w ñƾpë a1]<³˜4,ó²ŽblGG¨Ëò‡mæ;_~±KæjgTÒk›Îé;CÞÁžòÅÑù&€&ÿþ,þ@$ù¡ÆÞ„­ág2 $®¹Qˆóî¿ÿéd¿ =\&î#!åÈ!¤ æi«^9Î*g§—ãSpù+g¬ÿ_AuâÆÊØ®ýý|H¯ËŒ©*ÀÃŒþ0Èb>ŒÈè_²ãùb§Ì”2 MâªàAC9\¼#Ì‚ßó¤Ý5,“¢K@ó½ÉûH´wÉZðßü-G£Gâ.6Y‹~nŒt!wqqœdìõ¾ [¤úb+`ÚNIS5ý©ª¾Í¥êÙIi¹å§x  †©”¶ÚXè4Ôlñ«–V¶ϵԟ— ã«NĨ†I>öDòaà!^†917¼d¨Wòî{›çíöd¸ëÊUî…ª:aó­àkï&=B^â@E3/@êP¹kœmXr¨‰… £%c1@üï@a²´>­wÔI\nŒêçgÕZ‚ß#@/³÷[·ÿ·™m!;©ÌL 0ã)…ÿaè63e"Æü)0}’Ç?ñ@Óð1ocJ êŸהºc€¨—ÇþÄàcT‰Å|oBiÂ~AêNyÒ…=¦çíX€ÞYÜâ^KÛ!uÍ$0È,Mâæ+ö”«Lìƒf5+¯$mOó6u{zF³$%Æ“*gkëétù#m§Œ¥¾ÃÂ{õÝԌܵͩ¿¦ Ÿ\2ääVodÛ™`y¶½››ò¼åi›Rkb0Ãsaq%!â ”=- ‰`6|E òµ°ñZÞzrÀ0Õ+Á74RüUÍØXkü“íÉNTÙH³J-¿í:£ÐIî—‘çnðSí›Išª”T¢[ãnr߈Q§H‚kC+QjY :4 ÔØ²ÀØ#P&)™®nÐpè©ë!óæB´VÃûa2ŠŽý ý2uéñâ‡7“AíÅ¥€ƒýãµ kSèø‘×>œ3±iö]ïöߨSï‚©Ê.ø¨¾Žþ§«Ì æAa%_‘9IôŠ‹ðYÒ—ÜÅêt ¤&oršðêÃk±Aý±Mã©næ«éˆúW†v¤ªÿ`]r•ôoþ ?Ö¯ü•úÒwÊÕœµügVx;cc—é>ÿÜ·ÜB7§þ´«E6jBBeÊ-±ÊQ½×Ìã‡/Ê=K¶ÉÞ—Î÷ôUfßÝÖL±2öVy2ÜK+«·3š¡¬jÆlqï £(F%‰fÁøXìü }¤ú„©Ëº8Ô~u#0üØàüSþØëú;ßúË·¨ŽM…o:šM QuÍE îj&!FÆÈ/’—‘ë4eyžŽÛÚ¹‡]wnWÍH,†)3¿©Y¸ø”¦EõÓTr \ZDÛk!tY° °Ûf«ëxyNFÝhxYÛͦÆÁ‚_©vJu5¿ˆû\GÏDþúl×vªü1 3SˆewŒëÍ…+!ƒÄK''îÙ:çõÀ‚2±éøŠÜܬt:Æ]pp‡MW9Rʪ¶³fA¢ŽºÿŠø˜ú ªˆs¢Ž!ȳ#ŠÈ(87ôa‰&[5ÞéÜ×9Ù¶‡CXÏ¢|Ó4˜±»SÙ·샞IIý¯ÚœšÂðÊì/´˜ˆ–Ý^Ÿ÷²eüUd¨ðØž@ÿq’ÄQV-†¢éÃËu]‘ýCÊ †ž?þ~w„½¾a‘\¼ökn°zæÂS>çJH¬}WÁ”ç³´a|wn¸¼äA°$å¾z››.+Ñ.£jžÍ›DA./F €Ÿ™ó˜4ùD-À^˜|‡7ÝàÆEɳÖI$™ûí#!N  ½7èn=h,DVî %á¬Ìäm‚‡Ù9JÙý¡¢‹:**k­¼#¡Ï«&O:â~Än7yƒhöãð³ráÙÇ7çj°Ë©b³Z¤ÝÂÜàªÇÖªHdzQ5Yà­ýÕ½šNŠ ª¨ž½A·ÅѧC½ÐßÀÀø/¬{“gßT¹a‹7˜¬/Q™ó£üÁ^ å‚o?ªåLDʆ’ê JÕìKD½½qxÑ4Ùðã~á]A¤4ÌeG!‹_²Ô†ãMRϪì³ÌÍGF~ujÂ7:Q:^”à7Ô‚ÅçµgœÊ¼äßc“ð»,èÖ—$‡‡Jœ:Ów¦Æ õóæÔõ×NSuCÿ4 ‘Ö@D£ØëÕÓ¡Öýha”M} r®c&s}´ª©p“ì}Ws:h–Òe¡»À9À~t·\ædBÅß#Ѭ ¹_œ‰Ø­hRúõx‘^lÐerúAmR¬,>žän»í.Jòî0V¹¥ŒC-þ=væ/èö`_ÿˆ|´KyºÝyqxðˆÎ `‚@Pøÿ2{Ì‹¡tt„~wø_XªŒyÎN÷SÔÁ¾#–áË—æ™wžÏ–¼®3õtPZpX÷Ü9ÌB^f¹o ?~!¦(D»ö/Ùlm3?ëGeå[þ}:¡aLϽ€Ì½{÷æk·÷ëþªgì¤h£™9)¡hªv2]Ð|hB”nýÁa5œÒl nð¦Wtqeá-ÐÑvNuvî§Æº* ÔŒ  úòþ/¹èÏt‡…~ëÜÝ%Û ¨]Áxïæ=–=ÁOŸ>uß_ÈPåiù‚z™íÙÅç%ïžþ›Ì ÌôÛ+éBш%±} Rß~^qv¬î˜ñ mIÜPóqv@Ðù”ËëWµÉ¬Ö\Ê*¦ÅZ„%Å)þJ¢‡F„&±5k¤[_{ÓZT·ª@¦¸Ëùòþhƒ› öwáa4¬wo‰Qßbº<œë~ú“o l bõ{"4û,ŒÚÿ|E“¼{F{_ASï…´‡xäöÆ"÷r½dy¸³ÚçGä®p2¶>¸˜½<|ÙQòž¡Öéû_v¬ ”žwˆŸˆom]îS•AÐt¢E³ÍyÚ-ÉÚº9š¨gÚ‹¼ÛGú®ýCVÒ‰ ·øI\®’NjÆÿÈeú Òß`~ziLFœ5ÕJ§ü_ŸJÚ†® Á®ß’"hÝÑyöæ¶Î¿4ì: R±Êõ:Ó×v7H<¨ l –j©ÏUù&¾£/eÇ…þÓJø;;‰¤WAÕ[@|¶ý(P\çóØ™Š{ÝŠê:ÕŒ_sïà(›úãý §ÕâEè¹ûþ¾Œ0±´ª¤¤á•¡ð&.Á2ã.AüŠ=ÌKø+Â[VÍ[^uâòÊ»ºm®#E!Ak¢eêdYYY¬÷kñl7RüÚ õÎ7ŸUbCŸæÎ•±í‡"Õ…½ií'ó^g.⎩m*0yæ÷l!Dÿ÷}„5åU7ü…*ò5’é–žøWµq"Þ>Zôx@,‰{Y\.0m”üÁ(²•ûë2¢ŽVÈœgØmÕ3×¾Ùc›H]Ïtˆæ­í2G@Yß×Ôÿëõ‘cލ=0ó _Je^ØWuèkw÷7¤® ½9«óÄT³I.Júy„ä(­¦qªüŒRãÛ—/d? èî Z¯pêÛ7èE×D¢# ‰Æ6o;üöÔIÆ^S‰QýP #0ÉÓ­;s¾PiYFh>Á¨­'d$y-`ζ$ÙOĽ±!ÙÇz…c…6•Wnõ2N±fP10@’ó/œÎ{E6ì}yªí?y±/su²ÙI®g¼$– 94Q3yµ*ËüNæqŠä¢ÂÊÚõ;_Ÿ•ß.û-µ Ï†¤™Ôh÷×pþ ‰C¼©.žeϼŠCÇ=);*ÏèuN\!E2/’>bHÁÄ7nCŽŽ—¾Ú˜_¾¿.¯byãŠz¯EÏçLJmåL“Ìù¬gà4x®¾jò”áÎ õê艛°½¹¿Íf—Ô,FÅM8e6îdҨߋ´NFñéLÛ"Œ´&ò[x¹ÂäqÅï Æx)˜)Þ‡4qp”ØBdæ—€ŸWЃóÝ~1Ó†EÓ Þ5/éWÏç¨E'žšB,ŽzG¦.¼Qˆ€^,åw4M÷mc=`„çûÆÑØ+9’ýÓÉ’~d~Vã}S°oó áÏ´Og¿ãðP54Ã÷!<ǘè¦ñ©ßX9Aõ¼ðÑèæidµØé²îdÄçØÁ¦ÞÒM‰æ‡I©©}Ã9²+AÝ#££ }­Îß^çØj‹¢‰ú<+¢<7bˆcš DL9ÚhÉ-—Ý_4Œ$ݵä1¬†~åË1“ÄîÙ,§f#«ŒëïOökí]}ƒP€+ºñÊÝðò†Žváéé½?ê b‚VÀM» ÞTº±‰~9ÅÆ5Îwe#Æ}ýúµÚ.q‡ôyï3ÿ‹ƒz³ãáÇ~ÙXG¤ö«ÿlö›ÑôÌIÑØù­”™Z/1<ÇÀû¯òO*†ã  }+ØQmPç7è)t |‰²e³•)N0@É!v¿Ã– ÷ƒ~$N¹c\¸$Ùɇ ”^Îï“Lâ,n“üåÝJ2rŠDÊ‹³Ÿ,­v^”Ø›äzr1köâh¥»ÓÄË ³ýŽÜ,:1(¸á ÌtD‘×ǼÁ·êÇne ©Ü¥–ŠÊÜð’gGª<ÓÄÒDFhÆá×ê‘è_γT¡j¾sõ#I!rÇÒmŠ&I³ìvXÛÅã‘H‚ÿt €ÖÝ ÒVòJÓË5]„|MO÷d@òú¡ûéˆs.U±¡õ8ÈÀà Ä®Eúß5kšµËŒÉÿîŒö•–Ž*÷õ!Æõù+ÈÂ+ ´ï¯kEôø û€áÿСny`Y“ðˆWÜ‚™Ö"·]··ç¨ŠhªÀYùš×¡Äå_"w¾%«#;݃϶Söê;ç&ÊΕ”ÝNžˆ]<§FŸõ÷y§ÄìÙäÕùù1àÁ3k=“8JËã‘;TšŒZúïéÛ.ßßírêþ¡ŽÀyÉœÜ ú¼)Vh$|Êû9ZÇ*@p’xôÞä}¤$ðV$Ë[Tí8+ØJyRŽzÇØmê¸Áç͉B°ïyŒ=åÝ…âÆô¨§Ì­û™³®s«- Ò~²ñ©p¯¡›ô«­Ö±*‰§öí0ÂØ¡oì9`)rí`Æ@.0e'lÓ®Sc¶©áH—,¢·¾"0œÐ€©*OõV ùòe^Þa‹éöDÉŠŸ4Q‘^=ÁòͪÑ|ƒÇöŒÏ•ßþéùFI›#ÛÉÕöÈÒS°Ž.¦Ûüâð.5âondÆ)ƒØT c¤¤ŽîÌÛßý<ÝHƒGƒºàè*þº0ÞƒAöïÖkb›Ï f~{¥h¾`7˜F®FÌ@ÚR$€ bN{Í}ý+~-©ïïÕÞA-‡WçsBÿ-¸'ìŽ]ŽÿPsé$8‹wGÉgÆÃ*Gš“m,<Š‹m·•­¢]¯þû#qÍÿWsœ™ã{ù_, ’žº½öÿù—›TðøŠ¾[W^LÕ¯Üj²…J î½ãÞ< j‡éçÀî •qƒ@¹ùÃ9‚χ‡Øødû)÷ýùp¾X„ܫʪ¥Æm1I³[ÎÍMÔÕùÿi¬}­Ø*^ä}ƒmùŒ—>%œ(öãÇ1+iÐÆ’ãÂŒ¨nÑI®Ê\á|6 à‘–ã˜D/_“fJÐÖxå"ž¯qsÛ‚7òônóí`uøùÉÉ…™¤Aë5aQåçGjËŸSW¦žm'I4¶±ÖV/>¾ï¯±%;ÆG]âSN|3^ëÜHÈÈøo "Å3 æ6—¢ ùhÃ"h»d÷r„ߛɋgó…IÛBŠ}ÊAû' fÎÃcÀÀ¦VÙȲ•yðFŽŒÈ+:ëA×ã8eN bæÿ÷¾®fH®I`·O¢”˜(¸ÈÒsaR6´Eý+pæ RTv–Ö[¦¯i¨vDähAǰm¨Æ¼Bä@…e¹¿póI|´Ðqj_ßElZ_OOÄ>†87ðûß­[E×s¸Rb‘mFN6޵ñWPBíWQ‡…÷ë¶u\Ú6`_Ÿ?7a¾6YZï{\ÁÚ5=™õœ¸£ïvâ?£k ÷Š‚ LEÕêa,ϺâùÖÊy3ßJxmd_»’w9˜ƒþòo‰Él¿$ýáz¨¼tþë׃Ñ,CYI¿m®"LàÇŒ†Iã¿1Ö¯¦ˆN2(v¨ÛOÒûÖþZôÜ ÎÏ Î5ðUÚ}â@CΟ;4ÙDèBüÝKé3ïgc «ÛSÉkŸ.ÐÍž×ÁíyéhŠaÍrÐÀ+F]r1N`¹††Æ<â1s²öá/$G»Zά} I8÷Ô—[űì¾ÓÛïàüøå¾†d(½¸ù‚XÐn­Jy:÷%/\4ª%î§Ã^+B´ÊŸårf'èέ8z¾E[b•PšÛQbá¶GÜ WºG,¥`É7toÖ![y7/h^&À‡$ÜDÑDxÒÁ€å>ç ¾Î¿Xôb¨~·Ä*+ö%¹ó{ìLD ðf(Ø¥CÒjŸy•®Ó”däY*zo<®?R™TÎmüøÑ°ŽˆâøLëá¨6g¥IaˆQ«FŠ ô!‡~ÁäýõYYø@È…ë È/a ­3ƒè i]/àˆÏ¡z2*ûwäQ×a÷!·sÞß3,ϼ/‹ÐmëÂŽÂ%ëïáôÚ K€ZÐ=C¡Ð~]½§/¸Åõ°é‹?ÛˆÊü R‚î ‰ÎdE© ñ¯‰È‘Ía~Âð$Ih»¸Ý_ÊðB¼ŽŸìX¹íðÙι0^Y¾=õÍ c˜ÚBö'Õz~SX9BÖä{±à’¡ÌN|y ûž!¯ Ö÷Ñ4-ç3CY±w:Ä¥&öw& \Íå½êÛ&XÄq¿pf P†>$Xë§°ÈÆÇ8Ú#îÔ„­ñ#®=õiÚ"s]œ€-„õìÖ.¹ÙÙJ'ÝLÀ.?&J,Ö^Rñý¦Á#­˜©Rø:(J+¶!®lJO‹M$¹Sö” 0yCÖ¶E²Õ3*Šôüîüxñ¨pËjˉ±½¢½ ²ÔzHPÔ“þlK§¨‹ôä€ÕÈd³°-Ô•PÁZ׳DÔŒ9€®ÞØlßZUnƒè5A/ÑÂ@‹B@ôÝø{¯=Ôo¥UQYöÛ•{ "£¤ì>ÿFOˆ¬jþ´®]ÓíÙ¯WMû1HˆÖóÄ/ðf—ÛÓÏ ƒy›xÖF'ßb’ï?_Ñì»ë'·¿ª¬ß<5xíwA¥MµÝÅ)´,!ô $™ˆÌüÆ€&4Ù-Å:ÁŸÝ^£,we;üÐRük»SrÇeÉ¥þ÷kð/?p¶&SÇJë‘ÊÅôâGšCzŠY`1ä‡ÒÖ/é\³ÿ§'|¥ ”¦”lü¦énÒt[$ò—l`ë)ÏáE·ý3^b¿Á#OUbe*I’;)³Ið›W44ÑlAÚ1%/ÍК·{£žù!‘cér}eô¯±h½‘ØBÜzvŽéF{㲇ûvŸ¬”4Âsd—Z¯³u8&mßPâN»BíKaD’@º7/óÁL[‰zÆÿZbò£ºÉuê™#ˆ÷ó1®Àý@×A*@jG‚$Õ@B 1àôÅ:ø˜U,€?½ý!C ®ÙHU¨ü‚À׳‚è“õ§ÖqVÈsG߸ìYåµn¡¥ãu×½H)ñbîk4c末tA{@¤Â3VRKÌÌgQm__~#µ!©z ©|¢bEŒœ]‹ËΈËþ3š1j8{gxG”ÿä}`ÿlîøü¸ÇPCÝÖ±o¦oЫõQàß·Ó¯ÅNn‘_i]?LnOý­}ž;¾ž5;9\ÃQl@*ýa™ödÃbœ ˜¢ˆÚ®€-¤nSÏôëÞ¢ì3Ý=äÍñé“ö0‹¬í†-¹÷< òµ ¬P¸¼~ZÚ"rÁäã qØX ¤¨øCoBŽóâN?ä|¦ÿ,rmäÓC¾©ø†ÓœþKáÂAƒ·Ú­6uó'£YÃÕÄ×8¶÷z#·Á¿<Û—è2®3ÜâwK¡ zõî¢W#[§hX™™Rйö<'’T–­÷' Çy¹h˜³3hDÿ™§È‘ežóͦqÁqo¥·¯oÇéð¡~É£_!•Ï7&JÛ$LòÅùíÚ$éD¦i”Û0ð¶t+({H²Ñ†™\‰•aþú %748]Æ>bcø±–ÇÁOC8Åw+›QV*\LÂ:E­·Hça¡0óùŠzš`ôC¾·Àf ]Ù¼Ä ¦ì€À“cDúT’‡Dy毓$oÉfêê"W¨åŒ*9d¬§£‰ûÍ0Ú¦»ß.Ðzo0Çstuñ¾{µ¼(ÉúFñF —NNnäqÃîËî5² \÷0š#GEÅ‚ o©$Îhö6R,—OÛdE¯G¢é×»<ÞoCfÕI‡¸3¤%G+Dg[*Ö¯Ó¿ûË螺£ózJîè‹6âtR6?.pÂùY„Yþ$¨±C×3¿XtÐᜭëã`¥ò|Á“ò¤vv$+ ŸÂû@ºIæsOí88›=˜ß—™Q,¾Íy±Dd¼•e‹36¨éS¹³À =®É-/‹‹`Ö°‹šLO|ŽNíKµG¼£6©×Ù^¾Ä¢aIþ¤ØÍ Ã…0ÐT¶€×míåL­#ê›p²Š5’7KD2ÅEk×Û6íOXD½0—­]Á&wÛ þi£êVHÚ‹ÙZh˜¯^OC!ûÅhVñ_³ô¨¯ µ“¦ ׂ²»à7ÏPïL!xBê èòô@}P|’߆Á•ÿv¸/géà ;R jÛÑ@e™¦–m›e&p‹ê™Ý?ç¾[hÖ;D¿ÎCÔîáñ4?ØžGþŽ^‚añ?,. ÅÛ*Näe+ÈZ‰ ¼Í– V>ê>ú7ñOò‡DFÅ堪̜ ìJAa°ëŠùò¯ae»Ýš”oÿž+‡ð—Yg­Û¦1N=h·2ÉvŽQzȯ›ÃÑ®;¹®%áØ=2¢x VøXöæ|“W±eº{<+ÒÃu5 AWu7·ja7ÄrÔ®½òÅ|ûkï‚mʸ½A!˜g"{3: HÿJë¨ Á¸ƒÞ –^®Ô›(%üjЫ*:Ò!_jRa¬%¹>ÄÐrVå}Ðgÿ¾—¶Ýî:çXîŒ|“jæÔJÿ&+¼]l!›&4ïF”{ñ '½Šº®ù]&_9ÿ?z]þø‹¡èLàzKòÖó}lB¹ï—ÑÛ¶Q3be…"˜:\vʆ”8.]õ_^I£ê]vAø’S¬¹Òi=סÆ+0-±´Øzª2ë:8¼ì? 0 è¯oè¸Ü\\y~ç{t—çyh„Ð,¤1)ôÊe0¦ÜW`ªUÜ=õªa“uc\Õ¦urâæÒ³y‘ÙŒfý}®hF¶ë  z’¨×üHÀáq¸F¯§O¡°tµ®Z”œÕ+ ÿÀƒTDwƒÅŠEÏ>¨Õ?ò …iÃöà?àÁ¾‡]”>;Ý.8Â4¶¿ÉÏ!o+4îÚ¿Ø™Ij¢ïÎLÇÁ¸ŒÂÔµ%;Ãe·'<±ž=n#ŒxóA ìåèj›…lÑëújwÇÊòŸèuÄp²nˆÚcj'VÍäÞ$O`@Ï2µw8ßÔÙˆELÜÈwüù‚ºÑ˜ 68v«=q@™û!ŒêGó5ò꜊ kØÏ*¨*#‹VF¸\ïzR”µÈ€Þè1A‰ø•Ë잺:ÝHÞèQ•uÜè‘3:¶ Õ>ïõ?ˆ^m†OJ``Tجݟ‡UÞñ}×Fƒ¬K‹ç¼cÃ4+Bï9;ÿºæËñŒêWÚ›@»¡ße°pò¬û“ÄŽz˜¤c°9ÙÙ¿Ù e.P“fú°ºo­Zÿ ®òàøD‡×Õ•“0¦±òû i±'0n/,¼á¹«ÿ¾/—µ^Q­ãRa‘9@A@j–à =YšÂœY\ðtôÔÒiñR Mt¾’ŒFf|’¤®ïè¼Å ô2ÇÿI5—ŒBb‘­vwýPK{¼=­°TäY)1iJê¦÷ûäºòÛç!Qñõùí¹(r(]ø c³Q»™oñ–[ì’9=Ðwƒy  \ÉÛ}(ñ³òÈ6ꀵ¬å7Þ§:?‹ñèò‚¥A­QrpIy A«ÐÑf˜Öˆ1¿R>§àa)E”QTðäüÄÜùT?î&‹…óïßêë³Õ¿'­—.ŸNšåkdI8L•?NzæùïiɃe=SBç6‚ý·|ΰ‰uDòżí–]'¦è®ÅTù°òÖy¼úC®£iqíOÎ{Ù€­üÉpàöè_‰¦ê×À²xÐl¾õ¶E0ëÏP€ü^f‡·‰ Õ’-þ¸[ݬzèýÀowÂÎBùÆvêAi“ºbp^{¦ŸL2·Ë¤É¦Ó˜¾.&‘¤C”:ƒÿ‘ºÄDé:§ ~çÔa[»2[mûWÞgÓµ¡rGÝI\¼V\ æ”NŠë2ðÆ #c¼¦w¡'– ÈÏ›j/÷gRQ!!zÒ›K!áàM.çì@s„7 gqpîÀeÈl6Ïí½ÔH1ïÆú¡ÆùüÁd[Ç‚_¸:ZÕÛéùãm@Õ¤‘jTw刟ãgȽ/©& #©±—eë}‡V+Ú5,-'gǤFb[±9j#æØ-KìQg¡"5Kwþ+=)ìP/„Ó–ÈTIªH³žN*jõ]“É~ï ðá¡ê -…ì“Dê¦~\IÒ!ÅìÕ ÑÅ«Èiü—CŠY¸·×lG’äBäjwòÌò#Õ —°|W‰ˆ­V³Ùu«½knùDšJí¼©ùਃI9-Ïòë=—Ýš-ÂLOÀãÄZ%ÀçÆÍ»ÌÄ®©Z§EÒ¯«]¿Óí{­g”ûT-Vl7à3‰\ïÚ`²°Ð|Gõj¶’ƒlqOæê%»ÜÍ•²²[ä4ÿ)Ä¿D“#}Û–3rÒ{§: fU'ÐǧgF€Eû@$tU&SçfSc)ÅR&¿ k©³dÉ¢-0ð7wبzÕí¸íHm‰Ú]š°™ŽÇo‹¾ = 7{ùö™£~qÜkåQükæï7£صàNËžJ;ÌɾŠßÒl`X¯³‹r¶a'Þìl‘¡Ñ³æý¿Ô¬ s¯…RÄðË;…7þ¢ ŠS® FÛ|Úi`›óþ.°Ĭ;uoM(êew7ÃÊÏ qŒcLêäå´ž’ç­¦‚¶aaôa¢ŒÁ]·Š„ƒh¬¿>ÛØL€Â>„ä2ã™@%àK9!«ßhÀùÐøa½N- ýb¤&+À&•¶xGx5—ñºÂ.1#÷ਿÁGÂŒPôO ×ù¢¤;I¤¬ë³æ+»å4_ ´ g\‘qcÛÏô/Ÿ`ÑK;ÜYœ¶Þ4@ËǸã2^p\ÚH"Ú`Y`‘lnEÃêòÈØ=ZŠ˜xïäúmîñWÂë´ÞGÊFðÂØÃÇ6d<‹pä¿›vëäÍúAÿךmß‚hE”£¯À’Š/L嘉r­ñ¤ÞôÞ}úa¹¬[Jë æç¶ ´ùòɈ®FVQج Ó†«í0ÎçmH{øõš‘é¾ìbfuÏƒÌ pˆÄÑéDصMšÖš»þKL½Yÿ~º½´™O*y¹ˆyCUO‰ŠQÜe¦¸ªÈšØ•ý@šöýªÛn˜n3½s.øcb‡#þÌAõ4|åÎ΂±â¯»ÂÛ$ƒ¡¯^£sè…pÃed˜â.œ_4k¦jEx¯gx»ý›yÖ=eŠ 8ÃÉ[æ jhyyÑK£õ%bUË´âÇ÷°F·Ü:F<‹ÈHú.&Ð üåÔ9‰“î£]#“ûg~á sÑ…— Aà&Ò»»k]\3Mbµ³o=äåP¹s˜uû7ÆÙ³Jßš6‡Óñl°± ØØÛ¢±HÐjepC]WvêÛÐý°êêÓòY©”åîh+ûéÄÉ âÄÛ8ïÔ,hÛê 5ÅáÞQýx|JK5ˆQ8a¼û@Úl’ßëC²w±>˜§ÅÊ«{tgX6G§þîª y~ôþ¢ ,yÛËjl[±8±±ÁØ&!‡EBžfŸ °5ßá·SOÅ}Øð@É2?*;Ó/!˜„† ¼ÃÑæˆØ®GŽ-þ µh¸w,Ü€¤ÀZµ~ óÝœ;‰2ûºy™÷íéÎÙ8›òú §ÿ àœmOKê:r•s´ÇÕÒ]Nǯ2ôŠô:Ë-j/’ÌÓ  à¡P@Þäós‚n°$éÃ|¹ƒÞÊ.üÚ»:8ÆöØ8þŸP1u¶åÆ#å÷ >.‡]º*œZ Û;JÍ n(s˜†Û ˆ ~Æ3j`ŽR¨ç.°ºú/_à=q¯t)-åÛ†Ù¢æ/.`uL°m1üÓ¢ê’ñ´È­Û¡q ïÓ`7±h–^wÒZì1N÷ÏŸ=éJ~Ü)æ)[¤>ë|¬á­]Ùü~XÚeTÍ¥çqN‚mëÜ>r--rñ㻋h¹ êU¿ #å rüw{? ‰›3¢ØÞO”´qŒŸåèXE“ä¹`Ðÿ>㢘kÙ—%ª‰YÀõő۲ßÖ¥¥ø€ãl‡ŽÞtGÆjV‰ÑÒå:©™Á TÒ"ñG¯“òÆxÙHSËÄåb÷¯ZÜ)É`‚_,&(ÍûS‹2lúCþ$f#Q„+âdXÚÿÝöL]øñФðR¼¨ÛúL-Ôc[†­WÒoÇBO]BUÛ‚Ýs³´ëM(è;dýñ!÷&È£K}(­Žž±Ëâ'‘<ôµ½{ÆxeøçR ™ßNþçáÑz›"+¶¯i·n©åœ$ÈØÀ®ú…É‘Ð#àú«m=;|*¯×‡:$¾P ¢[Ù äM[?Ùù*„±ž/Yc£XÔï©nênçWbÿ [Nåp 8LT«7Ø#·ŽÙw½ªbúÍT?š7 $» …ªrkæ©·þ_ËÏ¿}RæÄÀ¨Uß âÍ ]üºzÍ´‘±Íæq@æ™s˜c¶jS!7’7L*$âã+|ãÂqê<ŽûM®ÍM¹µ ¸úíÛýf4ròœÑÜ~S¿öšÉ×îPuF×鿇 Ÿ >Ç2¨Bþ…†ÃPP¥ÉLj_œ ß3æ…Í¢³ÂÞV̉{¹órO5áÑÀ(â2,9ŽÔÔ f`$‘’õlIÀ,†®Ä'E Û~B_@ªƒM$Òõä/ª5¤‰ãÒvSkv¿-0`ƒùa Ä ãw ñèʦ  ôæe‹Ÿ\R£Øï[-¦—» ˆcÉsî9Ji3 Ke‘Ì+%÷%º%ÙÚlï¶ìÝ¢{ÓC4$CŸY6ø…`Öª­ãí©²s×~çãà@I ܉Ï>ZFÆÈ¸U ¨$ZÛïØEÏÞXwÇÊ$¸[ˆ;Ø1ów‚ûÇòVP˜0…cëŽ'ÇqÕ¹õçkNsà5ê#yšŠ¨Ý)øY‰üòP†ïxk´T= ¨twýG „Ž$ŸL"7‚±$bÆ'‚±æb³J…½0Ϥ‹gÝÔCíÎò™ú\%k5Zäa_¿Fýn„:asn´|íµà6L_”Š—‹4¹xêU’I&Ä1z ‚iÿ€Ô#Ü>Ñq¢ÅÄî|2Š›b˜Yþ¾ô–s¦6´Ÿ»*Ì’±51±Ýȹ‹aŠ&3Zžsº.´Í)°ñÇ~°Tþt:#, ô’ ƒEL¬\(gZH7¹zEKÖžš‚u©ˆê¾[ˆ›'/(Q€Lm»ïà *GêŸ{ç°>& Ƙ`v/V¾>Œ¥h¦ö‘žÊÙµÈé·Ó£Èˆnæ#ËÊ@x¬8¾SpÂ2ý¯v/hÃGU)d0  ±¢|'D{!:Áÿ41FŒDÄ+ìí_2¯M1ÕS>_ôjµÔ8Ú¹xjük`Ô¢™­ëŒâéøôðÞµz®0­dÈË©iQ‚$°üw¶v) BR¦„½Ñ66,‹íª`|Œ¢ô¯rKµe’ÅêýíÔÔ¾™ßÉ’üî=£§!O ºjÒõx¿hêvr=©&OÙÒ'Š+˜î’xˆ§þ‘‡Â…åä´˜\ñ@„†71/ûU›"ð`ßHØ%•=€@iL³[´ôÔ ‹"šMo_ëõŒÜ?t3:!9ÏW:ÖàßÑU¢—Ù|—z¡ji|X 1/o4“ñ*ìjbïw>™t#z ')ûW,˜œþwGûüÍ CÓ™:rÝçe/c+lýÃÿ‰ù~w’§rö“ý<ëYá·;ÎΜ¥*D£_ÈÆHÁŸï€«´È¶F¯ÎÈxù$D =€_ÙJñÄgÅÁbe1 &ò­^ x],–ã’²§H ÄÂ>šZúúÌåî²V^êÛºùÖkïÝš_‹:·I¿£w½ÛVb‰¡PíHó‰£ê-`‚âÐî>è sÓ02*A !oáZðîîã6…<¢•›¨Ø× d«3–ˆâD¸T®!øN½cAÒnû³ì÷±"*Þ²&Ý_)¤“(œÆ z{~ÿ;vä7ÇY‘’ío˜\(üQVË6é'Ña ºØ?Ûz&ŽÇÇ}íxpÖn ApcQùƒ‚2<˜„”×d#^²¡Zêý胴³å(°iòœ0p™¶.LéõÍ7êìûp^B`;/GLç«4÷ÃuèÃfi´¿%² ˆI€ix1#bjÁ‹±Õ¾Ü ±gGŽ”ÛL=™¶£ñü0ªòDs?L »Ö9Ükv¾PS®˜4u™÷®´Þ`&É/d·%ìúfƒYÀg—ٻᥳ8ÉqÜdû\åæ%óoE—¸pWÏ>¯»WëÅzÉÈC¥;Q Ñ燥+=Æ4k¹æ‹\"òPù¨¾Ĝø³n8G(cÅè:S‰€5O+6´*b„…{j\„Ò ³-Áz#Px­†Ž\±-vÆ1ÆxE“µEÉ)¾(FéßÞÕ¼gȨF¸*7lÞ‹(CWÍš¨ŸˆÈÉ-ž§¿ÿ8©'ð2Шpi÷4úNÀ…æÀõ,.YŸ%û`ñ@ôü¨÷V±øQÛçÓÞÖ³Xaš‹´`'a >¾´¼×ÜKù_mwÛÚèzϹYöذ¢£LÁs&yFç¯è¾bлù*2î«ñåþô…m*és¯?¿Ëq‚„„¨ôƒwŸÆÌ®£/No D§å6(¬ð`FŒ)dBá«ÉÚ°V¸ANˆU‘Gýû”sÛ°rî°–öøvÙì_‡V÷];#3òõë©MRT]Rëûc¸8< e4t~’œ87’K&A53÷>©LÜ —YÅ ³Š\|— k>|æÂíÂSþØ%©øË©ý…‰GÊ3ÌHyâj{¬óE"Ç™ š:i- b%uÇ)&sà‘X,‚îYàÙ•>Åk»4æ/ Æ>"w¦ãGgEËÔrÄ<Á–À¥“;RqChÀéP ðq³'ñ¾XBíï©Î"䢻a›Û>âé¥e;„J‚VÐuø‘8•ÔS‡Bާèí“×L{€{€x/Žê |tèº6Ø—Cˆc¹–;oðÆ¿P©`JçÆ|‹1Ÿ8¢µ±È \b$›'3ú-4Ëõ5ø³ÙÇ(‹áì_w‹3¨BCÄ åú9¯S!]͑ƽEÇ}b‘nBj0¨ŠîÎ’«"wÔa¤ï ÇŠ¦¹u Ûg7ÕÝ>]Ž*ãz²u—ÅÀÎŽ¥ÌþÙ£ž¬T8ÕqP‰Úi\åa ÍJÐâÊgoÚ"î;Ò'„tË4©hhû¢³ý\ñxÖúûQ J›‡êi‚,p(¸ÜNgƒ_ ;=ŸtXü9p{²Sò|©` -ÇíÙ…UED¥'_ۃ͚ì^€-Å£uØâLðÑ'> V’Ú€÷E¼Ç/g _:s»»ð={ç¿1Kù;†ÀË©‰ S¤äøç+Z¬$¡jrxŒ‚xd…Ãx ¶¡‰ž­HOFy^† zœÙoå!0"ºæ¥øÑêW#ÎB.bà «­g^•#ê8£XH1Àë‚>¿L¯:ÏÉ‘%]ün%æÉ´Ô‰"\Ãòþ–Uh•8¡pÏŠ¾A$‚$»þSZñ}+ÊÓ©dªåŽ6Ȝǀ?Y kÙE»{MïûDù.h:ÑqѰ^LÒ;)£IA[Ûã÷tⓜ·aÉkÉÅ(N÷–Ó”î&q탃øªB较í-íò@ÒyØkõïª*ÅÔæ#ÌA ‚½AÀ$3 jp3}q%®9Ýã? Zµ4Z°1DF(™KsŸ³¬&ûÐ}ÅÖ:tm¾úœÃɩلWÁ±Ú<‡9Ý)×àî¼þ$GŠ@KÓò7<õ¢¹œQ%‰WPÿÑiÁK³†çÀØk扙L¨x+û`¸4|ìɃ\ÔD7‚ NÑý­½`*ïiw#Ù–.Ï›"ÎÉ€ù Nz§Ÿ_CM_[Y72NkCâþŽ ·Éªéúî÷pvB€ å;.Eö“ý°ºÁ“~´ïߣW‰Å$“Æ%JyuèZy!X‹³¤#CÌ„…8]X•Ëô ¤%Ï ÒD±ºº†‹(_fP‹Dç&²ƒÐÍû)¨žÿ¢‘üÇB&ÍoMää˜-dŠÏ‘©ï‚Æë¶ï=1ŠMøÛŸ¸*ˆ xtÍ›ˆpÂ3<:-Žƒ.¸8â}U¬4/:~jòºdïÎ’àÑe[àÈ¡raËd_NBÏÌ2Ë-/‡7 Ä,LTœ°€j͵9½H‚¾\üóŽ äW7æZ¡‚Pý`{&ÌM¹ñ‹9Þ/HïÂe#ÞñZ;©Æ]3nMg¼¡†”Åõ‰6Í¥&ÀÂíQ‘«ô¶uòº ÍÏ›vÿ¶®-Eœ¨k/ƒë Ý ¤±§%Þ(ì°„ëœVÿŽIT™7ùêo£õ‚ÑZMDö£]tÁyUÉoQ©Ü¦b良")±2Ø9ùz gAÃ?Zogh¥‹5¸fj~ÈßÐÄù“€M„&™Ž3©ÐnåÖš© -JÈ(Jmó¾ûìH0Õ, ŒýÜŒdRŠHÛ½µ@Y˜ç…ð¾[g´nVÆx žósðµ/íþ÷ê¿ÿ¢{¸ËõІ> ’„ˆWtAyêpš×/g6ùÁ½æŒ.ìº&ÕOT~™a§aS;òÊב7áöw„\¬ð¢Ì:w÷Õ °-½ @.ÃØ_c+Ű孫9Ïã±=ªÑyôˆí‘wxRKO¸kßæÐ¼CóYíb1Š µ¼Z¹ÏëçOê‡`šôÝÇÜÁú–-Ö9UÞ.¼žÕ)ó¼XÚ›¿ÒŠ6³Ør $ó²„"*È—dìI„|ùTçsÂI(u@«mq½埰÷õ Û>ßÂJWUY´”—ûµ‰GçI*|ÞQ}G(§{7Gx]õj',` íw­wqÄ›IÚôÙSÞñ y8¼~7Ø*.ÄeÕ[h±øýiØ–XØçʼn²º­,õ€Àq„ÇVlu޵”}ŒèÑ{c¶ïå"x8·²cŽãâ`EYüª¥k™v6î©1 1èJJ@Öä&ÄMq‡žJ™íÄè°×ØadˆHþXë O>CR¨í¶„ìŸ&ÉF¤áÏ4܆¯¢X ÷ÎŽëö‘åÎÆ~(ÿ%VD1%¼Œ®[Œ —öi.딫ܮׅóv:ú½föÕ;ùÞ ,ȺEß ®FÊÔ «ì?!¤ÿTÉpòîç2\#ø [ØûÜ„êÅà"E,g ÚþOQÇ2#Nßïgcð24Éîv"~bÇÏK°)Œû-aÝ´å‹åˆ˜cNüùIõ$f™tã:À*þ$¨!KÌXB•‰ˆ³LýŸÝ< ^¼å^xöëÿS4Zuî´ Ž &ó€k¾¸ÄÚÐétv-„H„*š®ÀË¡¤<þÅù5®>Œ Óÿõíº_ó¥Amö0–Ð3‡ôF£VÚ«óðZÇ¥£þå„áÈ_X ä öÛsËS;*A|Ýb”¨SƒÇB×ït.j—[ÿ´õ$Tê¸þ÷Eüojy@^#5‚¢oÛ<6ω7‡ð>®$ee¾¥Ÿƒ‘h;äBªºÔ/Âbè–ªG_7fì+Ä|ÐŒöúF°ô¢-Ò듌žÖÉþÊJ SñŒ‰^â¡>ì°L¼žŠ¸H»A;™\En3NQ·ïWd‚B4™šh‰nl—ðN¶¯fº¸$„ Ù$ì$¢‰—³ÂÊ0•Qb´ÛSF# z¡¹¥LÚ\£}™Ž=$‘vÑ‹,‚EÏÄO.7¯.Ò¬¸i O T=ƒYˆÝ1¸(Ï®D0ë±8¢—X’ž.æãø h´¨âcÞ˜A9(Ó¢[ÛÒäÏ©M®,VëúXÖ|G?h€¶ U„qëó°÷ZVÊñŽ1I·Û~‡1ç)»ˆn˜3l}>±[,&Ñ‹qŠÞÇOµ˜£7Âm›ß!Ç:'D‘Ž–LäóØG4L0[Üfêlݬ\®™¤~®HÖkm )‡ü¬Ù£`7‰êuot4,4_Ö]Xà5p¨Bãè»ûÆÙ0OºÌ>Ð>]¤Å¾ÁMYÉN ËAS.ùò†€Ÿ‡1Ï«OEµ„ÌgìÉT% °+aì xçM-#‡´ä=‘"(G¹)[Ñ=›,‹íKŽw“l•¤ fEÆŸ³ŸT®y®C†:~¼Ã™ »åíšÎÕYrÌæò\çœÆòÙí+νýŠpZ­$•`Uƒ>·,¿1²Rõ^Œ~ øÎÕL.ñï*>ˆ­Ü(&ËM¯¯|Ä#R}_Ñ…é€aaîŠPº\µ2OY§¥%ù4¦"칾̨ÔO¥m‚ŸUggªùgÙ®`Ú*ý1õÅùøq‡9?ëQº¬œÉ£I<×êÅåó‡ÄÂi¿8ƒå‰Å>¨½æÁC#—–ý›X¢}Pƒ%þ1‰MÕT(»Ö†Â»êèÁäWjêb: æ¡0^sÐ˯()< Ý›üQ‚’ÂJ2«;ñûÿwÂf™BIe»`K¦ú‡BΈ(xÅ‘´%bînCNO(¯/ ¥¡U¯ö£r$5ñt3á­/3ÄÚŒ0ške22 D7ü¬—‘ñˆ Áø¸#|H'aê%öø ½;rZ¾9ÅüΡoëEÆ;×nD¨ŽC§`g->L0kt}ßÝ[…yßÝ[Ó”/fI¡Eõ?~vÌW.Ç™òðÑB±f¼˜pê¨èùM˜±˜×iôX»à3Æ'1$îTµò漟wb{'ÀO<>ļŒŽ…¹Aýþ”¬¤WzÞÙkðƒ…³]^oö³ëóÎÔgɨR"cï—"$7¼UØ·4Õ¡5%ž—øµ®3ñ.íGGò ¶§0&Ôcm¹ÄF­÷¨÷–°ïtž枈ãÿþcËúÀ¢*“ÇSyT,`_ÜD¬^‡é¼YˆRW$!ŽÃïÑÛ& 8¤M3$_>¸âŠ-(Ï+V9©À—Í7Ì àT\RHÉ ¼½ÌÙ[‡o„Þ„žBqWH~feSê,©„m3HkôÀ(s‡À ¯Bâ%ªGöó­r(û#4sÞ]ÁŒÅ8õ*¯xâ{(Ú9ˆçø±¸!w *lаtÜæóˆªŠxÿ•ò¬ÙNý{¯]ÏDÏ·0´óÃÔµ§^ƒYnÌn¯¦Rwî.-ËÏ¿ÞמâÜ{ºX¾ÅXP"7hdæïxª×ΤT ímŠºìøº•B´ST‚&ËòpG©Èðô¶EÑÞÝìØ‹…ÞÁßѼvd@ä½n#ýÀº™©%#¨²|ÀÙjÕ Ž}3îa±~…¬· ?@[#ðjy¤Š~̸¡Px,Å–MÉËáP)g¹!<ضÈÕ]%[”ÿoì2•$=;»LþSÎBÐÍ8;ÇeVâǰ‚!­å^ñA§L Èæß\lþ=)Ûw„(1ço³”GÁ5 ¼k<ˆž^PóM ¦{lõ»x µ GðyÂÈZ -HÏ£›Àt‹¿h¥'îûcí5ó-<‹wºr÷ÞdÙ¾È2¯ªèëÿz/­EÆÏ;×=.¾Þ 5ôYDš+£‡0^H£+‚J`×Pbx_ù&É¿÷mÀyß©¯|Þ)éŒKø²7kR…‰ITkùWЙ0ƒ Ä”)ªg_òêpl“ƒòÜc²<—“ëÌò»b»®œÊÙØ*Œ4íjqœþP xà³džD08ÜËks þú æ ¸1adrïÓÃ)K^Ûø¬€­PqÐr•5žØñ'Õr•b» Có'iï ÌŽèhA_ÞÆÖ;¢§*–wuêÇk',¬Àø<½«1ΰ¿r|&‚f)žå3›á!bÿ«HÈãmÌMß}™»Ú6+yh™nX<ëåõ)× öOêm‰êY{GQÅZYY8*ç.s$¼pš6GDÁ¬H­ìBÆ”‡U=×L‰sXï°æÐÄý•pc­ú;¾Â™±néhi }÷t˜ÜÏ,ƒAPÅ3‰;4?3øï÷’¨ÆÕvÐ{ç­×Ý’$’—Ht£TK›Üûâw%CGÈ _ZÕ#%ôð/[X AŠRõ Ì <Œ|DYV(ñ, ™Q›-³kå÷ЛôBà ïü]VÈž"öðíà‡ºÇÙáÈ£_ЪºŽ*9HTOǺ,Î&+´Ò*ÈÐû¡=™è}q‰øg'ÀÄ-Š])ÖŠßÅ£™Hš ¾=³€Iõ—Íj<„Å*joÎÒ[‹)jZŒö¹oþ´?Yyð¢Ã4‰ˆU!袖ËȼçH‰K ×ívTD³‚ÉÄ O WW]Ëš+'1£>µ´‚Ó\kCìt˜Ð»­QÒ€Ñ àÖ(Ô¤v~‡e¬´«ë7šæ.r™ž!®†ê>˜²‚}9—9$3ÉPõvùÜÉ7QoT=²äBó+䚣v6òyÎmókHÝe‹•œX“á„LìÝ…¯Ôç <­s ýÆHÅûèðºÅMøòD»Û Iªo„<˜Pµ@DÈx³‹ bl—{EP£q­©åíoTÓ ]§#bt§*øKé?žþ<±i›’ÚÍþ÷»…Ÿaý–9¨û¹'ç'ZÛÛÇ$;cwRԨŵÉ7¤Ð5WÌiiö}õH+¦`¸ÄÈZ´ß¡ƒÚD°MÂÀRVXÁ«§¹ÞdJ&e·}*x_… »ÉäGêå! ¸Ìö_‘(qk‰] Ëxà ž~ HHr‚Ìl³yµ_æ¾èÉæ^o×Cò`™pÅÁ˜æx«ÙOj†êX¬(4ª±/y87œƒ:&â?|²Š Å+™±ü?}M\?"§fêÈs¹þ+u™c_¾||TŸ1R;À9õËA!4}Å}P"MHˆÈàÝZ¶‰fÎÿ¹[¦º³ÓÀj~eŒ†Õñ;5áO»çn§Id)3Ü ‹Æ´ó$ ãH8‚KâæÕD2Oèi¦@õh)KÙö ÄÊ¥ìÅl]‘SöܵÎuË·WíË]9£«ê9: ×¯áQ<†Ý}VÎê›á\é\Ø({—Ëm×¼ª·Ø.:(K1ÌÞØÓ&Wž{5‚jÈ®÷Ž<†K™7W™2Æ;äùŸ¦¦¡Š€Ó¾ù©éiê?C®…¿:=8=8ì¦ZMpñÌ…gÓq‘£XÐþÎfi}oþíŽ7?ñ´4º³¥¤ Ív~Ó|P¢HËOì?ý»(Gù§x4y{é!k0\ó àæAÌïü‹ô+™b¨91¹Ñ3Q÷ ä˜jV¯g’ÏFì{Ôå_O ï9BçºÁ÷àAoò1Üq1«éf?¾~à ˜‹éê^v0&>T§H&¿W½U$dÓBƒIPƒÄ9#|ê”òp.yÌ\ —ü1JvòåœÁ³0Bø ܵÒÿàc#–b(©QÂmõéů Õ1¡uÇÔˆ¯ÙÆ‘ƒî¯G¹){ÿ”RÔºº qZó·j ÇJ©gfåË#`Ø-yÏ[ü½Üójè ¾: ”:FàÇs“ø¬úkÝ™Œ5‰ó½¹a[;3nY q¾òÝÆ)¦AÊoïþ¡¬[Īœšý"ššøêO™k¤<@BGØwøÕ¬y³°X¨‹p•³†ÿìOÛOÀù†à@¸ZÈnð ×€Uì\ôLÝâƒo)ÖÞ˜ÜeÝ›|æd»ÆÕ IUÜzi\‰‘ÌèªExõTœî™œ—.¼=íí(¬ùažð}/÷¤¥)÷W!˜UMÅóÒGÂ|ñ¾ Y5$cPi¤Úú‘ë½ÚƒNƒf-³„öså ®ƒjÃ!Fhݽ èsà?î.ÉÇnWVeû—>bOK¤žr„<³Üqr×jZï§€–Yô<˜Ýß·×dÂ#´÷ŸÆÐ§0Q‰uV– ¤À‘!ú,ã…ø0.±ˆF!䦃ž~/êÂF¦PÞ©ªÛ yùrG£ ~³d"rP^žç/³?<¦õ¥‹êƒÊ·cî½ÎÛ,þ«¶´qÁÚ—± ¥`Š œé;C%…§8P¨Å„wJuüø+àFø1 %DÜSËr[ æ3ü¨";ëuà'@8¯ï Çuö@ kAŠ~=åä)»ÀФíªpœ©\@RM¿C¿!yâê™lïÈqð@·á™ Ã—‡9ìï ¨o™£Žµ6K@? +ß#׳¬·0ÓÕ}¯óQ_Uþ¡z§|1"ÊTÙ’ËH‚]+'øT”4…VH½Ö„à¬$^‚–¤´* ³:÷] õ9FD²™ßxÿÄöU±Ä€¯ ðz—ÿ§þçºæn(ø`ez·û´³;ó7ñÓwÄ/1ÛY­‹€¦k0‚,áöY¬l®¡U_ÖxOg¡<­Ø ÉAªÉ3HŸÞ=Ì ÜzˆýEò\Ò`Ðg=î½’ƒÚa軵d½ÎÄõ=¬Ölq#ƒ»R–/8?V2* ñÜѸåu–˜H}°äé5›Ï¯"£œ Džno#Ÿ¥BÒ¥Uê~¢V¯÷ª›ùÜÙ––¸€BÚÖÊo‹‡µE\(ÍÔë =D%˜ZðÒ1ݱQ…Ƈ|ˆŠnÔ‘–×Úè+ð+MTÿ_þ“׺kÜÚø˜hëàc4ÀNã°ºc@™ò¼>ÈX·âç í' nÚXM<Ô‰CsORú*ŸSñafúôͯ$àB hÌá ”ç,ù®ïijÆÈí_È¢UîÙBì´1l[ÜXÇe´p0ÂäÊ‚‘ðZŒOxlª×hP¢ŒSáÏVFÁ\sÆj*±Æd™¾¸ ±aŽÏè}SzÁÀshC.w5 %ȪB §:PŸéiŸgA*9d9Ωˆ}zÌXó`zßRx$B©þ¾x!¦°¯šÄO%~TÞ×õM[Ìí^Î;Ä£˜Å!€XÐñ#›FÌKxÌEJ;+iíØ³óò×½©åì,ÂYalo®­G§‹Böàêxõ³Ö [ÌKŽí1btÞ<ÿ'Ndq2qʵE!¡ß/²ó},cÈ—{ÓÏÜÔ¸ÊðÏÖ_Áü £0 Ýô=&¡$Ê#¢MGÈÞQOdsÕ?aaA}ù–.¥¨×5ž4Q\Áä‹¿y…9‡1§ê{ Lò×[=FIÔ×lýÁ”ëÑfŸí{ ²!f`×›…ì¹×ªIÅÛxbËhÂ*íÈñiß¡ :ÞùÈd‚ú ôYXIï^–$¦QñÍ”ŒcÆ3ó.òGKƒøOT6ßÓ½9BþÎ=ÂÖiÙxGÈÓ2©¯"ã©èê©_æço>[WÛ^nÁëYÜFkàÿ>å7š 7Г„g/TZ?ü˜«þåhpw|í# ØQ§õšÂf:ÙÍÔÀÕ:…>³¢O¿â›Rð5¼PG÷HÒ>)ë°ªšXTýHúÑ4Ž<0ã*”…þ÷ƒ8*¹r–«B·ë_Ë?¸xaž²oo$µ<€VÚÁþŠ•1x(°8y·ýÃŒæ1;è‡Fxà­ñ£ö·h6hC÷.>žuÑäRNé ¯ ô¡’•{Cf°~†W>¸ËÀÅDœð£6¨Ô¾ª„üÓÌftI¹¡€£üÏWd€9ˆ€zJß²»#‚¸Æ,{•eÇ*ÖÐ ˜ª•¢hèÝšíNCqTòˆoe"uçèbjï÷ð·[£B@:<Ÿù”Eø½4‚p·!·–Óm¯Ûs.ЗÄv¾!ýÎ6ô¢_µô&xV¥¨í–î8€³ ò+j@âõi¤_ìpûŠºù°æiw(D>[ñ“ QI Šp*¨úáò¯ ³€àÖ%—¢xn>%æK±9lk¾G5:F0Ï R€ÎÎù=+5H)âŠå^á§£‰I©ˆÖYî‡aI¸¶Y}¯Ñ 7׿䩹¼5ÿûB°û²4UÞ>$dp…^4ì#~9Õx  Ï}MŒZUØìŒ’FpİÏÖ¿ù7TA™Xä“U5í®1º?ŽË ¢À­u¨@&!VÎýBª»S¥Pßf/®Ÿ¶‰©g  ½3”ÿE„E)º]»¿ÒÂRÚÍŠE$<Åtr®m7†}!à9V¬ºb¹ßâ:i.м90€ˆ÷…¡¾ˆÕöçoø¿TúE‚Ûš’„Ô¢iRÉ>¾±‘ÛÏfÛsÚ²´8º!–Ø’_®*—øÐ½9±DvV×äclXC½¿]Ù6+ЏXÏ® y!Þ2ôëÒ{¡ÝK&H2O·Ñ\q(,sjKóØ’Ñ“Åjˆl=|†/^gS<'“ìŒKB­!Ö™ Î˾_D½Û¥ÙòIÑâ$³±^I_(—Ò‹‰wZ‹²QЗnK‘x²ñÓýjÅÌœXj\"ºÞÞ‹‘×ðvg:ZŠ«kö‡¸/Yo¬ôbËè` o¯rPŸJ}I‹r íc¿Q¦-ßÙ¾I(qt°°²¢¹„Ç2Iß{˪ƒ† 7_bk ½Ó ;D}Äø±÷D'ÖêiN›:±2­»Gy_§ßç²nC¬t.L~ü[ñ$ga2*¹ e—‰Hêø…6 ð„/„ìÈÏ×ïÿ’k€ßóÕ¿¥–žuËȤ›ËÛý ÿ~y¸Í‡¬”}ßq·»³åŸ7LKæsñ¨™ÿdò)cïBkT¼™!Ôû«çrߦúí«øoϰˣHWýeóóßê«ëËk"†ÀõÐ;yæKZ~÷áv_¢}Õúþy½Yô1¾GÍIðíYOÖW¾£ UœI⢾¥šâJ/qôõGâ´´kˆ,ú…4É !#üúövÓœ¶}Œ=Vsá%¶Ë£'Ô‰M6”Ø9tãè Ÿk¸_ñÞÅšeQÈ‹t)~¢ÛžWj-[䲤òO51nˆE}¤Q_ýÝÎA/1ÅëñQIDøÝkñ§ ˆ¥ö§±*X¤t73ÒEÃ’!1‹Ï ›ÕâºhÉ6‡·À4Íh?XÔÞïÈæBIc_OÙÿ¥ë[ø0Ùç08\¡C£xôà]ˆµh¿`+7;U&¤WÛdq7„ŠÉ©¬FŸ¬øš÷X»:îÅ0xb8žñ ²0ÖéÀ‹~1a¡‰û›ÏSÝÿÑ’¹†×¯:oo¤Ê‘eEˆ)á]Ÿ½£—‹÷Íu?ºEoÏ£G¯”R B=ÇþH€û »â×{ö™÷ð=ùÙÊWFÉc…ߺª9ñâÞ?Á –V‰SvXS&#{h…û÷gú¶»aHîe‡ŸÏþíYCÛõmqºÇüí,eìúε(€  ¦Š YÝrLŒ8!ƒTjš,ÊZýÖ©f[øé!ö#H-Þ…SÔžáJ/ôø?šÔÑPsèŸÛ.cØ !Š:jÊñc­OÚèkž ‹³^°xhÃí!_›AeO) ÉÖA/èj˜˜Ž(— \™Ê~=QŽŸ¡<˜NbÍEŠ¢þB³‰Ë\ï u¹lƒ±óå–Îã%ÚŸÜ’…µeQÑAŒŸ¤o™•µÂ Duü8·gU*[­P.H+…õ¶æÙrSmý3„8xÛ&Hƒ®ò±‹`ù‡›®Kïßþˆ±g…_™•ûHʃTI‡ºÀ£•Yz#æØÞprÎFûO>`J Úø[qž;8Ý*ÏX7=䌾IK9>—lþÇÙvÄGæìX…šL y‹)¦Ùþ­iø©j¨Ge[a zºzÃåÛfÊŽ]:ð·–ÌÊñ_8I¬©”V’E¹í¤¼\<͹>S—Ij7È Î”øõõ” æßäÂ%D™"ö»&ŽYy"1:‚îæ)ôõófó!h‡¾Ã$ý$:-ù¿lÑ’VË'eC±ëŒbËj+¯ˆ”ã_‡@¿¥ëÓ¹mŽÇÔ“"uÑ‚3‘sVÛÇAÔ#Žìšt‡ á_᳞2õ9¼AúÐÏÌʉØSü3¢Ï®çvÖs¡ß›oùË‚C=w‹ ¤h¬oƒœ¼"ï)N;£÷µ€¿0¡<èObÂÖç»öaÁyÔw ¢qÑÀÀÛYÙƒ® ±ZT~ ©ê1@”q&Al–ÎÙ•GØþQ =+ÀnÇ'QZÛË ­ôåÙÁ]ž®~ð¥éE†Ùˆ#Á9­÷7ýÝ´ˆÃc`MPYÃt1Ót`MÕÏÁ4 Ôûƒ¸³5¿G UfÑŠ+‰p“U®» ðK†óü/Ìʧ8)$ÿ¨ þ?Õ}ù?”køÿ<Ï,¶†Ê–¥,M–¬{ÖêP“²”mNB"Çšx†NN„ŠêH‹µ‰Ê”äÑ¢“D!FÄS’bb$KÖï=:Ÿïçoøxyùe®ûº®ûºß×ûzß7¯µ¬Œï õmúwwTŽ»—b›AEI½ƒnJ…kXâ­×Þ?[ù }§cq™B-wCmuå­/@†Þ+>KŒcJûƒ(6Qðq€ÿiîÍ;qNî¤ßœ© ÕÚZ"·âö»}+éåyå2 b¨”¾–Žl‘ÖFCþz\?ôü±3šz¶ýc² }ωlU*³\†~”Q?;ÑšH•ÏDªðVRtÿ;±EǪnb®¢WïX~vöýÇ5ZŸÌåLÊt*òòK{`ã&å-e›^!³Do¹áÊ1ÞÝ{¾ÎÂÂÄ“[ú¸Rv]ŒÊ£P—”±*'©AÖR+Ó°»¤ŸB÷F=ðÅÕ4ç‹ üÞÄ?x5œC]îçãd«ad¶tFäë·<õ3¢ù¹KýLC_¸{éV¬Ù­åɪ“ž‚Š}V²â á¼ÅºËJ$ßóÌ2 uT©³ Z˜-\ÚRF†$ñ3¦=¸W¾¥uëFìî;^]Ëso˜[Ѽö‡2•ùc?97†hö¶ëP‹qµ°!¨Îƒ½_©³•VËKˆ}z¤Å-ijî峕ûÜPЛ׽&ô~ÿÄß%Xq ¾'1GG§ß¼R nåš×·m¬ÁÓå>XKÄy3fRÊ’‰¬7ߟò¿":5—½˜ÇÖ²©h+’—9ÀŽSªÈW¢Š9iþY=Ë£æPãjÐÂ^J>¹`]Gy«F;„öÁº"žžMªIÚû£š-Pb$êPñZ]²©òÂý-eî ¨ŸÐ¢!Jûùæé4äØs€I¡Ú Žo–­ºüHû^%ÅPË}Ðnç¶5œ»)ÏG›¯B A=.«F³’j§.¿L £ŽªCæB‰j4wbÆüùæĵ&0 !§æ¯Ñ”U¡ÊßGŒ@ëÖØ*ŸøÃºc.-åÉïeRÈw Iµ”YReÎÙu«ä¡4=u•ÖOSÈ Í÷193¤ùå¥g®ÔÁ{:4ˆûȦ[°jQ™¹'güú˜¬Ð:~çoìm×¥ú¬} hÅ,<:Ó0PHñ¼às)vx…ß‹Èõ¶ëQ}ÖÓi¨›´öé ¼U¾Öª=Xx|(ÞO•rž;IÌXr{ÖH¨<ÿË`½þÕÙŒ}Íþn(§6D™ê#ÉöA¯zñÚ÷²ú…Úa#27òT‹_"ÅDó´<¿ÜÚ:.S¸“d‡ÚAµëÕ‘‰—Õ J´º€—qcsý¶ŠrõêAMñ›±¢39Ï ç=6Ì[1y¾Õ“wKû³뜺 ‘µú*Øé§/S'µc i¶Ú¾js‘ĺôŸ ;öÓFá “ÐCízqf—›sÑ´1åÙrùÇ (§&d ˜hñÐeÇâ¹W¢\E4‘õý³ÛÌá䀈ƒhBo4HfôÎÀ­]±êN‹ÅÂ\ËzÑÑÂ¥I`ã…ºÿgƒ4À2jÀF4.8F‡Rö6™‹Å»ð õôP;a«ƒMO'^ –µ!*Tý-K´yñ³p¼oîjÆm¢ž›±nQµ¤Z¼xku%ÚíÃvÓ¿¥‘(iä[ykõo¤œ\DükÇ€Yvº$}vA+]óo5h/— ¢¢_S©^‰·SÜÞKJÙlLž£‡–Ó?ªâ@²C£½  ±«CŒƒ U5¡ÄR"’mƒ£2“q8Y#ÁßLÒѬ^#ÁÖJ5F þM¥áº¢ù>²ÔÑH§êŠ{¾ô3È<¨g7ØZ|/#rkò 0ª&s ëu™]чñ²Ä³ÍyÀ6âk<÷ üŒKäŸÿåç~¼’ÖŸf!¯oYo¢IÑ÷% eCêGzl™ti H†Ö†ÙË Ù½0«äÕ¡ËU´Ç³ý¦&´È˜ã‚ô ƒ«Š-–ãÖu"X Ôñ¶Œþí?Fµ(×x©„“óýš8‰€-Kxïö0)ÑŽè!ÈÃCÿÉ0‹uôßcN ê4ó5ó~ïÐò÷Iô^¯``²i|X™ œ§<=†³Å†Ùì–ûš(£õûY“¹ªõÆ‚¤%Ù¶høÖ|~•Fµw{½# ³Í}¼mÉ?çlÑÀÿœ èÙd»ëðrn1ÕùeBXô"ú/³ùB¾Çº«ƒ‰–´TÞvª‹‡í}Li놉¼ìB¼qku&8äOfz£ð]°#:=¦HPG²ç¦|k)Be¨.@“×›UKÔÊØ]Ïg‚-GžÀŸÝõ?K<3‚Ʀ”EÁ¾Šüz`W‘nÇ´ƒ=™9yèô­–Ü êÄo*§=®+3ÆÞÔ4PÊ2`ñ›•"ü'|²¾ à²ÃéhŸV>Ÿ´“ÿëó™ÌÈÍö3žÖRƒ"ùùÿ“öj—u"(^ðÑ£Ž– '·†À‰*õj«‡ÏŽA%@ÉêäÙ11¯(e!°ïzþâÐâþDíÿl@Ûø "©‹s7×2»Œ B­Õ4–Rúl`Ïï«H(ñ~–gùõÄ#Ï ô@ôïÕ%À“æ/ˆ6ÿ‡  Oen×Âæxé}‹§%=H¡MŽ2‘<;Ë>H† Xà#¹Ú“q¶¨ÿªI£„©± àçžK¸Z|Ì«ê3«ý*Iw%J6~hÎÃw¿ª.¤DÛ¢/¯÷A›„o„(o …XMOÃ9ɨVí˜Õg¨× ­ ƒ›÷º&ñ ˆ<„;Ïüè´|ZÒn— u4Yƒãz´Úmuwð y·˜âe zËù@cßA¸µJPZ!i‘òb>Ô‹Ì {ïæ”…þîæÈqvã @+>DCè†v% 6íçXÐ^òÞQ]ÅL0'“#ÐõðŒX;…ŠÑÁ`Hõ’.67?<q²—R&ŸB‚¡Á2ÚzS朿 Ž Ý%w—Gíó^pw‹ V*œ/ÇßG”lúÐ<…ÿ ê3]‹Ô¹uæÜãº3@2'à{d΃”3Øž%Hðªiú^´C´yJâHÏN@{WûD玢%¢j©O2ÓðYÿVQ¦+ìúõÄM)€”ÁÌPǤ¡Y7}Å0m²©í‰`OÖ¢s¡DÿŸ9WÀª#ŒP &+Qòñù§þAmˆ:uI­Eú¶_9Mq%}úkW¥ˆÉ¤ /Š¥²(º‚vŽav9Áj¤Äú”m‹5!‚Ú°aßµô`bðÓ<ö®¹ðu»ŸÒVQ‹¾`Ì‚æœ;z ‘ µÞ¢EX39j´Þ<¨²0Wkût{ÁÜc~mŽÈ[G÷ Š-œš‚8*‹|¬©£BPÁ¢À"Æïœ`”ɲsñpÇ<˜¹Q«?Í"Sø{mÕ×(oU1î¿õ¤™n„úËÏ^ÂC ¹Äæßf!?r~±=µ|ª.ùüSlu#ðã®BË@^nõlÍV»HHÔ†{§sK÷A’ªûÑçñУ2ÃÐYBkm›õ;Îo›W°×å"’‰ßä(Ÿj]¼´&Ì«êjÚ:k™WtòCñ*^Ã4Âwßµœi#sµ~O†kœH¦:&më‡çŸd $çñô‡S8«" î€††ÇÞ¥Êâ¢ç3hEŠís\ ¶srš'ƒàë«9Û)Ó£rД–'šпaX'­¬×èbé¤Ð[¬Sݵ8`49Ïtéõ?ß¾IÂT‹–Æ“·ïˆÉ¿¤ÿÈJší>SkfºÇÔ²¥¢¨Wlvòo…í#ܘÛÕ±ï§"¦sy#A 5~/2ôWíu×稶è‚ÉàÅlÞ‰Þ{³ü¡ºîÒ #Í(\ HB±™É³7ðÖÓ‚–y`ßq”HùCñ½:ÐÒ`ÿ$ÞH ŠM<´y ú*õ3LCç0"§aøöëWÈ ¢qÇQ¼´vG_()QムÄt^éQ®:š14, ûª¿­ ø$+¿V2Ç´å4,Áü‘?êþn7c ؤ"·t¤ØÔÙ|Y~²"Ïž‰U¡j­¶A ïŽXׂ=4;£cø$Ÿ¦ ­‹„E Ì:‘–&¼·|:â¥(¡ôo’/Ànf-¢ ØÑµ)żx G»î ÔTÚ”F¸Î]#RØep£Pí@¡ÁJÚ:_{mŽ f…‹ÄEÄÕ"¥mÍZïTELõ¶Ý<ï‘S„Øéb6˜6&Ý{ÿÀ9Lû<ü±˜t±4pKY-‡~Z®bHzÍk ßfŒ›?;1~›`|}ñµk<=žÛŒ¾¾k¤¯g¤E-ZÇ÷Ç®ÈXÎïðÍ@ó§†â~ÜК'Xj˜%ÕœŠ¼ÒýuhàT0Qôˆ¬5‰×þÊ>„«ì×V+Pµè³d$KØS2N¿Žv(rûO¤Å ®sñýÚ É©gü,;H-?„& C¹·ã:„cÅ2V»ÿ[%â©4§Ï7A·¿øúç³õXú õɽ~Þ²ô²é8‡¼DžxÍÝì1¡Gˆ]Þ m3Éf·m¼f‰. ™9_Ëæêv…‹öCý½èhïºk?çËÀ–>‘½{<²‡Yšuz…àžãW$¹*fE;¶ q²FÄúmÍ8cgº*)™È.ÆK¦SaîùÿO Z§/'6,[îÃì”; ÑBb‡j5½°SŽÞ…£áÀ>Û˜?ù¿öõVüèÜ'ð¬ƒãîá5ŒÁý÷$úß.L9b¾N?/ÎÛ£$TéÐÜÍvÃk—ÀQªãHžhšŒÏ‚ÔÔn\µ®;Wóí‹Ã\£GjÙØ@“ª%Ë6ãïSŠÄ+…|ˆîù¾G›xyŽ çÞì»ÑŒØýaëö?ÒD75Ìå 743ÿ˜Ç ãGiîcr{ªßšgÝðšWátÅúLäqìZÏg!IS¦t1úXdò@ÚÑUY ­çO ·u»Êȉeµý¸Ño£ÕÕ·‰.ÏW£½úôç„Ïps´+“a®ày®àB×HýÍÀÛÄçÆüª‹« ø›Œ«rAO£û°´žO&d ~ü†—B~°^zy{Ú̽·ßÞåNíÁSrZ‡F¢«òi`Á½ñ½BXbø:åmUlRËãª×"7MX¯ È7ŒËôD ˜2V…*Lbhõ¼å59ºÝŒ%»qýïf¥S©è rwqrå#¯nñ@óæPÜÑ%, º0%® +À/nàÀœ‡ŒæÔùC²t ¾šEÕ\¼ÎjQ ã aãEù8xxm“È}¹`Ö{§`’7äÝ‹*5͹Ç.ã³ì‡9¤G—X©@k»‚Eº°/nQÛ€¹ÍÚôè@aGîÂæ¯+šjLßEÊÐÆŠãý­FÞ´ZR±CÛ.&eZS'ëÜ&§sMŽ/ÿ]ý|r”fQW(é5z+gê¼]il÷‹3¨:"«vÃàÓcÒ³èægŒë*¸-¸¶‘ã$‡ èÁpD ÊÛß&áyŽ•}ÇÂ_†fZچͲ‚1ëš0Ü–^’Â>‚8.«TQ™fwì…÷^L½F¶`±² 6èŸX':Vu!„lTðÌ/úûW¨™H•¦! 'ÞT§~ŒÁ:|½'ÜRy¡ènF,.‡Ùyð’«ÂœKÌzPïÆ^Üþ ³¡ bŠYxþÐw¡–ûP.ÏPßÜL)Ú½Ž¦!±ø-7j·ÎBdz€VxS]yôú„9fÓRÜ߀X2¢]s:⼄ÕùDZz²ÅyVövUš$–Šž@îætÊeåÈÏZ·âù½^òÐ~xªCŠ«l —Y¸5Ê DMâ(fJÓÿ ™ Üĵä{–¤âÜðöµ’ßKí$dûæëö¾Û•*l!¶9;>ÐW>Ê©@Äðû6íê4y~ºðå–IZ Þ@>Nß|h$2¨~|ÃÉGd†\÷L‚ÄB_çJ¿nEâ_ü¼© é…¯6Ê,ïÊ ÇJVß“b¹¸×6¢ž©‘ß°ý»h-}°BÐçkΗðÞ¬A´½6ǹX#:‰3Ïg±ÚFç#ñáíŽ@ÕEgqÁf‚K˜"÷þ숽9%©W¯ò£,Ú¸_ÆyÓ&S\‚âëðóÙJô‹¯g»¥Qg‡ø'à2ÜÊÅ+ÞþǤ*Íd¯+-¶EoÞÑØ¨+žNDg‘)DKþïO‰†Íp7ÁØç䤽H0íø¦-xkÝ]Q©–ƒpýþ|ýÌa¯ÅA÷Ì$" Ÿx ´ë9|ïÆCÕä­Ã¬lÝ99º'¾ýˆ:hž/lÓ ›Kï%ºÒ¾T1~›ê¸Üz­¿l¹Ü©èìé[³!+ÛrmW*¾t¯¤ùÀ¬£Q{Á˜¼¡ëP\Z>¶yÃ;;öXäÊ%'õ‰ô:ao‘~n®Éí’ÆŠ—™´é:.H·e@G(x5VÀ¹” ü„ûØ¡ è~WÚö€ Æ;!NzÇÚ¹0|¶ÚˆÁë„ðE§ƒsE¬¶¸x’é}ÆÄj²¤T2®l'”£‘¶FwPŠKæŠçŸËwÅSÔ["Qa.ßøÊ!HÿGõˆg@—b»‡Ù ª£~&ü—¼ßìÀØòôy ±’"MÉqˆG5óC†Æ1ô/²E~Ѿ¼2KBøðÞ„ŸµÉÕˆY ¾ ‡_Ýx¼R޶AePû‹EšábGyï ‹Z€âb~[ºÙóo‚]‘Ÿð ñKÚw÷ñhšå'&%à6Xt Ô>aOûÒ¾‘.Öäyà-žXˆöJ,k>v˜D÷Ô§±Û8ñ¸X|]Àê> ‚Bå®ÞߨB/ àz—jÎÑ2s›%Ä‹åLQe‡×d,iöLoܼ‡\pÝè-<ⱜ–¢ÓâŠý"Ü´šý'ŒÞ׫r¨ed0Â!ëPZR¤Õ.më°ìržkÒûA¥¸Ç\îË@#°Òq¬Œw0üi¤A°šKÛ:Ó;² pŽkΨ_cböc:i“}[Pì+ü0?ÒmØ77Ùýº«<5eŠ[ }žŒ£VtõÓ×LÌü“[G4Œ„úw˜™`ÏQ‡»U7hý{1w×–º’Åô•Ç~6ñUƒ êî<;,•ì}AÀ^- º¡jƒ’VÝ"·½ºyËî‡ûÅ-pûÌT’6ñ Ù¥³—½ÖXÔö'‡‡á3ÒÆŽ³ûýÒÂCö/Mw $. \n_êQp‘™/Äw6ÏL’§¢+hˆà·KJÁwmï;Óœ0alOË&þ™2*õ[>~OŸQfMkЃ&RºMrXöÓFÏÌòÙ€èWX:h2œ› ˜ïÑx›Žçø7drU#Mdûç›~:„GpâCÆà–pzw±ÎÚ³EÕrŸ²GŸ‘*õöDÓ?è%ô¸îž®–ï2­–- ¤,ýõÏ_++ÇZ>œ’ò$à·Ò @a( þHU”Aâ%Ì’H¬a¤Õä”·7ÆQÜ®ÆV½„Š …üôwGäZ¯D9Üç$xÍ Åí)ïˆìð\YXx~ûè6ÌSRˆÛj.RŸ<‚·q™†»IYÄqEÄ?Ïn«EM ¾¿k¼ ˜¹ØåûîéUåëÒ ?ýÙ•\M´"zwØQ:®KMÇœw Ï@C42‘͘³e‡§b -ŽvLŠ& >êI=š9fäДåÏ-s+ÛÂi`_Az£gBáÄ1ÞEVVd+Q—Ђ^Eޱà ;u¢¢ðC¼)«m¶1³Q°žXa‡à%ª# @иœ†[À á½>–nûM#«ÄÎÂ]ÿØ»,¼¸†#?§I/jü¤ÙÝç$„RuZ#V¤šÙð÷ÐÞ÷Ÿ-ÿ¡L7ò‰LwÅgDº î“ÞO¹ðuÜ‚Ë=QEQq߇rŸ Æ£Q¨‘±\¨¡àˆ¹|޼?Ô‰x€êéc®±¶¼n—Áeã¯jÏL@I½ S×½ß Þ¢Ó{qçJ#dôåòÅy"¼7²ç®£;iâÃé ½àJ`»¼ü{Û]¨ÿrv× (‹ ÓןfO‹jRÇ …™åow5½Äpj“#Ak*ûNà’=Ç'Úz7-ü•»kWØ«š|´Éú†æ >Ø.õÿê·áú¥eå{äÏf'*pà‹jëø{õNZÊÿPKL‚nTÔ~©ˆeŠ Aven.iconset/icon_256x256@2x.pngUT ÿ³.bÿ³.bux èè¼½å[”ßö=ÃÐ) ]*% Ý" -ÝÒÝÒJw Hw×Jw7C#Ý50sßß}¿xþçpÀìkïµ×:×çÜ×5õYI“àÈ~ú¨ þ} £"¾\{Í>"¾`8}Òq°&þ}? !¾Iæ&¥í¦æhéæiâbðôôdûâ`ëjfâdÁæèb•u*B¼È~|¯î•}¼æé¥®ñ¾83WÅxM÷:lò½œÄGdddŒ ü¯_¿Ú£hyÎ͹ßì·7xºgý<ª~E yµþ€_¬ øûõ·=ìú ºÍ"74š-ìiy»/d¹Þ–Ñv—í:!º/šŸ¬*ÇTüÿÓ§p–„4ÄÙ¢‘•/ÏV azdNoÓÑŠÕ9¬Ñ$˜ˆÆ ƒ°_=GŠÀ ¢¨C è@Q¯þFÊ<\ÐKP;‘ (E6'üÁÆgxÅOÂ÷p¹pìÀÛâ¨ßPxž x fA¦kB4T(ÍHÂow7Î%—0“Û=Üʧ§pƒT™Õgã@Ý78òù(ß÷Þ£¨à×’i'¸¡Ï#Ù¥HÄûF¿Iñ$«: "/ƒNÞž|íëî &úiüÏ‚Éé÷X¨ê¦¢0@Ž©Ôû[ǃƒŸÓk—–$µˆX‚w¨©OŸ»¥öߺK/?Ë nRæ£Mx¢Ø´ú ¤H“Õ’kŸKê ûâ—}+¦'ãDI(ç³;1q *‡Gt}’1¦>äRÍOÂùohú8ú«»m¾å!¸@× ‰ ¥A¿.­„OmþMÂh)4hÜšŠãØ”¬¼vJIÜå•¢j¥ j%þrÍþ»YˆY„ÔüÍ&ã§Hˆ<ÝÃ÷h‰ÌQxÉåHê29Ý|›¶ƒÄ\îøDü‘èu#(?YH…Êø-’õÎeÝÏIÕ ºlÌÎ81æÏre_'A÷/2¨­%™€% ÓÏÚ´9 Ã:°1ÄS‚"-áO;³Æ+Qªéé|O Éâjª;guu/¨pdeŒÔ`g’‘ùÇaÞmâÇ8ÚÚè—gO~ |ìx·§¢0×üi²t€_:b¶å—² ´Óª—D5$6 ¨8ù&’ þ?5äÉŸb±™¢¢~‰7',¶àÝž¥‰»ºï+-6ŸÜç­´ŒlÄD‡ú½wÂö¢!tÃäÙ@ŸA$DŠ ³»I=½Ã'yÙ`bÖ| ùÁáDñ,þHŸ›W ý'EX±œµfh•Fx|Ÿ˜àÐvw®Â@¤Ù÷ã0æßˆì-L‹Æ¾Ú@Qw}ÐV*W¢²Þ ^nJrY÷þFæaFxk·„T¡Õ7œ2×o@§v‡>Ýòž3Ÿ3´k½œDLá{…Ë@ ÿëÙóßà‡}I>·¿opY×ÐÎc‡‡!Ð3“ S&ùTpËFïæ¹RÀXôM169±Cê;Q¨ B¤¬óß¿%J•œ¦¤¦Œœ‚…'öi¿s^B*jŒ7?¤‹ÓhV…LŸ{]v£ÿEïD ;[”&ý·úïÅxçìæPƒsËݪ>7!;æü %.C#¡ì=ɸ¿VÛjƒ+µÑMЂ9ÁA¬l4òÅ…ˆ´}#)ÿcól{˜íˆM‰žf€j¿$c›öí³:UÈRÃfÄyc~íäI‘P™*Ý ¤áSïë]Ž®)˜ŽQƒŸákƒ“Ÿ›lPBQe¿¬‹,žU?}ÏcOÀ{@ƒi3DäK¹ÁÝØ‘þ…÷|ížý½Ò’^ Ûª-6Ùù+u¯•z)!Pž·UïwZš)e;$XTå+½Ëº·ÅÉGªß‡ÔÞË?Þ˜úÜþVÈþÊÄÖOZDO ïÌiyª?jàib³à!ºvEæ…­(\™\þÛáã­#žÜŸ•VÎ=8øxi;`û}kqãKî@±=”S1³uø–=2¨çÍÒ»ÕrÕOÒ‰?‘‹ íp¹=*×Ol 5«‹e¤¡EâõŒ´ÌMÀwQ…˜w~ÈË%ª6•?e$"Í•/Ptn¼^MNï ¹Ä{¾ñ„ »L^øI)ŒZ¡ùëp®¾c-“÷òN1ëá‹a›ùdÅ”úú|),¦*Ý÷–%+2Ä~#i}3Ê}¿£ÞC×qx ¸ä¦:3B혽 ƒƒÐêüNæjð¶$=šÇ~”ýDO}ü'&!m®B²§àNãdy²šªÑž%ÐãømNø°ñ¶ô=tcsNkŠ"¶Oçwf!’µ c<¤BþÍÜÂè)¨KÓï÷Ĺ·ɹ´”–¯L•‘˜B?”…Øí“PèF܌ű¬ % IòD é’‘#sqeº÷¸uS¯œ\o,ùn½}Grª)1k¯ÈM²Ý{JŠ£€>ŠòbÚÑóÍzEW‡jè†A˜²f~(YD"W«/›`¾¤Î!síÃI'ç]uÔî«û(3‚>Ô#jÓ¡^¨I顟0…°PÊ1í&‘rѥ̜o¦÷~¸cÙ–ÙìKwÞæÐ2ü+ç’þ•}?'Ò{ c4“÷4p¡y$š(}„ox¿É:NUNã³–¹AEŠŠ*e/òˆ„œ,†e?vÛLîܳt}}r*ëî÷áñœÓ<ßH,Yz³=ü)èY”´—¢Zºùž9úÍ;­öËÆóU®=½7-ÉŽ¸E}ÐSâ’™vËá— ÎuÐýð8UM×W‡s®OWЗ?Ãb¸Ý7UáOp´Õ½ÓhÙ©VcwjRYºï-ö0·«XªnžHп:wý#-è§@ɈyŠêS¬*~€l÷ËÅB­‰yïfa­FÛŸÕ÷nØÉõdù”ßEw\¿°pÇû±Óû4O˜oøñ&¥Úéš›EŠáNº ¹|6®]m^_ß븲~Ö3°à»kXJsZ,O¢§¢{{xiÁ§˜*+tïí/~Æñ3‰<ùRÙÝ^ëXøÒÛû¡Ázê ·Íì[×û– Äåȶ÷qÒ×»8GRÛÙPUùì{õýêÌò¦(_=ÓÝDª2+4¡v÷¹Xà“Dzo¢Ü±üŽNæßømnÙ¾r?[©3ƒMÆõ»ó~+Ærw8¥¤²²r«Ê&}¥Ã³Æû¬ën´ënÝv¹ñ˶Mä+fÌ«##3\J'xçuKrŠ j$[½ ¶j¤¶v><üÈDÄæ¼¬Ó—åqxG±Þj€Ÿ[V©úwª/'¢ÿè&óøØîj¡6÷N·q095õqÚRºÑ Ã#£Îl ó¨¦gýGqqÛìë$ ÄÆ‹+?³Rð› yzì\-%˜#kÈ…xídäÞ Â'{|™ß%Ÿx†v}øòw£§Ç{7Eëå§/ôôô{ bÜ=Ï'ŽŠ] YÇO¥ÏwÈk€¥& éáš=70PóÊ UäÂS÷À.ï´’§¦T§Â©féÓ]Ç1 A[7>Šybþ£÷ÛŠ††¹Êqyeõõ\ N›®²6žú”–¢Wª¢\roæˆ#(‹C1Kn7„Ƭú÷mñª§è·È]ÌúÿÑÞðS-—R)©tj祃Ś–;ƒß-ïN×Äx]ÊM£££G#i¬Qq)­MMMC.s¸zƒ¾V;ýHv™•€¼HeéYnâ4òÛ  ÷hWÕ~;Òf?eLEdjfšQÀÒË—/ïg?3íû?ß,XNæ¿Gä†Ðí³•Åæ¤CÞ,„Æ‘f`ùìšþûþ³ Sñ»”ܾ`¹+åÑ\ÑS-ÃRß;ÓvOÏêMqèqÃØb™¢¬l”r\"f7_úf_dÖÁµÌxøºÑ޳öÀq¨žœ™ð|©âŒÓµáé÷”BêšY­þT÷zÝrÔg:O †’Œ¨Ì»­ÖÎü—#)º|–¸w,¥Ü)*E榅c¢llã"ד’{ç›}ÝœÌØ~÷›‘%²I óÂÀ.ßá–´À‘xªt>ûÊö"yäcêT®´+Hhú–éK1wŠ u´T¢Uchy²ÜÔÝÈÄfŠ TMä¬é9½×#&!ÉB£ö7yîçœÉ§>èü`% aàû擎Äͧ7Ù®Õ|ôcZi1ãâÁר»ïM]Ï!¿05¡Ì;w¹œM¶Û7äjMåœw4³-›á$•vl×[1§FjÁ©‘4ͪ4D@ƒ§†”h&0š¶Ã=Ðu„u“wÇ{o‘sôa Ö‡(Á—ÄÄšµåZ¯éùÒƒAq²²œ¨±Qq¼%¾žfÃÃ!oÕJ0œ?+(œ•è|wY0Ð<,V”¸Ê¿‘6!"pï5z0uªE K^qÄ{ºƒ¯X ë[¿KF™)2TˆåQ'p*f‘#”Í6’ÇóT?);›rR0#ƒ ÆBˆ–‘}q|æËÏUeêȤ¸/MÛ.×)üÚ )áâ—;à@øvGT1§a-è6˜þ>4¶ÌЀv™øÝd4Ç&G§Ó«NVQç`õx†±Óó´ôA»[ªÖÚËO»eê­å×AU|O¯ÊD®.Wk螘ôZLUÕ@Ðç3¼KnS‹¡lÁ~ëW’ÏŒ|°/_úýn3VdîŠèåS Ð4>…Ø¡g[ÖÉzGš† £ Hejq¯…1Õë×a?óøqdbés;"^´B8PO¸Ztâé+Žü ¼7¥8⃟Àƒßh6Ùßé·NÒ10<úçö÷›jV:Á3±+ X0þ UvX £•Ë™’:½D¤A(j}MË Ñ‡W³?Áb¡¯%#Ò§§§1Õ7˜ÍGóØ=Ÿ{ìž*Ô9-9ZΓ-dz¿lmm=‰ »““[×Ptp3œºÚ‚¬[ÇL4LÄù_ì¦Ô§”®½e1>¥ó¹;µGtJæÏößœŽÓ9{`MØgðÎM4Ë…’8Î×Ý!fO÷ýÛ÷þëbW±Ð…ܸËß„À3´`!à|\ø†à9ÄÀffô’i+$=qƒ•[–c™«««ÜssÌê~7)œqädIßœ.ûibËôÒ»|×Ħ1½Ï¡=‹yö™‘Œs§Ôs)ÀaÀ…/„ ê/)˜œü™ÚÕû… FËÕîsû䥆g8ebbâèp Ë„¶lÅ‹Ïêæ£4p¯ÃD&ä:ŒF9ÐØ‡§¤¦føãâ‘mÁx­‹(‚ÊŒÄ!íUZ`ÞjÕׯ¨½ˆÿ [eC`”¤3NU7ZðL.äV’] Y`üàb–ÉŸ¶ÿXjû¤¦—!²tRt³ô+Mq»?îY(R4÷<¯GͰûþ ä t7Õ¨²ÙDdjRÀ¬G‹äŠþÞ†;Tt>ÕÃ󨿲±qᕦ÷¯DX›WÜ¡BMÝÏšO•ZE(e/^à<á :q‡Û/»•=X8y¬ªúΆG‚0KZjLv]Dp’‘uoܤ¥qÈ]Qü¼Ø€j0*¤CqoÀ¦"ÿL•a_„¤5lÄL†(kQê6 6f8ŽæÃ½\¬âïLi^cˆÆûF«Nƒ ƒ@oYeþ‚b6&&„ÎóÝ<øÑL>ÛÎYê40ä«-œ¨o# ©p-BÔ\¸örÄ¥è”a:™Ò˜öÔN>ÇLÅÕ;œåi™š zCØm5v;ñÄyJ<ì3I>mÓÐ8*œ­›äíñ¿à_sKšØ‡ñwŽ-³uùB <4§†…Ë ÅÎÊšƒ6DíQåB0!KV¯ùæ-wÎ9mSÏjþ.ÔÐ 8íO:gy³Ãú6ª°çÙ(xõO#šu-˜¡¬AàóXÏÞÕÄ MäJÞ´xi0n‰ a°ú@«8£È6+Ø«%8ït m¹mî3DWîôýoænñ>æ,_ÿý–Bãá๰™KÌ5JaÀ4CØFѵ–Å,¾_{cã” zÕ­H6P­Ÿ`ÑÃûÀ[£b Zðw‰Ø1p_d_oøä¨±Ÿ›¥µ/ˆßŸðb``\Ÿ¬,d€TÅSòðZ6p Ð:ŒÕ6ò•J©¸FàäÿÕ즙¬ Lª]6 7>_fJâ¸ÑÔ2ˆHúÎñÒ ¸GíÖnÒ*´”|º<¶¥¿zœ,?\_Eâɬ”øöžQ<§ôâÄÓšèï)†ó{ {¹SP!y?ÛŒÛÆ|©q¨%Ïq¾’ £ð§ÆHZïøö„ëïDóµ[ºQ¹V ð‡F‡µåý»eä¸J±nF+Íõ3Hú»ÇÈv!c‡‡EÿÜáN•˜´yÚñ+ÁÂ!E1Ç/`,ž —òúÁòÜYZ³À|7ˆ™[Y»‹µÌˆ¦ûþሻe‡Ç,¡Ì‹âßä¬ ód{¢‹*%ã*¥O‰VøN+áââ[N‚ˆ)¿CX¹^Kõ ðMh²»kƒ}7H¨ Ù˜‡ƒ¸63¤20P»ý¥G#oýÃE¶²0€øN}˜ïi[$BIp÷ö¹«~„¥NMušÚ:H©¿ä±Cwì±g4¤ÿö후œ\´rÍÅþ#«ÒJl¬¸š· ü¹š 2¶,a“Sá(‹¢œu1 *©ÿyzÂû–œl—`þ.ê{ëô°›æ û-V\\|Ìļe˜9^WgƒëÔí&:šÍ$o¬þàãu} }¼)°Ñè1ôYÞ‹¾3â$L³tg®Ïu¿„§~ø¬ð´§ŒRÂxÒÒ×WÈó_l°š…à žüºß±•t-ŒlT¨ŒæñËÊ'=#¹ýè·êÎ]ù¾ <÷Ê×áî1Ìôh‡—Q 3"ð‰ï~¡T$<×Ëz/J±s7Ä(´ã˜%N´XÆP[f4<2R¤Uc¸³³£Õ".žç9<<µ9sÉÎN ²äé2³°˜mtû‹u•DÏ…ìǫ̀?•P ÎáiË¡\¾‡¾¥ƒi§>ü‹óGÀ@¥/Ýž¸»Ä—/LþÐ[‹£ù*Ímb"¢º¢Öô×ÔxZˆš9‡—(VuËX4Ú.°åífËw'…M«B9›@/¼ ƒg´•ç  ú.ˆVqø±É*–öA@䊰Du~.y)Ñ\ÎÎ<ÝWJåȵþYB‘4_žßxRÖp8êgQv¨7^_h›QŒOYÅÕÌl ÒÒ@?YŒNË1ò}Ü·:/‡Y:oæõv¿1³½~‹Í ˜ù pi.ÏÓm²I™¨A˜Œ`¾ïÝrB-à{Zââ€Ív^*CG*ì¦fùM¾Ë§ûù)šˆ…£_À•ßøbëÈ9´³·§›“™9 ùúpÚqÖxÑb÷p¹+ÖÃ( è>%ÐÅ_¢B8Q!„;j¶†ˆÅú”!« Û|}²uy¹Øê\ÄF¸çq¶>¶›ftze^ÏW¬”#¤Á®eè-•Ä)hüwºXì¹sk,KØãµ„0àpßæ5¼Hû‰M”ú~íÌøÒdŽeèD‚ýd¿cî3Ãåú`ªo9îRVV¦ï>§ñ¯ÔÖÚuâª>ª¨àoø]Å)×|YqI¦¦üj¶¿Ý¶A{åçJ¬Ù£Vi*ò½ƒÞõÐ Wh¾½*qøÞÚAÑö"p©†÷Ʋ”³öHv=Ÿ“·ªZÖßLM„/Žv?²ÄS‹ÎØ>µ9ôþ¹ÛM ‘ ?P[;'DyÂo;jiQc œ.€OÎßL¦ñp¸êjñ²?mà±Ár¬—tû ö÷ûáÅÕÞhÆ|=]IIÉtƒ•r,YQ;j°8Õ2Ÿ=¥À·›Û3ß0gðƒÎqýE‚wûáñÂÆ0?û'É÷qäÝ ÅnábV—½ ÞÑšÀц ±#­Ì¼+Ÿ®ÙJ$-#ÿ”–= ø« .‹è‰š¨ØG ú'€°\ðBМƽ¬ìù^)ò¯Ò?ÈxŠS+äŠ,Á‚Ã2šl¸ì9X¸ajªªSEhƒR‡Ç+iüî£Ði¶ËP®A *«L¹NCvTUÐä>ðuˆcê0…DÌvTÝ@¦±QF3žþ!›â#Ùì‹l»ž–å^œÝø #ö ¡º9³ê³d é¿öô½LvÆu†‡¦ðƒ†™‰†ø j}|6|XÞ¾£H-›t’êÞ7@dmCv»º³………¾Ïßb;,§r799L¾Yí§`S LNO•E# ~‘m·BN¯·¶r–РÃB¯ž KØ™éèf½éœß;Ì~”<òcrØÌ¾…¢¢JÇ’þš.–Vº¢ "’òñ‚Ãîz28ÍPym²=(Üw¿!š2c  á2|üç2ù!öŸÑI³Š½]G/wIÍÃ$½/¤6z¶ÓÓIÜ4Õ2bɸûüøqïo@ÇȘ…ÅÖ >^¬ë;1*žîxºñ‡Á–[<áºîåÇëqQQ­§4ÎåÒ2€ò‰#/_ØrŸß,ôJ9 ò13ø7%£cböÅáGÿü^@BñyÿNl_|.’Æ=í‹7 ªÆf¡úŒ_­ÛlG6S¢xõྠ¿ þöÕy\ÐU¡þUO;r·ãÿž[Ý™7Ýk=^_< +úÄÑáyÆ÷Ýa<‡›{欆K%”n¿ÒÜölû“›œgpÿlêèÝÒÌýð#K_£µI1Õ$~Ð ~$mOY㵌ÝÀ{¾¢rcrçaù»Ùx*áþ Ø-?"̆g>µa tÁ[„zzfæá*>šf »öi]”!öQw¶çº÷ÀþÂÍ_ÐÍ‘°“ÄkãežÉ81Z= λÐÞ0 g[Ûéi²ft §ûá=ìyà÷ïtDg~r_²H˸¿÷ÊKBxªLÍ*Ý ÷£ù6ÿûC+Ÿ›Ã]-Ñ»_h§FEJ)ã9UMhBH/BêƒÂÁ/²Þm–•šïYßòѲð”é« Ø…!"í F;¦ùŒîµó]&ß‘¡>DŠººäwkžÿîÉV€ì™%16C”´XOµa×àZ™Û£ÛR¬¢T Ep‘v÷‘ãâ‹«›…Ó;ý¦EVß;SÂgaÆuß3QBÙ¥U55ÿö£ÿn6xnøïßT$ ø\ÿ<ªlxjÉóîG˜ú(U͈6R…}( A áV°ƒJŒÄGaϧyºÙLžk»Þ*öIYY¶o~eòÚ*Ä‘ó2?u,üT鹤-ùñã÷‰¤V©ÓY×Ý£»ai±Éååj[ÎÛš.Ë.ÿI\ tkÜw.}4„¡â?n£*þ´ÕÛS  ¦Çug¡քቆKÉqs8W1y–•žnÉóÅ4•ÍàðÖ¤bæþr„=náèæ(vd´ÖÃó ÏÔfnWâ6e¿Ë¶Q ›åºÈ².ë/&ÄXûQÛœg=ðn -zzú×ýq!¡ÇØ[]Ý̶«qaE“‚•È*¥íÉɼ煟Á‚nƒÏGSQ.¢ó'€Ö·¸‘O¾×ßÞ©8äÕê†h¹¸p ÁrØ™˜˜,¯öÆ(×\FX89/{þÝÈû²X[ðït%²‚òxTs×q \í!Îy{µ'kB[ÆB š<§OíQ¨!¹:(JŸV½SÖfýÅ®,º o›)–O«íà¸øC¢èârù%°¦±‘Çu€Ê3=$©OKüS¥èI,²¡žCJêÔ(²YÞºD–P†üß\N/FŒÌ-,oíî”5YOSÌÌ›"{ö'í[Ö,{ÿ<=\!²j™)0 ‘¾j-ÜVã”-x“Ù‚® vv•ûŽ?ª¡4B³uýF€÷/±D@É&òÇS Û4(c9ñÝHã—àù qx'†»°Ç±€}æb§²~…¢eÉ$´ûÿ,ás\·Cݳ˜cMkï³íDW@gQ\ ä5͈Qî@¨7¨ …0u’I2â>PÉ»ËûË4aùåÕ•"¢Ål?ü©èïÿg*Òu,ÛüӇѠ·'ܬºçÐlE¥Ô#Ïæ‘­?éÌí=eÝš<ÄT¨€®.Nó~è~¨9^‰,Ó™»²ðñÍ#ZÂZXf}=×L‹£! É]Œ™’¢"ï‚¡oÕÐȈ+”#Ñ|m„Ó¹ö U\kwIUŸA Gƒã†˜V¼ ŠåÙzW‰Ù@uh½BK¼¯ö#§éx³ävL¤üË[b7‡éCÌÔë@V¾‘¢Ô%ê«ó>¼¬éiUBì¾nruι -~C¯‚¥6W«ÏëZK-ˆŽ¦V¡Y4ñ‹˜õ ËBà—².ax‚¹¨!ùè#qpï}“ù*WøÎ,`q%6·S~ÎU‚`öòÑ/û¯*¢¢¢8¿|ù²7§eä~ݕ܀k×éâ¬îÔÆÆÁr,,ÎP´•6 °¾G¢"èqÒ#þÝ ¤•äzÑ¢¬Äú]+žªÏíÈr_Ä~ª0\§Ë§É¹Qœ± G¼TBn+-Žž;¢ÉW˜˜˜£Tž«&»~ò ¿ýŠ¡ ߪ\®ß–8 /˜Ú0ïႯJ©‚Œ[‹Ñ»=6£Ž­¦6QÇ./Jìõ„÷íjE&èò£î¤0† þ|X5 ñ«áË ÃL™#˾Žö^QÂj‡]Šû‘¹iKÜ®ë~NúuÃð«ÐüçáÈ'qU¨nR Iï·×~¸‘Ÿ+ÿÕøeò‡,¤î_K½[í»Y0š@pï>t©ÁêêȾ¬+B¤ïØyZ¥×²7ÂÞƒ-º€UÓ…êE Ð/€äxBž®L.¶ÀfÞ"Nsßr©½*“¦pÁÎsÁLàOæj4¶í²JšUvÒ‡³6s!m®òÂë~WŠõõõ÷ˆ½>AV7abdŒ ¡q¹|¾¼¼DŠß¿ée©ùØ75Uä4Âê4ÆëtžŸ“žf€:–µåε |a,Ná íèü~~Xñ¹8zlP.G§J—Ã,"Vl©aȪ[·0#ðhÜy$Â#1œn—¬¸½/ÍY. ‹6oL€»©ßäÃëvHçÞÅ*êûz{»•ë0&åÀ±œ´ƒTÔ@N;ì¥5†ù›lûŽ—n¥ób9;Ûh=‚r£üÃòãÍÑß•v„£Bè^7îº*^3Á¸ÆvÿÐ7øpÊ­©Ç*‰¡5ûz™ú®‹nÛoͽÖ¿ÑÁž»\ÆH9Y•Õ•.ìyºÓ~T]d5‘ë‡ÀŠ[¤Šo*Ÿ?ƒÍDû÷³ûóüLY\¸ü®ñ±)­Y°¸¸nVlöS¼ß0\Åb :];ù#œ3¼ ´ŽÃ~0²å¶öyºëAþ·dsîzÕà2C*±çYÕB¥NƒõZ;/­t¬ñD®¨G(‹©Y:ÏV½æ„A)ÍÏë*}?œêÓý¤õN}?M­d1n¥ŽöúÔžï¯z?.˜Ãøõä¨å$*äjâ=#_Åg"4ÇN`¼k­! ±Ô¢™–c™-=Ïq~Y-’Ì?-dze;ùCCÁòìá¾§Á[¦uìmžQô,þxк‘,¸­ÝxDn^vÞQÿø±[™Ü€ŠÁÞÔî~2°ÞâH“ PÌâÛ̓?•z HæŒ@˜€¤œÅ…jƒ ^ÛÔ›»¯Ñ!âp²õ@£Kµ°Š ±P>{ð–:º„XKMò>Ìá'6UPØB™õþh!Òû A“!ÂæEɬ'+òÑbþÙQyII}ÏwÊÏ7mpt©Ý½‚Ûñ‡ŸªºúïÅ:³/3%8iú.:rßñ·™O À§ìv7wæ¹u}ˆÒá±GEÂHØ¿ÒXG±@bòؤþIäœÇ)íŒ(³º™'ƒr(yœç½4pë@뫜œœÿlójôÄíhG¹µÓÄf ž aV"TФëF´mªçR Ñêé~^,ŒÃ{~ë™+e¾¸8ŸUsº[û—m†t¬dÛþ2™U÷“ÐÆpãG‘Eª 0P¡v‰˜^•¢á“i0nmíÄ·úCó`wÏÐbÚZ‡œw8+õR{„vKoðWuÝ?wµŽ:NJÀìf?y,ØN}€QiµgÚøuƒž$Ü”‘ï-w?د1v”¿9z¹ˆ«ßÂöNÿmÇSñËOþßrXw÷‡‡ÍÃ^1¢yœEˆúîlx{«âÒ¤›ËÄSn°5ÿDGøsjZ!Ý=–dy¥ÔÀ´4DÁ’"`%1ƒ)P³¤C^Ïã$qN¿Ár)!'—m„®O´(¯'dx~pør²bñf4³§ë³\Y^LtH,6“Š@£ÿcYåŽË›Pó•æÉ–»5[vñÊ» …odœožšé4ä˜nÔèéÏÍê¹ NúÅÙ”oÎŒÚ(Ñ ÑòG/øß&©÷TéÉר0«ß/µk¤BDa­³G|sÕ¬üÑB—´¼ù%zì–é†8PqE‡STåÂ#=7R†V±ˆÖêŠè²ä›h„I›Â'Ä[(¸·„» ЉaE2þtrLÅJ¥ù©Nig„&j)Ìõ@ÕîÍŽaÓ SRaM†²å *W}¢1ùÌ"ï‚VœŒIR¡)+´‘Âr2à0ûIˆˆ±z‘ž¾>t¯eCˆPÜT ÄcŸYÙàÿøeÍ]©øÃŸVg.ÇŽ‹„èÄg|‡Ö×~pÉHHŠV¶íSA¢@âRJü>ÿÇ´~ÓðI‘Š\ÙðѹI+̧õ¢?oO«¶@—7ÊwJj]æha„­YéÌ¿ž&AÍhµ7ÜiÝ{šlÒ^&E•¹•˜5ñå€c÷q«='èIâNJ2ÐÕÞ•ëqúÕI=U”¯DeeJB2²¤Ye|kgµ.ÉT<ëÜn˜øÆæi«æÖX #Ñfx/êý°±ÞS¨¡éA-É= DµUÚÙ Rö~DtQž\ Œú§_QVwh¸ƒÜ?s„-Ö¾X¬›È3g×;Òèû²ŠÀ;ŸÛEX=‚í§Þøµœ­õ-VéUEPáa#ãf¢}ð@ìpJ”*Õï»n÷wFrÖ«s°`•(8ï‰&«–×?>¹ ÜégÄÚ¯ ´[®fTZjq¢ëõ—¾BX›‰öÛØôÕë€]UUs¾ý à8ÎÙñ2ýß×ЛP*álo¼âäòwròô9޹·Œ ~~ƒ_PØò{Ô&§Èî[÷"…áBÞä súp‹/Ñá!nнy!Q¥;½-ì£îqîÒ{·123«¾ôî~dr²ê0ëJ³lõ³ó¶yò\I&ïnD­·k‡s(“¸Qîžá?ÉA8žïYØtpT¹fŠáÆ·×õ(¥„¸ÔÉ&Å1l‰¸ÁªreÑÎ^ÏêçÅý\¬–5âõ•»ÓuVIŸ6Ž0y+éâÉHL¯%2dzz·«u±­)Q¯<Â>âëö— û ]Šêð—ðp§ §³®;æ×¹zoaé)Úé׆ý 7êÿð„y`×NÒLøVL£˜5Œüëdå$ÏíUiÏýŸ¦“•‡o¼Ž‡Â|‡š¦åÖl¡ ÔîÉ|WÏ•Î+ïQÞÔúÛ4I˜~êT{ ø§ y q)+Ù{”åïÇq7¢å˜,fZþͧÕ¼ àsƒ<—q“Õg½kÎI´E‚Oßj³@N̆ìú^"5z wo™‚÷sCç«èuBUå44âeý}·ãœv¾®-FEÕ7‹g{žƒþ¾ìº/´SsŒæJ;”ƒÖù9ßH”’Óß~.×Hš0 #í¨f„.þøøü4‡¹8¹F³*d½k3I4«ÚO¶sõ4ÂéÄìžëuí¿ÙñH‘DÜ‘ˆÿEÆ·Év$vjUèÃnØîˆEÂbG»’U™§SðVrý¨ˆèÉt wxg••ôôîå£T ÷>¬—‡ËÑ_½‘¸æÊel«¿2/ÑJ??-k'GŒÄEÈ…ccŠâÍ¡ÓÕXýµP¶k ¥Ø;×?©ïêÈoAù´µý6êoÜÛŒYúP”Ä‹ Œ]Œ0‚|ÉÈs±¨ÕÃFþ(]>¿žnÍZ¬_ëJ‹—¨²øûî/¸TVU!¯‘ô]Þý¿g -ƒ.âGo|!10\ÒÄÜ~^óå8¼XuMÅÒ6ëª)IVý¥Ñj´P­ÉXð<ï¸Õ-ËëKá<ßM»´þ½e>ø,adÞ›:ZþXL P±)ÿÍ'í‚&Pgî´Â·d|p0u®¬_\žíâbޱŽÅ®mÐ+áÓþãjl¸ž‚Áîkž&›*ì‡Z¯`æßä~(>ñ ÆQH6Xr}ÿsK@ü Ëæ';Õ\å*OˆÈäæ n‹Tx½Å­Yžoõè˜ sŠoíñ»$,‹_*äDdìèžùÉ“PbàV»”»;fêSQÒ®CòL½©÷öF膪ÜÒgÕ7Â÷.Q;•-LlJú8ûTOÃþ𮫉¡:âzd¯­@§W¥'CÃøA„Þ"‰¦õ,\xÔpêþÁÌÉ–õD vÅÌÅ@„f`þNeåR>¼Y8'¯2Л¿å·³æw¨%£¥í@t€zy7PFíí÷)ÿb]Væ‚K Y K˲˜É_Ëÿ$"Çän©Vò © ëxàtß¡KãpÑISû­Þýxö—¦Pš6ACkÖB¼FR‚L®òš3Z£ÝßU¨B&¯NõɪïÛâÙŒ—/Ákž#“~à(‹@fN•Ô»p_!£o~ìEÒ¿<7trqhxe~¦ JŠŠ m˜HDB¸ý‰‰æ¤!â››…úÈ`µ‘>4Ÿ¯üŽ?„'VKÓ¡B›±›—èµUÚ¯³´³ßb°ØÊÏ8„½-’Æ!#ömCþ€è7Ÿ$Üxô‚ôý{ÿoš–!“|½gŽ£_çÚâ/-ânâ»ä¥‘³ñ–rµw XûÓFã/ÙÖêäâ¯ÐúºÏ-ó‘•ɪ&ÇÏwŠGò €¶¶¶]âOò 4‹Ñ1›]w>¼ªñmÌlX„:C`ꑸ;æÅòD¥”[” ä§¥âI‡‘ø’ó$ÿðòÆûP:ñ`Uf—w:oh£k„6–Z9W:Dšc‘¡·¿Ò9ë ¤Š‚Ù‚@Ûl¿J©‚^]yí ÁÆéBSÕ¬K'µÝ/x‡È™¨.ÃSµž¿ƒzòžMT2àWä 4ö.ºŒ¬LȒͬõÄsË@'YUlêwˆŽD˜ã êkž~~9’£—Ÿì2_ ÉUÈo6Ç{dçâ¨tà×°Î7\«ˆ®?7a#ü '¶Ž˜óãDÚ\%“¬?&f婨 áÑüPâ/f D‡lL)Çî~”ãzËs÷Iuz¾ù^×Lc^<·â8!Fì¼s_·™}Q@ x¨¿=”U·$W’íÍ>§ Ñz9ã›ðj!ƒ0‚½%Šfig~ëo•W ÈC´#GPP Ò¥£]YðáÓÍ!¹qìnmÎ0ᎠXž]vx«Ú ˜ë³\x¼¨/ä°b3œä˜BI9ÍêYi\³ywdw|ô:…ü™®´„Õ"éø àT°7fA›Ð)=SÑdŒ>ëb¤ÂýO—ü¸]ô]¢nLì ÷¸såK 'ÿx KìyÖFæ ×¼­éëk`ØOÝ&„Ý ÉÍé7j#hwû>$¥äÆ“¬J¤ÖºAŸ>]ó0ø3ôµÁ¬„füÍz——t»þx%@ª Í¢* º uÂM»9¹Ô†½å@<3s­Ê:3‹gG:f"Üf»ï)B5=ð:£!®Ú‚µV‡åvË=ý-+„Nö ½;+y±ì†ü ûGɰ”ˆq©[ïxAàä« ’TÕCåTª'b¶Fš3™¥_ì¼sv-ɕڔu"±v›ÐWø°N¸y#胵w„ç~N½ßSÃÐSèTQNFØÏäDèi·Þå‰Þj6ê·Î7 F4‚U¢þÞ ï¾aõKÙßUJas?¢¿ýÝß»d%iY‚¾¤„”˜d|¨¾ô¥V>mP‡±Rý­vƒtîMà}Áóbùµ‰eÉ󢃠Û'êíñ `kºá–Ö¿§ÚÔxmÀÞûC§šÂžBWÔYüòHÖ­$Y²òäËÿ@µÖ,r­UEe²ŠâúŒFÐ œ¯IÛ&ÞOqÜ„ ÷ºae5Êá™]\pzþ»˜H šÜÃ鹉NˆçvœæB¨~÷^‘zŸþþ  å~ÚðS£NÓ®Ç;­<Ó:@—øøI)õæIE%ñ`á”:<ûXj>íºo†gJ|*‹~Ü£X*p=Õ‡Ö5Ô|Þw¬~ÖFGP¹yŒûÄ¢g‹O+vM¢áÖ¸ Ħa“Ìþ¬Š¤,Î:B ŽÍ©MqÑôÚÀboÌ-¼pë^0ÅXë(ÙNž,5+úl ŽwÉÍs5´H¢í¯K–ëu£âEËŸ Tëi‘ÃçíNÍ0÷˜·Þ½b®–æµ$ WÑ=Þî}¿-F8¦ÇÊ’4ÛÈ¢5l`Gwâ´›z‰ü¡®ÎEE÷ø;Üz‚Úë„Wgc¥ÉÖ\ÑX5åŸÓÛM™§à’ˆxBÃus˜®ÖsÃÚ˜|™ŒÄbÒç;¹h9j9fŽwb3g']Õy{–64–•ã› ùCb•¬ºÉÀŽ÷ïGI]•FÆfà¼Î­Y‡ý…©Î–•3I„Á8ºékŠúgi@&8g#tNt1ˆ{óÔTýž#j‰™ÎRûìjÔ On·Í‡×íŒÚÛSÙ…Uç Õ„x ´²Á<5°J1pÙûêBâ}ò*Ÿ7òÏêA!ÓÀV"6(yæâz[ó1º=†BÀLAñðp.&«e(EJöèáW¬nC Ÿ ³:hB”qÈÓn"EЭ§U £nMs} ó­0a¦qOuw»—ÀkÆ; Oª–Œ^"—"žgƒéÙŽ4 é¯Û7§å7á¡@E|án¨yéX™b ©ª»ÉçhVì¶Nø üvþC*|c=g@VÅ‹NÄQßô5Rˆ>XøõÍÛ|1Ñ”8¨M!;{T7)Ib§ÈØ)3ÃϯÈ(«Ÿ9ÙIô:![ùèo³Àµ±Ø îQïÀlê÷æ–íåg'å§b¥b;¢¥cnZ9í#‚-…f0êyV¢j;# IµZêì·è®5öÛÂ1Õ…-ƒ°í•’b&ø¤¥o"ÐAU‘«óUß ÿÎV÷‰RÎuU íý€ìG–û®ËèŒ?ÁXŸDÅcõ–0·–YYqÖï÷:&mpÄ(‚ˆ·K¹2ØüŸêÄž¨”F‡´ÏÖÛÍ'1Ó[Õ5~ÑÀÑ[Öa*êÈ Ôƒe˜_ƒ7·ÈåhÎQãRBk{v³MwJS™+Kð™Hü>ha›½‘…9Ä,¾n¸’Å—ë3V£jA¨AÚ[÷H(oιóÀ†’åã¿ïTXŠôø êõÕwºOZ‰Húf”m5?Ê0åüîo¨Œk]Ç8ùY@ .¿p³†H®N\.¶ª¸*×è—¡D`ò’Eàœ/š-eüÍ+K$0`ªu+CÎSûý¬ ÛxB ¸¦-Mš<溧Ž_O´´±¾ápgwÎtËOt›å4YÛ¤ŒQ92"Í[ éN™d–^YÏ~¢y+êKlxTš;]ןiç] ìYWˆs¶Øü`°~·î{ºâ0#Ýñä¹±æ¿â¼Òˆ‘ë-I@•‰‰º:ÊÓ4l ¨¥È¬iŸ&Ns@øxv“ðªôl[ôæsq¿qp[Z7掠âÍKä[Œ´NüÞi¿ØFØ:ƒšS݉ÜvJÁõÇ÷‘Ÿrý¦½wûðÁÊAax {y•Ý ¬QÔöÐ+ù`½ó4á|CQËOâ=éü³æ Ý\Oj –Nwk>WlÔ”Imq›©z×PÈò¸°m\P(žÇ†ÁhFÑß^ªqf™ýà·ùB ú 8ô`tü³CDÏpuYHœéRÜÃÞIc9/ýù¸aB¬Ña-³?ŽBMEå×p ‹N­10 83W“§D`·!vÉ'x¸Ð²‘-xº"@ŸF¥u5P’ûV…íoåÝ¢Œ"<’¢ìÐiÀéE÷Oe?òÊè_èîª&F$uv…æ¯óÍ©´§&Û…ø÷¡¨S-ŽF™|ÏïƲø¯~¡ÑœO˳_œvœ½ÁM X(v6kÝÆ•e~Ègóòé~à”<_浑ÈLUµ°Ò¯7ž±,ìo;n¦Éª5ƒ‚$ƒÞªÉ°áAêfáxØh¨Âuöêû¸3ŒâÔÌ¢¥RI½6ë‚ÿn¢ÐмÏôlÞÚ2…]¦õpL\ç·Sz>=Ÿ9ýÆ×­-ôñ.X·Û.dò͹u?döû,qQy (¶‡UYû6 V{Ô$±_ºßçƒ{ô‘ž0g¦þúPûÐýážOùxTáÝ­ŠéÜ®µmÇ {Ü÷¥•—3Sû¼Îõ»š„Z¾±Î=B7Ž´+9i~Àâ7 “Àq5߂˩J]PAa¯NR18ìeÅškÑ5#ÁÉw\CE†AŽqW£öðË]Ýß¿\kÿ»®ï÷S!Û±›Ì!ö u=ªjQï;M°ÊóOõ=mc¬DÊÊ¥öù¤VÙ«nð댤Çéâ™Ù {RØÇj/ œ¦K[ûÒð瀒­%*D±¿~}ÈŸ‘HIäÒâ,i"ò8œ6E.)'ùZ¥]`p€C~°¼®O¶O8u çð¹9ü3Y Épr;˜ F¤·}fM,®p³%ŽLÀÖ?Æ÷%q®/+½J¿Í½íç‘ú«.øÉÑJ ˜nu®’˜»^™ý›Là­|i9cg'ïÂk9MX×Ñý™#h-8 0ðÐéöwr„½¯(¡½ãt¤PªÖÁàQ¼ç¬ê²bߢR“Û‘ðûa?oB–1g§²Ë-ÊúÅdw,EÚ â¢ ¹•¢I mŽzücÄ­ †§+J!R1ncZF‚¶ª“nÝ¡A/<ß$):#T¯N’ú'Ôwª üx•R©˜F_ïé;ûÓð‰ÀiøÒãÍÑU…Ñs4µašcç…ômôßê6?ÁlOjlʃë~K‚’z‚ÓNB%Æê¶ÙÚ¶3á£Ê'Å×bþíÕ‰Né˜mÈŠ}±¾ÍJt«‘&Ò4À>’ †–²BS¯Ùzìz¦ì¡»6!® ·š¹Rò8>ØñX÷¶ªîù°Û—…“4òCr}u€S[¼êJn©…fŸ7šÝmýΖçì;dUT€bCþ”©b¹”O#:1ýYHAþ´Ç®ÕaXH¹BH’ßL]ž}ƪÄ-Z«oí´›äzg¦ZÍØzž\jögJ•i„&…‚ûÚ±¶%5AA³\à·@ 7?ñJ.·ðwpþmšsÝ-ªBÆOôø ‰ÑxCi^€PÇIsVO’l$k¶DÌÊó+ϱ§ /NøLÆ¿TwéÒz!}’ꙔˠéÅÚDLy%Ì(&òT;3=bí —:]Øùjwhdð!îÉà 3J¯¶,úþ×\þÕ~ögáP>-dyÔ‡×g/ÃêQø»ýõá\Œf•nñMƒ^3˜HëžåQͰڠ_ÔŒFs/qa¶.b²O›¸ÒìtÒôe¨ûá4ËžGÑÁÈŽUºçdXJ0|qÏJr-©Xóõâ—ÁWʈX 4ðIÕŒjµøˆï€É:3™Û%Æœ‡”Œ ­jÆ\/S]ñ˸[$}׸ê6‡kŸÈ÷Fƒ »®ªmQÜIÇMçÛÏ¿k9™¯(½BgëzY?IF£˜å6xÙ´ÀóÂÉœ|daïò!‡ Z“°\5 Ï!ÄtBñTûă‹•:NþB|#ÞN?ËåËLÏÖ»žsPôºõ;ŒD5¹Ÿ†µ5ŠEù :z{ì–Uߤ¤>BGØBq(V›»FØœ¦¤È÷äÑ+åBëð!F¥,ªàÛr¡×›wæÍ3’hJÜÅ[ÍYü - Á ç{Ø–ÀîK¾Öá‡WߣlÝÖ g[ç«s<Zl÷»O~¤ó+@©ÖCù Dë &.MCÕúX@ëç|ªÅLá|Èkÿ¯{¸^翎wq?yJ}PQÁG£rû¶‘´¤Ôåsc·8º]ÀGÖ=Þ ÏDKI¢Q¹|½ÅL¿ÿzP?¶ÞµÙ0±ÚlÐÓÝ}aäWw Ø)*g>9¥æÓç›ò /q†w4+VÖS(óã4Áu¸ËKóH<»d^Ÿttr„!Áh«£Í-þ>â %ŠÑÑúTþÚ¦íi*Vwô>ì÷¡ÜSÔ°2MyKsËÙCÕXn·¥’£ü6îcŸU綤yáÊz®No¨}éXwpüÝJã’Hb@‚G90™>HØ¥¼È£Y q=‘ä ýTé„Û,áWkK]ÎûòžôÞÞ'ðço’nAà$†÷¥J€ÒÙÊ8[÷’î96 »O³ÁßùÆý©·Xö%bÀ×&—0"ãf~´Ä“ðŒ´ÏÙ«­:±—Xh¼¬ß9m™’ò)к-,0³Ì@ÛDM‡Og¼¯lg?í£è;‡W“ŸTb;´¡<^·iŽŒf±êñð÷kÍ£Všc¢›ÇϬgíWd¹|ùb)Ö¸ÉQðÍU_kŠî=vfC…‚붸?ŠìSÔ¢,¥˜B[µ­d÷x˜‘æ\ØuhÆà¶iÏÎòë—§™©zÙñeä×W=={–Nk3õû¹æŸ`©gáUÛÏÊâ'O~ù$Æ»—ÚÕ¨@©°ƒ£Lùä*0)*¾ÜÕsEký4þý§1¸æÏû'Ïõ÷‹hïU¾£$#¬q=i˜™ÝòåIîïzž)‹&²­Ú±ûo÷É!f@7ýû/L"—_¯.`$S—‡¯å¢3ô“G€A5ÞázÊÖ—ÔN¹²†]Ѱ)R½“ÜòŽ²Ì†Cõ  r³÷æ5]ʦ‘­›æ‡«¦ŠÇLÛé<·/Ý…:žÐpBæ*Öš×~âgûV—`Æ›äÚο3<Z»clpW'“ï; ‰ÙºýŸÕÏmg¤A é¶ÊÞüþíëŒrò9¼mÔ,›zŸëç@³jÉüžH£z²¸Ä@ͽ˜ÄÈú4ˆI­7.\òozTÊŽØÚÚj `[;ú´ÀÖa­ 'iwìX^nÒÓ¢ýá²¹°ù³èIý\ø\Â`%o÷GªÎÝ’Õ2K«[YC…ü½aP¤úÿŽž–qPisŸ6Öê×ñìçÉàÞx8ôl¡zf¹_±OduÏÒÛC¡li#j¤[nYhŠú>Ž ßíe 5<Ÿvôámîd©Ai7Åã÷“´´Î;vÆp3jDRÎ P²CRÎY½ÖA€)ðßâÀ˜½Hê\[T'žL¾‡§óK¯ ÖS5eŸ$†¿ ž÷iÚÅÒˆno%Ÿ J»zÉkócí–~ÁÑoÿ õú8Sò (X¥‡&þT yîj@ÞñE­õéòIi+ÓÑtUÀ`ûÌ©~›ghéh\—G…Bн«È¡ÿöãÉPÃúp×k˜ªÖ.c7çË€ì—é±K輞£Ê®¹k‰BFâü‚ä4­@OJ׳!ŽÇ^óïæäz ÒêËñÄ&16µû$žêƱ9ïˆW £Á§)õüyÑþ×åÀ”³æf/` à×Z‰;ÞCþ´ÀÅã @Ôâ´4¾@Ïà§A]wJ5qsZVU$ùÉej¥%7 UºŽ\ZÏNÇuBg,2~Åñž'厮åí!u½!(+“®ÂÙb<ÇÍ'?®ÕØéýjÞŸÉœ¢(ŒD‰¼Øµ]CàMðçë˜õ/e{¸¤ÜÒ18ÁÕáJ ÷ÛyÓ¸ŠÙß¿ìMÆiˤ:Íi´gטHŠh×”„0غfý/³ZýŸ›4•;ÿ2”þµV]9ÝÌ=䌓ðüÌã’’¿/É`g¡’Úž4”5ëî;BÏ”SA¾ݶð!U!9¥÷%„o‚1ÄÈÙÿL9ï÷<Ñ?;÷™ôE8°1óžië葸áÛ–Ó& =Gf3²!ü<û/‘}Aš›9LØ9ªËÚQÍ‘y§ÅÈjËZE¶GfOe¼¬Š&*!ƒ@ÍÖ±î¨UÛŒ¦âúùh2åþÖ@=.˜›ö8Íþjª>shÔáÐYøaãµ7Ý*];âêÞ9Xh¤ÝõѼ„S›³P_‡¢‘»ÒhVNb¸€Ð„w35RR2Çï~$­Š?Qð…5LÌg=ÀÎÐò$š|N$ú¤ÈÚߏޱÿ"À¯»ÀkñaI1¢—ðõ]ÔÈX|¼+t}ÿÿžøDy÷Ûn•ÔaïQÅKi×H/IH®"ÅŸ^ŸŠìõzeÖÑu›g‡ìvwÖÞ_¡ÄR–m/ËP¥7,“°ÏCv/ÖÅlÖt}¥—›ÝWÆr« `¸Œ_SAZ ž>ÕÇL¡ûSà•I^P ôâÙÇ`žÒú^rO #c¥ÑýÞ><ñQÆ<¿­Æ±éiÕèʆ*™)§ßBµ’òk³8Š£ÐÓ­˜nD´( ŒCoQ‘Øs½¥¯(–r'犺³I_í!, 2½Ÿ¸Ì¾¾è^¥TÒ‚`àãâ>•±BØó!ˆDz‘ÝAmJd•›2âŸÉþ÷öhˆbŸ3ô¤åÊâ+ì¤ðÍÁìÐÐfŽðÁ«V˜OΦáÄL‹å¡:ÕU÷.ñ×2m³ªáwÁí%+ǧC¹$†ÌbΙ‡îqXëAwÒäúï%%=^ï1½È" ÛÞýÁ@&Êgޏs©0K'íAÿÄ8çZÆNúŒ“…RX°ëRñ)¾PØŸ£qšõÇ~†Rdg€¸SYC÷óîøß&‹câ±îFûÉ3yF³JåÏ-}½:í+Þ‡×'ÈÖ{Õ1Ü9kÿQôô¶?)~óºÁ'°ó}®…äØ%ø§¢"Ûl0„ÞŸc›ÊÍ×ÙÌ1Wwœ ŠêÖNˆAcmkºø®ûhxL”Ø}I¹>¢óZCöI]÷$ÎÖ3óÀ›}oUŠÜ,¢Ž"Ý…6äÙYc#{" º‹ÁmÚF„ß'¨ƒz ×–MžXƒàr'˜÷˜r¤ýyH÷RˆÕþÄ8—‡iï½§ñ¿žú÷×y(“¥‹S úã©FÂ0§•î:ªnOš°’“­¿Ì³wŸ{Æ6Û7½b„ ÷Ç'§ÚÌwqª|¸BÔBªÊz`à=£¢E1KÜ Â…=5È»Wh–qé?.É ÄÛ€~û™~ºFk)Rùàg$¼”Ói¯oÖ¢ÌdX!Aã9Â35F⸢ן—¿ô!"!‡(v­êï)é¼î¼[÷µ‹p¢BÎ< W@*¢ÃŸjÙN3òЭÝõEÅ‹0é{šc_œoüâô E7|¼Iwª ×ÍVs§þ戗¾~ûpe¢Hçy^Ð~î%%;0èಹ),Ðu²vèÁF·<Ýò¢ï %¤¥Y^í¥ôᆾÝ‹MIµñGxXé1»[Û¬î€Èˆ_Ît-a…í²¯)´›”ˆTôÓ4UH Ç2yº¿ö*ý‚åÄ"´wæuQÌô±)ÈlêºÉ;\ˆ0UHáddÒn‹{œá˜ ‚£aÿr%°û²øÙja†ô¼4¯7†ýp%]ü(r´Âv­QÑ8¼ÃÞnÛ Û`étÚvñÃ{œ¿jæb˜E©â¾ • `è>_ÈäÕÍŒ8yD3À½£*Ã&|Óèž fÿ•o'hü)#nì0º¿õ{ˆq¡¦1Ú~ôÄÀ“É#›¦°îÏÿ1ÝåBT­ÄZ96!^y¨òÁëÞq½Òñ™½çøzŽßþ{‚ÖÏd”H&ŸÍŸÃTU=­ŒÃž]þèYd<©bu·íyD&Žü RKõ¤)ŸXrÊ—ñ Ú„X±_v#ÄŠû¾½ãeLÌÓ˜é<£ÝÐ@ÓMÜíOŸlKÌ”š×Akj=Vù:€Ç êÇM<=àÓ€^›2› 5Ï<õcµJƒe{ò¸Võ3]ÙÏI:qÇ®Ý={™èhˆ•xhäLåýœVûåVUm¨ûë%ÕŽ'½f· "[MñH'æ`#§°íTú‰àã@™V¸/w­ÞgÉ6ý`¸¡A˜ °÷Zó—Ï tŠ·}N»)ºø5ß*µ 0Âô{¾8å‡ÿF€Ý/ž>ìß8BŠÞ9·88=þ%OÞÆÇ95 \û¢V|ðËô‘Šsîx!׋FÜ`ës_ïD-õ;]…•08þ€Bòqè®Á®4ÇÍ[§@ôé}ÍCyE£ÞªVxÇ„X(ÄÓ¦$;t‡–(fŽ{N¾ºÃƒKÇ5vÀ+0·7{¾$±]øžð–âÁËDg[$LƒØ¢ 8ž-4!˜¡#¬`-æÍqÒÈðd¥qTg°ºøVÁ°žâá\hQB \{_âþUaÛž°ç<ùÕ\t ïÊV×]{ d¡$Î’õúóg®ïš•A‘ÔÓ/‡pãE,y±ã/À ‹±§Z¨çŸ¨N`HpòK7k’—{È™‡«À@àí×}ëyס³ùrQÂà n÷¶ô äû9¥’H=÷á3¼ƒª÷ÏfdÔ™“y\÷¬oe"½ †ƒ‚¿#ø‹G )¨8Œ}d…÷g]5XÌ:à©¶%Ctï?è)ËIÿù,œo Ìz«ŠN+¼ß£ðºÑHçe9寰ÚÏiêS˜ò.(ÇdPö0üs&¡<<@áíG+ÅC¾µŽ?ä*yO¾=GÇZ‚1éí4o@ÔûæREÒ–Úo36¸4ô+Îv%B@x³‘ðêŽ~†%Í’#(É;§åã—?ˆmiyÃüÂ’%¶td ÕáEŠq pM^ö†W£ß“91Bì-n•„ÿJöhÕôÞN—( •Ù-óÜm_³ÍÖà=Cm‹{?`¦²Î Ø.ÙÖÿ;¶ÝQ#H ÕOX¾‰©~à!ÒTCüsè:t§Ó-ûFhKõR4†Ý–íû 8›3nQ†|Ѱ°©Æ²L±½ô^ïû‰LZ!ÿû´BúÇ_Ô0Ëj_@÷ÇÃ>Ö ´”Û_±-IwÁ¿VˆÉ¹‚ȧtߣ£›É©¦ÌšÍiºÐlì¹1ÇÓ•ÂÉ~|¼ˆ?."ç¿©/®WaUÎ;m\2…Ø]Òŵ ù#‚=$· RÀÔÀ|Rn½£÷߀¤D` üÛOÅàü†oGP èm&)Æ ÌjdÁÈv+·Æݨ‚åžÊßí6*íæh³¬4ÞÍXXáâbÉô’ ĶzÒ÷Ê|óÕTÝQ1øôu=˜É[“a±¸/-Js°LiŽ)A¨Ü)5¦®ðfä-…ØJÉâÌÅÒo‰|¬ºÈÛý‚l:¢ëp°÷+3J'2@ìûˆ‹R‰…»HÑyQ°rßiäx³ho’:^ŽõƒLoš±ÒȺ¯­£DŸ˜îD í¡\ðÃÕ3õþWZ3“׿×|þB׉3>8ôàppOv“u¬¤"9“‘¶3ß:p±!áèGH£¸FÃvVÀüÇÕžÇqJÄ¿e¶ßÖ:úd‹ZûýVÛk—kÙwàPØÍǬx$U~-ÏPq‰›·#Z?óØÌçÄmÃ(1u"®ZÇ/°¿up?“a`”ry¹v¹{~PôÙÚ¡þÈ®xtÆgb•®,æ¼|Ìãæ}iŠ(á팙E+“¼À ‰§‹e\¡¥ñB<~µçƒì ß‹oC•?>Ê/ÅSì„è½^´e_ „ŸC‰>XöhT@Î=aç4@ÊPß㿼°ÆÈ¦6YØç<õ8ý£¨»òTŠ\‚~í1i(¦‡0Î{ØçªìNõ[Ïļκ¬ –Ãßɵxtï[¦óãQjV»Íï0¸nðuô‚ûÍUJŒ y/ìM± UI¶ú±©˜4z #ïÚÉQ‰Ðâ¬s?UC\öžJG{ù´vÑ@)ŒôË&´ür9-¹Xª#žài- #ÈÙ?…EýL]×™ø“›óùÂ}UGP7ùÆö&k”¸U\¾t¦MŸ™^Jëm+–çEOçaòÕ9wɸü¬çòÚÂðúßI_µá#øKEÿïWI5ϼaÊX¹Ôe‚(V…áú‡!%ƒÏr ¤ª–<öT¤´BÉXü†(g=xw5DË c•hò÷ñ¤À¼@„˜àƒ£‚V*ý¿éT¯–OÕ *‚¦Tâ3â%Š®\Ï“‚ŠÈι!jÁ‘ø±(!›m§Rù„ÉÖÅY¶º˜" ³~Ö©L-Ì.4ã[»}z¿ž÷ò÷†¡©³| 쟗>í‰ :ñköH–M÷2nòÏ9zBØŒƒÁhHâ$_9î„í‘O‘Û‘j*å̉MQRìBµç0¾ úŒŽë™L’_ß$ØÝnb8½éݯ2…!ûø wû_¡á`õ|¼ÍBg:]«pö,ǯ¡B²kLÎe ²Ì·Ê¢1qx‘(©ÎÏzዠϺ˜ "[~p)·â‘Àìf…–ó°) LztÌë˜5ó1BÚA„õî ùÜB ç\µ†“ÙÏ¿ð·j/Mãñ_>f´‘àÑ«hÕD <€5Øí¥!xëÐ:|7m<ó%OÎÙA¢–Ù¥jòŠ)‘yƒà€ºz† iu—¼<$¸ŒÇÆ0E>ƇxÙç ÛÜŠ2ðœ=_:“ùü6PA­P‡¸RGˆg²†æú8c¯Iáã_ààÜF Â`MQWXå4Y+|\Æj”ê˜ëKÅ~  ;ÿ&ÈfP¶M(Üö–­KTçBE=C«YWŽF= ˜ÞøîM¾Oµì(Îj»R_œ0Ÿtò —Þ©$+Žwžbbêš6 b.ËÇ"ÊÙžþ®ZI€8ÃS $ÁYì ˆD• †wšTk¥Ì³¶? à ž@¡& }W+ÓYº?ÖŒ˜=T‡ÇWÙ<|$ڹ͵¢€¶ÛÛ‡œñKϧsš˜ê³–È&Ò/7(ä@#‚îà HøùñiðcÚõZ®Oôƒ›Zxɲ?)‰5j½Ï VŽ ú?¿˜J%J•Ät•sMúz‹;Y™Côo<ÅØüoÉÒéýâœ_+à½ÃïA±Ÿ¦ûh^5Ÿøu·<†Æv ð0žP´é8d!<Îj¿™dêy=ƒ®zþ<ޜϪ…' ¿¢ñ|t‹€§s*ÑÀ*‚ÔjóülBM'=€’)ÊòI›à@û:øÀëz3OÕþ°€¿‚$è)mgi8ä߉Ñw°°îç·m Þj¤O`ŬF¡ÛAVl^ÐÉå]bioºþ·y-£k Yñ‡õ໨Z#Íb¤à•Éè ´­²ÞI´Bù£’èõß—Cvm·ê~æ…8­}\§N»w*—ehÆ76U ‹‹¥,ÊçX¢ifJ³nƵE¸ia—=nB­²ÒâKðv0\€Ü iÌ&M½+è…Z)ÅrœdÁ‘»E,š`qXAhØ.>^¥ûà÷X–Fнÿ> ±g¡ß\ªÝè9æMã3gf–8#J;Ý™©Œì@O’`ftT-mûrõ]­Ú*ãÎg Ÿ>1\ÅãÕÿîµçŠ ?>Ð ßP•3Ÿ“ kÊ®G~¦¤÷ø4nWÁ xá?« <ƒÙ1Â.^Ű¯« xuÑLÞPc®™ÿ$Ó̓Ðn‰‘ ¬#ãÊ`}Äëås‹"Üœ’Éé¶ïgHó”Ëß+elñ¼òÅ¢bvÕXM×Oׂ'¢Ÿ¤‚à±µF…(µbASÁ·èÇ(ú‘õ{‚nH†D^BåDÿþ;R;R’¥ñTáÓ Õ· QÀHšmÚ?»z‹¬×¦j øv¨$Æþ¡ƒÙ;WR¸)ÙÉ …Z‹·Qú¦²Û”€À2Iwšäl tb&Ìëo±Àê„‹‰œFóÎÚoŽÿP-5¸+õ“{òŠŒ³Ôt÷Ïþ¬®]|‘¾ó ówѸ‚îmó3ž3‹ÖÎ{¤64·µÂ3ö!#óiÛ#V »ymY|FIÇDÒä]ÊÐÀjSOd BÓ$¢~¤edLº¯DÒE#vŒ´Ní ã—ú:¬xÖ‘ЕRŽVLÖ°ÈŸ§{Fi²…ýú4'¶e·ý v·Á¡ÛDápî)Æ»T ìOˆdïF5Ût}G7²Ù¥z\KƒzbÆ m£à<5lƒ\`@>¯(a6¦A^A>@^7j;ú#ú@àKe)/S®¤*wjÍ¿+Ky*N¤îá`óѶIÐgƒŠ_›}=žþ»Ø·‘Þ8{+6ƒ£K¨ùË.CÞ>qÙ‚ ®ºÙ…ÞÀ¦ I€â2ûhØ—n±êˆ*Ê{¿Ïò9•}"n(›âð¹%MNE0úK’V”gJR³éÏ+ZÆa·Ä(çïg“˜Ü€~Dà¢àî?Ç '<˜%û–-§Æž Ñ;™4»[41çµÖ¯ˆJÓ‡+þ¸¨kö^M%ÊG–¥‹K @ó<æ 9Q ›QôQ’›£ž(µ\“îÏhR.~»TT'8­jù¥f¿M0—cܱ¨£Uü¯ân‘EßVºäÖ p˵{¨©½‘-G!½:èÛðηRx½¸©eij©x‡~Òõméoú JíëÉ7‚Ái"T%œNh’ùyˆ1 ¨HN±ŸF€Äl³ô¡5]%Ž­Î1ªï<ñÀ½áB¦Qvdz“`‡ßÌlybeã3MáÀ°‰çž\J¥ç,7àK4'r§7™–K‘Jà—Á¥—•Íà}kú?Ü€ý™ûf»)Õ¦¾HÛ®G©¡Üý 4 äu_<é¸ijBÍ"yû3<®8rÂÒÌîGÿ7¼LçüÎc?ÏÉÛOx.M8tõ ÒÁ¹ñø‘QÖŽà.¯AªÏªHE2¶§A7Ý0.÷Orxཱößg»i9©çÏè¬$Ïå ÄqLƼ(ÚF^Î$BοXùo&[©&ÕKÅ,ÅøA0T¿W>3c$GASÑ † •Ä$¶Ž`ß3Aÿûbz QÀ½ß~;ë9ëæŸm'ʱ¯Ñ³ú‚ãâ–xH)§¦Z %ó°cmƤt†þ¤a¬¥<ðµ»qrŽ×ë@–‰}¡e#’ÆCèÖ ´Õs“Ù[ÖIJ9ð‚ÓÓÑþiæô6“© ¤éM€Oàð€ò£ÞÎòÿ¦YD( B;çe~*á·ùn`5X´Åȵ½×ÖÇÅäðÇïÎ7€¯"_a3_06Š~Ìv úq샦"PBÛÑÂç 7ðS~”“äK,Å"…—‚q¢„0ÞÉ€ù"¶ÄBŠ0}áãiÏFài€ÁÄŒy³)/pò&5cѳ€íQOmÀ7+U LǶ¸G9J vJÀ*ÌΊÜf:ûðï&×1g`¨~ TkŠ"rýb4‹¤+ŽŠ4˜ÁEw¯Q1†ß~Ežò ïab aRVM¼_Ùá:'(+X§0ïê4ÏÙ‘1>ø–¿5B\Å<%ø|{£S³ƒôôS·Á.f7Ȫ·\ý 'fðÛ/GR#dêyͬQ”ÏDàP;ªíÛ:‡vÑór0éÔë?N <'þbÖâÏL Q¡`­6eÅQt2„UiG²OÍÉÐþ‹WÙܭѳ$mãEs !' ùÜÂ)0ŒfDjXnO~P¼Û2iÛ=œË|kµ*ÀšÅ´! °°È<‚Ø·l<2!ö1òŸšµòÕÂø,;ð·jyÅaŠA«vz¼R4É3Èñ·“úóˆ^æ¡AK&9íPvE3çú>n…®·Èœ^0IrÇØ <Ÿ1-ˉ¡´ü‹ÕZ¡Ã?DW8wKï›\!ßž#dIAÆm5,5ßÝfe(Ÿ&mK+‡'!D‡ ]¥E÷3yraK ÄêO4g .› ’@ W.…ZŒD€‚*ðÆ ¸‡©ÿnÓUžNƒ^¯ÃgˆªÖ­ìß-&¿Ó ·¢€& ÂpC­r§¼±â_ÏzY±’›}€ò^äÌù|î ŠÒ&iEBÅF#¶¬öÜY®ß?D|Ô3IT—Ÿò&‡WSÔ”‡Ümàå ƒ-ðÀ7º§^í+”I„S/y,Wnðèž0ƒ”‘*S®ÞʧPŠFi=fPNñsX¾±JDŽw"žCà\¬l tM\(…`Û”ŽѹígÍÞ…ô°E>€5‘I`ÌÖÕ§|B¡”jé‘êöyÀ=S¦ê}½9ñ[3„8 !€H»/âïô/Ö¦ØôŽ`ºØš7ÆAcØë=“¾El”ñJ ÌÿÖèà@DáÃUL8H€TY~cÒøJ¥q¢B½œ Ï)TôÌe\|Ô_ኆMS=æA—Déu«CuUÃ:ˆþ…x¹ÁüOo¬lº‚/Àî¯R.¦±"s±“¸q|iß5`]±ŠØzó/郵"jMˆÚW!µy‚êŸýøÈH=žýwR­ÐŒ,‹å¬¶£4ÆÖö$ »2¼GR¼ž¥ú7 ýA-8®~ûñe›5¹UdiA½Nƒ["½…×€J½Ry<­V(ŸVÚy:˦­Â%Fì‹®À°¥ø8h§â-z£RWUäsvØÒ%kÔ |rìäBQäñ–ç;™êܶ'ñ“ÈÅnin%r3—p°+¾Ã<Ú€ÿ:Y‰P‰¾˜ˆÉs Õ¥ZA3€žînêõˆM×™UâÁñ‚Ÿ)aݱœK¯2ÛXãÚuV÷í·^O~„Ü!e‰ "U Ãô.Y²^YŸIý¾Ë¿­ Û#àìß!Nø°žMEÂÅÛö)¿Ü#Š |S«bÜ(!>”Wª8Yšõ¾™3¤ÏFÁÛ¿Ã<•\eâ0Ì×6xõ]ÿMí¨ë«WH1ȰWºŽ¯hܤ’Øÿ<¿J¨÷— `Ýæ)áÀÅó¦õÐ"þ½ƒ\‚Høsðâׯ>F¾ŽO^=%û‰¦Ã0-È=½%hp›IïeØdt¯Š†f+ra¸á=çŽÊ÷ª§ƒ1 N]U\ÝÞuEßÓœ7Ùã}ïè13½ý¸`Ù¶©+æ¨F;eƒœj)øâE0AðÊ8>•íïs°÷oxþF ªo§ƒ™%²edçPê€ÿ8òá}x ˆ/ Rç˜8ÝAG¤{÷kZOþ—xaß.S3‘„µa]mÍñˆ txq@Ç!X‚˜ Ñ})xIð%6%ºÂ›õH8Öb¢‘ÙeÚGІ¦S Âhð’ÑJô¯`Ÿ`N$«O÷\‹Î¤èï:ð`̶KFÑNKdù&ã1b«\¬ „Q† _ #:JxòrÿsGYßø¨Žwçë§r2h"…Ò® ô$®X˜ÒM¾‡Ì!#æôŠ­åŽ,´ú6ú‰'ÙlµÌb£Ò¬ ÒÞòÑn‹y&­ )žzjOøt ÷­üMˆècVöŸôÁó¬•C9K¾¡¿”iUY'¼óÎZeüœŒ‰lˆÏŠúÒ𹫋ÕéÃjOžî1Jì›+´@'×Ô‰5Ò¤—öÔàS)‰XI¤“; ßuÖN”‡B@y/N6{H¿=«ñõÓE€ƒ¾òÈÿ›G ò!%‹SxèˆÞ ½S‘FªËtà½2Úm¦~§ì›eœ¡Þ8géÕ}‡Ë, Éà÷HEo¤ ìcã¿BïT"CƒUîú_¶%áý"ÝΟåïŸAŒ¯FŠ|è8Ã]+ñ*_RÞˆ÷…ûÝ>æ‘áÌMãdˆBö‘êd  k¦›4ϰ ¦F‚³lÊëZµã$íL~‰Pš­§:'rr«´2•e V~³þ‚=ºªhB8ÆêÔÎ~‡tÄ:¦ºs/Ý´6¦›ä:%äì§K7á;FŒ döûÃú_çiZ%!⹡AôH]Û݆f±CéÖåóˆ_)Ú 4kftúiý¸9!ŠÌúÝ?Çù á'[Åfÿ }Š[Ÿ*gÄaý¼ùúE«rb;˜Ô̆qRÁXñw„¼®éÃ&ò2ú“„bà=Øil»[ ±Ù ²Uä ‚·ÑPòز ¬`¸ë*-‡Q¾Úê‚e,çwôã7sí¾äá#=#k `#ÍËÕ¡“š)Œ!³ ž3ðœÚr0”™{R¡‰úý úI 3­ S­¼GÃ+¿ôÔK©`}¯$¬ºLúÓ³i‚ÀíØ!ã1P¡X Iš~†È÷`B$œín6³X )H"¶c@ ’V¿?UØk§0kà+­÷àžß˜ç¤f.Ї8 IYF)`Eg£HNôc&Ž¥€™Â/‚1œÚÉ_8çZÎF1œ&_S‡À&/ΣQ€ˆ+¾Ñpo¥€XK;% ^¥Ïxz‰ÒÉ€ðd¶\ýéú™‡ãר÷ÁY­5éÈò׺d+Ž5z/Œc‡˜ZÛlDDw7¤„ÂÁm¸‘ JþQÒ$aäÄ4¿jÚTÐÜñ’%± ºð‰"½ÿž¸¦ºO[$xo¦Pýâ'ûyeEþ×ñÆæ×À$ndò¯CÁ_ç&8úw0ƒs¤¹Û0‘41³ÉîÜÉ#ÀU[–†£j¦»aqœmò¿ƒ¯pC²]K;o“¸?2h Ý'Sàr#^<å>mF…ÌCwK€.Çʦ¥âC‚"·º‰Íbe³² Rêv!ùˆ…ìGeé[üYûI“ø¦ƒá,ý’-k XÇw7dI¸ÁWTÈ@ ÓîXÎ6iH$%ÞTE1Þi–ðóëóÐÖš?¤fðØj_¼BJÀà‰ƒ>"’Œ’ø¤Lý/üýao&?GG¾2þ.o­™HoÿZ»˜¸¹ï_,ý¿#¼vj Í‚Ä÷‚3hjŒÑeƒ_ ù*ÔOÿ7ƒîÇ]¼.`%!bjjÁˆ©Õ|­úŠhAo¦^dC?ºÕÏ ÿñëŸýa@Ë»Ù@$ )aÔê/ äad$LJò;^r5Âà ‹{²ÆÓ#ŽþôAd!ÌÑóÈvJ7¨Úî¼Ie/󈼋&$ûíQ‹Rp äl„䣒ˆÚòXú–M<ÿÀß8‹ÑÀãéß &DNõBGjFyWkµº`=ڌ쟞º¹ïk½º`ËIFhÍÀÑ/‰’-²ÃK–&‚ÆÊS»þ*â )H2¿ÿÍs; ¬Q¸4ᇌԀ¬%+c˜44vGÍûûÅT„¨ñùU÷C¯´»‰ïÜÉAêxÁ‰\÷%­5¿HͲñYÙý$ÚJ_厀7*8‘zF! úÌ“Bˆºì'-EnG½^¤x…ÄSEÊÁI`@-À:q^û¿×.ÊBîÈ<’JºØuqafVæ wplYy&i; Šª›à€é¼lQº©1 „Ëì§¶|áRÒ©Ùy±D4‹½6¶ öý£|™Ò‚|ú“XþNöÆCê¹³9¡Mœý,Á§H3 /Õ鑊>ZÙ¡9õ !á ìI=eÃ@Pàÿ´^¥]M]Qôå‘0…1 B%„À•°0 LA1#,± @ †2"`‰ÈÓVVZ(2h,(ÊBeRA¢((“L2ˆH,q(ÄeÒ^í_èýp?³Î½{³÷>]¡=:’0ÿ®<Æ”jV€¯.¹£b³o€o4¡×,¦^hjkû [.n$(Iãîuæ(=shWòN™12Àª²6ögìF+ “‰ ÁÀˆi™Ä^YÎuÒ»¿~žÓë5úñÒ'Ÿ“a]Ö²Ëp$Ù´gßÇ‹ï»S ¡+õç郌h Õ`™\×vÃJ(Cwì£ôG°%ý›§«C`Í0ñ5éÛ)­„úB߮ЩGyyëÅXmXÇ£ Ò‚©6—0lÇ€èî6@¾¯D¥Í,ï@¡c»ô–ˤì\g«ùéì•Q«2ã¦Uâ—6-(¶ö% ¥–pN!éª÷“íGe…—ß1·|´?Øê¢ZÉÒ“¯œ€Æ«/l°ójrB龋Ø0̃ɓíe{̘1쮤…†÷€,b¯qêLÜ…º_bÿ%2.ž+¯n¾8ǃKžÄmª:ÿq ébo°L„\Hù¯¸¿Ì£ïõQkò'†ZŸy^åÔÚ¶8•©t¾xK$hÚãߪ.ç+I(ݘ‰±$(#hÖc»ñˆ'z×¹Ëæe3o€¼r5‚G¶>Ífµº‡òÖöŒÜÑ2Ñk%Ý }ˆ“k¬9 éiÇÙù¨q8ð]iŸséd±‰‰m&h&y¯§¢ñ&ñ3)Ûéf&(?ò‡}®(w W‘\y”q²s=Ð<Ò ­.Ea“˜ðþÍÙŸ’eͱ[À+ÎH'ᓆÅ鳫ä1r“ƒÃÞȦm— üI~ÌÄK¨4õbLmÖ’8º]PüRi&jb­……8‡5ÕrX6³%C”ŒÖai,]„gáÌÓ¸/áLäŽ7iòWHk_ºÄèâ‰ÇÒ«g®¼ø;¿B¢*RíÒà±Tÿ¿ù>ý”÷|pˆZ·môÓùÛôÅÇråÒŽªêñ<ÿ§ëÚÃTäœümSòÕ pØ,.³z'ïÔ¿PKL‚nTÔ~©ˆeŠAven.iconset/icon_512x512.pngUT ÿ³.b´.bux èè¼½å[”ßö=ÃÐ) ]*% Ý" -ÝÒÝÒJw Hw×Jw7C#Ý50sßß}¿xþçpÀìkïµ×:×çÜ×5õYI“àÈ~ú¨ þ} £"¾\{Í>"¾`8}Òq°&þ}? !¾Iæ&¥í¦æhéæiâbðôôdûâ`ëjfâdÁæèb•u*B¼È~|¯î•}¼æé¥®ñ¾83WÅxM÷:lò½œÄGdddŒ ü¯_¿Ú£hyÎ͹ßì·7xºgý<ª~E yµþ€_¬ øûõ·=ìú ºÍ"74š-ìiy»/d¹Þ–Ñv—í:!º/šŸ¬*ÇTüÿÓ§p–„4ÄÙ¢‘•/ÏV azdNoÓÑŠÕ9¬Ñ$˜ˆÆ ƒ°_=GŠÀ ¢¨C è@Q¯þFÊ<\ÐKP;‘ (E6'üÁÆgxÅOÂ÷p¹pìÀÛâ¨ßPxž x fA¦kB4T(ÍHÂow7Î%—0“Û=Üʧ§pƒT™Õgã@Ý78òù(ß÷Þ£¨à×’i'¸¡Ï#Ù¥HÄûF¿Iñ$«: "/ƒNÞž|íëî &úiüÏ‚Éé÷X¨ê¦¢0@Ž©Ôû[ǃƒŸÓk—–$µˆX‚w¨©OŸ»¥öߺK/?Ë nRæ£Mx¢Ø´ú ¤H“Õ’kŸKê ûâ—}+¦'ãDI(ç³;1q *‡Gt}’1¦>äRÍOÂùohú8ú«»m¾å!¸@× ‰ ¥A¿.­„OmþMÂh)4hÜšŠãØ”¬¼vJIÜå•¢j¥ j%þrÍþ»YˆY„ÔüÍ&ã§Hˆ<ÝÃ÷h‰ÌQxÉåHê29Ý|›¶ƒÄ\îøDü‘èu#(?YH…Êø-’õÎeÝÏIÕ ºlÌÎ81æÏre_'A÷/2¨­%™€% ÓÏÚ´9 Ã:°1ÄS‚"-áO;³Æ+Qªéé|O Éâjª;guu/¨pdeŒÔ`g’‘ùÇaÞmâÇ8ÚÚè—gO~ |ìx·§¢0×üi²t€_:b¶å—² ´Óª—D5$6 ¨8ù&’ þ?5äÉŸb±™¢¢~‰7',¶àÝž¥‰»ºï+-6ŸÜç­´ŒlÄD‡ú½wÂö¢!tÃäÙ@ŸA$DŠ ³»I=½Ã'yÙ`bÖ| ùÁáDñ,þHŸ›W ý'EX±œµfh•Fx|Ÿ˜àÐvw®Â@¤Ù÷ã0æßˆì-L‹Æ¾Ú@Qw}ÐV*W¢²Þ ^nJrY÷þFæaFxk·„T¡Õ7œ2×o@§v‡>Ýòž3Ÿ3´k½œDLá{…Ë@ ÿëÙóßà‡}I>·¿opY×ÐÎc‡‡!Ð3“ S&ùTpËFïæ¹RÀXôM169±Cê;Q¨ B¤¬óß¿%J•œ¦¤¦Œœ‚…'öi¿s^B*jŒ7?¤‹ÓhV…LŸ{]v£ÿEïD ;[”&ý·úïÅxçìæPƒsËݪ>7!;æü %.C#¡ì=ɸ¿VÛjƒ+µÑMЂ9ÁA¬l4òÅ…ˆ´}#)ÿcól{˜íˆM‰žf€j¿$c›öí³:UÈRÃfÄyc~íäI‘P™*Ý ¤áSïë]Ž®)˜ŽQƒŸákƒ“Ÿ›lPBQe¿¬‹,žU?}ÏcOÀ{@ƒi3DäK¹ÁÝØ‘þ…÷|ížý½Ò’^ Ûª-6Ùù+u¯•z)!Pž·UïwZš)e;$XTå+½Ëº·ÅÉGªß‡ÔÞË?Þ˜úÜþVÈþÊÄÖOZDO ïÌiyª?jàib³à!ºvEæ…­(\™\þÛáã­#žÜŸ•VÎ=8øxi;`û}kqãKî@±=”S1³uø–=2¨çÍÒ»ÕrÕOÒ‰?‘‹ íp¹=*×Ol 5«‹e¤¡EâõŒ´ÌMÀwQ…˜w~ÈË%ª6•?e$"Í•/Ptn¼^MNï ¹Ä{¾ñ„ »L^øI)ŒZ¡ùëp®¾c-“÷òN1ëá‹a›ùdÅ”úú|),¦*Ý÷–%+2Ä~#i}3Ê}¿£ÞC×qx ¸ä¦:3B혽 ƒƒÐêüNæjð¶$=šÇ~”ýDO}ü'&!m®B²§àNãdy²šªÑž%ÐãømNø°ñ¶ô=tcsNkŠ"¶Oçwf!’µ c<¤BþÍÜÂè)¨KÓï÷Ĺ·ɹ´”–¯L•‘˜B?”…Øí“PèF܌ű¬ % IòD é’‘#sqeº÷¸uS¯œ\o,ùn½}Grª)1k¯ÈM²Ý{JŠ£€>ŠòbÚÑóÍzEW‡jè†A˜²f~(YD"W«/›`¾¤Î!síÃI'ç]uÔî«û(3‚>Ô#jÓ¡^¨I顟0…°PÊ1í&‘rѥ̜o¦÷~¸cÙ–ÙìKwÞæÐ2ü+ç’þ•}?'Ò{ c4“÷4p¡y$š(}„ox¿É:NUNã³–¹AEŠŠ*e/òˆ„œ,†e?vÛLîܳt}}r*ëî÷áñœÓ<ßH,Yz³=ü)èY”´—¢Zºùž9úÍ;­öËÆóU®=½7-ÉŽ¸E}ÐSâ’™vËá— ÎuÐýð8UM×W‡s®OWЗ?Ãb¸Ý7UáOp´Õ½ÓhÙ©VcwjRYºï-ö0·«XªnžHп:wý#-è§@ɈyŠêS¬*~€l÷ËÅB­‰yïfa­FÛŸÕ÷nØÉõdù”ßEw\¿°pÇû±Óû4O˜oøñ&¥Úéš›EŠáNº ¹|6®]m^_ß븲~Ö3°à»kXJsZ,O¢§¢{{xiÁ§˜*+tïí/~Æñ3‰<ùRÙÝ^ëXøÒÛû¡Ázê ·Íì[×û– Äåȶ÷qÒ×»8GRÛÙPUùì{õýêÌò¦(_=ÓÝDª2+4¡v÷¹Xà“Dzo¢Ü±üŽNæßømnÙ¾r?[©3ƒMÆõ»ó~+Ærw8¥¤²²r«Ê&}¥Ã³Æû¬ën´ënÝv¹ñ˶Mä+fÌ«##3\J'xçuKrŠ j$[½ ¶j¤¶v><üÈDÄæ¼¬Ó—åqxG±Þj€Ÿ[V©úwª/'¢ÿè&óøØîj¡6÷N·q095õqÚRºÑ Ã#£Îl ó¨¦gýGqqÛìë$ ÄÆ‹+?³Rð› yzì\-%˜#kÈ…xídäÞ Â'{|™ß%Ÿx†v}øòw£§Ç{7Eëå§/ôôô{ bÜ=Ï'ŽŠ] YÇO¥ÏwÈk€¥& éáš=70PóÊ UäÂS÷À.ï´’§¦T§Â©féÓ]Ç1 A[7>Šybþ£÷ÛŠ††¹Êqyeõõ\ N›®²6žú”–¢Wª¢\roæˆ#(‹C1Kn7„Ƭú÷mñª§è·È]ÌúÿÑÞðS-—R)©tj祃Ś–;ƒß-ïN×Äx]ÊM£££G#i¬Qq)­MMMC.s¸zƒ¾V;ýHv™•€¼HeéYnâ4òÛ  ÷hWÕ~;Òf?eLEdjfšQÀÒË—/ïg?3íû?ß,XNæ¿Gä†Ðí³•Åæ¤CÞ,„Æ‘f`ùìšþûþ³ Sñ»”ܾ`¹+åÑ\ÑS-ÃRß;ÓvOÏêMqèqÃØb™¢¬l”r\"f7_úf_dÖÁµÌxøºÑ޳öÀq¨žœ™ð|©âŒÓµáé÷”BêšY­þT÷zÝrÔg:O †’Œ¨Ì»­ÖÎü—#)º|–¸w,¥Ü)*E榅c¢llã"ד’{ç›}ÝœÌØ~÷›‘%²I óÂÀ.ßá–´À‘xªt>ûÊö"yäcêT®´+Hhú–éK1wŠ u´T¢Uchy²ÜÔÝÈÄfŠ TMä¬é9½×#&!ÉB£ö7yîçœÉ§>èü`% aàû擎Äͧ7Ù®Õ|ôcZi1ãâÁר»ïM]Ï!¿05¡Ì;w¹œM¶Û7äjMåœw4³-›á$•vl×[1§FjÁ©‘4ͪ4D@ƒ§†”h&0š¶Ã=Ðu„u“wÇ{o‘sôa Ö‡(Á—ÄÄšµåZ¯éùÒƒAq²²œ¨±Qq¼%¾žfÃÃ!oÕJ0œ?+(œ•è|wY0Ð<,V”¸Ê¿‘6!"pï5z0uªE K^qÄ{ºƒ¯X ë[¿KF™)2TˆåQ'p*f‘#”Í6’ÇóT?);›rR0#ƒ ÆBˆ–‘}q|æËÏUeêȤ¸/MÛ.×)üÚ )áâ—;à@øvGT1§a-è6˜þ>4¶ÌЀv™øÝd4Ç&G§Ó«NVQç`õx†±Óó´ôA»[ªÖÚËO»eê­å×AU|O¯ÊD®.Wk螘ôZLUÕ@Ðç3¼KnS‹¡lÁ~ëW’ÏŒ|°/_úýn3VdîŠèåS Ð4>…Ø¡g[ÖÉzGš† £ Hejq¯…1Õë×a?óøqdbés;"^´B8PO¸Ztâé+Žü ¼7¥8⃟Àƒßh6Ùßé·NÒ10<úçö÷›jV:Á3±+ X0þ UvX £•Ë™’:½D¤A(j}MË Ñ‡W³?Áb¡¯%#Ò§§§1Õ7˜ÍGóØ=Ÿ{ìž*Ô9-9ZΓ-dz¿lmm=‰ »““[×Ptp3œºÚ‚¬[ÇL4LÄù_ì¦Ô§”®½e1>¥ó¹;µGtJæÏößœŽÓ9{`MØgðÎM4Ë…’8Î×Ý!fO÷ýÛ÷þëbW±Ð…ܸËß„À3´`!à|\ø†à9ÄÀffô’i+$=qƒ•[–c™«««ÜssÌê~7)œqädIßœ.ûibËôÒ»|×Ħ1½Ï¡=‹yö™‘Œs§Ôs)ÀaÀ…/„ ê/)˜œü™ÚÕû… FËÕîsû䥆g8ebbâèp Ë„¶lÅ‹Ïêæ£4p¯ÃD&ä:ŒF9ÐØ‡§¤¦føãâ‘mÁx­‹(‚ÊŒÄ!íUZ`ÞjÕׯ¨½ˆÿ [eC`”¤3NU7ZðL.äV’] Y`üàb–ÉŸ¶ÿXjû¤¦—!²tRt³ô+Mq»?îY(R4÷<¯GͰûþ ä t7Õ¨²ÙDdjRÀ¬G‹äŠþÞ†;Tt>ÕÃ󨿲±qᕦ÷¯DX›WÜ¡BMÝÏšO•ZE(e/^à<á :q‡Û/»•=X8y¬ªúΆG‚0KZjLv]Dp’‘uoܤ¥qÈ]Qü¼Ø€j0*¤CqoÀ¦"ÿL•a_„¤5lÄL†(kQê6 6f8ŽæÃ½\¬âïLi^cˆÆûF«Nƒ ƒ@oYeþ‚b6&&„ÎóÝ<øÑL>ÛÎYê40ä«-œ¨o# ©p-BÔ\¸örÄ¥è”a:™Ò˜öÔN>ÇLÅÕ;œåi™š zCØm5v;ñÄyJ<ì3I>mÓÐ8*œ­›äíñ¿à_sKšØ‡ñwŽ-³uùB <4§†…Ë ÅÎÊšƒ6DíQåB0!KV¯ùæ-wÎ9mSÏjþ.ÔÐ 8íO:gy³Ãú6ª°çÙ(xõO#šu-˜¡¬AàóXÏÞÕÄ MäJÞ´xi0n‰ a°ú@«8£È6+Ø«%8ït m¹mî3DWîôýoænñ>æ,_ÿý–Bãá๰™KÌ5JaÀ4CØFѵ–Å,¾_{cã” zÕ­H6P­Ÿ`ÑÃûÀ[£b Zðw‰Ø1p_d_oøä¨±Ÿ›¥µ/ˆßŸðb``\Ÿ¬,d€TÅSòðZ6p Ð:ŒÕ6ò•J©¸FàäÿÕ즙¬ Lª]6 7>_fJâ¸ÑÔ2ˆHúÎñÒ ¸GíÖnÒ*´”|º<¶¥¿zœ,?\_Eâɬ”øöžQ<§ôâÄÓšèï)†ó{ {¹SP!y?ÛŒÛÆ|©q¨%Ïq¾’ £ð§ÆHZïøö„ëïDóµ[ºQ¹V ð‡F‡µåý»eä¸J±nF+Íõ3Hú»ÇÈv!c‡‡EÿÜáN•˜´yÚñ+ÁÂ!E1Ç/`,ž —òúÁòÜYZ³À|7ˆ™[Y»‹µÌˆ¦ûþሻe‡Ç,¡Ì‹âßä¬ ód{¢‹*%ã*¥O‰VøN+áââ[N‚ˆ)¿CX¹^Kõ ðMh²»kƒ}7H¨ Ù˜‡ƒ¸63¤20P»ý¥G#oýÃE¶²0€øN}˜ïi[$BIp÷ö¹«~„¥NMušÚ:H©¿ä±Cwì±g4¤ÿö후œ\´rÍÅþ#«ÒJl¬¸š· ü¹š 2¶,a“Sá(‹¢œu1 *©ÿyzÂû–œl—`þ.ê{ëô°›æ û-V\\|Ìļe˜9^WgƒëÔí&:šÍ$o¬þàãu} }¼)°Ñè1ôYÞ‹¾3â$L³tg®Ïu¿„§~ø¬ð´§ŒRÂxÒÒ×WÈó_l°š…à žüºß±•t-ŒlT¨ŒæñËÊ'=#¹ýè·êÎ]ù¾ <÷Ê×áî1Ìôh‡—Q 3"ð‰ï~¡T$<×Ëz/J±s7Ä(´ã˜%N´XÆP[f4<2R¤Uc¸³³£Õ".žç9<<µ9sÉÎN ²äé2³°˜mtû‹u•DÏ…ìǫ̀?•P ÎáiË¡\¾‡¾¥ƒi§>ü‹óGÀ@¥/Ýž¸»Ä—/LþÐ[‹£ù*Ímb"¢º¢Öô×ÔxZˆš9‡—(VuËX4Ú.°åífËw'…M«B9›@/¼ ƒg´•ç  ú.ˆVqø±É*–öA@䊰Du~.y)Ñ\ÎÎ<ÝWJåȵþYB‘4_žßxRÖp8êgQv¨7^_h›QŒOYÅÕÌl ÒÒ@?YŒNË1ò}Ü·:/‡Y:oæõv¿1³½~‹Í ˜ù pi.ÏÓm²I™¨A˜Œ`¾ïÝrB-à{Zââ€Ív^*CG*ì¦fùM¾Ë§ûù)šˆ…£_À•ßøbëÈ9´³·§›“™9 ùúpÚqÖxÑb÷p¹+ÖÃ( è>%ÐÅ_¢B8Q!„;j¶†ˆÅú”!« Û|}²uy¹Øê\ÄF¸çq¶>¶›ftze^ÏW¬”#¤Á®eè-•Ä)hüwºXì¹sk,KØãµ„0àpßæ5¼Hû‰M”ú~íÌøÒdŽeèD‚ýd¿cî3Ãåú`ªo9îRVV¦ï>§ñ¯ÔÖÚuâª>ª¨àoø]Å)×|YqI¦¦üj¶¿Ý¶A{åçJ¬Ù£Vi*ò½ƒÞõÐ Wh¾½*qøÞÚAÑö"p©†÷Ʋ”³öHv=Ÿ“·ªZÖßLM„/Žv?²ÄS‹ÎØ>µ9ôþ¹ÛM ‘ ?P[;'DyÂo;jiQc œ.€OÎßL¦ñp¸êjñ²?mà±Ár¬—tû ö÷ûáÅÕÞhÆ|=]IIÉtƒ•r,YQ;j°8Õ2Ÿ=¥À·›Û3ß0gðƒÎqýE‚wûáñÂÆ0?û'É÷qäÝ ÅnábV—½ ÞÑšÀц ±#­Ì¼+Ÿ®ÙJ$-#ÿ”–= ø« .‹è‰š¨ØG ú'€°\ðBМƽ¬ìù^)ò¯Ò?ÈxŠS+äŠ,Á‚Ã2šl¸ì9X¸ajªªSEhƒR‡Ç+iüî£Ði¶ËP®A *«L¹NCvTUÐä>ðuˆcê0…DÌvTÝ@¦±QF3žþ!›â#Ùì‹l»ž–å^œÝø #ö ¡º9³ê³d é¿öô½LvÆu†‡¦ðƒ†™‰†ø j}|6|XÞ¾£H-›t’êÞ7@dmCv»º³………¾Ïßb;,§r799L¾Yí§`S LNO•E# ~‘m·BN¯·¶r–РÃB¯ž KØ™éèf½éœß;Ì~”<òcrØÌ¾…¢¢JÇ’þš.–Vº¢ "’òñ‚Ãîz28ÍPym²=(Üw¿!š2c  á2|üç2ù!öŸÑI³Š½]G/wIÍÃ$½/¤6z¶ÓÓIÜ4Õ2bɸûüøqïo@ÇȘ…ÅÖ >^¬ë;1*žîxºñ‡Á–[<áºîåÇëqQQ­§4ÎåÒ2€ò‰#/_ØrŸß,ôJ9 ò13ø7%£cböÅáGÿü^@BñyÿNl_|.’Æ=í‹7 ªÆf¡úŒ_­ÛlG6S¢xõྠ¿ þöÕy\ÐU¡þUO;r·ãÿž[Ý™7Ýk=^_< +úÄÑáyÆ÷Ýa<‡›{欆K%”n¿ÒÜölû“›œgpÿlêèÝÒÌýð#K_£µI1Õ$~Ð ~$mOY㵌ÝÀ{¾¢rcrçaù»Ùx*áþ Ø-?"̆g>µa tÁ[„zzfæá*>šf »öi]”!öQw¶çº÷ÀþÂÍ_ÐÍ‘°“ÄkãežÉ81Z= λÐÞ0 g[Ûéi²ft §ûá=ìyà÷ïtDg~r_²H˸¿÷ÊKBxªLÍ*Ý ÷£ù6ÿûC+Ÿ›Ã]-Ñ»_h§FEJ)ã9UMhBH/BêƒÂÁ/²Þm–•šïYßòѲð”é« Ø…!"í F;¦ùŒîµó]&ß‘¡>DŠººäwkžÿîÉV€ì™%16C”´XOµa×àZ™Û£ÛR¬¢T Ep‘v÷‘ãâ‹«›…Ó;ý¦EVß;SÂgaÆuß3QBÙ¥U55ÿö£ÿn6xnøïßT$ ø\ÿ<ªlxjÉóîG˜ú(U͈6R…}( A áV°ƒJŒÄGaϧyºÙLžk»Þ*öIYY¶o~eòÚ*Ä‘ó2?u,üT鹤-ùñã÷‰¤V©ÓY×Ý£»ai±Éååj[ÎÛš.Ë.ÿI\ tkÜw.}4„¡â?n£*þ´ÕÛS  ¦Çug¡քቆKÉqs8W1y–•žnÉóÅ4•ÍàðÖ¤bæþr„=náèæ(vd´ÖÃó ÏÔfnWâ6e¿Ë¶Q ›åºÈ².ë/&ÄXûQÛœg=ðn -zzú×ýq!¡ÇØ[]Ý̶«qaE“‚•È*¥íÉɼ煟Á‚nƒÏGSQ.¢ó'€Ö·¸‘O¾×ßÞ©8äÕê†h¹¸p ÁrØ™˜˜,¯öÆ(×\FX89/{þÝÈû²X[ðït%²‚òxTs×q \í!Îy{µ'kB[ÆB š<§OíQ¨!¹:(JŸV½SÖfýÅ®,º o›)–O«íà¸øC¢èârù%°¦±‘Çu€Ê3=$©OKüS¥èI,²¡žCJêÔ(²YÞºD–P†üß\N/FŒÌ-,oíî”5YOSÌÌ›"{ö'í[Ö,{ÿ<=\!²j™)0 ‘¾j-ÜVã”-x“Ù‚® vv•ûŽ?ª¡4B³uýF€÷/±D@É&òÇS Û4(c9ñÝHã—àù qx'†»°Ç±€}æb§²~…¢eÉ$´ûÿ,ás\·Cݳ˜cMkï³íDW@gQ\ ä5͈Qî@¨7¨ …0u’I2â>PÉ»ËûË4aùåÕ•"¢Ål?ü©èïÿg*Òu,ÛüӇѠ·'ܬºçÐlE¥Ô#Ïæ‘­?éÌí=eÝš<ÄT¨€®.Nó~è~¨9^‰,Ó™»²ðñÍ#ZÂZXf}=×L‹£! É]Œ™’¢"ï‚¡oÕÐȈ+”#Ñ|m„Ó¹ö U\kwIUŸA Gƒã†˜V¼ ŠåÙzW‰Ù@uh½BK¼¯ö#§éx³ävL¤üË[b7‡éCÌÔë@V¾‘¢Ô%ê«ó>¼¬éiUBì¾nruι -~C¯‚¥6W«ÏëZK-ˆŽ¦V¡Y4ñ‹˜õ ËBà—².ax‚¹¨!ùè#qpï}“ù*WøÎ,`q%6·S~ÎU‚`öòÑ/û¯*¢¢¢8¿|ù²7§eä~ݕ܀k×éâ¬îÔÆÆÁr,,ÎP´•6 °¾G¢"èqÒ#þÝ ¤•äzÑ¢¬Äú]+žªÏíÈr_Ä~ª0\§Ë§É¹Qœ± G¼TBn+-Žž;¢ÉW˜˜˜£Tž«&»~ò ¿ýŠ¡ ߪ\®ß–8 /˜Ú0ïႯJ©‚Œ[‹Ñ»=6£Ž­¦6QÇ./Jìõ„÷íjE&èò£î¤0† þ|X5 ñ«áË ÃL™#˾Žö^QÂj‡]Šû‘¹iKÜ®ë~NúuÃð«ÐüçáÈ'qU¨nR Iï·×~¸‘Ÿ+ÿÕøeò‡,¤î_K½[í»Y0š@pï>t©ÁêêȾ¬+B¤ïØyZ¥×²7ÂÞƒ-º€UÓ…êE Ð/€äxBž®L.¶ÀfÞ"Nsßr©½*“¦pÁÎsÁLàOæj4¶í²JšUvÒ‡³6s!m®òÂë~WŠõõõ÷ˆ½>AV7abdŒ ¡q¹|¾¼¼DŠß¿ée©ùØ75Uä4Âê4ÆëtžŸ“žf€:–µåε |a,Ná íèü~~Xñ¹8zlP.G§J—Ã,"Vl©aȪ[·0#ðhÜy$Â#1œn—¬¸½/ÍY. ‹6oL€»©ßäÃëvHçÞÅ*êûz{»•ë0&åÀ±œ´ƒTÔ@N;ì¥5†ù›lûŽ—n¥ób9;Ûh=‚r£üÃòãÍÑß•v„£Bè^7îº*^3Á¸ÆvÿÐ7øpÊ­©Ç*‰¡5ûz™ú®‹nÛoͽÖ¿ÑÁž»\ÆH9Y•Õ•.ìyºÓ~T]d5‘ë‡ÀŠ[¤Šo*Ÿ?ƒÍDû÷³ûóüLY\¸ü®ñ±)­Y°¸¸nVlöS¼ß0\Åb :];ù#œ3¼ ´ŽÃ~0²å¶öyºëAþ·dsîzÕà2C*±çYÕB¥NƒõZ;/­t¬ñD®¨G(‹©Y:ÏV½æ„A)ÍÏë*}?œêÓý¤õN}?M­d1n¥ŽöúÔžï¯z?.˜Ãøõä¨å$*äjâ=#_Åg"4ÇN`¼k­! ±Ô¢™–c™-=Ïq~Y-’Ì?-dze;ùCCÁòìá¾§Á[¦uìmžQô,þxк‘,¸­ÝxDn^vÞQÿø±[™Ü€ŠÁÞÔî~2°ÞâH“ PÌâÛ̓?•z HæŒ@˜€¤œÅ…jƒ ^ÛÔ›»¯Ñ!âp²õ@£Kµ°Š ±P>{ð–:º„XKMò>Ìá'6UPØB™õþh!Òû A“!ÂæEɬ'+òÑbþÙQyII}ÏwÊÏ7mpt©Ý½‚Ûñ‡ŸªºúïÅ:³/3%8iú.:rßñ·™O À§ìv7wæ¹u}ˆÒá±GEÂHØ¿ÒXG±@bòؤþIäœÇ)íŒ(³º™'ƒr(yœç½4pë@뫜œœÿlójôÄíhG¹µÓÄf ž aV"TФëF´mªçR Ñêé~^,ŒÃ{~ë™+e¾¸8ŸUsº[û—m†t¬dÛþ2™U÷“ÐÆpãG‘Eª 0P¡v‰˜^•¢á“i0nmíÄ·úCó`wÏÐbÚZ‡œw8+õR{„vKoðWuÝ?wµŽ:NJÀìf?y,ØN}€QiµgÚøuƒž$Ü”‘ï-w?د1v”¿9z¹ˆ«ßÂöNÿmÇSñËOþßrXw÷‡‡ÍÃ^1¢yœEˆúîlx{«âÒ¤›ËÄSn°5ÿDGøsjZ!Ý=–dy¥ÔÀ´4DÁ’"`%1ƒ)P³¤C^Ïã$qN¿Ár)!'—m„®O´(¯'dx~pør²bñf4³§ë³\Y^LtH,6“Š@£ÿcYåŽË›Pó•æÉ–»5[vñÊ» …odœožšé4ä˜nÔèéÏÍê¹ NúÅÙ”oÎŒÚ(Ñ ÑòG/øß&©÷TéÉר0«ß/µk¤BDa­³G|sÕ¬üÑB—´¼ù%zì–é†8PqE‡STåÂ#=7R†V±ˆÖêŠè²ä›h„I›Â'Ä[(¸·„» ЉaE2þtrLÅJ¥ù©Nig„&j)Ìõ@ÕîÍŽaÓ SRaM†²å *W}¢1ùÌ"ï‚VœŒIR¡)+´‘Âr2à0ûIˆˆ±z‘ž¾>t¯eCˆPÜT ÄcŸYÙàÿøeÍ]©øÃŸVg.ÇŽ‹„èÄg|‡Ö×~pÉHHŠV¶íSA¢@âRJü>ÿÇ´~ÓðI‘Š\ÙðѹI+̧õ¢?oO«¶@—7ÊwJj]æha„­YéÌ¿ž&AÍhµ7ÜiÝ{šlÒ^&E•¹•˜5ñå€c÷q«='èIâNJ2ÐÕÞ•ëqúÕI=U”¯DeeJB2²¤Ye|kgµ.ÉT<ëÜn˜øÆæi«æÖX #Ñfx/êý°±ÞS¨¡éA-É= DµUÚÙ Rö~DtQž\ Œú§_QVwh¸ƒÜ?s„-Ö¾X¬›È3g×;Òèû²ŠÀ;ŸÛEX=‚í§Þøµœ­õ-VéUEPáa#ãf¢}ð@ìpJ”*Õï»n÷wFrÖ«s°`•(8ï‰&«–×?>¹ ÜégÄÚ¯ ´[®fTZjq¢ëõ—¾BX›‰öÛØôÕë€]UUs¾ý à8ÎÙñ2ýß×ЛP*álo¼âäòwròô9޹·Œ ~~ƒ_PØò{Ô&§Èî[÷"…áBÞä súp‹/Ñá!nнy!Q¥;½-ì£îqîÒ{·123«¾ôî~dr²ê0ëJ³lõ³ó¶yò\I&ïnD­·k‡s(“¸Qîžá?ÉA8žïYØtpT¹fŠáÆ·×õ(¥„¸ÔÉ&Å1l‰¸ÁªreÑÎ^ÏêçÅý\¬–5âõ•»ÓuVIŸ6Ž0y+éâÉHL¯%2dzz·«u±­)Q¯<Â>âëö— û ]Šêð—ðp§ §³®;æ×¹zoaé)Úé׆ý 7êÿð„y`×NÒLøVL£˜5Œüëdå$ÏíUiÏýŸ¦“•‡o¼Ž‡Â|‡š¦åÖl¡ ÔîÉ|WÏ•Î+ïQÞÔúÛ4I˜~êT{ ø§ y q)+Ù{”åïÇq7¢å˜,fZþͧÕ¼ àsƒ<—q“Õg½kÎI´E‚Oßj³@N̆ìú^"5z wo™‚÷sCç«èuBUå44âeý}·ãœv¾®-FEÕ7‹g{žƒþ¾ìº/´SsŒæJ;”ƒÖù9ßH”’Óß~.×Hš0 #í¨f„.þøøü4‡¹8¹F³*d½k3I4«ÚO¶sõ4ÂéÄìžëuí¿ÙñH‘DÜ‘ˆÿEÆ·Év$vjUèÃnØîˆEÂbG»’U™§SðVrý¨ˆèÉt wxg••ôôîå£T ÷>¬—‡ËÑ_½‘¸æÊel«¿2/ÑJ??-k'GŒÄEÈ…ccŠâÍ¡ÓÕXýµP¶k ¥Ø;×?©ïêÈoAù´µý6êoÜÛŒYúP”Ä‹ Œ]Œ0‚|ÉÈs±¨ÕÃFþ(]>¿žnÍZ¬_ëJ‹—¨²øûî/¸TVU!¯‘ô]Þý¿g -ƒ.âGo|!10\ÒÄÜ~^óå8¼XuMÅÒ6ëª)IVý¥Ñj´P­ÉXð<ï¸Õ-ËëKá<ßM»´þ½e>ø,adÞ›:ZþXL P±)ÿÍ'í‚&Pgî´Â·d|p0u®¬_\žíâbޱŽÅ®mÐ+áÓþãjl¸ž‚Áîkž&›*ì‡Z¯`æßä~(>ñ ÆQH6Xr}ÿsK@ü Ëæ';Õ\å*OˆÈäæ n‹Tx½Å­Yžoõè˜ sŠoíñ»$,‹_*äDdìèžùÉ“PbàV»”»;fêSQÒ®CòL½©÷öF膪ÜÒgÕ7Â÷.Q;•-LlJú8ûTOÃþ𮫉¡:âzd¯­@§W¥'CÃøA„Þ"‰¦õ,\xÔpêþÁÌÉ–õD vÅÌÅ@„f`þNeåR>¼Y8'¯2Л¿å·³æw¨%£¥í@t€zy7PFíí÷)ÿb]Væ‚K Y K˲˜É_Ëÿ$"Çän©Vò © ëxàtß¡KãpÑISû­Þýxö—¦Pš6ACkÖB¼FR‚L®òš3Z£ÝßU¨B&¯NõɪïÛâÙŒ—/Ákž#“~à(‹@fN•Ô»p_!£o~ìEÒ¿<7trqhxe~¦ JŠŠ m˜HDB¸ý‰‰æ¤!â››…úÈ`µ‘>4Ÿ¯üŽ?„'VKÓ¡B›±›—èµUÚ¯³´³ßb°ØÊÏ8„½-’Æ!#ömCþ€è7Ÿ$Üxô‚ôý{ÿoš–!“|½gŽ£_çÚâ/-ânâ»ä¥‘³ñ–rµw XûÓFã/ÙÖêäâ¯ÐúºÏ-ó‘•ɪ&ÇÏwŠGò €¶¶¶]âOò 4‹Ñ1›]w>¼ªñmÌlX„:C`ꑸ;æÅòD¥”[” ä§¥âI‡‘ø’ó$ÿðòÆûP:ñ`Uf—w:oh£k„6–Z9W:Dšc‘¡·¿Ò9ë ¤Š‚Ù‚@Ûl¿J©‚^]yí ÁÆéBSÕ¬K'µÝ/x‡È™¨.ÃSµž¿ƒzòžMT2àWä 4ö.ºŒ¬LȒͬõÄsË@'YUlêwˆŽD˜ã êkž~~9’£—Ÿì2_ ÉUÈo6Ç{dçâ¨tà×°Î7\«ˆ®?7a#ü '¶Ž˜óãDÚ\%“¬?&f婨 áÑüPâ/f D‡lL)Çî~”ãzËs÷Iuz¾ù^×Lc^<·â8!Fì¼s_·™}Q@ x¨¿=”U·$W’íÍ>§ Ñz9ã›ðj!ƒ0‚½%Šfig~ëo•W ÈC´#GPP Ò¥£]YðáÓÍ!¹qìnmÎ0ᎠXž]vx«Ú ˜ë³\x¼¨/ä°b3œä˜BI9ÍêYi\³ywdw|ô:…ü™®´„Õ"éø àT°7fA›Ð)=SÑdŒ>ëb¤ÂýO—ü¸]ô]¢nLì ÷¸såK 'ÿx KìyÖFæ ×¼­éëk`ØOÝ&„Ý ÉÍé7j#hwû>$¥äÆ“¬J¤ÖºAŸ>]ó0ø3ôµÁ¬„füÍz——t»þx%@ª Í¢* º uÂM»9¹Ô†½å@<3s­Ê:3‹gG:f"Üf»ï)B5=ð:£!®Ú‚µV‡åvË=ý-+„Nö ½;+y±ì†ü ûGɰ”ˆq©[ïxAàä« ’TÕCåTª'b¶Fš3™¥_ì¼sv-ɕڔu"±v›ÐWø°N¸y#胵w„ç~N½ßSÃÐSèTQNFØÏäDèi·Þå‰Þj6ê·Î7 F4‚U¢þÞ ï¾aõKÙßUJas?¢¿ýÝß»d%iY‚¾¤„”˜d|¨¾ô¥V>mP‡±Rý­vƒtîMà}Áóbùµ‰eÉ󢃠Û'êíñ `kºá–Ö¿§ÚÔxmÀÞûC§šÂžBWÔYüòHÖ­$Y²òäËÿ@µÖ,r­UEe²ŠâúŒFÐ œ¯IÛ&ÞOqÜ„ ÷ºae5Êá™]\pzþ»˜H šÜÃ鹉NˆçvœæB¨~÷^‘zŸþþ  å~ÚðS£NÓ®Ç;­<Ó:@—øøI)õæIE%ñ`á”:<ûXj>íºo†gJ|*‹~Ü£X*p=Õ‡Ö5Ô|Þw¬~ÖFGP¹yŒûÄ¢g‹O+vM¢áÖ¸ Ħa“Ìþ¬Š¤,Î:B ŽÍ©MqÑôÚÀboÌ-¼pë^0ÅXë(ÙNž,5+úl ŽwÉÍs5´H¢í¯K–ëu£âEËŸ Tëi‘ÃçíNÍ0÷˜·Þ½b®–æµ$ WÑ=Þî}¿-F8¦ÇÊ’4ÛÈ¢5l`Gwâ´›z‰ü¡®ÎEE÷ø;Üz‚Úë„Wgc¥ÉÖ\ÑX5åŸÓÛM™§à’ˆxBÃus˜®ÖsÃÚ˜|™ŒÄbÒç;¹h9j9fŽwb3g']Õy{–64–•ã› ùCb•¬ºÉÀŽ÷ïGI]•FÆfà¼Î­Y‡ý…©Î–•3I„Á8ºékŠúgi@&8g#tNt1ˆ{óÔTýž#j‰™ÎRûìjÔ On·Í‡×íŒÚÛSÙ…Uç Õ„x ´²Á<5°J1pÙûêBâ}ò*Ÿ7òÏêA!ÓÀV"6(yæâz[ó1º=†BÀLAñðp.&«e(EJöèáW¬nC Ÿ ³:hB”qÈÓn"EЭ§U £nMs} ó­0a¦qOuw»—ÀkÆ; Oª–Œ^"—"žgƒéÙŽ4 é¯Û7§å7á¡@E|án¨yéX™b ©ª»ÉçhVì¶Nø üvþC*|c=g@VÅ‹NÄQßô5Rˆ>XøõÍÛ|1Ñ”8¨M!;{T7)Ib§ÈØ)3ÃϯÈ(«Ÿ9ÙIô:![ùèo³Àµ±Ø îQïÀlê÷æ–íåg'å§b¥b;¢¥cnZ9í#‚-…f0êyV¢j;# IµZêì·è®5öÛÂ1Õ…-ƒ°í•’b&ø¤¥o"ÐAU‘«óUß ÿÎV÷‰RÎuU íý€ìG–û®ËèŒ?ÁXŸDÅcõ–0·–YYqÖï÷:&mpÄ(‚ˆ·K¹2ØüŸêÄž¨”F‡´ÏÖÛÍ'1Ó[Õ5~ÑÀÑ[Öa*êÈ Ôƒe˜_ƒ7·ÈåhÎQãRBk{v³MwJS™+Kð™Hü>ha›½‘…9Ä,¾n¸’Å—ë3V£jA¨AÚ[÷H(oιóÀ†’åã¿ïTXŠôø êõÕwºOZ‰Húf”m5?Ê0åüîo¨Œk]Ç8ùY@ .¿p³†H®N\.¶ª¸*×è—¡D`ò’Eàœ/š-eüÍ+K$0`ªu+CÎSûý¬ ÛxB ¸¦-Mš<溧Ž_O´´±¾ápgwÎtËOt›å4YÛ¤ŒQ92"Í[ éN™d–^YÏ~¢y+êKlxTš;]ןiç] ìYWˆs¶Øü`°~·î{ºâ0#Ýñä¹±æ¿â¼Òˆ‘ë-I@•‰‰º:ÊÓ4l ¨¥È¬iŸ&Ns@øxv“ðªôl[ôæsq¿qp[Z7掠âÍKä[Œ´NüÞi¿ØFØ:ƒšS݉ÜvJÁõÇ÷‘Ÿrý¦½wûðÁÊAax {y•Ý ¬QÔöÐ+ù`½ó4á|CQËOâ=éü³æ Ý\Oj –Nwk>WlÔ”Imq›©z×PÈò¸°m\P(žÇ†ÁhFÑß^ªqf™ýà·ùB ú 8ô`tü³CDÏpuYHœéRÜÃÞIc9/ýù¸aB¬Ña-³?ŽBMEå×p ‹N­10 83W“§D`·!vÉ'x¸Ð²‘-xº"@ŸF¥u5P’ûV…íoåÝ¢Œ"<’¢ìÐiÀéE÷Oe?òÊè_èîª&F$uv…æ¯óÍ©´§&Û…ø÷¡¨S-ŽF™|ÏïƲø¯~¡ÑœO˳_œvœ½ÁM X(v6kÝÆ•e~Ègóòé~à”<_浑ÈLUµ°Ò¯7ž±,ìo;n¦Éª5ƒ‚$ƒÞªÉ°áAêfáxØh¨Âuöêû¸3ŒâÔÌ¢¥RI½6ë‚ÿn¢ÐмÏôlÞÚ2…]¦õpL\ç·Sz>=Ÿ9ýÆ×­-ôñ.X·Û.dò͹u?döû,qQy (¶‡UYû6 V{Ô$±_ºßçƒ{ô‘ž0g¦þúPûÐýážOùxTáÝ­ŠéÜ®µmÇ {Ü÷¥•—3Sû¼Îõ»š„Z¾±Î=B7Ž´+9i~Àâ7 “Àq5߂˩J]PAa¯NR18ìeÅškÑ5#ÁÉw\CE†AŽqW£öðË]Ýß¿\kÿ»®ï÷S!Û±›Ì!ö u=ªjQï;M°ÊóOõ=mc¬DÊÊ¥öù¤VÙ«nð댤Çéâ™Ù {RØÇj/ œ¦K[ûÒð瀒­%*D±¿~}ÈŸ‘HIäÒâ,i"ò8œ6E.)'ùZ¥]`p€C~°¼®O¶O8u çð¹9ü3Y Épr;˜ F¤·}fM,®p³%ŽLÀÖ?Æ÷%q®/+½J¿Í½íç‘ú«.øÉÑJ ˜nu®’˜»^™ý›Là­|i9cg'ïÂk9MX×Ñý™#h-8 0ðÐéöwr„½¯(¡½ãt¤PªÖÁàQ¼ç¬ê²bߢR“Û‘ðûa?oB–1g§²Ë-ÊúÅdw,EÚ â¢ ¹•¢I mŽzücÄ­ †§+J!R1ncZF‚¶ª“nÝ¡A/<ß$):#T¯N’ú'Ôwª üx•R©˜F_ïé;ûÓð‰ÀiøÒãÍÑU…Ñs4µašcç…ômôßê6?ÁlOjlʃë~K‚’z‚ÓNB%Æê¶ÙÚ¶3á£Ê'Å×bþíÕ‰Né˜mÈŠ}±¾ÍJt«‘&Ò4À>’ †–²BS¯Ùzìz¦ì¡»6!® ·š¹Rò8>ØñX÷¶ªîù°Û—…“4òCr}u€S[¼êJn©…fŸ7šÝmýΖçì;dUT€bCþ”©b¹”O#:1ýYHAþ´Ç®ÕaXH¹BH’ßL]ž}ƪÄ-Z«oí´›äzg¦ZÍØzž\jögJ•i„&…‚ûÚ±¶%5AA³\à·@ 7?ñJ.·ðwpþmšsÝ-ªBÆOôø ‰ÑxCi^€PÇIsVO’l$k¶DÌÊó+ϱ§ /NøLÆ¿TwéÒz!}’ꙔˠéÅÚDLy%Ì(&òT;3=bí —:]Øùjwhdð!îÉà 3J¯¶,úþ×\þÕ~ögáP>-dyÔ‡×g/ÃêQø»ýõá\Œf•nñMƒ^3˜HëžåQͰڠ_ÔŒFs/qa¶.b²O›¸ÒìtÒôe¨ûá4ËžGÑÁÈŽUºçdXJ0|qÏJr-©Xóõâ—ÁWʈX 4ðIÕŒjµøˆï€É:3™Û%Æœ‡”Œ ­jÆ\/S]ñ˸[$}׸ê6‡kŸÈ÷Fƒ »®ªmQÜIÇMçÛÏ¿k9™¯(½BgëzY?IF£˜å6xÙ´ÀóÂÉœ|daïò!‡ Z“°\5 Ï!ÄtBñTûă‹•:NþB|#ÞN?ËåËLÏÖ»žsPôºõ;ŒD5¹Ÿ†µ5ŠEù :z{ì–Uߤ¤>BGØBq(V›»FØœ¦¤È÷äÑ+åBëð!F¥,ªàÛr¡×›wæÍ3’hJÜÅ[ÍYü - Á ç{Ø–ÀîK¾Öá‡WߣlÝÖ g[ç«s<Zl÷»O~¤ó+@©ÖCù Dë &.MCÕúX@ëç|ªÅLá|Èkÿ¯{¸^翎wq?yJ}PQÁG£rû¶‘´¤Ôåsc·8º]ÀGÖ=Þ ÏDKI¢Q¹|½ÅL¿ÿzP?¶ÞµÙ0±ÚlÐÓÝ}aäWw Ø)*g>9¥æÓç›ò /q†w4+VÖS(óã4Áu¸ËKóH<»d^Ÿttr„!Áh«£Í-þ>â %ŠÑÑúTþÚ¦íi*Vwô>ì÷¡ÜSÔ°2MyKsËÙCÕXn·¥’£ü6îcŸU綤yáÊz®No¨}éXwpüÝJã’Hb@‚G90™>HØ¥¼È£Y q=‘ä ýTé„Û,áWkK]ÎûòžôÞÞ'ðço’nAà$†÷¥J€ÒÙÊ8[÷’î96 »O³ÁßùÆý©·Xö%bÀ×&—0"ãf~´Ä“ðŒ´ÏÙ«­:±—Xh¼¬ß9m™’ò)к-,0³Ì@ÛDM‡Og¼¯lg?í£è;‡W“ŸTb;´¡<^·iŽŒf±êñð÷kÍ£Všc¢›ÇϬgíWd¹|ùb)Ö¸ÉQðÍU_kŠî=vfC…‚붸?ŠìSÔ¢,¥˜B[µ­d÷x˜‘æ\ØuhÆà¶iÏÎòë—§™©zÙñeä×W=={–Nk3õû¹æŸ`©gáUÛÏÊâ'O~ù$Æ»—ÚÕ¨@©°ƒ£Lùä*0)*¾ÜÕsEký4þý§1¸æÏû'Ïõ÷‹hïU¾£$#¬q=i˜™ÝòåIîïzž)‹&²­Ú±ûo÷É!f@7ýû/L"—_¯.`$S—‡¯å¢3ô“G€A5ÞázÊÖ—ÔN¹²†]Ѱ)R½“ÜòŽ²Ì†Cõ  r³÷æ5]ʦ‘­›æ‡«¦ŠÇLÛé<·/Ý…:žÐpBæ*Öš×~âgûV—`Æ›äÚο3<Z»clpW'“ï; ‰ÙºýŸÕÏmg¤A é¶ÊÞüþíëŒrò9¼mÔ,›zŸëç@³jÉüžH£z²¸Ä@ͽ˜ÄÈú4ˆI­7.\òozTÊŽØÚÚj `[;ú´ÀÖa­ 'iwìX^nÒÓ¢ýá²¹°ù³èIý\ø\Â`%o÷GªÎÝ’Õ2K«[YC…ü½aP¤úÿŽž–qPisŸ6Öê×ñìçÉàÞx8ôl¡zf¹_±OduÏÒÛC¡li#j¤[nYhŠú>Ž ßíe 5<Ÿvôámîd©Ai7Åã÷“´´Î;vÆp3jDRÎ P²CRÎY½ÖA€)ðßâÀ˜½Hê\[T'žL¾‡§óK¯ ÖS5eŸ$†¿ ž÷iÚÅÒˆno%Ÿ J»zÉkócí–~ÁÑoÿ õú8Sò (X¥‡&þT yîj@ÞñE­õéòIi+ÓÑtUÀ`ûÌ©~›ghéh\—G…Bн«È¡ÿöãÉPÃúp×k˜ªÖ.c7çË€ì—é±K輞£Ê®¹k‰BFâü‚ä4­@OJ׳!ŽÇ^óïæäz ÒêËñÄ&16µû$žêƱ9ïˆW £Á§)õüyÑþ×åÀ”³æf/` à×Z‰;ÞCþ´ÀÅã @Ôâ´4¾@Ïà§A]wJ5qsZVU$ùÉej¥%7 UºŽ\ZÏNÇuBg,2~Åñž'厮åí!u½!(+“®ÂÙb<ÇÍ'?®ÕØéýjÞŸÉœ¢(ŒD‰¼Øµ]CàMðçë˜õ/e{¸¤ÜÒ18ÁÕáJ ÷ÛyÓ¸ŠÙß¿ìMÆiˤ:Íi´gטHŠh×”„0غfý/³ZýŸ›4•;ÿ2”þµV]9ÝÌ=䌓ðüÌã’’¿/É`g¡’Úž4”5ëî;BÏ”SA¾ݶð!U!9¥÷%„o‚1ÄÈÙÿL9ï÷<Ñ?;÷™ôE8°1óžië葸áÛ–Ó& =Gf3²!ü<û/‘}Aš›9LØ9ªËÚQÍ‘y§ÅÈjËZE¶GfOe¼¬Š&*!ƒ@ÍÖ±î¨UÛŒ¦âúùh2åþÖ@=.˜›ö8Íþjª>shÔáÐYøaãµ7Ý*];âêÞ9Xh¤ÝõѼ„S›³P_‡¢‘»ÒhVNb¸€Ð„w35RR2Çï~$­Š?Qð…5LÌg=ÀÎÐò$š|N$ú¤ÈÚߏޱÿ"À¯»ÀkñaI1¢—ðõ]ÔÈX|¼+t}ÿÿžøDy÷Ûn•ÔaïQÅKi×H/IH®"ÅŸ^ŸŠìõzeÖÑu›g‡ìvwÖÞ_¡ÄR–m/ËP¥7,“°ÏCv/ÖÅlÖt}¥—›ÝWÆr« `¸Œ_SAZ ž>ÕÇL¡ûSà•I^P ôâÙÇ`žÒú^rO #c¥ÑýÞ><ñQÆ<¿­Æ±éiÕèʆ*™)§ßBµ’òk³8Š£ÐÓ­˜nD´( ŒCoQ‘Øs½¥¯(–r'犺³I_í!, 2½Ÿ¸Ì¾¾è^¥TÒ‚`àãâ>•±BØó!ˆDz‘ÝAmJd•›2âŸÉþ÷öhˆbŸ3ô¤åÊâ+ì¤ðÍÁìÐÐfŽðÁ«V˜OΦáÄL‹å¡:ÕU÷.ñ×2m³ªáwÁí%+ǧC¹$†ÌbΙ‡îqXëAwÒäúï%%=^ï1½È" ÛÞýÁ@&Êgޏs©0K'íAÿÄ8çZÆNúŒ“…RX°ëRñ)¾PØŸ£qšõÇ~†Rdg€¸SYC÷óîøß&‹câ±îFûÉ3yF³JåÏ-}½:í+Þ‡×'ÈÖ{Õ1Ü9kÿQôô¶?)~óºÁ'°ó}®…äØ%ø§¢"Ûl0„ÞŸc›ÊÍ×ÙÌ1Wwœ ŠêÖNˆAcmkºø®ûhxL”Ø}I¹>¢óZCöI]÷$ÎÖ3óÀ›}oUŠÜ,¢Ž"Ý…6äÙYc#{" º‹ÁmÚF„ß'¨ƒz ×–MžXƒàr'˜÷˜r¤ýyH÷RˆÕþÄ8—‡iï½§ñ¿žú÷×y(“¥‹S úã©FÂ0§•î:ªnOš°’“­¿Ì³wŸ{Æ6Û7½b„ ÷Ç'§ÚÌwqª|¸BÔBªÊz`à=£¢E1KÜ Â…=5È»Wh–qé?.É ÄÛ€~û™~ºFk)Rùàg$¼”Ói¯oÖ¢ÌdX!Aã9Â35F⸢ן—¿ô!"!‡(v­êï)é¼î¼[÷µ‹p¢BÎ< W@*¢ÃŸjÙN3òЭÝõEÅ‹0é{šc_œoüâô E7|¼Iwª ×ÍVs§þ戗¾~ûpe¢Hçy^Ð~î%%;0èಹ),Ðu²vèÁF·<Ýò¢ï %¤¥Y^í¥ôᆾÝ‹MIµñGxXé1»[Û¬î€Èˆ_Ît-a…í²¯)´›”ˆTôÓ4UH Ç2yº¿ö*ý‚åÄ"´wæuQÌô±)ÈlêºÉ;\ˆ0UHáddÒn‹{œá˜ ‚£aÿr%°û²øÙja†ô¼4¯7†ýp%]ü(r´Âv­QÑ8¼ÃÞnÛ Û`étÚvñÃ{œ¿jæb˜E©â¾ • `è>_ÈäÕÍŒ8yD3À½£*Ã&|Óèž fÿ•o'hü)#nì0º¿õ{ˆq¡¦1Ú~ôÄÀ“É#›¦°îÏÿ1ÝåBT­ÄZ96!^y¨òÁëÞq½Òñ™½çøzŽßþ{‚ÖÏd”H&ŸÍŸÃTU=­ŒÃž]þèYd<©bu·íyD&Žü RKõ¤)ŸXrÊ—ñ Ú„X±_v#ÄŠû¾½ãeLÌÓ˜é<£ÝÐ@ÓMÜíOŸlKÌ”š×Akj=Vù:€Ç êÇM<=àÓ€^›2› 5Ï<õcµJƒe{ò¸Võ3]ÙÏI:qÇ®Ý={™èhˆ•xhäLåýœVûåVUm¨ûë%ÕŽ'½f· "[MñH'æ`#§°íTú‰àã@™V¸/w­ÞgÉ6ý`¸¡A˜ °÷Zó—Ï tŠ·}N»)ºø5ß*µ 0Âô{¾8å‡ÿF€Ý/ž>ìß8BŠÞ9·88=þ%OÞÆÇ95 \û¢V|ðËô‘Šsîx!׋FÜ`ës_ïD-õ;]…•08þ€Bòqè®Á®4ÇÍ[§@ôé}ÍCyE£ÞªVxÇ„X(ÄÓ¦$;t‡–(fŽ{N¾ºÃƒKÇ5vÀ+0·7{¾$±]øžð–âÁËDg[$LƒØ¢ 8ž-4!˜¡#¬`-æÍqÒÈðd¥qTg°ºøVÁ°žâá\hQB \{_âþUaÛž°ç<ùÕ\t ïÊV×]{ d¡$Î’õúóg®ïš•A‘ÔÓ/‡pãE,y±ã/À ‹±§Z¨çŸ¨N`HpòK7k’—{È™‡«À@àí×}ëyס³ùrQÂà n÷¶ô äû9¥’H=÷á3¼ƒª÷ÏfdÔ™“y\÷¬oe"½ †ƒ‚¿#ø‹G )¨8Œ}d…÷g]5XÌ:à©¶%Ctï?è)ËIÿù,œo Ìz«ŠN+¼ß£ðºÑHçe9寰ÚÏiêS˜ò.(ÇdPö0üs&¡<<@áíG+ÅC¾µŽ?ä*yO¾=GÇZ‚1éí4o@ÔûæREÒ–Úo36¸4ô+Îv%B@x³‘ðêŽ~†%Í’#(É;§åã—?ˆmiyÃüÂ’%¶td ÕáEŠq pM^ö†W£ß“91Bì-n•„ÿJöhÕôÞN—( •Ù-óÜm_³ÍÖà=Cm‹{?`¦²Î Ø.ÙÖÿ;¶ÝQ#H ÕOX¾‰©~à!ÒTCüsè:t§Ó-ûFhKõR4†Ý–íû 8›3nQ†|Ѱ°©Æ²L±½ô^ïû‰LZ!ÿû´BúÇ_Ô0Ëj_@÷ÇÃ>Ö ´”Û_±-IwÁ¿VˆÉ¹‚ȧtߣ£›É©¦ÌšÍiºÐlì¹1ÇÓ•ÂÉ~|¼ˆ?."ç¿©/®WaUÎ;m\2…Ø]Òŵ ù#‚=$· RÀÔÀ|Rn½£÷߀¤D` üÛOÅàü†oGP èm&)Æ ÌjdÁÈv+·Æݨ‚åžÊßí6*íæh³¬4ÞÍXXáâbÉô’ ĶzÒ÷Ê|óÕTÝQ1øôu=˜É[“a±¸/-Js°LiŽ)A¨Ü)5¦®ðfä-…ØJÉâÌÅÒo‰|¬ºÈÛý‚l:¢ëp°÷+3J'2@ìûˆ‹R‰…»HÑyQ°rßiäx³ho’:^ŽõƒLoš±ÒȺ¯­£DŸ˜îD í¡\ðÃÕ3õþWZ3“׿×|þB׉3>8ôàppOv“u¬¤"9“‘¶3ß:p±!áèGH£¸FÃvVÀüÇÕžÇqJÄ¿e¶ßÖ:úd‹ZûýVÛk—kÙwàPØÍǬx$U~-ÏPq‰›·#Z?óØÌçÄmÃ(1u"®ZÇ/°¿up?“a`”ry¹v¹{~PôÙÚ¡þÈ®xtÆgb•®,æ¼|Ìãæ}iŠ(á팙E+“¼À ‰§‹e\¡¥ñB<~µçƒì ß‹oC•?>Ê/ÅSì„è½^´e_ „ŸC‰>XöhT@Î=aç4@ÊPß㿼°ÆÈ¦6YØç<õ8ý£¨»òTŠ\‚~í1i(¦‡0Î{ØçªìNõ[Ïļκ¬ –Ãßɵxtï[¦óãQjV»Íï0¸nðuô‚ûÍUJŒ y/ìM± UI¶ú±©˜4z #ïÚÉQ‰Ðâ¬s?UC\öžJG{ù´vÑ@)ŒôË&´ür9-¹Xª#žài- #ÈÙ?…EýL]×™ø“›óùÂ}UGP7ùÆö&k”¸U\¾t¦MŸ™^Jëm+–çEOçaòÕ9wɸü¬çòÚÂðúßI_µá#øKEÿïWI5ϼaÊX¹Ôe‚(V…áú‡!%ƒÏr ¤ª–<öT¤´BÉXü†(g=xw5DË c•hò÷ñ¤À¼@„˜àƒ£‚V*ý¿éT¯–OÕ *‚¦Tâ3â%Š®\Ï“‚ŠÈι!jÁ‘ø±(!›m§Rù„ÉÖÅY¶º˜" ³~Ö©L-Ì.4ã[»}z¿ž÷ò÷†¡©³| 쟗>í‰ :ñköH–M÷2nòÏ9zBØŒƒÁhHâ$_9î„í‘O‘Û‘j*å̉MQRìBµç0¾ úŒŽë™L’_ß$ØÝnb8½éݯ2…!ûø wû_¡á`õ|¼ÍBg:]«pö,ǯ¡B²kLÎe ²Ì·Ê¢1qx‘(©ÎÏzዠϺ˜ "[~p)·â‘Àìf…–ó°) LztÌë˜5ó1BÚA„õî ùÜB ç\µ†“ÙÏ¿ð·j/Mãñ_>f´‘àÑ«hÕD <€5Øí¥!xëÐ:|7m<ó%OÎÙA¢–Ù¥jòŠ)‘yƒà€ºz† iu—¼<$¸ŒÇÆ0E>ƇxÙç ÛÜŠ2ðœ=_:“ùü6PA­P‡¸RGˆg²†æú8c¯Iáã_ààÜF Â`MQWXå4Y+|\Æj”ê˜ëKÅ~  ;ÿ&ÈfP¶M(Üö–­KTçBE=C«YWŽF= ˜ÞøîM¾Oµì(Îj»R_œ0Ÿtò —Þ©$+Žwžbbêš6 b.ËÇ"ÊÙžþ®ZI€8ÃS $ÁYì ˆD• †wšTk¥Ì³¶? à ž@¡& }W+ÓYº?ÖŒ˜=T‡ÇWÙ<|$ڹ͵¢€¶ÛÛ‡œñKϧsš˜ê³–È&Ò/7(ä@#‚îà HøùñiðcÚõZ®Oôƒ›Zxɲ?)‰5j½Ï VŽ ú?¿˜J%J•Ät•sMúz‹;Y™Côo<ÅØüoÉÒéýâœ_+à½ÃïA±Ÿ¦ûh^5Ÿøu·<†Æv ð0žP´é8d!<Îj¿™dêy=ƒ®zþ<ޜϪ…' ¿¢ñ|t‹€§s*ÑÀ*‚ÔjóülBM'=€’)ÊòI›à@û:øÀëz3OÕþ°€¿‚$è)mgi8ä߉Ñw°°îç·m Þj¤O`ŬF¡ÛAVl^ÐÉå]bioºþ·y-£k Yñ‡õ໨Z#Íb¤à•Éè ´­²ÞI´Bù£’èõß—Cvm·ê~æ…8­}\§N»w*—ehÆ76U ‹‹¥,ÊçX¢ifJ³nƵE¸ia—=nB­²ÒâKðv0\€Ü iÌ&M½+è…Z)ÅrœdÁ‘»E,š`qXAhØ.>^¥ûà÷X–Fнÿ> ±g¡ß\ªÝè9æMã3gf–8#J;Ý™©Œì@O’`ftT-mûrõ]­Ú*ãÎg Ÿ>1\ÅãÕÿîµçŠ ?>Ð ßP•3Ÿ“ kÊ®G~¦¤÷ø4nWÁ xá?« <ƒÙ1Â.^Ű¯« xuÑLÞPc®™ÿ$Ó̓Ðn‰‘ ¬#ãÊ`}Äëås‹"Üœ’Éé¶ïgHó”Ëß+elñ¼òÅ¢bvÕXM×Oׂ'¢Ÿ¤‚à±µF…(µbASÁ·èÇ(ú‘õ{‚nH†D^BåDÿþ;R;R’¥ñTáÓ Õ· QÀHšmÚ?»z‹¬×¦j øv¨$Æþ¡ƒÙ;WR¸)ÙÉ …Z‹·Qú¦²Û”€À2Iwšäl tb&Ìëo±Àê„‹‰œFóÎÚoŽÿP-5¸+õ“{òŠŒ³Ôt÷Ïþ¬®]|‘¾ó ówѸ‚îmó3ž3‹ÖÎ{¤64·µÂ3ö!#óiÛ#V »ymY|FIÇDÒä]ÊÐÀjSOd BÓ$¢~¤edLº¯DÒE#vŒ´Ní ã—ú:¬xÖ‘ЕRŽVLÖ°ÈŸ§{Fi²…ýú4'¶e·ý v·Á¡ÛDápî)Æ»T ìOˆdïF5Ût}G7²Ù¥z\KƒzbÆ m£à<5lƒ\`@>¯(a6¦A^A>@^7j;ú#ú@àKe)/S®¤*wjÍ¿+Ky*N¤îá`óѶIÐgƒŠ_›}=žþ»Ø·‘Þ8{+6ƒ£K¨ùË.CÞ>qÙ‚ ®ºÙ…ÞÀ¦ I€â2ûhØ—n±êˆ*Ê{¿Ïò9•}"n(›âð¹%MNE0úK’V”gJR³éÏ+ZÆa·Ä(çïg“˜Ü€~Dà¢àî?Ç '<˜%û–-§Æž Ñ;™4»[41çµÖ¯ˆJÓ‡+þ¸¨kö^M%ÊG–¥‹K @ó<æ 9Q ›QôQ’›£ž(µ\“îÏhR.~»TT'8­jù¥f¿M0—cܱ¨£Uü¯ân‘EßVºäÖ p˵{¨©½‘-G!½:èÛðηRx½¸©eij©x‡~Òõméoú JíëÉ7‚Ái"T%œNh’ùyˆ1 ¨HN±ŸF€Äl³ô¡5]%Ž­Î1ªï<ñÀ½áB¦Qvdz“`‡ßÌlybeã3MáÀ°‰çž\J¥ç,7àK4'r§7™–K‘Jà—Á¥—•Íà}kú?Ü€ý™ûf»)Õ¦¾HÛ®G©¡Üý 4 äu_<é¸ijBÍ"yû3<®8rÂÒÌîGÿ7¼LçüÎc?ÏÉÛOx.M8tõ ÒÁ¹ñø‘QÖŽà.¯AªÏªHE2¶§A7Ý0.÷Orxཱößg»i9©çÏè¬$Ïå ÄqLƼ(ÚF^Î$BοXùo&[©&ÕKÅ,ÅøA0T¿W>3c$GASÑ † •Ä$¶Ž`ß3Aÿûbz QÀ½ß~;ë9ëæŸm'ʱ¯Ñ³ú‚ãâ–xH)§¦Z %ó°cmƤt†þ¤a¬¥<ðµ»qrŽ×ë@–‰}¡e#’ÆCèÖ ´Õs“Ù[ÖIJ9ð‚ÓÓÑþiæô6“© ¤éM€Oàð€ò£ÞÎòÿ¦YD( B;çe~*á·ùn`5X´Åȵ½×ÖÇÅäðÇïÎ7€¯"_a3_06Š~Ìv úq샦"PBÛÑÂç 7ðS~”“äK,Å"…—‚q¢„0ÞÉ€ù"¶ÄBŠ0}áãiÏFài€ÁÄŒy³)/pò&5cѳ€íQOmÀ7+U LǶ¸G9J vJÀ*ÌΊÜf:ûðï&×1g`¨~ TkŠ"rýb4‹¤+ŽŠ4˜ÁEw¯Q1†ß~Ežò ïab aRVM¼_Ùá:'(+X§0ïê4ÏÙ‘1>ø–¿5B\Å<%ø|{£S³ƒôôS·Á.f7Ȫ·\ý 'fðÛ/GR#dêyͬQ”ÏDàP;ªíÛ:‡vÑór0éÔë?N <'þbÖâÏL Q¡`­6eÅQt2„UiG²OÍÉÐþ‹WÙܭѳ$mãEs !' ùÜÂ)0ŒfDjXnO~P¼Û2iÛ=œË|kµ*ÀšÅ´! °°È<‚Ø·l<2!ö1òŸšµòÕÂø,;ð·jyÅaŠA«vz¼R4É3Èñ·“úóˆ^æ¡AK&9íPvE3çú>n…®·Èœ^0IrÇØ <Ÿ1-ˉ¡´ü‹ÕZ¡Ã?DW8wKï›\!ßž#dIAÆm5,5ßÝfe(Ÿ&mK+‡'!D‡ ]¥E÷3yraK ÄêO4g .› ’@ W.…ZŒD€‚*ðÆ ¸‡©ÿnÓUžNƒ^¯ÃgˆªÖ­ìß-&¿Ó ·¢€& ÂpC­r§¼±â_ÏzY±’›}€ò^äÌù|î ŠÒ&iEBÅF#¶¬öÜY®ß?D|Ô3IT—Ÿò&‡WSÔ”‡Ümàå ƒ-ðÀ7º§^í+”I„S/y,Wnðèž0ƒ”‘*S®ÞʧPŠFi=fPNñsX¾±JDŽw"žCà\¬l tM\(…`Û”ŽѹígÍÞ…ô°E>€5‘I`ÌÖÕ§|B¡”jé‘êöyÀ=S¦ê}½9ñ[3„8 !€H»/âïô/Ö¦ØôŽ`ºØš7ÆAcØë=“¾El”ñJ ÌÿÖèà@DáÃUL8H€TY~cÒøJ¥q¢B½œ Ï)TôÌe\|Ô_ኆMS=æA—Déu«CuUÃ:ˆþ…x¹ÁüOo¬lº‚/Àî¯R.¦±"s±“¸q|iß5`]±ŠØzó/郵"jMˆÚW!µy‚êŸýøÈH=žýwR­ÐŒ,‹å¬¶£4ÆÖö$ »2¼GR¼ž¥ú7 ýA-8®~ûñe›5¹UdiA½Nƒ["½…×€J½Ry<­V(ŸVÚy:˦­Â%Fì‹®À°¥ø8h§â-z£RWUäsvØÒ%kÔ |rìäBQäñ–ç;™êܶ'ñ“ÈÅnin%r3—p°+¾Ã<Ú€ÿ:Y‰P‰¾˜ˆÉs Õ¥ZA3€žînêõˆM×™UâÁñ‚Ÿ)aݱœK¯2ÛXãÚuV÷í·^O~„Ü!e‰ "U Ãô.Y²^YŸIý¾Ë¿­ Û#àìß!Nø°žMEÂÅÛö)¿Ü#Š |S«bÜ(!>”Wª8Yšõ¾™3¤ÏFÁÛ¿Ã<•\eâ0Ì×6xõ]ÿMí¨ë«WH1ȰWºŽ¯hܤ’Øÿ<¿J¨÷— `Ýæ)áÀÅó¦õÐ"þ½ƒ\‚Høsðâׯ>F¾ŽO^=%û‰¦Ã0-È=½%hp›IïeØdt¯Š†f+ra¸á=çŽÊ÷ª§ƒ1 N]U\ÝÞuEßÓœ7Ùã}ïè13½ý¸`Ù¶©+æ¨F;eƒœj)øâE0AðÊ8>•íïs°÷oxþF ªo§ƒ™%²edçPê€ÿ8òá}x ˆ/ Rç˜8ÝAG¤{÷kZOþ—xaß.S3‘„µa]mÍñˆ txq@Ç!X‚˜ Ñ})xIð%6%ºÂ›õH8Öb¢‘ÙeÚGІ¦S Âhð’ÑJô¯`Ÿ`N$«O÷\‹Î¤èï:ð`̶KFÑNKdù&ã1b«\¬ „Q† _ #:JxòrÿsGYßø¨Žwçë§r2h"…Ò® ô$®X˜ÒM¾‡Ì!#æôŠ­åŽ,´ú6ú‰'ÙlµÌb£Ò¬ ÒÞòÑn‹y&­ )žzjOøt ÷­üMˆècVöŸôÁó¬•C9K¾¡¿”iUY'¼óÎZeüœŒ‰lˆÏŠúÒ𹫋ÕéÃjOžî1Jì›+´@'×Ô‰5Ò¤—öÔàS)‰XI¤“; ßuÖN”‡B@y/N6{H¿=«ñõÓE€ƒ¾òÈÿ›G ò!%‹SxèˆÞ ½S‘FªËtà½2Úm¦~§ì›eœ¡Þ8géÕ}‡Ë, Éà÷HEo¤ ìcã¿BïT"CƒUîú_¶%áý"ÝΟåïŸAŒ¯FŠ|è8Ã]+ñ*_RÞˆ÷…ûÝ>æ‘áÌMãdˆBö‘êd  k¦›4ϰ ¦F‚³lÊëZµã$íL~‰Pš­§:'rr«´2•e V~³þ‚=ºªhB8ÆêÔÎ~‡tÄ:¦ºs/Ý´6¦›ä:%äì§K7á;FŒ döûÃú_çiZ%!⹡AôH]Û݆f±CéÖåóˆ_)Ú 4kftúiý¸9!ŠÌúÝ?Çù á'[Åfÿ }Š[Ÿ*gÄaý¼ùúE«rb;˜Ô̆qRÁXñw„¼®éÃ&ò2ú“„bà=Øil»[ ±Ù ²Uä ‚·ÑPòز ¬`¸ë*-‡Q¾Úê‚e,çwôã7sí¾äá#=#k `#ÍËÕ¡“š)Œ!³ ž3ðœÚr0”™{R¡‰úý úI 3­ S­¼GÃ+¿ôÔK©`}¯$¬ºLúÓ³i‚ÀíØ!ã1P¡X Iš~†È÷`B$œín6³X )H"¶c@ ’V¿?UØk§0kà+­÷àžß˜ç¤f.Ї8 IYF)`Eg£HNôc&Ž¥€™Â/‚1œÚÉ_8çZÎF1œ&_S‡À&/ΣQ€ˆ+¾Ñpo¥€XK;% ^¥Ïxz‰ÒÉ€ðd¶\ýéú™‡ãר÷ÁY­5éÈò׺d+Ž5z/Œc‡˜ZÛlDDw7¤„ÂÁm¸‘ JþQÒ$aäÄ4¿jÚTÐÜñ’%± ºð‰"½ÿž¸¦ºO[$xo¦Pýâ'ûyeEþ×ñÆæ×À$ndò¯CÁ_ç&8úw0ƒs¤¹Û0‘41³ÉîÜÉ#ÀU[–†£j¦»aqœmò¿ƒ¯pC²]K;o“¸?2h Ý'Sàr#^<å>mF…ÌCwK€.Çʦ¥âC‚"·º‰Íbe³² Rêv!ùˆ…ìGeé[üYûI“ø¦ƒá,ý’-k XÇw7dI¸ÁWTÈ@ ÓîXÎ6iH$%ÞTE1Þi–ðóëóÐÖš?¤fðØj_¼BJÀà‰ƒ>"’Œ’ø¤Lý/üýao&?GG¾2þ.o­™HoÿZ»˜¸¹ï_,ý¿#¼vj Í‚Ä÷‚3hjŒÑeƒ_ ù*ÔOÿ7ƒîÇ]¼.`%!bjjÁˆ©Õ|­úŠhAo¦^dC?ºÕÏ ÿñëŸýa@Ë»Ù@$ )aÔê/ äad$LJò;^r5Âà ‹{²ÆÓ#ŽþôAd!ÌÑóÈvJ7¨Úî¼Ie/󈼋&$ûíQ‹Rp äl„䣒ˆÚòXú–M<ÿÀß8‹ÑÀãéß &DNõBGjFyWkµº`=ڌ쟞º¹ïk½º`ËIFhÍÀÑ/‰’-²ÃK–&‚ÆÊS»þ*â )H2¿ÿÍs; ¬Q¸4ᇌԀ¬%+c˜44vGÍûûÅT„¨ñùU÷C¯´»‰ïÜÉAêxÁ‰\÷%­5¿HͲñYÙý$ÚJ_厀7*8‘zF! úÌ“Bˆºì'-EnG½^¤x…ÄSEÊÁI`@-À:q^û¿×.ÊBîÈ<’JºØuqafVæ wplYy&i; Šª›à€é¼lQº©1 „Ëì§¶|áRÒ©Ùy±D4‹½6¶ öý£|™Ò‚|ú“XþNöÆCê¹³9¡Mœý,Á§H3 /Õ鑊>ZÙ¡9õ !á ìI=eÃ@Pàÿ´^¥]M]Qôå‘0…1 B%„À•°0 LA1#,± @ †2"`‰ÈÓVVZ(2h,(ÊBeRA¢((“L2ˆH,q(ÄeÒ^í_èýp?³Î½{³÷>]¡=:’0ÿ®<Æ”jV€¯.¹£b³o€o4¡×,¦^hjkû [.n$(Iãîuæ(=shWòN™12Àª²6ögìF+ “‰ ÁÀˆi™Ä^YÎuÒ»¿~žÓë5úñÒ'Ÿ“a]Ö²Ëp$Ù´gßÇ‹ï»S ¡+õç郌h Õ`™\×vÃJ(Cwì£ôG°%ý›§«C`Í0ñ5éÛ)­„úB߮ЩGyyëÅXmXÇ£ Ò‚©6—0lÇ€èî6@¾¯D¥Í,ï@¡c»ô–ˤì\g«ùéì•Q«2ã¦Uâ—6-(¶ö% ¥–pN!éª÷“íGe…—ß1·|´?Øê¢ZÉÒ“¯œ€Æ«/l°ójrB龋Ø0̃ɓíe{̘1쮤…†÷€,b¯qêLÜ…º_bÿ%2.ž+¯n¾8ǃKžÄmª:ÿq ébo°L„\Hù¯¸¿Ì£ïõQkò'†ZŸy^åÔÚ¶8•©t¾xK$hÚãߪ.ç+I(ݘ‰±$(#hÖc»ñˆ'z×¹Ëæe3o€¼r5‚G¶>Ífµº‡òÖöŒÜÑ2Ñk%Ý }ˆ“k¬9 éiÇÙù¨q8ð]iŸséd±‰‰m&h&y¯§¢ñ&ñ3)Ûéf&(?ò‡}®(w W‘\y”q²s=Ð<Ò ­.Ea“˜ðþÍÙŸ’eͱ[À+ÎH'ᓆÅ鳫ä1r“ƒÃÞȦm— üI~ÌÄK¨4õbLmÖ’8º]PüRi&jb­……8‡5ÕrX6³%C”ŒÖai,]„gáÌÓ¸/áLäŽ7iòWHk_ºÄèâ‰ÇÒ«g®¼ø;¿B¢*RíÒà±Tÿ¿ù>ý”÷|pˆZ·môÓùÛôÅÇråÒŽªêñ<ÿ§ëÚÃTäœümSòÕ pØ,.³z'ïÔ¿PKL‚nTãSÌ>? Aven.iconset/icon_128x128@2x.pngUT ÿ³.bÿ³.bux èè}›eP›]®qww(ww+ÅÝ¡PÜŠ{€b…â-nÅÝÝÜŠ»{ŠçäýÎïs2“Ù™ÈÖ{­uÝO’j ˜hdh000˜JвZ00°0ÿÝQ ‰{™ ´AuS4ô€A<úï[tÜü}’ÔSÎÀSÛÕÆÓÇÒý+Œ‡½‹£‡•¥ÛWWwÛ¬K12%Yiß싟tÅ ±ÄÑ­’Æ@C «ùA*<šÖ.Ú¯yNÿˆ7«Ã–§iuJD§É–_¦H ‹®˜Ä¢l>6g‰n¼y•à#XÃås™±p5q™»u“¼!Ìëq¸yÓɆt!²Å~©7øÿ7*Ì ®` ÆÄÊ¥(óõ,+ƒÆ€„hÏpÃê~W¸Ûné©°ûâàë]"Î2„&D£({Uppî¬hh5¨¥ä|¹âÁ&k'¾†Ð‘Á‰‡\J¹æc?©`Áž…D8SV¨ yhüˆ†v‚ï÷=ôCY`ܕۗ]!0bÊšõ°—,êƒ0’Á§ÁK"?Ýô›uW%Â"²!HÀY] ¥º«ymcÝžÀ( ; ‡–ƒtËBç¾0 z"äÂÇã¤?‡§F¹àÃó±ôz©úžå¿hÁ> º‰Î,%p–âµFÚLæ«Q–™W=¹Æ‘M]MNEöG좰N€¤¤uÎäNh ñܧó#ÈD0ïH›ò¿­3zYB®·E¶±¥Ð9%ê\L…®ÄŽÿb®6iþqÝ0z¿dŒÂzÍÇèyÆú[U Œô:Ó }"SÉÀ°Êüz°¿¨?A2¿¤À2ŽP9Ú`¦$ͪäÓCǨ~~uöøUfÕh–£xΆ†¹Á“´`õîÑ/Jþz—é÷££ŠW›#ÚêD½ih‹kiÇSO\I¸áÊM×x¤¸(ï¢ê ðbVAÀèÞózZž@¡ë§³‘þĵÆfT žÌ×¥’6:>üIdÛV¹=^¨©bÿfKP—ÆÄøm¾d„.&à~À\ñ»tˆiÉæäT½/ruhô‰  ƒ`YÌEÂÅ¢‹ ò Ó´±DC¾­Ÿ»‰d"i˜™éµŒC¸¥”q7¿œÄ’•þd°ÓJæ¸Ñ¯ÎÐ;¬5£?>oyeYø›ö7©‚êBCŠ)’éÎ,…˜9ÛЂ›.Îj“²\åYôã qc4 Ùr5‰ÅS2Ã/Öè<ކÌÓ•=D}5ô«‡‹ÐfØó?V57xΓ§G­+|ä'|{Ph»’(îËͦXnVY‹§LÌÅz†ÈØ”ôxï"d‹¡>>&fcèVH Æh4³÷’Ú–ÙZöGΡòÙÁ(}ãi&$ÞàÕÅ`óñîÖCB€F5؈¬>\g¼—J§‰iÈ‘žML+8ImúÂ?¾^%ý‘I:œTq2•¬Ö- ñ< 7 â¿~ØA¦¦éôA²4¡ò1•lùOK-ëI4)ÓC{÷•Õä‡âåÔr1äQZœ¤Í|aÛïŠ4é®"Ä3ÿ6ÐóØ`\ŸVŽLåô2‡Õõ ™^Ñ®C‰C*ÌÔTV 3ŸÆ¼´øí Ôé%¤a|¹Ý§ÅŸ‚öbÐ#©Äs¥zÞ%HäêœHçjͬ^±òàÙŠó¸ËÖÊÏd;ÀŸ>ŠoG»¯ÏÌ+çG}ñÊ#>)Öš9 ¬·ràYÅ(,Í8nläiNch‹šæK£)Ù?Å^ê.ݹ##Wà‘ýÈ!zåÉKÀ‡>sz·ë<–pZ¥j:{ÆR¤ÓrßJÅ3gæ¼ú*£^Ž$7Õ7'> 8ÖréUé:,VÐOfò§¤²+¯µ8O«³”)×­LÕ©Ð]ººÚ ÷{öö~wH‹þz©pÃõ)ŽôÙ¤F¦_•µÓë| Û @Iæ÷Ð52þ=Í<2Š:2GTåÍÏëtáJ‡çéÂè@³EJødü²ó%ªÂ{?yÕ¼ÍÿÙØÚ6z©ÍÍϯô‰vú\ÙôGbV™ugzýMºÆ ‘Ú®,^wçÕ-'H0 ¤fp.¿½Å$+ÁrZ‚ÃQ";¯î7ÇÞï×F mßøTÕÔR©ÄýG®‚!¢â-çëíÚ/ œœêkÍ9µK>'Í*¨Ü@ÕÒDK"FòxHþ®Ÿ‘áÿ)%ÛI¬KØë”:P@™ Üôú´P;‘±wQ´ÞŒN*À&úßž¬»õcòx~öO™‰ æÔÇû8$ð­ ¼ ‚Ý¿¾Áœ™+¶û_òÅp žMÞgœK¢!Ô—e|`7nù5L𙇇ç%Å€z¥É>å'¥¨žÃß*û—¬””$àË`~jÁýiåP;JKá×%¶âl»k”ïô×—›jm„¬ VSûϰÂGÙû9>›I//[ἊXÔl€çµ­"³nÿ¡¥íëñ$™¨m¸ñÔqä䬡zoªª±[2ŽËí›ç—‹“Ç|¹ü¦Ú4íôæ zòdfb«’ìBÏà ™ú×éb%¹i‚^uâÝÙ«6\§÷‰¸ É8Ö¹rþ‚&ª/R?㔩Ÿkx&Wï9[‡ÿÝéõyã´²™Y®k_𢵵õHmð+¹t·ÿÈõÁs¨Õpâ8¯\n‘O냺Š)R˜y·U$ÿ¬~x‚`º8ÍŒe­Õ¢ò/3X¹Óû¤Vs±bäåúñ.±¸F®6sGÍM8R#ÀÔ]¤÷ELàs5ÿTàþ~ •ѳZàeš=ÒVÐÑ*=+«ÊeϳËÒ™n;ÏõIé3,î~€O Σ¾?™`!vœ‰Ò¼D˨æ+ùÃÌôµs­Ù‘Ñq©&N· /ïÖ3I"HÖf‚+x|"ƒ·X>Ž ·ÖøbõMSîBqA13XºŒf–ëUǷϹíkf~¿Ý_þ1ÑWü{¹¡ÌŠ}ÙÁÖzAƒÇý¯¡­\WpµÑ‡çûÇJ*_"êúùsU 7 ;éÿ¼ˆ'xº¢Ëòû*>mÐ;{뺖Mü½ÚÞ¶tRÜÜœl$v£4‹=ަpk­®6ßJu7jKžpvgÏç-BÉ?9o¸M®©%/§­G'—!Š[ȆOÚÊž¸ßR‹³œÔ>£$îèÇì0¥ˆ§"GÛvXôÒM/ò«.ŒŸŸQ-è«YPè$#ñ)<µ%ÍCy¹QéÔôèõŒLÒ0—ÍD:ªlŸû~ôÈñ,íbe%¸Õ™µÁ9K:èã®2 ½œJü£Ÿy•œˆ·gŽ6×û Ìy¯ÔÃZÓl•H°ZòoV~Ë’y’H,J#iˆíÎÉŒ4"µ,™ Q†äÖ|ír‡W%ŸÓòÌ¿Õ×kÛç@«Ó7U®dLO´/»i>Ÿ@±î䇵¬öšä\ ? ÓOæ$ >£ìÐOÜrÍ=äZ-9ë_óžËÊÚž˜ô"èã÷«57ó0‡€öÿ·S–‡ß,À}N‡¼`2{ŠßÖw§‹¹è²&¼ EÚ¥ÔÔ²Éɲ.Ý‹KµA/ÿ†)k=ºý;t Ïf d"$„(Iy0\8o6“/Ó¢ú]9€žƒ\ß]ÔÚš`ë¯?Ö¿E)æˆHã´ïãáæµ =>>B‹Œä°ãëqáÛÖ™L” /ç ÍÛõ/7I£ÉAÝÀÛEê‹ÜEa-çëøD`S,)W\8çdÓt¼#YÿmO~Øš®ÙñÙgCã|$"ï—ÅEß[«û8,É·"¯ÑÇfâw“n3™yðï6žQ=f=¨Uq£c'èç‘Ò*$¸ظǡ˥3½êоù&G3§9tJäâFøÆ š8-®–[ÈËwX[‰@Ö=TÞýÞòb³j™ÌÎp!@xê¿5¦ÙÙÙϽ€ç —A;Õ-EI¸™ÂC¸«ú}¹’“p»À±4µ]»b5ÐaçÇ…©ÙÚÛi±Åh 5Ì·9Iù·,U —‹L×ýªc¿äõt®Å% (…z{Pª¨ø§&¾/tuêJš…ê3*o»c¬ý ÕÐj•lú‰³­­>°]ñýÍaÑ/‡”›¶¦ÿÜMyiÎMUÚ¢xO½ ƒ3Ü1Sœà2I‚(”‹ ÏlâÆì1vilüAEòøH xÒÞ/ Ö<[kpé¡§véásY:¿žÕ@'" ;×á5ÐþÔ¨Íè—ÍRÉ(¶ô‡9ÝÔ£æî {þçòW .:ænø’/àuå9¶z?¿€ëXÙ{4hJÓÇ03áøíã&ÉÇ­ç=忊yß°£â3ªa¼²êÉ64„e CÛìVs:ùâ5»)/ýZssˆñ?¢§Ý‹òÒ¾„fûù’Í àã½qR,'‘’7þÛé¢\nÇfá.«^•[6¯£——""®‚»½câ“ œ Wtáå±^Mx(jKºˆÍËV– +ձЗââ9±ÈÛ•œÀ…‚p—ŒýÍK}έ’mLÑžÕØT6p²={ã„Âô±n~ú0¿CõCü¨ÛoÏ–o®±nþó•ЪSÿ#y}ÝD>žbÐâjk§…ç#न–<ÞD!„3”€m¢©Q(9L[ª†¶Š-âýóÁ=k÷];—PJô¶Ðm<,âeñ—­š,+9ßž›í’Éïˆ$šÈÔ~R’eÐd‡ €Mµ¿rë9UkžÉ&Ї\‚‡È;й’““)j}4XaBþ&±".p¾Ièš`"Êþý ò;ê!t;)~îø¨ãYFž••E~.U° -ŠÖO·'Ñ# o=îÓT.#ÓGòqBF–g½*õ¸üxÊpÁŠ“Â~×ÖË@Ñ jÉ2òö@»~èŒ7 ¤XÀb`2 ~­a ”àWGƒ6œL~tk'ú¾“P?®u‚®»¿Æb7¼Ö¶¶QA¯3ItŸ7º³6½Î®k;¼î%^¸š\©¡NN<üÛ³4¯Ôflû¦SCñï 2æ]=ŒÃ.è?åñáßzUßǯ$ïÒ~rÕF;ï¹ÑhÐâŌԟ?1–zççÛkõØçäZì—iÂþäðÆ¢r[u(A)}ÞC~|< GÛFk¢M¨û\a§¥qì 1N Å‘CÅ› WÈûœdÉ Å+îÓ­?2ȹ€rò=à°i:Var'·@öÂØ©÷$¦3´|Z#ÿgUמïóxÅv¦@ÏüjæÃËV…pßÓÝÙwÊŸðˆˆˆÔÙµ=OcÍ®‹º¤<Ö(±Dì»1¬5(žôG±œ}Ï+ U¤ç£³5¦¸æo³¹•l¬!¼¡r  ÊJÝïåÚ;+¶{—šd¼¢y¤¿8+Ð}6¼ˆ©/õŽÀxJÑÿð„Çñ/›b»7Ç•T6ÔgˆY7èÂz^åoM܃»o¡ ©ÙëþéâR{ãûל0ÓÎÈ÷¸43{§gªë—›i•f‡EÚÍØ…èü¢Ï·€’›ýq™t ñŠc¿ûßj€/ôË~n÷+¸G/ÈÁèæbJ°¹ :¬­8AÚŒŒÄ&µ«Î­ï9Pm°ÎMgh!f3jR„J–èŸY¶×_Cû¹¢¶¸ú¢®—ëñxàÅwì°,ø-À•ÈÕÖ.Üž"¾çè´v±:^ÿôE¯Zr~ <ÚzÙOQâ©U™¸Üè,¶ŽÇÍ{‚GÆú•#ê3ô5Ðl¶Õu«X«Fù‘‘±M ¦©#r¡,G…‚ó‚¼_"RóøœÉÞ|–5Ô²…pûâsRÕ•ó$‚h%îÆ?¥îÊÅ ¿ ‰^¢xcykôHñ€q"½jzÈ„½ÙÞÂNmcu¤ïÿ S'x»¤EkÊ »(!aЬ‰±,ºÒ#½_o_¾®·_òH‘jÁ`†$pã¼@1<‚x—3[ºÉ(—œÒoµÚì8Þô\½YÏí²ÞV÷ƒ'‹ß‘!AâÉîD]ÃhŠ`”G¦GS½›Ï›Ýã pÇØEV4/ÕÆŽ9]¾è6‰Î·vGgßÒxV_ AªÕê²1Ÿûôút—2™%øüö*]x¶ŸÉÝk>ÊÙ¾|l²—ï3?%”Â#cœ1©ã)„ñ¡ÎÅ#Ù5㿘µ 2Ž4ë-û‘ì+íÕ_·Þß ÉyyWk¡ï¸tòBf{Tâa*8uŽ^ù<`N lÓk$¾ÈY÷…? [Ëñ1σڪèOØv|PH ú+ð HNI)67x_MY7RKJìR`ðX-èê“¢ÊuaºC)I^@‡“Iô*»œ!ÿ\¢°„óP`æÚ¾Y­Ô[EúÐKJš#a’ÝnM»Bµî³ôµ”À{𤤦æÝÕ¢oJ¸|R\\`ÁqÃΟ¸Æ$ #@²^ap ÄŠÈ®…&ăãÙB›ÆÍc×n]è´è ÐFÛrY¡Õ¼ïW¬’¦ü›E—–Io»×âòÊ6OnóT¸I«Æöê ¸PK ꦣ]5ãe[·¨W½®6»áñ>'B‰\ z]C%•z|ƒ÷û?²#㧨ýÊ>‘?dÚITn,è°ÃÉ–ÏG’,S·þ·û€nTв7œä1õ#j ¨=NÁP!*í Åû\m6øþÛM—(äã²¢P0/ðvâ‚Ü®¹&EbÒmÍ/,ÌUÂ\ö¹JÚá4¸š¿D°Í®Õ˜&]Àæ§>Ñ«¤¶¡}úæ}¹ÎüŸ±^s鬞¸““Í ~²/7¨ÿ2p&ø%ÜÿËSçRÕ7â·&¾"¹Ø¹R˜ŠBÒDIaR¿‡ _Cû³¿øå{j {“\šë?¦Jõ6^¦Yh݆8ôªBž‘‘Áãk·ô¸ÜÈè¾þ§¨'®6Ó%Ð3£þw-Ãym®¦. Ê‘H˜‰ ’ñ@©ßCÐ(š:èmM¢SHK4á4ìð,orÝÚ¼3òº<gáãÄ&œZéoô%3xNe@t£tƒƒß¹ZROküGT4·žÊg |ü‘®ûÐ9‘¦™jCcú41ÄùNè/øßß ^rÅGäˆÛ·8¥8º4"€ML! Œ`-¼ëaI5Êž¹M½ê¹ß¿F›©…Üò«ŒšÇ ¿Œ¡@ôõ¹ëH†m®½¯é 6[–øÚúÜVé4vu\´¾r·ÝŸ>Çu‘¿Õè¶ŽòÇUˆš,'ë†ÔÞ§›>›]~žgã*k:bþ‹GÉ6!0´œÎtø?Ž›7L–¸s»t(Y/Fÿ8°bäÄŠû>Îÿ}`ôö? ¼Ã—)äl£»FNØòW$0Íd÷=ŒœÝ¸ï(¯?N°ÂÎÄdqºðßnåBýk£ûò;ò1¯ŸŸßuõöd>ª÷;2ùkIŸ*ñûnìÛAüz—¡ã³øM½‡šrØe½REÄÄ›ã Â2¼r+&Ÿ-Lt"©†ÐŸÕ&É©Hï/Œ]·ÉŽÜ¨Rèæ]×c¬ÙSÂ/P3e Í6¨¦~L¤¤¤b÷ËVM‹1;ýQ7+¶y¤Ýµ^Žºé… Ï‚-­›a¹â–+<žÅÊþ»%™*úç)ÑM—Ïä·Ñµ±ÆÃ§‹^ZXÔ—ïùl’àWˆÛY5x'j¶»z–¤<áÐ|ãöoXû/s-ÂÎH]×óeçD:÷wlÉ—™ú@}!-->Ó—÷·Z€Ê[»˜¨e˜á{‹óÎõ8ëE¹¶åÞPç$ëS ˆkû+¨Yù+ä’+ÈÿdbÜ\/]Œôí0qŸ[ªUk&‰AÚ§cŽ.ð'2A—óWL&èöB}›A]ˆßÍ!7à-ÐÝݽà-›JܳÝõ ëßwg–ûŠCÝ®Ê1€»9]÷xÒ°:Ÿxo;Ix‘rƒE–icRÁÖ֠„¾ÛÓÑΫ3­®æ^gòGS9' åøüLçíVÃXzµf“§‹•§•µmn•5:íµnò¼Ú¯Jw ˆÕv!02áye\_C.ày…þOf2D0äf]D¯²Äè> xkÿ15}¥žÊÅÌOŽ}Þl¦@ݨÅé¿$b¿ÚÄŒI.P%d“Œ¦&>-mír£fB^Þ”ìl (4È›™QAµ¨´´1èÙû¿+aíŒPÀW½Ynt€Aðûêªwûtýî·Lëî蟳lþeIDø:¸µaMºÂäoäŠõÓ¹û›sÛé§ŸÙÅî>gÀ ÇðmÎ7£½¦s?I]§ÔöÌÑ¿ûlµCª5`‘0fðîf¿TÀt‰!*ÂRÁoB-tm·ÞtA5˜QÂ6§øë¼÷E±™â1Ú†ælgëj¶€‹NgT^'ÜÞðYF÷ðR-¶àEXá»>kˆÏC]vnγö½ÒÜïv2Ä̤qð:DîïÙl«Þ¥`­¶Tãvð»ãcl¹ ¤Z ²0øU©B,¾Å9ªœhÒ ²5øGauìK>;a÷,&ãìõ÷ET NG¹öü€DŽ@s»l‡*”åÁyáù•:¨¨r£;`㹤øäŸY§7ý»™6ⶆúßhëmõˆI/Öoͺ5x³ˆ#Z«Šj‘yo:ä ËSP³E¨È”Ój‘2-‹¾žþQð«çç §Û©ƒƒ^º„2ôÎ,j©½!‡ì÷*Ö'VŸq`AÇ÷œ»í(—8ªU1:æuf±ÈbÐm„#ê]&¾3ógY‚—•ŒOãýªŽ3^ŽèÙ\;ô=*ߢ¬ž½ÛNY62f*‰M<“Zâƒk`¦mà›UEÌ=“2€íÅNÉ©%Xü;&z :¤B0ŒjeÓÒz©oÑ”§ýÍn™””?6ª„/H˜ Ì ¸~gì˜D"ËÝ®Í\N”[_Úzq‡@6µ—msCÍ_h#]ÎÍ…m¥<Ëy ü¤t¼œZƒªhΈMkóúÅ4ø»¨´ŸP¿Œ·¿Æ”;°p0xGµ”л½ªà†Ý—«\ó;‹W½jïÇXÉÆ¾(Y›¶ VêAÕ¤«’|†ø@"ºÄ|(ÓùÇ×Á§åp\šÈØ ^Pý¡Å@™n8¾—©L*Ohgóý¼qq~¦ö¡¬PaÇü=¬T¿L¹£ r/4nT—åÕþ`m-ÏG×ñêÁ/c×àÆ¼ÞÒ¼ˆª’¦Ìà qÚD=#ÞVPi¨ÒÜ»âjJ9Xƒ¬håsròBÇYËÄôøw¿›åBd>‚~;¶ÔœÙ ·‘¤Ó#ùnÿŽ%H_ý°½˜J*h"Ãßa·Ï4r7ø~\×¶ ×|.àZ#)"¾Áæk}efÚ=• çÕD •ݤ¤?a’–a+o*ÄW2·¼ùp’ ÿ"’Äñ¸ð„.Üæ<5~±V;è Qˆ÷ot,¾” d ¨šF:kᨀOJ;~š÷¬w»+ƒoò* ÌÛ°(fF&ªM;mà[á°a-ég–r|˜Š ƒ]:1šy¦}¶N{.E^ÿ©tL/wÁ#¥Sš :}{Ëy,QÍâ õÕ˜úÀ¼†äO÷×Ðò…ìí;>Vè«7§*Q.Vî,êó³5Ä:2HÇ{_.€²GS&ã«îÂpé^bEq4—v!›¼ÊS×Ì[>â¶è²°šÀžH«\!K"J¯Ýð\Gs,ÉÇ€gæØb¡F{ÿ”‘!]¾±:}Îwµw÷íIAË­¥8±¸¿k\Êxep0üàœ –Ü(—­É©8Õ¬…ZvUÑW·‚:w~ÿ«ûµÉøã& V }nÁr§¾~Ÿ¨w›·8– ú %W´¤œ>ŒÜBy¡€¶cÝÝØæ`´ÞNæüöØ‘SgÐõåLOµïß sz°è#ÿµ©74¤à—jt ¡6¶ÆˆÈ'ñã^t·FªºˆÝØa­y|¢Ða+OéùþÂq<ÂPy*˵¯8ÍA—JÐa!D³Ð“õlI¹)_ŠÚÓ㈌RxJ>åÚ)á ¯ï½Æ^»9‹ÂŽè0# =A²†5š^å…:À¿‹ýXär¡o9/©Å–fû•¬Æ&—̾Æšv¢…Ü„-§ ª? fUHIi¦*ã æ|ÍÖ[æþB{ š–ÈŒ·õ»TV¬^ýïLrøÇ»]“D¯ò¥ßÚoÂD¦Ts«Þ;ܼÎýRI 'ˆ2/,ðf×PJÞFh¥˜ìêž«­ÿEÖÿ\C•õßo5d'3ɾÚJýʪF¶™„"ÔëÆ´!^ÔãÍ¢ƒkòF~]|ϧ ýä¬Ê·O…aÌ ÎÂ×_"ˆ0’B8ÍΕ ! ÂÈ÷ç³ÙðŒjv&Ò%¿[~ýì«¶ ¼™´¹)PÂ÷:rþ;±õR¬L%ø»uŽ0è®—2ÁGT›…P W·òS« ]]P§áTè´„6dL-çeëÈ0ìë³÷¤˜ø×?„-ðŽÿí9ãVpåüVjN™þVÀ[ü1²r3Œ8Óœ,eôý•`¥€8?ñj³ZbãohÙ-¯•Sª]‹2áÆÙ3i/²$Ö¿P¯Qt$¸#ÕW1ƒ;v±¦Z¥Ý²‚¯#š e­yÞ#uNÉ»¥ãæm—Øf øUEUc¯µß@->•*OpZèë’ˆFqÓxlAMˆ@KÅ¥RÏè÷âGýÿø(ŒÐ£<§sã`@Ï£t(ÀU²•­Ñ>…ê*Å IÔu«§—i•Ná6qYªXt]}¿NO÷>ÜË'?•Õµ ñg«C€œCÍ­ƒŸy«Ú´ã^=™A‰^øÍÃç\ÑÂ+Û*òp“—ÉC5ެ·ý.ð½›,óggˆJ¨`õ/ì¸6,ß»à0’púS¨ÌN+Ã?ù6Rb²V uùfÝþÖ¶¶3û¾4Ð Í#tÕE‚l ¥Õç+ý#*üÕfí~ £Là^õ'_É·åãhWn®0ñ]Þzˆ3XËÛàëµmؾHmËû7ss·/l»þ!9¹‘øÅ±·½=Ì—b3G$\Á#cqÜ;•¨å({{{ëlýþU¤`¨.A:ÜÌWç’Ãñ¸Tãu••\0´GsˆXƾ»ás÷k8D ”ã›],h÷EF $McÒ{9ú¡­ Œ*¨IPý,ÑjÈ‹9^m.™ªÙîqË$v§ã;)á ¶¸ì†˜±ˆ´=9oõä<_ó6Èû´íPrƒôªÿdŒ¦ð ¤*t1ßtœ½ ̓¥}‡ì¸’ó§´«ïh!éw –|ô´MÔrÃüh2 ˆ’d™"9™Ïï(v³sƒÃG"±ðþöò8 `lh €¸\¶íaaeXç¢ôGãV ŒÝ£Sh ݞؼvzÎî-æ¯×º,üü„„Þu"ñl!âÐ׋ЫKxùSÃ^ÂúélH4\ÜgØþLû2nìý·Æ4këí¾µ¦{¦L“î²ã¬&ÂÀÔÌå=o«d«ó,?tæÃ}Sþ}ëëº\gÌ—Úˆ+UåÅ{k/û×9"9PƒÖ GavɌñq¨¼x›½ÀoÚ7[(boبÒ(#Nˆòáj߉$/#“£}@çìJlì_`åõò“ðTÜ›GÆh NÓ“µxñ¿|} €¼Aó0Ë6þblk›SM0c^Ë^K—ÌŒ³kí_B)üìêÂÙ_C;LRqŒ\Už ö)Y’뺂ký:êµ&í¿ƒµL|ºp¼M’ÿ²h€;޹ü§ÚÆ9¬šï‹=ƒþÝcé%ðŽ2]Hó¬.‚.›úq/›32Àõ£ù]A}ë–K.±å4•™ˆþ×häÇ<›i’ÌJδK&{€• Úëk¾VP•¡<#Û»<¯ )…^ª8´´ˆ¯™çŒ×Ü ˜¥Ëˆ¦)²í¬û³”»©oÆq3¼OONtrÕ0¨C*t½èÝuÉvlúÎW2;œ^|Å[ò ^JT©ß ©6Ô†<½>#§Q_kªî:¸U$GQ]™ÂËÚkqˆÀ|¾—Ó‘2eTùDEfKÙ|Ú”DùÜÆ{ø›U_ ç»lµacdJé¹`rrº³Ë<ÃS=d³²Ï:1aÊ#žJ·ø«QbaP€é5r³ý™ž8‹€âuu³ ø%$¨Cgõïv.„ù%Ñåd_Iü>ƒO)mzçxµÑ™vÀÀl«ny¾RúZmÙ¼¡¯­½H#àßä*Ëœõ]oÀæ4lùìH÷9çt³õ¢øcÛµòk4 œypyeÊÞ°i' ÒÅŠøA¢NKJ7ôô¡5>°ù™FU†d–icás'öS‘©ˆ£$K '·¿[»Tís:×ß0c‹ËƘªà†ì&3*┤ù4ÈŠ^’ºçá|êgqxQŸÈ4³9úvjÂý¶+ Þ¯Úµ¹òàáwq)Œüá>"…—)!ŠÛlÝÒøhùúá!]!Õ¾N])\¹øœG—¹šløÿ¾Iö(™M;<<¼ÞOQÏexѸÞÿ5:z*(ióSd4½Î¿¹äCçU!£¹ÎùVíŸȦ#ËiÇñòw‚7xdX2€€QüQø=ÚŽ0D[ö-Ú#qzQ389k­r©ð¹#Zè+¬ÿýŠ­a“]ÒxÀÍÙùûØ*ׇ¯3‡eN¡=Œ»Xj‘…ª #³\‰bQŸ¿ÉÇfu¡7S{›­ZôA§Øä‡Ìž]§Õ"¨å‘  IQë0\e™Ð¬ò‘AY­«ñò ˆJÖünžÑíͰXSTVÞc­ÝÏt¬fqOe{ÜOqrS¤ç³Ktí:[ŠÃ.w­¼ˆÓÉÛñÎçíîÿw±ËŽw%Ê~Á0ÍŽ ï¦õZ¿ßé8gÔ¹=ÙXkIXaÒØ¤8#¶m4¸–vè¨0{©¿X5ÝÂ2|¹¬º¥ÓÒÖ>YidŒ#ã§ÍšÌläè#k”Ç„MÀÞÒRõ|iý;JOÂø§ªvcñ”FÞk_?ÜšûßÍ™ÄKŽŽÎ á|ׯÍEzC—k‰ƒ;Žö¿1Ø>èË„ ‰´|r‚7 +ÿ™fCãp4@ŸËå ÃËnhè_;ùgp»÷”‚ð¡H誧Qø³IÂwŽÍÍîÌéY‹ŸÃ¡äš Z±è³l¿éV20('J!ó–³ õ‚‡ždu íêTÎ÷XíNÿR:òìD¼mÞE¶ £ftd* –È¿…º \kZ©™dõBäEÑØçªÈÇòTmi&·€Eˆ¤-&"^ʱ€GÎ'3K¿“ad1žzJ‚Ÿ°þÞÞž¹¾™ž‡Wg7jøVXcVÀ<2[k^G˜‡ŽÆÇ3Gƒm!ฦè<~ C¬Ã8¦:,NáÚþÕãˆD–Dàà x{–úÊgÚžt%õѨeaá¯4}µç—#µ;?Á‘ÍËïoÓȆB¿cÅÎãÕ¨Œ 2”¯ÝJ!Œ3Ê] 1Ó¬? BÊÀ´]Ûb¸Z¥Ù»¯Ô0T^m;l O~ÖØpDßÇI§•ðü =NQ§%ýAƒîNÀ(n yFª7Rмšñª‘tPæP¸+0S*–£èóðòŽù ˆbÊñFÉ%ÂU©)ÑËW#iÇÃãÉñl**:ž-1§ŠL2hVNÀl¸¯úT ö7Ù©´¬€¡’§ êë’ý®‘î¡7˻܃uu‚&;¦OþÀêÆ‹´D‹‹–%ÿI¶þhJ|ã`åW>tRIi¥Â”êÂ% °ÅÂnx9œAxnmÞØN¸jãS¸—;¶|6¹ñ¤l>g;WÅ™qi(2^ÿhq‡n'éíŸÕÆu¨K)|Qß¶ûöq×RÏRϼt¯B‹*)¥(ÃYûÁÈ«1]=ð¤ðÔ’˜w)hš§ÙéãhwŠL]eZ€[~ª–ÈšöùN„€Å…$~ØØw…ïRºÙîRöíßGÿT« ç‚,zŽ ‡¶Î”yK·™-u3tÓãyfÒUwR¡Û“ÀÎBë‡t0¾h=k[ êoÅÇÜ š…Hÿö pí–RµhêЦpGÙD þaÈYcw~/º„Ì1å…ò}×Ñ“ÜSÏ9Éþa êïÚ¨ÒÒ((åxvaþÔ%ûcùHdÿZúyï2 @ÿwZp`eØ¢RGÜTvc“N*¹î§Ëá¡«ájvt|@0vø8m+2;× Ynv=ìû ül7@ÉûAUÑŠàåÂÓËŠ@Ǹ»CoÁÞ• ž@rA¼ìM³&úÛ—Y|dIáðsȧïY´Éyµ!G¹¼µP,e ÷#(\Ž<ÆÝ"¶)¬ÿˆ&÷Ÿú!96¡Ê¾NÔ)ññËáo ðoÐ;ªÎWËËQá¸>ïZïwðª£Mül4ñiuùÉ3À±q¬ÿH2H‚?Õ\¯ÂüAˆbtd¥—GƒH8† GH¹ž€žEöŒõ9» V^ αNÈMJÛ»Úüê©yÅ®/ݘiÐxàZ- ÎM¹áÖ·ûPܰb;¾Uq»$mA2øyD ¼~1z A‡ÏðŽþÞ-H$ª™ÀžQ4‹=ù=œÍ‹²ÉcÂ¥ÜÔð’ã{Ao_ñ¿¾¯Z2(×2!¢äé6-¡ –ÐáAaÇdý‰O±µbÑÒÊÍ´[¡†:̸ÌmùR” %ªÏÿ(ÒcŸxÚVYØŠB *´Åb}‡Cß \úvjÚZT¶E~̹£‡“­éVÇ`Gþ$ò<#êQ/”W¬Ô“ÏÓ‡“çÕc“¦­²t—$¾ª„Eƒ³Bl(Ð@ÈS|€b6þ§V¤g.v#š‹Õ;ýà1oÌ'_ö¯¸¡9X)O|ØsQšˆÒÉ#ð„˜¹ -¤`Þà›C‰g+q¢>ÙŒÑ~^‹¶œ”Ua¦ƒ{ðèNEAù‰³LA‹3ÛdîùÏÏ÷5än€aÝåBõEò©i€<”RVV>?ÆŽ*4›‰0%ŒÚ³;MÕA› ÇŽïŠ ‰M¢Âå©ÒõìùìíÒ¥)鸱´Å3Ôáéd-œÈNk!€”:ªe†3™AìÒŠ*h!‰CÂB%E9'zèô½Òæ"¨."¯×ÊþŽ.ûÀÕk–K‡_.M£ºýáÇe +N:ã&‘Bu$÷ÉþÏæôܧÜFaòÛ×()7©¾ œ³¸etn­ <8\¦™Õþ/éþöIâ+ã1V8~´¼ûë¾b8k„Žh$,aR=ÕÕ¡*âzP$E’$z ²C©-î¢ë…£žübÁƒ Å‚ÛCHlc÷ýÜÅOÊ Ä,%ŽFîÿ°’:÷4Mûyè®÷[* ®ñö4œc¡ÂU ‘пdÙB™X9\E¼eKÚ7úM+6V”&bÌ«Že¾NÄuj Ûc()\ú|Á›»¸p¿†Pœø5àHá‚öÄmTHåi>‚ Õڦ%~t)äg‚Ö”iøÌÿ îbÃuCבtl;ÁîCàÒ;DHö¾NÐk..€eÄ&©!„»q_¤º+>Õ ²˜µ’¤«W"°õÐ$î6â̤aý£r4”ͯµ")o#ÖÊIâØi0í'1lkþ‚lÚe:Áøðôàl]8"s;F7ÐW8"”ŸÄÕŽÿû~/{ )[$ÿïµcf„TýhoKTUõC ×ß!ƒÄ"1CõÌ¡ŸC;Ïeo©B0jÞéþQ•ÿ¤ÑÊN‰Ê]}£›*b禓w@¥cÏ\-R5Á§‡<ðÎ"r€ºÕasLo~ˆ,kÝvÜ´þ'‘^l¢m‡í9©ý>ªÈ~@ê!«b—ÅZ½ëÜ’åžÊ3©yd¨_Éf ¦ÍÄ;ã „§×Ðh#«s ú0U¾³*ú—Æñeh¬¾IfÒ=úº£Í(®"ÁµâÒó½o¼N+¸äN(ç@IwDeb;JBLÜZBèNá¿4”ÓàA0B¥ˆw‹+ ø™ê.å1{ÞR¢,…ŠbB÷·XˆAöŒ@ÈýÝ3BÂ~€2ûpßYh‚m—YõŽŒ{µ¥±ŠãËÜçõªß5lË…‡çK§L¯± €ö¢úRY®_‚SÆ>Õk<ŒPñ¿þcŽ•z‡HC£‘>ªâ¶©ñAz&È‘B·Ú"¿ïŠK¨ËóuÝùs«xïüUC«bÑAâ«:Ëw¬ºpË8§˜7Þ®þ²™±†i¯Q…b£·b-¥/† PR_Õ²½Ë-$}M·³üœbnVCD6ð yµ«øVê~¥>H¤b {³-NKÏÙN©ºfìÔìV,•ãk•¬Ñ¶úã×ø¿)ß„Ù/?¢íšv ¸‘ÎàthÉ”Ÿ#ìôöoŠ~e‹Eû[J˜ ½)kƒº†êe#ÊÒÖº ÖÂí‚ДW±P>ã7ë/Ä@š…g_0 ? ÉþaÅËÔ`Ŭb¾ÑÍúÆ>8J29Ã]³|oË-µÁÖXÇo!jv mܶ‰DË ïFta5A|8}ØMã¢åÒÌwoØB²kñè&xûBì©mt§1ëFÛ1}¥ŸóôÐ+¨Øu¤rõO™W·˜ŒèhVëŒ3ãg܆lÅD¡§}þŽ;;Üꮇ½£s™n‘ÜP¢èàéó],)൫j‹2œâ¦ŸÞÝ5þbwÒÂ’òT—„ñúM‰Ðt»m5Šr²Ù–­_ª€# é°‹,ê(#¶2njùT¯×…´N¶Á9¨Õüî¸Åìp;~ï;¾­0Nœþa†}siê ³6ʦT&ûåѹtk Ü;žñÕ™uý/?„Ì2ŸAC0ýÅ4ß°«öÇ Ö%¦Í“áÅãF„MB’lm£_”ìDÐÅ8. ×ÌpIè5Ø7óZ÷u¥0Tt3°$p·HFðìÑ>0ËØÖùŒÈg¡ü œÀ«+;öÊJ˜@ù[2Aù´‹ )µú´„NøÆÿç ÷ßaŸ‡'es w` 7%95ÙšOaÿPK K‚nTZ¹)}}Aven.iconset/icon_16x16@2x.pngUT þ³.b´.bux èè‰PNG  IHDR szzô pHYs¼¼Ï$tEXtSoftwarewww.inkscape.org›î< IDATX…Å—LÔeÇ__î΃CóN5Y¦bŠ – fF¤cj557¤Uιj«Ö´–ÚïÔMÍ?Ђ¡™ÎàSÚü‘°Ôlnš á ‡ž÷îÓßC”´õÙž?îyžÏçõ~žçý‹Í6—ËEMÍIÊÊŠ‰‹kå£Tl6øé'¼YY4©*Ë\.öõ•m°XØZW§­zÆyþùérõêU¹kØíRX¸G&L°É… ZÎß#?N“ÑÈܾÀGDpöÝw¹ÙÖ¦:v IMMöööî`‡CdëV‘†9{ö¬$$XÄëíaµr ½'Ùh$Åf£¡¸¯ˆV@É̴ȉ'º±Û;V¤ªªKÿÒ¥)RUÕ™ÿÞ{8 –ôÂÖGD°)6–ïNŸÆ2{vW¿47ë±Ùl]NžÄÝuLó@T:E  ˆŽ†}ûÌlÚddèP±±½ƒNxã Ø±æÏ‡Aƒ´¾Ý»q\¹Â÷MM<8üstE`Ît¸ªžÒÊJ†GEa2›¡¢Â›o~Ep°‰ìì3 ÉÉ`6w‡WWÃìÙšÁæÎÕüsý:ääÐ|ó&+U•¹3¯ÃÃúÃ<{+k®_gj^§òóiq: DGG3|ø(ÆŒÑcµBBlÛâWjçNxúi˜?Aven.iconset/icon_256x256.pngUT ÿ³.b´.bux èè}›eP›]®qww(ww+ÅÝ¡PÜŠ{€b…â-nÅÝÝÜŠ»{ŠçäýÎïs2“Ù™ÈÖ{­uÝO’j ˜hdh000˜JвZ00°0ÿÝQ ‰{™ ´AuS4ô€A<úï[tÜü}’ÔSÎÀSÛÕÆÓÇÒý+Œ‡½‹£‡•¥ÛWWwÛ¬K12%Yiß싟tÅ ±ÄÑ­’Æ@C «ùA*<šÖ.Ú¯yNÿˆ7«Ã–§iuJD§É–_¦H ‹®˜Ä¢l>6g‰n¼y•à#XÃås™±p5q™»u“¼!Ìëq¸yÓɆt!²Å~©7øÿ7*Ì ®` ÆÄÊ¥(óõ,+ƒÆ€„hÏpÃê~W¸Ûné©°ûâàë]"Î2„&D£({Uppî¬hh5¨¥ä|¹âÁ&k'¾†Ð‘Á‰‡\J¹æc?©`Áž…D8SV¨ yhüˆ†v‚ï÷=ôCY`ܕۗ]!0bÊšõ°—,êƒ0’Á§ÁK"?Ýô›uW%Â"²!HÀY] ¥º«ymcÝžÀ( ; ‡–ƒtËBç¾0 z"äÂÇã¤?‡§F¹àÃó±ôz©úžå¿hÁ> º‰Î,%p–âµFÚLæ«Q–™W=¹Æ‘M]MNEöG좰N€¤¤uÎäNh ñܧó#ÈD0ïH›ò¿­3zYB®·E¶±¥Ð9%ê\L…®ÄŽÿb®6iþqÝ0z¿dŒÂzÍÇèyÆú[U Œô:Ó }"SÉÀ°Êüz°¿¨?A2¿¤À2ŽP9Ú`¦$ͪäÓCǨ~~uöøUfÕh–£xΆ†¹Á“´`õîÑ/Jþz—é÷££ŠW›#ÚêD½ih‹kiÇSO\I¸áÊM×x¤¸(ï¢ê ðbVAÀèÞózZž@¡ë§³‘þĵÆfT žÌ×¥’6:>üIdÛV¹=^¨©bÿfKP—ÆÄøm¾d„.&à~À\ñ»tˆiÉæäT½/ruhô‰  ƒ`YÌEÂÅ¢‹ ò Ó´±DC¾­Ÿ»‰d"i˜™éµŒC¸¥”q7¿œÄ’•þd°ÓJæ¸Ñ¯ÎÐ;¬5£?>oyeYø›ö7©‚êBCŠ)’éÎ,…˜9ÛЂ›.Îj“²\åYôã qc4 Ùr5‰ÅS2Ã/Öè<ކÌÓ•=D}5ô«‡‹ÐfØó?V57xΓ§G­+|ä'|{Ph»’(îËͦXnVY‹§LÌÅz†ÈØ”ôxï"d‹¡>>&fcèVH Æh4³÷’Ú–ÙZöGΡòÙÁ(}ãi&$ÞàÕÅ`óñîÖCB€F5؈¬>\g¼—J§‰iÈ‘žML+8ImúÂ?¾^%ý‘I:œTq2•¬Ö- ñ< 7 â¿~ØA¦¦éôA²4¡ò1•lùOK-ëI4)ÓC{÷•Õä‡âåÔr1äQZœ¤Í|aÛïŠ4é®"Ä3ÿ6ÐóØ`\ŸVŽLåô2‡Õõ ™^Ñ®C‰C*ÌÔTV 3ŸÆ¼´øí Ôé%¤a|¹Ý§ÅŸ‚öbÐ#©Äs¥zÞ%HäêœHçjͬ^±òàÙŠó¸ËÖÊÏd;ÀŸ>ŠoG»¯ÏÌ+çG}ñÊ#>)Öš9 ¬·ràYÅ(,Í8nläiNch‹šæK£)Ù?Å^ê.ݹ##Wà‘ýÈ!zåÉKÀ‡>sz·ë<–pZ¥j:{ÆR¤ÓrßJÅ3gæ¼ú*£^Ž$7Õ7'> 8ÖréUé:,VÐOfò§¤²+¯µ8O«³”)×­LÕ©Ð]ººÚ ÷{öö~wH‹þz©pÃõ)ŽôÙ¤F¦_•µÓë| Û @Iæ÷Ð52þ=Í<2Š:2GTåÍÏëtáJ‡çéÂè@³EJødü²ó%ªÂ{?yÕ¼ÍÿÙØÚ6z©ÍÍϯô‰vú\ÙôGbV™ugzýMºÆ ‘Ú®,^wçÕ-'H0 ¤fp.¿½Å$+ÁrZ‚ÃQ";¯î7ÇÞï×F mßøTÕÔR©ÄýG®‚!¢â-çëíÚ/ œœêkÍ9µK>'Í*¨Ü@ÕÒDK"FòxHþ®Ÿ‘áÿ)%ÛI¬KØë”:P@™ Üôú´P;‘±wQ´ÞŒN*À&úßž¬»õcòx~öO™‰ æÔÇû8$ð­ ¼ ‚Ý¿¾Áœ™+¶û_òÅp žMÞgœK¢!Ô—e|`7nù5L𙇇ç%Å€z¥É>å'¥¨žÃß*û—¬””$àË`~jÁýiåP;JKá×%¶âl»k”ïô×—›jm„¬ VSûϰÂGÙû9>›I//[ἊXÔl€çµ­"³nÿ¡¥íëñ$™¨m¸ñÔqä䬡zoªª±[2ŽËí›ç—‹“Ç|¹ü¦Ú4íôæ zòdfb«’ìBÏà ™ú×éb%¹i‚^uâÝÙ«6\§÷‰¸ É8Ö¹rþ‚&ª/R?㔩Ÿkx&Wï9[‡ÿÝéõyã´²™Y®k_𢵵õHmð+¹t·ÿÈõÁs¨Õpâ8¯\n‘O냺Š)R˜y·U$ÿ¬~x‚`º8ÍŒe­Õ¢ò/3X¹Óû¤Vs±bäåúñ.±¸F®6sGÍM8R#ÀÔ]¤÷ELàs5ÿTàþ~ •ѳZàeš=ÒVÐÑ*=+«ÊeϳËÒ™n;ÏõIé3,î~€O Σ¾?™`!vœ‰Ò¼D˨æ+ùÃÌôµs­Ù‘Ñq©&N· /ïÖ3I"HÖf‚+x|"ƒ·X>Ž ·ÖøbõMSîBqA13XºŒf–ëUǷϹíkf~¿Ý_þ1ÑWü{¹¡ÌŠ}ÙÁÖzAƒÇý¯¡­\WpµÑ‡çûÇJ*_"êúùsU 7 ;éÿ¼ˆ'xº¢Ëòû*>mÐ;{뺖Mü½ÚÞ¶tRÜÜœl$v£4‹=ަpk­®6ßJu7jKžpvgÏç-BÉ?9o¸M®©%/§­G'—!Š[ȆOÚÊž¸ßR‹³œÔ>£$îèÇì0¥ˆ§"GÛvXôÒM/ò«.ŒŸŸQ-è«YPè$#ñ)<µ%ÍCy¹QéÔôèõŒLÒ0—ÍD:ªlŸû~ôÈñ,íbe%¸Õ™µÁ9K:èã®2 ½œJü£Ÿy•œˆ·gŽ6×û Ìy¯ÔÃZÓl•H°ZòoV~Ë’y’H,J#iˆíÎÉŒ4"µ,™ Q†äÖ|ír‡W%ŸÓòÌ¿Õ×kÛç@«Ó7U®dLO´/»i>Ÿ@±î䇵¬öšä\ ? ÓOæ$ >£ìÐOÜrÍ=äZ-9ë_óžËÊÚž˜ô"èã÷«57ó0‡€öÿ·S–‡ß,À}N‡¼`2{ŠßÖw§‹¹è²&¼ EÚ¥ÔÔ²Éɲ.Ý‹KµA/ÿ†)k=ºý;t Ïf d"$„(Iy0\8o6“/Ó¢ú]9€žƒ\ß]ÔÚš`ë¯?Ö¿E)æˆHã´ïãáæµ =>>B‹Œä°ãëqáÛÖ™L” /ç ÍÛõ/7I£ÉAÝÀÛEê‹ÜEa-çëøD`S,)W\8çdÓt¼#YÿmO~Øš®ÙñÙgCã|$"ï—ÅEß[«û8,É·"¯ÑÇfâw“n3™yðï6žQ=f=¨Uq£c'èç‘Ò*$¸ظǡ˥3½êоù&G3§9tJäâFøÆ š8-®–[ÈËwX[‰@Ö=TÞýÞòb³j™ÌÎp!@xê¿5¦ÙÙÙϽ€ç —A;Õ-EI¸™ÂC¸«ú}¹’“p»À±4µ]»b5ÐaçÇ…©ÙÚÛi±Åh 5Ì·9Iù·,U —‹L×ýªc¿äõt®Å% (…z{Pª¨ø§&¾/tuêJš…ê3*o»c¬ý ÕÐj•lú‰³­­>°]ñýÍaÑ/‡”›¶¦ÿÜMyiÎMUÚ¢xO½ ƒ3Ü1Sœà2I‚(”‹ ÏlâÆì1vilüAEòøH xÒÞ/ Ö<[kpé¡§véásY:¿žÕ@'" ;×á5ÐþÔ¨Íè—ÍRÉ(¶ô‡9ÝÔ£æî {þçòW .:ænø’/àuå9¶z?¿€ëXÙ{4hJÓÇ03áøíã&ÉÇ­ç=忊yß°£â3ªa¼²êÉ64„e CÛìVs:ùâ5»)/ýZssˆñ?¢§Ý‹òÒ¾„fûù’Í àã½qR,'‘’7þÛé¢\nÇfá.«^•[6¯£——""®‚»½câ“ œ Wtáå±^Mx(jKºˆÍËV– +ձЗââ9±ÈÛ•œÀ…‚p—ŒýÍK}έ’mLÑžÕØT6p²={ã„Âô±n~ú0¿CõCü¨ÛoÏ–o®±nþó•ЪSÿ#y}ÝD>žbÐâjk§…ç#न–<ÞD!„3”€m¢©Q(9L[ª†¶Š-âýóÁ=k÷];—PJô¶Ðm<,âeñ—­š,+9ßž›í’Éïˆ$šÈÔ~R’eÐd‡ €Mµ¿rë9UkžÉ&Ї\‚‡È;й’““)j}4XaBþ&±".p¾Ièš`"Êþý ò;ê!t;)~îø¨ãYFž••E~.U° -ŠÖO·'Ñ# o=îÓT.#ÓGòqBF–g½*õ¸üxÊpÁŠ“Â~×ÖË@Ñ jÉ2òö@»~èŒ7 ¤XÀb`2 ~­a ”àWGƒ6œL~tk'ú¾“P?®u‚®»¿Æb7¼Ö¶¶QA¯3ItŸ7º³6½Î®k;¼î%^¸š\©¡NN<üÛ³4¯Ôflû¦SCñï 2æ]=ŒÃ.è?åñáßzUßǯ$ïÒ~rÕF;ï¹ÑhÐâŌԟ?1–zççÛkõØçäZì—iÂþäðÆ¢r[u(A)}ÞC~|< GÛFk¢M¨û\a§¥qì 1N Å‘CÅ› WÈûœdÉ Å+îÓ­?2ȹ€rò=à°i:Var'·@öÂØ©÷$¦3´|Z#ÿgUמïóxÅv¦@ÏüjæÃËV…pßÓÝÙwÊŸðˆˆˆÔÙµ=OcÍ®‹º¤<Ö(±Dì»1¬5(žôG±œ}Ï+ U¤ç£³5¦¸æo³¹•l¬!¼¡r  ÊJÝïåÚ;+¶{—šd¼¢y¤¿8+Ð}6¼ˆ©/õŽÀxJÑÿð„Çñ/›b»7Ç•T6ÔgˆY7èÂz^åoM܃»o¡ ©ÙëþéâR{ãûל0ÓÎÈ÷¸43{§gªë—›i•f‡EÚÍØ…èü¢Ï·€’›ýq™t ñŠc¿ûßj€/ôË~n÷+¸G/ÈÁèæbJ°¹ :¬­8AÚŒŒÄ&µ«Î­ï9Pm°ÎMgh!f3jR„J–èŸY¶×_Cû¹¢¶¸ú¢®—ëñxàÅwì°,ø-À•ÈÕÖ.Üž"¾çè´v±:^ÿôE¯Zr~ <ÚzÙOQâ©U™¸Üè,¶ŽÇÍ{‚GÆú•#ê3ô5Ðl¶Õu«X«Fù‘‘±M ¦©#r¡,G…‚ó‚¼_"RóøœÉÞ|–5Ô²…pûâsRÕ•ó$‚h%îÆ?¥îÊÅ ¿ ‰^¢xcykôHñ€q"½jzÈ„½ÙÞÂNmcu¤ïÿ S'x»¤EkÊ »(!aЬ‰±,ºÒ#½_o_¾®·_òH‘jÁ`†$pã¼@1<‚x—3[ºÉ(—œÒoµÚì8Þô\½YÏí²ÞV÷ƒ'‹ß‘!AâÉîD]ÃhŠ`”G¦GS½›Ï›Ýã pÇØEV4/ÕÆŽ9]¾è6‰Î·vGgßÒxV_ AªÕê²1Ÿûôút—2™%øüö*]x¶ŸÉÝk>ÊÙ¾|l²—ï3?%”Â#cœ1©ã)„ñ¡ÎÅ#Ù5㿘µ 2Ž4ë-û‘ì+íÕ_·Þß ÉyyWk¡ï¸tòBf{Tâa*8uŽ^ù<`N lÓk$¾ÈY÷…? [Ëñ1σڪèOØv|PH ú+ð HNI)67x_MY7RKJìR`ðX-èê“¢ÊuaºC)I^@‡“Iô*»œ!ÿ\¢°„óP`æÚ¾Y­Ô[EúÐKJš#a’ÝnM»Bµî³ôµ”À{𤤦æÝÕ¢oJ¸|R\\`ÁqÃΟ¸Æ$ #@²^ap ÄŠÈ®…&ăãÙB›ÆÍc×n]è´è ÐFÛrY¡Õ¼ïW¬’¦ü›E—–Io»×âòÊ6OnóT¸I«Æöê ¸PK ꦣ]5ãe[·¨W½®6»áñ>'B‰\ z]C%•z|ƒ÷û?²#㧨ýÊ>‘?dÚITn,è°ÃÉ–ÏG’,S·þ·û€nTв7œä1õ#j ¨=NÁP!*í Åû\m6øþÛM—(äã²¢P0/ðvâ‚Ü®¹&EbÒmÍ/,ÌUÂ\ö¹JÚá4¸š¿D°Í®Õ˜&]Àæ§>Ñ«¤¶¡}úæ}¹ÎüŸ±^s鬞¸““Í ~²/7¨ÿ2p&ø%ÜÿËSçRÕ7â·&¾"¹Ø¹R˜ŠBÒDIaR¿‡ _Cû³¿øå{j {“\šë?¦Jõ6^¦Yh݆8ôªBž‘‘Áãk·ô¸ÜÈè¾þ§¨'®6Ó%Ð3£þw-Ãym®¦. Ê‘H˜‰ ’ñ@©ßCÐ(š:èmM¢SHK4á4ìð,orÝÚ¼3òº<gáãÄ&œZéoô%3xNe@t£tƒƒß¹ZROküGT4·žÊg |ü‘®ûÐ9‘¦™jCcú41ÄùNè/øßß ^rÅGäˆÛ·8¥8º4"€ML! Œ`-¼ëaI5Êž¹M½ê¹ß¿F›©…Üò«ŒšÇ ¿Œ¡@ôõ¹ëH†m®½¯é 6[–øÚúÜVé4vu\´¾r·ÝŸ>Çu‘¿Õè¶ŽòÇUˆš,'ë†ÔÞ§›>›]~žgã*k:bþ‹GÉ6!0´œÎtø?Ž›7L–¸s»t(Y/Fÿ8°bäÄŠû>Îÿ}`ôö? ¼Ã—)äl£»FNØòW$0Íd÷=ŒœÝ¸ï(¯?N°ÂÎÄdqºðßnåBýk£ûò;ò1¯ŸŸßuõöd>ª÷;2ùkIŸ*ñûnìÛAüz—¡ã³øM½‡šrØe½REÄÄ›ã Â2¼r+&Ÿ-Lt"©†ÐŸÕ&É©Hï/Œ]·ÉŽÜ¨Rèæ]×c¬ÙSÂ/P3e Í6¨¦~L¤¤¤b÷ËVM‹1;ýQ7+¶y¤Ýµ^Žºé… Ï‚-­›a¹â–+<žÅÊþ»%™*úç)ÑM—Ïä·Ñµ±ÆÃ§‹^ZXÔ—ïùl’àWˆÛY5x'j¶»z–¤<áÐ|ãöoXû/s-ÂÎH]×óeçD:÷wlÉ—™ú@}!-->Ó—÷·Z€Ê[»˜¨e˜á{‹óÎõ8ëE¹¶åÞPç$ëS ˆkû+¨Yù+ä’+ÈÿdbÜ\/]Œôí0qŸ[ªUk&‰AÚ§cŽ.ð'2A—óWL&èöB}›A]ˆßÍ!7à-ÐÝݽà-›JܳÝõ ëßwg–ûŠCÝ®Ê1€»9]÷xÒ°:Ÿxo;Ix‘rƒE–icRÁÖ֠„¾ÛÓÑΫ3­®æ^gòGS9' åøüLçíVÃXzµf“§‹•§•µmn•5:íµnò¼Ú¯Jw ˆÕv!02áye\_C.ày…þOf2D0äf]D¯²Äè> xkÿ15}¥žÊÅÌOŽ}Þl¦@ݨÅé¿$b¿ÚÄŒI.P%d“Œ¦&>-mír£fB^Þ”ìl (4È›™QAµ¨´´1èÙû¿+aíŒPÀW½Ynt€Aðûêªwûtýî·Lëî蟳lþeIDø:¸µaMºÂäoäŠõÓ¹û›sÛé§ŸÙÅî>gÀ ÇðmÎ7£½¦s?I]§ÔöÌÑ¿ûlµCª5`‘0fðîf¿TÀt‰!*ÂRÁoB-tm·ÞtA5˜QÂ6§øë¼÷E±™â1Ú†ælgëj¶€‹NgT^'ÜÞðYF÷ðR-¶àEXá»>kˆÏC]vnγö½ÒÜïv2Ä̤qð:DîïÙl«Þ¥`­¶Tãvð»ãcl¹ ¤Z ²0øU©B,¾Å9ªœhÒ ²5øGauìK>;a÷,&ãìõ÷ET NG¹öü€DŽ@s»l‡*”åÁyáù•:¨¨r£;`㹤øäŸY§7ý»™6ⶆúßhëmõˆI/Öoͺ5x³ˆ#Z«Šj‘yo:ä ËSP³E¨È”Ój‘2-‹¾žþQð«çç §Û©ƒƒ^º„2ôÎ,j©½!‡ì÷*Ö'VŸq`AÇ÷œ»í(—8ªU1:æuf±ÈbÐm„#ê]&¾3ógY‚—•ŒOãýªŽ3^ŽèÙ\;ô=*ߢ¬ž½ÛNY62f*‰M<“Zâƒk`¦mà›UEÌ=“2€íÅNÉ©%Xü;&z :¤B0ŒjeÓÒz©oÑ”§ýÍn™””?6ª„/H˜ Ì ¸~gì˜D"ËÝ®Í\N”[_Úzq‡@6µ—msCÍ_h#]ÎÍ…m¥<Ëy ü¤t¼œZƒªhΈMkóúÅ4ø»¨´ŸP¿Œ·¿Æ”;°p0xGµ”л½ªà†Ý—«\ó;‹W½jïÇXÉÆ¾(Y›¶ VêAÕ¤«’|†ø@"ºÄ|(ÓùÇ×Á§åp\šÈØ ^Pý¡Å@™n8¾—©L*Ohgóý¼qq~¦ö¡¬PaÇü=¬T¿L¹£ r/4nT—åÕþ`m-ÏG×ñêÁ/c×àÆ¼ÞÒ¼ˆª’¦Ìà qÚD=#ÞVPi¨ÒÜ»âjJ9Xƒ¬håsròBÇYËÄôøw¿›åBd>‚~;¶ÔœÙ ·‘¤Ó#ùnÿŽ%H_ý°½˜J*h"Ãßa·Ï4r7ø~\×¶ ×|.àZ#)"¾Áæk}efÚ=• çÕD •ݤ¤?a’–a+o*ÄW2·¼ùp’ ÿ"’Äñ¸ð„.Üæ<5~±V;è Qˆ÷ot,¾” d ¨šF:kᨀOJ;~š÷¬w»+ƒoò* ÌÛ°(fF&ªM;mà[á°a-ég–r|˜Š ƒ]:1šy¦}¶N{.E^ÿ©tL/wÁ#¥Sš :}{Ëy,QÍâ õÕ˜úÀ¼†äO÷×Ðò…ìí;>Vè«7§*Q.Vî,êó³5Ä:2HÇ{_.€²GS&ã«îÂpé^bEq4—v!›¼ÊS×Ì[>â¶è²°šÀžH«\!K"J¯Ýð\Gs,ÉÇ€gæØb¡F{ÿ”‘!]¾±:}Îwµw÷íIAË­¥8±¸¿k\Êxep0üàœ –Ü(—­É©8Õ¬…ZvUÑW·‚:w~ÿ«ûµÉøã& V }nÁr§¾~Ÿ¨w›·8– ú %W´¤œ>ŒÜBy¡€¶cÝÝØæ`´ÞNæüöØ‘SgÐõåLOµïß sz°è#ÿµ©74¤à—jt ¡6¶ÆˆÈ'ñã^t·FªºˆÝØa­y|¢Ða+OéùþÂq<ÂPy*˵¯8ÍA—JÐa!D³Ð“õlI¹)_ŠÚÓ㈌RxJ>åÚ)á ¯ï½Æ^»9‹ÂŽè0# =A²†5š^å…:À¿‹ýXär¡o9/©Å–fû•¬Æ&—̾Æšv¢…Ü„-§ ª? fUHIi¦*ã æ|ÍÖ[æþB{ š–ÈŒ·õ»TV¬^ýïLrøÇ»]“D¯ò¥ßÚoÂD¦Ts«Þ;ܼÎýRI 'ˆ2/,ðf×PJÞFh¥˜ìêž«­ÿEÖÿ\C•õßo5d'3ɾÚJýʪF¶™„"ÔëÆ´!^ÔãÍ¢ƒkòF~]|ϧ ýä¬Ê·O…aÌ ÎÂ×_"ˆ0’B8ÍΕ ! ÂÈ÷ç³ÙðŒjv&Ò%¿[~ýì«¶ ¼™´¹)PÂ÷:rþ;±õR¬L%ø»uŽ0è®—2ÁGT›…P W·òS« ]]P§áTè´„6dL-çeëÈ0ìë³÷¤˜ø×?„-ðŽÿí9ãVpåüVjN™þVÀ[ü1²r3Œ8Óœ,eôý•`¥€8?ñj³ZbãohÙ-¯•Sª]‹2áÆÙ3i/²$Ö¿P¯Qt$¸#ÕW1ƒ;v±¦Z¥Ý²‚¯#š e­yÞ#uNÉ»¥ãæm—Øf øUEUc¯µß@->•*OpZèë’ˆFqÓxlAMˆ@KÅ¥RÏè÷âGýÿø(ŒÐ£<§sã`@Ï£t(ÀU²•­Ñ>…ê*Å IÔu«§—i•Ná6qYªXt]}¿NO÷>ÜË'?•Õµ ñg«C€œCÍ­ƒŸy«Ú´ã^=™A‰^øÍÃç\ÑÂ+Û*òp“—ÉC5ެ·ý.ð½›,óggˆJ¨`õ/ì¸6,ß»à0’púS¨ÌN+Ã?ù6Rb²V uùfÝþÖ¶¶3û¾4Ð Í#tÕE‚l ¥Õç+ý#*üÕfí~ £Là^õ'_É·åãhWn®0ñ]Þzˆ3XËÛàëµmؾHmËû7ss·/l»þ!9¹‘øÅ±·½=Ì—b3G$\Á#cqÜ;•¨å({{{ëlýþU¤`¨.A:ÜÌWç’Ãñ¸Tãu••\0´GsˆXƾ»ás÷k8D ”ã›],h÷EF $McÒ{9ú¡­ Œ*¨IPý,ÑjÈ‹9^m.™ªÙîqË$v§ã;)á ¶¸ì†˜±ˆ´=9oõä<_ó6Èû´íPrƒôªÿdŒ¦ð ¤*t1ßtœ½ ̓¥}‡ì¸’ó§´«ïh!éw –|ô´MÔrÃüh2 ˆ’d™"9™Ïï(v³sƒÃG"±ðþöò8 `lh €¸\¶íaaeXç¢ôGãV ŒÝ£Sh ݞؼvzÎî-æ¯×º,üü„„Þu"ñl!âÐ׋ЫKxùSÃ^ÂúélH4\ÜgØþLû2nìý·Æ4këí¾µ¦{¦L“î²ã¬&ÂÀÔÌå=o«d«ó,?tæÃ}Sþ}ëëº\gÌ—Úˆ+UåÅ{k/û×9"9PƒÖ GavɌñq¨¼x›½ÀoÚ7[(boبÒ(#Nˆòáj߉$/#“£}@çìJlì_`åõò“ðTÜ›GÆh NÓ“µxñ¿|} €¼Aó0Ë6þblk›SM0c^Ë^K—ÌŒ³kí_B)üìêÂÙ_C;LRqŒ\Už ö)Y’뺂ký:êµ&í¿ƒµL|ºp¼M’ÿ²h€;޹ü§ÚÆ9¬šï‹=ƒþÝcé%ðŽ2]Hó¬.‚.›úq/›32Àõ£ù]A}ë–K.±å4•™ˆþ×häÇ<›i’ÌJδK&{€• Úëk¾VP•¡<#Û»<¯ )…^ª8´´ˆ¯™çŒ×Ü ˜¥Ëˆ¦)²í¬û³”»©oÆq3¼OONtrÕ0¨C*t½èÝuÉvlúÎW2;œ^|Å[ò ^JT©ß ©6Ô†<½>#§Q_kªî:¸U$GQ]™ÂËÚkqˆÀ|¾—Ó‘2eTùDEfKÙ|Ú”DùÜÆ{ø›U_ ç»lµacdJé¹`rrº³Ë<ÃS=d³²Ï:1aÊ#žJ·ø«QbaP€é5r³ý™ž8‹€âuu³ ø%$¨Cgõïv.„ù%Ñåd_Iü>ƒO)mzçxµÑ™vÀÀl«ny¾RúZmÙ¼¡¯­½H#àßä*Ëœõ]oÀæ4lùìH÷9çt³õ¢øcÛµòk4 œypyeÊÞ°i' ÒÅŠøA¢NKJ7ôô¡5>°ù™FU†d–icás'öS‘©ˆ£$K '·¿[»Tís:×ß0c‹ËƘªà†ì&3*┤ù4ÈŠ^’ºçá|êgqxQŸÈ4³9úvjÂý¶+ Þ¯Úµ¹òàáwq)Œüá>"…—)!ŠÛlÝÒøhùúá!]!Õ¾N])\¹øœG—¹šløÿ¾Iö(™M;<<¼ÞOQÏexѸÞÿ5:z*(ióSd4½Î¿¹äCçU!£¹ÎùVíŸȦ#ËiÇñòw‚7xdX2€€QüQø=ÚŽ0D[ö-Ú#qzQ389k­r©ð¹#Zè+¬ÿýŠ­a“]ÒxÀÍÙùûØ*ׇ¯3‡eN¡=Œ»Xj‘…ª #³\‰bQŸ¿ÉÇfu¡7S{›­ZôA§Øä‡Ìž]§Õ"¨å‘  IQë0\e™Ð¬ò‘AY­«ñò ˆJÖünžÑíͰXSTVÞc­ÝÏt¬fqOe{ÜOqrS¤ç³Ktí:[ŠÃ.w­¼ˆÓÉÛñÎçíîÿw±ËŽw%Ê~Á0ÍŽ ï¦õZ¿ßé8gÔ¹=ÙXkIXaÒØ¤8#¶m4¸–vè¨0{©¿X5ÝÂ2|¹¬º¥ÓÒÖ>YidŒ#ã§ÍšÌläè#k”Ç„MÀÞÒRõ|iý;JOÂø§ªvcñ”FÞk_?ÜšûßÍ™ÄKŽŽÎ á|ׯÍEzC—k‰ƒ;Žö¿1Ø>èË„ ‰´|r‚7 +ÿ™fCãp4@ŸËå ÃËnhè_;ùgp»÷”‚ð¡H誧Qø³IÂwŽÍÍîÌéY‹ŸÃ¡äš Z±è³l¿éV20('J!ó–³ õ‚‡ždu íêTÎ÷XíNÿR:òìD¼mÞE¶ £ftd* –È¿…º \kZ©™dõBäEÑØçªÈÇòTmi&·€Eˆ¤-&"^ʱ€GÎ'3K¿“ad1žzJ‚Ÿ°þÞÞž¹¾™ž‡Wg7jøVXcVÀ<2[k^G˜‡ŽÆÇ3Gƒm!ฦè<~ C¬Ã8¦:,NáÚþÕãˆD–Dàà x{–úÊgÚžt%õѨeaá¯4}µç—#µ;?Á‘ÍËïoÓȆB¿cÅÎãÕ¨Œ 2”¯ÝJ!Œ3Ê] 1Ó¬? BÊÀ´]Ûb¸Z¥Ù»¯Ô0T^m;l O~ÖØpDßÇI§•ðü =NQ§%ýAƒîNÀ(n yFª7Rмšñª‘tPæP¸+0S*–£èóðòŽù ˆbÊñFÉ%ÂU©)ÑËW#iÇÃãÉñl**:ž-1§ŠL2hVNÀl¸¯úT ö7Ù©´¬€¡’§ êë’ý®‘î¡7˻܃uu‚&;¦OþÀêÆ‹´D‹‹–%ÿI¶þhJ|ã`åW>tRIi¥Â”êÂ% °ÅÂnx9œAxnmÞØN¸jãS¸—;¶|6¹ñ¤l>g;WÅ™qi(2^ÿhq‡n'éíŸÕÆu¨K)|Qß¶ûöq×RÏRϼt¯B‹*)¥(ÃYûÁÈ«1]=ð¤ðÔ’˜w)hš§ÙéãhwŠL]eZ€[~ª–ÈšöùN„€Å…$~ØØw…ïRºÙîRöíßGÿT« ç‚,zŽ ‡¶Î”yK·™-u3tÓãyfÒUwR¡Û“ÀÎBë‡t0¾h=k[ êoÅÇÜ š…Hÿö pí–RµhêЦpGÙD þaÈYcw~/º„Ì1å…ò}×Ñ“ÜSÏ9Éþa êïÚ¨ÒÒ((åxvaþÔ%ûcùHdÿZúyï2 @ÿwZp`eØ¢RGÜTvc“N*¹î§Ëá¡«ájvt|@0vø8m+2;× Ynv=ìû ül7@ÉûAUÑŠàåÂÓËŠ@Ǹ»CoÁÞ• ž@rA¼ìM³&úÛ—Y|dIáðsȧïY´Éyµ!G¹¼µP,e ÷#(\Ž<ÆÝ"¶)¬ÿˆ&÷Ÿú!96¡Ê¾NÔ)ññËáo ðoÐ;ªÎWËËQá¸>ïZïwðª£Mül4ñiuùÉ3À±q¬ÿH2H‚?Õ\¯ÂüAˆbtd¥—GƒH8† GH¹ž€žEöŒõ9» V^ αNÈMJÛ»Úüê©yÅ®/ݘiÐxàZ- ÎM¹áÖ·ûPܰb;¾Uq»$mA2øyD ¼~1z A‡ÏðŽþÞ-H$ª™ÀžQ4‹=ù=œÍ‹²ÉcÂ¥ÜÔð’ã{Ao_ñ¿¾¯Z2(×2!¢äé6-¡ –ÐáAaÇdý‰O±µbÑÒÊÍ´[¡†:̸ÌmùR” %ªÏÿ(ÒcŸxÚVYØŠB *´Åb}‡Cß \úvjÚZT¶E~̹£‡“­éVÇ`Gþ$ò<#êQ/”W¬Ô“ÏÓ‡“çÕc“¦­²t—$¾ª„Eƒ³Bl(Ð@ÈS|€b6þ§V¤g.v#š‹Õ;ýà1oÌ'_ö¯¸¡9X)O|ØsQšˆÒÉ#ð„˜¹ -¤`Þà›C‰g+q¢>ÙŒÑ~^‹¶œ”Ua¦ƒ{ðèNEAù‰³LA‹3ÛdîùÏÏ÷5än€aÝåBõEò©i€<”RVV>?ÆŽ*4›‰0%ŒÚ³;MÕA› ÇŽïŠ ‰M¢Âå©ÒõìùìíÒ¥)鸱´Å3Ôáéd-œÈNk!€”:ªe†3™AìÒŠ*h!‰CÂB%E9'zèô½Òæ"¨."¯×ÊþŽ.ûÀÕk–K‡_.M£ºýáÇe +N:ã&‘Bu$÷ÉþÏæôܧÜFaòÛ×()7©¾ œ³¸etn­ <8\¦™Õþ/éþöIâ+ã1V8~´¼ûë¾b8k„Žh$,aR=ÕÕ¡*âzP$E’$z ²C©-î¢ë…£žübÁƒ Å‚ÛCHlc÷ýÜÅOÊ Ä,%ŽFîÿ°’:÷4Mûyè®÷[* ®ñö4œc¡ÂU ‘пdÙB™X9\E¼eKÚ7úM+6V”&bÌ«Že¾NÄuj Ûc()\ú|Á›»¸p¿†Pœø5àHá‚öÄmTHåi>‚ Õڦ%~t)äg‚Ö”iøÌÿ îbÃuCבtl;ÁîCàÒ;DHö¾NÐk..€eÄ&©!„»q_¤º+>Õ ²˜µ’¤«W"°õÐ$î6â̤aý£r4”ͯµ")o#ÖÊIâØi0í'1lkþ‚lÚe:Áøðôàl]8"s;F7ÐW8"”ŸÄÕŽÿû~/{ )[$ÿïµcf„TýhoKTUõC ×ß!ƒÄ"1CõÌ¡ŸC;Ïeo©B0jÞéþQ•ÿ¤ÑÊN‰Ê]}£›*b禓w@¥cÏ\-R5Á§‡<ðÎ"r€ºÕasLo~ˆ,kÝvÜ´þ'‘^l¢m‡í9©ý>ªÈ~@ê!«b—ÅZ½ëÜ’åžÊ3©yd¨_Éf ¦ÍÄ;ã „§×Ðh#«s ú0U¾³*ú—Æñeh¬¾IfÒ=úº£Í(®"ÁµâÒó½o¼N+¸äN(ç@IwDeb;JBLÜZBèNá¿4”ÓàA0B¥ˆw‹+ ø™ê.å1{ÞR¢,…ŠbB÷·XˆAöŒ@ÈýÝ3BÂ~€2ûpßYh‚m—YõŽŒ{µ¥±ŠãËÜçõªß5lË…‡çK§L¯± €ö¢úRY®_‚SÆ>Õk<ŒPñ¿þcŽ•z‡HC£‘>ªâ¶©ñAz&È‘B·Ú"¿ïŠK¨ËóuÝùs«xïüUC«bÑAâ«:Ëw¬ºpË8§˜7Þ®þ²™±†i¯Q…b£·b-¥/† PR_Õ²½Ë-$}M·³üœbnVCD6ð yµ«øVê~¥>H¤b {³-NKÏÙN©ºfìÔìV,•ãk•¬Ñ¶úã×ø¿)ß„Ù/?¢íšv ¸‘ÎàthÉ”Ÿ#ìôöoŠ~e‹Eû[J˜ ½)kƒº†êe#ÊÒÖº ÖÂí‚ДW±P>ã7ë/Ä@š…g_0 ? ÉþaÅËÔ`Ŭb¾ÑÍúÆ>8J29Ã]³|oË-µÁÖXÇo!jv mܶ‰DË ïFta5A|8}ØMã¢åÒÌwoØB²kñè&xûBì©mt§1ëFÛ1}¥ŸóôÐ+¨Øu¤rõO™W·˜ŒèhVëŒ3ãg܆lÅD¡§}þŽ;;Üꮇ½£s™n‘ÜP¢èàéó],)൫j‹2œâ¦ŸÞÝ5þbwÒÂ’òT—„ñúM‰Ðt»m5Šr²Ù–­_ª€# é°‹,ê(#¶2njùT¯×…´N¶Á9¨Õüî¸Åìp;~ï;¾­0Nœþa†}siê ³6ʦT&ûåѹtk Ü;žñÕ™uý/?„Ì2ŸAC0ýÅ4ß°«öÇ Ö%¦Í“áÅãF„MB’lm£_”ìDÐÅ8. ×ÌpIè5Ø7óZ÷u¥0Tt3°$p·HFðìÑ>0ËØÖùŒÈg¡ü œÀ«+;öÊJ˜@ù[2Aù´‹ )µú´„NøÆÿç ÷ßaŸ‡'es w` 7%95ÙšOaÿPK K‚nT QŒÉÉAven.iconset/icon_16x16.pngUT þ³.bþ³.bux èè‰PNG  IHDRóÿa pHYs^^øÙùtEXtSoftwarewww.inkscape.org›î<VIDAT8…’_HÓÇ?¿ýÑ…›kAб¹± ¤ù‡ 4C*ôIP,P‚¨õVø2¡? 2{(4ß‹$u.LëaCÔA=(óÏ·ýÔm×CI#ÿw|îøÞ–“-(µÙ(K$ØÙEåðT]¯ê멱Û9—J¡K&Ùš›# 1:1Hi#KJ¸ÔÖÆ„߯½³»[W ƒºââi úç§íöÊŠáaž473ÀÕÕtööò3“AüþI§Ó"""££"¡Äãqº(ªŠ440¤ËbskkyãóqÛíÆ“cF£Ñ055Ez{›kee3R)#yyHàÀjåBK Ó±dßggó¥¿ÿ¾D"Y\œ—îî›j¥§q¹ø®%.Ÿ&')0T„ªÂÈÈY67M8›”—ÇéꃂA¦ ²½Ï©š¦&hl<ú,Á øý`³A @HU¹¥t€g¥–wn,Ñ(D£&“üE ¯ÂaÐéØ x??O+°§ý æ3ËÄ{¢¨&“Åáv?Ö Œ³±!TUÁÚx½°³ëëÄffx¶°€È(­€xé°ë;‹Š¬O=žU…ÕUÐëÁé„`ðÒVVø˜-K냫À[ ÕÏhr—· ÄÈ1›±§Ó ‘±1&Ãab1Â#Бëî t\·pÃnç›ÓÉkàÐ݇Z®ü—3<8ôMþ˜òð¥@ _€<àž/Nl5Y.åÀ/àƒÉãüÄ%ö•ÁÎÂWIEND®B`‚PK L‚nTíÖškkAven.iconset/icon_32x32@2x.pngUT ÿ³.bÿ³.bux èè‰PNG  IHDR@@ªiqÞ pHYsyyŸé‘tEXtSoftwarewww.inkscape.org›î< øIDATxœí›{tTU–ÆçV‘D#Aä%$@ DbãRT"ƒh ´Eœ"Ë»uá¸fZQZÚ­ËFÃCí1-ø€V4¦ÓÒŠA¡ÅA5<4c:Ì£bR©ºßüq*T*ï@zÍø­uW%©}÷Ùß¾ûì³÷¹'ðþô·  Ðð€?¶õ ÿ,ð€qÀpc.Ñ3\ÈÊ$9À§ÀöÐUÖÒÛÛC9Æ&СJJÂÄÇÃ9ç@‡àñÀ‰pø09 ×µ¶C¥Ä»Ààm ¸ýè4±À ÆÔ¿?î# ;‘ߤ†¯ÒRôÁèÉ'ÑW ÇA€ŒÁ<ôoWv`¢ãp¬ñ|€\·qÒ ]hùr””„‹uDx êN£ö„xvîLðÅ#“Ù³-[†n¿¥¤ Áƒââ%$8=M›†ž~ýýïuçº(+ w2"J€_‡ÆnWÄ› ‚ûÕWµ ÷ûÑÊ•häH#°Æ{½%$Ä+%%E&LÐØ±c5dH¢bb¢OÊÄÇ;zâ TRRבo¿úöµS Øôh/òWcC~ölT^^ÛÐÍ›Ñ!ŽõèÑ]<ð€¶lÙ¢²²2E‚ßï×öíÛµhÑ"ÅÇ÷ ž=½ür]'ø|hÎë,Çá 0üLw€GŒ!Ø©nzz]—,AѹçvÕÒ¥Kå÷û#’®®ëjýúõºð¾4> ꎳz5ŠŠÂu g‚|wà]ê y -]jŸÌ¥—ŽÖáÇ›E\’ô׿J¹¹’$ŸÏ§©S§ ÐÝwGÎ-þ3r\Çá{ì”û,//O`k…úl3C1`œV7À}ÆðQ‡ôY¶ ^{ÍÖï ¡ À~žþù——ǘY³¸(èÓ^~z4¼œ÷ìÙc ‡Õ/3`Hœôk©º`›?ôë‡wÛ6Ì=÷4íÆ>}ìg~~~ƒr>Ÿ´´4¾ËÍåËŠ ö½ðŒÕ¨þüü|$'¾ûî”9M2: #á[@S¦ ¢¢æ×í^¯Ñœ9s å™3gÊëõjîܹ:qâD“¦‹$=ûì³”]¿ qq¶g†5—üÝÆPáõâ>óLË›˜éÓQLL”rrr"’X¼x±ú÷﯌ŒŒ&—¤¢¢"õéÓK]äÔk[fæÉ¥°Yè ¬Ô»7î¶m-#^}}õ:ë,GIICTTTT‹ÄÆ•––¦£G6‹|ee¥&Mš$cÐ;ïD÷èQÔ»7òxšç€aưPj**,lùêkíZ»%&Ò¾}û$IÅÅÅÊÌÌlqI:v옮ºjœýæ7‘ÇËÏGII–ø°aMwÀÆPî8¸O<Ñú¾=üzõUã¨cÇh=üðÃ*..nñŠŠ ­X±B±±Ýd züñÈãdd ØXKzÂû s@ ° P÷6µ-ñš×ÎhìXÛwêÔQ3gÎÔ† ê­ •™™©ùóç+6¶› ì(+«®n¿-\hwŒbbÐÍ7£Gm܃Œa؅ÇOùêËuÑo ‰mw2N]ºœ­„„5j”¤îÝck&0¥¤­Yy-7×n¨êÕËvŠ>Z×ᛢwÃ2‰N ÀâÅvCòL¢ >ú¶o‡ýûáøqøá8ûlˆ…~ý`Ì;"ëX·æÎŸ~ö3¸úêÚ<¶o‡¬,’ðßëåÂ@z5Œzˆžø|pï½ðÇ?BçÎpãuTQ¯¿~²J¯ìÑ3q"äçÄ 0}:;vf´_ ))–|ÿþ6ÂÉ;/¼`ÉGEñ±NIyólͼ~=$%Azú`ÑB¤§Ã%—X'Œ3gÚ)S99°f á÷x¸ÅïgPUo/Э›U4m”•ÁwÀ¤I—wZ¹4 %%pË-Ö¶¨(˜5Ë:ÀԘخ ッ¾ ‡ƒA. y­úûð7ïœsè>j'ÇÛùµu«Í ^/\v8­é%[‰Ï>³StëVHL„ÛnƒóΫ-S^n;Ô/¿„èh²ý~®¾¯)Ó$ ;ÃM7AZš}UõÐCpÅ6äÎ4$X²Ä®ùù0q"üâбcm¹‚û°¾ý¼^ž©¬dŠŠª- ZçìØ:p ªŠTà@Czkå€dX˜ã#ú»ï W/úõ¡K»?qü8|ó <ÿ<äæÚyÙ–ÑÀ¢E0{6øý0eŠMtáZI‰-€rrÀëåÍ@€ë€£é¯¥æ\r ÝPJÅçŸã)/Çôík“^$lÛf«* —Ý»^|QÄÇÃ!-â[ yy0y2üéO6Ôo¿Ý®ñ‘äÒÓáøqä8ü{0È|Àß”1j9à·”W¸>âòóIøòKÔ¥ &.ìU‚ϯ¿î0yò–,YÂÈ‘#Ù¼ù}|>—W^± òÊ+ᬳZF~ãFHMµåð˜1v¾GŠÈÏ?‡   Äu™,ѬŠ%<áux%RÊÊ(X¿Þ†×?œÌÏÇñ2oÞ<¢££9r$©©×Ó¯Ÿ—ÄD[@ l3±Ôtƒ**à¾ûìªSYi×ùÔÔºQÀ[oÙ÷ôî wÝeŽâb[òîÜ ë.þ§¹ä¡†dW„êm×!‚ÄÐÏ>à!`T0ÈŽìlXµ ·ª ‹(.>u"eïÞºv ¶|þå/m¢üðC›¹ŸzÊ:/ÒÓ­ì®]6äZv­+—› «W£Ã‡ ¿ ™A+O\샀½À[À`¡Eaòp›1,‘èí!9y$³gÏf÷îݬX±œoÉɵo:p23í9Ÿ#ìŠQ½Ã]Zjû޵kO\ññu •lÒ}ÿ}p ƒAn>i)ñH¸ø/à`)¶HdìÆA8Î~ÜnŒA¡Iž`HKSÄÙï·kù§ŸÚ%lÁ;·gͲÕÚ A¶}íԩ•v¾ý5x<| rp¤uÔ-j:àEà6à<à^ìq–k ü­ûÇÃK}ccÑ´i˜Æ^ø:d«´£¡Úëµ{))‘‹¯ãÇm#SXÀà ªÉ  íCÀ×ÆË¾ùÙ’¹Ó@f:¢€_ÃcÆ5z4füøºUZMƒðæ›°g­èFŽ,·w/¼ñòû©’˜‹Ð6Eu°NƆõ›Æžµû ¼#Ø)øÁhYÂ5áž’¸ÈuÙ´};,_N`ÿ~ê…Çs*»‡wp`[Øìlû䫪(Ëi §p/–ôɃÆžÄ ,ľþ~û·"Á+‚ðê0¸¡¤„¬] ëÖ¡âzŽ-V×áù¢¼Ü&Äìl6¹.À-ä×(Ùã"ã€õJk~ià„Eú÷a¾üØ%X,¯õ2$’€çöíCK—ânÝjŸjMTÿ^ÓGŽØ%îÛo6ª®ŠÚŠl$8جïÞhHÐÀž3p3 |ˆ­¾L ÿë¬ÑŸ¿÷¬\IààÁSÕPøvï†çŸGÅÅ”ÓBºë©Ú‚?\A·Ü;MpP–Ï»¡Z"pP(9÷Áí1BGç.¿üäÁÆØiwæ X/(lÅý¿ø‚ß*ÔS„¡'¨cGü#FXÒ\pòUuvõ9³Íò­.*C„¢¡Bð–àfÙsÿ51 ÈåÔž ðo´×ÉuÁ£!£“—nT—L¬”…ô憉vžÁnX¤¶vÜVA0PP)ø›ÚðPqhjü«`wÈ+#Ôí~ˆÁc!#_Š`dkuw E„BNŽPí·3B¡û|ÈÈOú±Vë_Ò¿)B^øç€àW¡V*˜«&¾7h†þêHû϶ÔÛ¦ ¯1oÿ[pm[9" kCºÞ:O Ñ‚dë~ òO‡œÑª<%Ç#‚ì62÷ôA+¸_ðiÈÕבÐ\þ½`†l'ÙT{»O§ímŽá· žd Õpˆ+øL0¿¾‘Ýg\ªƒ‚[Ï4‡HhUõ%»{4¸Û$]€=Šþ)°'¤¿p¶OvÏñac¿ÿ¿Gp`•l‡è ªÇ˶ε·?á'ÔÆÿ* äw¹ ‚IEND®B`‚PK L‚nT íAAven.iconset/UT´.bux èèPK K‚nTZ¹)}}¤GAven.iconset/icon_32x32.pngUTþ³.bux èèPK K‚nTÁêzS``¤Aven.iconset/icon_128x128.pngUTþ³.bux èèPKL‚nT8yx¿)8 ¤Ð%Aven.iconset/icon_512x512@2x.pngUT´.bux èèPKL‚nTÔ~©ˆeŠ ¤éOAven.iconset/icon_256x256@2x.pngUTÿ³.bux èèPKL‚nTÔ~©ˆeФìØAven.iconset/icon_512x512.pngUTÿ³.bux èèPKL‚nTãSÌ>? ¤ìaAven.iconset/icon_128x128@2x.pngUTÿ³.bux èèPK K‚nTZ¹)}}¤¡Aven.iconset/icon_16x16@2x.pngUTþ³.bux èèPKL‚nTãSÌ>?¤ç§Aven.iconset/icon_256x256.pngUTÿ³.bux èèPK K‚nT QŒÉɤ çAven.iconset/icon_16x16.pngUTþ³.bux èèPK L‚nTíÖškk¤(êAven.iconset/icon_32x32@2x.pngUTÿ³.bux èèPK 8ëøsurvex-1.4.4/lib/icons/crosses.xpm0000644000175000017500000000066614141575516014106 00000000000000/* XPM */ static char *crosses_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #1B64E2", ". c #FFFFFF", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XX. XXXXXX. XXX", "XXX. XXXX. XXXX", "XXXX. XX. XXXXX", "XXXXX. . XXXXXX", "XXXXXX. XXXXXXX", "XXXXX. . XXXXXX", "XXXX. XX. XXXXX", "XXX. XXXX. XXXX", "XX. XXXXXX. XXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/pres_tree.xpm0000644000175000017500000000070714141575516014411 00000000000000/* XPM */ static char *pres_tree_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 4 1", " c #686868", ". c #38C914", "X c #FFFFFF", "o c None", /* pixels */ "ooooooooooooooo", "oooo.Xooooooooo", "oooo..Xoooooooo", "oooo...Xooooooo", "oooo....Xoooooo", "oooo.....Xooooo", "oooo......Xoooo", "oooo....... ooo", "oooo...... oooo", "oooo..... ooooo", "oooo.... oooooo", "oooo... ooooooo", "oooo.. oooooooo", "oooo. ooooooooo", "ooooooooooooooo" }; survex-1.4.4/lib/icons/err.svg0000644000175000017500000004040114141575516013177 00000000000000 image/svg+xml ? survex-1.4.4/lib/icons/aven.ico0000644000175000017500000000427614141605720013314 00000000000000 ¨( @«%44==JJNddFF™™™;;ææfvv :PP‹‹‹KKÈÈÿ¾¾ 66**ÿ##YYââÿïïÿEE55fww11¸¸FL»½½“››''-úúúnn ššbffüüRw+++&n~~w0^{q~FL)N2+++++;mGG'0G~~b_ H++++++++dn|D~gVv~~~q|Zr+++++++++++}&ZGGB0!~GVx++++++++++++++jpG~C0ngd++++++++++++++++dDVb~'P++++++++++++++++++++]~g`n+++++++++++++xKi€k +2GZ0mj+++++++++[W=<%ffoX1k++\w0 +++++++dF"%E%ffff%@z++ {bd+++++(#ffse5fffffJS++` ++++T/fff<$tffff++*U]+++46fffffff;++~g++I7fffffMf3++[p[+A,-fffffu?c+ |&x+] YL y2+Hn[+;:kQ rdH*]]}9&&ÿÿÿÿÿƒÿÿø}ÿÿçýÿÿßùÿÿ¿óÿÿÎÿÿ8?ÿ~ðÿ³Àÿ¯ÿžÿØÿÀ€ÀÀÀÀÀàøüþÿ€ÿÀÿàÿøÿüÿÿ?ÿÿçÿÿÿÿÿsurvex-1.4.4/lib/icons/pres_ff.xpm0000644000175000017500000000066614141575516014051 00000000000000/* XPM */ static char *pres_ff_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", " XXXXXXX XXXXXX", " XXXXXX XXXXX", " . XXXXX . XXXX", " .. XXXX .. XXX", " ... XXX ... XX", " .... XX .... X", " ..... X ..... ", " .... XX .... X", " ... XXX ... XX", " .. XXXX .. XXX", " . XXXXX . XXXX", " XXXXXX XXXXX", " XXXXXXX XXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/err.ico0000644000175000017500000000427612540750610013153 00000000000000 ¨( @«´©²³†+os3JL;¯¶””ë68ËÌÌVV¶‹‹‹ª®®ouê*”›TTþ 46ÿO•¥¦¦-rv™™ñôôúeeerrÆTTÓ'ÉÒååõ[[[’’Ì€¼ß³³Ý××ûVV…=Œ‘MMM?gy~C€ƒHbc$ÃÌÅÅý22þ7df ‘‘ã~„FghVVTxz){Ž ƒz ‡H7‹3HxxH^xVVVkxxxf[Hz‡ g[4@HxxH^xLV>xxxxxQ_<|€Pa4vHxxxH^xx++xxxxxx Œ5[[‹5uHxxxxH^xxm,TxxxxxxxHHHHHxxxxxxH^xx+VV>+xxxxxxxxxxxxxxxxH^xxxxLVVxxxxxxxxxx^^xxxxxLVV+xxxxxxxxx^xxH^^xTxxVVxxxxxxxxx^xH^^x>VmxTVVmxxxxxxxxx^H^^xT>VVV>Txxxxxxxxx^^^xxxTkk+xxxxxxxxxxx^^^^^^^^^^^^^^^^^^^^^ààààààààààààààààààààààààààààà?ààÿàÿsurvex-1.4.4/lib/icons/plt.iconset.zip0000644000175000017500000045176114206024130014652 00000000000000PK ”nYT plt.iconset/UT X(bX(bux èèPK “nYTÕ¯WWplt.iconset/icon_32x32.pngUT V(bV(bux èè‰PNG  IHDR szzô pHYsÃÃÇo¨dtEXtSoftwarewww.inkscape.org›î<äIDATX…½—klUÇ3³vXì†Ò--òbBH¬-Ñ‚V`KLøPQ^Æ–IH%V¢5È>ŒIS±•„W‰À Ñ´hJx¸¡ `I‰ÔbDÁÙ%m¡eß3׳Ën»¶€þ“›LÎ=÷œß=gfï]ˆk˜‚ôô„0FS“ŒátÆíuuqû¸‡¬ò:c4&Œ€[Ð#â‰|B0Ug‚½.j{¨Ñ'`Ò=PVÅ’? îB—á „`ÛãH‚È„ÃñÉÀ9!¸#!!˜ñ¸„€KTŸ \c[·À |˜<ýèš …L}>Öo©p ³¹«õÿ9H QYYAnîUàZ€§1Þ°Ý0G"7R¾xåå#(ŠÀívò£»”Õ‡Ö0¹£#%€Ãá@–€¿Òl&aT¨x'6!£ëz’», ªª†$pXU¦kÆÎ‹vïFŠD’ü5M‹¦½`Œ>ÆŸM¦"<OÊ]UVÓ`ÞE¿ÏË¥(¤3éèÑ$_¯×‹®çÁ4i VÒÛ{!åœÅ¢3íƒ¹ÞØH8?ÍfCñù(Þ¹Ó8øtæÌy|¾Œ z•ÎÎcˆ1cÒTOm-—ŽáêæÍøgÎÄró&öÓ§6ääÉn„(rÇ Èáĉ½„,3ärñ{{;}ûöa¹uëþ\{ûAt݉ñvORF1…1>Åp¢ÑͶ’öö=gÏôõõQ_¿¿#P ¼ Teq’ ¿¿Žúúõô÷÷g½êòåË444ÔÀ@0®Ò´f<žÔÖ¾IgçᔟfL¡Pˆýû¿bíÚ†‡WF{oªîûŒ³1y€m¨ê!rsï²xñ"**Ê(,,$‰àñx8{ö<Ç»‰DJðû_ÃøQ1ó€™Ñ8Î; ƒ8 \AQ~FUÿAˆA@òðù¦£ëeÀŒBËÀKŒºÙ<@èþŒ&ël¸7s1zŸ¨LáLÉ®7¢‹tÀ†Qö’b'¤¿”fŒ#Ôã“ ’ǽðÑõ7p˰&ŽÀOáßN¶ãª€Â°®áü£“'\â”WÀü5صÿ¶ôC&ÐÞ…ð.€6±ÓÖ {ˆÕIEND®B`‚PK “nYTÀ$ggXXplt.iconset/icon_128x128.pngUT V(bV(bux èè‰PNG  IHDR€€Ã>aË pHYs;;̶¡ƒtEXtSoftwarewww.inkscape.org›î<åIDATxœí{tTÕ½Ç?3yO ‰1$„§<|@í% òRKµ´ôöÂ’Rª4X/.¼Š½.”"õ ŠJ[^A ² mx·|"J#òdÇdæþñËqÎ9sæ}f&æ»Ö^ÉìsÎ>{f÷oÿöoÿöoCð˜ 8à¢o_.Wpég?s}ÿ|0éùç+êÔÐÊÿ´ hLcZƒ¹˜ü °ùœsçBRRXE$`ˆaÀ&ÀèÁ`,ÒøÁ’Æ×^ ãLJ]L†¸ØJ€’ 9ÀBÇ«U·M²ZRxz¬Ý A<”à}6à²*¯h.¨3Ip§þB(ø9Јf¬IqÁF¸\ô rüW§‡\RF éùËd¹qŸª]0 $ÀŸ8¿X¤¸³’€Ràg!±Iƒ'€öá“@ð0@a°$ðE€4wV°R5=ИfNQ „Fol@3èZ€W€_…UMüÈ7·ÈKÁ“Àˆ7[´7[€ÅÀý¦TSƒöÀ ó‹½t ô¸(ÃcdžüÖ¼:ê1è¹â/=N5®¶ã1z˜n~ÕHþ'²¯¸ô \l.×Þ;x4ruTc"Ð':¯ºtàŸV¤ñß ´÷<Þ’LÂçÀד€§Ì{] r¾}ƒþÂ0`“™ÔëÒûMDcEŽn4÷µ €Œê;0 Á­V<B”¾ 8àãºÓy—€cL§D®͈õÏnFD® —6.žÓä„¿²,þ¼ïçžg wÁ9¯Ðþ°Ñ'øŸX þ#I 6Ø…X|á_¬N dĆ¿G,½ájà×QªË%ŒØõ±€uˆ«‰7ÌF£/F¥F>P|ζ|®A|-ÒÌ–” t®jù»þ(b+dGÆzoµè <üoÔj„ø»~¼ ”·üÿMå¤#blâ¥u gNMDl)zXáçžÇÙë,p8‘Æžˆ8)Ü€¬”ZãÔ#äys@ðùÄà‰/€Ÿ žÜ‹‘YDäaA(øw–î£?ôöpß'@?×Û_á±.©“À´–‡€—”UÀo€ÞZXXÈ=÷ÜÃwÞIFFF…‡/¿ü’ÒÒRÞzë-š›› îÈBƼHlž)GôAì•@uÀ\?÷]Û݈—›gãwîÜ™'Ÿ|’ 60vìØ¨5>À•W^ÉìÙ³Y¿~=£GÆjÕ1;2,ÜO¤ ­‡¯‡Í*l!2÷ÖŠüÔÔTî»ï>Ö®]Ë]wÝôØn&ºtéÂO<ÁÊ•+ùÁŒ¤î_‰c«Cë"@á{¹\ðÞ£ÀÀCséºë®cÍš5<ðÀ¤¥¥> ôéÓ‡åË—3sæLƒz}†“öEäÝ­‹¯#úB(hn†)S`Ï4Ù‹…qãÆ±dɺu‹Žr,¬V+cÇŽåµ×^£W¯^º«Ç®wͯé%† '¡y»\0iüùÏšìÌÌL.\ÈôéÓc*îE=X±b·ß®ŸÖ#ÿ3õ}­ ûZwùÌï~¥¥š¬ÜÜ\–,YòýT,^‘‘Áܹsùõ¯õË¡u >7í]­“œ7ú‚’TèÔ©K—.åšk®1·^Q‚ÅbaÚ´i<øàƒº+Uˆù¸)ïi½ø'~ÞyÕ²%77——^z‰®]ã»Ñ¤I“(..Öåþqµ­— RÀÈzªàôi‰4¢2¦dffòâ‹/¶Ze/s÷Ýwër?DÌÚáÙÇ[7>ÞðrÍé„_ý N¸—V­V+Ï=÷W_}uTªM”””è2ó‘ >¡“ u`Æ’î/;4Y÷ß?ŒJµ¢ «ÕÊœ9s(,,Tå:7þjB%Aë'À`™.¯ª fÍÒd1yòä¨U+ÈÊÊâ™gžÑMg#+‰B!Aø8€,)ùK¾‚üá·º²òfÀ™3ß_¶Ùl<ýôÓ6uO=šNssün:øáh0=\Œ8›O‚Ö/<ð)z?²ââbòó 3râD*óçwåí·/ãÂ…øŒU8yòdÝPà@|ç. Î&# ð,j–÷ìÙ“qãYÔ¿ÿ9\.ع3‡?ü¡+ëÖuàôéÔÔ3rHOO§¤¤D—[Žl¸¨'Ä#¾än<ôÐCA™xSS]Üt“‡ÃÂÞ½íX´¨3¥¥>½%ápqË-·Ð¯Ÿ~\]Ô"Z³¯ù³qF€ù¨Wø®ºê*†t)ƒÙIKsK— ¾øÂƲeyñÅÎìÙÓ‡£õë 'NÔå¼èuˆð¯Ä.¢7 Lœ8‹%ø†ÊÈp2p ÝðÚÉ“©¬_ŸÇüù]Ù¶-»½õê C† ¡OuXòE~/ÿR :HEÌ×aáMD¼ òóó1"ô}äƒ×’œì½‡œ?ŸÄ®]Ùüñ]Ù°!S§Z§žài!ÜœF¼Ššð'¢C€yÈÐÖºŒv¥ïŽ;îhÚç YYÍôëWç÷>‡ÃBEE{-êÌŸþÔ‰ƒm¸bëʯÁˆ#°ÙÔ1>¾C–R«dVyüqα!Î!u¤Z$º…£F ·f ^K0:v,U« X´¨ ÿúW{ššb¯'dddpóÍ7ërË‘aÀ¿BYtB"Ë*¿Ó „fjå¯W¯^^3ÁãòË›èÛ÷|ÐÏ>›oæ1o^7ÊÊ.Çn­£‰§óÈ>¤ñ«) X×­vjLGöJ…·5ŸÌ´÷ßrK !è‘Ô×[yï½,,èÂêÕùTVÆÆÏ°ÿþº©ð dËU p_R r˜…qC[UxD$ôrͧ¢¢¢«¥Gaa#½{‡çzÝÜlaß¾L^}µË–F]O°ÙlôíÛW•ãBœIÏ!$¨'ºŠo¿¾ÎÈÙ#¡µG¬Õjåú믹jF>Ü×>¾àpøp:«Vð ]°×Do–íÙ)þˆÿZà<Þìæ×0ø+þ7ýÙí_¡Öd;vìHV–¹ûÅ{ö¬§k×`N.ñ ‹~’^Nße üßlz÷î­Ë9‰LÏ#’ è`)~~ ¦á_h>]qÅAW) ^ëÿ¦`µÂoº”1aÅ:¬[GJU•)åúƒçïré8¯˜K€©È3"™¦øºIK€îÝ»]­@ЧÏy ¼ïVÐØXECÃIÃÔÜ\ÍÄãîe¿ÁÒÜŒµ±‘k×F¤¾ztëÖMg9ƒH€Ä4¬Ø´RÀ¼ùËuèc†"D_ð@ò´æ“vÔ ‘0r­2Gd"gŠz¨—!Ûø qNó©]» ÎE ýúÕ‘“ãð£ä?€^ýO:w޼uë¼^–ÕÈÓ•på‘P£W:®XÔÕÕQ]]­ÊIF{D !AÜ Ú}~GÚ›‡¯Åb—Õ3ïȽ\ùÁưËl_QAæ>óý;¦#”¶y˜= Œ8´ðü¢‘C^^·ÞtŠg?O÷Š·L+·ãЦ•¥À³ct4¸ËszèÚì»ï¾S™;#»zí!;%x¯!_ÈÙµ‹ô#¾ÎÐ Ôåè  >UÞ8 @2Ð_“SQal‹.\s ‡^}•ÏÿúWªF•âså*08tÔ…³ ž¿IOÝgõæJ7†Žl Ñ%€‚ W]Åѧžâ³²2NãÈ ÏP”»e ©'Ì _[[ËáÃê‹VàJƒ;=›;. ðá‡FÜ"è M¹¹|[\̧›7sô©§¸ØSßÓƒÅá `µ?+Z`øàƒt¨»áq$V$y\J€Á€{èĉ^.G®ÔTªFâÀoðÕ¢EØo¼‘`½Kó6l ÙgXùÀ°uëV]N_ƒ»X=rãéÀhMÎæÍ›cS=,jæËŋٿ~=§ÇÃ`RëÅ‹ä‡é0R]]ÍûïëbÔmA?™8%À=šO;vì ¡Á3Pß­•Ó§óÙßÿηÅÅ8rsý>Óaͬa˜··n݊áöaèÒ’ÔPŠþPŠ8"Àm¨§6v»M›6Å®:>àÈÍåDq1Ÿ–•‰žàá°éF²ÝN‡7ß é=N§“µÄÈÊhAz*q,’Ñ;”––êØßºàJI=aõj¾\¼˜ÚÁƒ õ„ü×^ÃÒäßQ-[¶PY©Ž†ž‚',H3§çd“¡Vl5º€/X,Øo¼‘¯-bÿÚµœùÅ/4zBêéÓ\¾%¸ãPœN'Ë—/×åÁÓ­Ê‚#YŠ[ bßÖn&xùå— VÁZ/ê{ôàØcñé¶mT–”ÐØÛ¨`åJ‰} Ö­[§3ÿ&wÜ© ‘q9 T`A6ºMÃgΜáϺáñ€æví8ýË_²oãFþ=oÍíÛ“óÎ;={öìY^yEŒÚMxî·SÄbˆk@Awà¿59kÖ¬áСC±©N˜p¥¤PýãspÅ .žâ‰^xAç‘ñ† EùËÀM-â$ˆ°;pss3>úhT¼…"‰Æ_'f ¶oßn ÷ŒÆØ¥Ú‚ôþvâÖ¨†ùBÚ](_ý5 Do/^,PYYÉœ9st¹1Þ†­Ìý3¯ªtŒ¦ŒC€T{$2ÝM›6±qcøN­.\`æÌ™:ÇÏà>Œ›QQþ2x*€xy2`A¾Ð@kd™;w.åååFÅ-3gÎ4Ðs~‰§ÕOÒû³$ÓÆ„ìE_„Ú6àt:yüñÇùøãcT7sár¹˜={¶{ÿ0/OY‘ÞŸä â߸©ã”àžÞ\‡ì.u•††~øaöìÙ£º™‡ÃÁ“O>IYY™îJà^/O)Æ4~{„ mŽÊ'Ñ‚A-âêêê˜:u*Û·oMõÂÄÅ‹)))1Ðøó‘³q½­8*Ãc6r·¢ý#Ž Rýt䋎AÆD7™5k«V­Š™I(øöÛo™2e »wëNËAˆÞÞà)pwŠvÈð˜‘ñG8'€¢é¶ò€IȲ±[8N.\È#ƒ(477óñdzyófvîÜéÃ!1qßᬶõç#k¸­~ÞЦ ÒË›0#JÌÜjÜqòv‘ªÞѽ{w À 7Ü@ïÞ½éÚµ+)î ª®®æÈ‘#ìß¿ŸŠŠ öîÝëg¥R9Vm,žÁ•½Ý¯4~îÆDô·y€;$J " NàŽ™«ì“ß l ¸2V«•Î;Ó±cGl66›ŒŒ œN'uuuœ?žºº:Ž;f Å{ƒ‰“7ï6}£gÔ_ˆ4¾bñó7îk ÐF”@=ÔS"p{Æ(’ÀÜŒØÒ?ÞC@ôî’åt:©¬¬Ô9a†Šl``Küû¸¡zlH¯*DÄ ï‰6JÐ’@Ù“„;†¾*e@KªEdÞ‹WÜù{þ‘ìØØò7ظ2ÓÉD¿#n?´Æ‡6Mp“ iü”–ÏUÈl¡ w¯ÏFì·#ÓÈ/‘0µ•È0r–ÀOåLCzv!Ð 9+'Ô§j·î,Dì s}ï˼¢´FewL2öÛqÇÎS‹ÿ4$â:êOîØqÇÝSÖ#2Zž»Y›0«îÉ-åg#â¾CËÿÊT/¼Hf—@~HÅ•,·—ìÜC‚" ¼õòDÛîéÊ"õU–»3B)>Å»GùNáá!hµç$¤We"¤8‹„¤½ˆ;’V,V•†Wüø³‰¢¬ìe`´Á3\Bw„Œ4ä«+=¬=2M¬Atƒz´Dˆ$”:):JBÊÜ Ÿ‰™½^KŒ ”锾·]†ÀŽ˜pWTK…paÑ%E/Q>·'ÒðžûúÍBä pÚ!Ì;žÇ(P†¥çÕ!CÂ9„ŠÂç@K„°¨þªS2n]DŠÚ«’²+IõLdyD?œOPz¡Zãnˆß -é|Ë_%äzBo„·¸VÛ Rp7|Òð¶–¤Ì"RTÏFþ`ÊKt0‚‘X¶áŽ±Û K šp“@!‚ºñ•Þ®4¼:)[¶“q“0º§‘&à…JÏU¶V+ ì@ÛûõÀ…–LJ9ɪ¤HýÐ}$àê†IB7ãñ_¯Xtÿ«ËŠ]ƒë‘ @Ph= gÚ€O`á A€K \â0 @tŽ:M pohr 0ýq­ ´¸³}—hr­Àí'ˆ ´(ïq0ã)yÍKh-.(pÁ~—s•Hñ›œ.˜êòl_N¡òþM M¦À?A‚6™‚kü ÚT ­ñ$h)¼ÆO ®“9Ÿ A\&s?A‚¸J¡7~ k›$ÊÂmv!®Õ3qÑÆ6`©>óbÑûÜŒ7X€WñdX"µÎtècØ’a A‚øHi|^t‚Dj%)h…ïÿŽ?Þó¡Ã‹IEND®B`‚PK”nYTÔgŽbæ ÷plt.iconset/icon_512x512@2x.pngUT X(bX(bux èèd½8\]×|fFKt‰FD`)Ñ%Z¤ˆ‘Fe$!j‚D¯ÑëD„½÷Þ{ù÷‘÷ý¾ÿûÿçºæ’g朽×^ë^÷º×Þgx£­©F}òÌI‚¨5ÔUt ˆ‚_dà‡/ZèøqÂ^ÝÀ BôÙÃ/Äç¾ó5àMVgջκO­]ï9ZA®®®"¶vœ,îÙ[‰Âsç¥ʈ <àcGŠˆ.‡¤„”…øn±“üj =N “”…j‘Ù¨:ÿs¼Ö­¯=þ&[±`OB1Ñ¥P”Ɉ`UXó·Äê*Õõg)è®UÂÎ…U›ûìåýËr‘Ev‰“ãX˜‘)jjç’°.Ï'CC³ÃÀpŸó*¡¡TÏYTD"ï;‡ÙXÔ[65}x8©ïôŸBd ®¬4B;}#Jب&-åê¿~Ò¢Åéú±‚xmbY†ªÿóÑY¨ëm„ßõ$Þw6g¤žK¶ÿ›KÇwLáà >¯Jòû &LÑ”§Ç>ûÏç\cô ŸêÀÇÙy¯Oç°*îéì_oýû<ºÕ…$Ç 8‰åBDÖŒ"´;fsŽÞ„x¬û‚îÌLPç€8C úÜš[ˆs~¬ñ¢ÀcSÚ/Ø¡‡#>Ñ£EUÿTœ×$[[ñSg8Ž$©d丅EJù`"RúÙ õÕÿ¬2‚W‰QÒkmÁ'¤BhÂfŸS~Š·Ñ¾âž#‹ÔóC)u{³îœh;U1Ô*¶³¯¥ÿÅ'‹´Cäz*þ–¯ÀÎä>TBiÂ/>¬£z0~\Ðèù§¶v +é<#D(-ÎÑÙFõ“Õý'Ø Ï‹QS¿Ÿ±ˆPÄ“$ådáhyÖè oþó!¯ ;äØë7GÔlçÖÑ4,À½9õúe¹¤Œñ1[À…å*þS+ææöRGûèG‚*áš1T½Ïü¤Eè+Q+öcBíôx ã§HÜï$^A‹åï¸~´/Œtêæ¿ ¡H³@š†áË„åßœz'#hýu•“ÎäÎ(¯VnæÛéßçm™>òÇ>èýaÂ5?ÒXO­æhç.•£3;xtiÒ/žA£1û \<½ ±C¹¶7ýüýÐIÊŽÛRcžJ¶ÎÉTQLhn8ÕœH~‘Ó@lÅŒ VÄò«þSvœc¦Ÿ|À%söc¿ÿ vQ —éí$¾& , Ò|—”ÜÁé,QÇc,1$ÈqoC´øJ<½gØPZ›VÅÖʵq~ ü”ßJÏ•Á)ès–°í<´WãÛ$óQñ#Êe6F¡Ñ\`ˆƒ1Š0Uèž™¸¯ ¬°ÿdàŸ¬Ø`¹Più¥ähydB8 <áÆþ€x>úEõ:À«2;"?¹ÍŒìDéG.X¼ºŽ{ž•¤üî¶MH¥Î‘=ɯÀ+P _Œß­ïè÷¹Âk˜¶³X鈩f˜®®Ê -/¦T .ià°Þð©xâ³vîFòA„šªHdj@…&Üð%R„’¹°¡B~÷Ùj'{ÿõÆR mÕ;ÉÁ¼JÑŒ9 ':¼¼³zàú–æV•-yìéc‡LR„Ýyu2¦ˆ¥| œ"l9ô#þhàa6& lõÔQ„æ:Î*+ÑE2«þç¤øv+ àÏÀçºçP„y‚l;}é`àÔ-_€½TºØç´àu ;¨G\a4"!!¿LN§–ƒôÖ¾€Ñ݈‚ÃQGÏ%¼î EAÆL`þ“cˆOZ M›eÆ®ÿ‹¸˜ ¬Eh'0‚ AòT4·¸I¿ªýó,Råw/Âü¼ç9€Ù›¬öÒb ௖ÄÌgç(€#§¥Õpê»2;É’õQq–÷Å àóì¨)V8šYŽ$øpæY¶^´©Ìh| ÃØs7ç€w}œ}BX¸&íÌ\Q †”qƒ ]AÄWîv–Px…÷ìIRíJ@K¨!TW(°€ÞþRÃÍ^ÆMÔëã0¥‰É »¾x±@{;¢ÿ®@Û?v(°eÆsVËÁ«@±#®õTÿ˜âôøBy¡¨WóW)>%&xlÄ«ôŸD,Ý¡9Jù+¯îýx«¨(¸Àð.„`¡TÖ€¦1å¾m¦+_[x|¬ÃD†£!hùiÈÛcÄ"§ò|u8dXpƒ±Tݨà,Àñugõr¦°#ß¾wìç@0_gŸ°õy?’a±OfÏ;T/x»]FŒ qÔý¾G?]—]‰ã ­]údê '·0ކžn¢ÿ„í.r žžëÅÉá:æèÒž¡OnþKÏ{N$©éÔÐM'ꘊÄìEáÊ“î­JÈ<†Uý'ÁŽ Ðh&[¢ºéA$˜‹ À¼^P_2 ¨ F xc!#ßHÔú¢Â´øX`ŒB›Õ–jÄ•ûå¹êÕˆü œN°!àxŠìGæKÐ;„"´E¹’úRŠj4|÷ÿ?œ’…Þ!]‘ûäõ:4óÇþ<ƒêT`èi<’E>Öè‚´‘CH¯Ks³9Ïí0´çУy¾ÔSyA¯3tjéÍxÈp÷Ç¬Í ­&ªƒH-$\xœçIØÃ‚ÉúMo®»àR§Ê ^ñ©”3 j@Õ_}Þ™&Þ®ßïHú¢ÊØ¡@\†ŸƒËŽÓ]O¼ë‘¹«º@ƒ ß±?Âx ¯¡(”WoÕÇ7×[|{çè[ ÃãLÑ`s$¹«oB 1‡U¨ü ø@ÐÂ-K? ‚¡ ,yÌK0t‡š ³½ß[u•£‘¡aò“7tZ4I°ÿÌ6I*B7H¾ö¬·ÞzQÄSºTí rùÒ4¡àØg¶º†NÌ«‡O,}ÂX•Æì$Ç1x:¾žÞ¢Ð6B4_ 7·³I ‡€3¢÷aC›¼àþ/wÆA¢ˆCìÔÆ—×ûª©@òÐ#šgÚÿ騇³°+„¼¾’ãxq»…kÛY|VÂ'°JßÓÉãDJ¨ ÿtÖ,•“ä|êxµ° é ÙkàÍ]NóÕF^?ùˆ$5y‘9ŠZènÍùð*FþÎ8Ši¢€‡¹rG†Wé&¤ükæ¤ÏÀJŸÁ·–g`Þ×É»Š[ ö¡mèoÆîv¯*á/á¸ä^ ®éÆ 8Oœw‘z6Ð,*Îø†bõHŒ)ÙÙÐ<Œ!+µ×`¹6Ê«t›w í×·V{óxÆÇ^‚TYkârø gý‰]9¤žÔ7õÓ÷}Â¥»Û"$šÁ!a';/–TÂ:ÙbäÒ”»]}/â¡Jwކ߷D^½wÔÈ“›NKü-‡Qø.”WÉŠ ‡«÷›‘¢»­ÖBڢͽÇ˃åQ5„Rþáãý{3^¥l˜£n™/ž N·JAv&ñ꥚"ìBÔ?¾r v_Zþº É/`“ò.å­Â©A—vzAçYP;:Éôb²ÇˆL<`A]€ŽáÜ}_ZެD{å¹4N\f-ß&õŸË–B¡6 )’b{=tÞÊ2D©­÷) Š GÞ„¨‡K˜?<Öz·û9¥ ^€ºëq|·¥ýHõ–^뻇Z’´ÍÒ? €ùŸþGL›˜¿‡Ú~ºÔí(„ÿ *Ó`ü™ý©ª}AD(‡<|˜YÞã¶Á…‰µ‚Á|ìuN”¤ˆð «ÕkG¶q ÕyS5‚Å£p—áµðkdZ¤Œ¡Y¡Þ÷*VZîÒ¨šZò™ìh0&þâ»,zóe¨ÄítŸTî<jñVœûT2¢X+2È,蟱Br¼„ÄÏ'-Kõé%U€y4ÃÛ~̉ÀM4Ã0yˇ½}èõY>W¨³EÂA"¨ªÑ€:ö:\èžÀã±Ö${“üêó|ZV±ÓÚfʵxo¬a.à,gè˜zãÕ·; ¯Só/aº[ø¨â(…cø¯êÑâ«´AZZB};â¹.€×½[´*jÉM¥nú¡`Šuu¬ŽŠ DhA@t%G;]Ì•(@ð_ý7€€7¯R#9]”À{w&³ß ¼‰‘q^x%Ù)¨d7hNݱ•*Îr™G³º/œ]ë×2Ùz@*Òù-MøÃÑæ¶Î*0²œ—áj+÷|þz á8f òÉ®‚Ô˜8ªeöG)/}Ç œÅAr* ®,Þ7w#¼ƒ‡y€A™ ¼8•OF4> FðGÈ+#B>kõÈž~í= -R„jû,QôÇTÚýµL‘EŒ¥ôcè©ßyîªüïò‚œ™@; «½I:LÀÉÇã{ðlWëÄõåç5sCgXâüséîw„ÒµN¨õ*ˆÃãƒ8˜<Ò>FÂ_‚äPi\" þ·®üVpeL=.ŽØ®’Áqâ¼{B霹ÉSzFéAü˜ŠuŠd!uÛMy{-pûŸü¯á1»ÇÀäݧǾÍœ¶¥ô’;ÎÏFrH ëy>¤¤ßÌ¿Û/·_¤Þ9B†{>¼`3˜üêiÐTì÷O0èlÉ€+]k—áA-!ÿ쬗–óÁ¼!àt>×ûŸÂÀN&/r7I0èbößâû' .«ïæÏ€¡ìÿQøü¥ÆÀG~ªà~’Ø•ÔÊ…{Ç(„ûÞüÆùÐHÌ¿nGzGï›F6|{˜éC&ÉWàМ@ŽOïÞìB8[Y#øþ™_jpAËeõŒä?e~XÔ®KHóH¢RÿMþ%L~Û™ ž|JLäxòk¢`ò Ú!4˜\ׯîßXxÈg4k0d H4߯¨£¬(¿! ;U)ã˜j¼Ù¡äÌ/o5®Bà=E(,Åe,Nëstÿ¦ÓÓŠŒ¼Œéàs¼"°"7f $ïH7ÿ±cì;æH¾”a¬âßL—ÀL^yìQŒÀRrDù?Ï@LG”áEQDý“ _^€©´øÜÏR(¦Íu=žê4^£t1ª: „ò?n>®|zgœwíâ&ãáßDÀ{¡`` fèᅵ†Vaù—ËPþÿæv€ úKµ¦ lo"9óÏõâð›ßLÝ€øŠšÿÖslw)”€†ÃAú€á_^žCe‚ÊÎD°ýçùáF+‘ç¡:5ÿä_*cرæ9:ü4ÁsÑË«`&4yÝ/´×Ë®?ºµ’>Q`´Q¿uCÂéÑ@Ù$ga‹q8Õvnüzý Aѯ盵;ùˆA¨öëõkMœxØ>Ç£Ÿ…Ûz¤€ÍÚ˜ y¤00i’Ž×“~ºâ@o/ß&Åð5âÒ·À ùÓ&øiû¡Šá™Yù…úr¹oÍ®J %ümèjï÷Éé®ÚiÚäÆTÆ,hÆÙ^Í¡ÖQ0òlËztädcÎÕÀ"Æò€5‚O£ Æt?~ª„[^cþnQïΩ‹4»³»‘Ü=“„ÜÒû*ÅfÌ-ÆÒ—`yzþ%>ÿ³ VIç“Fu.m¯:Ì_#ü¥T³xÏÜjvÚ¡W¢GïE‚pîŠO²kRcR ‘É›ŽPØÉ~' Î04í‹ ]Ì:?üî>c"MªYYùnרaR~Åß0ô¶måä—5S:æAg›É'‹ÉcY@·üí6f{=æqëìêºb@蜮Ï] > ýü`îÒ|+Ëw „7­UCÚ=h;½ÒÈ/¤¡¹¨È:§ä˜¿çŠ«V¹ªá2†Æ‹æûãÙÙeb§#‹y’0Œbä†uB|a¶5œë:=Y\î]¿ò0«Ï·øÝõ7ÿþ:'ÐVÑ/c§- ßBÙAÀ8‚b`*ü·³ª€qÓ09˜Û5‚ ¾)՗ĨîâDí“©Á ù?0f÷½¸¸$®é ì¡°wQoüçdp7ìRà×øñ§.Oo¸îUÖ46_Ã;‰‡F µgŽÃvpÓ5 >èañ«uÖ–×”´…Ü)‡œEä¼dÒè/޺觌+˜øp›NúÞ*a”`Ò–·!aS§ð®gý#2-tý"¯%ü¥ix‚8Ä­`ôû„$Ôu8€M›¥_?áèõñ¸Å¦PC¤Ã»žS¤ÆŸüm¦‘?mÝíû+‚ÚgU|>¨5{ÙdG ,ñü$Sã B³J±T4SÏ1ÃÿÓTž&˜Ï=yÆvGæ¦ÆûqˆËÖ›s’r„šš| (…Ƨ;âVüìküÞ#d"¨"~Öy&dÂk&kŠ fΧFzÊ?o$¡’ ¶F޼ÕMÕ›Pü™4ÒƒGÃŒÛè£TÖ½Ì4öxà‹ h«µÍ8v‘Æj8ìpc"™®7f‘Nê ² ;¶Þ&o‚ÊWààŠú2ÑuŸ&ÐcDDÈFÞ6‡ëý¸ƒÜ†Pšùqþþd×Õïßdhį}i]&a?ƒæ¾Ý}ÿû`SÚD¼#ß`&HRÍ/Û›$Ù°ŒÈyÕ£8 VÙÉòa€•.Ž"Mä†×É«£jª¬ðÓVâàR3dHÍŸä¶g#Œ©?©0E2ùÍcˆšd#Yáp1~hu§ ¶3.¿Çg£§.^ñ¶lÒdà*&tu‘*Ö{ûú@I7á`†Xç}HäHçÈ ¬ÓJwíθK!éYPùØöÐöb¹h{>Ž>WEò«P94J~ççŒzºÔßDÆŠ`¦ÞB)'ˆÅ¨¶ðÈêíÆÍÑͨƼ¶Eoëéµ¥Þâ=#õPe²î­íP‰øôôô…m¸ŽøM oÏH%¼[__ÿ{´ÿåËð©ye«÷Þ|Š×fûo»M‚w§w-‚W üZŸþmPêÈw=Rdú[«‚E¾Õy“²w_®Gæ?î—PØ{aHÍ.Ûò4?ݰ*0뵸ÿJGDï]LfôÔ…¾³»\ÑH›°!CáW;Ô Òó¦E1R`â‚ÇýøÂFîN†E5:¿Þ´©6,øä¾1sáÉÀ»³7£ÛJ,®]»–!m»Ìµv´¿ºÑ"·z°:¹\<:3ì:: ~Z7àù*vgbΛUÉcõe÷%íYhI¸Í#Ïs® í78Ç<ƺæÂN˲–%¤&c·ä*k˜æ»>]Faç”ö·–m;¿R?,úâ²ØSð°;ðâ“Ü¿=Fºzz§ã x{LÃÛ²MÊ… ¶ø3ñ³âOÛñ¬¦Q½f¾q½¦žoá—ëÈ|ú¦;ëÎY±S21–§í)Âò›J:+"\²ˆj gõk¸v}x9œü‘ 1ò¦œÙl§>C?‡-÷,øØy¡ëÍÖò`çgerØ® &áÄ Ûå'T&åφç̪¼ds*·Î¶«‰ÛyÚyLݧs8(¶™Ç(Æ®àÅÍ1aœ¼ô°C˜i»ö¬öv Ú°Sk®W†ë i¬ËT¯"…”¯Ÿ¼åà ‡u¹?ø¤ø <ïòÀ{°ÀŽ< µ…îÁÔè®Ü{Êe®«šÛ+ÃÕk³#^7ᙘ„ kUƒvê¾#Dc-> l1ØÓ­1š3åj=I¾¶!™ÜXJ"ƒxª$Ã_u²ð‰Êï|?„2;ê±(lê1Ïgê³kÿ<ÚLQtº·#•+ÚÀK"J²W?£ÞzuГ5-ePzs “Ói@sËç.™±ÊzÐcûëG‚‚‚‰º)šK%“!Äý¾gƒO¼õ-z8¾Ê˜pDï•·Ò#c¡¾¼¢U;<ǯê ¡;™™M6Šä[È*ÍõæïÌ9#aïD|ÞGè¹÷"GÉÊT€ä£·W»€Ué/b(¡";.á#êÔËЭ:˜%®’ú‚ôKú¦G9Pôäú`Ñ“~×Qo¿©?¯}ÍÜÿüdÞýÁyD ­ Lü z!´ÑðÿMÇ„]ËÑ vÖÈEˆ+mýNX,ÂÙ„o‰œŠ$>˜æÖÅK4±šëTvÝ/O>rP{6ânsüê·b¾výzÒ·ÓŸL+=6—ú#â/y:þâö‡²PÕÄÃU÷•ÒÙáUŸz»çBßSÝ„f‚Š9ƒ6+Æ–€åvó|Î*h“=þ$ÊÑ–}Í-|ê14IY"Ççpose8ä[œ‚÷^îrÑ Ž±1{Ü—wûóù^ÓZ¯}‡àD˜Mðôñ~ñ]ÿ@ÂlÝ/W{/Zõ1:¯û¸w Ó­ùÄwîum"^£¶ÕüÏŽœuOõ’ï¯~4ß“ÅV¾Z%¿äV+$­¬¬Ú SïdŠ;Ïi¿¦¹¹2½·°W->öŠÙtl2ôRÀ·uSnYÌl£gyÝŒ:^Ný%‚¨ß¥D ò˜Ö¸r±*óø)U¢,†'˜tïÇ를zŽÍÕÑ„KÛCÖÍѪüZOÊ—‹ƒW0«äkF¡;k5”¢k]º 5cÿ}@ëO“dëÚÞbŽÚ¬U“¨:Óº…F•º‡î4¨±:o á>‡Gi3JR~§PMvtñþ–×ÊŸ-Ï ‹îýMz:ZUõ;«çÎÕÑ*ïyð®M¼ûYân«¯ÛBZŠ a÷ñWÌ;KßZOIš3ŠÑ–M…"pø6ž4m  ÓãSpj䙵Tcšcst_~° ®pC΋=o+·GbüPä…zçØm/ >þF¤j Ò¬‚x´°d£8ù†?~¬t6~Ãá…ѦˆýɆË~úˆÃ+’¯€"—¶÷ÚcU|äBVîõ4 Y„Ÿúøqâ$)N6ºu‹^n)õ‚Œú~Û§ËOG° wŒžü  çe¿O¨qr>%až¹z‡4Ákâd…m5Š Rƒ"Çž t†AUÐó®F¬Ñ„Ðh„§ažÚŸ§^ÑÅËÓî÷¶s§õ$©Ñ¾¦b­ûþÂv¸ÌÅ9DO”«ûÕ‡[à5™ª0OØG¼äY¥„yÒT1¤ˆ!«›;¡³ Š©žd ‚¦vôvÏñT±œèIJ¿ÜöôöˆɼÂÏEOóW«ö%¼vì±®+ìq¼ÝdÔgrÁ[ðÛùÎó:ñ ¾>‚Ìr¿hÝe;7vuÌã“Íãw³wLtšw„ìOÙÇÒûûW2“«ÓyHa1.ÑR긕Y$,)€³”Á RÎHÛ5åÞûÁrñ1K³è ÞäwrΩ§¾ûFΆòÔ›geMÜ$´/ª5ê‚üxØâŒ?µ&ô\®ã¾~Õ¢Ú²!h«ˆÙsaz÷Z/m[î¬Ãèíèè˜ÃgÜÉb‘´¦²¨ ÿi:áGÎ1®Æ1þ‚Vžóç„=Çš·9"¶Þ¤Fwl¯F‹¼Ü% 4‘ÙÁ!ÚË¥”2ônBXŒÖe¡¶·jKêj0Ë嘋O’»Ú“È/yl޽ÓÕׯÞc¤½´I§¥°›\L­I4œB† ªP›Ã×G» ì©€’]¨ ÉÁ#瀇=¾¦;D1,†Tÿ£œJYGŒÙn£þ9Áu.Q}ÝT,b8Š,ײÁg3‰Ó¡×ÄõÈoi¬pßCsŽ51Î>9à›S°ozÊ _Mp)žúd1ý¦÷Ç­DÙQvAÎN^½ñÍ:ÛGÇ¥ðAûó<‹zÇqÿƒÖÊUïPh¯»3ôÕRH=^Mü¨——Èu>q€Ç™ÆDVíë娜°ws~™¾J=vwìó\˜öÏŸ?7{C_Ð`ª¼÷i371qos^9AÁÛío·~éþJy)È.ƒ¢ÇΆa…ú¨ƒ¨)[Ä‹ûNÉT07>„Ë­¤£ÿ| ÞGØ#&ÓOꪪ’*¿¦ºRÓy¾ƒ«&È$ÀTA§æäËSšÇñ ‘[1oOTm7¸|DJu¶ô̘„¼ËÝty ¢ -@æ®}™£KÃ*p¹ÿ¨˜ ƒsW-dŠ€¢MÖˆ8Û.«ó==5Õ|êW8»=AêãIÈ@Ä#˜0G²N‚dæum“ðª[çö%;iÅ4C¢~Ž)»C-=ˆ á÷Á—ÓÛ[8߃IN¯íòÑiئN-Å·š¾gÝoŒ• 0Ûƒ Õ‰×Ó/#ªƒBÂOéáß \üé pžÅÑÁîÛä[¯¿fV¿»o¶×)³=äTº=â)»”û#5õ\Áõ }È…Â]©¾’Î^ÆËÀÁÍÕiß‹)ÌïšÒÌ¢’’¨£Ã}§ßÂÅö»Ó‘ß~‹”«ðk¤¿²ÁiÀ6åÏÚZI‡ Âôqzõ>ˆ¥ë-/’›ÿ0-"Æf DUu#ÇSbˆ»h€GV@Zõ!_€¶j—ŧ§ºÌq)E+æ¹RêÿŠ’y½Ç詪Mwø‚´†ÝhÖÞ/ïô{G$¢’› öoN¶Ÿn "}ýšÝhâ:üsª!ÂûèôÇõuÇ«¡͇ۣ­ïtt§ßvÖA—…O™F¯ú«§M1ÜJbB59Ï yžÌ¹›_XÛž ÃÞ24l\ÿ!»ÕgA¹Dê§ ’æ‡?í,œÙ¯ÙìÌm7p1_^6vÂ=E©æÉ꺑â’ËÄáÝ2Æ;C³Õü¯Ö&ªÐA«šR¿+xFQ{}1óÛÉ©`œ–z¼ÚõØá¼%ˆé~«ˆ ã*ò=Ý AÜ=ìËP'£åhŠsi0°‰›¦ôM#¼ÿÞaí;¹Ójå¶Ä½’è ¶ qzä+ˆ*ª,Vå)À§Ëìc<ÿ–ú=SäÒõªWÐ ö‹YÅž[¬¥‹ãPmüý›UîÙyZ…®SgoœÃÕ“MÝòÓWñW‡‰ÓÇ‘¶Ó K‡³Sý 3,·Ÿ|+í¸\ØÛQé¹=Ç®!pçÖ­ï}y žyÊ€VÐãÍtUΈ!ûÓk÷ìƒN׃Ê<ýÆÌõv½Y·ì41iìÃ@'¹"es<3­ Z9¦•‰N«_ ÒÍ`‰?°ö&£b¡‹ÓýmwV–kíéw´¼¦Ej|ýÆ5— E‚)&ôU£ÖÍè ÷j^žr¨GS¹p«¦óÚeeèãuÑÊw‹9Õñ 5QÀ¦0úMæî'*'cgAÊ­4#FÞ„hy¾žb«˜MT~¨jk+0z0# 'ìXíhà×kíÊ—ëj^Q~Tðöààä(;Ír¢é¬»D° ìšÊm\Pï»Ñ„'ê)po ì^ äRNÿÁ/u¿¿Z­¨x0NË*mgœk |&¬1¥ÙÉ@ê¤k†Î/×[m „?S“¼üÅO[—ú¿•n <š(|ä’ŒÔ65m)q˜,M×ühµ¯³¦p)eß©»§Ñ<ÝXàq¤H@ˆ¶•×{/yËÄŠŠØ?“õN³q®nkc <¤©Þû[Æ@Â/÷½íŠ7Ž?I9Ù\jÂ(X§)É3r‘“d4ì¿€Èl¯gH‰»Öˆé¾q¸ê›†Õ­ö9œ‹=³uqM ÿT;ù` !>жMRRKøŽ–ʰúý¡é£¤hUèßTfÕ;ˆïZ›ÄëíUùõž*³]¹Z~“êvüFŒC<Ý0™æ­@>lèÏKÑäT¨‘Pš4q>>¾à3RœcäK@Pj(ЀÙUßÄ…ñ›MëWО¶ËJ-]3÷{(ø*Ðe…gdø±Wú¿1ì\l¸ç›@ZÜ ú§Î›Ò@Ôé*ŒãÕe•wSÜùNË"õðôÏŸ»›ë÷>)®=tгXŸ×OMÎô hºÅçQ‘fKþ.öÎvéjMl~±i–èÙ¾e“žÙìÔš2´õ›2’-ùE šÁ›Oþð^ŸzÌ_3s®oâîg@æC>ûË@Оm‘Ð ðØ^iF»Á)³1·]Ðë‡À蓨÷­ä³v"¼h§¿V\a¸{ÅYýmªYµHM˜q> žÝ¢çè¨Èü;²Ìyž!NWù‚· êG!<{¨€ÛXöÅ•æ„ùQÅx¶ÒA»ràö™~9K|AUܳ7à·¼¡òxðˆåkC¿ä7‚å4óxìœ_êÌŽxŽ{ã\AMÉÊÌ >qê¬=Høü拃 ž:YBBB“Éš÷¿?'u^êǦe^ªÜaYŸ§3d¤Ñœ— ÞÁ`¯¤9 »Ø·]^ëWkçë†e%H¨‹£#õÂàÆ þŸ«!ì·nÝrÖ¤.¡—¡Ø‘Áª¤Ÿ®F…¿!Ö.¾‹’$¯ú+|·T¢,ÙðÚµk, 5¥GÜ,8†)…4Þ÷~ºŒúzãcÍm}U ½¼ tø”Nõþ1Kokèzïië¿£dèÏÞ I+ AËå·½¥dkkë‚ùrèÿÒíAÖ ´¯Qï°æJçb°*o€ŽÚt§,áÁ^ᾓýÒar¬ãzÒõô'smŸá"lUv Ö Oî²(`6q¦æ >s! %íë¬F¼ÎÆêm ‰/|„Ávút]¡;„¹vûÔÀ:€-¢Ä-ÈA<ß=üñšzF—Q±]»@÷¦DÅZ/áÛñû„¥9ŠîÓ¿ïdzËAD`.š ½€UÅK$9Ͷ 9wÞdwn» ß/j­ùÃbÂ÷÷v»I™pß-¢zMóªž#H$-?1‘§.˜õÇsRJ° Ž1Vš@!|„ÙÌKê›–´×Ò~— ”íÜp^]Ë õûVqû÷‡ïkã kç»Ý“{OÙº5¾9-%~á²/^ï&ŠœfjkðiëήÀÓˆ`¨:&¼Šx¿l˜¢â4ú³áŸ£ýÜV…µÎ„«‘zÅvÃ% ƒíó\­LÒÅ<-°í| ZüaWêÜ»‡nœ}ä;¶öþ 0”Šà·¤V*·ÍG½Çõû½]-ݰ˜9î~Tñ뚬) >XI›–¦5]äÄ>J 0"W‡+dñoC´ßä“ѼœÀMÐ"·*oÝuÙÝÝ8`º` ÔÈ®ôUKœœZŠ^»£¹ÌèëNÀ›Ï¤~@¥Ó¯V’+¿&¬ú0›èðeÞ©p§b»xpòjo¶‰A‰=7èÊ5Ói5®B9$Ú0­õ¯ ™5Ø>Úo°"VïÞtÖx¿”ÿ[ÆÐ1•àõì£$mh@Ž*‘ ½§ÀÊð93ôùJäO³Kø“Ý–ø Ä»Kœ^a;Ä¿9…–@M»»\x:"ÏÊ/=PÓ×E¿ÜJºÚ.{{»á#¤¥æŸŠÑk 1Cm_UKíø ªÅñ7ò»çÑïÆFÀÌgt¿ÞølZéˆùdVísÞ¸$LĤL%Eïû€$"[ê| ®StƒL!(D»åƒ¨ÿáÖ‹”xHYÅ#Ñp¸î×ÌÖè Ã>[úé3EËùc-py"®FGÈ¡3èϱ^âÁ,-›UzøØ×€Åý'䯅ràuµ Ü^É]K™£cdý'‰†‰$¦Ð‘ÝGF>¼òTèvŸ-,àÞH£a¤cz æÚ7§$ÝdÆðôcïÁÝa™‡‚á7Æp{‡»¯ü·«³Æ—·ì²øß¢ÕòIþ×5tÆÏ\ò¸iæ#KÍv1X3-¹×Ï'¨¬ÇRǪó<(-OºÒRjž“¶3¾×ÑÑ©ºò£„ÕIP€ß’ûœZ/}TôU€‘Oö ‹=±fçpä±!Ò˜ ýY4J]ÂS–¨ÄVéþúNt}FúW»á2 ¤Û²ŒŠçÞ]ÛCåræžÇª¸··?3Až i#»0ƺš:«~¹ð¨'¸Ôi¶£Ú—|®CmÛŸÏòÞ 4joÁÌ6~O!¡Dåwõ°á½ðáýK¨dCSfúÝ\à5ÛÞl4%Óysô³ÍpLwnÝ[6'Ð4IZþ {œf¡Ì ¤¹ïàþ¤wl¼´=Þãdˆ òŽÕlÌ{xk£Y¨µzxbaaa«™¦ÁlÒ"Ø/ø謚Ú9-gEŒ ) @nM­ýÍùÁßï.2¹R¾Ú2Têd rÅ9“öž¸ÝŒ¦Â®e```¢“à8ÏØÂÅ47êbº'g„Ç¡ ËEªOÑ2Œçr!s¤É3V˜[aÃ?ÿ UŒïL±YÒåG)Ýïq{ ù¥µÓ“μ 5ŸÓÝà>–}$RŸŸ[]…ÕÒ"Ap,† ÙÎÝÈ úÍõ´~fWÕN0 áPcÛÕ¡" ýãþœ-î³q‘y®>ðc/žúϽ©¼Ðn² ,5 ,GQ§ÑÚ\u¡þü ÁÙ¿ú‹«þfQì h¤ Ã;e½¦žÂ0j6´ËìÍ5œÖa ü9½v×Y%>F’Ü®B¼Œ‡_UU5öÙ€-»÷f; €äwý¶)q%G{‹ œØ:_ 9¢ Æ”ò(¥Ãòn×J"‹åÑ:œS³ßêog”¼?Qû†ýYß½ã{z²Ø6f[STƒ˜Úd=ÎÈøM±¡«ûou5Ð(ZX ù¥\}(Ìîq.Ó˜Õ$_žÜ¡Žˆ+A}ïMÊœï­ •<î—Àò©Cßzúè•Þ¡,@ŒEy1¡ÃÕFÜPUG.w«äË,ƒ@Üd@ç"3¦ §k{š.ÿLKÜu¸ë::_´¯æ”C¦:Â{ß ÕHi5µ©7¡ ÏéyÇF‰!"ý‰ —ùª•Ðr™}ä@c(Ê€È ‹íÐqøÝ„<ÂÓÞÝVDã[ØsÎ"k÷œU8dþ¨¸íÎ ²¼ß‘¬ñâ}wky°øXƒýZ†8‘äÈ ÞÝX^\¼×ïã.¹ˆå™)%±+(»Ôcº¥è8õ FCË\›H&kÐêû½À1.zµÐ+ÅÀKö5*ØÐá·Bi"øÕô· ˆKfx=]˜äþöšimÌ4'é:®QÙï‘%8‘´}…¡o¶ŠŒ¼ªfÙ¦H<‘¤öÃf^QÃ4%; 3vˆ“s‰~”}/#«(P³á{7:“X3J¯ÄOWmBv åQþ |æÐ( ä ^>Ž[£QôhXñÓSÃw’1ƒ*¤ Éo¿ƒŽx#Ä»‹?Å#q°Âºôo *“$1îÙ ¼À‚¿+ÇLkE©€ 9+{Úþóa´ {ÖõÒZè\UÉÄIÐYÏžQð’ásÖq~IS‚wšû¿Ùè‚¶lîð­Ø™»oxq°~œn:Þ“¦E^Ì 7 ]iº— EÃ@» é½çÔy´>ŸB–R|FÒÆüåpÔ\#µQ¢žæ:â§LûŠQ¨è —l¡3…ö›us#AÚ ŸìuÁò]‹Ìdð\0{rÅhc’ºaOrÎÙ‡™/M,ùUU-¹-ý¶˜õ ÇußÀ¿ ÝAp§÷Ÿ$GÈîn´œë˜2ÉBPG…ßg/nY0žyôjÒgl~öéhwío;cL÷ger‘Ò)@Ê@‚hÜ*q`u#YíY=€?É/°ØÏO£Ãx´NHZ?ÞÍ¡,øÛcäÔ,ÕÛVá¾&ÄÙ€LÜ\ìÅZPúÜ\Û:3rèJrîÎÉß’„`¾\Ë^1¹ŽVÎ goëéÙÿdԇϰà»{tA=‰•ušëÎÐwnd2¾éÈãÅ1À7·bð’ˆ“Ý ÝöMâk{‹í|1z ÊÖý$'È›Ž«Ý9f ðÚAþ\My\÷pì.~bGÀûÇt‡ˆg•OBÙ¸ýÕÐì¾Ìo­ 1—¶úx±Êøäæ‡@³ê;ÞŒ¹øV³?ØÕ/ɯõ.qÄW w¼ù,G¼ŸæZ8êû²!"Ièââ\R¨õÎÚx;+3m¹|¯pÞG§¹×ïõçg5¯Ògx79Êa’jñ;ò·?¡žóénµÄƒ6.M™ñ—sTxA+¸YúÖÒÒ÷|CƒÃ¿ žPOÂtÌ#28ÅÑØyŒÛîô\àMx³SÒºéSIŸèM|òëÅÇ,jœÞÎÎuÖ^dìšŽ× uÙ@‰O$_š}%˜}Km¥œÖ®J¶ì~„aÑãת ô¢šžšÖÂoa¬…äulÍìêÞÓ•a°V/x­¹Ç©VO«NÔ£™Mò4@[ÿ-šr;ã WÌíë@Z¦ëŸV‹q[C9–“è¹F¹ >^EDª¨uå[„¾* ÌîK-=ç²:r Sò™[ kÿizí÷á$Ý‹“F„G2ÈÓ`½e±SÌ¢99¼Ä€Á!òëê[ ß†ÝôP/ˆIhAÍÀª5{öÜ“j¸š ˆKƒÁ &z®oê;êbÚÓѪ`NE8œ†íú¢gSöÚË3yG”ðÒ±h@ÒohHêåŒ;ßÇýt|içcë†÷[*Ö®hDÅ;þÃ_¦Ãàæ(ªj0Ѹ«)ždMÀÞÎY…ºìÀqg·L•ž˜øüºHéK ÔRÔñz‹-ò7@‹ŽË;ñÛÏ÷¬Š ¬ÊpÑ“ð4‰÷!A(‡P`ÛÎȰ^»9ßy¼‰ˆÑpIJ³)þ’ÜO¤¥q+3'åEX((¶YÝðwmº 2²»œ>oÆa’Ë¢.ø^Û§Ë0âºÓfšc$õœ‡ u/޳ã=¹Ñˆõ8“µÈ=–îéÚ·UýÇ]šr˵oøãYuêŒTz:ÕœàW±y\ã %3Þ¾ý »[´ÊÅêøÃE31«kÎ?¯J=Y8£mhxd–NÜû¡È¯‚u o½Ž(ý÷>&71l"þNÎk‡I÷_q©ÿAË+¸8 þø[óE€1R7F5ÜÁ4|£ä«©Gfw†¼$å÷€ÑžKy›ËƒÒpõ •ˆ3›ºÝ»–ht2öêúÍ0^% Ä’ߺӗ\Âò¨=­¦¶‰c4É»U¾”OYÏáùP´FZÇ7-Mì|ò\ðM7ŠN0lbŒ#ÐË<ä§økŒžªê{]Ž8{3JÖéìÏŸ>iá[e YPdT-}/;qÛ$¿}ôÏjĬk™û8×2,ÙäÚßÂÜïÝØ¨ãß]‚áFö=“°¡JÊãZ_¿ÝƒWU¼JU 9JnþxÙQÎøŒ÷ú‰`Îv(JŸݑÂìpA.B× ­›£Åõd¾3–Žœ²œ*=rbEô¼¯ZÕ:6v›ÉÞʹö¬±wŦŽóOføðLWS–öË>—^Ù‰ÞDÉ‹÷Åèï^^áʼnîuqŒ/šº?¶<@}ð7GÌó¸Þ_:ÚÕ½s‡ ¡u¬}͉͹v^¬¯–#¡Ì¡gMbO§Î°:€ßöˆc“ùÛ5Å„{';Ÿ1Ãxõ£ Yë–X ø˜P÷âÄ•1ê"y$ŽWiTy‘läWç½ý]™8÷»HùRMê­¤D°ÖÆdÐ:¦l¶ã®ûmìxA}]¹ãA /À‘4ö¢j árï%K& U}]ZS”8ï ü;꤫oï·^Úné »KT"4{gþ¦çz² J~î‹ “ªšeŸ\;"Q¡-#Ù²«(޶Р¸·r“Á’‹ž~ä›ìlì`(‚´‰N=ygdN¹±Ÿ3Ü(½¿l®;I¨¶û{Ö'“‚(áljªª© l°¶)JŒÝæò&'R³Ë„‘¬ ‡œÙ°ðáÏù”„Зƒ¤[#»3öËEA¿iou‰ùÉ”â ^%·¬¯«:üo§ mî¯O5Wˆ÷Ÿ•ý%ìÇsÁo£Nœ¿w¸õT ›wGWÛ9‘“ØíXtó‘ãˆ6«#“I™­ÄjkGŒãYöéó<<\aæ&FF…Ý/zzÊz” ³ž•<éÍ|J»?ÈøS·|Z?ë¶æµ/}?Q†"€1 p‰‰ì¼)/1î»Gâ$5bþžø¥+Ý9C$0¥£å‚’ ‹U ½j*¾ÚÜ!l­ƒ]ÙüYP!²,’ã|w#}?''×b¯†ä?ÅÌ©BÚôo=ˆŽÞá§}„KÀdWoïÆÇV¯:ìÕÆ‡Oš³„c_”èݾÍHÜÔ"Z¢y_’äØÍ gA\ d÷‰ XFY£'X@þ<<\M©çܘíÍórg|û¶´ÇAE¥ö•ÂvikéšN™ %;@ÚæÔ«øGé© qâáÉ~F·#½HW_ú§Ž--;»($¼#ÿÛá˜g¸ÂGA%³ñ߇\ÍÐlOõÎrÑÓÏO0²û\RÒ–¡H×ßç½ã[É|ðù$âÒÁe3¾þãåʸAt e•´^ëoõéÁ^5ŒR¨üxp@0m6Z¿[Qòº|•£&ZŠ›|¢‡‡A†qlpô¨È%˜î(Ž@¯nx¹H6w(µ“‡Ñiù„‹X¾ÏbfªRûþŒßuÍ"—ÚÔô´@s‰ý¹[[¶:ÛÃ~ÞU«êíùðSnõôZ£ÐÏ‚B«[&Þòf/õééÃ¥}Üà§Kž-X¡¿Dš€Ö©f\‘œ9ûwóÂþ8‡ ^™à‹™¾¶¯Ìªè¿Ïdq"š{¸C¦ßëKá¸Èb ZÓ³ŽŽ!ÕíÑ?º¿4ÅH¿œþÑWxÝ ©¢"ñ¾wqÚŒø×¬¡¥¥(„ÁRÄ70Ρ4õñ=”¾ ÁÅ3q-—!³umŸõ¤( Dsj•–úDÇ|ë/j=ô¡¢~½ã:ßãc%ÓøÐÆFe7‰¿gߨ¿NOMý”•õVzÄíöš(9ŽÇ|a\ÑóŠuÕÎ…ßÔ¿‰4}8•+¥Ÿ·ËÊØ·’Ý™˜†æn“9•ÔœÑЈ²ÆÂîçM ›‡]i­š£°r’Ë(|€ºu9h#XäÝr]‚¹ªI¶öî*¥ð£æZ|óS!`6ö)jè/S÷ŠÙôh'­Ñ¼O¨Ùû~jðb}Žâ/õg|*ýq·4ÿùŒuqáËÀuž©ÙÙœ™³c !ñt×é¡ §ÅJÁÇ9ñµ>SË®>ò®Íù|Ï·éÉáò²iO¦À½‘ nØH5ÎW#W¹xxæ-€:ué1è~ðš°vŸ³ž ùœù0ü$âÒDl¢ ñúØc“í­âê¬4¢†¶Ñ`C_ùþfùð0GOŽè”~uúdÕþÂÝê*ºχê~6ăVâ ŸMþ³7ÙÖœx\¡—†ΙçÛR| È0>ée‰žp˜¬sØh–žl¯-M>'¼'& ÷ö‹ÆÜÎh,]."Äâ¼÷/ðƒ»áJmì6þªGÜcéó3O yu‘„¢p®÷¾"=¼dñm¢¹L¬éœ²,,/ä0[·Üx̬ôæ@‘C:!/>å+x N4ñ\.<ÍÈhP?gEšKj3Õ öÊãT´J*µ]‚cª‹tj7beµ|Ö#zÄI¢°¡Ÿ?‡5*­[cqä©Ý± 7Oƒ¦$R}à¸ÈRéŒØvpfÃu~ÆE“‡=„¢ö>ºà,¼€'~L¶?o¥¤ÜÕþøÙa¼,¢xøâ»ÙNu£ P úáàÉ“,—`à°Á7;´¦›j \5×Vgxx¬ïL~-'ÚĹ0Eðk…pW‚nøT‰î:5Gð;ï™ì¾ñ:ï¾*§o¬E´šŠÊ•ß¿;õŸPðǑˡ¸††‰êüÈJòp†Ý·ÎvÁñV˜ŠŽîõgZ¨‡xqv~Eç† HfH*Ö¯‰oIªÀ'*ZÂMsáÂR½”´SâÚ>PTHŸãÅj€Rôµð5Û £Ñ=&Ó£žå¸Û/Í6ë%h¹Ü>çð(Zú‘©6k4~^¸j¯;ǰžÎŸŒzÁ²)êEøý" µµXˆyÕŠŽ^ƒ~ÚôÕEÀu:< $tOÚ9½xpLûÞ°QïpFTÐ8ÔêWïÝ>yò$ðÕÂâ¶‘ÚÜ·X• ª*Mʳxß$Wfd—5ªš@OQ9ôe”\ÆüJöBïâ_ç æf%Ó£d b­É™g¸P@AA»‘U–håû-å~ø»Þ­Ÿ‹LrB’9z»<îÓÆ™%t«¨0ÜŸúþ¯"xì ^=R[¤˜ Ã…-q‡b†cRóZ~d–«–×›—]$ƒù|¡Àû%û+Ü™ºWlRfHj¥z'EpŠ(Nú* :/%{~\ÄGˆáÑÑMà'_”i> B ´ëfGë‘Yêœo9G¯Òw .¨”ó/$%ýô\Æ÷C±OÐ*˜'Áì²xÉVùNlÝ=…±[<­Š#§ój¨tJ®3ÇæMÐÀæýÍ0ë&žžù£äíáüòÁ“æû€WJ,(ª‰Þ_Ž­k(ì5]ÖÕû1ÕÐ’[3/È‚š„‰L@^æ-“¤o¤¤,=æCuÅ8ÇkBVV&=â _3~ÿÈÈaâüx*×Ç›[Álsô}x|$ª¬üÂ%ø‡!.åDåöhC®]óÄÜÍŸ€´A^a† Ü‹tן ³®aâ…±¿{¥„.`>éÇ×w|éòÞÖ†¡;ï/”]Rƒ½"*DÒåyk4! qÙ{ 0!æs™y¦2“QN´µ\èBfzfT¯}É3ßh8§­HoÞ„sŠ!èÍ)~ÇÛƒz™Ç’kgýZ5LØ«Ç\=.pÍ­ø>†yZ#•'Üà É6ÒÒÓóC¸ð1‹³Á’ÑYÏòH©G×J&Cþ£¦ Ôè5X#Í|J]^šÞ¡;d!Œñ(%ŸB0NÀÞgX Ó@8 Ö™íG»P½ùÆ*Ýðûw­ÔÿŠ…cöðíZÃΟÉ, ö-sÚvÄkAä!%3˜ñb«ß~¦$÷ÞàÿXj–±ÉÍNÉJ®»€;ÊW:`ÆZ9‰E 4òHi“G…$>t½J >zYI`{W™ã{¸ØC¹lÝjÇ#gÄim­P7(ùÛŠÙá¾\Ìúúmnš˜ÄÐÅsmúø>!U?}¼˜ÄSÅTD¹éwºQb÷ž»Pi„MLØÕ²Ë D£ýd3ÔVí‰gÄF±x ,­¬Jœ[{6ÆXÃy"* úxóØ7ö¾'€®‹VvaŸcúbeoºý ñaÿoå'÷=2ïÉ®™íÜ—SŠV„ÕÔ\YdñÏâÙúékV„l[œýx“X4qy‚ºzzg>ÚÖ‡‘‰*Ö¾<‘Õ#nüd°ÈøƒhÎD‹œ®‡‹9íoX€eöóçH…ýþVÃz™%ÕO×ꉲý'Çh=†”QˆóÃZ*˜•gÈÖ»þÐØo³# ô˜-òNŠÃC!G«ßÉœÝD9!·–á°5܈4õ0Õ/uA¶:\Qü}†¾¿Âq|,_[í;xÒÑf…~~pào[-²à1/È\$v]^dHJúñô)Cjæš„™fT&à0Ìmô7À†}’*f;j'éÒàȯa6Î¥»³ Zo@e¢3y“cÒÊkg%‡w’äpÊo2‚7IgK£”|z9z2ÌFø› f¿·á;ÌÕЗñ§~½ b빇æµú €°\ôYžx 40°)®¡Ò1Ø•¦Ë*ë˜  àáŠP<9¶©‚{àJ”Ìaùäz1ÜM{6•=€… ”xÁ$µPPûÉ»IÛÌÈi,ÿ 9Y5Å0GÊu}â‚!8—”É˾%ßvyç•ïÚðÑ4" %ñÔŸC©n'ÎåÓðlaqÓÀ¾áÃVKþø¾k7›¹hÿ ´*ÐpíÀçFðc (²’ñÕâ³cR5¢K?Ižk!íóçøk¶;a5xx‹â<¯6IɰLP ášyµ EccãÐ÷ÐÊÁnòbžEeÐDÚv,ÎìÈQ,§Bç†~$`@us""3 ðrüׂŽì]÷”o ?×$+Π&i«˜Jb`T3¿‹WD—âš]ôm¼ßÈ‘ &דsDȪ86+÷ý.“Ô’FŸp†úÖ=*E~óß©0Uüf-˜ìÑ%'äL ºn}úö…‹5qÉÙ0‹M¼á7¬‡N,e-ôɬù 2© 0ÑiZŸF(ϵ¼¹«ÌNœ'éböó¡íKø®`QGôl¦Eå¸÷>·b¯,.¬ç>{B¯HÜ¥ãpûôšíäšM:½†dñ`6‹—½(ú—òÑó D8±½ˆDéëùOЧ1dÈÑs ýYH ©Š©™`¢5"‡Æ¾%fº8¼2V”´N¥ä28ðé«p‡‚˜{Ù?ž²Ÿ Kÿú…¿iZá OÑ/\„³!&ÿE$…>&à•Ø·rØþ¦ÛØüÚ»Ù¡“±ø—ç'Þ2•µÿ1Ûƒ€´T15ÝórˆAÃ’Ù®ºÒFS錯TÐK¨”°ÝUžR­Šõ†ìW“È뾃ˆý‹³Óô%ÜK¯OÝÆœø€ØBõ*Îk=ÚI`OúD¨ïJ[@æv ÀÍÌïHý¼G‘Gû§é]´øÇƒ€¶!g&=º/Ë$V„õKF*ªok[‹«íëØ­E3Rðó&`Õ³BB•ŠM%Ãí²ˆ¥«UX¸„õb7;Yáž—jL©&ä¿€¤à cyDÝ«ê5Ú;âˉ}ÊÔœÞÛ7¯„CFñÈ¡öæ3”è]ó®Ô["G„ìtu:~N5f›Êý¿[ÎÏ`P”ø×OŽWl´| ¹lþçH¢åì‘ÿ…Ôi±.1¥_ ŒÃÿáËT8ˆ'ß¡Öf•™8+d¯¼O$e66G_6Îü|O‘#KÒÄj{…ýNv¦ùHÅçLÃÛšNNEÀ±ôP‹"ÑK>Û­sGè3óŸÏL{yç$÷ï*Ç&¦‘ÛÍׯê£h“=Ž‹[¥i‹ÂþãE–‰ûïßûG‰}n²»íÿnc”ê‚䨽xî¸a@Tœ( ;\ñ-x…ŸD^’H¡T"…ÂÕÉ×qG4öGìMˆ“ƒKõÔÄ͸k..….T¥¯_‚Jö|e”.³1~óý+^ ‹z<ø´ÙYöE ¦­ûÐ[ "¯0¢bãIè®í1Âùq¢^y¬å0W¦rMH–©üPR;©”âBãÁH-ì´˜¥:yÒÕB£z:ò¢Ç óWªéÞ% !k |˜Ç؃øÕÜìÒ𱲋4Ìpk©Ázºñ$œÊï/HÙ‚¨aÔ44Nt¦hƒ¨±)ɵ¯ùnÖë`*a½”xSË>îʰö¤"›e|ù>Ï46~ŒVÖ©k'g•/ù}]›Z9üû¸ŒÔÓ}ÉšI ]…D̾þ"N©Š‹å‘ê‡Ód:¬¢Ë¡_¾KØ4ÜÙ$æ.wnpípZ5ýÎç¦Fø9÷1œ E!ñzÓ™3 ¤¨sº¸zÞ­® 3;L=°¦ó%z"Ž6¼yDìAÁÕÑÖ6G£ÜÞ®¥ ^ÊÑÄ”øM y}*xä>/s/¤Ù(jˆVïìÚ<‰–ù§OŸpÀx£ú°Ó’÷…º»ýaY¹mªpýC—ýlœ²AeÙ»­gÞɧÂwΈ™ã®+Ødò­O(X¤A÷û™ÂÊ6í¸;z#ìã°c½%!˜¶ˆDjN¿´¾ÚkÇòQR× ÷WGŽ uÑàë| þö·_×¶ñd…Fô‘W´þq]Mz‚x&ëÁqÌß: LN®0V…1]½2¶€1Õšx€^ós¡8ç<úŽ}žœ* kxNh–ƒ]íôQ§ÄžŽh3 §ÿ •r¸£²÷tk©~ÊKæ÷Ò´†^ "7}|Ö&›bH?!qJkÚø©ÅÒàëëR|4ñ¹4J>> 6±¯Aý¾eš“ Ùò”ÎcÛ?êÞ’y®rÍ´r6 ªîxa¯j«ìUTL`•´¾[Ï•Kýi›®ú1¨Í5¤DØ\EÓIÌEÄ~Ž•½ØÓcv Ì%úÖ±Ú”$óˆ¦=(°>yÒ È¿¢'¿­v×W*œ(2ô#×>)l½Q_Ê£óF!jWФ,ó,„¦ed›œß¯RõëÞäAßÚCÒ!ázwבèᇘE›=g„åsïýcòõfÒ¿“û4N'§™&‡ïMÜŠ~ÂQŸÉvdç)¦ØV`%Í͹ý>ø@%ŸKiäiûVâZôL5\$m.†GFpZÖ–†ÐÐ>êyg_ ÊéŒ u•DÐæšØöˆã¤ßx±›ŸOAXÚ1ãNBøÒ Ï{B¤wâ6@e;Óú âÖ­pàX)©‚¦Ü2ü3ÿÅÑ„:Ü•Œ ׸B$Ì$σå >vÃ²ÌæÏ._QV_ éPÛ"Åííy,Rà¯ÂZYHÈEñ—:qóÿH¤vm•}3³Ðz “s‘ S;ª¾É¼ˆr^y~Érh³¸Âò«ÇÓ"·¢dûòå6"·ûr€È—}íz¹Ìô»;‹,÷—þÿû# ­3NNOt˜²wîö¨i… ~é3+Ñ2B˜ =º¨Š+4&Ø JÊTV‘‰{Øu«GÛ>è Ý}‹vx¼tMÓ¥m*X2ɾ–ÃÒy2CW„ǺIéÞÏÈžR –ßÏ=ÝÖÌ̬³_œ’ž®Ì9jV6Nþ?Ú(]…çcÀæ§yÙv7¢…59¢ìA†k’…ºPÈ~%œ€Š†þÌÍÏ5I‚æœ.òÿ(!‰þ7üñꪪ¯5ÇÐWhÎŽ¸2hSºÄ2DƒÕÃ}í)}‘α kž`û¼£C~ºª“ _õšjÞ|ê×3¸žü¿¥Pú훘Pk¬›£­Ð¨>û kÄæ+°4Ö“~VJU.a,n~ä~ ‹\ kŠ=øAAÓœ£µ¶´™q*½ÝÓ÷–x|Ž6¸å×”„áã­¬Öjž5Ië¦Ü%@Ç%Iо%W—ø •Ó…†".üé ¿?=Ü{c$cÕ¸#rú»OиùÎP2.H[7]&£]±mÇâ9<òŸò‰‘¦5oû¤ùUë©õú“££Î†r^€J¯“dÍìë×¾æBJŸ)HמÂ=ÿ½þÚÞøÞ·Q?œ†.ã1‡&7Š~E‰Ò„ψ†þlj@A5Åg‰@o†Cà4)Uxw;£ÑÖîÙâ-9žN++«`VÉ:™ŸÜcÞ÷W‘ñät×™•Vk¬º"€x›rÁ>Á%@&Š68—&¼á"ôöë‰×Ôl_'‰MlÚûÀ@eÀª…EÖy sr÷ïäaÃ3_‡„.ÒU]RBí)‰w¡´â1Ú¯H\rP„´Þ¹,mÔŒ¼[ûÄá?ÖB ‹¯öö΂¦g"¤åK“÷v7(|êgê?ÔÞô¯Þ*^«¾ËDüÌ‘Rgæ(©ïESÞÈ£¡WûæÇièÿKo€(úqºK×èœÀ<`HÛû¿?È3‰fƒ4}k}óD\\ZžÖ•+1òî»»=…£ˆ2ŠQÒ6OñÑÈ'P%%âe YrãsÅ(€‹øR;°^H‘Ì™·p¦3óÒÐÀ1ƒüo‡€ŒË L(Ó÷à2ݼøñÔ'ƒ.ž´sÒÒ‘ ül)sö@f`BñƒN»±åõj.Èg›™ä¦$Ë]õtª‰à›sIÎÑà5žAF7N³I‡$&ò€ Ü­›d8ÄÝx>ÐeEI?¥€5¦¼-”- ;Ôf]þñ—Ú_Ùyû|a®Ê=„RGó]=CrO·&=Ü fY¨’©›w$nÚe‡ÎwÆdY¨ŸY\¡i:±óSpqOŽhí¦¥8½ÃR—®VaTÑ»˜AZÁ£TRNÌ£B:»ŠU¥!ªˆlɧ 'ÑgÑÆñ-ÂÚðãGÉ—¯å˜Ÿÿ{fÓ …Ÿ†w ××׃u7W Ÿœ“®JçÑèÒaÂL=æ7M!ó(—€æFК›¼HŸ ÿÇôÜܘNM9s´²Ä¯ÿ{jóõ,PÄICCÆšØyÌäé·J×sýåÈÚl鹌{•Rï+-耵ÿPBzNJÎGUH8_0¯qAùJÞ„yîÚõë7%Õ­c.•¿9x‰W£gd>\Z)áòoÿ<4Û>ª¢Ÿ.¾~üëV}>)Á–Y)u‘ÄÆ‰ðç_wyCSù85ôÀý!Yçùc2,ËüPåQ¶ªQ Æ€f|v¯µÝ„ pÕ3+¹‡Ë{LIậØÑƒrÕ5{Ÿ\ņ£ÌTfÙsk%ü®“íÀu»DíÄlZ|FÜ’(ª÷{ÕÏÀÛ€ÂF颫›1/.C»»édwá§Ô œ]]Ù¾ö -:$wB^$+ÞõH¥ÖÕWƒ ׺\iOì3\(,d Ê8Í7×qúæ¾qzúœ÷‡J..²ð@KÃ1Íé·§‡ž júè3ÜÊ'fN€ê‚Y-b'”kЧädiÄ ùq[Díа”>BIGŸ;—êW1Í2Éo0K99©÷FŽ©©©¦‰Iœ-Y8‡M|é(öù/q,àj¦™­1QUÊkç³]&æðm “ùÓ€UÿG‡® œO ó‡´(€V^/ó  æÒM#'é]‡ F_Oœ½méá>òšfÙ¼6P8OýŸý{“uÈ•JWºYZk@Á^U]~3j¨n‘B2E”\·¼Çˉqtéçè²Ù¸¢öI+<,cÙ)£—q²X¢yLйOÜŸÕǤÿºå4sÁ@î̓ÿß~OR¶:Oé¤õOî*fÛ<ÎE[€Û£´î#Z0œàê!tÍA¿WÉò ÌùOˆäŒP­w]°­ l`è­åAæ¨Sk1£T‰ןò¼‘xÜ'ÆÌ®_1½Ö«¾¼ÛnP¤¡K§hÛ÷LSi%ìNàUzãBǼY3Y¤›7Ïšï®4=uö†X3CÓ¤ßk2„úC™Ü æþþ´¿ãƘ÷nòg5cÄòè‘C*#?8ø¦&*%žpÞvE²N³ùdÑžTÎ(ó«’î9¼¹ðß6%7·í õsüq]WTU#]¨ÂÒÓiš¥Ye´‰Ù˜ho„¹¨ß=]©Ô¨-¹R&?2ùαbÂþ#Ažuœ¿¢ç²N?ÛW}Ni»Øù¿ª5<îm=vAxRŸéjèÖ_ýT±hÑH\#_”á±mE'(,ü•é÷„>Æ9#dLÊS”`xýýÁSÏ̳ts$a }dK U}*BJè¶£%¦áS©q•I7{þÑ:šÆ6VÏaªÊÃgOŠP&ªqr'¡Ažƒóá¸v2’×ûß"N‘nR9/í[!héYìùóJ9v‚]ô6‹\@7_Û ŸUÅöƒ&hŠå‡±Óô{¹sFZJ2r¬ 3Í–ÒR·vw&{ÚU:>]~qN £­ðÅZC|H5WG&®ëî’"W2ZpÊTN>G› ¥Jµ„;>¦„8Býó,꣭éÞXïmZ¯oxã!™ñ—ÏŽþpºÞª°²¨Þ½¹® =iÝÎ#ïOÃúõ”†ï– 4È{¹¼4`êÃÏO¢"$Bâ+*ã/ Œ^ð3“”<»\àÍs¶ˆrÕëPåùý{CÜ{ ̶kÚ­ðßg\Ã~‹Žj4„l³ºvßžz"WÄ(Sœ¾~;#¸ã%Ùöi(±pjûècÄ=ÜgkÄKOöìSô?gyR“| ëCrnØŽaéÒj‹ O[¾Œß¬¥Â#&³i/â êÞ>šì¸Öñ÷R©§péÛ·Ü úåæˆ®<ü9 x™¸:z îú#®²ìÛêzTsšÐ%Ë߀\ƒ×ŠK99ˆ$̵'ÝÌлwOZ÷kŠo¢:2ÖËQÈlß—/FZle!£Ä ·µ™8†j¼“£yÞ$aÝIJH¡2BåQ£œóI?m'ü0áïꌀõrñ9š§yê”̱QlÀà2—}|fÜ)M™ï›{E¿/üö¥©±šQ¬¿ÙK¶f»rR¹ï$¾æ²HÇš¢D¯tÅ­wsaëiVÆ:µ˜6&¸¿†÷9„hŒ÷ © U Ö½B?Ï ZsXâšUÿ½HèŒì!>p=Š3–ÞÕƒè<ÿ1o•3³¹÷㌌‡LP¸Þ ùCÉ[.¹Ò~³‘¾UzŸ”È‘2~åë6{Ev«Ú2žÏAýO%5§{N¯‡;«›ÒÓö³DÿʶH⫲"áEß+gž¼ i®‚6Â`­w h¨%*2&†¨k¢E>P¬º†zDºÒCCãÄ—/_"÷§"ŒXerƒ¤fžWŒ4îø•–R¤]nÏ­¼Rʯ7ݸ*6sfæee•úÙüêðñ‚oüC5ò]<Š]hß#Ô)”7NÊ„è1¹Â0Ƨ,PLs¿ùÙ¹wÞÝÆÉDx÷Ú&ƒRé~dúîVlßµáÊm‰æjõ¹¿ù©¦UòŸ{é.l%Xm½Þ1-Axµ3­æ±ïGbUa~¯ mCÛ³>×¼?ÆÛ™1¨ß¬:aí1oûÞ± 2VŒ4) :Á_$1Õ"Ǻ¹hÆ?]ÖM{éåöØ÷dãë˜S}¾ú{JžyÕx-ÿ¾ˆ-G/u±*W)ëSävy4ÜÜÞÇM9#¤2Á-7ØÌú0‹Éƃ‰˜¤V(¾¹5˜æ¾3žl"Wžö¦4®U:âm>¢p÷ ¾ãëÛ‹µRtó )H¦WÉüD˜Z¥fOÔ<Ø…Bhè)}} ~ܢœ>ìÐØElF$¬N ={¨"Äë³%™)|Ýãuô+Ê?ζv¯Ôå©8äû°ÈúgˆMû|j®®‰KCÛ5Œ$ÏÍ:½!Øð?-;34ˆóDZ/r1E™Võzüó.aÕb Õ#^û“ŒjÍá'£«Â¯Ï… ‡ïFm%ÛäâFpC¡jÇÍ[·è_½zU'àÑŠ°bSZMØvaÉÖ>z]þHdw;H$—†;$–æ€s‘®á”‹6†¼ƒoÑ¿ZŠˆ¹¼+ºz]Í@ ˜?¸IÉ뻣ܘàÑxAkùmÝaêåð·uu-b¹ôÈ•d€^ ’¨°í0Ïï‡Wõ„=g”¥¬~ãˆ:ÊÍóññ6¥§¯o\Fb¢æ¥ÂŸØ×%7¤õMK#ü„ƒ¾Óžó†BD„Äl4¬Ïíx‹ YK“KìôÚbÏeü½”ùîåÑóª IAoN¹oÜ\¼ôy¥sx¸Îµ˜i¹i5­aìÒM#è´%¹7(­½9Ór«Äç’jNåÕßïzn©èD2á2*Ù§¢§,£uUÜñŒÿôh³§ ¯ AíhƒÏ‘¶êµ’n"ïÀ‚ÃUÔ¶XÉ¿­‚o¿ê礧KJà5b”8y–E@ž¼¯ÜdÕîÍ“½9Å! w棥¨ú °¯Õ¯}K°Ú$‰¶§ÜˆW¬÷¨W4¤ÿŽ8®ý…â@\Ë|¡nü„;¿ÈõƲœôSbb ò›;fÕ õ`¹þægáhŽî#(**­Ù9~;ïÆfh)ÝŠK ÿ.w¸nðÔwÐÓ‰è;‚;ÿ¸ŠØ¿p¡ÐàDIf*cŸ GÍ:˜?@¤&7n}³|dö»ÛGw>¸ ¦F<·8ïºä‚xƒ [ÆÂ$PÛknÎm‡¿2!ÀvyÚˆ\ƒÄ À ìüyÒÕõ²LˆwBä½–üå–Xëà{¿tɍ𵿆ôq.·ø¦jB®·Jõ×Íܾ¸Ði¤7þ ÷ræ»76ÞÈÅSqÐvõ’'´žŸPˆoÑL÷Ý7Rà÷QÝÕëœ>ü5Š:Ü\¶|‘~'!ÅãVŸ[ÃÏ—£³î2rÿç’ÞtdzÇßé ïg3Üî^õ‰”p¢T²#øÕ¨ñRt£QJ÷÷áxBg^"¹6!€ü˜Hâ(ù‰}‰éÎÁÝëážø¹big'BJJ ª þçâ_ÉGÊ ÚÃ|C£4ê!8þù ONgCtAc¯<}CPέE€Û“‰d }Ìv—•ñTwoD8?!òóãuS8>åæ‚;õ¤®GN,·Í3òä ä)PVäâÔÑïa¨'èÞ}<\ˆ¿êúœïìq'?ñý™„»ƒƒ¡æíÓ'„¤{[Ym6]”"Ô×-W‡¯ÿ<¥ç®ìVÂF(Q¸‘w¸0ôÂßQ?\CRxPÆæŽ{ù€4_ò¯þs¢ƒH¥[·ÂAGt~ŒÍ4Þs% à¥î·ôñv.™µ5ä8óp¦IÍÁÃ$FÒçf¿AÚw¸ÓZ@)û7×—Þ܈N£òŠõ)ƒ}²^ôÔfL²6C˜±'‡âZ«Ò¦ôIq‚(þÌNuº÷•î.Ù”9½> õ:Q(›<1Ïg§úûtÛ&{®·kö[/ @$Å Û>C½Ü÷+x 1»·Eº Á^|Íàå=Ç;Pâ,ÓÐ(:\Õª}ƒX­Pž56°{P/G.Ú¨ìýv:Ä'ù¾ÒÚ"ý„gƒ È„¼òãVÛá˾ßåî=µŸ›q‡1Éq²NÑk ɸW”Y¼É@\ŒóÞ‰³w]ˆ™Öz+ yü~ßL¶ò†;ûö‰ó{¬Êµ¹ý¡ñ7­ø½+ R{²¿Ìýíô‘LFñ+ ²¨{UU~¬¥€¨ÃýÍ‹Ÿ°K ©z„æ¹SDŠ;ð¢î kz6óqÿO²ñ¸¶Dx¤›G|Ü9ŠTJ•…òž!Kœh`Ñ9dlRùñDìc4ùÍ;âYû@gõmþáªví›fÓOægAòdÛûgÂ^ÌÖbɹ:Zc©ˆ”·IÚ¨ ‡ '?¶LeõÆ_ä=Ãf!ýÏ ©éé¦fµÔ3M¶ù!\ q£Z@•õ¨·}»©ÆéÛÚÀŽSGŸû2-”†-©ú>RÎù…F»÷ðý‡Hx#'¥€T©vàW89ëÅÌÎ>¼ÍX:èñ†¢•k»××××¢V–×&nqœ Øó[;2²ì¿*<ÈÃ*÷].ÙW¹Pðh8¼Øó­ú¾»—ÂCŸ>ìë€ wyG'§·º˜û4J­“GM(Ü$%IC§²Å;v~‘Ÿ/OxŠ3\äjïq)xqÊÁÿ”Öã/_ëªnÒ1 Ý ûæYìBE¯ÿMñÄ'E'ȃ8ÔpÁ7EøÊp‡¿˜ôù/õi‡î£¯è˜J­q‰Œ^aeÊ«ú–Tò¢u,÷†Zû5þæ[~3æç¯—¹lÆÜδ¾2U/AÕ¶â SàG`àú H~¥…ê5ðHÜ\00Ø£½™\?Õ üî}?Ó´JlªÇ}¾¡a¦E@ɇÞG•]›|k…q{r²ô\»™Ä´6wŠ¡<´5Z¥£MÀ,Ò÷1AK£\ªC?`"ºó ÆÌD{‡«Yð‡Ô!n§¡Ø•¿´>vÏ•Ö6"Ô°ÓnÒó]ÿ°‚Zy¯ŒÅT”RíͯšO¾æŠ…»Ú©L$y40T ±•W0§÷[¥5GÕ‡ßÓJµ+’+•Ìöƒ¤ qëžLΊÀùÓЂ&jè'˜ÎÙßýå‘ï…àùñ‡³1ULø¸&(`ˆô0fr²ð2bN3”(gøMáÕ‰T^uX1 F‡¬ë‚Ï®¯9«`ðѪAkpsÎpÞ ñœ(Öv-“âúp×ðY+αëxÇMÓcÌçS Výé’kâ")©ÂWÍÛ̸³‘ž¬w‡Bá`ÔmÜ”§tJ»´[- B0vl±‡cÑEYòzÙäjh}· &0êã¥ò™ça\QæB0ß$KïÓÔ»1BÏ·‰þžKS–ÐyŸ¬Úü£;±3%­Ø—–± ·ËTÞÌ=ÌhKé¹víZY”|i7L㨋O§D}óB¸'‡‡‹Ðòâl8B/ã4·ý=¼b±lü¸ZÆÆbƒFÞ÷| |P“‘3m‰aì¹k޾\{{Iqts¶™w(ñRÏeœÊ¸—ŽÒÉO^Ä_ªø¦BšûFP. EýÛÝÜgo<øW¶?rnÁj 8 )#ã·ÌåÄeãÛqÏHé6¦5÷š¬ |ìÐ5m³~î¯{‰OÇÎþX,µ;| î ›F<2lj’¹Ã± õø²BqT}Äü; úžã&Y–mg¡Xöûvö„ žu¬$‹H¸¡æa“H~q+‰&ß}Z<ÇCÿ>Ë´×#+óðËiz'ÀÂnÏ YzÁ..ÂÝbÄKXvCø‹½<ø/É$ªÂ$ó݇R)Sø«æÙu9ƒƒí#Ó‚qÜ÷ÐSZ¤=ý¤õ¹}iuúm¶K{\/È]Ay“îÕ-è躄Ðý–#25ßȲö-КžçGö?C^µõ÷Û‚EﳤAŸ-òðÃù¼ãËV°ò?\HU„µë‡p+©òÒ«3£¸¸8ÆÔ sûhç\þrÛ¤·¶Xú÷· êéÄ­ˆ»gùOôÚŒ¬ÆÃ­?OŸ&s±ï‹ÓÔ´MÑ wP|ê)×*°]pë¬Óer%ž–!VŸ9Ÿ|*I¥}¼¤’šÿ–TŒ”Õ5J+«èîýÊǬOž×ßèúõõéõaõPÜuW¢\*Ì= ¢@}R_Xó8Œu¸ú/÷£cÒ¼6oÏ.)b&VÙGó9[# ¼2< €†@çW)]móK&†˜²h¾ëkÑÅ—ƒ0 Þ®'¡ñ¯[r&kþÙš:zqÐý¨ 64ÿ•ô>®æŽ[KŸÒR7aLöNCAÂ\½Ú¡¾Ûœðvß=( ß_€ª#Š´nyÌ#ÚºB [HÉ4&®Hk‚)544 >…yH©ôT“‰^† $žR‚­:y3gd(Sî#P=çÖlÉÁ*ï‹]„¬ZŸ‚¶'­£¢{"§”ªêS²JNô9þ:Ê•4¸¿À¨êtfÜ´´2H¡{“½åGNÈ al`ß’–ÞûV)Ùá›Ñnxðƒ¹äOü Gÿ¥Dg§Ì§ò(ï[wz~ ¤¤âήèçÚžâ­´3Ù§ÕZTéüt?¯†¸º7?m«B …¿ënËå ­Ç¾Rw.¤d6T£ÓˆîZ(f ¦««Õp‹ÇÃSG Ï—ÿÏy2&}BßôóZ³4àBÌ«Ãæ·n k§WÎì[ƒ6½“ ÛÀk·Èqê×ä6šá-¹4“Š>ìsupõ.úÖ<R–lI®ŽE¾ÿÆÇÍÌX{ay®%·þÏé0Ï­÷‡»­Tn«—À¿OØT“r¨ÉËô© p@ +dÿVM°;åàêZL9rNUÇHùE„!Ý9ì:op?î f|k©ß"–00û`ÿI qûø–ÇŸ~]ø>Ré Gs¡.Xöר÷8ÅDAßù…×ÞßZ–Ô ›£¢jï•ÑŽÿþG,üäufãæÂÖ{Çð.iøyÃÚCy“®ó& Öc>/)ö¾ÛÜØæN }öÎìü (â8¡‡7r²i ð#¹ùä;‚‚4p"¯oWó{VŸ¼ƒÇÊÉ™ˆ‘äöEk!ÚOR¼ù‚ÄP˜›æ{”¬Ã¼°“i!sÇ(C˜òcãàˆæ¿RÌp´Ê{çð™çÊ)n¢páW캢ÐqE±Ã wX’\?Œè¿_áñv‹,·âì¯ÈÍ&äÔ˜ÍØ[~ú§¨¶En¿õÂ+ŒÝG¶4::»ïœËsÕSL¨üˆg|ôôú+Ëc¾¨{üjÙ’t²>廣\êò.·î­Ü/ýªü iZGåËÖ|ŠX;4Á*?&&Í0ï¹I¤éC´*&{I±sÓ•è+ãƒ&½dÆ{I´+AÙÂTS'¡ e>Û÷µ—Yƒ¿3…sÌ÷(%øùp1[¤é€z»ÚªÃ€pñ-kþNd[zäùÏ®›Õ$DX€±íÀؘt ÈKt¡Ø¥}-;z‚÷j0ÏÙÇ”Pù³e¸›Å‚ä÷öøæ‘±¶\,à³k,:œÙØÝéóªÒ¨ƒöÊ•\=•à›Ç±V»3#âbðušYª?5_ð•ÄöÁƒ‰X§-2©¤*¢wE\\-·€ª „§ÙZþýYÙ?X—êÆúߨ¡þâ'û«ÇÏó‚À ?•†—ž­P[âÐP¹á³Õ¿/3[ùNqƒ IÞð Å'Z}c¼ÌäÀžÕbOV݉ ¥¯ÍÛ_C)qôƒH‚§7|Déì2ó±ácÉê‚ûìòø©„>­]]-ñ‰FkήüÓxŽãâÈÕ! жCqíÛ‚ÕêíVÞ­Gðø‚Àêð!ÿN9·^šþ˜ôkõõ‘–´¹¨[ø˜•ÿ`”¤¦V®Lv4¯5õ´Ô¿äÖ%J¨AÁÕU3Ü`r¤^)£ˆ]¼isÁ¨Øîg é õ+M#J,.VšÂ'²Ë¨®ó¦M¹ƒOÉ«´4.+pJ1¶Ÿ—Üa}3Bä\䙯1S†TU¨‚/TzØØ¤Pž LNɳLÍ"šdžWd6úõN@¸KÄøW˜çJû„ÙÞ—ûÓ×¥NßÑyçà2àǪî{Ž4Ð?‡eÈýÇÁ.s…C`rÎÞÞÎ3„¥Õnéþ*üˆH™çªÕš¨}oodÓÔüB¢Ç¼ˆ»÷ýjÒOká+ rO„'û­çËlpUxãÜ¡!¬§çüsºÐÑéÐøY¿ÈÙØ¾Æ0¹U˶_td/#"ˆõ†‘„Øñ÷<:††n89}s´tá…îÑKjÐs˜û/_1=|A« GÃãÞÖÒ‘+bóüQ}°Å\…{—ü={ÇöéKna飇-@»Ýñ%z/Rô1B2Ã9¬`‘{FÛjå6¼£²òLÉÁa4tæwë6¼qÊ"•øž^qŸ(†zgµÛÄ­b·ÁP‹eŠÜ7¬'IÜIÊd‡[ŠŽkv¸E°De¼¼÷qË63MU…©4,cð&¯„ׯ˯‰;õzòGn±oØßw©L[„uhªB}:¹Æb37n™SÝÜ?Ÿ¬roÑÖ×§~ýz-Y¸³4ÈÕÝÝH Ïõ’9*àï±6ÆhæjðƒYN¢ÿOÏ"‰­˜QÌêÚ,‹7ì)ÏÆ¯,RðÔ»ƒD˜[Zº 9þú¤óâ8æß÷08ê²ß¼ø ¼W 6Þ>]J¶¬ß._\/²+ Á0èô;µ¦ÉðeO†Œÿ|ñ6‡s1ΫüütÀË ý› ðþWv í¨ÅRa/þ‘OH¡ºGBèßuEì?Ž$ƒ˜÷‘J p,1ɺ@õà'1ñðhÜÊuàÌ®ŠŽ U, áa¸ý3Bkaô¶Ã{—þ/THÇ`ÉMkß.3Ìñ<–ÀQw«}*]H›ƶÌ.ôh¨$®;?ÓÙXû܃u9_&'ˆM.¦0ÁÞ½} ?ZޱeSŒß>šT¼[ìÈ'—]ú:ϰ¨ÎC[aïœAs3¸µ¯Ä!‰’ ºòøÆ3'õ¢ÏÂO6—Òܾ“ýèîöTÄãÒ]ëµà\Ø!wŒØºG$j°ad„îsñnÑ hÔgÿIYyùMÉK³ËˆrѲ€â“Ãr«ÉîÀ¬õi>sÜä´†õaT6fkm>Îÿ}Zƒ”ƒ%“M¯ÉCµŒ´”¯V=оŒIr¯¼ ua­å`÷àpܿ߻]uÇÑ)K÷ ó ¼å S„r‘çÄZ á:~âQ:LçyJƒ}y°é=ŠTÌ5•lÓ\0ô™Dj;»­ÐÊ]@íöWy—;Ò×õÒþ<5“'§ CÕ"Tq´·ôyr¤2#£Ÿ,BH}œÖW}m¼'óbze@uÞå £ú;ð(Ç@ ºjH®.{,)ªTÉ›kÅՇ͛{< Ñ¢Š ¡Õ;ª#†U±®3­)iUò+å¼ó9[ßɿςæU7rÿptåð L³ý}—G*c²ŒŠ£­éÂ)ä9¢SnN—¯L,ÇË"ÜÝ{Ò0/þ÷€H¢m ðÑÛS–áü¦˜VXê*Y¨’äžvvvÉ×ÂÒ£Meüñæƒ{RÓ±xˀ˴òæèË ìHÆH?½¨)NõK¼¥Í¬aõ˜s0<û²Ðã3ú7ªúî²r¢Õ±.¡—êÈwO«½ÍÁØfÛzêÿ€ñ8üÛûçãÓK×÷«O­ôó|=ž=Õÿõ„©÷ßÛ€³ÔGwœœúFÜ+ñ>® ú4Ÿ{™n’KÀ>·¤suf¡¹NjEå„ÇÃ{ *z7.ÜÌõÞöl©ï^ôe•½«uË‘ÊE‘Žso#Ÿ‹*ŽbñÉ;¤ëËýŽ}mIázÊê+ÿS±"ÜY‡§Z‘MGš…pñ8´‰?fávîl—EtwƒØ½Úâ1X¼’®î)¶¦ ›_pƒ3™/ ÛÊs¯ß|&µÖq]Ô@.\fáŒÌÚ¯Xܶ]åûž7EqWñd ûçÝ9} •;†®‹VN=?$Nâ½.¥¸îÇß¹D“Ér¼Œnœ i/úiÃÓ£Xö­8ï‹lL"–“‡ÛßV—¾ýñüûçÆ^Ý䯭6øùÓæÒɯµw!ÿ¿ÛŸá6Üá³aæèƒèèh85mÉè52?4D¸¯ö¹Ã¿È‡Ë ½­ð‡D¶ÜÕ¨>ìÂV£PÎ]5¨3=4ø$Çzé!“øâÁ³£•ý×ÛoJÿ™éÔÚh+Ýa kÖÐ Hù±0zÔƒ}œ&lT{|òôO×$UøË‡hoSå Ðÿ–ŠÀ’xãaUÕ >ÓB™«O‰Ùâ]0ô·«÷Ñä4 .löVuc‘~åÄ•²Œ•`9,òøWX†¸@¦¾‡.°¢PÇï~û†rBrxi;!kÃ3{¿zmû M /iù†âˆZ¯sTzÓ%N/nXÓ¢±SxiSú‡ûñb£´Ûr°XÆ#—f¡Çož %~ºÝD›°$2‘5zâºZ1cۙɫï>>sÕÚ€·tQПhcÙQÇ¿­Cä"*WñÙ¢–ï^†”ÿ,I…¤¯‚¯Y>FŒŸKnûs¹} ðtåQüµÐÙLÖ½íÏ%rj&ãsÆ5ê p±¸ÁV Ýzî×}ÑGžó`3„Yã™±µIô©°­.R.ï¿CN­ãÒ ¼á¨`©²gÌËŸ‹N>8ngâlÐ8—Åž¼G½"@Öã'þSòà'¸Åk°xŒú<¥¨v®m0ãòJɼâ×Íu©8öiæ…Öï”ûÚ®ÄBRÀ˜¯bCÿš%øT'(w[¿²ª`¼wÀÅ`¯žÃb–Q¿í¶áC´Æ^ÃÿÐ<’ï9m;t߃Adâ%~Y8çOí#q­³“ý6 …!Ü<¶+Ú·«ŸŒxíÙ*ì4h=à”íÀâ7•Z„†Ÿªh ÊŸ-O¼•É AÄ>Fsªÿ8¨>¤ý;¥}l×Y”r¦rîÃnA ÉðÜ¥¥K²«ò#SáINHù-5CÇ 7Ö5²F+ë8ÖȽ\¨†ô¡€­mÓ’­#ûˆˆcªVø3öZä8z·÷eU1åã–GV>ž ‹´‰»v_ûï/^Ë‚»õt‘Nõ7_3Œ‘,Òù¿2Ìõ7ªõ9ÒŠR|DÊÕÉ’_XDÎ&Þ½û:À2õ…E]îôLŒÁví©ÇåG4·o¨1ÿï KP%ñhÿ±ãϼð”û—¤¹/u–z ðwàßõµgΰq{ó)Y¼ìÏ¢]p>ÎH¥Ôú†cE•`…J(¤ùNÎé5†¬ °,iþTq‚mµÚÌ i|ÞfÕTðN6ÈT‘¿õŠGíX¤6I°dÙ³’Ï>ãñ³SyÃ&Ä‘c{"Eï’Cæ_jßü.¸ßÃiOóËüõµéY#5<—%óÄüJi£ŽíéÚ¸?§a=—˜}ÿÛßÝcJ%ã>ãE¤*ûî÷Kÿ“xx¦Ž/¥$øDggÃYÃS?Ïr18Ô®lÔÊ–…‡‹êŽwGŠžPy­È.²LH„*•¸¼üñõ.y×QÛÌ“8dksy./¢î÷î¾rWÑc®¦¢Ï-#£±„v”WïjžmœL;&7ú­l<1öý…üþÒ·q‚𦇛¢x޶—žn¾ôŸÛªK-Øpž‚[<<ã»NŽ}®[ýï–„½Ým­úÖZ·Ú­¦#ô¿‡5"3´÷ôX£Q2 ™|Åo¦[| ¸ñøˆ»{ƒwT’G[~RB¦^Tá=S´2`óÿo-–ÐY~NÚC_Ë7ä$y‘ëóÖ¼šÙK¹-ÑÝý#O]ô£ë~­FþŸÊËUë·@}ëw>TÉ©§ ‡8‡Ýx㤤À@×þç§¶okyРüY– Õ'º(stbäÏ] ôŽZÀ¨L{:ð7q·yxòEA]’Åò›w`ÕY“¬ávçþ㟌ÄÐJ¹ÐÈüL¢âÖÿ¦¶ö-ºÞ!Aáâƒ׃ÞìuJô9¥]Ȫ ôiﺡû-gª®˜®KÏXû4½´±òå[§I/[½WmzÁ¾Ù|ÜØ·h¡–fîuu²ž)³™9ô’ŸÿýQrãc„øö¬“wvëMϳ3—½âS4š"h6)ŽYb'˘…uKìÇð…ÊõñògÍ­'J&išOœ‹xkêÏé3'Gõ'9+ëm=‡g“+ zkëàèÖ÷.Ÿ£1ñÞ@ß¡ÕþG|Œô"„öªÐØgŽuôóõöÌøSkk?Îcç1Û[h—‡Om¾É­n¢_¹­ÃŨ?a‡5G¹4'ÀrËsÿGïx‚#i îä+èE9ˆKñ{ñçÏß]’U þþè»ÕƒõV‘ß|£ÙÛ_ÏeOa3Ì,²‰~í÷óEåZ)Ö4ªdj¤”àõvý˜Õl‘UÍÉQJtÕñóè?YÌi°µjL½åµÖ[ïU<ìå¯'µ`hÔ¿´RîíÏmµÕ®Æùt»4IÊ=_‰þ|ý³ Î} JÚ°|;ÝíP…‚Öß‹ÌʼèH˱™÷Ù÷žÓþJ‹nÄ£hÚbq<}Î]çÊD &䨒Sˆñþ ‘m¡_¾Z<ËîDZoŸÆ7áq*LG¶&¹æˆœª½ôU1•Æû»våâÜgÃÕÖ{›Ð:?ÓÍJñG¼Wwh”“KKe•M^Œn¡qªÆ Ρ¾CæJO€>MÓDŽn°+P  oÔßÚŽÜêvBÎP±ÿjõúîªÎ˜FôÞn·Úu½§Î*ÿ§öÔy“².W–)­ýYÏ=Eþ©l£¢Áì—Š+Û×µŽñ!÷Ó‚‚9ã ¾YïÒ(«$/ xüPôçl)§•'û ½õ´r7sØr6¨Š½ÉéÓçÊ¢CÖop¾:õ¥¤ÆvÙ•šøí0dw£ã8Ýæ|hOÉQ Âa 8›gB«èø§¥¯l]G›S@/³lR¾’ÎóøÙöp—´ô>òµµoš¢ÄìUMËá4ÕËfì ÿÑ©¶GƒÄp×Õ]½àÖ[ЩÙT5qòk0Gsd˧ÛNH—ýMݽÖIÏû+å­®è=Èì/Z…ª÷<.µó@•ï°¨÷<-œÂ×xØ¡;ÙÆ ¼¡òp„›ô;ë2Å:ÔEË"ŸÌÊ%7{Ìâ‚Mºq;ZÎUD´ú U »Déü„÷Ñ}ß. [‘»¦)›0Ë ¼ñn¸&µïGÎñ)+«†òG<å I0Ë÷ý⡚ŽU¯zWõ“I¡}†d@XN³ˆóð¦PfózvM4ÜmZ!ÜôlQ¯°ð±i3½{æã5¯`¦­úAGßðuÏãÌö@­]E¸íöÐ_ÅXã핪¤Æ`„²ÿ•³-ô¢?;úú¢>ë½YA®ÐÜÒpoÆ\wÌŽwñ²ˆ»£®tÛÅàg6*÷:"£$í¹VIœ×Ûº‹M%­ÛljH€yôþÄà RR 7~¸z“‡]„j³öM‹ÿ­ö#µŸ…79‚ÿYŽO(úpý-«ï¬6k[QâMG“œ¥‡[UÊë kãUÊa<¥ŽV¯5{Éû~¸Ò‘ªãwR„)Þoúñ¹|]…î°eÃƒè ”»Îv¾ 5õÔTŠKhVøë³,Õã»ÿ¶H~o.é¼A~- jËÝ‚ØlâŒËÐ1ÕÎoý#É[ÐÖ:š‚ÿÒèÓEHSSYVã+™Òcs }Û€ºdQd”[ÚQv¥t–côžs*jk­ð$½Ú]±¹Ñ·ku>éR×蹎z¯Ò©¨Šú„Ë¢È%¦óê£=l.|ä÷ÍíÎÎË:}]K>ÿ.q5Nï)¹`šrdÌMM͇Oühˆ¥ªKÎn²$ Þ ¾=õ o¢¤çÖcÃz=UÞÎ’O;‰T¾cìVàÿT×ÜEª§.qÿvÇš¢º"$¶à>Þ{^ñÙüö¯W¹p^û£mŸ•áüÒ‘r.ßHH8z—*í¦ïARú,ɦ÷ĉ2Qc@ì§ÖKõû«Õ«À¼ÃWH/“²'©ÑDrîø—K5NœÿI9+ëäéòa5œsÈwU~“.(TöõÇâ.MZê1‡Žx‚i ‹‹êÑ®;4¼Sä–÷D+bi›uA„䆪å C˜Gßýd"´¬L•CG»­¾{0»<̰f›‰ó=ZE4îïÓ¤=¸ˆ–ÅgüÈ#ªQ±VCy#æ"H"´b¦Æüú¯æ„VèÿiîËÿ¡úâÿYZˆD²+•ÊZ‘­(²D©dKÖl3Šˆ"dËV"$;c7S²&û`lÙ»a¶Ï½SïÏ÷ñø~ÿï·pï=çu^Ëóõ|{î=IÖ18T‹?Ü`Áþ|R»ÇiÔw ´ò£»œÈ­ü†Ë å{ñ²ó4,CÃ÷7ü¥[®šïc;ßO8öEæ†Ùm¢2”¡žÄMž|Õ\ÂÛk[«­ì–ÁÒ¨/¿ÞR%AØWŒÀ)Ú êñ¹$Ë=ÿÀ?G^ìÔ4RÞªa£‹˜v¡q!¯nù&`ÙSÌ8%˜ý¡¶7‰é\Á:«­1nÌtlˆ¼×»v§¡ùH{ÝÌ¡1‘ó§4¥ÞÛãf÷W”ÄÑÑç寱±NMê7þ^È›ó‚j8£bOß’Œ… lüÄHÒƒ¸ô‚ðà0Äåî¤åJ¤ËãÃŽùäTT³¨=õŽý¯ž¢ “y$«å`W‹™ƒÃ$n·÷@\›s!Ò`xñ¥1QdçOø›;¿ÔÄdߌշø•µ¯BÂv8.ÿÓÉIýö¶ùH[Û`Å)£èþÀµûgŸN²n{Y!q sÙ¹Ò’ˆ `¹Ç 5´Á½-¯8ƒ¥{èÏÏÒxbÛŸª­~Kºƒnü/çø4ê%”A–*÷™ŸTý¢—Â)ÊUJPj¼¿9÷«=õüoŸGYv¹Þk¹Ëîr¡Nã˜~ÒËRVÚw<ǹßvrNþóÙ‰¾S¯U 7yç=–¢[×®é„eB»\T]Æ¿ÀRž‡óV6ã·|{ǸUÍ‚Äë|Oº^È’'Ãå–S,k<¥+ñAµt¡ÿoSBÙf˜dÝy =gX[*ëÚ¦¡&=cߦËNDnNÅRªnÓª `Ù9qøäÌ™ úH…qüù_2 úó2˜›ç¿²(ŸQ“z¯[:dísc ÇäkvEEübam§ÏAØÊ@–_ú¡ûh‘ª"¶«5…;²t$=5+þ¾<ÇÑàXb›{ßm3±÷ázòyù–êRã£,¢ÖN6¿YŒ©»\@šlÚ \oåc6¯]©Û0k½yÕ}ßï=pˆºqJ?l³‰x•²J~4N÷Ø»ÚÎì©Öcn÷¡OÕÇÓ¥«WÍ|7TQ‰@ÞH^´k×$9[ìmnúƒàÇ éRhßȆïJÎlKÀÕsœäþ²¡z/ãÁ Û[VèÇ“nOi¾qÍi‹úúœ¥Ìwí>þ¤ I:'r¼Ú-Jõв~¨lh®I¨ßQµ=ìt§ä~(Ai_X\hür§þ…}J­û€ {ý±œÈj­Yœ(Ž@–’„.MZ*†²ì !o.UO´)Ñ8ó—Šš'ê»Óquäõ6PÌ%` L¥ð¦k¢‡ ®–”JN’²+ ²T¸Z1ôÂøV¨Mذ<'Ý/"ñ®_+d®XÞ¶ÁçÑö9âw,Bë+º`j-¡‡´5 ®c¦ž h“þU<@Ämß—Qgÿç‹å4÷Q`+aç¤+ Z®âޏ7Š’m¹õ´¯Âóå0qñÉߟè;NFZ4j>ò¬-Ñ-:ævXŠKÍKc]×¾¨F²Ü`DKŒÆ§Èˆ&¸\´Ž€Xûz¼ªºXH뇶ä£Rw0Pú×>•ë5õú?©\Tý¢ ³w{¯n½þÓµ ‹&èÑSâDX`ؽ9fr»ÿ@ƒM´ÿaÂø’Ò›¨9TIÿ¾eÙ3Åp͸ d¡¨ï8lÌwŠ2›Þ• ŸÅ± ÜÓõß“A`Û  âÞΊ—5{z#ÈZVTù¿s7€YáDá²hó”>>xœ†»+{x™ö¦â˜oÌ»¸,Igîñ–'̲ ïþIt’UÔh±ýÚuuþCØ×GqÎ#jIÑ{ ¿ÃF°Üpà#ŸÎ!Æ’IÒìPò‹=,i NÿÃ-ùíGeñ q“øãÆéí Üjãªû"3b*ìb;_ZVG˲JèïM™j@ôŪN ç*KWÉ—E0‘M€)jä9áz·\\fŒ‘{û«­:}N¼@ \w¹ÄCï—ÓRH4ŽêôPIæí7ÕmVC×Cã´@êí¼Ö÷ùvÃe^^Þ¼C*øå²G`{¸ˆL}q—¼?Qðu·®¬s÷m`ÒÃõ˜ ‡÷ﯪ±º(ydýÌÜG– Ìóyu&Åõ › ¢Üµe!0v1I6 öÍ6'¦µ¡Þ¾SÚt“>ñà.Ñpêú¸fÂ,Ÿ­M5ÓMŸ•)oÓzñ9óÃâ-¤ú¸þbÖ´:Nb/ÍÖ\•&O¿Õ`ä,긢Vt©Î[mUèÃÕ¯_¿þ+¼9r·ÍƼÊíAIŽ*ZC‹8áHCÆn#7ÎCÄó$F™âcnWÎ?3x¸6ÙDþ£ˆ\£kNǬ À¼ô ¼õ, תˆ¶{ÝÜêÎ^8…v® ÑŸð |#Ãw]m9Šx‡^‰¨&€‘öŠ2q?š´]nPœx°…”]°Bƒô›«Z êÇaZÜ>rÛÌO$÷¶ë—r¾Wq»6$n0Õ…¤*sÊ­þ•¢åÏhÓ&úÇ A JâÊl±Ò¯E„â·Ì¢ÿŠp0öÑa-‘]Н¦Âe«y9Kô+h«Õþ~Sü™Œ­‚¾­tï(G?KÔ¦ˆ6̪€Z8•—›€Ä5 Ív´¶q´‹ì÷IÏjÈBžè:ÒJí¾ƒ§é#I>ëµÐ»isäbÃTñ°Äè¢+éŽÕdÆh<¾89ùí°÷â3»O!eçA¥ãF©st¸jÑpÚ S^^¾ár Q|U‘_La7Ê€ç TÕÀJñÐKº ˆW‡€aö–u·š‹W…úM“C‡€ ÆÅ€•ǵ+ö3žLQRmúÎu§—i7rv=ÔW ¨¦$Mz©sÏÙæ¬uðá–ɱ/˜¡Ou?I÷umAì¦[bä»,ùÿ[ š©ßçKL“2§×Ý‘±@\WÜqj|ÉÞ_YÌ{€ve/]èù#Z´KÄgdâ-:UFÜž”„™Í5í`gÙe÷h ²”ÃNô!xÒ5z Fàh¾þ¹?n(]È&`Õÿ¦Ä´ë,ÐÎ…¬Ü`ù¦ë":"n§º;<„›f ˆ·iµ…™ZÄ­ï„ÄŽm$½tWwôË·„=©~ÎÌytQºg¯e‚ G¶°êÙîÆ,‰«i" ËÕðüÄu«ûË?­±F¨Ü`ˆþ¼üS53­ºÁs[ܦ¾+T •„¡©~ü¥’ 'âêT?5|wÜwÏñ F§2¦,v!|"e,ÿ]ž<½WúÌ 3ò­rŒ=›ÍU,vóÓÕ 0À·énz§~íÇa°z.Êe0Êܳ 1¸ûïtLk8ú£–O  9A_ÑÖ–y[(_õÅ8HVëlÃã«>ø@hÛzºn~NB<<3R!ša:Á…gi˜Ù¨Þ»€fëÌaêÔà!ñ/z…~t=SÌq…I%œüáYX·nð¨=鯕b-*@‚®2ë†ËîsÜÂ+ªá|%"šC¦ÔÈŠÍÚ|ê=z+¦#‰Wn1ÕrUñ6¼… :ÿùŸê¿RMŸ„9zž¤ÇrÅÀ)Äðiü½s½1‡{¿{§Ål›KûÊ9–b Îñ$’››Þ¦]¢«H@þ3k7Ç}ž[‚Öou"Ý¿2 =>ñ><üV6’²hó· _Ý/S»¥ÙÞ'ï ÑœÐAº¨c‹É»p§,—¬>4ÿò„)exº5®zþS ½4¹µ_ʨ¸ƒ;‹=Úð|.ët> };À2“ Ã8„ߺ;„ø§_«[¼bÄÉ ‡G =õGü õj›Ý—éLB:ôVÉľs6*ã‰*.+ÕKDJÌtÅ­Ð*`V!›³ôX:™¸±¶šxÛgÙêÊÖò LñQ/÷KÑ)TÖÍC‡Ÿ'-•)kLÍÌb@¿;9U%è¿ é¤1+‘èl¦®œÁÅY…¦)X‡§õÿÔ²n¤O½€ª5y“ ¨P5ŸéL[T}ËjÛÞÑæ­Bë½ëzyá¬Aíºhßž-s4]É0"צY¨n>üòÄ´AkŸQ¯«ïNƒ„†×/ΕÒu×ÄBí†GLÏqZá=ú™ÖzøˆW}nŸI4î•CùØFžj´Lbât›êYRå½¥ñ·hgḴÀ0ÞQdiÚÙMaÝ“…ͰI#Òì^š„5ó ÷‡tœ½}t¡M!`ˆ§ŠknRªq,`ãZaÍ‚Ì0ÌÔà ø“íÓÿÅ•W¢ðÚ]®LíØÎ+8ÁOnOÈl›>÷ÌÏ]38¡aþ­dϥו_XºÖ÷ѱ6j”™ó¶BↈA"8c+S=9rúBŸÍ°<_9ì 0½&7Iê E¬“q[Á½.MÙsîú•Wè!À›Ÿ¬lÿdìéìÜ÷øéϳo‘Á./_Þ³¯]6 ZG?¤ï's[Ò¡©–cÕÞö˜æ½ãžß9UV¿q(!#?ÏXgÃF 7E ^íî “SÚG‹½ß\eW)ZÝoeLnýQuÂÎ`·ìæ‹%¶t×ó[”§g »··‘€¤ù *XÍ©¾=€gÙ^Ñf“8Ï\JQ[D.‰’Å•ú÷J‰‹ ¦ ‘-² ûxë«`ÓçÛùçuIêþhȳ~œQQñ‹Jh3Aü‡ÆAÁs?AÄz»MÌ1'Q9ÎoÙ 9 O}†ßúRn *~µaÀËYö†ÁªæÜF»òbÛ`z;WÀ ª¸±ñåþÀ0¾B«²Ÿ]ñšYªÛ/H„IßôþÕ‡SfÿrâÛòuáÊ=Q«šØ –â§ÒÏäß5E yôß±_›Ï¨ãUˆwØžéRÛxE¸~¿–¤ìqe…ÿ,Ù#ìⲕKöèÅÓíâÛ˜“G"?‡¸î³âð”½Yš¬âzÄ>ÍË”iŸ5oŒã“ß×TÖZŽE¹ŽgþDÐ"NÒN´Ša;a¥ô%ۜΗIRnØ„?ºg«2ž{ÅzŸhÀ*l6Ý_AÖ¬pS$"<¼õárØ“kŸ]°´àË é~ZHÕ•$Z‹§ %’S‘.à 0Í» ‹HœTl):ò!èÊA+Aò乃GjÒ§”øß’¯ã¯"*ö2<™Q<×E>oaxxcÝ‚Ý1&eû²­Æ?a“žjŽž%ot™ñjùeò—®èŸ½Å¢‘+ðQ8LäÊj¹P¶—ñˆ†ì]Åä^º{ L—>¬øiÜ7ŽD?¬MnìÔJ¬¡Â‡ŠŠ>ŠMt®Dé€öõ¦‡Å« ë—iè5=6Ò=‚Á’u>Õ=Ÿ¦ÁO7ÙçëK_Ï¥ÀÌâ¶> €.õáD«'lÊœ12«íÊ]nâÍLµÖ¹WíÆƒø|¿Ú,Iq÷§!‰?œ¡×´²2ö˜æç¾½Sü9Šâ0àó*QQÏÊo>[àIñqqñ;g\FªØedPæ”´u±ßW¨Z»'jÆ. —x©BÇÁ¼C #·D70@qoF( V)ÁE‰â«™‡¡½‰ïú9„ ×½ ×3UÛê½¹Oø\ñ¥G?¿p§rn®ƒá÷ßÒlM§U) ²ÖL™¡øülPR|kB¹`ã±ÞwÓnßaq«5Ü`‰Ýnm7ƒ]úˆ,ˆssGDïe5ßb–òëv&ÎåªÚiK˜Ì_äûÐk Ô·r3ä2–á˺4òo2F„ë}Ñ=ò4dè·õ@erØJá/¾ _6ÿÔÍô:·éug!Õlû,}öì³ÑQywkÀ%¬iÂfÏ ø‚eäl·ÁÜ”O"`24)óƧUgš±A Mž—ƒ)Î. lC׋éÖYz#WŽZîÖ¯f—Œ‚Žk=„Ú€2Ñ.èpt>x*€èVX»rɱÝéØ.µ.5YQŒMXs;úþ’*ƒøû‚Z«M»ÇÆ«ž„g&và³OzÜ0Qa Šßþ±±Îk*£ã_ŸËžØÅs‹70º§}û[´®äJ¨Uìj˜Ýg.:ÔÄßï‚»Ýî2>nÚ»Ð@RÈIó>)¤¸Mo)¶íq#ƒÖžæ36¯ú–†aª!qe…dFYÇÊÝϲ¦øtÀYmp÷ó£þ’ˆÛùIÖÀLâc³qn¬ÆC¢pÓI§~9èËŠô4 ¦+é2(oVOó]‰†Z< ±l‚¬]@Í9¸*´bqµ†€÷~Å/dÿîÅ üeb å‡Ýx‹í~i^Ì“3/†^„I;¨üˆ×Ϭ¼¼—]ê‰9AÃ>'¤7Å2È®3ªoø kö5"•ÚäæeJQ'‚þ†à­ŠNoX/¯5£¹hû`æ¦h¶žeó&$#H• tK@–rž °$rI†úŸ¶µìrû® ¾áM–fëgä­o6ªù4úsãx™r±aÔxéI·óñ½™ƒ`ºx:›Ö¼ßXm‚ÞZLµÇ쓟Ò9J^ ·ð²<ÕŠÃb?[¼ÚcïF×dàƒhÆ$‚ˆ€Íß?’˜‡+aøãÒu}Gku­¼ìàíI/h 4y@7TºŸÌÆl׎ˆ&CÔjø©bÉ>÷fiýš”>9Nx¿äËêuz®˜”¸a è‡Á^aöYÕzøØÕÕ¾åÍQ+¯¾Ûå»\ºÚÚã¡BwÇÍ0{† rk`³,ô!¹‰“ºØ~2¢à€m ’¿oÛ&К®ÉÞ·÷Í:Fƒ9.)ŽV[g… ƒk×®Ñqʨ ²jü‡94‰|Ýdï¬[98n —èÀD„~ ÿÇÌÆùôþ¶xS ÷óæÝÓohgw¨ŽÄ9ù(¹]åÕÔ}JžÕ¤M¼Rî´©r§÷XóŽOÇÏüI´Ù1€yð0‰^e?HN”˜¯Lcû¼ÿ½÷¿¬|èæ+ïÚ,KØB Á^­nS4¿zÐ 1Ìî—\]wD¢ÂÃͯ¦«%Çk$ƒlh+ÀÁ0 ~D®Æç§ŸÓb ·k#`î­˜|àF=¨ÙôYV’v¬™‚sûm;¾ã9:”ÓÞ´ý©ú“`YEœŒ¤Oß¹ikK@ÛÒ“gT0 E'˜ß¬ÛœÏé\®+NsÖ,ŸØ|ÉÒD´Çç›î]©TÅ…÷iglœ—?4/ ;-|ÀÝÙxˆ;RÓy0š¥+Ÿ{TóÃÔÓè„»øå.µï G†¶þzÒ&vLÜä·……±Í†úí;·æ’ê[8‚-•ã AõÍ©Sf»Ï%üÉÖ:nò²ÕQ¬{ˆÝç× Ê±€Å©oÈW0ÝR¯JÈÅI¢¹ÎÐë;Fç&_Mc+æ]ŃV¾ oê¶® Šƒ Zjî’CaÔìùKû¤hè©Ô*ó|úsì3ÒTÕ1l.ŧ0ë0ÝÅsý)ȚzTÜbõ& å‰R]9wüÚ»iHRæTnç9PÒÈC¥B•%êõXÚjÅVVŒë­/}:)ßÝ'=ñàÄê¯ë'®âÒi²ãº:´ºûûØÐöÌ ïå'(Ú¬¨ ƒ—*=™Ö3Ò¤x *Þ…4Á©ÕŠìýö\þbô…1%!q«f±'©e wå/šž‘*ìQ‘“Ò¿ˆýÒ“b³h*¬4Ë|kÃt^b¸5ˆXnçƒíi›_ÔðÄWüÿcÐÅiW¤•ÍÖEƒÚ¯’?n“k£ÎÄ–Ót9)Êvù+Óô÷“óÜõÃÖ´—¿—yË­‹ðTFaÓÉ.³ ³÷?èͽ9wÞ™ö‰·7&Z¥2@6-åÌi¥·\@Ö}iñ:·A:PÁ)¶¯x³½üb»ñê)±B1ž¹Õ²Ì Ò'Ž..3ÐÔˆd_,*~úœ%¿·4Xm˜@œk¸<‚h1&5#õ-iC;®8.[Ë/JÑ6Žþ«6It•u£éh¸œˆ^ެá:Ç~îÓ-ÑB¹¯ÞdbÉ*°¨ˆX,¤CIút?áù }bWÅ5LÔ°¦å磅<„ëì×ý© Ûx!1úè±å=Kžâ‚=»ï&óÃVy{¸¯–2aûг2ŒÂAçlÿ±™—<ƒ&< =l 2`. M½it>”¾ª';Λ¥“ ð¸N4µ9íî9—­Þ1ä¥Ã׉“gäüïÆŽùÜZш"݃¢å_~¼>ÜìÞ,Ò –a Àh§Ï\ÙœL´ö>HgÕFRË ©lž"áR…Óšdówý´ÜÎoYÍü…Sɹƒùôŵg?ó¥Ïp¨¶ yö^ÇŽ¯{«ÙÖgý|bYåvÔ>Õù9 ÷'ˆÑ‚–K>å>©uaáDzОþÿ×`›Ì^ö~õ„å[å²PgËS“_DöŠnik_bwŠtÚ2þÝ TG-ÄêÜÚ²Ñè³Påš—“þ“^TŸ´öðP»˜©ÄPäéĈW˜‘üÌÂèÄ”O;ɽ€æîOýØ©ð@P°Ý·Ý׉€ThUÈi5g²ÃnØŒè7ÔùˆÙ0æ&‰öFúà§¢5ÓYDÞlo{C*÷= fá µH%hAlnòŽœã"VƒÀaXJÀ[¥E/H”{qüèŠXôøü—!Æ¥½¯PQ{ ¨&‹´Ýã”{ yä †>±¢»iÛ!`åÑq†¼âƒ™¡z Äm½!0£®!i;Hòz"æÁöÒPÃwég.Ø¢`ÂÓ¨ï•UñžÊ+È¿ ·}NÞý^Ñ¥Ùº€D@¹_û‚öí5„Íx¡â“†úKÇwû((Ã`E¡)¿SAd_hgm7å¹¼y~¢AÄ£9©OØ+ñAþñí—"¾#h’qô¾Þû9|_kd>ô ± Â(^¶—NñeÌì¾è aEO‡€*`°öDFO埶D­>3Îó³Å‰C*â·vr’…v %NEÛ/ôæÂÇ^ku½†ûå#vðMÖ–¦ãªMoÿת¨¯ ƒ‘{qt Çr1z"˜ôö$WdŽ$‰–[Q³3ú¢Íî> ý­ñΟP_ɾý="|º#éäs(©}}Îò»§gR5U|H°êÀñóQrn’´‰æXaÙÁXÚý/Ä÷ªû…ô É𣎢6½BÕù¬×ç”DqBênünr}ëÛ»³PÝÃSèS‰ºÚY¶ù¦÷WÇ¿B¸R·3æ s4x#X£¡•«}Aÿ›ÍãJÛ§\±¼…s~`ÝÊ']~àz‹¿•—fIKNo¢Tašm6§„«{Ÿ•ö mÜÉ”7IÁ l_kÈU$–ë V…ª]•„¿bµlã2&åÌ+.¿Ø71÷1z¦bàîä._@º •óEA[² ôLù,…Gxà ’áúQœÎ/ŸöÂ/~°dêÛ³9Açjaç ŠöM U$ºÉ®Û³†gà0ÑœI¶‡ö©× -)CÆüò±¾> Bh ð“v?ˆ\9-ý ðí¿èµ#:µÈújXáÀÀÑ9 a7/@³±Z%hxÁ§BÍ´EóEcn¸Ûk¼déï¯ íÏ—û1 Z rááûð?6çŸë¸ê¥Ò6óÏ<‚[ÄÑÝ•ÒÑ–Ø£Ûœ ¼½Q½#&aŒæBUU9ÑŸJó}xk Ëä‚÷xÂzcð)»‡Ç¯^6løð!¸M“ 1?‡ßŸ Zê8Ø“m¸ !lR©Xœ+fY5•xjwé¾…ʵƒyEÔcÊ<‚{AA¸’W o쀹ˆ n‹PùÏ…9â:àKZ®„vÆ>pú14³úda`}ãK^k†6åöûöy³<›CgWEô~4Ê3&á[oŒ¢faM"¹ ä‹zìi£ìoÐË]gø»·²mt©ž×‚©M{ÝÉ1m uºÂîŒÜj«Zñ׆cäÞ©==%•ꇀ˜N«Ø<ŒŽj.EΚ—~:@¢~¼û½b·é´¥ñWùÃz#ÁÓß®ˆìcDÌ0Ïuû›vvÇîúË늞¦OÖ¸ig±COêÁÖ}o>‡>³4ñ¶å – «È{Ña‡’s:%ÈÒ#Au¤Ì'€úÉŠj°‚¸Ü@îòÀò4fäû@aäâìLpXH…Ô®tç±à’>7/ •Aût ‚Á»K! »„0DüÑ—z¡NÎÎæº?@»è|ãmwoœP…\Ž÷6 •K?ßÝúÛÃM‘'!Z ÎÖWrü%ž‹&ÜoÔ½¨ºÂÒ„Rø0+! çYó³JÐRwc,fPâl@¼#Û¶ÿÜJÕÔ¹¹÷ÏÏ,mÐó÷µÀ0 q0Ń x‹s©-`žyµÄ"irô°Ù©e ¯JÉy}4µ:¨°Ÿfò¹êòY+QÃ½Žˆë¹ Õ÷b¶Çi 03!Të#+Få‹ÈÀÊem8iÀÛÎâKÝ=¿=hw~"dÿ -g_Ìãj«(°À~vøŒ±=®œÆ~£Ìa£Ã– ? Ñ4 Kêä0ÅÚÙ.®uN£‚š“ -'4aDß ˜òùŒbOšöÔša¿x.ÁÍ`h‚mËö‡ufZt÷t>¨ô7-°ø£*ÁÛšûo_/hÛñCzT@èã´¦AÏä Úïö]ý²=Ñ3€yēóÞzÊj¹áR™xS±gà VÖþØNÖX#ZnË«ˆªò~d™/O±$ufyܧÁ¨á˜-«’}šñ×Ï.aW'¾CXvnúÍåÓÇ´² ®¾;ýRu¥ê9(JŸÏ‰‡ý‘äÔDÚºˆSérY¥<“&ñ2èVOƃÁ P—²D§Ñk Wg^ÎV&{‰+L‘ð}¼Ïõš<$ç&pÕÝ^Äž~w6—Jo«o•Ö;¸K•œ6î§HÚ òÍ)¿D-,äŸ7’ž4ò꺵ŸlîÎ1³ž(‰6AÉ÷¾¿XíJâj~¾ŒúÔÀÇsCß«7ˆ&a¿1¿PÕ˜¶–SŠ2ègüb“àcyñÛð¡'®…⌚ʵðöí ƒ ߺš}ƒz¯káV¿¹©|ý€åÂ*—=­`?}ú´Òƒhpu#c#Ò†üìÚÙ¡Fsq¾ÙÙ¡Ré¾ÏT uqCeö~ã<ã¶§Çäòrû<,×]ýÛGš3$¾VzÁ«îjê¯+†ÒéK„˜£,jW‘¬YÂÚgƒë¯Ûþ,qáú_Ÿ¦™·#aEwî–ùAOô'¾‡yêwž¬~eñX*i.¥lãH\†Úû^¿~­¶Þrlärwë}ΥÐ[º’/¡'ó€RUàBË@Yê¥M,óE4š2ºq²œŽCš«$W./Gbì_ uÝ­¸D@a¡¥r2 ¶¤”?<…/2êèèP#¯~‡Ž¥ÒаÿRɆFíp ½Ö˜ótcæäýFÖ+¯¬T6 lJ_dwžªûá"ÒABŸú}±Ÿ6µ½“#²iœ:±£bw{݆¾¯±oup AÚ÷¼±ÇyÞ‡“yŸ&K¿DÝ´É./š{f /·­Ý:(A_ΟÕbµ8Û N<&žsYfºÞÅ'Ù‘G„û%¨_ýS¬Ù »®³,q/5¶}÷g£÷ÅöwÈÀ£t£Su£,ƒòê9·FÒõÞY“}¿?]›šy)•ž;q–VÌÙšqrÉ -ý8d­!¡ƒÊ ÁŸÙìºJ® `Réjà ?Ä~@M°ayØÌe‘Ñ Á~AÕš@”’†Îp2Ì—×—5wùù†Üî=žÿÖ€,é$bø´KíòY.Õ%%è@;Êâï½¼• -Ēʈ9¦»>æOØå’:¶€r…éÂëÕšM^Zµ–:U¨ë×"c_Ò^P«ùË$Eº:´{:Ü8™<Õ² ±äêÝ#3ó°8AØŠ÷#ÊsnˆÏ áðøñx”ê t˜ ¸u_dù•ŸÈ5¬“ɘO±kŽÊÎËkõ9w°” „tÒCŸd6KÒfìf½Ý˜*4-·/ÁOß±ÝäÑ£XÄJ³ ¬ú< cå.?´ƒ“+5cT²ãÖl8ê&¨t¤*ÃBõ&ʰ[úxÀkQò8‹°ßÜ(ÀÖúJ'Rð¤ßæã#þK'gº2ª©¯ò¸…£Ž“…ddv¹59}¶ ÷ìüîÞÂaތ풥‡ Á‰V5 ì0ö ¿R†cŽzŠ vPší¶Vpï‡]úÏn²p°+¼Î YÝMy÷îÝ3Žü¯¼¾Ÿ‚@O¼Î5 ÐÏk"ïô†ä-ѯܧ~œô^2?~íÝ­©8²5šÙ8mUîæÞŠ©^pᚎ¼0js«G´¯é²es™ö“^¥I—\ ƒ39Lû\Š>ºè¶ÞH×rOÄV¶ºr˜'­Rœ¾T{Ý,"î„vËÀ æ®{‘òèU°ïÖÓ** ùEëíÊ]J.#çL ­æU³^-0ƒ…4c¶TZÌY0öRôëä×*G½½ª"¸íÍ^^ªO!?¾f¬†©ï-Üßʽ±ý§0ꀶã3ùó•c•qÆ?: -çj^ø#‰ÞùSèÝ‘U§PÅ勹°ç…]üýðW°Þu•ƒ½6´-Ð6šãþxÒ‘@Òö–H¬^Îå{ßÓŸÎLGRŸjЬ,Ÿg.hp6úˆ ¾™Ö¬w5$Z³ t7™î O!»¢iµÛ”“u¼vµ‘k_ X¼ó€ªñz„ZõrÃݾ¥”áDu› ^¦,è±»}_¾£êQHØïeÑìžœ¿ë¿|: «g5lW¹ca,«õ„Àh*ôJƒ±DÉí|Ó5’–k­ÇPQzÞøÁ±ñÇã‹` ÂoÈÎ}¥äÞ&fÐô·É)ϦŽSælªéDöá¤Aâ%²;JÆ•› Ì’ŸÅ#qj¨UAp–¥“åî1MQ[}má ùĶ“= 34n Øt å•Dè "-ç$ÃbõÁ¼Q·þSÚ#jmª¹ì¾"ƒïtu!6{ôq‹ÍÉÆŠ.]°0ÎÂ×yÌG¨ÎW¦ÝÁ¾Rl½OÿßÏ.G´†•«Ð‡ªÒ÷?Jaᡦ]Š<à-…‘´•Û•‡OB…è.OÁc¬•$Xº´‚ÐFb{ÔǦÆkqFU;ïÆÆl×l“ÍtvâÝÉ|V¶ÍÆÈÞ~ü€V™fÄ10U.“*œ´Ä€ü#¤” czI–<È~ÀçðjöÝsØÇFuÌ-Ô öVË:¾ÌXÂ>W"Ñ)–‰5ÔkÃVkI—©xþSÊ—ñçÁŸñ²O§^«Ð RSÄO‰nÆÞÈÜÒ\_¦^y¼–¥Oýh´ao¹¥‚##h™F[‰&‘·–L è³,…âZnšrz?¦Œ¸õž‘n´ßdLÈdºEÏ¥ÀÆa¶7"<Ü]ÿ£FÙü ÀHÖ–êwƖʺ4–ªgÓ¿TŽù¥{kÐö'I#ðÂþãWm¿…°Õmõ[ž†Þ€Ë¶í#¿!;óKG™§¹¿Ä,n"¿.ÎpTmSq÷M ·œ´ÕJ`í¨àÕ7 ã÷Ó(,פ}»þSÀº`Í‚…Pͨ?Ò÷ã°`òjõ‘Ë;+£CˆÊÑA§¢úA.õÝŸf —À¿†8¨âÔ/­©€¾qÜ(µÅ>#pF5Kæ:w@$Y©—S½ÙaC*%௒;Øhh.@ù‘$Yz"~ðžaîw–G,¨Ù÷o2µø’aÏðgÞ÷Åš» ¤~ :¡– W΂Ë{ÃD…hwQýöýQû.õÏ9Ï® gÏ"©ǯ&aÁíY%Š$—Þ|nïÄÆ`ûÁ€¹T8±äþÕŠI®Â™î!rˆ‘2ð¬4¢èÎPÖ-ú¬h´ÕË'¾'Þ?ÅåÆnr0b:ÐÜÏÄ•§¬´T¶a_âxÅx<û•±3ÈÚ¡MúÀ$ÊðÞi p©ü·ÑRi›ý¨Y,t®þ“þñ­ ´P·Á­äJóƒŽ%%¿|Ìo;r¬¿¤)€B™4]¥~oõ¿õLÔlŸ[Úº¢þzQ?Ò†.M×ä øpç>RН»³ùôˆk+zøabš'ͰaÓ0era£aÆÈ¼·½\[#¶_ªˆÜms®[ûqäãÛKÐd3·µ3æïºEë,³ïúToÝTÞ3|€ˆœVM6Xs-ã×ÜU္ƒÌ‹ZžCº¹N ¯\‰…¹ëŽ(s›»’Gê¸\ÙÄ&«ƒû“Îá^f°i5.gy À˜¤ kRÊúŽdÞ‹ÌÐ+ÖàÑÔ½EÀg@R8Y£/åÈ·Åþøqå“qF'ô®è¶ÐÛKCô§z/œµ‚°ø_(Œ‰Á;rJ¢h‹åhG( ,z"ãéoô†gé VeÂ\ZØxróK¸6HùóYÝ£Á6G‘?PaÁ»Lu/²*|×î *Þm7T¬/ß+Y­-ë3µ,éo‘×7‘W4ðÙ>OdÈõ˜i¯Pà”ëþÙ ¢Þ"EÑdö{•=¼k@ý½DâÆäÈÁÍÞX'DÒÕqô†~Ù²íÑo”ßdÜRÛå£:¨*y $-ªþfãxìã÷P1]\ØZè‹D ‡^ ‡#è»[^˜ Jnþï‹.© ?; Ö‚{sû!i|V¬ ç¼ø‰VÇQÆhÂüü£²%;›ô¨ˆ*è¼}ÛkÑ{j&ôz?cyD×ï’«\€”ªj† ½ÆªÓ,LÔ޳ègΜY!: 6Ê eüI°ìÁ ‘gqÎÊÌû`Q0†Aç²S¿í¥ù£ ë /eøÊ!´¾Ö,Zöø—¸•8U±¢­MâË;\,êÆS3kî¨sk $åà ãÈÍœ°Ó,,W*¨µè®cÿ›ÿ6#ëmIÚ {=qGM÷Õô+”‰ LŒÖG±^g¨¤rªÁÇŸŽ|—’’|ÆI°ìQÇ ûú­þ®øçÒÖã ÓšùOÎå¿®l®Œ¦hîe> Us~;+×cõó}mÆ8/å¶y»¡Ò‡§Ïž- Ø]ï«Ô$-)'Èݹtù2''§ÜÒcMÊ­ý;²Å“Hžâà ^FOãÑ{ø>ß´Ó­˜§–¥Ú«å  qò ÀºWª¬ËM ”z1¼­aœ„àwaGtCQ?Ëžü1”3Ç>câà£Y[‹Ôûï|a`si(_÷G]n¿­D빡2©Ñšõ·òdsUPFËÅÙ‰æE#''Ù $õ¼¼¼ü«êXYÓîžžžVcÙøª»HË >ÚYÓuW®ÅHÃMëVäp íÑ—ÆôŒzêg¼„ã‰P·uÂG0ŠÖ žñ.S:£ à„—dþ0WQª Ù½ŸxÄM¬»ÙõÄiĺk!¶6–VøaQ¢Ù“@“hÅXÐÊôèá¥döMØŒ‘•ëúO^›7›`ˬ´/Ê5oÌÄã»eÌj°ó˜…þ”3/1ŸömFŠë²Z‘çîpKÑÜsö"ß1ðÉ{´¼¥@ニ?°:ªœ0RÑ>ûC ]õ›ñ]>­i™õ®ÓNT ˆ\7#ˆ{â&"{0–7¢«ò3Õ&‡Ò®Q­÷ÓâRÖE㉲»EÚt/g:aÏ‹õ.ŽÝŽ“ƒ–¿$óÚþ88pðºœ*Üža•<®Q~ #‚ü3§Û¥ÌÖ] ?#H+q\äEçuQ¯Me£ yL‘JË„D¡rÊÏ6{´+ üú–ö§O<äl@Ë‹õ¿3^ÆWþà¦z1ǪÝzèÅ5Y…{ ×E}0`X…øqp«ZÂ^±›üG=Û/à§eóÅŸÈNç°]¸L}{—%–ÀìËNÌe$êŽ#[½…ª7‹?½ÁVVðßÿÌÕÚqé.„§¡}?j$>xM/5îýüÅ6>ÌÌãs}¿'s^jµf>"ˆ2ñbТ."ñQmþØsãò†©â&ÉhÆc*mjj7tiG%‰ëÆä†hȬ©o%žÞU©5"$ÓþY/"¦?)ÚÀ%ÕóÕÿ](€×AaD³±²X­Ë/ñ7µ#Šd‹Yv?©~Ж3d¿FýÈL•t ™­+.þUÞ­aÀðÜü’ L0|8KúmÆ‹Ü8Œžm`2xxyÇ¤Ý ;®3ÎÙ+ ëE &¼Ñä|ìÚUÒR“ù¨5iàÑ$XQàå‰óËËüHªÓKºh_ÁÄöí;ÑJ€]}·  'ôfH?ÒŽmË«‹oMDŠ=šž\åÛíDe?ôuåÕ?n¾LãÚ¥ÉìþüTõ`½gãZÍ%µ¨£~¼´÷!7êß’Í”é¥â7U­[)Ÿv“Q-ÞïÔ˶ð^/@ül@v'ULÅv¿ó[@é`šÁõÆDùÂâ€#í°ö Ž·D2~òNS’VaDxvËr¥ £Ž÷ŠÀŠ%Œ×#4Û¾Y7«dß³ùŠøÂ’,gÎi;ÞP_Äú#ÔšÅרG »*qD‰|ÊÚ#öÕ÷WCÛO³zèPy;³[\Ë>v>÷êŽkùáÊ/Þí´© a? íµ#Å(uÔ·Ï2žFèfòbðfÙfö¾¶/.sÞ(–\{œ"T¶Œ—“ŒEZ¶»ƒT7”zZ†g¢Ç+VÈ!¶PïÌ¢û5»ÃW­ `a,¦¨qxÀ¬ÐóUÂlz ʶâÅívWÅã?Lˆ¤© Òƒ¾ÇðOšRž; Ñ$äiî ´Ør n»EÞô¨Œ—¾Â‹­È­œ¸I<_NXüÒÅTœÇà½T% «c¸ Œ1¿Sÿ!ëå…åšÞOu}H‰?q­MóKŠ3n˜Êa½íHª´n‰¥Y@«”Âo}脵ÏêÖßñ×VCÑ|Yñê)Þ‡WŒçªþyÀ:hòßl œ_V$ê™ö2Ø0n/U9O«χ€ÆTÅz†gòh>ô«4º_e_¸É¨çàÁÔ¼]6Ž^Zo³²Þgß…'•ÖHb{ÓÎèÉ®j¬ «zL ù5?¼Œ™Ð“’DìrZ¿Ä<*óš­  µO§;U„€ #+¡-Ú¡œm±æÞÁÈêg<ÊÁû5Ðì—X¤%ܹ¦tæ*\®ÜâÃTÇ)· Šœ· o`_b^bÿBP–޽dA}¾èÆ+ÖZŒñËÜO)ü±aõó7(âéÂÿË41?­[*¨Ý†Âg¨;§Y9ºXÙ¶~LyýؘB³>¸&ÔÏÏŬqÔ†Õ72 Q+Ó­}![t7鳎 ^è-T¸¡ï‚}ÕmZn­JvAC7Ú´"å{0` ìòðýs» ùUÛF¸¯_p0~¸Õ(€¾„’^ƒ¡Iwú¸Ï½Ÿêa¬ã¸º\uÚ÷•¡„÷xÛ´Ùž$ _z+£³œ¬[AÊAŒkðM¾`¬”¾ ‹l2P˜P”«Ï"ñ^bñžªZæ¾J¶¾N—DúJ$±ÙBNÇ3/7¨ÚZ4?”Ù…‡+zMV+¯ ”ÿ´áèA“u ˆ):€å¤èÀ¶è™?˜È©@«&0õh÷_†ëq‚$0ɘèóÝXfœ˜ÝwuÚ‚ ¿+` žÏPëmH"¥…†Ð`;¦yÙöx÷¤âé<˜V›ØR´IÙ^ˆè,Ü“²ÞUÌZÆo×ê[R:‘¹8Ýí¯`Â^M~@3{¹ðÒbuª¤°t)wqÙRïF=°„³ªKù¦¬0+yÍÌ› âJÒmPgè=*–v“{à-ù‰Ù_ æ©Æ°¬VÌ"~©ªóȃÅ-ípG PéS+yú…ƒ gbhwÌ8² :4«Fƽcåa†«©Ž`} 6sUÂÚTWå°{l˜È@†_¤‘ÌEãõœYUOµãÒ2kÜ+)lž±Ò4‡0JöÁM!¯w·ª$ý…è¼7t€DÐåUµÜTGf\5áØµæÐÕ:bB{O»yyúØ®Ë3Àç² «„»×Mlwïc¯Úž-þ©ë6i­^|~Wé¿NKsŽŠ=Òºè܆ì}K;-OC‡h¶JSÛw|*H¸M2)ø«?Áxþ|"8`üèA†¹ÑúI€òH£€UÎAž^˜CÖ¥_îlWnŠUµ3j;’üÖDÈV¹ß3<6øŽÜS|É”b­´;ù;[C5ß¿M8´moHîð z”÷ˆI¯e³@’æ Ù¿±ºÈ8 °J&ðÊÀ×å*XðŒ}ùh‘÷a/+onõ~­ t¬.6Àöh1ëcyÏØ+"݉ä÷ ò(ùVãy|j‡§øÙ4ë-•ýÈ2ÀöøráíÀ„Ù¤+î¾m$g?…z}Ýf‘^£•¾Ò€}cÜ?Œõ*0šëhŽã‡·¯<[@‚a›—P ËÜ\® ‰„Ÿ_Ï9šjÜp€Ç ÿrÂu¦P¶˜m÷6E¾EŠøµÂtK² óËž”>ÙZžöh2Ã|§O›™Õ[¯Î¤g‰ÒwÉÄ”Vw±…}°™Ÿ5‹b§ô:=¹Ç¾uqHQÑJ]<ÔŸ+ý2ÕóhwÔ±ÖFÆËÍ¡«¦üâ¢pï³o‚Xò&`Ãç£)µCµ¨¬=š`‘Eïò‚sþ¤~'ÏXtôŸ3™¦ñ±üðÌ`Â%Øí¢˜p¢ì‡4jrÁ ¨¯Æ¦}#¡ìÓîA÷]áÇO¬LÇ‘‹Íl×[ýÜFe=ïdœiŠá¼\YKd5e$apiw¶¢ ÈS/(’×ÈSÛ{ºœ¤2k]Š|V?]·÷ÿÈÀ+¿ZóçrSÔ|ƒze^Ë¿“Ó2P(|À¡•ñÍ 0‹$vܤÞ5l~È´K“Oiñ9íCVóUspòÞ,­s1î—UG­Ls ¼Áæv«ÇÙp¡_åÔñTÕ¹sº;)MŸÔ×Nþ[ë™/£±® …N4íŸF-WßëJÀ#ÿRR ¬´È²Y‡­:ÜÚj}ÑâŒâÏH«ÌŒGEH«É¢iúg´%LbŵÄ:¬€qùºîÖ °ö(”Ä(0“ ÝÇöªFQ[AÆIv`†¤-ÿ† ]ÔE-o<¶D…?¸Ûˆ÷B`ÅD^Y@¸WÃìJ›26 b¥ôEîÚ&†`òV#T£«¸®×oHLÁ±Þ U0‡J&íQ!^é³8L :äœÂZ¥$Å!––ņf£=âÚøK­˜Fºî³ÄÐÓ¦ŒáÃ|<žŒ!û=Ìw€¾>&a5ôÁh©yæâ´CÝhI1™ä€W:±ó8uüî=Ð AR­3êS@Æ„mÒÕpϺÇԧÌ£Iªƒ±À I±Vd¯G&;l9a–ßɵx’7æô$m¼!™gÚm½L-„kݺ”‘Œƒ´Ìn®u®pÕ¾<]…‰§?´O{d 3öû¬…µÎ‹M 6{1$á`O~4™*é•Êk…‚Reg½Ä,{ë—âñ“§ç¹mÙûÛ@ßkûŒYt•à»F—+3\^…†3~ûûØ)È£æR¸ªËɱOSÅEËv•úHWë(þmÇ:úexH¼øZ´á^‡¶ºLž±Ÿ&—6ƒÀaÖffM×› ÷ûÃõ~%±¹ª-Žh`9*G¥¤Câ|ÍT´RþxwºãÔ´¸|X´`·XybîK_™äv²˜û&áøˆûi-(SìÀ„/"CrÁUÌäÝ  …‡±M#|¶+¿TÕ"{aOÑò0o·e†”Ç#&*c:I°¸mHý]NÆ1“ªBAE¹·‘¸Ùp’j8ÿ_õÇ{1H¨j}:\Pã³} e‡Å|å>ï«rõ†7v0³6ï_1½~TK»ç„7h»R„>Rd AÒ7šMôlÂ÷-€æŒ'ÎÓçàMLКŸÁûò¿ï¬Bî¥,“f6¾,oç[0àc.SÆ’ëÎÊ0†÷¢/¶õîiÄ_mˆ+' ½#Öš’Za–ÍKÌß]‰KÚoztCl…Íu,ùD},´ÊÄl¹8NW á€ßxGd e]Bé!æÁ*Q+1:+j„;Øh[‰?éßлS¢:ëÕNž†Á†A4s’>æðØ£.ñ<öŒØõP fØTÔ–$„™±ÈŸ=N‹UÜ tP‹7eÿm¨É‹¡ÑÝ‹aëB¿±…Ç1þŽ“Gõm)­†‚øP||£¦Ì|´ÍG’¢(…óßÐYŠ„õx2Tuòó ZÛs²ú°$íX[_Rȉ™<ZÕ…[Aú9$§>úD§ø]ÚÃX0Þôz§ÐLƒ˜¦Ý|˜Ùaîö'tŽb¬´ ÚâËkb--á#ÉøøM)}°,\«¬o0¥d¯ÿÀÚ¾ö­«Á–«²V ³Iv³³5€Þ&î_þ à’yËÕµ1—ÌHÍ“|H³|Â3ʳ5[5hYú°!úž#â±Óæ™Y]Y”"ým§ÛhT ¿ +«ÏÙÆf(½] ëenMÓÎF —ÿ%½o¢} ªuƯ-“uEêß6¤›æ˜[J¶ CÀL€cÇÈ®qóm•ƒR¼ÌkÅ@ÀïqáVBê61ßœ*4«¢d~å5ãØUŸ—O¹Í¾Ùˆ®=µB2àðôO¾hŸÊ;0 L‚5óâ+Ü„Äèk±Ìª‹“Ö^‚l–cLb îtæf¥¶‡à·ªÂ¿ÜøÙd§UkúÛZÿ©&Ò½öÍ4ôNJo}¤t•ÅÞ õf1ûÕï…C£ü¦äó*ÓbG¸®{‚J/;ë©5’ ”‰¡Ö’jàÚ=Ò àÏŠz¬×*<úæjHý“B)lv&ì‹·X޶Ø2›T¢3½Éeæð=J.¦ÿÌÞ7ô‘GCQe0gû z=€ sxU–þÞ÷h]Àùå«Ñx"Δ6ÅGÊʧ<êÉø4*Ú¸ájW«8I_w,.pôšŠV61­Q'‰íû!š¸™¢ ‹m0:w¥Œ•'}?°(ȘYÿ+A‘aÖ«}Ô#:r6.Ð\ÅÝ[rÝGËz‰< –¨eb2W@·Ý¢OâeeÖÀ°wY‹)é'-_É19fmÆXO†FëoE£.ծlj5p+¤ŠCVÿ»ÍZ—ÚXjn57 OÖµŽEkcƒÊHï»5[cœÿ¶9™¤\5FÀ %†½išsäÐ"ºÜa–ßùNxØÉ.T½`fî*¡XßÚ÷ÆñVD¾Î»`»Ö´O5¬¹Vr†ð®–»>\¯š­Ê8°eúÔOÖýjSšõòš×©àq¬J**Å6áMÉ ÊðÔ¹ÞÒÕªýãccèig_àbÍ’gNÒÜ¿&)³«â~©/AkäÀã"T3 &B3')Ò€¬Z6œáÙbÜß7дeÒ“GŽ/3³úÀ@lblõ=÷ÒÈ‚5\–¹Q’¦|E¸u±³âÀ.± \¿¨ mÖ#$WŒ ?Æn^R´.ºí;wu2cºAoû/ €JÕ¦:µ3t”çö>¥ý`ZÜð~Këê°øu{µ#;*'3„Wu8´/||‚'߉õ“áYé@š=±i®i ê飞Χj[ᨦh’xü_nò9öÏø°«,kH $«© .W›Xc=“DØ*™µáïÚzsåªjý<ªÐzµö§+éNO–hÿØ1Wœ®káv-;ÐT¥]-«00ëAQwFjØýoóŽèsÀ¼~x@ï¿ð‰4D.M)  €ÂûZ½ý(7!Tõ™÷Ý÷QyÝ+À€G–·À»ÕMÈ +~jD*/e„6f„;áðÝ[IzþºŠc2ä*ï@§Æ8a ;4.Ã8ÈG>­Ã!<œPwX•"¾©;`+xÓ )¥gÆ£·'œ§¡Ûz_’Œnî9N)l¼à*Œztfð%2TÇ_¾ðyÖ‚¢ÂçÙcbV¬á`´­,À•Tá ŸAsD‘&šAŠ™»‚+5$&7C*0êVBÛƒžÍ• «Ì”³ó•« :ôùˆå­ÈžFѶ >$ï_¸>ó15ðPÕªb}óIì§%ªS~`¼F„Z«ãÅ2Ø(IÖ¯aÌL— 86TI©+Ë'O4³ëïM™’;ëËZ–½Ašx{Ä’æ¼CCúû”9¶™¦Ãˆ––—j¾.[…ý0Íd}V0b¤ ®^2ï"¬$$¾‚>üÕ…ñè¸ÁTj^EóAÌmC­8÷óÛý©³žc•W:¬=÷¿¬:#£ÂiçW)š"Ä1ìóì^Ëâb“m¢‹mÌI/Ö«• ç ñÕôW;¬'âa®q6Iù­ÌË›·ï²l¼~ñ=}J—pegìbAô jŒ*õ£2à:|fFÃl¹Vó½ÿÀH$eOêSAÑqN‚°êd˜±«ƒ«ÍH³"#ÅÜôò$o ¬Ë+§3Sû1üö°¹òhÏútæÓ^âñt~X}l)+Ðeì‚U7Ã-ÊÔ¯Ë0ˆ¯gkÝB,iÔ=Spþ{ê‰c~¿çÊ]>9Nÿc³;!]ÃîÙØ —ÄgA5Ö”ìÚuŸ]ÝGŒoWˆ•áy¿ö {('«T˜€‡$+Â̲›á~+ë;jÌoR˜®Ë2|ÊÖ",¡züöD¶ÕN½I‘¼.Ãu%"xøü±Ù®ÀÑ ÄÁ±+6þVÛ/(#æËFHÕ)ßpµ'FJLÕ‰‘¶™4rV- Iƒ5 ºáà}6fùçÍóöµ vøa1“¾!ù÷\ìñ5&&ïŸ)âùœ`eçú¾h¹-”<ïç:®X°CÞ ¡þÂâ-Ë ï­vúÜ8Pûö±X”ÿMÉm^žµ?·HO…kJØý>õ¾’ÿq{K<¬ú¬^ÛsILÄ¿íU´£[E áóž„2zŸ»Ç¥ ÚãAEy8²±’°øÍËéR–BIw >Ó\Ò‡À­/·¯¢¸ãç—P›7‚-mjŠróuEVí‡r•Ƙœá›±éqŽŒÇñþËesÕ ’ÍoŸQ=ks€Ç¡£§çvBfû7¶Žý¦æ®|Ú˜í?¶®£µWýŸ8ÎmxP\†‘¨ªÅõNÀíM'û &ÒÈ>”éÁ7)ÅÓ¿P#³¯Úýjä:Ø“¢êöÿö°€anóÔMSq6_â%ëqÇîiŽv†Ž÷˜»®*†®z~ñĦbñf$üC—ÚÓÌÚP7GA?ý½5°½X‚:­7û^jÁCFœºËN©ŸÌãcyDð€·ñyž_ ¬Eþ’õj‡d ›£Ch&sLÔp¿Ü»v?i©¥Éº¥wßÕ_ßs1ÀÛAí_•Û?8ÃsHyuíy¶†6æáQÎv&¢E•«Hí¶+ã´†åé~¶~óêpP¾sbgd mG£Ì‚giÔŒ#Uý"¦\îµ<Uý^]ξ¹dén™CÈjÂÅÕ°zHz¦+¨Ê,-UÑsÕC°ß᪻õ]´¢-PÐÅŸ¶óJ÷ž B½’r¨M@EQý¢Ób¬íé¥×Œ?Òáï¥æ0ýþpWyâ¹"}#£0šÌ¥ÕåôÉŽ—âCòoÀä:'þ@}©øYº¸íSÿ´õ¦ìWE9ô|ÞZ ÅìÁcv1KHD¢ÆÍ|~½Ä¬ 5›ï=:MÙ‚ïKölý•çÓz«È‚.NªÇ7休ÿâyrÌ{üþ=ªþâ^àö‹€¯¢3&È:†R=M±žjB¬>xöÅyg”™íÍ’ëè–ÍGVóS²ï‰NMZ5šì$Åì’_ⶆþÌ´y?ÄÐ!§PJøºÇ†ºŽ–qAÝÞh®+=ìczÈp§âŠ—lª»5EŒ#Am…5Ï7 øÚ>¶\cÊœegø Ùå{k{ PóÐbEIËRôO÷êå1;ƒþL~ÏñçŒ+u/ÓœîrbšŠÁ¤Ï®èÂ)=³ÄßÒÔŠ­‘„ÂY´åö¤¤’Ó›•?î—* ŽI‘ ¾VnÒ0c.‡“[˜Vq÷Â'Ÿ@ý9çœ:mslηkkVÃc¹öjsO`ÁI[i¨õ8Ó9d׫¾»NðºN¤ñöÎÈ=‚4ó•ËÔ]˜E¨ÖÞÓ'$¿„ì’ž“Ù”Šùv¶˜lñ÷‚&Nm¦à,}ºñ™êËH£¤ ™úµ¨C&¨tïÊï5 ÞÕ#6̯wÚ×½¬º¬7¶ñ2m©áåQ†]yõ;s_P=³QÁËz?žàæÍç2,÷m&\ô@ë>‘a;„Öã[Èx€`x‰ª7§(uÃ\”BÅE*„OpR~—ÌûÚ³!=™PPÏ™-Ü]¬ã}èä­%=’sÿ0 C'q*]Øo»x(@eDUý”mÍÝÃù¯‹(fþý[3ýNv¿:ÉY+¾F܆ óR íÔbßM`æ<¢ù7­t—=>‘2=êÏšfA›2ú$°÷ûºæž_ýC¬g Ñ W&r?·@T[ÚÀžð¼¹ƒêpÔÙ%þmz(¹xuI-‡ZÁõœÅc>ý'Xćƒ1Þò]wöŒ,@÷>W,ZËͤºÛæPÆMæ:¤y'Ó²g]OnšòìHOÅfЧ‘Ò3 …;ÎEÙüë8õ¯˜rayàÓâG;uÒ±ŸÁš"‡ëÇruùëK3_Uh…=]UùC÷Rs>£^Êó¼_XýŽe®ä®¢K©ôKä[Ì]c|ïíÏ[0n†¬Wt-V¦wájpüþÁÇÁd7Q;uÛþ¥õw†ÉzG•JÓVå]1|ÕS’X°æ‰$øv¶ˆü9³BQ#¸ú^ÀæHöQÌ)· ù™ûøU0ïbu7˜§¿!/¨Ú®8÷Såû £µ"­ƒ©Ë}+Ä´áEMŸ«„´Š¶àaÿ®ê|<;¹ У9¸ 2šJ±éÁÕ»ƒ*òŒ ‰ Ìíæz¼lV¶žÌþA߬ÿ£%kÞÉF©^ã=bÝŸòÇ(Âó~Nø÷qv¨ÿŽÍÔvâæJТúHSÎøÊ»ä¹ú}ëG¼~ôll· †[½yØéÂ5”VÝvæ™7ƒ6ž «½‰`*ÃàHòûn¤@ÎÑÁ:ÕK=®¼¸X5¶Üï•eW±6\bé0J1n¾òé8¿úgd±ãuÛö%Í‘0aû†W´¡6݃痂Ëù“ö×ÍŽTdø!ê+ŠÎ6˜Tâ³ae[ª·;–­åô=V‹œ×ç‚äfˆ?Âr`(‘c»à½EŠd·òÙ'K#ó”‚büMæ·QùWC¦²/$2’ÒÚ•…^+-AãFà­ÀhHJ.½ßÔȾŸwê²&¤5hú%"|¦™FÃ^1ŽJ–1|ÂþÐåé))X8Ù±ï„î´Ée¢öSM«~vðÍI305é…ãïG u®©Z8å1R8Ö”äל0Ö$´\ú ðÙêmþdE±¦zC¿^tGZåMJŒ4Õà X²ßØ)²}fgà‡ÿ·,wûGð–¹þw"Ýí#&bêgÍ®öþ ©p^{dI“x7.¯÷ðhXH´fÈGÁ Èuï/¾¹§œ~_lǯ`ˆ±`Ñéõ€œ<ãLîW3Ü€ÔÿνûBÐæ¹`Ñ$]Ðû‹?Ÿ/c|Ò¼²'§CÒÇýØCîêò•©0ºEÏs½‡b¤8/½³Y5@Érï8ýj÷èj€÷ $¶FTÚ¶¦×7¸Ø%6h0[iR`¿h |5ºÚj ùÜ^2­÷%Šó÷‚Ô)ð÷Vð÷hðw7‘ÙwàýÁp±oSÐ ©øæs8°ƒHþÿ:¨ë<Jq‰I+¤ŹŒ #RF9Œç#tZ­—zŒz «‰S -§TèW 7ŸÛP¦åU¶îE›Ä›Ìà®I8H=#$‹WÝ»©øíâÈ.2Y¾ÚNìRÚõ.£ñ#~…ŒœÚ°|Ô}úCKÍX-œxS›¬dhŸ€šs]åÅÈ‚0€.!þ¨øŽlLÔ„'}¤ 4Q(J=6 ŠËÙ¸¹F—=' ˆ¿¥Û³3ðRùŸì'W¨Ç~°£Xév¨ôÁ¬Šž¼û¯›ªÿ´ð§ÿµƒ«v%F'Ùüwòµ-üá'Ûj‘Ähóÿ½ó‹}-Üë¿f7RWEKîþ×ç©t°Ï~ù¥Žm|C6îý×Ðo¿GÄèÁO@øuÈïÜ.tqÒxqÿ ÔhjhBó>î?KO€,süë$Œ—j³}â_£KFÄŒáüžÐ¬°ÿ×»-HY;Çþë­ƒ•& BÏßÖM¥È·ÿ Áüõ*þɃÿn:9iþõßMC!´»öÿõ´o?U75û_OÝ׈¢^Ÿþ‰§·ªÙ<ôŸt¾Ñ¬ìåþݹŠi¼óŸäH)²¢×Ì¿»P«˜ˆ2¡¿¡XöSž„þ;³ªõö®ÐäŸ|G´‰6¸ø­cXi–Uÿ¤­:9”5û¯/ ²ëüç²_ ¡XWÿwì,,ÿ¿Î8öSwž„ýëÌíâ7ZúÊ)hñ¸´ÿ:cb¥éVYþëìÜÉ Ú Ÿÿ:“’ ‹Îþ×™víã(ØY8ñ†6ùï,|Ô®ñ•ÿ.GtGíÃ?i„µˆšq9ÿŒa£Ùodý“¦˜a‚ö*ÝôŸ4g%È}ûÿiËBSöwü'yÌ*ÒÛXáŸ4²<Ô¢ñùÙÂ&h2ü€ÍMø_«iÃV¹é]¹|£õ² óQ‹ô`«ú ñ Úg~à)ýgW^jÑUØõOÐEDÕ Ú?àE÷š š ?@¿~ük d$›7 ¸%Èø—ð÷P×¾<4~Àîí?Sùdv~‡Ÿj“ÿê!؈OÖêÚ€-»Ì86Y¤kÓÞÅ»ö<œè¹ê•ún›ÎÑI·«¤UU˜¡@Ø(ú0¿B7Ö¾ d·OT*’ÄÏ‹yžJ»µU#ñ®‘>*N´æaɸ$·Yäq&¬]A8>ªÐuà‹!]ǜȣLØ=ú‰E>ªÙ{`ð]q"ßhüŽ>,¹cdP?ÅòtÕ«}£ýOÐåyÅKUïƒîx½ŠáeÂÑ›òúF{ÁL ‹¦Ùh‡I¿„V•2Ä'+y×ÊVGA® ˆ 'è6¢Þ¨*3Œx]БFK;DÑ-݈ˆ›ÓµœBK“¢rè'®5Qðqaºfo²ÒXn©tª@i±£<èBûH’E¯ÂÜ4è·»„Ðö_RãèWqLÐ$øÙl¨­B#¢f eñ{¨[„¹$»¾Ž‘vá%ÛgÿPK”nYT ¸U1h¡kplt.iconset/icon_256x256@2x.pngUT W(bW(bux èè…|uTTß÷ö¡Aº»¥S‘î–TDRºg@$T.Aºs¤‘”–¥»sæ½ã÷óûûe-s˜{ÎÙùìgß9wÞëj?&ħÀPMUI úüsâ;~þÁsS5ó€ ô/ä5ßOð@ë©lêiàúÂÓç©ûsÀÇÇGÐÁÅÑÃî©ÛsAWwûÔ=:`Ô”ú¦íÌûø]!÷5é8>(@ñ0C#pG’~ 3VöÁâCòo°MëêZ\ó®°™RQlµ‡½ì¾I°†¹Ý롆h CØ 8•ž\¶|FßÖ¨oÿÞ’~ ¾%  WÛÚŸ±ïÀýOÿ·Þú4¢K¨;EÛH^ñ]ýÓ’+l,ý-‰b'ô1D›Ø‚2ö¯†:Wgoóµ¼Ð³*–T–(<­½4³¹žÙÞ¿I`ïìúQþ´±ŠD1Âô5Á/-ž›>D—Ü—øe¶4éãÍßäRž#ÿÖÅïÑÄ‘È ±›ñî¥G¬úÊÖïñ‡‘°}–ÈÆuS„|x'²+ÝSb(v4Ù˜Ôò¡RÄ%Õp²ÆœnT!Të  ‡H¤Ý}\V¥êéFÜrÈh3ÄóWz_µ³ã .kXÄÝÙR¢rKE.ˆÇ‡Ô6óaYœÃZ~¥·$íƒN Rã¾´˜ü2Wîä­BŒpÛþQú1X¨*Ôda,ý½ZŒ—î;§%©y5\V¶3Îr#¯úè’q¦’×ê´³¾$™À¢HîdÑv›qÃë–xÅ7ûÓ;šœ"vK»3,QИˆkGêöi#Œ$þk5äu"å{hK_¨IXz>°ç1u?Þ'ˆî >Åö‚#Iq¥ùæ‘ü|¡³ù"#‚XpêäèCêœéSæÎ±ü6޾èï5$‚ÈG™øÀzéÅiVYÍTœóLß+€xS[—ugh^¾E`ÜàlÈL î8 ÿ´Õ!†šýÛ¤ÉÕ4³   á¼7šd{bÆQH¼Ke$œ #Qüø#]>]ÚG°ouxcPÙ–Ü¥xzúxȈB1Âýµ5if1àKç«4­pTà<Íšç&½HE+ÙÎ3g„¹Á 0ac@º‡~‡{W-(ð¡mfP_€á q“?½*w†ç)s‡dò¤ñÀ%ó¡€üâ°¡9áÎX`Ø3ò•vO[ê€.–”lÃ0†¸Ñèœ>†,@G'ÂcÅ:¼¸XÂH´WwØX谘΅ɓÅÀÏ?tíDzB…ÿ–¥[§‚S¨pÎëƒeß8•Ї ÓA¶¿N3Ã4½ôZ$ר])Æi~óúÏ7Ýo”î‘ßI•:ý”áFXˆ ø&wÛåT×AiÙƒ‰M‡gÊ`hETE|øp aïU½fJë»*½Ò»†°]&ÒA J|òˆ&°¨ùG–ÝUé°&¯yªìöþìvÌÁÕ5<1­pô)º1¿A\¡ƒãï(³žcœo¡]—6€T†ƒfbt[šÊ5;Ðt ׿òý<“¨l %QL¶ÝgSP†ŒÐiœ-k¡“¡|¯€îàÃ?lî<ÁLÌmw:Š/ÌDhsò7²”&ãÀ¥þ9¾ ÊžÔ&x]Aìúî=ÍCÃnߣýoàõ?i à֤$·*O‚¿ã.2+² ãÔ«:›’6›žìá²ÚÆ´DÂUñ¨Ú Dýå¹.½qr"pçŸâõoƒ"á‘T€$AKhM †8âÓ«|1ÿ§Õþø¬aº&ee|84ê»&o˜„¨ÊPûçfš'˜ Né*ÁHu ,ävCm}¹P_8 *ê7ÞÄpñæŸ~Z'T¿<À+`ªEÉéŠsAìV0SÞ.5¼¡ ‚ÁœŠ5©®1D·‘ØÕ£K 2Œq;N9¹vòÜÜÝ?ÀÛ-…:_?öYzzúôí)2Ö+\•€Ui 2˜”d«¸Ù“yÁ{ëØŒpSRFÁZ $+yFÁm°DË1{`·mBbz>ªmí¥0{‘3'2EÜ,Ó“H8ÊBšÅy»@Ì"ý3ù„¬\͇L!h‰èŸÛŸ(àd!Sðþqë}9›Wåù$×ãºtƒ‘9 jêKÒïÓ›’Þ¨,}…²å°m”"¥ê (]æÆ-ø%ãé˜ÝC$ÿòßŘØîØRCêrè~´k¹º‚'‰LÞpª ›óì,é}dÆí•á5±Š–]ðç‰Dðõ¦ˆðCå&Ò1?¼ÓÃ¥*ÿ 6Éc"O1ïš‘›ÓìT& )Xþ“x¶(ƒ¨|éðFÔFŠR"ÁTi…|‰p^ øÿ¥ÓLo)…×7ÚnÅPt€Ç==ÁÜðÆq‹E{Šª0•H×°¸3ðÈ©WŸ æyô—¯¬ÿ›«Glǰ Í,6pùÞb<®Ÿûx™ >dBDÃÿ.yÚÊ¥ð2B±Š@ð®=zy— ætô§¯ÃÿÒÄö}Ã&€……ìýì–Bˆ»¡ ½ wËú·÷çqŒ…˜ôJÕEÂ`¬î í•°åÞV°ˆy±ù'Q."Ðép-ŒÜ²qtÜFTªB–¨pàñ‰Ëfψ¹AÃHòs˜@…½CÁôô‰>Pß§·$9¯–&|ç7èuV'M| î àºÆ Û- ½¹b|–Â6Ãò›]nòs·Z„;¸’XÈõ?÷±Ñ€«÷†io`öþOpñ‰mšY¥mcJ_CôêP5ÈÒ‹¸§ÑØÞÄÝ.ŸÐû=ÂįÉL³¥ñ2ÉÄÿ¹é€ ܪîÉ9ÁJÙ@ÛF‰\Þ…PØÒ‡Œæ ñØ¿ ôõÎP®ÕÆD Kêßu˜ªú`l«I0²D~èlÿßÿ¤ßAp¼¸ ž‚“詸<€m—+‚­7ÿ¢ö\,Þ.6•ý§S…>Ü4'z$½orøÏ‰ÓœÖ?*Ö¬ ,=˜bàOàïSŽI #Dƽ0%ð¤·ýhRm)0.¹‚°Te_Ñxà)P²àõ"¦ûÔqÏã¡,“ ÌeÒ¤ÑÝ´4‹¿?:Pw'|*£¿rå  ¾Úëͳ¡€ÒÒ<¶øŒ”!— /„­ô8å6(K¼§*^²W>kÅ'8*C¦{ål(ËéL‡ûRou6Š)ˆ3|V‡9Ÿ2øë™SÜÇ4‡Àg¨Ö¸”žåÊ]ÿ  C¤©pû(µ¼Á6šþ†×†³›FY®e¯—'Xæßü¥ßÊDû~O' Ì8bã”Åx„9ã8”Óý^æëhZxùôSÉž¼Úî±à’ BßóÎbC¨ ëÞÆ‹ˆÃ6)pC#¹hò«…ÑtÜ’ëh«e²ëçˆñ[#…øÉè’‹³NÇ;*(òLv•‡n<¢^,%X üô¾ÄõªLè2¾7•.ì Ð}9Ö'qq˾ D4’—áq‡¸Iºa}ˆÒ¤ÅýôŒnzNÓ}ër+ÒºöæÏSþÕz¬^hŠÝÍóws7F¿£E¤ÜðT˜ÔÐàÜ|»Ç³Lú½±,«1á[î§ïC–í„bR,ìr%1™—JŒ$½Df2w«0QCW…¯ %x€0‘—ðÍß ÷æÕ"Ʊ¨ìd6§°‘wøÛ™ì5{¾Ù.aDgU™ÓÈb ”ðEôHõÜ Hr¾4 ‘¯ŠYûÆŽK÷†fÙªª|(WI—“&æó9†—ˆ?¶Õ£ü§Jf¹É»‚òŒù ([Äó&á¯Ol<õ{¦õM$±–S¬V÷§‘¥¥¯yÁ±£<­ &z·­Í2ùÑæþžeœH] ¼Êã6·ÚtšXzÌkÌußÜdr$¸2—l”¬÷Ÿ~,S¼7uÃÍéhfUIºdx6=ý½k¯}:û‚'×DN´/2ÙTïqhÓ„ÜlWF§"hÖÂg¿©+–Åm¸»O4D¦œÖ+†ì=ù–Pž\ËŠ%.)$>NÏDš¤mI¨Ø{DÿÊèò#5ïÕ†¯† ¯-íº).ÞS½WEf y÷â"ãááÉÍË‹OKÓTT„FÅÆX,rr_ÿüyÄ2J«<|‰Û×õ,,–;Â%}X./½“É«ˆsPv´nrݽº>éxï¹  i{ò…h-/)úzÊ5%¬îâ=¿F ít©ñRËÔ§ÊÊÊÞÞÞLóšWàηHÞ–ÍT#}ýö œÞþþëÛ*Ø{o®Ü?¶û»*Úš*+ÛÁ“3'##ëíëcåâ ÷Þ¹Ensrr:ÍÖÆÒ?8X“¯|1Hg\f5Ï®]øR³Ñ&MýâN7Eˆ9 äÖEp<<–ŽÛmÜE.¬Lù¡}c!VÖÛì³xï;Ï|œüþ…T×ôÜÇó±*Kò?ÝÒ+³’môÚÆ¦Qþ1,ˆ¤ä3­°ÅÚž*³?^L¹G¸î¼Ä]:OÇF¯ aQL%„xޤ=öŠþñ#å¸<ÝÖ†­Û:šñ³Kš ˆHüñtè÷XÔºmÁAó<ë§þ#™Bºû™öÃ_¹†D¡Ö‹Ða¹ëh¡¶›„ŽðÝÚ¿•ÄvâÂÞÔ¸…¹bìO¿âØ «’ûÝ]tá*³epyaëäîÎ)âëþÂÞÈØ=]ö‚k„ÔnÛ£É<ìµé×<¹Îé ×·ÔßÊ¥¼¶FZƒfj÷Ä2Âöë©ÿ€1C,ƒèa†  ¯N·/w&ûõ¨íÖËhêH³LX»ã¿Q²³lÍÄ"*(Á_iñ»ß쵤¸ÐÂ&>l/Aæ½ržÔ¹Ü9¢à#»ê5š‹§•r?˺-xg¦&êyÿçÃ!éýrï]óT ŒY¸Mz;ª[BZQ"&¸H$…/ u˜²æ6a¦Ø0Ù‹ /Ŷ!s _“iF° J*u‰#œ¯œi ‹cøJëC‹ËZSî IŠZèÅP¬éŠGÈE—¶Æé~ºÃϽ£®Üôá*øþFÄÁï{…Û¿ÂD„¿VÚÏ¡y"ªb º©aù}ýZŠã‡Å,uuõ‹?‰:É÷È@;Ž&«¹FK6QÄHvBi!$Ƴ!‡fÁª>l.§ÝÔkáæ¥ ¹jä.͇*‚M;¢ÍV’Üã}ÍVB ÖÖŽnÏïÙußY<Ö"\§ÔìÚ` ¦”ÿ9Eõ<ž€‰Buk·ùäò‘Kltd¼"n.†²©þ·ÔV½usŠU/³ýI-Á z>SíÀoÕœÜÞþ’¹âKD…+âM/ωq„¦2ƒ„²Š™æ»4ž¸$îÖ ÛŒ8 ‘ç?)T¢iXÅQ4º`ÒbÒu†bÔvÓç4cy@ºÉ&5„ÏHH¼Y°à…õz4ÒGx‰Ævw¢TΛWÁ„gwÇ2öK®§‘O8Ü‚àê{±þE6àÁ|“OÜ‘çp€½EbšöÞ»|-/æcnÏâ'u‚ïíÎv~[øoæùÊüšÙt$>àŠî(Þ)×Ûq^i1„“üÛ˜´û)¯øSCýÉþ¾¾§ËÑôⱟž¨üMi—oØcX¶çO_¢ÃÄ7£¥æÑ¯Ö”¶4Ò8°àšažjÓ«p­GZ|wÿûód{*άêÅm0Åw’,4ªá‘ß¼p{†M^± ö †c¶§ì²>@Úà€PõèZWpŒ–Ôuôk±*mX££´Pm ¾ÍžÛáLX=ùþDüÅð×Açºyª<˜4½pì…gß+QÐJ¥˜è» i6ÜH»Uð'¥ÖÓ<’EŸãëÈbnnn~¶Ö©7øûó­° à±>”g׫W¿òpI*[LêîWxPA26µÛ‡ï+:‡gZn6¦Ê˜ïj% giz{?°ëŽF›Ä°ÌåtY.™<+2YCP¬aÐôzޙØ‹1´MËŽpЕ'ˆ_›öxÆ·'¿Óƒ(ª^ýŒR¦ôê·Ž]@þãnjạݮË„)ˆÓmîÿe|Üðkà‘Zw³Pø)n^~¾èË–îhZò·wMõ:þ4e 0–¯•H{*]ójÂv®þõÉþbF}½DT©;M=™Ã}ŽeM /Eìqdo̺.¯D=Ôhçº{WôY/ ìæ5¯Ñ·g}baÂýÛ§î×»u÷\æ$DEEùê-½²)U>´‹£¿[‡À6µÙÔå4‚¸g;ÚÚDùšË‘|¥å­$ßjÆÞŒf+D•êÂ+ʺïG­ôPæòï jL,Ÿ¦¶Vˆcúáªv1”.}Ïïèݧ—j¬% _¾ô…á‘oŒÄ)›pC¯€1Hfin1*[ÚíŠ|&Šç{n™G#LqárAW¯ƹ£šŠß–k[X0`àýÙ,Ȩ}¹õ ³+ÙîáÎ4+¼¼[^Øø ~p¦fä;ýÎb™Œ':p%Ý9ÀË? –ñ“,½iW{âê …2i6›Ái,‹¢ítCÖ=¹²¦»cÜ6ó>\Ú?{v0ª!ô«ÆÑäoÅÛ‘"‡±|Ít©O 1#¹•P±[ §êô–µô²Â.yBÅlÙvM²€JglLe>Ä@ž·¡~U;€sËߌ¶ŽÚT2‘J޶M© §•z‹ ™Wã.¨ûµ‹:þù¨Îq*ÖÄÊï-HÌÐsAÎix¨,ØvãN½ŽƒNš‘̶€¶™LðO¥‡á=Žk721«ì°£”öÞ‹; Y5bz‚+­®ªjÓûuÎo=Jiçð6'™MGO<‚èli³)Ê1Ï7UüÑ©ø*p4n ÓwØÂ¶æ+ô׸-Èt¢G@TyE»Ê1Ô vµ ¨þ!Äž\¤!™Bhï} oùûù‰ïÍaOÞ˜ugõvYÛׇo°Í$/¨ê!vŸà¸[C”<ïL¦+`µÜˆ6_d•],·^ï%²¾аôÕo–@¥ý3ôœ;vSNˆØ¸ {ï÷îþ«„4 ~ÓMû­© ýåã K´AWusÌq÷.oì Y÷;¹®×ó`ÃN*ûFøÁAeUãòÕvV¡ªÃt8“„ô^ý#MÖ96qñ¤õ Ø×°0Ì®xfè‚R$| 4Á¯*º×Å  F©Üû;pÈ’F“ëµÖ‡ÒýöÖ)˜y, swœ#ác`Òfo«E6ít¯¿yâúv¿Í„î¬vÖeü5 3À­kì=ÌX2GetGË´]¨F–˜•»e%è¾~ýú³\ÚÀ€&ça ebrrïñ°¼ˆëÊsp2]Eþj_ûÞq”s¼>ûaÌæŸ³FQÉž[F"Œk/.R•¬=ÌìgÝ’ºÔˆ ;úfa}5©Wma$Æõ x]€áy±‘G¡”J<‡ÿûÆó^N®Û™g&ÎÞ@”LX_ÁÓ÷©ci$X¹ÑL“NÜÅIŽ“5,ïlw¶ÇkÊòñׄ[9sŒ~¸R´ýó²Åþ޾Ô6ÆH¸b´ ŸJ>FD4 KV䳿PÛzIM1½Üÿ7@UGgy½oBáŒuÀÛm¨@Z ƒ%“RÀ–Eå–‚ ¹·'Š{Ò}¤b?M–é¼Xé4/±Î(‘¦duBWÑÌGáD‘Ù²;XÜAXÛxnwAwôkBZE»V¦íâxvøkUŽ×Â%ÝXBŠ ª.ÎÛ¶N§Œxxô ¤³ GVr¯ŒÌ¾_b¦y´ƒÔ ÉS$H"0Rq%¦ö?³ou׸ÝÄÜF[ ¡ÓÚ‰Ü&8Ä}EôoÚNê'بä©Ò쩈š›Ã(ܰãß%§‘¬¼÷âY¥sj‹2E6¿ÏbP](7'Â0Ú~t‚·ü‡Ò.…éÜŠÀ3±ª¹ôtÊ5þ¥“úÆoõº"\ÌQÿbVõE¢‚Jþ†%Úþe¦Æ±äE,£Ž4³˜×:®°ë`N¦Æ¢YpbòF+ÑÅœÅqé§Ã/<•4²RÁpa?Ý_´~ø1‡&ãS,¶…S~žõ ÝpѶ=yiéÔ~¡6‹‡‚gmH‘!‰Õúç‡ç{1ö›£wT¢ {FóhÿüUË€»½›üþd¬ÔR+þ$\Ò‹ŽÅð‘ O%\çŠî¢ÓócðíUü‡¥… £ïtX>;ÉIÃr»¨·Eíµµ¼w>ÈAžÂÎÊB Û΀2JêL `—ŒôËñ6²ªªjs¡¥)Ôb§øõ*û³ç”JÍ»º˜ŒK ÛaÈÄÁé /ÓÖf|Î>w©›òµRÝ‘—ë|÷£ R!ª×G@ct0k 1Æ´Äy¤8:[e˜6F9…¶¦æ[eãÁTõ÷$búØ]a·‡  oòqÅÒ Æœt«pq§}Þ°\>Ãÿý NÞ¶cèû3b›ÓÅÆáEV-ªý5ç»QëßëFý— Ÿ—Mr’³×?°¨Ñ+žŠôfÍzÒŒ¶ì©öš)+ w÷JP¥áíÓ_ '!7Œò.'xÑ _:>ò˜9Ío}•¥«I…ÆÃçð7†Í¸#Ö¸`3üñˆ^®ííêéñ˜÷š*Rëa©•UøÖÕ8†X캖—ôêú¯WT1køy’¥ ØÂõq‡‡øHѱL †œ™S¢3øC’ÖcÝãŸÏ¾Ì»³ëÛÚ«yAЕ‰¿9q£þ†­‘J'è=@BÁQýÑàƒ{¸…²(Iþ…Ti=Ö»÷g]†ÚâƒNžú™cÿbÛâ¹ïò[~SÝ7²sMüÓÃ_e)°²åñ•QJð¤bÚ’2óÍǎ̓nÝ'RÄ]K 7{üxx—oމ·´ÙsW{do½Œ—:«sh+þJHIQ¯s™§PòJ4c@–1æ†PoPÞ„Žát俜ó7q§,Å“áØwÎTKæJǸóí’û‚ãRêqlïÔ§r°iwÉ éãIù¨‘q…QQüŽËMy˦ §ç=AB³¾h‚áóê§rS sZïí¦,òKlùÏÂáš™Q†¦§iߨîjŽŽÍ¹ ¨Þ–¥×„~và@‘8Ò­úS31¬¢ãÙ+DY6ÝcyÆÛqT×Õ¬èä„ ÄÚ), ‡ D²ˆ¶§4r7ÜõS¦Ý¹â)øŠG"AFòŠ.ÓГÂì¼Ätsù`­ÉÇØ“ny͘,{Qðzµû¾Ã¨’–”àHÍ6D3ãMvü°=ƒ†Œ×+°Âù0¶"y••‰ÌN¬1ò7ËÄws€I÷WÇÖK_3IQS| ©áN½ÐÀ~ eºáÎS¢MÏ…švDÅŠê•vg°î;½t‘~Þtq:¥DÅ_øƒ@èã^禶šDrÊ~¤ŽÄíæ"Œ—ÅBaqM 5F|ÝɎ먦µÿºžU½êÎËì׆n÷¥žYAß1× –§£ ” ò ÃïæÏ> Iúå? Ó½²³¹gcÃj# *ÜõúXhØ]^¨û‹ÄæçÏ0®…kQ1QT…FÅŸS<-r¾±ûó‡a*ý»²2Óg¡²v´)E9£´Ry·AUCCà2ÑÐÛð›þšBÏ÷ÇÀj>ݵX8md©mɹ¤îú´öZ~2 ùvµV€å­i¦™FÁnû7ȹù?ÊAôˆ-ÒöKza²Ê+Ô¿SØVƒØàXÂ6ï›gÆ­X8ýÕ2Ø?óo±<ìŠtqW+öÃ'£BiÂþÝ9¿J%Jú†“ä ¤æMÞ»ª÷hŸcukµœ`3¿rP¤ð8¨*$ó‰— /ɦÏh[HÕDž³Ü£©yÍ+J”aXFºt“ËÈrÇëÀ=:¡Ö—'x;3”ýJ’èÌ^~K]I;=Ü— +4)¡à&dZ‚!hïÚB¬°,¦ŽOŠ‹p©-)î¥':Î_ O|£ÜÔfÿ¦}†7þôæÂ ¤}ÝöûŒ Ê¿0Kž@Š%@…ݤX¦÷࿱@2]p P¦ê¤Ëd±Ä~o~*¥X NñgÙŪ,N;ýȳ k𳀚fzJׯ/¯Ë*C|ü\º”-…!&Òš‹Âù '1hU5è£ a†´wê·‚í]èÂäºÅó³k ~ê‘ /4 f›ÄCò4î%¶Z‡ÅÊG]1§³S ¤n2‰zÆî¯ê`fÀÆK„?¢<é+NžhZœÄ[ó#Gö©{±¢Nx§3£ÔŸmí*õkL•Øû±œ µZà %Þ_’v¾APi»bWsƒ "5TÁâB$ÜZ¯wŽÕÎæ.zc-NNüÈA¾œ%[b–ØC¥^þ_*¾G®Î*SùEL#ŠÆ€eèM†Š½Xž²¿ŸDXßÐÖ÷µ_èùÓ¶F ôõqV;óå?ÀF­3šöËÍ*³ä(ɣʪª¾¾>Ú¿µ…€PJH^pþ³™áívt×ÜOèî%ðŠÎ×Vg}è²³«[;༻ÊÓ›]eÜ,ßGG¹:ˆ])ï—¢íqiÙç®ØwæîNÃ0YÆi![j5“u_ãîGç…ÄÎíçÒT£Ö3`­)†¶š¯^‘~Â<šþn—QzíoÕ°¾ßaËÞ?IÖàºßgê\]EÛ­¢ßPB”ÓäèHJˆñ 'Éæ'm3ÞÄ”aêÚæ©¢§˜Ïע͞97'󘙒A«««ü…þj÷ó{ÞNŒ`~²AǾñÉäË“ü¸c¥ódp¥,é帋šŸ$™oÞm§Ø#Û@`‹t/+öŠb´ä÷Óy‰¡³Ý÷éOa7ìá`ç™—©Ðj>ςڽ!aé s)Â%y|’W˜ÔG…íÇ?ÖE[6is«E¼Lv¼,tcD?“¥oËÆò9îþ¤*{"!Î3 E´%Ÿ©aw„¯—ƒÅ!KÌXËü̳°˜´™ßÌN¼,ãÜpÔ4£M^$áã'l„ü}«¶öV‘Ó=ãïæ«SÊ®LñÖA\1ª<¹ô?çÐL¸ÿÉts§d8+‘&ìá“ý|ΜPdP»Œ£âß–Ê™vžX†tˆ?&3$b}|‚,“ÐfFšˆËp±ÆïÑ‘Ýqqnïè(‚üõ¸{õp$[™Àk³³¼jHJ}¾±”’w¶Ž«Òí)a­S¼†¶~™•¬¨¨¨¦ÊåÛ±k@q—€DËf~®˜fI t¿k° ϱ­)ò±··7hiä;S¬};77-ËÑ‹ÿþ½œËfMºŠƒ´gïFšÇ€Ë|cŒAÆŸ[×=¤²Â®B¡Š‚X˜aßüàjÓÇÒÔ¾ª>dË%¢§{*1tR5ï¬~4R³Y*oC©Ž>Ø¡ Ÿ(l,…MȆÄ7&âV“ Ÿ‚]Š?™±Œ?dª‚µoÀRÜ9{{ÌG÷t»Lç²…Îc,IV¦­×DFF¦©ò›é`1ë ¸)ÀPtÆÏ}ÒÔ«³ÌhZ:–Ö¦•¿`Y¤Ï‰ÅåóÞfH^>ã#ÅïÕZ¶ÑÑÈúënBO:wžb팙Hi÷°±gwÙH™™un¯NµT~km8ÀmŠ¡¡ÎøÀ™Ý)˜Ë´϶µ³Çuò‚&Íì—OÊÛóqܽÚyøÕ¸¿Øÿ”m¯ñ,@J.˜ÇqêÝÇ—{ö+²‚éíìKVmáÛX¸µdˆ” à(ÆÁø‘Mó›!†]W¨@mмíÖüÚù6Õ²çÆ‡Çú NVŸéÄði`Ž K‡³…7«qOQN7­AÏø-hòÂÌÖÚìÎÒ.D¦µdØ2<À€jû´¥‘Û] è\™4ž°4ôCºsjÖumÁ,çÙ7cå5%%нw¬]¦GSûO¿š'r­ò$ÜÕà*´lªíà ¸íf” $)ÁŽ Ú„”‡¿d3º cÆgäö÷xHC­Ö‡üþa¬ðïßXw6*Ò<˜ëcr­ƒyίÉ|v³¯f]Ÿ$Ñíºñø GÕp)˜É[ù\ âc){ð÷˜š8Õ.·..˜ˆ@/ÁŸ )æJÅÆî†n™R^±c¨!IëoÃÀ¤¶Ô5óGÕļù/BÀ‘„·®Ù¿"òŒ6ÓJ „BuƒhRBH‘³Ÿ±éR^ã¹lí??å„ÞN”Á¢¯Ò&϶ïÍ“vžŒéä½_{%æ8yßo¼žxšyeê #%ÃÖZ™ ‚6F ·4ºD´ -Èv P‘z´»·O¾|)d$ÕLy &aXc¢WTáõ¡ž÷NR$éý{Z ·œ'Žç¤ƒû ©2Òw'¿JÄ7ÏY(ÿÆãó•az¶*`»¨¥ôãfò©€´¼„0DFÉœD¢«ç-¹2…ÏdÃ6BfgýµðýN_‘¡±1Õáᑎ¤¹»ñt>ÀÍ/ƒhôú%¿”ýbðÅÜXw$™Ï†îoWîG?SÄ ÍZÓ9Ïp÷j›rJKÏ>ƒèΨnÃ:]II¶ž)lB"b-vÀT |%8:é^¨D©Ò€0üÎ×è7–ùCdÞáå§ø:‰×ûzîÇBFŽ£Ï+ÂÄ*++5UpO÷9Ç_([…ÛRì>šx1¸¥•²ÉÂ!¿šml|œº ‹µô˜²›AY7´«ÏÖ-˺+9 TëÈs^†3ì¦x•——÷%š¤ä}­LÆ5æ(&%Hº¦Ñ Ü)1ÇÍ;¨BH‚ì3‚>Jyáƒ$)n8åï3ƒ|S2“§Ȧn°HÏ©£o7ü8Ã6¹Úéb²©Íö“÷)?aôÏeQè’R…¾ÍÛ­ýæG£gˆGva–…k–ј*ÎxÀ…vî¢êWý‡Rà¸Ãl0…1_%¦×Ä5bÌO]½7EÊÈ‡Ž óxQlÙ,»PÌmŒLÀ¶ä&(© ¼b3>ï>â½ “B–qw¶2ÇŽØù’Ia”¥Á¤Šy–1&~`ðþûh `ù†ÚžñÐñíh^È‹TëüZI•Ë>\¸œó ›X©]éŠ7‹G÷y‡–qqÈ»Ja Ò%Ôõú®bdã»4^j/Ôªòºöù£Ñws#ÐÊÙ+«Až;Ü9À·‰´{áõoÜ/æsóSd/¿—ðTUc„Í’®ä¸ù¤Ý澯Gä‹CS¥ÉççÎÒÚKÎvÕ´?·ìEJ&§¯mj?ÂTUU¦eë‹ ‡¡ØXL]á÷!ß’0€oÚïTì~}Œh€"nÂõ“ã“7r‚®çêµ'O6}ãR¯pkä0ù€PFR'L…ÐÊ…ãúÕk>Œ2èOæúÁï\IP…¶XÆcUÍ9¡F‘‹uqÑ]Q^¬7¦âP]cf…Â$MHá#M!¨«45Í7©B @;)Í¢Ýo½/­æK<Ÿïj4ø·ø¶¼pIÍßsû)u×ô ¢;óøÆü¯sˆË.#yL¯+ʼ)8w§žú,üJw`7x_¡ÈF©ËA¶@E¡$ ÑYÎâL‡ŽXBÂx«˜œÏ0„`xù[~Y¢]×ñèY-¥½3» êoP–Ë(Vfw¢‚ɼš„&¾‰zò¬–v,´6nnÃ÷…VÑOy¤êŒ}hÊ4-É+¤¼¡Â’Í$ؓɋlH+/ô ½¸ O<çKïø/f½’ë…²œ:½z?¼õ¹rØêæm4 §Þ¾èÄ}ÏM¼4ç•Û2=Å_²÷R4¨¯Zóo‹(©~Ÿx‚ l+JÎ ýç—îßJ,ú²Œ¿{À?Úc²Ž¿YÄ«Û'ǧôv¥@r¤¦D à’è‘voX¦[G¾ëˆ•nk"EæKLŽ ØÙ¬}Aµòl×Ò»¨Ù.FEkBpéUEO]ÀÆ’KܤÇX`w5Nm!Ó£^ç"P.2òçX'udø‘Žßg{10Vð{I:‡ñ \¯­ä'ó¬Ð‹ÀgZ©ùÒQÉÆ¦¦Ãã‘Ñnâ(Dª_½ –è¸ôHñ­¹Kø…EÁUªkBµsêÞ}ÛÏ 0îÅù0!¨"#Åëÿ»òÕÂ0-í*FýkYe¾ÎTºÊ/·°ô7£_µMºô`J¹z°áÄ8_+vÛo‡Òó¨j¢±T§›L|èD6{I«4,ø*ÿü¦>8®¤ƒòiãO1òÒ“¸Äi›¤Îç~ç ø]üG€;s­Ä¬q,B ‡(9}’wÿhZWçrÙÂûoÊÚ™ÍT…ñû¸ó_9/¿=úª5ÇúÛ[rf6¥ä>Xo«à ¥ˆMzº5öÎO®ÏpŠ Õ¼ yöFX_ e”IÇ$ÛAH| „†G`bàh%…M€^ x 'ç§‘Ö Ö½û\3÷›óSG•”“Q¥E¸ fÐ ¬Ô6 yÀ¸LÈáá¹g§«ã]ŸÅ·>{šOý~´ƒÃ" Á7žÂ/;KJÐhXg2dª3«š–ó-œüÓç«É¬Íþ³ÿ¦C%òýù·}¬U@a2=dšO#›!K#I¦õò.¥Ñyq­3ñhñÌc R渞lÊDº‰â·Ÿ«ƒ¤'‚’n“¬¾IJ.w]”K$eûŧCß\“ñÀB”µ!#‡×;Øq~ÍšŸn)ßw ŽøÄǾ&gš¢!oô ’c0;ð¸.u&ñn*ACyûÄ¥'–ñ.{2#äÕP%)Õ¥^ýÝË í}{}^¬ñØ4dûcçE‚–G©1Ø:D±W‰mŒF å!ãÃò`@h [¹¾V¾C>g–_~ Ñ4 € +ßöœr¤PïÏñYCƒßÍå_Úe][ß\]Èw¶µœ1J)·þžà§¤Ý½ãmGì=–tWaÙ÷T«å >°^ÐÞKWÔè5;œA»½þõ Ùo„õ„k[ÞÏoFcnbÇ‹"ŸxPÚðÅùƒç´™noïýofoŸä­=ßyƹoæã¸ “™+-Bf¢üX;¯2~Z¬òñ³ÝY-•Â"–(Ä ”u1ú°Ö¸8:ëÒò§ŽæO|—ŽúÏG{DÆ/§Úø‡~þþtBúIÜl@¿ byö`åOQ£Ìo¾ãâž}=Ї*L+ì/ܵϕV_í~Ü;DÔ•>E €TþËþgÍšIŽÄÓ¡öšXá³¶D]°ñ€õ«(´Sn¥úŸÇÉ# ï’Š-ÇâŸù/Ï|mjØzót<øï'î6][”WÊÚ¶´;>=p™{)Ú@8¬?y)Ä´ÿ8vÛ¬ÜedK1¯–PRéÞì¿XY ëí锘ýšÅ‚]Ooš˜¸½mðEYü®/ݫ͌t‡S}ÿÔå˜YŸÔùðPN°žý)SýéÚw‹«Q…om×¥{Õ BgN+±gÕx¿Àê ß|™×þΆ/§Ê_À‚ß«qÍfw]^ÝaÙ͉ó,XÅ}y9ž,o îR˜¼Òm. ] $;N Í_BC4úÃn9®‰Æ¼þúmŠ>¼¥ b^¼V—2ÜO;°I·¸ûØï›a±0”}*ò¡¦ (¾õWnˆ(<¼”É#èÙ6½å¤}Bv¶÷É ëèøøwåó¨>nã ™-‚€©q©EÑ]JR1ξ¾½‰(±²–în½œ^×)mõR=èɸ»„òð—dvŽ/fál?ØÐ“¿LþÓê_ËŸ¿kG«Ó¨­âÝFëÀ潇ÙßZP \18Ú|ôyôý É¿óXNkPƒ}« [,9IþîÃØû.Ãï*^übó>Û|ôúÕ·½ Å“¹jnÕ”|ÆÉÑnŸdÚ£œÞ†Pí/¤¾øŸ‡`à\üM²¦øËæÉ×;ðìRâ¬Ì$õÑÎ>eVD”І’-².’&|ÌËÍm3ßèu7ç¾a‚†Ó¿ØKNkâ æÊË.#-§µÔlÙNlvKÌn$¼ùý,icEºÇëÁ{K¬Û¬~üdã#<аšúû/|1è<=Å0ìÖ·åOcO÷¯³sPçÍ߉ Jóf¿­&ÊÚîvXxï\žÍº‚ÙÖ€­ ƒˆË“71¸QUï»XÏ€ "K/sTœhïGˆi|>pl ¦0*Ηæ|R,朲GÁ°^5,wv™`ñÅJHJ ¯J à|Ϩüu¸[dû‰§÷ÉvÏ·)ëõõ¬G’3™!{Šf®÷ üŽ_Ì;Ht/w„›µø×ôq¿ ÞÌOOh M_Xµ‰›|U*–x¡}‚W’*›Ê|Wóƒ\ˆ˜ù¢øº.ÖÁ—œÊÊÌ&–"ö|} |½yN w‹‘J¶”² ÞЖø5ùý·„ÿ}ÇõA»óqý„¹ Üª°[/2Ÿ½ñôwìÉ(¢÷8l–5dNõòÓ°~ ¸[ž<èµoFÅi‹i{¦-þ7G%VÍÉ»8úÉ_Ф9¿Ë(+?ÓÊ(=vqs<¬¥òSIß÷³W±÷q)°Ì»†OH k½ÚâSnÀ-àS×±·Ï+±ªÙ ùr1Ï̸X&wˆC´¡Ý1 ¢Oo©e“¦ŠC)G’AQÓå0rj;MɈå.Ôî¶Ëâá©d ¾ˆÌr-ÉzGü®ò*xê¸ßrþ5”{¢“›rë·>éÃóÙ/–Ãdý µ¤Ú½Ô¯1'2\Oð EMܤÔ¿Ü;d’Ì–&œ5¯uúÒ‡»©PÛGócí\3?¤øíÝZè¹?d¾º5­JJþS®~¬ø¶™:,rò)T ÜŸÑGð_Œõs>áîë"ñ#>ý†ÆüËRíÒûÍ9,Ĥ‘ņ"±œr¿¸ÜrõØçyÌxA" óö-ذ3Š-Òò†£4°f GæN>¡wNNµ”ÑÇ„ŸÑ)ª:d ÎÇ Ž;Âðvö' 3¦‚¬?½oòIDvÓ£gc)ȸÅFâΣñšíîMF‘³¬ÿG¹K%=A¶I†Wó)ƒáUµÕ:™îÏçyxŒ@ÌÍ2hg§éò'µÉÑ£wÊWßkB"’=Z6q]ÛnkCe”ø¥­êöŠ‚ 5¯6µÕÞ«?©ÕÕ2î¿Ñôéò÷UØ(vý`…6ÔÚPÏÎëf°‚œíè%ÆF8tñð€>ÊVvb‹ìL·pÀq7,Ϫ¯OÎÓHJ‰Nª?hÙ„ÃÌt¢P‹þ¹û ¯_‹€£1Û" ȘҰrÜæÒþs]dð{¶Eºµ^bÞA™ãù¼Ô·ŸùfG}\7`’‚ÈÐ3ÖIYäÙÛŒ`Qô§³Âò„Â0d $›©éŠjâÝ'G뀘ô +]‹¡xK@ªÔh0²W3ee@ò7KúÉ~ÏZs¬ùád²[ë<{±×´?žË®DÒSUõ[Î¥8IPì óÕÔdº~C˜d}Û“`G:ßäÃ'qÃEª+ÆI±÷޹}’äÕZ>DÁè­’o×ÿ0y‚€ºòõ8÷ÑlÍ8½óˆÑþ–€G¤….›3žiÀô#ŽPÌ\AÊ~h?à⸰Ÿ”Tp—‘õ§{¶ÎRO…ª …¦SNó\º··çEÏüñÒŽ?~üXþòV¼wÄr™ŒxXIlí¾êêê²äŠQæå—û0ûÓѼ›™2f墢F)$Såÿ²TÃ33(ØbÛ’»9x„~”$QoT·íÖu3N‹Ó­`}D\·Vž2…b²ðGlð­iË3¼'Ø„+¦·WàbÊÝ œ{sEÒ1…)œSB¹ÓE`ÒŽSò®’(¶7ÌÝcâl“_ 'Lbn1WVkò =dVìrM^$$h}HŠQvòü…=:‡‰û ņ½IÎÀž®v ·<|j¦»®ºÚ ÆtŸ\Hõ}?ß8¦¼µ4IóRF-iï% ÎYcvÝòÁàPJh [u‚Ì–MîWk·aºeÂì侫„ÿª!’løí½&I²Óm•±j‡1 þÛâДï°Gx^Ç`ÜYÉg<0 Dݞ㻓¶Óq¾¿³ûëMÍ={t`Õ:Ó×8ö¬ÿÕ³[n/´šAŸpZ銢TÚ }}Sfö|÷Œz§Ûú긬 *,=†˜Ã=õ¯WA{†}+x¬×XAU½ŽzBÉŒÛZn‰ÃØA½g×@®Z¢„ÿIa÷!¢ 4jvÉŒB"¡ÌÀZÂÓŸ$$žK¢ç^­Ç^{‡®3¥+*F.äÕ“ñJ©en“[×ÀWÙ€dqׯ¡ª»"“¨bŠW«6`Ç÷_Àþì©t…ïƒý㣈—|š:âW˜ŸÅÎÈ%Ž55J @ –Õq*k>Âï‰c6!á¡ÓAýe„üƒ×¬Qxk~Î?Ë€’¿Š›õHM?¡"‘&y#ü ÖsxÏ\sy›ºü­RMœ¼1•N]º´O¥®šë#íG_KKP†ÔèSI8×¼tnݱŒŽr”¬÷¥ÇÅèǽØmöÛi=Ty"Ø]mC²¢»šÉ †„ª&ñFèñ`[M&¶¥À>@$fh5ù9% ú?ô2§;*üO/þ.ƒuøÞ,Q®ð½1Ãæ5ŽE[¡z•ߟÔU>ë#Êw‡ßÅ_Áį%,¯ùwZp™©Ë‰òްÿÉËÈÈÈö0- £²¡!¹ Ó7VybÆŸ¿Þ²ÇiôÅúù]Gû˜°Ô¿­|‡zޝÐùqvò=ÄQóñõfAF29FSÆûéU U×8¦’TÉD°ÖÛÀê\.š)¯·tno<›]»M¬ƒºzÔýi·€užƒo2ލ՛àh‚‹ /PW\^$OÛÍQ?ƒ„"PJqz]ÿe/À°WÿôóvÁœH–·Ädjë@=½êb]‘óÂ,”.;€Ü/B0‚ûX¥÷9åå3’¬üûÐK̦1û]<5n¹¼Û&sB‚efö¼µ`¦ò9‡ó<ÝÛñ”{öD©œõIŠ˜&¯é]~g\í¡ôAQØDC“­I…]dÐ=†T,‰¶®E~SÀ©í`(–“\ZÇ`jøMÕײW’;wbnnßYhy~Ev¢ŠSQ8 @9—0`ÛÿK¬©¾~{o<ûßzR€u1æ4ñîÛ]ò^Óʰ°Åà±OŸ!3P þ¼\­&b3(’ÙFb¸ÞŒbr+áê@߃‘w<(I„OÚî¼Ož,¿¸A^hqy¾xLAñAÌî]÷ÎO×Ó­‰æ³ÇÈlË.b^Šø‚ÍAJAYf&}v÷Çë6›’Ë:Ûù¶¶£¹‹‰1K}€"‘Á{–ë»1ªC÷m“´„ö=«Ó–—¤ôcV^v¼{6”^,ý½ü®vZïÚ`*¥ÒTœ;‚¼°ä/ìõC«5búÀW="Ox"„룒U­-sàAH‚©¢ÄÂ{»÷°d‰ø[jË\éÔhŠò§/‘R¹‰Än·Í覭MquM ,ã‡G&Bê£qêÉ_æsÌ,wHúd‚+ÔwU\zª©á Ë]ó¿}û?;Hâ‹0 Bq Rƒêï*€x¦àÀÉ@,SÀ±‚Å3^ÜðäÎtÅÆßõ)vy3#³M‘?g.…Ü.3ÄtšP†% b ®t5ߞͪÛâ±–T€ÝòzÅù™ÐÓˆ‚Ì ”o›‰_Á¿–Å-k”x¼ªÐ” ·Û2ÄdŠ…^'zØÄL%/7˜—TJd±J0ÄoñÜ0KàgºÜcCŸÎÄt!:ùPxyyy‡IÆôW%k˜zÎã¸5ÊSìBK,ÏL&Èÿ5ƒ°ÈŠxb÷ÏX¾y˜·J0ú³D’¸œ.‡3‹‚„Bù×·Ì‹øÊ·M—8ôW&ò7Ä §xom8¡ì"rªk1ô oOò€± l¾7/s{2†Ï¾€khD3l½¤ÕÔ¬*¡E¢ƒ˜Ëxj£Žç½…©ioNœÜOäíõ§NrE¥üˆ‡o°ydÚ›$G¬ôJ*Ã/qêÌ Ú–’¹¸8 w¿þº¶;×ÈõÕWñ 6òòOo|‰i…¢^µÒÒ]功úW-.Smˆ¤«e4°Õ/…ócÙñ*hÞL˜XóX¸s„Fˆ/ø¾iP¯cßÃ7¤ÒU¦C…ÊÞ3ÿ“nûÖë.²v1Ž~Bm¿õº´ÒW1¢ÒdŠöAÆO;«Djob޹ѣ0Ÿ\3÷ßÅ`Q¢yÎX.Bñ2óº\F\Ö£p^)O%\½Ï`3ùý!e”Îç¶u“ž\Àï?>a–8·¾²[´þ Á×ÓþÁ»û !‚Éi"áþ}~þ>þÓŠìl6¦€‘Z×ÅRá­ÁB Ùê@u×°¥y£ÁœEš Ó«8YCÞæ;üú£¥Ãl­³ÌÕFwO˜DßúñáÀ½á´ÒÑ3¤/ „­„CÄwuû‘ÐÇ€âî­ ø‘u.¼Ô³lYhqTxéþîmèðº•îSßË¿If•ÏÞ·Gˆéý&¦°ª¿ )CÜ¢0V‹XÁpl@<­%6†È|ÈßQßo>&ZíŽ1 ÒÁ…€äùPÛMe{„U´ê'¾ö*Þ…_y"RQöç ªì+˜yíb c¡ãXﲎ:Nò•¡™Üóðˆç‹Á×ß±ØM0ìy¢©µë×Útun'Ón¨Ñðbc>!Ô½ºb1Ùœø°')‡¼°C?x FÿÀi ŒRcßvfú%üÕ·d'Ö“ƒm%ó¨´´n ¤3·_‹h9`=fúf´¦™&«mßä÷'´n,8ÄL†4bõ”|®…¼ûùò!ená¨BN,xi8]YíÀ‡åÉï õá;h‚ü±‹‚ ýô,»Ügßê­^"b*¿Oü\þ6œYwv¡ Dм2`AÛa«Ø$T3I{G£èkSd§yï/ ZúÌw ¥KSªœÚhñôû Vª0‘ã.^ºîÈ£Ïø ™r•ÂH—P'|™o'[áÄÌk­×{vcùZê«øË®Ï÷×AÊlÔü‹‘§ð¤KäÞÙ‰õUÐj[¿µ )‰&‹p¬?ZýI7 ¨V÷–-° ÂÁ¤«z½ª’÷ú­[TKÀ¹ûù¼Ï“òïÞ†°¯ýÆ“/íê±÷QŸ@G²6ŒN½Qàʣݙ­‹ ¾½Â+ôäF”¸¯§û˜ «ãl<>qñ ür­Ãr2ÖÆÅò®J¢(LÒYçnq–;Ÿó ¶†ÝÖŒÖ+JL€™Q¿]Ú4ÝèU¼Ò;!\{«2–ÑvÄpAî´·x„znx%5Ç­íÎz¨ƒñE½ê_žÈ0dz•AùÛNc»üHƒqF§ÂWê—/`u ¶Q›‹m¸åÁ›ò<€ÒÞýÑ4þ%Zå͉8FéîGIJáÌÁ…÷KI´+\æ¥öêW‰‚¯wÅ»â[– ±+õ” ­¨`TÞ ÙüK ‰°ªUìŒ8Іr`6ÓAßhß´JaaaÉõ²ƒþ±ƒëÎÞjœüw…„†C7Äíî#• Ê÷)Q©0¿pTŽø¹µ:>@šóskTëຂñÀdoœœœÑ4"¡ñìõõõ³ï×’xWÛü€¢Ÿ©‰e´}xRbA°òŽ| ‘ˆWFq¡F3pž\Q·ücmiº9Òãuó´o´Ð瀊 )5MäÕT›ûδúñ, *_®ú­}±ç¬]Ÿ‡3Qu ÄéÒÇ`$s;ÎÃN¾"‚R…zí`_#>#Ï9ŒŸŸ!¯÷=¦,}*\å4V²4>„ ²D?¶O 7¥NCt·Ù°G†D"‰)x#£ÑFÆ÷RÕ5cž u©å(®qœr[ŸÊ§Øà2¤ÎM>ûkCÒû@wÕnà3†XQuq¹YÇ#Ra…¥¨JíÛ(VôSC¯Ñm!q)*BAæfZÓ4 v›³uBQT•­$¿Žæ}5ù¸N–Z:þ¢ºÊ\íû­; Ë[d| »Š[øŠÊ³ÇÖÐïÝ~»À|mý\Â>>>Í'¡æ¨²²òg‹G¸ÅrùÚéê(ä-eÆÆzá¯ù¿ÃÖfÒH¬'gÔ¯6äMÏa'èe, ‹@yÜØ `É×6VK̪ÐËoÊ'&zª=óᛋuy”ƒ^3â’Æñv¢ôgQ²Û"}à =ð†ðöqaï>Õ%‹“¹ªÚ âø‚ ßÉÞ|ªkëewÂ…ba¥ßñ‹«³Ý~éýf»e£FÀ'{¹Æ=ž+| v€R(¾Q];º)¾,†?©ØÂh¶fº:ß© ?õ:E¥ŸëÇ"`¹viøKE }|ìÃ:BßâDÊ w(.=zT.‹òºÝG§U³Í|sˆ£ß#‚“Œ±mì¹#»`õúrÏ~4¬¤±ét7ˆ—¨³½*ß¶[W/|¨©Ê ¤E–8Þêrè÷<á‹·¤oà(Ý-üq÷®×¸¹ƒÑGÃï%‘÷¿?¢\8Ì®üÆÑk4ëõÒš³È®{Š¦Ò¢©D+’å .•-™•Ý$ÿõµQÀÙŽäú—téó…/‹é;ö†æj~_¢†PiöýŸœæÅÖMçe”»äw;‚sPÕΰ( OÄþ[K`ñÛÂo#"cÒeÝÎÆ.¸Lprzú÷ŒŽÍ wZ©Û „þ\ðZr4¹0õŠU¾ª¾˜Ýçìr¹öø{®Í©/™e Yå€ñ®"’½hÏ-ä©…ˆ›ûõˆˆ‰«¼¶‰$hºâ5e™Ô¿qaÑìßà R‘Ð÷ïß3X;<èŸIa°f'XX컓)®ßÕÐoÀá¥ì9±ì8Dx±‰îBzéEœïþB‹Ó\}ü~ðyÓ?ÄïÞÖbƒ‡ýPŠnIˆûñ¡ø9r¼êIa ØKCþDŽà[/B3$Ñü +(qÄ7‹¸‹ö·èï£L÷¸¹8´°Öšú]e¹eÒö“=N¦ýnpÍvHÛ~[ºg–j$[ÞúPhƒ™P‚V:¿Ï»5C(. ©åcyDœÉƒÍ9Ò¡£†è\ýÃüç±ü••³ä·ŸÏpå1!n`JrÈk#5?äA­á(å Ã>’kêÜ’sßk–Bܦ šI’\~Äž¥åDEÛÁF?µ8]ùœ nÁß±´ŒkwwºÂ-}’upƒrÙ=‚9žb${âÞþ¾7Ƙ9êï&À Dø~‘×MœæJ¾Y;o H,78‡"îÚpÄ!ÜÀ•……I­'œ{ÍÇÚµN¿ÛcÄ’··Õ$aH™Ù:×õ€Åk«¨ÉÏž‰iºÛs„»×nÇá{™îµHB, Þ¡1yH¾ž×|̱"v1m‚P=pN„Nm>úɇÕ|åžp‰Ü&ðÝ¥©;ði³— \-ó±”·Æ}ùw3Xh*6KÌÂ\w”ï£t Žo)9¯2_³…ÈÀ@aÝð©½|i=úTVîô[Tî¼aý)ØsNUN%ÝÄÄÅUÁPÁ­§ß]gË(Ý0-®yõq‡„‡”¨ê±›Få¶Þvù{[…#<²<ªÎòÏã/ óqÂ-ä6‹âó¡zù_åDx!=!ÆC=Ú)ò09r1ËßOY[ׯ§Œ¯®tE¡»¦ÀëÙÅ5°UÅbìªA0ܘÝfÜ.SÁ‚†eÖg¬Ží„®j:Ân¥üôq8¿…7ìnC/òñwʱ)Œ¥@g¼>Ý6b» ïb‚õemlo¯¢Y#ÈÒK̺Å]ñhrËÊâ,›¼_#o.¡qÈë!Åø2ï>˜Wn ïœð ~#mAœõ&ÃÝdEA%êæ=šÂŸ…#薬᫃·b¢4´´Yà2­­rè/‘=Ÿëh9_èaéI0ÂÞÑßþù¦$®ŒÀ "Š›eݨpøpšEï6ÝíEäšmëÞu²õuC¿D!×eïKûÝäƒHJØâlüJ®d*§ànu‚âø²î0?Ì‚T ÍãdÏh§Jÿ‚DÅ~0%[>O ÐN“øA|€|ÑÁì~¶ó;4.Ÿ ž|ZUòñ­.Ê æåzº~댰y½®ÃnÖ?¼‹YïqcV‹C·&Ö²‘ÿ¹çVRÔ¦%«¢¢2Ý "à‹Ë£¿%Öm_Áֶ¶+²=¶ˆ¼å°›~g¡%Õþ«ß»Œ›?\ÊÌÚƒúKÄ!ÄÔA,¤]òãgç ôj­?[þ?Ž¢ò•á”K7ħβªdÝÂ6  AQÐÕEÙrf_h}ò¬«qÙ'>“Êà[ÿÉ2ëaù‹ÙÄé’ïdÎvª†ÀYöNˆMýHÕ¦ÑГèPpq*påA}3Ø…z*¯Ìåá@š©Jð; :è-w/¥¼k1NoÑFìIÍ©‰Ö]-a™·¨ŽØƒåêÈÓ²ªW¼ …ê騖ø|®ÁBve€~¢·Ç0ìÇñ•3»ÃyRP*ˆ@g׳Dú¹5ÒÈñW†è²§ ZÒ˜ÓÌtt}=LoÜpá0 åtDÅ\Ë_P¼Zh. †`7HއÀÀ0«zAè8Y²+½·´`ý+ÜäUGGGóɨÆÎb['Ýô®Aª 8NHj¤Ü‡;•üé£Ò÷÷™_]š_¼Â{ï4HcìüR(ì½V¹•« Ü0päÚKÔ§ ¾{Cò°çƒ &&ÔÅÆßW>?qɪ«KZXXˆ%Æ|ôèÑÉùùØââ0اK^¸õÉç<…pXòzzª ]ë`w`­Ãg…VËâ`¤°ÕÞË,ðÞÅúpWSA”ó@ÏFü€â¹9³¦¦¦ÛɆ^,“ìOPEÀ´Ñ“§¥¥e.ðxðäì¬ì©ýýýõ¿¥t÷ôHúq ›·‘,´èrM6ø·çhÚÓ8zhl¤ëzx.páw=±þ® «­Æ,-€Ü¬#¸4p“ çç°dtÌÞÀwÇ‹ Ò¤¼" ¾úãÃAƒ¾î /·íÂGçàßÕŸ$TP\,åZ¾>œ±~:eÝæ. fMO,£¯oýÆ£â1þ%ñÄݲH•H”Åú òUP¯Ž1˜ZËïà/jTŸãA>”˜·Ò׿ù£:¬7~‰±%öàA÷ÒË›7oÀ>pÿçê”…!ÈÏÐßbd ˆ~Ñ—Àiäåø8/IÐrådsÌbͳ—…b;Éf“>B ¡qyV÷Y:ÅgÞm$ ²ù¯)¼ÔRÝ‘\.aÞ†žcl«5B†(¿}õYð[ÿ¹¢˜!é±Vî{hK%`Þ ¢e™ú…‘ 'W®Y¹ ••5aº'hÙØ™§¡¦Úè¶ %''·hô|ï±>$rÿ~çȉkË)iÒ>±>‹Aâ=‹µªóû·÷ÿZÿÞ'Ÿ]w­½Î£„ù[o<“?Û6J‚ÂU ~³"h—ð)]εºZ¬upáÏ–'ß T!!>l‹Ö²ìììi`¶Þ³¢⦜x$º‚âÐxûÅLûˆ|fk Võ·¬qýbXL—MÅu\xw#°ç1Ë,ø,WvŸÍ£OíIð‚›Àw=lµðg±0ƾ¶¸oîQ0ñ±Y¤YT[Ù®+5êUÙ•ñ‡Í3ÎsoýÝ ÿ*(CòÚ&éØtÀÂF Ï¸ÔD-)Ô!¢v]ÿõ™ÏhïïÕŸ]Èëò¨šË'Uû‹o`ÅÖ…M\We+Ä ¯%ÒAmaҘɒU‚™ <ˆY>æÎúîwKlÕ!Þ‹EC¯txîæÝß¼µÞ–§ŠkC³]òßw÷±Å4Ø55L é3cOÎKžg•}&^g.KäásLZıb3ãr«ŒÍH:ò'îkom*\ˆD~¨®º~þ{Ý•æ3Ôv/R$yÕ ü˜øÍû"‹ôñMw3ãI€¾Çõ¥ß-µ?xb%~ˆ7ìqZbG8s¬o—µ›]WªÏ®Mm¨K•¡±@5*LQaãzçÚ!I¤= cÐqrû‚ùË„’¨¬[r‘#I®LcˆÂ`æú=£=÷¹gÔRs~ tŒÏ¢ ÚÝöhM²ªI–/úý_ÿŽÂ ßŦñP3ïÍÞ}¹ƒŠjWøÕ¨šïâÂI»iâÇ Ótj]´Üt•7¼˜¿wãårˆF1Uq¹îþ󯝛@F±êÌϺø´” ÄlRêFCLƒªÔ"ƒ…ú^¶©l8+}¾ ®]4¹™¿½M¯›Rä¯-+‚q7yöŒÞÚ7ó,-Ÿ|éU7Έ…–{ã²ô«²C©bV3Ó·Ä E‘ÊWâm*d3ée™Sö‰/›¢nºnÒ‚^-ñ!3}qÌi¬1+¾³=údzLÍCù°BÚyà‰x¢40”PB-¡YÙu°{·Õ˜«ÿBXíWž©þÎrµ…ÓxFÍESñÍ#æ±]¿–!{êÓœvïB“g+’í;¹Da*[S¢ ©À5ÇÃ%¥]sÆÐ"ªxþÆ£’š´>øŽ,½¶²¿®øm×Ⴒ“çWÆWMÛ.RQ ï²vÞú ×Г˜SL3ÖO[3?…+ü0ó fUc«wÃwo”sÏ›©Œ A{¹w•¦ÀœiÓ ¾Ú¶Ú^ Þ÷#ŠmÓmûo‚v®[?îƒËuØA¼Æ_$· ?àü@…;§CáYÀmó“ZØJq•M„æ™(ÅMó™/å Ö‚ŽþF„¹ÐRˆÿ(SÛyœÙñòzíÆÎþÌ%(Õô/¼ÔÀð*ÜÝwy‹Œn¼8É'×Ugùó*!h§8­'<Äê:Y s˜g† êˆXk6„Ü,wm]ê‚.üzE·|†7]ËNÎ)ƒ=ŒÁÌõygjOL¿¼åwÀXíùw]múÛ¦¤þÉádÝw. )Ū*ÃÌÃX qÞe‹X*¯ïiILjõgÓŠ(êOÚy„8ªF^nŸ‰UOý>5ÿþU¯-à…üb¯|õˆPíèbëžz}Û6žiÌÀ.ùIJ7iëÚVû¹† o|¿P…hž‘}¡+£ÃIþm©É#ŸóÓ&®óC¯Ž¹)j0”õvI"° ×+TÁÖ\Mœé· ó<º'Õð긑ÂE¢ï{…‹>æÖÖ‡çß|Ö¯_»€‰üÑtÒ ’…r–ºÌW¨;‡hQ¯ẫÌ1¨>£Ṷ̀Ó°Q”<ŸûÚÜñÊ‚\Ϩ¶€ÅÀŒ·´Í(LJÌ\ÒŠvæÔmú˦.ùû[S0*´>ÔæÔK±nŠÎ0qÜháváîxÓ…‡ •½úMÉæõŽo+Ú]‡O{Ì‘g5õ`4ðvœ«¼hÛŒYe~~Ù=óÙ² µg&Å©à,1à£Ï`rp^üh“˜0¹bGé.Çíîš,ÿÃk}[¨Ù$Æ´ksþÅìÔ g¸¬€õŽØ„0YWx¢ˆìÉ]/gÛ·Ö¨/ Œ¥|„K ¤b—/F쮸.2Ùmõ½¡À쌈¹°“6˜K¼ªÏ¹‰Xt9/Hï·î’ç­ýÓ}q#3(ª4ÐyZWażôÀ 2p]&޹²ƒ &©éO‹ÿÊ€føôB¯ž³éËÌ,ñç».ð¦šÖ>˜Š\¤øßIYŽê?Z'­{ÏPóóÝ̇2§®OÊ£ñþuÀ±ÇcVñ—Ò@X>f¥&7n5µõëtµeŸ¨¶Y¼ò6yã ±-W*P¤Úå',¥„åÒP;Í ªÚ¨ Bz› …^Yøí뎽¢·AØ?¹îψOÅPû|\\•q©»~ôäúþ–ëô앃;»-!q¢-oá¦Èê¦?Lh¸cË6Rg³v_Áf¶À¹ûT(þ·Ö|7ÇÙËègEGŒЫò³»¸ÉÂ6ÖM–4æüÚ„Üw(ø¾oÌÖ¡Œ¥Õß.¶0J¹¾Œgþêè€Þ“r [Sb*_Z8ªˆAdMr`9ç¢àôJáiæ©­ò¢Å”tkÜREðµýi>¬,¨Õ-ÓÕð–ÞŸ Å‰<ßÀç iØHiìD0ª;/ð0ÌZg•æg[©`²ìÈêø¶Ù5âô&ùñ½ó[¦Q~ШŒì÷l\ï»¶ÛMÖlâ×ç ~k []ÜËE!º&,Ž4½W²élƃA>JŒæÔd)«q”ÁÖQm_ÛTn¿çƒJëÙŽA 0¼IÜÚ„p§çŸ¬ÌÛ¢7ƒø§ÖÒ½úóÛºQ‹â3qƒÇáP…™—ÖoÛ4)€È3%{°‹Ž”"Ùä7 …¡*˜g ¹aEÍÕɱTk#æÕ_I%Sá6B­‹Ý…q);ù±-®ñƒ_Ëk4-ú̦Ϛ, IcÁ³oÕ~á°¤ÿÊ"üãÏ8¼Åf$ býƒØ j;‹‚Xè"ÙºsßüO? ‘m—Ð ª÷Ö\–=¨é¢éÉA%rDuÑäÄè¢L¥ä™+flͧÞÒPo’ò) ÓeVžù ߇ç‘,TøŠé!Õe5Š“+µe_©`3‹­ß\~ùPŸ=— Ȉ„Ń™›ÛÝLk­Ø„ˆSäbÁõFß 0Ç0Büîäk“^(B4…ŽÎn³&ý=¤5À,9 ⻲ÛEŽØUPµ•m$}‚Â#$*1!‹'ðyÊÊÁŠDüËIĸ›ÂOçë™É²êš}¾£½ ¹Å–]ªW‹½Aµ³ƒâû³MeíÖÊ {ÉHž¾ 6¼f€ž©ÎbœÕHo¿}[òå¾ì‡–À)V¨¿¢B ¢é|LåjÏÎ!àÌî;R·_ž‚h4²µáŒ1`§í-ØÜ*‰FPÞ x…øÊTUeFo³w.ܲT0ïÝ¡´“u†¯¥¼›¬ÌÖ½^vîÏ–exË^Å]G}þ¼q/jÄK äòÙø`ÎE•!zjï¼°äÒuµGøh-µ^›²³#§A/¼ @š.S^NoÈÝÿd³×ÔC5Ÿ»ƒ¶(Äa³1™Ç9Ð¥â,f­Šê–ß³ÒÇ­´J›4·ot¥Ž™€òfäåâÜ9åaI\åíÈÆâ>§˜™l÷HèNÇ ˜°çHK HH²ÖŽR"µ íó‚îõÊØ…d-8‹‡K Þ®=Á¨ê•ŒÉ³8/ 1dÚkkÝ{Ã'Þä(l’¯8îÔ[B9©È­‡i„ï.QÝ”@sÃ3Èð‹•6]îˆ ×’é¦ž?Lm‘ÁÒhÃRõÑa+N¹Ä3[LÌgô7±›VjaüyǶçì`†ƒ>\7~Óv‹.Ô”e£Ö¥gæ¢b2XÖiÖ´þj ÖàîåQu\îÁÞ˜ÎM‹¢êJŠ ]7f úö~ü'R­×f±¿[˜ñ±N11Ͻ7Ö+â(@ñ0C#pG’~ 3VöÁâCòo°MëêZ\ó®°™RQlµ‡½ì¾I°†¹Ý롆h CØ 8•ž\¶|FßÖ¨oÿÞ’~ ¾%  WÛÚŸ±ïÀýOÿ·Þú4¢K¨;EÛH^ñ]ýÓ’+l,ý-‰b'ô1D›Ø‚2ö¯†:Wgoóµ¼Ð³*–T–(<­½4³¹žÙÞ¿I`ïìúQþ´±ŠD1Âô5Á/-ž›>D—Ü—øe¶4éãÍßäRž#ÿÖÅïÑÄ‘È ±›ñî¥G¬úÊÖïñ‡‘°}–ÈÆuS„|x'²+ÝSb(v4Ù˜Ôò¡RÄ%Õp²ÆœnT!Të  ‡H¤Ý}\V¥êéFÜrÈh3ÄóWz_µ³ã .kXÄÝÙR¢rKE.ˆÇ‡Ô6óaYœÃZ~¥·$íƒN Rã¾´˜ü2Wîä­BŒpÛþQú1X¨*Ôda,ý½ZŒ—î;§%©y5\V¶3Îr#¯úè’q¦’×ê´³¾$™À¢HîdÑv›qÃë–xÅ7ûÓ;šœ"vK»3,QИˆkGêöi#Œ$þk5äu"å{hK_¨IXz>°ç1u?Þ'ˆî >Åö‚#Iq¥ùæ‘ü|¡³ù"#‚XpêäèCêœéSæÎ±ü6޾èï5$‚ÈG™øÀzéÅiVYÍTœóLß+€xS[—ugh^¾E`ÜàlÈL î8 ÿ´Õ!†šýÛ¤ÉÕ4³   á¼7šd{bÆQH¼Ke$œ #Qüø#]>]ÚG°ouxcPÙ–Ü¥xzúxȈB1Âýµ5if1àKç«4­pTà<Íšç&½HE+ÙÎ3g„¹Á 0ac@º‡~‡{W-(ð¡mfP_€á q“?½*w†ç)s‡dò¤ñÀ%ó¡€üâ°¡9áÎX`Ø3ò•vO[ê€.–”lÃ0†¸Ñèœ>†,@G'ÂcÅ:¼¸XÂH´WwØX谘΅ɓÅÀÏ?tíDzB…ÿ–¥[§‚S¨pÎëƒeß8•Ї ÓA¶¿N3Ã4½ôZ$ר])Æi~óúÏ7Ýo”î‘ßI•:ý”áFXˆ ø&wÛåT×AiÙƒ‰M‡gÊ`hETE|øp aïU½fJë»*½Ò»†°]&ÒA J|òˆ&°¨ùG–ÝUé°&¯yªìöþìvÌÁÕ5<1­pô)º1¿A\¡ƒãï(³žcœo¡]—6€T†ƒfbt[šÊ5;Ðt ׿òý<“¨l %QL¶ÝgSP†ŒÐiœ-k¡“¡|¯€îàÃ?lî<ÁLÌmw:Š/ÌDhsò7²”&ãÀ¥þ9¾ ÊžÔ&x]Aìúî=ÍCÃnߣýoàõ?i à֤$·*O‚¿ã.2+² ãÔ«:›’6›žìá²ÚÆ´DÂUñ¨Ú Dýå¹.½qr"pçŸâõoƒ"á‘T€$AKhM †8âÓ«|1ÿ§Õþø¬aº&ee|84ê»&o˜„¨ÊPûçfš'˜ Né*ÁHu ,ävCm}¹P_8 *ê7ÞÄpñæŸ~Z'T¿<À+`ªEÉéŠsAìV0SÞ.5¼¡ ‚ÁœŠ5©®1D·‘ØÕ£K 2Œq;N9¹vòÜÜÝ?ÀÛ-…:_?öYzzúôí)2Ö+\•€Ui 2˜”d«¸Ù“yÁ{ëØŒpSRFÁZ $+yFÁm°DË1{`·mBbz>ªmí¥0{‘3'2EÜ,Ó“H8ÊBšÅy»@Ì"ý3ù„¬\͇L!h‰èŸÛŸ(àd!Sðþqë}9›Wåù$×ãºtƒ‘9 jêKÒïÓ›’Þ¨,}…²å°m”"¥ê (]æÆ-ø%ãé˜ÝC$ÿòßŘØîØRCêrè~´k¹º‚'‰LÞpª ›óì,é}dÆí•á5±Š–]ðç‰Dðõ¦ˆðCå&Ò1?¼ÓÃ¥*ÿ 6Éc"O1ïš‘›ÓìT& )Xþ“x¶(ƒ¨|éðFÔFŠR"ÁTi…|‰p^ øÿ¥ÓLo)…×7ÚnÅPt€Ç==ÁÜðÆq‹E{Šª0•H×°¸3ðÈ©WŸ æyô—¯¬ÿ›«Glǰ Í,6pùÞb<®Ÿûx™ >dBDÃÿ.yÚÊ¥ð2B±Š@ð®=zy— ætô§¯ÃÿÒÄö}Ã&€……ìýì–Bˆ»¡ ½ wËú·÷çqŒ…˜ôJÕEÂ`¬î í•°åÞV°ˆy±ù'Q."Ðép-ŒÜ²qtÜFTªB–¨pàñ‰Ëfψ¹AÃHòs˜@…½CÁôô‰>Pß§·$9¯–&|ç7èuV'M| î àºÆ Û- ½¹b|–Â6Ãò›]nòs·Z„;¸’XÈõ?÷±Ñ€«÷†io`öþOpñ‰mšY¥mcJ_CôêP5ÈÒ‹¸§ÑØÞÄÝ.ŸÐû=ÂįÉL³¥ñ2ÉÄÿ¹é€ ܪîÉ9ÁJÙ@ÛF‰\Þ…PØÒ‡Œæ ñØ¿ ôõÎP®ÕÆD Kêßu˜ªú`l«I0²D~èlÿßÿ¤ßAp¼¸ ž‚“詸<€m—+‚­7ÿ¢ö\,Þ.6•ý§S…>Ü4'z$½orøÏ‰ÓœÖ?*Ö¬ ,=˜bàOàïSŽI #Dƽ0%ð¤·ýhRm)0.¹‚°Te_Ñxà)P²àõ"¦ûÔqÏã¡,“ ÌeÒ¤ÑÝ´4‹¿?:Pw'|*£¿rå  ¾Úëͳ¡€ÒÒ<¶øŒ”!— /„­ô8å6(K¼§*^²W>kÅ'8*C¦{ål(ËéL‡ûRou6Š)ˆ3|V‡9Ÿ2øë™SÜÇ4‡Àg¨Ö¸”žåÊ]ÿ  C¤©pû(µ¼Á6šþ†×†³›FY®e¯—'Xæßü¥ßÊDû~O' Ì8bã”Åx„9ã8”Óý^æëhZxùôSÉž¼Úî±à’ BßóÎbC¨ ëÞÆ‹ˆÃ6)pC#¹hò«…ÑtÜ’ëh«e²ëçˆñ[#…øÉè’‹³NÇ;*(òLv•‡n<¢^,%X üô¾ÄõªLè2¾7•.ì Ð}9Ö'qq˾ D4’—áq‡¸Iºa}ˆÒ¤ÅýôŒnzNÓ}ër+ÒºöæÏSþÕz¬^hŠÝÍóws7F¿£E¤ÜðT˜ÔÐàÜ|»Ç³Lú½±,«1á[î§ïC–í„bR,ìr%1™—JŒ$½Df2w«0QCW…¯ %x€0‘—ðÍß ÷æÕ"Ʊ¨ìd6§°‘wøÛ™ì5{¾Ù.aDgU™ÓÈb ”ðEôHõÜ Hr¾4 ‘¯ŠYûÆŽK÷†fÙªª|(WI—“&æó9†—ˆ?¶Õ£ü§Jf¹É»‚òŒù ([Äó&á¯Ol<õ{¦õM$±–S¬V÷§‘¥¥¯yÁ±£<­ &z·­Í2ùÑæþžeœH] ¼Êã6·ÚtšXzÌkÌußÜdr$¸2—l”¬÷Ÿ~,S¼7uÃÍéhfUIºdx6=ý½k¯}:û‚'×DN´/2ÙTïqhÓ„ÜlWF§"hÖÂg¿©+–Åm¸»O4D¦œÖ+†ì=ù–Pž\ËŠ%.)$>NÏDš¤mI¨Ø{DÿÊèò#5ïÕ†¯† ¯-íº).ÞS½WEf y÷â"ãááÉÍË‹OKÓTT„FÅÆX,rr_ÿüyÄ2J«<|‰Û×õ,,–;Â%}X./½“É«ˆsPv´nrݽº>éxï¹  i{ò…h-/)úzÊ5%¬îâ=¿F ít©ñRËÔ§ÊÊÊÞÞÞLóšWàηHÞ–ÍT#}ýö œÞþþëÛ*Ø{o®Ü?¶û»*Úš*+ÛÁ“3'##ëíëcåâ ÷Þ¹Ensrr:ÍÖÆÒ?8X“¯|1Hg\f5Ï®]øR³Ñ&MýâN7Eˆ9 äÖEp<<–ŽÛmÜE.¬Lù¡}c!VÖÛì³xï;Ï|œüþ…T×ôÜÇó±*Kò?ÝÒ+³’môÚÆ¦Qþ1,ˆ¤ä3­°ÅÚž*³?^L¹G¸î¼Ä]:OÇF¯ aQL%„xޤ=öŠþñ#å¸<ÝÖ†­Û:šñ³Kš ˆHüñtè÷XÔºmÁAó<ë§þ#™Bºû™öÃ_¹†D¡Ö‹Ða¹ëh¡¶›„ŽðÝÚ¿•ÄvâÂÞÔ¸…¹bìO¿âØ «’ûÝ]tá*³epyaëäîÎ)âëþÂÞÈØ=]ö‚k„ÔnÛ£É<ìµé×<¹Îé ×·ÔßÊ¥¼¶FZƒfj÷Ä2Âöë©ÿ€1C,ƒèa†  ¯N·/w&ûõ¨íÖËhêH³LX»ã¿Q²³lÍÄ"*(Á_iñ»ß쵤¸ÐÂ&>l/Aæ½ržÔ¹Ü9¢à#»ê5š‹§•r?˺-xg¦&êyÿçÃ!éýrï]óT ŒY¸Mz;ª[BZQ"&¸H$…/ u˜²æ6a¦Ø0Ù‹ /Ŷ!s _“iF° J*u‰#œ¯œi ‹cøJëC‹ËZSî IŠZèÅP¬éŠGÈE—¶Æé~ºÃϽ£®Üôá*øþFÄÁï{…Û¿ÂD„¿VÚÏ¡y"ªb º©aù}ýZŠã‡Å,uuõ‹?‰:É÷È@;Ž&«¹FK6QÄHvBi!$Ƴ!‡fÁª>l.§ÝÔkáæ¥ ¹jä.͇*‚M;¢ÍV’Üã}ÍVB ÖÖŽnÏïÙußY<Ö"\§ÔìÚ` ¦”ÿ9Eõ<ž€‰Buk·ùäò‘Kltd¼"n.†²©þ·ÔV½usŠU/³ýI-Á z>SíÀoÕœÜÞþ’¹âKD…+âM/ωq„¦2ƒ„²Š™æ»4ž¸$îÖ ÛŒ8 ‘ç?)T¢iXÅQ4º`ÒbÒu†bÔvÓç4cy@ºÉ&5„ÏHH¼Y°à…õz4ÒGx‰Ævw¢TΛWÁ„gwÇ2öK®§‘O8Ü‚àê{±þE6àÁ|“OÜ‘çp€½EbšöÞ»|-/æcnÏâ'u‚ïíÎv~[øoæùÊüšÙt$>àŠî(Þ)×Ûq^i1„“üÛ˜´û)¯øSCýÉþ¾¾§ËÑôⱟž¨üMi—oØcX¶çO_¢ÃÄ7£¥æÑ¯Ö”¶4Ò8°àšažjÓ«p­GZ|wÿûód{*άêÅm0Åw’,4ªá‘ß¼p{†M^± ö †c¶§ì²>@Úà€PõèZWpŒ–Ôuôk±*mX££´Pm ¾ÍžÛáLX=ùþDüÅð×Açºyª<˜4½pì…gß+QÐJ¥˜è» i6ÜH»Uð'¥ÖÓ<’EŸãëÈbnnn~¶Ö©7øûó­° à±>”g׫W¿òpI*[LêîWxPA26µÛ‡ï+:‡gZn6¦Ê˜ïj% giz{?°ëŽF›Ä°ÌåtY.™<+2YCP¬aÐôzޙØ‹1´MËŽpЕ'ˆ_›öxÆ·'¿Óƒ(ª^ýŒR¦ôê·Ž]@þãnjạݮË„)ˆÓmîÿe|Üðkà‘Zw³Pø)n^~¾èË–îhZò·wMõ:þ4e 0–¯•H{*]ójÂv®þõÉþbF}½DT©;M=™Ã}ŽeM /Eìqdo̺.¯D=Ôhçº{WôY/ ìæ5¯Ñ·g}baÂýÛ§î×»u÷\æ$DEEùê-½²)U>´‹£¿[‡À6µÙÔå4‚¸g;ÚÚDùšË‘|¥å­$ßjÆÞŒf+D•êÂ+ʺïG­ôPæòï jL,Ÿ¦¶Vˆcúáªv1”.}Ïïèݧ—j¬% _¾ô…á‘oŒÄ)›pC¯€1Hfin1*[ÚíŠ|&Šç{n™G#LqárAW¯ƹ£šŠß–k[X0`àýÙ,Ȩ}¹õ ³+ÙîáÎ4+¼¼[^Øø ~p¦fä;ýÎb™Œ':p%Ý9ÀË? –ñ“,½iW{âê …2i6›Ái,‹¢ítCÖ=¹²¦»cÜ6ó>\Ú?{v0ª!ô«ÆÑäoÅÛ‘"‡±|Ít©O 1#¹•P±[ §êô–µô²Â.yBÅlÙvM²€JglLe>Ä@ž·¡~U;€sËߌ¶ŽÚT2‘J޶M© §•z‹ ™Wã.¨ûµ‹:þù¨Îq*ÖÄÊï-HÌÐsAÎix¨,ØvãN½ŽƒNš‘̶€¶™LðO¥‡á=Žk721«ì°£”öÞ‹; Y5bz‚+­®ªjÓûuÎo=Jiçð6'™MGO<‚èli³)Ê1Ï7UüÑ©ø*p4n ÓwØÂ¶æ+ô׸-Èt¢G@TyE»Ê1Ô vµ ¨þ!Äž\¤!™Bhï} oùûù‰ïÍaOÞ˜ugõvYÛׇo°Í$/¨ê!vŸà¸[C”<ïL¦+`µÜˆ6_d•],·^ï%²¾аôÕo–@¥ý3ôœ;vSNˆØ¸ {ï÷îþ«„4 ~ÓMû­© ýåã K´AWusÌq÷.oì Y÷;¹®×ó`ÃN*ûFøÁAeUãòÕvV¡ªÃt8“„ô^ý#MÖ96qñ¤õ Ø×°0Ì®xfè‚R$| 4Á¯*º×Å  F©Üû;pÈ’F“ëµÖ‡ÒýöÖ)˜y, swœ#ác`Òfo«E6ít¯¿yâúv¿Í„î¬vÖeü5 3À­kì=ÌX2GetGË´]¨F–˜•»e%è¾~ýú³\ÚÀ€&ça ebrrïñ°¼ˆëÊsp2]Eþj_ûÞq”s¼>ûaÌæŸ³FQÉž[F"Œk/.R•¬=ÌìgÝ’ºÔˆ ;úfa}5©Wma$Æõ x]€áy±‘G¡”J<‡ÿûÆó^N®Û™g&ÎÞ@”LX_ÁÓ÷©ci$X¹ÑL“NÜÅIŽ“5,ïlw¶ÇkÊòñׄ[9sŒ~¸R´ýó²Åþ޾Ô6ÆH¸b´ ŸJ>FD4 KV䳿PÛzIM1½Üÿ7@UGgy½oBáŒuÀÛm¨@Z ƒ%“RÀ–Eå–‚ ¹·'Š{Ò}¤b?M–é¼Xé4/±Î(‘¦duBWÑÌGáD‘Ù²;XÜAXÛxnwAwôkBZE»V¦íâxvøkUŽ×Â%ÝXBŠ ª.ÎÛ¶N§Œxxô ¤³ GVr¯ŒÌ¾_b¦y´ƒÔ ÉS$H"0Rq%¦ö?³ou׸ÝÄÜF[ ¡ÓÚ‰Ü&8Ä}EôoÚNê'بä©Ò쩈š›Ã(ܰãß%§‘¬¼÷âY¥sj‹2E6¿ÏbP](7'Â0Ú~t‚·ü‡Ò.…éÜŠÀ3±ª¹ôtÊ5þ¥“úÆoõº"\ÌQÿbVõE¢‚Jþ†%Úþe¦Æ±äE,£Ž4³˜×:®°ë`N¦Æ¢YpbòF+ÑÅœÅqé§Ã/<•4²RÁpa?Ý_´~ø1‡&ãS,¶…S~žõ ÝpѶ=yiéÔ~¡6‹‡‚gmH‘!‰Õúç‡ç{1ö›£wT¢ {FóhÿüUË€»½›üþd¬ÔR+þ$\Ò‹ŽÅð‘ O%\çŠî¢ÓócðíUü‡¥… £ïtX>;ÉIÃr»¨·Eíµµ¼w>ÈAžÂÎÊB Û΀2JêL `—ŒôËñ6²ªªjs¡¥)Ôb§øõ*û³ç”JÍ»º˜ŒK ÛaÈÄÁé /ÓÖf|Î>w©›òµRÝ‘—ë|÷£ R!ª×G@ct0k 1Æ´Äy¤8:[e˜6F9…¶¦æ[eãÁTõ÷$búØ]a·‡  oòqÅÒ Æœt«pq§}Þ°\>Ãÿý NÞ¶cèû3b›ÓÅÆáEV-ªý5ç»QëßëFý— Ÿ—Mr’³×?°¨Ñ+žŠôfÍzÒŒ¶ì©öš)+ w÷JP¥áíÓ_ '!7Œò.'xÑ _:>ò˜9Ío}•¥«I…ÆÃçð7†Í¸#Ö¸`3üñˆ^®ííêéñ˜÷š*Rëa©•UøÖÕ8†X캖—ôêú¯WT1køy’¥ ØÂõq‡‡øHѱL †œ™S¢3øC’ÖcÝãŸÏ¾Ì»³ëÛÚ«yAЕ‰¿9q£þ†­‘J'è=@BÁQýÑàƒ{¸…²(Iþ…Ti=Ö»÷g]†ÚâƒNžú™cÿbÛâ¹ïò[~SÝ7²sMüÓÃ_e)°²åñ•QJð¤bÚ’2óÍǎ̓nÝ'RÄ]K 7{üxx—oމ·´ÙsW{do½Œ—:«sh+þJHIQ¯s™§PòJ4c@–1æ†PoPÞ„Žát俜ó7q§,Å“áØwÎTKæJǸóí’û‚ãRêqlïÔ§r°iwÉ éãIù¨‘q…QQüŽËMy˦ §ç=AB³¾h‚áóê§rS sZïí¦,òKlùÏÂáš™Q†¦§iߨîjŽŽÍ¹ ¨Þ–¥×„~và@‘8Ò­úS31¬¢ãÙ+DY6ÝcyÆÛqT×Õ¬èä„ ÄÚ), ‡ D²ˆ¶§4r7ÜõS¦Ý¹â)øŠG"AFòŠ.ÓГÂì¼Ätsù`­ÉÇØ“ny͘,{Qðzµû¾Ã¨’–”àHÍ6D3ãMvü°=ƒ†Œ×+°Âù0¶"y••‰ÌN¬1ò7ËÄws€I÷WÇÖK_3IQS| ©áN½ÐÀ~ eºáÎS¢MÏ…švDÅŠê•vg°î;½t‘~Þtq:¥DÅ_øƒ@èã^禶šDrÊ~¤ŽÄíæ"Œ—ÅBaqM 5F|ÝɎ먦µÿºžU½êÎËì׆n÷¥žYAß1× –§£ ” ò ÃïæÏ> Iúå? Ó½²³¹gcÃj# *ÜõúXhØ]^¨û‹ÄæçÏ0®…kQ1QT…FÅŸS<-r¾±ûó‡a*ý»²2Óg¡²v´)E9£´Ry·AUCCà2ÑÐÛð›þšBÏ÷ÇÀj>ݵX8md©mɹ¤îú´öZ~2 ùvµV€å­i¦™FÁnû7ȹù?ÊAôˆ-ÒöKza²Ê+Ô¿SØVƒØàXÂ6ï›gÆ­X8ýÕ2Ø?óo±<ìŠtqW+öÃ'£BiÂþÝ9¿J%Jú†“ä ¤æMÞ»ª÷hŸcukµœ`3¿rP¤ð8¨*$ó‰— /ɦÏh[HÕDž³Ü£©yÍ+J”aXFºt“ËÈrÇëÀ=:¡Ö—'x;3”ýJ’èÌ^~K]I;=Ü— +4)¡à&dZ‚!hïÚB¬°,¦ŽOŠ‹p©-)î¥':Î_ O|£ÜÔfÿ¦}†7þôæÂ ¤}ÝöûŒ Ê¿0Kž@Š%@…ݤX¦÷࿱@2]p P¦ê¤Ëd±Ä~o~*¥X NñgÙŪ,N;ýȳ k𳀚fzJׯ/¯Ë*C|ü\º”-…!&Òš‹Âù '1hU5è£ a†´wê·‚í]èÂäºÅó³k ~ê‘ /4 f›ÄCò4î%¶Z‡ÅÊG]1§³S ¤n2‰zÆî¯ê`fÀÆK„?¢<é+NžhZœÄ[ó#Gö©{±¢Nx§3£ÔŸmí*õkL•Øû±œ µZà %Þ_’v¾APi»bWsƒ "5TÁâB$ÜZ¯wŽÕÎæ.zc-NNüÈA¾œ%[b–ØC¥^þ_*¾G®Î*SùEL#ŠÆ€eèM†Š½Xž²¿ŸDXßÐÖ÷µ_èùÓ¶F ôõqV;óå?ÀF­3šöËÍ*³ä(ɣʪª¾¾>Ú¿µ…€PJH^pþ³™áívt×ÜOèî%ðŠÎ×Vg}è²³«[;༻ÊÓ›]eÜ,ßGG¹:ˆ])ï—¢íqiÙç®ØwæîNÃ0YÆi![j5“u_ãîGç…ÄÎíçÒT£Ö3`­)†¶š¯^‘~Â<šþn—QzíoÕ°¾ßaËÞ?IÖàºßgê\]EÛ­¢ßPB”ÓäèHJˆñ 'Éæ'm3ÞÄ”aêÚæ©¢§˜Ïע͞97'󘙒A«««ü…þj÷ó{ÞNŒ`~²AǾñÉäË“ü¸c¥ódp¥,é帋šŸ$™oÞm§Ø#Û@`‹t/+öŠb´ä÷Óy‰¡³Ý÷éOa7ìá`ç™—©Ðj>ςڽ!aé s)Â%y|’W˜ÔG…íÇ?ÖE[6is«E¼Lv¼,tcD?“¥oËÆò9îþ¤*{"!Î3 E´%Ÿ©aw„¯—ƒÅ!KÌXËü̳°˜´™ßÌN¼,ãÜpÔ4£M^$áã'l„ü}«¶öV‘Ó=ãïæ«SÊ®LñÖA\1ª<¹ô?çÐL¸ÿÉts§d8+‘&ìá“ý|ΜPdP»Œ£âß–Ê™vžX†tˆ?&3$b}|‚,“ÐfFšˆËp±ÆïÑ‘Ýqqnïè(‚üõ¸{õp$[™Àk³³¼jHJ}¾±”’w¶Ž«Òí)a­S¼†¶~™•¬¨¨¨¦ÊåÛ±k@q—€DËf~®˜fI t¿k° ϱ­)ò±··7hiä;S¬};77-ËÑ‹ÿþ½œËfMºŠƒ´gïFšÇ€Ë|cŒAÆŸ[×=¤²Â®B¡Š‚X˜aßüàjÓÇÒÔ¾ª>dË%¢§{*1tR5ï¬~4R³Y*oC©Ž>Ø¡ Ÿ(l,…MȆÄ7&âV“ Ÿ‚]Š?™±Œ?dª‚µoÀRÜ9{{ÌG÷t»Lç²…Îc,IV¦­×DFF¦©ò›é`1ë ¸)ÀPtÆÏ}ÒÔ«³ÌhZ:–Ö¦•¿`Y¤Ï‰ÅåóÞfH^>ã#ÅïÕZ¶ÑÑÈúënBO:wžb팙Hi÷°±gwÙH™™un¯NµT~km8ÀmŠ¡¡ÎøÀ™Ý)˜Ë´϶µ³Çuò‚&Íì—OÊÛóqܽÚyøÕ¸¿Øÿ”m¯ñ,@J.˜ÇqêÝÇ—{ö+²‚éíìKVmáÛX¸µdˆ” à(ÆÁø‘Mó›!†]W¨@mмíÖüÚù6Õ²çÆ‡Çú NVŸéÄði`Ž K‡³…7«qOQN7­AÏø-hòÂÌÖÚìÎÒ.D¦µdØ2<À€jû´¥‘Û] è\™4ž°4ôCºsjÖumÁ,çÙ7cå5%%нw¬]¦GSûO¿š'r­ò$ÜÕà*´lªíà ¸íf” $)ÁŽ Ú„”‡¿d3º cÆgäö÷xHC­Ö‡üþa¬ðïßXw6*Ò<˜ëcr­ƒyίÉ|v³¯f]Ÿ$Ñíºñø GÕp)˜É[ù\ âc){ð÷˜š8Õ.·..˜ˆ@/ÁŸ )æJÅÆî†n™R^±c¨!IëoÃÀ¤¶Ô5óGÕļù/BÀ‘„·®Ù¿"òŒ6ÓJ „BuƒhRBH‘³Ÿ±éR^ã¹lí??å„ÞN”Á¢¯Ò&϶ïÍ“vžŒéä½_{%æ8yßo¼žxšyeê #%ÃÖZ™ ‚6F ·4ºD´ -Èv P‘z´»·O¾|)d$ÕLy &aXc¢WTáõ¡ž÷NR$éý{Z ·œ'Žç¤ƒû ©2Òw'¿JÄ7ÏY(ÿÆãó•az¶*`»¨¥ôãfò©€´¼„0DFÉœD¢«ç-¹2…ÏdÃ6BfgýµðýN_‘¡±1Õáᑎ¤¹»ñt>ÀÍ/ƒhôú%¿”ýbðÅÜXw$™Ï†îoWîG?SÄ ÍZÓ9Ïp÷j›rJKÏ>ƒèΨnÃ:]II¶ž)lB"b-vÀT |%8:é^¨D©Ò€0üÎ×è7–ùCdÞáå§ø:‰×ûzîÇBFŽ£Ï+ÂÄ*++5UpO÷9Ç_([…ÛRì>šx1¸¥•²ÉÂ!¿šml|œº ‹µô˜²›AY7´«ÏÖ-˺+9 TëÈs^†3ì¦x•——÷%š¤ä}­LÆ5æ(&%Hº¦Ñ Ü)1ÇÍ;¨BH‚ì3‚>Jyáƒ$)n8åï3ƒ|S2“§Ȧn°HÏ©£o7ü8Ã6¹Úéb²©Íö“÷)?aôÏeQè’R…¾ÍÛ­ýæG£gˆGva–…k–ј*ÎxÀ…vî¢êWý‡Rà¸Ãl0…1_%¦×Ä5bÌO]½7EÊÈ‡Ž óxQlÙ,»PÌmŒLÀ¶ä&(© ¼b3>ï>â½ “B–qw¶2ÇŽØù’Ia”¥Á¤Šy–1&~`ðþûh `ù†ÚžñÐñíh^È‹TëüZI•Ë>\¸œó ›X©]éŠ7‹G÷y‡–qqÈ»Ja Ò%Ôõú®bdã»4^j/Ôªòºöù£Ñws#ÐÊÙ+«Až;Ü9À·‰´{áõoÜ/æsóSd/¿—ðTUc„Í’®ä¸ù¤Ý澯Gä‹CS¥ÉççÎÒÚKÎvÕ´?·ìEJ&§¯mj?ÂTUU¦eë‹ ‡¡ØXL]á÷!ß’0€oÚïTì~}Œh€"nÂõ“ã“7r‚®çêµ'O6}ãR¯pkä0ù€PFR'L…ÐÊ…ãúÕk>Œ2èOæúÁï\IP…¶XÆcUÍ9¡F‘‹uqÑ]Q^¬7¦âP]cf…Â$MHá#M!¨«45Í7©B @;)Í¢Ýo½/­æK<Ÿïj4ø·ø¶¼pIÍßsû)u×ô ¢;óøÆü¯sˆË.#yL¯+ʼ)8w§žú,üJw`7x_¡ÈF©ËA¶@E¡$ ÑYÎâL‡ŽXBÂx«˜œÏ0„`xù[~Y¢]×ñèY-¥½3» êoP–Ë(Vfw¢‚ɼš„&¾‰zò¬–v,´6nnÃ÷…VÑOy¤êŒ}hÊ4-É+¤¼¡Â’Í$ؓɋlH+/ô ½¸ O<çKïø/f½’ë…²œ:½z?¼õ¹rØêæm4 §Þ¾èÄ}ÏM¼4ç•Û2=Å_²÷R4¨¯Zóo‹(©~Ÿx‚ l+JÎ ýç—îßJ,ú²Œ¿{À?Úc²Ž¿YÄ«Û'ǧôv¥@r¤¦D à’è‘voX¦[G¾ëˆ•nk"EæKLŽ ØÙ¬}Aµòl×Ò»¨Ù.FEkBpéUEO]ÀÆ’KܤÇX`w5Nm!Ó£^ç"P.2òçX'udø‘Žßg{10Vð{I:‡ñ \¯­ä'ó¬Ð‹ÀgZ©ùÒQÉÆ¦¦Ãã‘Ñnâ(Dª_½ –è¸ôHñ­¹Kø…EÁUªkBµsêÞ}ÛÏ 0îÅù0!¨"#Åëÿ»òÕÂ0-í*FýkYe¾ÎTºÊ/·°ô7£_µMºô`J¹z°áÄ8_+vÛo‡Òó¨j¢±T§›L|èD6{I«4,ø*ÿü¦>8®¤ƒòiãO1òÒ“¸Äi›¤Îç~ç ø]üG€;s­Ä¬q,B ‡(9}’wÿhZWçrÙÂûoÊÚ™ÍT…ñû¸ó_9/¿=úª5ÇúÛ[rf6¥ä>Xo«à ¥ˆMzº5öÎO®ÏpŠ Õ¼ yöFX_ e”IÇ$ÛAH| „†G`bàh%…M€^ x 'ç§‘Ö Ö½û\3÷›óSG•”“Q¥E¸ fÐ ¬Ô6 yÀ¸LÈáá¹g§«ã]ŸÅ·>{šOý~´ƒÃ" Á7žÂ/;KJÐhXg2dª3«š–ó-œüÓç«É¬Íþ³ÿ¦C%òýù·}¬U@a2=dšO#›!K#I¦õò.¥Ñyq­3ñhñÌc R渞lÊDº‰â·Ÿ«ƒ¤'‚’n“¬¾IJ.w]”K$eûŧCß\“ñÀB”µ!#‡×;Øq~ÍšŸn)ßw ŽøÄǾ&gš¢!oô ’c0;ð¸.u&ñn*ACyûÄ¥'–ñ.{2#äÕP%)Õ¥^ýÝË í}{}^¬ñØ4dûcçE‚–G©1Ø:D±W‰mŒF å!ãÃò`@h [¹¾V¾C>g–_~ Ñ4 € +ßöœr¤PïÏñYCƒßÍå_Úe][ß\]Èw¶µœ1J)·þžà§¤Ý½ãmGì=–tWaÙ÷T«å >°^ÐÞKWÔè5;œA»½þõ Ùo„õ„k[ÞÏoFcnbÇ‹"ŸxPÚðÅùƒç´™noïýofoŸä­=ßyƹoæã¸ “™+-Bf¢üX;¯2~Z¬òñ³ÝY-•Â"–(Ä ”u1ú°Ö¸8:ëÒò§ŽæO|—ŽúÏG{DÆ/§Úø‡~þþtBúIÜl@¿ byö`åOQ£Ìo¾ãâž}=Ї*L+ì/ܵϕV_í~Ü;DÔ•>E €TþËþgÍšIŽÄÓ¡öšXá³¶D]°ñ€õ«(´Sn¥úŸÇÉ# ï’Š-ÇâŸù/Ï|mjØzót<øï'î6][”WÊÚ¶´;>=p™{)Ú@8¬?y)Ä´ÿ8vÛ¬ÜedK1¯–PRéÞì¿XY ëí锘ýšÅ‚]Ooš˜¸½mðEYü®/ݫ͌t‡S}ÿÔå˜YŸÔùðPN°žý)SýéÚw‹«Q…om×¥{Õ BgN+±gÕx¿Àê ß|™×þΆ/§Ê_À‚ß«qÍfw]^ÝaÙ͉ó,XÅ}y9ž,o îR˜¼Òm. ] $;N Í_BC4úÃn9®‰Æ¼þúmŠ>¼¥ b^¼V—2ÜO;°I·¸ûØï›a±0”}*ò¡¦ (¾õWnˆ(<¼”É#èÙ6½å¤}Bv¶÷É ëèøøwåó¨>nã ™-‚€©q©EÑ]JR1ξ¾½‰(±²–în½œ^×)mõR=èɸ»„òð—dvŽ/fál?ØÐ“¿LþÓê_ËŸ¿kG«Ó¨­âÝFëÀ潇ÙßZP \18Ú|ôyôý É¿óXNkPƒ}« [,9IþîÃØû.Ãï*^übó>Û|ôúÕ·½ Å“¹jnÕ”|ÆÉÑnŸdÚ£œÞ†Pí/¤¾øŸ‡`à\üM²¦øËæÉ×;ðìRâ¬Ì$õÑÎ>eVD”І’-².’&|ÌËÍm3ßèu7ç¾a‚†Ó¿ØKNkâ æÊË.#-§µÔlÙNlvKÌn$¼ùý,icEºÇëÁ{K¬Û¬~üdã#<аšúû/|1è<=Å0ìÖ·åOcO÷¯³sPçÍ߉ Jóf¿­&ÊÚîvXxï\žÍº‚ÙÖ€­ ƒˆË“71¸QUï»XÏ€ "K/sTœhïGˆi|>pl ¦0*Ηæ|R,朲GÁ°^5,wv™`ñÅJHJ ¯J à|Ϩüu¸[dû‰§÷ÉvÏ·)ëõõ¬G’3™!{Šf®÷ üŽ_Ì;Ht/w„›µø×ôq¿ ÞÌOOh M_Xµ‰›|U*–x¡}‚W’*›Ê|Wóƒ\ˆ˜ù¢øº.ÖÁ—œÊÊÌ&–"ö|} |½yN w‹‘J¶”² ÞЖø5ùý·„ÿ}ÇõA»óqý„¹ Üª°[/2Ÿ½ñôwìÉ(¢÷8l–5dNõòÓ°~ ¸[ž<èµoFÅi‹i{¦-þ7G%VÍÉ»8úÉ_Ф9¿Ë(+?ÓÊ(=vqs<¬¥òSIß÷³W±÷q)°Ì»†OH k½ÚâSnÀ-àS×±·Ï+±ªÙ ùr1Ï̸X&wˆC´¡Ý1 ¢Oo©e“¦ŠC)G’AQÓå0rj;MɈå.Ôî¶Ëâá©d ¾ˆÌr-ÉzGü®ò*xê¸ßrþ5”{¢“›rë·>éÃóÙ/–Ãdý µ¤Ú½Ô¯1'2\Oð EMܤÔ¿Ü;d’Ì–&œ5¯uúÒ‡»©PÛGócí\3?¤øíÝZè¹?d¾º5­JJþS®~¬ø¶™:,rò)T ÜŸÑGð_Œõs>áîë"ñ#>ý†ÆüËRíÒûÍ9,Ĥ‘ņ"±œr¿¸ÜrõØçyÌxA" óö-ذ3Š-Òò†£4°f GæN>¡wNNµ”ÑÇ„ŸÑ)ª:d ÎÇ Ž;Âðvö' 3¦‚¬?½oòIDvÓ£gc)ȸÅFâΣñšíîMF‘³¬ÿG¹K%=A¶I†Wó)ƒáUµÕ:™îÏçyxŒ@ÌÍ2hg§éò'µÉÑ£wÊWßkB"’=Z6q]ÛnkCe”ø¥­êöŠ‚ 5¯6µÕÞ«?©ÕÕ2î¿Ñôéò÷UØ(vý`…6ÔÚPÏÎëf°‚œíè%ÆF8tñð€>ÊVvb‹ìL·pÀq7,Ϫ¯OÎÓHJ‰Nª?hÙ„ÃÌt¢P‹þ¹û ¯_‹€£1Û" ȘҰrÜæÒþs]dð{¶Eºµ^bÞA™ãù¼Ô·ŸùfG}\7`’‚ÈÐ3ÖIYäÙÛŒ`Qô§³Âò„Â0d $›©éŠjâÝ'G뀘ô +]‹¡xK@ªÔh0²W3ee@ò7KúÉ~ÏZs¬ùád²[ë<{±×´?žË®DÒSUõ[Î¥8IPì óÕÔdº~C˜d}Û“`G:ßäÃ'qÃEª+ÆI±÷޹}’äÕZ>DÁè­’o×ÿ0y‚€ºòõ8÷ÑlÍ8½óˆÑþ–€G¤….›3žiÀô#ŽPÌ\AÊ~h?à⸰Ÿ”Tp—‘õ§{¶ÎRO…ª …¦SNó\º··çEÏüñÒŽ?~üXþòV¼wÄr™ŒxXIlí¾êêê²äŠQæå—û0ûÓѼ›™2f墢F)$Såÿ²TÃ33(ØbÛ’»9x„~”$QoT·íÖu3N‹Ó­`}D\·Vž2…b²ðGlð­iË3¼'Ø„+¦·WàbÊÝ œ{sEÒ1…)œSB¹ÓE`ÒŽSò®’(¶7ÌÝcâl“_ 'Lbn1WVkò =dVìrM^$$h}HŠQvòü…=:‡‰û ņ½IÎÀž®v ·<|j¦»®ºÚ ÆtŸ\Hõ}?ß8¦¼µ4IóRF-iï% ÎYcvÝòÁàPJh [u‚Ì–MîWk·aºeÂì侫„ÿª!’løí½&I²Óm•±j‡1 þÛâДï°Gx^Ç`ÜYÉg<0 Dݞ㻓¶Óq¾¿³ûëMÍ={t`Õ:Ó×8ö¬ÿÕ³[n/´šAŸpZ銢TÚ }}Sfö|÷Œz§Ûú긬 *,=†˜Ã=õ¯WA{†}+x¬×XAU½ŽzBÉŒÛZn‰ÃØA½g×@®Z¢„ÿIa÷!¢ 4jvÉŒB"¡ÌÀZÂÓŸ$$žK¢ç^­Ç^{‡®3¥+*F.äÕ“ñJ©en“[×ÀWÙ€dqׯ¡ª»"“¨bŠW«6`Ç÷_Àþì©t…ïƒý㣈—|š:âW˜ŸÅÎÈ%Ž55J @ –Õq*k>Âï‰c6!á¡ÓAýe„üƒ×¬Qxk~Î?Ë€’¿Š›õHM?¡"‘&y#ü ÖsxÏ\sy›ºü­RMœ¼1•N]º´O¥®šë#íG_KKP†ÔèSI8×¼tnݱŒŽr”¬÷¥ÇÅèǽØmöÛi=Ty"Ø]mC²¢»šÉ †„ª&ñFèñ`[M&¶¥À>@$fh5ù9% ú?ô2§;*üO/þ.ƒuøÞ,Q®ð½1Ãæ5ŽE[¡z•ߟÔU>ë#Êw‡ßÅ_Áį%,¯ùwZp™©Ë‰òްÿÉËÈÈÈö0- £²¡!¹ Ó7VybÆŸ¿Þ²ÇiôÅúù]Gû˜°Ô¿­|‡zޝÐùqvò=ÄQóñõfAF29FSÆûéU U×8¦’TÉD°ÖÛÀê\.š)¯·tno<›]»M¬ƒºzÔýi·€užƒo2ލ՛àh‚‹ /PW\^$OÛÍQ?ƒ„"PJqz]ÿe/À°WÿôóvÁœH–·Ädjë@=½êb]‘óÂ,”.;€Ü/B0‚ûX¥÷9åå3’¬üûÐK̦1û]<5n¹¼Û&sB‚efö¼µ`¦ò9‡ó<ÝÛñ”{öD©œõIŠ˜&¯é]~g\í¡ôAQØDC“­I…]dÐ=†T,‰¶®E~SÀ©í`(–“\ZÇ`jøMÕײW’;wbnnßYhy~Ev¢ŠSQ8 @9—0`ÛÿK¬©¾~{o<ûßzR€u1æ4ñîÛ]ò^Óʰ°Åà±OŸ!3P þ¼\­&b3(’ÙFb¸ÞŒbr+áê@߃‘w<(I„OÚî¼Ož,¿¸A^hqy¾xLAñAÌî]÷ÎO×Ó­‰æ³ÇÈlË.b^Šø‚ÍAJAYf&}v÷Çë6›’Ë:Ûù¶¶£¹‹‰1K}€"‘Á{–ë»1ªC÷m“´„ö=«Ó–—¤ôcV^v¼{6”^,ý½ü®vZïÚ`*¥ÒTœ;‚¼°ä/ìõC«5búÀW="Ox"„룒U­-sàAH‚©¢ÄÂ{»÷°d‰ø[jË\éÔhŠò§/‘R¹‰Än·Í覭MquM ,ã‡G&Bê£qêÉ_æsÌ,wHúd‚+ÔwU\zª©á Ë]ó¿}û?;Hâ‹0 Bq Rƒêï*€x¦àÀÉ@,SÀ±‚Å3^ÜðäÎtÅÆßõ)vy3#³M‘?g.…Ü.3ÄtšP†% b ®t5ߞͪÛâ±–T€ÝòzÅù™ÐÓˆ‚Ì ”o›‰_Á¿–Å-k”x¼ªÐ” ·Û2ÄdŠ…^'zØÄL%/7˜—TJd±J0ÄoñÜ0KàgºÜcCŸÎÄt!:ùPxyyy‡IÆôW%k˜zÎã¸5ÊSìBK,ÏL&Èÿ5ƒ°ÈŠxb÷ÏX¾y˜·J0ú³D’¸œ.‡3‹‚„Bù×·Ì‹øÊ·M—8ôW&ò7Ä §xom8¡ì"rªk1ô oOò€± l¾7/s{2†Ï¾€khD3l½¤ÕÔ¬*¡E¢ƒ˜Ëxj£Žç½…©ioNœÜOäíõ§NrE¥üˆ‡o°ydÚ›$G¬ôJ*Ã/qêÌ Ú–’¹¸8 w¿þº¶;×ÈõÕWñ 6òòOo|‰i…¢^µÒÒ]功úW-.Smˆ¤«e4°Õ/…ócÙñ*hÞL˜XóX¸s„Fˆ/ø¾iP¯cßÃ7¤ÒU¦C…ÊÞ3ÿ“nûÖë.²v1Ž~Bm¿õº´ÒW1¢ÒdŠöAÆO;«Djob޹ѣ0Ÿ\3÷ßÅ`Q¢yÎX.Bñ2óº\F\Ö£p^)O%\½Ï`3ùý!e”Îç¶u“ž\Àï?>a–8·¾²[´þ Á×ÓþÁ»û !‚Éi"áþ}~þ>þÓŠìl6¦€‘Z×ÅRá­ÁB Ùê@u×°¥y£ÁœEš Ó«8YCÞæ;üú£¥Ãl­³ÌÕFwO˜DßúñáÀ½á´ÒÑ3¤/ „­„CÄwuû‘ÐÇ€âî­ ø‘u.¼Ô³lYhqTxéþîmèðº•îSßË¿If•ÏÞ·Gˆéý&¦°ª¿ )CÜ¢0V‹XÁpl@<­%6†È|ÈßQßo>&ZíŽ1 ÒÁ…€äùPÛMe{„U´ê'¾ö*Þ…_y"RQöç ªì+˜yíb c¡ãXﲎ:Nò•¡™Üóðˆç‹Á×ß±ØM0ìy¢©µë×Útun'Ón¨Ñðbc>!Ô½ºb1Ùœø°')‡¼°C?x FÿÀi ŒRcßvfú%üÕ·d'Ö“ƒm%ó¨´´n ¤3·_‹h9`=fúf´¦™&«mßä÷'´n,8ÄL†4bõ”|®…¼ûùò!ená¨BN,xi8]YíÀ‡åÉï õá;h‚ü±‹‚ ýô,»Ügßê­^"b*¿Oü\þ6œYwv¡ Dм2`AÛa«Ø$T3I{G£èkSd§yï/ ZúÌw ¥KSªœÚhñôû Vª0‘ã.^ºîÈ£Ïø ™r•ÂH—P'|™o'[áÄÌk­×{vcùZê«øË®Ï÷×AÊlÔü‹‘§ð¤KäÞÙ‰õUÐj[¿µ )‰&‹p¬?ZýI7 ¨V÷–-° ÂÁ¤«z½ª’÷ú­[TKÀ¹ûù¼Ï“òïÞ†°¯ýÆ“/íê±÷QŸ@G²6ŒN½Qàʣݙ­‹ ¾½Â+ôäF”¸¯§û˜ «ãl<>qñ ür­Ãr2ÖÆÅò®J¢(LÒYçnq–;Ÿó ¶†ÝÖŒÖ+JL€™Q¿]Ú4ÝèU¼Ò;!\{«2–ÑvÄpAî´·x„znx%5Ç­íÎz¨ƒñE½ê_žÈ0dz•AùÛNc»üHƒqF§ÂWê—/`u ¶Q›‹m¸åÁ›ò<€ÒÞýÑ4þ%Zå͉8FéîGIJáÌÁ…÷KI´+\æ¥öêW‰‚¯wÅ»â[– ±+õ” ­¨`TÞ ÙüK ‰°ªUìŒ8Іr`6ÓAßhß´JaaaÉõ²ƒþ±ƒëÎÞjœüw…„†C7Äíî#• Ê÷)Q©0¿pTŽø¹µ:>@šóskTëຂñÀdoœœœÑ4"¡ñìõõõ³ï×’xWÛü€¢Ÿ©‰e´}xRbA°òŽ| ‘ˆWFq¡F3pž\Q·ücmiº9Òãuó´o´Ð瀊 )5MäÕT›ûδúñ, *_®ú­}±ç¬]Ÿ‡3Qu ÄéÒÇ`$s;ÎÃN¾"‚R…zí`_#>#Ï9ŒŸŸ!¯÷=¦,}*\å4V²4>„ ²D?¶O 7¥NCt·Ù°G†D"‰)x#£ÑFÆ÷RÕ5cž u©å(®qœr[ŸÊ§Øà2¤ÎM>ûkCÒû@wÕnà3†XQuq¹YÇ#Ra…¥¨JíÛ(VôSC¯Ñm!q)*BAæfZÓ4 v›³uBQT•­$¿Žæ}5ù¸N–Z:þ¢ºÊ\íû­; Ë[d| »Š[øŠÊ³ÇÖÐïÝ~»À|mý\Â>>>Í'¡æ¨²²òg‹G¸ÅrùÚéê(ä-eÆÆzá¯ù¿ÃÖfÒH¬'gÔ¯6äMÏa'èe, ‹@yÜØ `É×6VK̪ÐËoÊ'&zª=óᛋuy”ƒ^3â’Æñv¢ôgQ²Û"}à =ð†ðöqaï>Õ%‹“¹ªÚ âø‚ ßÉÞ|ªkëewÂ…ba¥ßñ‹«³Ý~éýf»e£FÀ'{¹Æ=ž+| v€R(¾Q];º)¾,†?©ØÂh¶fº:ß© ?õ:E¥ŸëÇ"`¹viøKE }|ìÃ:BßâDÊ w(.=zT.‹òºÝG§U³Í|sˆ£ß#‚“Œ±mì¹#»`õúrÏ~4¬¤±ét7ˆ—¨³½*ß¶[W/|¨©Ê ¤E–8Þêrè÷<á‹·¤oà(Ý-üq÷®×¸¹ƒÑGÃï%‘÷¿?¢\8Ì®üÆÑk4ëõÒš³È®{Š¦Ò¢©D+’å .•-™•Ý$ÿõµQÀÙŽäú—téó…/‹é;ö†æj~_¢†PiöýŸœæÅÖMçe”»äw;‚sPÕΰ( OÄþ[K`ñÛÂo#"cÒeÝÎÆ.¸Lprzú÷ŒŽÍ wZ©Û „þ\ðZr4¹0õŠU¾ª¾˜Ýçìr¹öø{®Í©/™e Yå€ñ®"’½hÏ-ä©…ˆ›ûõˆˆ‰«¼¶‰$hºâ5e™Ô¿qaÑìßà R‘Ð÷ïß3X;<èŸIa°f'XX컓)®ßÕÐoÀá¥ì9±ì8Dx±‰îBzéEœïþB‹Ó\}ü~ðyÓ?ÄïÞÖbƒ‡ýPŠnIˆûñ¡ø9r¼êIa ØKCþDŽà[/B3$Ñü +(qÄ7‹¸‹ö·èï£L÷¸¹8´°Öšú]e¹eÒö“=N¦ýnpÍvHÛ~[ºg–j$[ÞúPhƒ™P‚V:¿Ï»5C(. ©åcyDœÉƒÍ9Ò¡£†è\ýÃüç±ü••³ä·ŸÏpå1!n`JrÈk#5?äA­á(å Ã>’kêÜ’sßk–Bܦ šI’\~Äž¥åDEÛÁF?µ8]ùœ nÁß±´ŒkwwºÂ-}’upƒrÙ=‚9žb${âÞþ¾7Ƙ9êï&À Dø~‘×MœæJ¾Y;o H,78‡"îÚpÄ!ÜÀ•……I­'œ{ÍÇÚµN¿ÛcÄ’··Õ$aH™Ù:×õ€Åk«¨ÉÏž‰iºÛs„»×nÇá{™îµHB, Þ¡1yH¾ž×|̱"v1m‚P=pN„Nm>úɇÕ|åžp‰Ü&ðÝ¥©;ði³— \-ó±”·Æ}ùw3Xh*6KÌÂ\w”ï£t Žo)9¯2_³…ÈÀ@aÝð©½|i=úTVîô[Tî¼aý)ØsNUN%ÝÄÄÅUÁPÁ­§ß]gË(Ý0-®yõq‡„‡”¨ê±›Få¶Þvù{[…#<²<ªÎòÏã/ óqÂ-ä6‹âó¡zù_åDx!=!ÆC=Ú)ò09r1ËßOY[ׯ§Œ¯®tE¡»¦ÀëÙÅ5°UÅbìªA0ܘÝfÜ.SÁ‚†eÖg¬Ží„®j:Ân¥üôq8¿…7ìnC/òñwʱ)Œ¥@g¼>Ý6b» ïb‚õemlo¯¢Y#ÈÒK̺Å]ñhrËÊâ,›¼_#o.¡qÈë!Åø2ï>˜Wn ïœð ~#mAœõ&ÃÝdEA%êæ=šÂŸ…#薬᫃·b¢4´´Yà2­­rè/‘=Ÿëh9_èaéI0ÂÞÑßþù¦$®ŒÀ "Š›eݨpøpšEï6ÝíEäšmëÞu²õuC¿D!×eïKûÝäƒHJØâlüJ®d*§ànu‚âø²î0?Ì‚T ÍãdÏh§Jÿ‚DÅ~0%[>O ÐN“øA|€|ÑÁì~¶ó;4.Ÿ ž|ZUòñ­.Ê æåzº~댰y½®ÃnÖ?¼‹YïqcV‹C·&Ö²‘ÿ¹çVRÔ¦%«¢¢2Ý "à‹Ë£¿%Öm_Áֶ¶+²=¶ˆ¼å°›~g¡%Õþ«ß»Œ›?\ÊÌÚƒúKÄ!ÄÔA,¤]òãgç ôj­?[þ?Ž¢ò•á”K7ħβªdÝÂ6  AQÐÕEÙrf_h}ò¬«qÙ'>“Êà[ÿÉ2ëaù‹ÙÄé’ïdÎvª†ÀYöNˆMýHÕ¦ÑГèPpq*påA}3Ø…z*¯Ìåá@š©Jð; :è-w/¥¼k1NoÑFìIÍ©‰Ö]-a™·¨ŽØƒåêÈÓ²ªW¼ …ê騖ø|®ÁBve€~¢·Ç0ìÇñ•3»ÃyRP*ˆ@g׳Dú¹5ÒÈñW†è²§ ZÒ˜ÓÌtt}=LoÜpá0 åtDÅ\Ë_P¼Zh. †`7HއÀÀ0«zAè8Y²+½·´`ý+ÜäUGGGóɨÆÎb['Ýô®Aª 8NHj¤Ü‡;•üé£Ò÷÷™_]š_¼Â{ï4HcìüR(ì½V¹•« Ü0päÚKÔ§ ¾{Cò°çƒ &&ÔÅÆßW>?qɪ«KZXXˆ%Æ|ôèÑÉùùØââ0اK^¸õÉç<…pXòzzª ]ë`w`­Ãg…VËâ`¤°ÕÞË,ðÞÅúpWSA”ó@ÏFü€â¹9³¦¦¦ÛɆ^,“ìOPEÀ´Ñ“§¥¥e.ðxðäì¬ì©ýýýõ¿¥t÷ôHúq ›·‘,´èrM6ø·çhÚÓ8zhl¤ëzx.páw=±þ® «­Æ,-€Ü¬#¸4p“ çç°dtÌÞÀwÇ‹ Ò¤¼" ¾úãÃAƒ¾î /·íÂGçàßÕŸ$TP\,åZ¾>œ±~:eÝæ. fMO,£¯oýÆ£â1þ%ñÄݲH•H”Åú òUP¯Ž1˜ZËïà/jTŸãA>”˜·Ò׿ù£:¬7~‰±%öàA÷ÒË›7oÀ>pÿçê”…!ÈÏÐßbd ˆ~Ñ—Àiäåø8/IÐrådsÌbͳ—…b;Éf“>B ¡qyV÷Y:ÅgÞm$ ²ù¯)¼ÔRÝ‘\.aÞ†žcl«5B†(¿}õYð[ÿ¹¢˜!é±Vî{hK%`Þ ¢e™ú…‘ 'W®Y¹ ••5aº'hÙØ™§¡¦Úè¶ %''·hô|ï±>$rÿ~çȉkË)iÒ>±>‹Aâ=‹µªóû·÷ÿZÿÞ'Ÿ]w­½Î£„ù[o<“?Û6J‚ÂU ~³"h—ð)]εºZ¬upáÏ–'ß T!!>l‹Ö²ìììi`¶Þ³¢⦜x$º‚âÐxûÅLûˆ|fk Võ·¬qýbXL—MÅu\xw#°ç1Ë,ø,WvŸÍ£OíIð‚›Àw=lµðg±0ƾ¶¸oîQ0ñ±Y¤YT[Ù®+5êUÙ•ñ‡Í3ÎsoýÝ ÿ*(CòÚ&éØtÀÂF Ï¸ÔD-)Ô!¢v]ÿõ™ÏhïïÕŸ]Èëò¨šË'Uû‹o`ÅÖ…M\We+Ä ¯%ÒAmaҘɒU‚™ <ˆY>æÎúîwKlÕ!Þ‹EC¯txîæÝß¼µÞ–§ŠkC³]òßw÷±Å4Ø55L é3cOÎKžg•}&^g.KäásLZıb3ãr«ŒÍH:ò'îkom*\ˆD~¨®º~þ{Ý•æ3Ôv/R$yÕ ü˜øÍû"‹ôñMw3ãI€¾Çõ¥ß-µ?xb%~ˆ7ìqZbG8s¬o—µ›]WªÏ®Mm¨K•¡±@5*LQaãzçÚ!I¤= cÐqrû‚ùË„’¨¬[r‘#I®LcˆÂ`æú=£=÷¹gÔRs~ tŒÏ¢ ÚÝöhM²ªI–/úý_ÿŽÂ ßŦñP3ïÍÞ}¹ƒŠjWøÕ¨šïâÂI»iâÇ Ótj]´Üt•7¼˜¿wãårˆF1Uq¹îþ󯝛@F±êÌϺø´” ÄlRêFCLƒªÔ"ƒ…ú^¶©l8+}¾ ®]4¹™¿½M¯›Rä¯-+‚q7yöŒÞÚ7ó,-Ÿ|éU7Έ…–{ã²ô«²C©bV3Ó·Ä E‘ÊWâm*d3ée™Sö‰/›¢nºnÒ‚^-ñ!3}qÌi¬1+¾³=údzLÍCù°BÚyà‰x¢40”PB-¡YÙu°{·Õ˜«ÿBXíWž©þÎrµ…ÓxFÍESñÍ#æ±]¿–!{êÓœvïB“g+’í;¹Da*[S¢ ©À5ÇÃ%¥]sÆÐ"ªxþÆ£’š´>øŽ,½¶²¿®øm×Ⴒ“çWÆWMÛ.RQ ï²vÞú ×Г˜SL3ÖO[3?…+ü0ó fUc«wÃwo”sÏ›©Œ A{¹w•¦ÀœiÓ ¾Ú¶Ú^ Þ÷#ŠmÓmûo‚v®[?îƒËuØA¼Æ_$· ?àü@…;§CáYÀmó“ZØJq•M„æ™(ÅMó™/å Ö‚ŽþF„¹ÐRˆÿ(SÛyœÙñòzíÆÎþÌ%(Õô/¼ÔÀð*ÜÝwy‹Œn¼8É'×Ugùó*!h§8­'<Äê:Y s˜g† êˆXk6„Ü,wm]ê‚.üzE·|†7]ËNÎ)ƒ=ŒÁÌõygjOL¿¼åwÀXíùw]múÛ¦¤þÉádÝw. )Ū*ÃÌÃX qÞe‹X*¯ïiILjõgÓŠ(êOÚy„8ªF^nŸ‰UOý>5ÿþU¯-à…üb¯|õˆPíèbëžz}Û6žiÌÀ.ùIJ7iëÚVû¹† o|¿P…hž‘}¡+£ÃIþm©É#ŸóÓ&®óC¯Ž¹)j0”õvI"° ×+TÁÖ\Mœé· ó<º'Õð긑ÂE¢ï{…‹>æÖÖ‡çß|Ö¯_»€‰üÑtÒ ’…r–ºÌW¨;‡hQ¯ẫÌ1¨>£Ṷ̀Ó°Q”<ŸûÚÜñÊ‚\Ϩ¶€ÅÀŒ·´Í(LJÌ\ÒŠvæÔmú˦.ùû[S0*´>ÔæÔK±nŠÎ0qÜháváîxÓ…‡ •½úMÉæõŽo+Ú]‡O{Ì‘g5õ`4ðvœ«¼hÛŒYe~~Ù=óÙ² µg&Å©à,1à£Ï`rp^üh“˜0¹bGé.Çíîš,ÿÃk}[¨Ù$Æ´ksþÅìÔ g¸¬€õŽØ„0YWx¢ˆìÉ]/gÛ·Ö¨/ Œ¥|„K ¤b—/F쮸.2Ùmõ½¡À쌈¹°“6˜K¼ªÏ¹‰Xt9/Hï·î’ç­ýÓ}q#3(ª4ÐyZWażôÀ 2p]&޹²ƒ &©éO‹ÿÊ€føôB¯ž³éËÌ,ñç».ð¦šÖ>˜Š\¤øßIYŽê?Z'­{ÏPóóÝ̇2§®OÊ£ñþuÀ±ÇcVñ—Ò@X>f¥&7n5µõëtµeŸ¨¶Y¼ò6yã ±-W*P¤Úå',¥„åÒP;Í ªÚ¨ Bz› …^Yøí뎽¢·AØ?¹îψOÅPû|\\•q©»~ôäúþ–ëô앃;»-!q¢-oá¦Èê¦?Lh¸cË6Rg³v_Áf¶À¹ûT(þ·Ö|7ÇÙËègEGŒЫò³»¸ÉÂ6ÖM–4æüÚ„Üw(ø¾oÌÖ¡Œ¥Õß.¶0J¹¾Œgþêè€Þ“r [Sb*_Z8ªˆAdMr`9ç¢àôJáiæ©­ò¢Å”tkÜREðµýi>¬,¨Õ-ÓÕð–ÞŸ Å‰<ßÀç iØHiìD0ª;/ð0ÌZg•æg[©`²ìÈêø¶Ù5âô&ùñ½ó[¦Q~ШŒì÷l\ï»¶ÛMÖlâ×ç ~k []ÜËE!º&,Ž4½W²élƃA>JŒæÔd)«q”ÁÖQm_ÛTn¿çƒJëÙŽA 0¼IÜÚ„p§çŸ¬ÌÛ¢7ƒø§ÖÒ½úóÛºQ‹â3qƒÇáP…™—ÖoÛ4)€È3%{°‹Ž”"Ùä7 …¡*˜g ¹aEÍÕɱTk#æÕ_I%Sá6B­‹Ý…q);ù±-®ñƒ_Ëk4-ú̦Ϛ, IcÁ³oÕ~á°¤ÿÊ"üãÏ8¼Åf$ býƒØ j;‹‚Xè"ÙºsßüO? ‘m—Ð ª÷Ö\–=¨é¢éÉA%rDuÑäÄè¢L¥ä™+flͧÞÒPo’ò) ÓeVžù ߇ç‘,TøŠé!Õe5Š“+µe_©`3‹­ß\~ùPŸ=— Ȉ„Ń™›ÛÝLk­Ø„ˆSäbÁõFß 0Ç0Büîäk“^(B4…ŽÎn³&ý=¤5À,9 ⻲ÛEŽØUPµ•m$}‚Â#$*1!‹'ðyÊÊÁŠDüËIĸ›ÂOçë™É²êš}¾£½ ¹Å–]ªW‹½Aµ³ƒâû³MeíÖÊ {ÉHž¾ 6¼f€ž©ÎbœÕHo¿}[òå¾ì‡–À)V¨¿¢B ¢é|LåjÏÎ!àÌî;R·_ž‚h4²µáŒ1`§í-ØÜ*‰FPÞ x…øÊTUeFo³w.ܲT0ïÝ¡´“u†¯¥¼›¬ÌÖ½^vîÏ–exË^Å]G}þ¼q/jÄK äòÙø`ÎE•!zjï¼°äÒuµGøh-µ^›²³#§A/¼ @š.S^NoÈÝÿd³×ÔC5Ÿ»ƒ¶(Äa³1™Ç9Ð¥â,f­Šê–ß³ÒÇ­´J›4·ot¥Ž™€òfäåâÜ9åaI\åíÈÆâ>§˜™l÷HèNÇ ˜°çHK HH²ÖŽR"µ íó‚îõÊØ…d-8‹‡K Þ®=Á¨ê•ŒÉ³8/ 1dÚkkÝ{Ã'Þä(l’¯8îÔ[B9©È­‡i„ï.QÝ”@sÃ3Èð‹•6]îˆ ×’é¦ž?Lm‘ÁÒhÃRõÑa+N¹Ä3[LÌgô7±›VjaüyǶçì`†ƒ>\7~Óv‹.Ô”e£Ö¥gæ¢b2XÖiÖ´þj ÖàîåQu\îÁÞ˜ÎM‹¢êJŠ ]7f úö~ü'R­×f±¿[˜ñ±N11Ͻ7Ö+â¾<<ð©ûQ2${R@™dŠ ¼ŒLO’¼Í¶àÚ9]Bé·ƒÄÔt±FÝeÌ!¾¶¤,`íÊB=˜|žUUô'‚FD Z€áΡßì cIÚUs5†‹ðB;‘™±* Ê€–^ZBaI#Kâ›ÑͯÙä ¯ˆ9¡¥M “Et’X2‡·¢Î½>÷X½u«‘ H$4è•ÝÊ€Š˜F³u:#'338¹&2ÜIà˵Š.©.A»\ç`¼ö_U˜7tKŽÓ QUSxø<™øx&Ì –X¢6UPik¿ñF”žµí9·½¾¸Åi£êœOøE*u“¹µâÀÓc<&ës– pÀ%;ã´_­:çk€Ž’º\‘üz1bW0 ¤ "ƒy´e¬v8È„++-÷¡Bèq&ÛyÐN{ÎÆþ;Ëån´s]…‘b¾œ|øhŒŽ©mÁÍŽ[Q¦’090ÜQthtªñkd…ÿ¥ ûBÈÈꘚé±ò‰Eí"q0p±v)ÄEɨJ^’ ø¢Þ ­ˆ¥%è”f³¼L/aè› 9]®’Ðb©8ÂVýsdKš£º.×1$¥é'%Ú”d@´Üš‘ÕsëXææÏÅià#,¾+böôQa9KF!}Ÿ=…²%L¯‰Æ•ñÌqìz\Ý+I's%tµ/›–R+ÙU/Ýö iÖŸ &†õP³Ò÷ ‰ iAˆðWQ5w¿4Ü‘ÁµÎŸŸC„B©·u©«ðâ_TÅðÝÍ gJÀð9ýÍi 4qŇq·L]Tta¡%œ½0J3E‘Í2õ$ˆXœaÊþHn4Ey¢¿¤ü¡±ÃLÿp °2ÔUÖ#oáŽ]8¸(“BƒÛŒÊ¸)´PiÑnfF˜èª°tiüyŽÄtv=°§M]4 s¶H†`C†0‚çô9i.0Ê ƒ-¤  ÉMÀ:ñë)>‰®2 ~ÜzìÀ®›˜‡Õÿƒèø4ï%ñƃ‰wd±YW’?@¿¡çµÒ,o˜ $Ÿ`1,aAV”ˆ:“ɪùÉâ4|¿P6ϳê.×O cæ0ªÈ@Õ¶w°˜l å$µ×jø³fæ1E7te“±±Jܱe¿_ÉX†uJ¢øÂ† à!=*iN‘üQ~ûöYqqñX™×ÝF JRR’ŽÑV²œ“|ÿª´é±òDîïãb 4ÆýûÁz™š†@b‹ÐX:»,ùÃ)LÌ˼¶¾þïÇuJ' ssZ*af‘¯ee\?ª«UÕÕ%µUU1®¯¯×67«m‡hÝ*̧~¹²¦ ;Z÷|¦AvÇÕ¾`HÀ˜{åò"3”V –‡‰Ý_“"UœL)S´7`OÙ̾Ú/Untß·›¬ qœ­ËWŒ"}Qú–¥T-.9Yéþæ¼Ø¢UšÛ¸Fôà<7—QøÃB¿Ç¢_ÏL­Ã«FwnŸ‹©cu¦ ïVì¹Ø¢<[.£ãÏÄ€"åŸrgä‘äFÞ  ŸõÐ1fÙM$ŒŽnOU1eJx¸n>wœ;³a`b vœ.Фªø¥ôÞæ—Ã$A™ÑïHΫ›]87.Óƒl?mÓç£äŠš…wtL(²ƒaÌœ’`®ê…/SÓ°¡ÚOÉÑÑØ Ÿ¶Û»È,úmf©+…ùÇxÁ{ÿþͳhõ?ÛŒMH 4¨0ýNçß[˜ío/‡-Ì){!‹Œ•>;a!ÀÀú±“oIk³W¡ó‹)kHQ°?¯3ÛFu†ÿÍöÙöhøÁ|cbê;û(öE„^º½63{KÙÅ…Ÿ.àŽ!Í›óñù*ˆ-Ó[5Z$%ÂI–“zzj<  k†y›[ø¼ë¹I LìnëOooŽ!ÜÜÔï|<ãÓˆª»{¿ B5¿ÎFÔŸÖt‹Ÿ„ëF¿ÕÁÜ/~O”Pú1—%¥sä¾ß9f*þg·¶tÒ¡eûù¶mYkþq·ç¿Ü?ù|ZBøý¹5Ӆߌér™ÖÇIÔgddžY—l ¥ûlÒèŒÇøŒ†Ý“Ô Tz5’MåóA„g…áÑ 6yÖo¤÷ºç·ä)ÅPšzÌ»õgJ|ý—§¬ÿÓižmHæ|XÑys1ºÀ„BOhˆaî!3S·U:¯@˜À©åúíBÀ£*%±‡o£Šºz^ÀãCºHìì‡V©0öþK|Š$ŒcRvÀ[2L%ã”æZ Å)X$@GÞú—‡ö$ùÖð·ºþiV0…iÀýyÓíA£©K 3‹¢ ¡ ~-zĘÄf<8§Çbƒ{ÒV]Lù&µ¾-hºÙ)•<Ó_Ûèk§X.2ùɃ'sÇGĪ…%N•ïÄß“óÍB¢EÐVM£’ZÃÁ8ø½§Öœ”DìT¿Œúv M?™{fíÃuŽ&ÚÙƒ•Vù<†'Ìòè¾t¢â¨Ø5¤!ï¹ð<åå:é¶Ò‚Å‘šwúÏ´2zΓ®Çp©ªªZ-ýÖÈRû`‰šË¨»'FîĄ҆ýö?ßšQþ, 7?ЏVÄlö¹|ÛMQã4?óû3ËS”YîŒßݰâó5ŠÜ±¶uÁ’¬Ÿ@aŠÒN‰ÙxR>í#ùi…ùùÇGx§KÁxÓ[-óßóó]&Í<ŽW¢xÃ̺©³àÐ Øû%L諬»¥•sLÌ¥-CqǸºº¦òY M]B;hJÓ>íÏ|a×/€Ä³Õ‚êñ% -ʼnê$&Òëz9«oη2"?9Šýn/FÖ= 4ÓÞ0Šõ¼õÆÀ2N¶jæ ˜²Ïû•’†\¶5K–œj¢5•§Œ×K§m`ÜA“¼(5ˆqYíþ÷>-0\h~U{–B µCg ÅsÀŸóä2~]r !yžüa}“´ø&!1‘Bð-öÏ9k÷®É¾ºGÌx5,Y±­7óöŸ²ÕÎ }M4ÊÎ"ݼ\˜–úÞFAºÓʂϡPª”(^ýÀ6b 1Ô¨ï6±¥@;¼‡VpüìböƒíÕѲ°‡,!–¡™Éåb@«*ƒ?N¼ñNv´;PU‰É°å^åÎMàbÓˆ'íÂ[º£ÔËF µéZnË•™>¢Ü1€õëuiH³féÝq8úM*›¿eðäûT<Ué¥ð–4Ý<¥T»W¨gʯ“½xŸö¿aš •wÞ¯­|e5ÊYQ$qØ4º‚¢%€®h¾0&â¾&é…9Ž ¿FËeå÷žÛ,Wmõ¾ÎŸÌ#·UkzÝ #0õ\}fìhô¶] lê©–Þ4š¨å·ÁNú°Afî866FÎËì’øý;3mÀËL£Cîy5ìäŸ\!ˆ0ð Ú" !Á˜l5Zô+zUý̦çs>"æù=´W¤···%/ç\ÇŠmjÆÄœ¥rkRDéQÚ8nñ%´•;ˆ´Û.oÒÝÁ Zï-†!á¥8#&VÖð*›ž´£¹:&wFެ'ÎÐlø[ÏïÜŽæ\Þâ+ÑF5ÂBìþlô×¹ DãûGuwEYL( õoÓq'ãwLŒKfËÜv'°):“+T›ÖgàëeÕƒv$×´ÝŽGá@}˜œ;yY#y¬OÙ$ü+k›¡ÅvÖ3AÁĺ€Œ$â_¶êŒqIIL±’ÖÖUÚ0šHõ"b`S±Îcú¶óqbOz`?çÛi~vƒM'A¤%ú»@+⒘Ϸ˜˜Øœë”äôŸÚ2Uyµ9åé°þ_xÃt´²_–\¢Á(O•QYêÌݦ¼'å.éø¦ð0|S¢6”%µ=Qž.WÊÔ–[K˜;Bز¾Ýbõ»—m½)·TýƒF8®²QK©MðÛ~j÷=g·!ˆHŸƒ_=þ؜Ցý¡ZA¿ÿE+íq’¥Ê£"’0Þ,<#‹v-VFoº–3³ÙgQ!ÓÞ/˜ÆœÑŸï|é[ŒB$þ൵×-w'ê™ –"Îb+×!ä`6e..–‘–ø$çŒlнЃÛΘÕpŽÜçó“ŸÁ=ä7uŽÛý©õ.šFU¹¤,,z(s¹ˆÔýì£D2ÀIÈb¤PoºD'ãà"¶3^*1|s®þnþæª8þþVߨ2‡gHz6 k'!›wY+1-­¯7ž Ç8êÛ.³Î!.„ L·×fw:¸1>ZjÈÛã3R>û'!a©²Vä6÷ü†!h»q´ ÐZbžopËSÇE-—V ΑŒ<·qà%¶UüšT«Ž°iÚ+,åÕOzñNé'¯wšnìi?4ý‹Ã¡*I-ÖeŒ­bÿÆç£`ËÑCÅB€“‡óÏXÜ%ék-ßyä‹fJàš÷ói¿£)p<·óŸ•™¾ŠJ ô*R½½Ø;íÄ1öîÚ«@>вþ%ŸùQò¼D<óJîLê$Õò”Xt›mˆ7†à‡ž[ýj –d[Evç÷<² &}{'×…¥S€ºO„½ÏÇó†§''¦~7œ[]à36R— *›t>7{¤ºC•¿l_Æ Š>uEä5i±GϰŠ2Ht p•1¡L¾¾¥³ÖKmÑ÷µˆÂ#Ûì}ã‚!%Ï0U_E ožˆ;^¥ªz«‰$'CΉ„ŠÍgW…Ç?勒¨H‚ŽºÒÀ÷Uˆnå×Þ¿¦;«Áõ¥R&/÷çR»3ÄÎ½Ž»º¹,²]\Væµ´F›}\IûÝÔ~Aÿþ=Dt“úV¤Œ‹·Òþ¥fwŒCÿX1ÎTÓ+']§°…f*l4õÀ¡bbà6 Á\j÷Å0©,>“Ëqƒrc—>öÂú±¯½Ÿv>ÁìÇ÷0˜ßé® ±nô‰bœœœh0£úEzžÐåëcAUñä`çgÖ$ùiVm$N߉󸃽/ö¶µ ±UÔ±þë׌kä)GEÓ̦hË ¬lýë¬_ßëöd˜ò†¼LÍ+QHg oÆï|,ŒGiB ™¥¿l•U‘¨çýzŒâièͬHÉqÝô™S=ÿ;¤mõ/W\ò± F´7ϹŠlÏÓt$Ì¡óôà"%É"âù«-JÄÔd€¯¹vYÜúGyw¢üÝ\}•ºq-=­ûyšZÆÒúW*Ak™¶Ñb<Ð|Êá®Qà‚n=¤s ø$Ig[ ¹ey à*û Ô¬ÑÝ­˜nc{F({íõ%7qÐ@º`ªp9Þ4{Yj¯g`P»ŠlÖð‰ß®Šô¸“W‰<€À zEN÷’Oƒ¾ª£<E+–ìhAW†g®ÿo|ÞéjÖ…â×!¡b6׬ðêíšHg $}ƒÖ™CÅV”=è+#‹½D$öâß[ŽÊIYYZ¥å{M9LWÿ°†õtâú7³m«ÞØXo<·ƒ5¸íîÔ ƒ$Ä&°Ø6®¦WsÙ;ô6"¨™Ü™z É{q2ú[F×UÖ®. nÚ|«Ž-̰zÍwy£“؞ż `)ÒU’Õð.8úê¦ìY-ÒªÀÔ]gð2‚ƒëŽ2Jmiå®ügBô«Y,-\¿BÞú®ÒÞ»mÖÓ-·¯ÔßÞüMFåvgÄ–TÉGgSþTŠ|Ï ˆµaï¾CµÏáÔLÿd!ô {¯0[‡2V¾ÛÊê ¦ûM#wXmÿQ¥ÌÊŽÏ9óÕðK7^´5/°²d?o"àú×wrØÜ\§Q¥îNÛÏUU‡ó£îÕCËã’I­§(èFo»TyÊ¢k_¿ŸUÚÏW—ÚK$_ä½E|7.Ùc éŽØaiÑ⧬l’¶-=(õòò2à]â §þfÀ}‹fÄ %ÕYîHúq{I•CRz8ívñ1ÁNŒCE)u|¡¿½Âi.Ëþ…ѲŹ(€I9ùJ\ŽÐšm÷8 &1D4K–ÞréœLíwœbTÙ¤!'ÇŒ¢jÄCEo|oŸ}goâW—‡©Yô¤ÐE³âm]‡qÜL·ä/N7‘ˆ ..5õ¢¼3Õ°!á2tÊ£ÛbA½És£/ ×D^p¢ç`s…½`J!ŸúÓˆé;1‹6@b?ÃïÂ*™ûoAQoZb½ãlÀTƒ›¯Æ!Íü½ý`€.(ØÅÿ`íÆ˜¸Mê¶jD‘Ç6¦¬r(®¯¨ÁѬ'„…WT–/ ¤¸Zw[Œ ?ó–$)i b𮹲«ûvŒ4v·ÃY·8”ËsߟAåNz3·c]A±;1®Ê€øª;'Ù02¨÷ÓÏzp^½zUuÑí:(u‰_\LûžG>»©•¾a©<×sÕž3RÿÅ :ŧ…~ò€ 1J˜ ¨ó(½·È€[P‘yóÜyCUÂýÖ×ïçwÜDÞ3IHÌætÅGÂ#9Á90„bð)ÑeŸ1ŽO6ÚO}n{T8|óŸy/É`d-L2(¿ÓçƒÄÞ¶¨«µ´ PØ0xãÉaÁ¢/=6Í`ã5U#¨÷z‹Lݬ¿‘ £T±«CÎèb¾!ÿÑ“x¼óv:—µÑù—7°ËíŽwœ¨N!%×±­½_m D¢“k£xó?M|c·´çÏKíVÉo*Œßq½rœ©½ˆœjœ ÚìOëÊ DÂð®Ì}}˜î\PJ²ù£ã_¾À[ÜÒ¦»I áE"“ó•30¾9¾ö(Ô%Ê?íƒKÕ—œ¤ËɟеõëFK˜|ðöèjƒ%ìØ//+ý%øËvý± þäØˆßù0ÇÑwûÝÔC™âëÀÍ3l#À¥=ûQn¤¢†ù¯¶ÔK×Áh¨q»#Úq¶×¼®¿z×ä÷UK1íò%ÂYµä†ÀR7àÊ‹Ò_o–i±¿‘ûCì#DFùª©uo…®Z&Ö‹T˜µû²øOæóˆ`²­Ý3œÛK*’BtVÀ~Õ.>l™zK…ý®jo—?9=]õÖKNJÂÏ” ³>^éU7à½ú‹{2ÿµÀ A²L߯վ¸˪ƒÆãNÁËKÌçÂ#À4lÂSF¢@rŽ{Ýù™%~ºÖá«„™K|õ4DIéªP}ׄ\lU`(Æ‚Áãä5¼ŸÄçbï[“)œÙäY¼á@ñüƒgþ×ç£~B(ôRR*…Z=<$¸ÈK‘ZéõnöFîÇó²h´Ëy[¿Ï„á |ò¹„ÇÁs;]™öC…´Ã@xÿ-õ 4Ý&}0óô‘‹œ]6[PØù4€‡uþÕ=¡ó¦ƒ wˆR¨;÷§ì8˜H^¼¸ÝÌp/¦;ÐËSC¨ãÁÿBÜɳ¯¸u÷«ÊiäŒúׄ*¿ÆÉy¾®Í›[ ¨ù—wŽzqÄ™¨Ùå8„€ò˜ážÄ ¶®Ì|õNÜÙ¤ˆå ·öm}Žy*Q~û—¨Ëá$Ü÷–Ž–¯ØÊI¸Ýh×O.{:»ç°ÈDê×t ÞZ÷’k5EÙ¨K|8Ð95Xn‚ÕhÜ8TÇžƒjÑ38†è™sއ¼êCs>˜…åù‘×ï¸*‘=4 .r¡™”ûá¾få³V¼Â¬´5عÉõ»ŸOä)6Õ‚úâíKÊòЛŽó¯Í¡f”ûÞŸ‹þÃ+Èý©ŽÐ>c’xPeŒ«¢´Y羘’~‹½+}µPŽ-ø.‡oü„ý'4t,àÖÞH@°zË<Òý-}q— ¥Mø Å1Þ‡MÏòè²Ãuƒ›ïoOçç~½÷Ú ÀÔªväuÿ»ÖŸAáž-gçåÝÜ…· Û½©­¹)†_€ÛŸˆ3 Ô´ë÷•¼,Ûý¬ž_ð!ªÆó?".AIw¾;Í—Y…~è=ˆ.;¨ ”ó+B1ýˆo·y5p”-kúF²^=Ì{\;Ó÷IÍ ~û]ó®…“üÇÇuµ`RVç;K¡+h:BÎ/êŸ,î×µ5ˆ}4|#©„¬7–Ë,*e;1>îGÙ§³8Ñîp™ïݸ_!va§P(ÇHclƒêûòà‹­­}ÈH:æÍ7Ù.AY¾ AåfÍþIìºû2[ÌéÂŽñà¹îµiâUC\„3:è¹z2—K!§ „%TÆûb­§XÿÚjæùÅã9<Ät*–Ëæ/é™û±ãÝ”å<„{­rWkûŸP œÈµö @µHí·»¾çNñ{¿½ª>Q¹´Ïæ¼+å¡a:l¹ŠQØÆnô ×̯±ÛˆÎP–be–ô³%Ýî4\̪\‚$›Qøªôïo‹¯D>gÌr!Z2*ä+®àÉñÑ€¾D »ƒÛä帾—óóÛj`órJŸÛKÛû¹_ww+QÔâ{ñs{vóÛO7íâ×é…Œ/-`¿ B¯;¥ð©*›pu?Uü„„ÞÉÍÕžÓÕïªÔõWÖ³+ȵe93Ý1uœÆ¸Ô¢m#ùê8Æ™1-Åö‰cݼ(mHN²\3èÚ|ä¯7úSÜX³‰î?¯“¼¾KÆeyÇ4>²˜þÛÜ Tm;Tð½Ó®šäžkTm¬;;ˆì©Äsd8OŠ`M½^ i® Æ\ʇ¢ýæútZø-¶â@Z—oÅ‹ºŠÇ/K~a»qB;»•÷3…­UðÚ˜œ&üj‹Š`b®ˆ‘«ó™Q9åíÍÅúíÏÅ·§§C®k¼7Ô–qsÛ£4[f¯Ÿ#¤°.)ýSý.ûaé(Etß™¼=ZÈúþ¾¶ŠÚÊ YåqŒÈ•U7v¼vœuˉßüõ©ç;„»¿èÀTœ†¦~Ü@7¾£-@–!NQáx‚\ ú]l’ׯë¤/Èw}b+Z^dÐë˜îýòBƧ³zòH_­›N?GØÿ#³jr w¿Ñö¤lÈ ¬Èþô-©ÎT°›ˆ‘ j÷‰]™+hy¬´š®ëýø§ó~†éå¡<„ÀÂ|H^óYºÇ@M7¯û§3šìèfÞ8šÉ¡ÁÇsßì}|_öê=¥LÖ]…™"·+"¬‰R§§Š»q´Rá ²žlÐ×h?¾àP”åA=I™å›YwºØ›Æhô€"41üÊöøT· ¡‰‹ó}u>©û”gbÕoã_˜îõ®_Ìÿ­y7Šmœ$…àâöL1Юt:HõÊ?冷ù,Ab>þîÏ?ƒò)„9›[zY{Qé×ceŠR2ɨV»cÙn0œù­c vŽDA:’€òú: ²]ÙìIoËR0ž´s“rÂ*{¹~¸™BX¥Ó²|ô ›rº«G1øÍ›:sÛ®H.á29$à­nãc1,Æ~œŠp0 €Ës®ráâšýXêŒ/X§Ž&LÞ,Lˆ‚###=/¦m5kš¶º¼µØŸLqG“'6Œ†×÷ J‡ŽÜ{87íÜMOùpntüUùS|€èÃ6ÜÑÎÉ®Ï*ë–ž¹’ßÿ%ã1µk×Lê$²ð=FùÐ|ž‘<‰Ÿ©ÊqÐzrfØøØ½Û”Æü6 /—ȹÙj·0Û?m¾ÑCbŽ5‚ŠZÒ3N™Ö+$Îj»ªš¯ZŠtÌ"m‡O ZLJ˜®#]©<¼8ÿr Uòî¨#iš:$¡^|-^™Ö*{¹ X_R]4P~ÌyPàèù¨7l¶fËJr¸Ú”yÜvneÖ°jG–~¼s%↷ÏÕdS®cÀÑe½»¾Ñ>þ%‡Æêô€yPn(Zl‘ÜŸ-³¸ì¯š±ô—·õu{Æ3ã:”Áˆ•þñ€ªñž†Ç:´DðÇÿ¬>,†öÌëf»ðÕO§ÌŽû„©?ÉÜ&õ·š{ ]"]Éî;sðù˜…¸õ<ôf΃^K LžýHÆo¼ÿÒÔ´¿H7ïê|Ò"s?«“ôâpqFÀ¤Áu„Inÿg 8¢ô0Šqø®€ -- Ú Ëa‡âžGô ^…eôk®˜XXb¿ÿ¡ÈÈ‚üËù̮Ѕ4Üðø}IaŒ.'wA`·å|ºÁ³# 'Q=ÜO ‘Oà¬2wGÁ…€Ÿu}äÌÕ—€g_V\§ì:ü,ìa¢J$üíîlT;šZ쇚£ -^Ò—/.‹~—Ç1Å÷(;ôaï™peÊ•ÝîÇäGûxðÆŽ•¬¸™'­àêo·Ý U‚#–§çº¾o{f\È”Þóc6þb;û›8ñåâ\òÒôÜ)•¯ù´Q³Ê®^e— ~ÚÒ¡ :JÉSŽý¸™é‘6·ÍŽ¡ËV÷Ûp¤û3ñ¤…Ëcí™ =Š+(a¯y Êãr8]ýz²ÉT£<13 ²´ô;xÎ{·Ü÷zýë³E~ÀެãK;ʃ@ѧG›€Dc‹~ùí-cr y9eõ»Ñg¨8”J±îµÅ%{SUÁ¿ƒÑªýï½ëÁ¢Cí$µ£þ}£2HœÚëý„Cè›/^c˜;ì`·>>H(„a[!BQËM/×z M›ò9Ìq¶.ÕWY{é„^°°«}›óÛÑŽ!††OÁ<6ú¶ll–k½ñ¢ÿ:KUËúÓ„¢¬: |Äð®ÒC9wæév ÎÂàˆ]ŸÅ# ïZ¼SžÀ&è7ýjOìfEãABzÌ”†•žô½MÏçëз!dd¥.ö…Qµ—aç…2* #Ðè<¼¬Þkæ»ñšÔE?ÜßV{ŸÛ+{›ŒOUZ!!¡áFÿ0_e D—nÞ â_*¸}v{€ßD… XÆÔGÎ_éxàä#?¤:ýÐêòôÔÿÎSM]=sëS»¾¹ùàwÕÄúãnªi§aK žrשջ*6á(ÏŸÍŽì¾ó31°˜£y¢3ÖB)OÌ#¯Að6MÜQ>W:#L]„ž Ž1c":’•nªk_ Í#Ú×µåúO•õÿ‰PÛOZü"CLƒoÓvŸ´AÁDç kØp@‹–ûž˜fs{±M%½™å£UÁÄ—SY÷ÕÂ?5 íäþrQùx0­m>e¶WÏQCeèügϧ|à µ¯Uü ã0¶g’ÝNJ°Ü‚ÿ­£÷åÁ@ª ¢ýûùs×E‹ØúOËÓ;ã§7‹}CmHÐqÌö™phž~°LÀn Œà*¼hr ¶wÞ#¢Ç"’î»ÓtÞf0÷\FAÅ&oûñæïZC%¢Å{ò1¿Ëùž­÷¤ëCH eë•òߧ黮Ƴ› y8ÝY6]Vv¾STÐ ¤×1wIzé‹c@Íaø“ÜF¼Û.}¿Ð”ú/Oy´ÁÍ! —Fms0#dšM0þU­= ¼å†Ãa²"fy>ÆÞ¢%|¹]3Äjý8uxÉpš¾üÜl9¤`Edye´%fKBKa¡—•V¨JÑär“¹í””Öïýø«¢.hM G–{JœÏ´³Þ량€YZø¥{çož³W´þ˜›”ž´Ã„~ÐuŠÄ_F‘%á+I@c¡[îuó5¥Î‰‰žiäx.˜z­yn7Ü–ÜÚŽ·7û3öútótPâ°Á-ùP¦iXÊêÏ]ö²úÓX«õ]$0Eu>ɈÒöÕn­@ÿÝÙŽÂ1˜¸i?p»ÍC×Âíp¡¹éáfW#…/ÐuP,ܼÙû_­ƒ¡€à€¦ÔMDBa2¯Å` ÖÕ^õª´ Ã}bÅóz™„ãÒžû ª§°àï ÏŒæ;Áæh­CmPr¨‹Ð¢ä -¯å#Â/¯OÖ¹,Z2žÎ8¸ív+’™A µ2ùZI# †Š˜”ô‡ý8‡ôÍ"ç+ÉÉv N@ÊzDÉ|b´Ó7J…ÒH,jWým­Ÿ#¼#ƹ& ÊˆŽ¹“-ÁÐøŠ œGEF5yòG‘ñ>KuߟqAäÈÑ*e-©óÚ6¨oÞ¼AT=¼²WÕa_8 Oö.Î$]§©4í„NwržBÔÎt£¯]Z)Ùef=t—¦[xN?)´>›É=#Í÷wUÍúúzbrC}÷î]Ó|ZãìH®"–q¢¥!Ñó¿^'{:g2$óØs¾;H ŠŠŠÂæ,@FàUöú”§ùùuG̵ƒÞõšáû ÿ80>«]O”ñ*+òzÉä½pÎç‘ôÑËKˆ²ª*Æ¢ÿ-7bíg·ª«©åÊ£>?§CŸž®n`0‘­|¾3þH 3®µw¹:²’ÿ†ŸŸŸOLL—ý¸Yõt¾f¦ëé|Mµml° *þÂÈY¦ðAøü€²ã]-GK‰¾_9ï01´^ÎË[6=ç†òà-ûdÍ;`.ö6½Œyâ›3"U6z¾E4m.•Œü(ñ-³Hv{ÃBc§w‘ÐBײãR¢æŒ¨«pLÙ¹œL ôË´?h_±ì~ƒ,Ï^Hi#ñU´QP豺&Äò±WS‹`ðêË?¡—á÷¥wýŒ(ôÃD õËBeh«o}½œ&¤¹áo ] v Ð oÜPÅÐ#sñ/ÁšÄúº–'쿟¸h¶ŠÆ¸¨ˆè,¾ß¹÷éÊ¿PË<à…Ô×m"m–®)uÇXϦe¹5-Ý õÅÒû)ÿi€ NSà"Ys²`¯§^µ…’ô€,¹‹·”søÎÂ^@VßÁÚ²ÆCÅÿåÜ?:¨{±‡Ñ99¶Þvãé+äµèPgþŠÖ“×ì¹'¨Üʺ߄ý»tQ߃ýÁþ¨uô’XpUE®?Ž|w‰. ÍxÊß-³Åʘú·Jü{PQÁÆsΤ½?iyäË8[8íñòë|‘—Nhþ(î€'îi)a^!e\8lгÃÓ‡Êáñp§Dk‡¥y†e~á)U€$* š¢ @ïE8#˜VØà­)÷|õž¹óª!uãR9ФÇ?„ž”w+¾Kì»vaÑ)pÿ²Ë8’¾Ë€ÝË‹üÂbü]óŒ€ùNa áž+ëŸl=€Õ _çú•*­ž“ F~åŠË o$k"0wªlb$“.ëÈ¿p­ý—_?é7Þ=ð!|:βhr“wNêc\Á±›$UáÀéW˨ÖƸ(þ[ÏÎÓ*ü»ÇçÉ0aÑ”Á*Æœ¹Ê>M/bú¦§í¼%}v¶¯ÆÕÏõ-øœ%.½eð‰¡!ŸŽ’pp_LzXdÑêXGP rüCøNUËÌUí¬ûõÐ:"åÑÓíA©‰·gÙJ6w¡Îÿ¨’CKZ*‹!üì¾ ›q‡¡Ìù8•;›¶ï›28ÎÙõЕ¦,‰¬ÄË"l´1mr|¶¨·QN¹b‘Y4ñ¡ŽŒ.^:q‡!Å‹†[ö’Ë›É#’ïÀ Œ1ýPï,èGW‡fÐùû@cô1sPg6yˆÏL8ûJ‘°×½!¶Eú¿Í€'a_bŸsŠ›èÐõêÐ("4¹s°É9ǼãA]6дϻ™°¾Š<æT‚û¯ô„7Òá"€pÏŠì7ƒÑ#ÅÌ‘käñ+^x}gšÍÍò\/5ÿ‘ämôÝ¿/\з6®ûë2gg+ üÀ—rrc^ÆÅj÷Bꋱ ÞÐ C‰Ä·áѤ×ñAÇ7G·&WAµ=û>)½_–M»¡S ÙAÑbnq§y‡Õö.¸…x£j”+)$ÃiCäl?(¨SÈç€ñó½ØÈbÎ=埭ñ…Ï'"%(¼š§Í3ÚÔ†°PÜD”A'+A.„?I÷zŒW×o<jŒ=Võ„aß™anÔì¾yf‰I A~ožÉ_¬µ¢ŠÓÿCÁ_)Àctúò1$͇¤…aN7¬ÅÐÒ»ý\ûÞ¯^žm‡$ξC{\LïÅ~í91áß'[¨0"*ò p—ŸÌø¸uŽ/\È¿=„œGT*ÁÑß]Ah¨½ÈÂ0*T8-;å©%”µ†N¬„ÐG¨ÙŒcÝ S¶d¡oyßšÝ;kì_î/oÍn«€âR ŽÄöph$|'F£ƒÆ8X$«í¸¨u)™÷wëgÌ ‘¨Aµp‹6Gô§ªØv]²™Àwdœe#<¹Ûæ‹R]>ö¼¦\²÷ã½S¥ÉÿJãÁôU° XÍBàI£óhÀ2fÜ èœÐglQYàÈù>ƒ 9¥!*§Ceò½Xº4BÖ88¹Û • xblå¼bLÈ„ZRž²”NEÀ‰1^…qW•D  Ñ Eàa…ØÀü’üÿ_NN•2¶ØË¤÷6ð #˜¥Ù*P¤aSí!€J£¢,c+ñj€ÉÏ/Ú¿£«0‰­¢1™/"¡•€~*˜[ºz p[q÷€!R#ôoܯ9ˆEØàUàµó°G´ð e«­P%R=5;˜0‚ TÝßb%À'úk%Ÿl”±õÿîT -<¿ ûÓfIŸRv“O Š`>€Í_Éuc*q*+¨Ýx=XÀ¿Ýn¼eà‰'énÚÕð^0 ‡ÌLH— ¹-§’Ùúß.ßë;Á'ZâÝxÝÿ·Á²õ8X ƒˆëEtb~F x*%ç?M¸UE-H…¼eÐÿPK “nYTÕ¯WWplt.iconset/icon_16x16@2x.pngUT V(bX(bux èè‰PNG  IHDR szzô pHYsÃÃÇo¨dtEXtSoftwarewww.inkscape.org›î<äIDATX…½—klUÇ3³vXì†Ò--òbBH¬-Ñ‚V`KLøPQ^Æ–IH%V¢5È>ŒIS±•„W‰À Ñ´hJx¸¡ `I‰ÔbDÁÙ%m¡eß3׳Ën»¶€þ“›LÎ=÷œß=gfï]ˆk˜‚ôô„0FS“ŒátÆíuuqû¸‡¬ò:c4&Œ€[Ð#â‰|B0Ug‚½.j{¨Ñ'`Ò=PVÅ’? îB—á „`ÛãH‚È„ÃñÉÀ9!¸#!!˜ñ¸„€KTŸ \c[·À |˜<ýèš …L}>Öo©p ³¹«õÿ9H QYYAnîUàZ€§1Þ°Ý0G"7R¾xåå#(ŠÀívò£»”Õ‡Ö0¹£#%€Ãá@–€¿Òl&aT¨x'6!£ëz’», ªª†$pXU¦kÆÎ‹vïFŠD’ü5M‹¦½`Œ>ÆŸM¦"<OÊ]UVÓ`ÞE¿ÏË¥(¤3éèÑ$_¯×‹®çÁ4i VÒÛ{!åœÅ¢3íƒ¹ÞØH8?ÍfCñù(Þ¹Ó8øtæÌy|¾Œ z•ÎÎcˆ1cÒTOm-—ŽáêæÍøgÎÄró&öÓ§6ääÉn„(rÇ Èáĉ½„,3ärñ{{;}ûöa¹uëþ\{ûAt݉ñvORF1…1>Åp¢ÑͶ’öö=gÏôõõQ_¿¿#P ¼ Teq’ ¿¿Žúúõô÷÷g½êòåË444ÔÀ@0®Ò´f<žÔÖ¾IgçᔟfL¡Pˆýû¿bíÚ†‡WF{oªîûŒ³1y€m¨ê!rsï²xñ"**Ê(,,$‰àñx8{ö<Ç»‰DJðû_ÃøQ1ó€™Ñ8Î; ƒ8 \AQ~FUÿAˆA@òðù¦£ëeÀŒBËÀKŒºÙ<@èþŒ&ël¸7s1zŸ¨LáLÉ®7¢‹tÀ†Qö’b'¤¿”fŒ#Ôã“ ’ǽðÑõ7p˰&ŽÀOáßN¶ãª€Â°®áü£“'\â”WÀü5صÿ¶ôC&ÐÞ…ð.€6±ÓÖ {ˆÕIEND®B`‚PK”nYTR¡ü¨ý1¡2plt.iconset/icon_256x256.pngUT W(bX(bux èè=zTSïÿðÝèîî’né†Ñ H‡ ‚ ˆt%)Ò HÇ@B¤¥EJº»»;ÞñýýÏ»sž³íÞçÓ}ï¡£¥ŒƒI‰ Žª D@ÀÓBGE|™~,z‹øÂpVyå îÔO TØî¹ƒ¸HñIÑè“þ‡·Ÿ<¬>¾<<ð©ûQ2${R@™dŠ ¼ŒLO’¼Í¶àÚ9]Bé·ƒÄÔt±FÝeÌ!¾¶¤,`íÊB=˜|žUUô'‚FD Z€áΡßì cIÚUs5†‹ðB;‘™±* Ê€–^ZBaI#Kâ›ÑͯÙä ¯ˆ9¡¥M “Et’X2‡·¢Î½>÷X½u«‘ H$4è•ÝÊ€Š˜F³u:#'338¹&2ÜIà˵Š.©.A»\ç`¼ö_U˜7tKŽÓ QUSxø<™øx&Ì –X¢6UPik¿ñF”žµí9·½¾¸Åi£êœOøE*u“¹µâÀÓc<&ës– pÀ%;ã´_­:çk€Ž’º\‘üz1bW0 ¤ "ƒy´e¬v8È„++-÷¡Bèq&ÛyÐN{ÎÆþ;Ëån´s]…‘b¾œ|øhŒŽ©mÁÍŽ[Q¦’090ÜQthtªñkd…ÿ¥ ûBÈÈꘚé±ò‰Eí"q0p±v)ÄEɨJ^’ ø¢Þ ­ˆ¥%è”f³¼L/aè› 9]®’Ðb©8ÂVýsdKš£º.×1$¥é'%Ú”d@´Üš‘ÕsëXææÏÅià#,¾+böôQa9KF!}Ÿ=…²%L¯‰Æ•ñÌqìz\Ý+I's%tµ/›–R+ÙU/Ýö iÖŸ &†õP³Ò÷ ‰ iAˆðWQ5w¿4Ü‘ÁµÎŸŸC„B©·u©«ðâ_TÅðÝÍ gJÀð9ýÍi 4qŇq·L]Tta¡%œ½0J3E‘Í2õ$ˆXœaÊþHn4Ey¢¿¤ü¡±ÃLÿp °2ÔUÖ#oáŽ]8¸(“BƒÛŒÊ¸)´PiÑnfF˜èª°tiüyŽÄtv=°§M]4 s¶H†`C†0‚çô9i.0Ê ƒ-¤  ÉMÀ:ñë)>‰®2 ~ÜzìÀ®›˜‡Õÿƒèø4ï%ñƃ‰wd±YW’?@¿¡çµÒ,o˜ $Ÿ`1,aAV”ˆ:“ɪùÉâ4|¿P6ϳê.×O cæ0ªÈ@Õ¶w°˜l å$µ×jø³fæ1E7te“±±Jܱe¿_ÉX†uJ¢øÂ† à!=*iN‘üQ~ûöYqqñX™×ÝF JRR’ŽÑV²œ“|ÿª´é±òDîïãb 4ÆýûÁz™š†@b‹ÐX:»,ùÃ)LÌ˼¶¾þïÇuJ' ssZ*af‘¯ee\?ª«UÕÕ%µUU1®¯¯×67«m‡hÝ*̧~¹²¦ ;Z÷|¦AvÇÕ¾`HÀ˜{åò"3”V –‡‰Ý_“"UœL)S´7`OÙ̾Ú/Untß·›¬ qœ­ËWŒ"}Qú–¥T-.9Yéþæ¼Ø¢UšÛ¸Fôà<7—QøÃB¿Ç¢_ÏL­Ã«FwnŸ‹©cu¦ ïVì¹Ø¢<[.£ãÏÄ€"åŸrgä‘äFÞ  ŸõÐ1fÙM$ŒŽnOU1eJx¸n>wœ;³a`b vœ.Фªø¥ôÞæ—Ã$A™ÑïHΫ›]87.Óƒl?mÓç£äŠš…wtL(²ƒaÌœ’`®ê…/SÓ°¡ÚOÉÑÑØ Ÿ¶Û»È,úmf©+…ùÇxÁ{ÿþͳhõ?ÛŒMH 4¨0ýNçß[˜ío/‡-Ì){!‹Œ•>;a!ÀÀú±“oIk³W¡ó‹)kHQ°?¯3ÛFu†ÿÍöÙöhøÁ|cbê;û(öE„^º½63{KÙÅ…Ÿ.àŽ!Í›óñù*ˆ-Ó[5Z$%ÂI–“zzj<  k†y›[ø¼ë¹I LìnëOooŽ!ÜÜÔï|<ãÓˆª»{¿ B5¿ÎFÔŸÖt‹Ÿ„ëF¿ÕÁÜ/~O”Pú1—%¥sä¾ß9f*þg·¶tÒ¡eûù¶mYkþq·ç¿Ü?ù|ZBøý¹5Ӆߌér™ÖÇIÔgddžY—l ¥ûlÒèŒÇøŒ†Ý“Ô Tz5’MåóA„g…áÑ 6yÖo¤÷ºç·ä)ÅPšzÌ»õgJ|ý—§¬ÿÓižmHæ|XÑys1ºÀ„BOhˆaî!3S·U:¯@˜À©åúíBÀ£*%±‡o£Šºz^ÀãCºHìì‡V©0öþK|Š$ŒcRvÀ[2L%ã”æZ Å)X$@GÞú—‡ö$ùÖð·ºþiV0…iÀýyÓíA£©K 3‹¢ ¡ ~-zĘÄf<8§Çbƒ{ÒV]Lù&µ¾-hºÙ)•<Ó_Ûèk§X.2ùɃ'sÇGĪ…%N•ïÄß“óÍB¢EÐVM£’ZÃÁ8ø½§Öœ”DìT¿Œúv M?™{fíÃuŽ&ÚÙƒ•Vù<†'Ìòè¾t¢â¨Ø5¤!ï¹ð<åå:é¶Ò‚Å‘šwúÏ´2zΓ®Çp©ªªZ-ýÖÈRû`‰šË¨»'FîĄ҆ýö?ßšQþ, 7?ЏVÄlö¹|ÛMQã4?óû3ËS”YîŒßݰâó5ŠÜ±¶uÁ’¬Ÿ@aŠÒN‰ÙxR>í#ùi…ùùÇGx§KÁxÓ[-óßóó]&Í<ŽW¢xÃ̺©³àÐ Øû%L諬»¥•sLÌ¥-CqǸºº¦òY M]B;hJÓ>íÏ|a×/€Ä³Õ‚êñ% -ʼnê$&Òëz9«oη2"?9Šýn/FÖ= 4ÓÞ0Šõ¼õÆÀ2N¶jæ ˜²Ïû•’†\¶5K–œj¢5•§Œ×K§m`ÜA“¼(5ˆqYíþ÷>-0\h~U{–B µCg ÅsÀŸóä2~]r !yžüa}“´ø&!1‘Bð-öÏ9k÷®É¾ºGÌx5,Y±­7óöŸ²ÕÎ }M4ÊÎ"ݼ\˜–úÞFAºÓʂϡPª”(^ýÀ6b 1Ô¨ï6±¥@;¼‡VpüìböƒíÕѲ°‡,!–¡™Éåb@«*ƒ?N¼ñNv´;PU‰É°å^åÎMàbÓˆ'íÂ[º£ÔËF µéZnË•™>¢Ü1€õëuiH³féÝq8úM*›¿eðäûT<Ué¥ð–4Ý<¥T»W¨gʯ“½xŸö¿aš •wÞ¯­|e5ÊYQ$qØ4º‚¢%€®h¾0&â¾&é…9Ž ¿FËeå÷žÛ,Wmõ¾ÎŸÌ#·UkzÝ #0õ\}fìhô¶] lê©–Þ4š¨å·ÁNú°Afî866FÎËì’øý;3mÀËL£Cîy5ìäŸ\!ˆ0ð Ú" !Á˜l5Zô+zUý̦çs>"æù=´W¤···%/ç\ÇŠmjÆÄœ¥rkRDéQÚ8nñ%´•;ˆ´Û.oÒÝÁ Zï-†!á¥8#&VÖð*›ž´£¹:&wFެ'ÎÐlø[ÏïÜŽæ\Þâ+ÑF5ÂBìþlô×¹ DãûGuwEYL( õoÓq'ãwLŒKfËÜv'°):“+T›ÖgàëeÕƒv$×´ÝŽGá@}˜œ;yY#y¬OÙ$ü+k›¡ÅvÖ3AÁĺ€Œ$â_¶êŒqIIL±’ÖÖUÚ0šHõ"b`S±Îcú¶óqbOz`?çÛi~vƒM'A¤%ú»@+⒘Ϸ˜˜Øœë”äôŸÚ2Uyµ9åé°þ_xÃt´²_–\¢Á(O•QYêÌݦ¼'å.éø¦ð0|S¢6”%µ=Qž.WÊÔ–[K˜;Bز¾Ýbõ»—m½)·TýƒF8®²QK©MðÛ~j÷=g·!ˆHŸƒ_=þ؜Ցý¡ZA¿ÿE+íq’¥Ê£"’0Þ,<#‹v-VFoº–3³ÙgQ!ÓÞ/˜ÆœÑŸï|é[ŒB$þ൵×-w'ê™ –"Îb+×!ä`6e..–‘–ø$çŒlнЃÛΘÕpŽÜçó“ŸÁ=ä7uŽÛý©õ.šFU¹¤,,z(s¹ˆÔýì£D2ÀIÈb¤PoºD'ãà"¶3^*1|s®þnþæª8þþVߨ2‡gHz6 k'!›wY+1-­¯7ž Ç8êÛ.³Î!.„ L·×fw:¸1>ZjÈÛã3R>û'!a©²Vä6÷ü†!h»q´ ÐZbžopËSÇE-—V ΑŒ<·qà%¶UüšT«Ž°iÚ+,åÕOzñNé'¯wšnìi?4ý‹Ã¡*I-ÖeŒ­bÿÆç£`ËÑCÅB€“‡óÏXÜ%ék-ßyä‹fJàš÷ói¿£)p<·óŸ•™¾ŠJ ô*R½½Ø;íÄ1öîÚ«@>вþ%ŸùQò¼D<óJîLê$Õò”Xt›mˆ7†à‡ž[ýj –d[Evç÷<² &}{'×…¥S€ºO„½ÏÇó†§''¦~7œ[]à36R— *›t>7{¤ºC•¿l_Æ Š>uEä5i±GϰŠ2Ht p•1¡L¾¾¥³ÖKmÑ÷µˆÂ#Ûì}ã‚!%Ï0U_E ožˆ;^¥ªz«‰$'CΉ„ŠÍgW…Ç?勒¨H‚ŽºÒÀ÷Uˆnå×Þ¿¦;«Áõ¥R&/÷çR»3ÄÎ½Ž»º¹,²]\Væµ´F›}\IûÝÔ~Aÿþ=Dt“úV¤Œ‹·Òþ¥fwŒCÿX1ÎTÓ+']§°…f*l4õÀ¡bbà6 Á\j÷Å0©,>“Ëqƒrc—>öÂú±¯½Ÿv>ÁìÇ÷0˜ßé® ±nô‰bœœœh0£úEzžÐåëcAUñä`çgÖ$ùiVm$N߉󸃽/ö¶µ ±UÔ±þë׌kä)GEÓ̦hË ¬lýë¬_ßëöd˜ò†¼LÍ+QHg oÆï|,ŒGiB ™¥¿l•U‘¨çýzŒâièͬHÉqÝô™S=ÿ;¤mõ/W\ò± F´7ϹŠlÏÓt$Ì¡óôà"%É"âù«-JÄÔd€¯¹vYÜúGyw¢üÝ\}•ºq-=­ûyšZÆÒúW*Ak™¶Ñb<Ð|Êá®Qà‚n=¤s ø$Ig[ ¹ey à*û Ô¬ÑÝ­˜nc{F({íõ%7qÐ@º`ªp9Þ4{Yj¯g`P»ŠlÖð‰ß®Šô¸“W‰<€À zEN÷’Oƒ¾ª£<E+–ìhAW†g®ÿo|ÞéjÖ…â×!¡b6׬ðêíšHg $}ƒÖ™CÅV”=è+#‹½D$öâß[ŽÊIYYZ¥å{M9LWÿ°†õtâú7³m«ÞØXo<·ƒ5¸íîÔ ƒ$Ä&°Ø6®¦WsÙ;ô6"¨™Ü™z É{q2ú[F×UÖ®. nÚ|«Ž-̰zÍwy£“؞ż `)ÒU’Õð.8úê¦ìY-ÒªÀÔ]gð2‚ƒëŽ2Jmiå®ügBô«Y,-\¿BÞú®ÒÞ»mÖÓ-·¯ÔßÞüMFåvgÄ–TÉGgSþTŠ|Ï ˆµaï¾CµÏáÔLÿd!ô {¯0[‡2V¾ÛÊê ¦ûM#wXmÿQ¥ÌÊŽÏ9óÕðK7^´5/°²d?o"àú×wrØÜ\§Q¥îNÛÏUU‡ó£îÕCËã’I­§(èFo»TyÊ¢k_¿ŸUÚÏW—ÚK$_ä½E|7.Ùc éŽØaiÑ⧬l’¶-=(õòò2à]â §þfÀ}‹fÄ %ÕYîHúq{I•CRz8ívñ1ÁNŒCE)u|¡¿½Âi.Ëþ…ѲŹ(€I9ùJ\ŽÐšm÷8 &1D4K–ÞréœLíwœbTÙ¤!'ÇŒ¢jÄCEo|oŸ}goâW—‡©Yô¤ÐE³âm]‡qÜL·ä/N7‘ˆ ..5õ¢¼3Õ°!á2tÊ£ÛbA½És£/ ×D^p¢ç`s…½`J!ŸúÓˆé;1‹6@b?ÃïÂ*™ûoAQoZb½ãlÀTƒ›¯Æ!Íü½ý`€.(ØÅÿ`íÆ˜¸Mê¶jD‘Ç6¦¬r(®¯¨ÁѬ'„…WT–/ ¤¸Zw[Œ ?ó–$)i b𮹲«ûvŒ4v·ÃY·8”ËsߟAåNz3·c]A±;1®Ê€øª;'Ù02¨÷ÓÏzp^½zUuÑí:(u‰_\LûžG>»©•¾a©<×sÕž3RÿÅ :ŧ…~ò€ 1J˜ ¨ó(½·È€[P‘yóÜyCUÂýÖ×ïçwÜDÞ3IHÌætÅGÂ#9Á90„bð)ÑeŸ1ŽO6ÚO}n{T8|óŸy/É`d-L2(¿ÓçƒÄÞ¶¨«µ´ PØ0xãÉaÁ¢/=6Í`ã5U#¨÷z‹Lݬ¿‘ £T±«CÎèb¾!ÿÑ“x¼óv:—µÑù—7°ËíŽwœ¨N!%×±­½_m D¢“k£xó?M|c·´çÏKíVÉo*Œßq½rœ©½ˆœjœ ÚìOëÊ DÂð®Ì}}˜î\PJ²ù£ã_¾À[ÜÒ¦»I áE"“ó•30¾9¾ö(Ô%Ê?íƒKÕ—œ¤ËɟеõëFK˜|ðöèjƒ%ìØ//+ý%øËvý± þäØˆßù0ÇÑwûÝÔC™âëÀÍ3l#À¥=ûQn¤¢†ù¯¶ÔK×Áh¨q»#Úq¶×¼®¿z×ä÷UK1íò%ÂYµä†ÀR7àÊ‹Ò_o–i±¿‘ûCì#DFùª©uo…®Z&Ö‹T˜µû²øOæóˆ`²­Ý3œÛK*’BtVÀ~Õ.>l™zK…ý®jo—?9=]õÖKNJÂÏ” ³>^éU7à½ú‹{2ÿµÀ A²L߯վ¸˪ƒÆãNÁËKÌçÂ#À4lÂSF¢@rŽ{Ýù™%~ºÖá«„™K|õ4DIéªP}ׄ\lU`(Æ‚Áãä5¼ŸÄçbï[“)œÙäY¼á@ñüƒgþ×ç£~B(ôRR*…Z=<$¸ÈK‘ZéõnöFîÇó²h´Ëy[¿Ï„á |ò¹„ÇÁs;]™öC…´Ã@xÿ-õ 4Ý&}0óô‘‹œ]6[PØù4€‡uþÕ=¡ó¦ƒ wˆR¨;÷§ì8˜H^¼¸ÝÌp/¦;ÐËSC¨ãÁÿBÜɳ¯¸u÷«ÊiäŒúׄ*¿ÆÉy¾®Í›[ ¨ù—wŽzqÄ™¨Ùå8„€ò˜ážÄ ¶®Ì|õNÜÙ¤ˆå ·öm}Žy*Q~û—¨Ëá$Ü÷–Ž–¯ØÊI¸Ýh×O.{:»ç°ÈDê×t ÞZ÷’k5EÙ¨K|8Ð95Xn‚ÕhÜ8TÇžƒjÑ38†è™sއ¼êCs>˜…åù‘×ï¸*‘=4 .r¡™”ûá¾få³V¼Â¬´5عÉõ»ŸOä)6Õ‚úâíKÊòЛŽó¯Í¡f”ûÞŸ‹þÃ+Èý©ŽÐ>c’xPeŒ«¢´Y羘’~‹½+}µPŽ-ø.‡oü„ý'4t,àÖÞH@°zË<Òý-}q— ¥Mø Å1Þ‡MÏòè²Ãuƒ›ïoOçç~½÷Ú ÀÔªväuÿ»ÖŸAáž-gçåÝÜ…· Û½©­¹)†_€ÛŸˆ3 Ô´ë÷•¼,Ûý¬ž_ð!ªÆó?".AIw¾;Í—Y…~è=ˆ.;¨ ”ó+B1ýˆo·y5p”-kúF²^=Ì{\;Ó÷IÍ ~û]ó®…“üÇÇuµ`RVç;K¡+h:BÎ/êŸ,î×µ5ˆ}4|#©„¬7–Ë,*e;1>îGÙ§³8Ñîp™ïݸ_!va§P(ÇHclƒêûòà‹­­}ÈH:æÍ7Ù.AY¾ AåfÍþIìºû2[ÌéÂŽñà¹îµiâUC\„3:è¹z2—K!§ „%TÆûb­§XÿÚjæùÅã9<Ät*–Ëæ/é™û±ãÝ”å<„{­rWkûŸP œÈµö @µHí·»¾çNñ{¿½ª>Q¹´Ïæ¼+å¡a:l¹ŠQØÆnô ×̯±ÛˆÎP–be–ô³%Ýî4\̪\‚$›Qøªôïo‹¯D>gÌr!Z2*ä+®àÉñÑ€¾D »ƒÛä帾—óóÛj`órJŸÛKÛû¹_ww+QÔâ{ñs{vóÛO7íâ×é…Œ/-`¿ B¯;¥ð©*›pu?Uü„„ÞÉÍÕžÓÕïªÔõWÖ³+ȵe93Ý1uœÆ¸Ô¢m#ùê8Æ™1-Åö‰cݼ(mHN²\3èÚ|ä¯7úSÜX³‰î?¯“¼¾KÆeyÇ4>²˜þÛÜ Tm;Tð½Ó®šäžkTm¬;;ˆì©Äsd8OŠ`M½^ i® Æ\ʇ¢ýæútZø-¶â@Z—oÅ‹ºŠÇ/K~a»qB;»•÷3…­UðÚ˜œ&üj‹Š`b®ˆ‘«ó™Q9åíÍÅúíÏÅ·§§C®k¼7Ô–qsÛ£4[f¯Ÿ#¤°.)ýSý.ûaé(Etß™¼=ZÈúþ¾¶ŠÚÊ YåqŒÈ•U7v¼vœuˉßüõ©ç;„»¿èÀTœ†¦~Ü@7¾£-@–!NQáx‚\ ú]l’ׯë¤/Èw}b+Z^dÐë˜îýòBƧ³zòH_­›N?GØÿ#³jr w¿Ñö¤lÈ ¬Èþô-©ÎT°›ˆ‘ j÷‰]™+hy¬´š®ëýø§ó~†éå¡<„ÀÂ|H^óYºÇ@M7¯û§3šìèfÞ8šÉ¡ÁÇsßì}|_öê=¥LÖ]…™"·+"¬‰R§§Š»q´Rá ²žlÐ×h?¾àP”åA=I™å›YwºØ›Æhô€"41üÊöøT· ¡‰‹ó}u>©û”gbÕoã_˜îõ®_Ìÿ­y7Šmœ$…àâöL1Юt:HõÊ?冷ù,Ab>þîÏ?ƒò)„9›[zY{Qé×ceŠR2ɨV»cÙn0œù­c vŽDA:’€òú: ²]ÙìIoËR0ž´s“rÂ*{¹~¸™BX¥Ó²|ô ›rº«G1øÍ›:sÛ®H.á29$à­nãc1,Æ~œŠp0 €Ës®ráâšýXêŒ/X§Ž&LÞ,Lˆ‚###=/¦m5kš¶º¼µØŸLqG“'6Œ†×÷ J‡ŽÜ{87íÜMOùpntüUùS|€èÃ6ÜÑÎÉ®Ï*ë–ž¹’ßÿ%ã1µk×Lê$²ð=FùÐ|ž‘<‰Ÿ©ÊqÐzrfØøØ½Û”Æü6 /—ȹÙj·0Û?m¾ÑCbŽ5‚ŠZÒ3N™Ö+$Îj»ªš¯ZŠtÌ"m‡O ZLJ˜®#]©<¼8ÿr Uòî¨#iš:$¡^|-^™Ö*{¹ X_R]4P~ÌyPàèù¨7l¶fËJr¸Ú”yÜvneÖ°jG–~¼s%↷ÏÕdS®cÀÑe½»¾Ñ>þ%‡Æêô€yPn(Zl‘ÜŸ-³¸ì¯š±ô—·õu{Æ3ã:”Áˆ•þñ€ªñž†Ç:´DðÇÿ¬>,†öÌëf»ðÕO§ÌŽû„©?ÉÜ&õ·š{ ]"]Éî;sðù˜…¸õ<ôf΃^K LžýHÆo¼ÿÒÔ´¿H7ïê|Ò"s?«“ôâpqFÀ¤Áu„Inÿg 8¢ô0Šqø®€ -- Ú Ëa‡âžGô ^…eôk®˜XXb¿ÿ¡ÈÈ‚üËù̮Ѕ4Üðø}IaŒ.'wA`·å|ºÁ³# 'Q=ÜO ‘Oà¬2wGÁ…€Ÿu}äÌÕ—€g_V\§ì:ü,ìa¢J$üíîlT;šZ쇚£ -^Ò—/.‹~—Ç1Å÷(;ôaï™peÊ•ÝîÇäGûxðÆŽ•¬¸™'­àêo·Ý U‚#–§çº¾o{f\È”Þóc6þb;û›8ñåâ\òÒôÜ)•¯ù´Q³Ê®^e— ~ÚÒ¡ :JÉSŽý¸™é‘6·ÍŽ¡ËV÷Ûp¤û3ñ¤…Ëcí™ =Š+(a¯y Êãr8]ýz²ÉT£<13 ²´ô;xÎ{·Ü÷zýë³E~ÀެãK;ʃ@ѧG›€Dc‹~ùí-cr y9eõ»Ñg¨8”J±îµÅ%{SUÁ¿ƒÑªýï½ëÁ¢Cí$µ£þ}£2HœÚëý„Cè›/^c˜;ì`·>>H(„a[!BQËM/×z M›ò9Ìq¶.ÕWY{é„^°°«}›óÛÑŽ!††OÁ<6ú¶ll–k½ñ¢ÿ:KUËúÓ„¢¬: |Äð®ÒC9wæév ÎÂàˆ]ŸÅ# ïZ¼SžÀ&è7ýjOìfEãABzÌ”†•žô½MÏçëз!dd¥.ö…Qµ—aç…2* #Ðè<¼¬Þkæ»ñšÔE?ÜßV{ŸÛ+{›ŒOUZ!!¡áFÿ0_e D—nÞ â_*¸}v{€ßD… XÆÔGÎ_éxàä#?¤:ýÐêòôÔÿÎSM]=sëS»¾¹ùàwÕÄúãnªi§aK žrשջ*6á(ÏŸÍŽì¾ó31°˜£y¢3ÖB)OÌ#¯Að6MÜQ>W:#L]„ž Ž1c":’•nªk_ Í#Ú×µåúO•õÿ‰PÛOZü"CLƒoÓvŸ´AÁDç kØp@‹–ûž˜fs{±M%½™å£UÁÄ—SY÷ÕÂ?5 íäþrQùx0­m>e¶WÏQCeèügϧ|à µ¯Uü ã0¶g’ÝNJ°Ü‚ÿ­£÷åÁ@ª ¢ýûùs×E‹ØúOËÓ;ã§7‹}CmHÐqÌö™phž~°LÀn Œà*¼hr ¶wÞ#¢Ç"’î»ÓtÞf0÷\FAÅ&oûñæïZC%¢Å{ò1¿Ëùž­÷¤ëCH eë•òߧ黮Ƴ› y8ÝY6]Vv¾STÐ ¤×1wIzé‹c@Íaø“ÜF¼Û.}¿Ð”ú/Oy´ÁÍ! —Fms0#dšM0þU­= ¼å†Ãa²"fy>ÆÞ¢%|¹]3Äjý8uxÉpš¾üÜl9¤`Edye´%fKBKa¡—•V¨JÑär“¹í””Öïýø«¢.hM G–{JœÏ´³Þ량€YZø¥{çož³W´þ˜›”ž´Ã„~ÐuŠÄ_F‘%á+I@c¡[îuó5¥Î‰‰žiäx.˜z­yn7Ü–ÜÚŽ·7û3öútótPâ°Á-ùP¦iXÊêÏ]ö²úÓX«õ]$0Eu>ɈÒöÕn­@ÿÝÙŽÂ1˜¸i?p»ÍC×Âíp¡¹éáfW#…/ÐuP,ܼÙû_­ƒ¡€à€¦ÔMDBa2¯Å` ÖÕ^õª´ Ã}bÅóz™„ãÒžû ª§°àï ÏŒæ;Áæh­CmPr¨‹Ð¢ä -¯å#Â/¯OÖ¹,Z2žÎ8¸ív+’™A µ2ùZI# †Š˜”ô‡ý8‡ôÍ"ç+ÉÉv N@ÊzDÉ|b´Ó7J…ÒH,jWým­Ÿ#¼#ƹ& ÊˆŽ¹“-ÁÐøŠ œGEF5yòG‘ñ>KuߟqAäÈÑ*e-©óÚ6¨oÞ¼AT=¼²WÕa_8 Oö.Î$]§©4í„NwržBÔÎt£¯]Z)Ùef=t—¦[xN?)´>›É=#Í÷wUÍúúzbrC}÷î]Ó|ZãìH®"–q¢¥!Ñó¿^'{:g2$óØs¾;H ŠŠŠÂæ,@FàUöú”§ùùuG̵ƒÞõšáû ÿ80>«]O”ñ*+òzÉä½pÎç‘ôÑËKˆ²ª*Æ¢ÿ-7bíg·ª«©åÊ£>?§CŸž®n`0‘­|¾3þH 3®µw¹:²’ÿ†ŸŸŸOLL—ý¸Yõt¾f¦ëé|Mµml° *þÂÈY¦ðAøü€²ã]-GK‰¾_9ï01´^ÎË[6=ç†òà-ûdÍ;`.ö6½Œyâ›3"U6z¾E4m.•Œü(ñ-³Hv{ÃBc§w‘ÐBײãR¢æŒ¨«pLÙ¹œL ôË´?h_±ì~ƒ,Ï^Hi#ñU´QP豺&Äò±WS‹`ðêË?¡—á÷¥wýŒ(ôÃD õËBeh«o}½œ&¤¹áo ] v Ð oÜPÅÐ#sñ/ÁšÄúº–'쿟¸h¶ŠÆ¸¨ˆè,¾ß¹÷éÊ¿PË<à…Ô×m"m–®)uÇXϦe¹5-Ý õÅÒû)ÿi€ NSà"Ys²`¯§^µ…’ô€,¹‹·”søÎÂ^@VßÁÚ²ÆCÅÿåÜ?:¨{±‡Ñ99¶Þvãé+äµèPgþŠÖ“×ì¹'¨Üʺ߄ý»tQ߃ýÁþ¨uô’XpUE®?Ž|w‰. ÍxÊß-³Åʘú·Jü{PQÁÆsΤ½?iyäË8[8íñòë|‘—Nhþ(î€'îi)a^!e\8lгÃÓ‡Êáñp§Dk‡¥y†e~á)U€$* š¢ @ïE8#˜VØà­)÷|õž¹óª!uãR9ФÇ?„ž”w+¾Kì»vaÑ)pÿ²Ë8’¾Ë€ÝË‹üÂbü]óŒ€ùNa áž+ëŸl=€Õ _çú•*­ž“ F~åŠË o$k"0wªlb$“.ëÈ¿p­ý—_?é7Þ=ð!|:βhr“wNêc\Á±›$UáÀéW˨ÖƸ(þ[ÏÎÓ*ü»ÇçÉ0aÑ”Á*Æœ¹Ê>M/bú¦§í¼%}v¶¯ÆÕÏõ-øœ%.½eð‰¡!ŸŽ’pp_LzXdÑêXGP rüCøNUËÌUí¬ûõÐ:"åÑÓíA©‰·gÙJ6w¡Îÿ¨’CKZ*‹!üì¾ ›q‡¡Ìù8•;›¶ï›28ÎÙõЕ¦,‰¬ÄË"l´1mr|¶¨·QN¹b‘Y4ñ¡ŽŒ.^:q‡!Å‹†[ö’Ë›É#’ïÀ Œ1ýPï,èGW‡fÐùû@cô1sPg6yˆÏL8ûJ‘°×½!¶Eú¿Í€'a_bŸsŠ›èÐõêÐ("4¹s°É9ǼãA]6дϻ™°¾Š<æT‚û¯ô„7Òá"€pÏŠì7ƒÑ#ÅÌ‘käñ+^x}gšÍÍò\/5ÿ‘ämôÝ¿/\з6®ûë2gg+ üÀ—rrc^ÆÅj÷Bꋱ ÞÐ C‰Ä·áѤ×ñAÇ7G·&WAµ=û>)½_–M»¡S ÙAÑbnq§y‡Õö.¸…x£j”+)$ÃiCäl?(¨SÈç€ñó½ØÈbÎ=埭ñ…Ï'"%(¼š§Í3ÚÔ†°PÜD”A'+A.„?I÷zŒW×o<jŒ=Võ„aß™anÔì¾yf‰I A~ožÉ_¬µ¢ŠÓÿCÁ_)Àctúò1$͇¤…aN7¬ÅÐÒ»ý\ûÞ¯^žm‡$ξC{\LïÅ~í91áß'[¨0"*ò p—ŸÌø¸uŽ/\È¿=„œGT*ÁÑß]Ah¨½ÈÂ0*T8-;å©%”µ†N¬„ÐG¨ÙŒcÝ S¶d¡oyßšÝ;kì_î/oÍn«€âR ŽÄöph$|'F£ƒÆ8X$«í¸¨u)™÷wëgÌ ‘¨Aµp‹6Gô§ªØv]²™Àwdœe#<¹Ûæ‹R]>ö¼¦\²÷ã½S¥ÉÿJãÁôU° XÍBàI£óhÀ2fÜ èœÐglQYàÈù>ƒ 9¥!*§Ceò½Xº4BÖ88¹Û • xblå¼bLÈ„ZRž²”NEÀ‰1^…qW•D  Ñ Eàa…ØÀü’üÿ_NN•2¶ØË¤÷6ð #˜¥Ù*P¤aSí!€J£¢,c+ñj€ÉÏ/Ú¿£«0‰­¢1™/"¡•€~*˜[ºz p[q÷€!R#ôoܯ9ˆEØàUàµó°G´ð e«­P%R=5;˜0‚ TÝßb%À'úk%Ÿl”±õÿîT -<¿ ûÓfIŸRv“O Š`>€Í_Éuc*q*+¨Ýx=XÀ¿Ýn¼eà‰'énÚÕð^0 ‡ÌLH— ¹-§’Ùúß.ßë;Á'ZâÝxÝÿ·Á²õ8X ƒˆëEtb~F x*%ç?M¸UE-H…¼eÐÿPK “nYTÍ ún¯¯plt.iconset/icon_16x16.pngUT U(bU(bux èè‰PNG  IHDRóÿa pHYsaa•ø¶tEXtSoftwarewww.inkscape.org›î<ßçý>ßç}p.Mw²© Ç.òøF16K>žÁ0ûÚ—¼õ?@Lø)BL„6úEx.ÿóu÷L>œ)5MÚ Ü&suåªú…D¢]?—AµÖüª‚ÀK ”áENœê¤±ñ$.×iD„éé FGŸt!RÀN€. .ŽóU}ƒ71Y¨¡á Ï­­·™}–V˜EíÀ àØ\ý<¸ÕD$rˆ±±4-/›f2™èîn¦´ôþ.‚kÀû´&‡#JQQVk’`ðŒ€®P^^†Ã±lr. ¨³9€ÁUUø1׃JüþlºÙ¬«y¹?èÈœ_aݼ• ;îã!ìÑ©‘"uuhÚ&ܦ`û0‚*±X,Ý£q_߇†ÐœN –—C,,BÙ“ ºG{ûÉd2ÛRU–¼^¢6>ßSVWk’Ô¿c@efÆKKË#êë/PSs]×™šúŒßÿ@à*pX‘}@¤šùù^zzüX,c€°¶æ@¤ ¨Ìøä®EêÜMs]¿C"€°¹½P`. Zú–ÚK‹Td*Ú·=Þ^ÿ6ÅpyÜGökgo{‡w×ÿÕ€œ[IEND®B`‚PK ”nYT–ü«V’ ’ plt.iconset/icon_32x32@2x.pngUT X(bX(bux èè‰PNG  IHDR@@ªiqÞ pHYs‡‡åñetEXtSoftwarewww.inkscape.org›î< IDATxœå›pTÕÇ?»ì&ÙMB`ˆÁÁÐÊ„5(?j+)ØZªh•LK:­cg E;Q°ZI2këT êhŠ8:N)X j!…1 ©I$É’Ýd_ÿ8o³›ÍÛÍÛd7`ýÎÜɾ÷î;ïÜï=÷Þsνm$§…Í›e`9rDÁ`P€%+k`ýÊJíº#S.™Z 5iÜKÞÒÁ DjS”™ Krá­½c4î™ë´e…=Àå1@5°ø0Pí1ÀQ@ Z6kô¾»œRLŠ>%K£n¥F½)= d»-¡ ¸Ý»ÁF¯ßq*K·@ºús\`r§¹AtÆUÁ(`; ÒÆ¿3}kEï LV ÉÃ` P…sŠBäµl~-a&ˆX½À\HþLÐOð ÀχÜ=#ˆ–PJB ÀDê2§eÕ>×­ŠÂèkÝÜÅ©ÀÒ¾ÕÁÜ* U“ô‘ùð¯ëq@Áðûhd`vwŒñšƒ0{€µ>׫Äá(6’0“þ«@px™.܈a )_h9BúñðÀ ^? ü~¨Â.# Q â„^:U­È=˜…Ì]æ¡~¨†GÀQ`7°T½ŽŠ€z8€¿ ³óAÄkÓƒà‡ÀJà.½ÓÄðø °ÄKÒƒ@í`/õžE“‰©SmØl6ÒÒÒHJJÂb±ÐÛÛ‹Ýn§©©‰³gÏrìØ1P”WWÛ€§€ECRøÔ¯?U¯G¿ôÂQà'À ÒÓÓYºt)wß}7±±±º>ÙÜÜLee%ååå\¼øO`1b’‚Rè“ 7žì^×~uØŒ,?'HIIaÆ ”••qß}÷én<À„ Xµj{öì¡  €èèhdmžŽÌÎúš …… žZ¿ž9sæ„ôsZÈÏÏgÙ²eÀ`p1`ýÐÐ üNýíp@^8äää°páÂ~*V¯^Íf>~¸üÖ5 }–Ø÷'d( IKKcÇŽ˜Íý=·#Gb™<ù cÇ:CøMΟ?Ïòå+p:ˆÏ~—ĉÚb èCP Hoø6ÀlV(-M¡¬,‰sç¢B®Ajj*¹¹9HÔ[¤ê4a"à5à3222˜={¶f ›­“¸¸>þØÊK/ç…®çĉ\®¡/‹¾ÈÍÍÅb±"±û;ˆëÝÁ0YebË—/÷[ÃhT¸óÎö¾ë¦¦víJ ¤d"ï½7†®®á÷M\\‹}±‚WLXÿù ¸¯D ¹„?á§5ÐÂb±²`Á‚€ân½õ2Ñѽýîµ·¢ºú:Š‹S©¨ÇçŸ/ê[¼x±úëp_+Ž€g‘Ø#±rMÝÞf̘NTTౡ0{ö—šÏ‡Çòüó)lßžÄÙ³– TucÚ´iª›Ý‚Äíx[~#+Š·OhU< ÀôéÓu‰5ëK"#¿ÏNŸ¶òòËÉœy«E¯¶}0ddd¨W§€óx‡ÝúH^¦ÿ*ð8°À·òiÒÒÒt‰¶X\Ìœ9Ð z{»èéé §§—«‹œ¸·Yöì½D54è’ë .Íjñ ƒÁÃáQȸ׊ðŒÀV$ë›Ï¤—’““u+xÇí:4šžÃ|p;W®4‹¬èèl éµ×ø¤¨H·ìþº´!ÞZ;21ê±€Çoxž†O$Ø€ÕjÕ­`ll/3ftø®6 ¾ª ógŸé– ¨á2ˆ{܃¸Çz ¨@&>wéVïßéu¯”a§VæÎmǨc@œN’^=(Ù.—{Ò3  ÇWû„¯4õïqü8W’Øèìì JÉøx'S§vR[ɤ0=6×y–êS7a÷nZòò艋Ó%»«Ë­h”ÚnaðeáÂ… A¿9~fkº~Ë¡Öÿp8ÌÀô†Ñn'a×.Ýr›››Õ_îíùnô ñ êëëƒ~süxO^¿…yïn´nâÎíöAë4ô­IHÃ=ÎWƒ555C{}Õ÷8µ};_de¡˜üPS[ãÞ~{PqN§“ÚÚZdü§©w=«MX©©©¡£ÃÿÌ7ßLÃ3Ïp²¢‚–‡¢×OÂ4©¬ COངcÇŽa·Û‘¡9i¼7 a ˜ÃáàÀÃ’äHL¤é‘Gø¨ªŠókÖÐÚ:ŒhiaìþýeìÛ·Oý¥îc6P\\â5#‡Š¢PRR¢N|àgxz‘cãñŽÂHÓ¿@Q\<ñÄ“¼d £ÝÝÝ©–fR¿ë}ì'ÉãõÏ,…™²ä¬rP…ÒÒRÖ®]K{{û ïêG}}=yyyìß¿ià/q»äBF ¾ñ_˜ ±‚s|°pàÀî¿ÿ~ÊËËÕ‹¡¡­­M›6‘­Žùd` ðM¯ZnÓ¿ßÞ‡¡ì u©r¢ñ·× ’ùøIQ @bb"K–,aÑ¢ELœ8qPIŠ¢pòäIªªªØ»·»½ iä<䬎÷®³qoA‚jï,îJ`ÛHBÂç ­Àä€ê§}5RRR°ÙlLš4‰ÄÄD¬V+.—‹ŽŽšššhhhàøñã\ºäÞ‡7ÈLï›5p¿iÈùGßíø•À¶‘Ñ #'d"Ù”YÈ*q ÉÙŸ ±±‘ÆÆF²â‘TÔ´Ï7‘žŸ† ?ÿgFG$9æö/$E=³.ÄÎ#‰Õ/‘žÉä\‡,a7âqk}áŽôâËHFÖ~ÿa@HƒŒË$Þ8‘Þºa2 ª\+óß„˜ÿàÍ» €(lEz3ø8‡äêœHÆFO9J-QÈP¸ñó#¸‰¡à ˜ŒXeHâ3b 1ÈDÕŠl\\DÌßM„7U÷¿à$#C#1÷àVöà h¼JppÛÑÈÒ2±‚.dÁŽäò¤·#Õzî›ÔûCsi®ÒЂQÇ„4ÒŠ˜³ïPp[€½f×¾02Žª×ÂsVçÚ…l¯é;Þø Aºv_aû@Ý&¾ 9²­À\._ÿ×Îò˜{YéÆ+[ò5!A»ñ_7þÿœÿ×ZHÓ‘“NÀ¦^~•ñrFð#äÄàHšàªý»{¨K7p¯VCÿö§—©]™Ï*IEND®B`‚PK ”nYT íAplt.iconset/UTX(bux èèPK “nYTÕ¯WW¤Fplt.iconset/icon_32x32.pngUTV(bux èèPK “nYTÀ$ggXX¤ñplt.iconset/icon_128x128.pngUTV(bux èèPK”nYTÔgŽbæ ÷¤Ÿplt.iconset/icon_512x512@2x.pngUTX(bux èèPK”nYT ¸U1h¡k¤Zplt.iconset/icon_256x256@2x.pngUTW(bux èèPK”nYT ¸U1h¡k¤ämplt.iconset/icon_512x512.pngUTW(bux èèPK”nYTR¡ü¨ý1¡2¤kÖplt.iconset/icon_128x128@2x.pngUTW(bux èèPK “nYTÕ¯WW¤Áplt.iconset/icon_16x16@2x.pngUTV(bux èèPK”nYTR¡ü¨ý1¡2¤oplt.iconset/icon_256x256.pngUTW(bux èèPK “nYTÍ ún¯¯¤Â@plt.iconset/icon_16x16.pngUTU(bux èèPK ”nYT–ü«V’ ’ ¤ÅCplt.iconset/icon_32x32@2x.pngUTX(bux èèPK -®Osurvex-1.4.4/lib/icons/pres_frew.xpm0000644000175000017500000000067014141575516014414 00000000000000/* XPM */ static char *pres_frew_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXX XXX XXX ", "XXXXX XX XX ", "XXXX . X . X . ", "XXX .. .. .. ", "XX ... ... ... ", "X ... ... .... ", " ... ... ..... ", "X ... ... .... ", "XX ... ... ... ", "XXX .. .. .. ", "XXXX . X . X . ", "XXXXX XX XX ", "XXXXXX XXX XXX ", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/pres_fff.xpm0000644000175000017500000000066714141575516014220 00000000000000/* XPM */ static char *pres_fff_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", " XXX XXX XXXXXX", " XX XX XXXXX", " . X . X . XXXX", " .. .. .. XXX", " ... ... ... XX", " .... ... ... X", " ..... ... ... ", " .... ... ... X", " ... ... ... XX", " .. .. .. XXX", " . X . X . XXXX", " XX XX XXXXX", " XXX XXX XXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/3d.png0000644000175000017500000000212512540721306012672 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ IDATxÚÍ—kL›Uǵ@/0@J$Ç­#uÐvKUÆ%áøa4Qƒº oa›Ë¢f’`Ƈf 2¿Í ÙL¦`:/s‚¶ '÷:¹M2®SÊ¥Ð+õÃbXö–K£Oò~yrÎóÿÿyÞ÷=GÄ¿B§ÓùØÂ¨¬¬ Z¨¨¨Øñêêjð@ˆ‡¶rÅ«C§Óý ñßäääB@«Õ BÀˆ õ—ô?ÄbñýÒ+3`TTTàõzW<‹e͸M;ÐÑѱ&§Õjýž¿a€ææ&ú{Ø¥B"½gdT¤ñ §¿Í&7¯Ì/ ˜L&¬=U$'>F{×.–} ,ÌÛp,uóÊóN rÍ\ì>„X7@CC òà6v«\üÐMɳGQ«ÕŒa4úuˆîïØ™bçÇŽÃÀ¹BøÝ„‡ƒ×_{†äx=JÅ0ƒ"£v“po%ßPTT„fï!îŒ.áõBtŒ\°®_½½=”–>Çáo±m —Ë‹Çó˜Ùl&HQ†Ûí¦ªê}wȰÛE|\?"X[p .šùyPÏ;G®#‘ˆðxÀãñ‘»_Â¥V=†¦)RRUôõ^¡«û2jå ææCè蔑¸Cx}‚gÏVñêË.$NçÊÙ“™sôôëi»tŽe/(R%Ħ¦a½ö wïÚ˜š •Ø&çO[4__þ¼l1ss+ÿ®š )O¤‰ñ‰‚™˜á›ÖiÂC}LL… Ó¾‚-Þš%bò6))Iœ:mgrÚ‡Ó N7¸\n\.7ô[—¹Ú9KÔô|a#Dº—ÆÆÏHß©¤uÌŽÈ÷GßÃ: Â|EƬͅÃ)Æ6ëãÎ¤Š«]3H% Í‹d¨ 0‚â~mAYp0úØC49@RÂêŒeÚ,¾j‹C"þ ÛÜ2¡r3ÆÈéê‘¡ÊC¯ÿÔ/q¿pØí”å䵿˜nkßw<Âød0…/¡oÇé\ "\Dg¯˜¤”ìu‰ :àjiÁ“ŸÏõóçÙîõr*?Ÿ‹Lsó–…ÚÚj”izúØ©dîÓPWW·.qA€ùòr2GGáøqÞ..æ­˜dê=t߯dº‰R©B£É¦¦¦fÝâ‚eeñ®ÕŠ8=€ ,MMäÔ×£ "ùÍ#ìyj”lH\à=½ž™“'ñµ·qð b™Œ§KJÓj‰5P&&òxaá†ÅÁ&”8ÁÂâ"µµ¸ZZˆ]X \*e²µuSâ‚Hcc‰+/'td„Ïê뉿pùÈHfâãyáØ±Àˆe2¶+”ž9³iÁÕðcùÿ`ÍÜï”ÈX}sÝÒë¹?ºŠ™‡ ^ôêIEND®B`‚survex-1.4.4/lib/icons/pres_rew.xpm0000644000175000017500000000066714141575516014254 00000000000000/* XPM */ static char *pres_rew_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXX XXXXXXX ", "XXXXX XXXXXX ", "XXXX . XXXXX . ", "XXX .. XXXX .. ", "XX ... XXX ... ", "X .... XX .... ", " ..... X ..... ", "X .... XX .... ", "XX ... XXX ... ", "XXX .. XXXX .. ", "XXXX . XXXXX . ", "XXXXX XXXXXX ", "XXXXXX XXXXXXX ", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/rotation.xpm0000644000175000017500000000065014141575516014255 00000000000000/* XPM */ static char *rotation_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 2 1", " c #000000", ". c None", /* pixels */ "...............", "...... ......", ".... ........", "... ..........", ".. ... .......", ". ... ......", ". .... .......", ". ............", ". ... ........", ".. .. .......", ".. ......", "... .....", ".... ......", "...... .......", "...... ........" }; survex-1.4.4/lib/icons/err.iconset.zip0000644000175000017500000074302314206024125014642 00000000000000PK “nYT err.iconset/UT U(bU(bux èèPK ’nYT=+ ŠÆÆerr.iconset/icon_32x32.pngUT S(bS(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<SIDATX…Õ—mlSçÇ÷Ú¾Žmb;ÀšfIÚ¦l$"‚0HØV…EëÐÔ&КҤHUKSuU¥2JPU`ƒŠ}(mÍÄÚª-†ut´bj™Ú¢BÓç…(bk“®QÇys°ã\ûÞûìƒkü’€Ö}Ø_²ä{îsÎÿÿœsî¹Ï•HBÿ1›ÍvW²}.˜L&‡aÙ‘Hd®ëÓ£££–——wߌ¯”lðù|çm6ÛÏäÞ^”£G1y½0=±t)‘§ŸF_»65ˆ$¡ë:Á`³ÙŒªªÆäääïËÊÊvÎ'@N6躎©¥GU’ÏÇLc#ÑÍ›1¿ÿ>öM›;:B¤ü Ã@’$Âá0.—Kv:ÏuwwÚÙÙé¸%Ê¡C ªD7n$ZSÃÌîÝ·¢QLçϧdz Ë2š¦a·ÛÉÎÎÆn·W!ú.\¸ðý[ ¢6 ­[‡vx::&'cZ¾>./&ó¥DñN¾óã—.¡066Æž=¿¢ºúÏlÛ6 €¦-%?¿€S¾³g¡´§Ó‰Û½ !`Ë–o¿ýG4MCUÕéd¾”eY$×»½ýc>ø`/½ô/œÎëvIú'ÃÃß0=Æîv“»e Á`‰‰ËH\¼hbhh !²,§tqŠÃ0®7¡¼úêoq:OÐÔäO^ʳÏö±ÿ:òò6³fͼ^/^ïGôö§±±ƒÓ§áõ×u 'Æõ- 8p`7##'xíµpŠ#@VìÝÛËà`/]]‡ˆDdÖ® ñðÃðüó0: K–ÀؘœQÀœOA(4Jnn˜ÚZhmM«€‚¨®³iS“ êëc##+ËÄW_ý„={ŽÆû*¥é\Ã}3ŒÓ eeÐÜ píZf!lß%%08è"?ÿ)^~ùV«õ†ù2§]×ÿí^•žŸ2ápŒøÃaÙ2hoϧ¶ö0O<ј1vF±$ÄÔ–èðʆV¯þíí?¤´´œÂÂïqö,lÝ ~?\¹uu ËàrItv–²ÿ߸çž_¤{mÏÿÌN•vûí(mmÔlßNeå/Ù±ãId¹ŸÕ«AUcÄf3TTÀÐhôç>|‹Å’6Ýél)$IB”Ï?G]¹’èŠØßxƒSSÛñŸ…;¶ÂÂnòò"( tw/¦¼üqy䩌DñØó ˆOBÅë%X[‹p8˜jh]gÇCåä$Ëw6ñ§¿ÿ…Ë—=†Â®]‡Y±bUFâÙ±ç/A¤´[K ¡õëc7d™kuuÈdŸ9Ão4+ÕN‘e³±hÑ¢yÉ㱓‘Ò„†a!አ„$ájjBOÓÝn¦êë WVRÜÒÂÂ… ÓR3\ç/Ál„ª«1ãxï=ä@tHI ‘e˰|ý5r08ï®çÜG2-'‡ÀÖ­‰k¥¯¥§‡HQÁûîK{JÊ]×o.sÕS-.F-.Ž/¼iòL˜s|׸©9iáÿ ÉÌW¯^õ»\®6!DÊ7ÃI’D ðË©}—±ÿ¿ñn?Šêh”hIEND®B`‚PK’nYT^'³+$I$err.iconset/icon_128x128.pngUT S(bS(bux èè%ZeXÛü×.î ‡ÃîƒáîZÜÝÝ]‡ëpÆ ÒaÃÝÝÝÝÝ]ß<ÿ·½Ò¤ýðËIι-W£ÀŠRhÈ„È MFZ\Øý·!Ÿ݂ÆÃÀÉIZÛBïþoƒêw,6~üè&¡å¦êháæiìbòôôd¶v°u55v2gvt±Ì8ã'È@2â"j^™§YÞ~8Óýí¾ûdäßBÉwUÐ%˜;¥DÈh‘éIVÈdÕ„/Ô71qn1qI”Õ„ýq xpxv00ø2]¡vTp”ÉÉ„Ç,ׄ|<«e<ª3*y&^³í<|š|‹ ·/ƒ–*^Ìã7”Ú~.÷¸W&ƒÕ»Ä‹éýÙª6—_>„¬®®¬Ž+¡IG2Þ€\ˆJfniJÈ ê| IIÆžiâD@ǘjä˜ C)›Ç£®`‡@’²²ôƒ.~gSËäYŒþ*¼¸¸8|£££+aK E î…I])¶à(Œ •lvùŸf~â¹®°ûÑì|YÊBùçá!p±[;¦¤xñ|»±ŽŒ9šïäF~'ÁG–Cœß îµqÇ^ÁÇN—ÿ¬?ú‹³¨·¹Þnq*D¶Öü3”<¥TÞbuÿ1''ï¯j¹ý*XÝ Z4 AXB4Ùx-É8 Ëa¼™¥Ú׺ü×3¾šå:¸²ufÉ ªJÛß¿±<, ÎV¶oªæÒœ63ˆ¨†g ÿL·ò$b¾ˆûÑ?£æ,Ö¢¬j>¶8¼þ£¡ÂÑP©göÎ û6±´3*¿G‡Ä\´ˆmV1§îQô°„#EFF²¢†[nomi¨èc¨ánOl9"¢¡øö§#zf*ZlåËyŠaùg¨……~ÜÔkâNþõã0pÁ¦ZZZ¢vv'ñD\v iÈFÁ9r :>¢ÓB…Þ¯>N·‹ŽÍ£ŽWx*¡Ë§‰ø‘ O¬~PUDˆ9ƒ¼¨Ûh°½~Räåå……†¾¤§¤Ì»Xç°éz¾Ýq‹ÜXm„kƒúÈDX¡Å6ǼÂa©•'ü¹‰ß~vdˆƒÕÕÑ?|ˆŸ;tÓ­sXõùº;k~Žpœäuµ3£ö~+!¬èI­O­¤ ºÒï “ê¦ƒ;ñh~^Sa…ÂÄÄ4®b¬X¨³_IÁƆ]…ÍKqþŒfr<^åÛhÚ‹xIs^ñ±í¸ÅEGÌÙO Ô£d–€ G¿£›žO#ÖÒ…•qºººb;ºâˆ¾¢§“` sþC'Ú»n2?Ÿx®`‚õ­6O Õg¶ŠE7k2®˜¬Ålî»ÓTAñŸÝ‹[§ƒÈG¬¾9,ÕÒ ¥# ‰Ã¥zà L“̵b‹­=Ÿ›þf%Ïá-Xѓϗ|d±b5:¯¨Ñ¿ER²Þð†ÿ`M†œÉñRÆd®w¶Nï0cÿ‰ ß-%##3—Ǩqr‚Ê—I$âoI¤œ|yb`ÿþtÛù¸}±©æÜmCm6€ñjQ‰ÿ›J~ø;/LÐW|Ì«sU0RE,³ÀùùÉ“]ý2ÛOyI™$Á…kUQÑ.¬!²µÏ ¯¨ðÄq„› —}~[ÏßÜ6¡W›ó¯wEï‚\F9Ó }˨ôÑJ?@‹•;XÐî §™2ÀUC†çv±¹5±Ì•ëûÒ˜“!Ñ›ám üÊ à'‡²}ÿÄÉ›é} îÎŽÖJÏm…S›…M¢Ê½æ@¡£Ãn@WWGBBÊ*<ç²[p±ŽE¼ :k>GüÈÏSœKˆ)2¶ÒÈý‹ÅGYéž_=8öÌ¶Š‘’‡ØAàCå~éÀØ_ÆÊŠŽÄ–*õ0»O+I«A|§‘pÑ|þü! j**ØN°ÑMózDÈÄÄ«LR³~SÍb~¼à/Ñ„‘Åu¨ñ¨d´Ä¥îÜd%9¡ùŒ,ÆMÛדgæ<¸RêÆÍ^î¬Íàà`§E5ù »d>Û»·t’k-A—M­I­Ž2îì $/oÖ©O±Öf6²X£ ÄA-jee…&“”Æ¢Ss`ØêsK¿¶ŒGÐÙjþ ‡aLX: ÿ*÷cZ÷ã9¨]X¼ QIñã¹˱Æf£Ù,[Hæf;pÈÓC,™o»‡¬.lQ1è"ê8fÚÛs§a@•‚Ø Rí*´T§ Ñè >Ú|Zôùj8*Ù8äTÐÔbµD[5ÿkͺ‘Š÷`<2yÝ£ÇruuU©Sæ@DÃÅ•¦SkƒùéÓ¨û¼~„A…§Ò2•Œèm,¤ ²Æ´Z ±"Ö–ŒÇ]qÉÕIB\2)1qsqU…C´—-h6ÚïÒ$±Â >:8ÎuìŸÇ©NRRÒB³'‹µµ5ÔjѤc"ëÉ<8&šûåº/Vöâô`P1Y‰4\¬°ÌK|hAðu¼Ôi’®JÕ ² E™ [n…dyƒucò!µë€ó´‚ȲX=6×=y.Ç5½ OTp=³ž+š¸dt‰Ÿ•cÂ/dËqQ‚B^nŸZ©x’]K³îp´Æ÷·gïoV+ l“įÁ¡TÞÒP2îJ¸­JCfz*"I5Åô·OA*s0"`›ÅïjŸeûúT?B­o€P"˜ößÝè YÕ:Íë_tÀL”Zq‰y#eg߈ 5:7pV”…V²´Hþ¬@ÀeG°Úì)õwë¹ürŽ´ã! »ÜŽš*Q¥i| z¥´BÓ Ã‘ÑÐDü3í¿êÅ7ÌÐ++_œT³š!Â&„á{{Wz01jCÿÕˆª-9;;£’ð§÷ôˆ£*J¥YnÉ\&ðO£|b¾Þæïv4s}¨iŒJ¦ÍH€Ç,þ#%Ôí‘]6‹Wëé¦Óc?ëÍ‘™úû'>I ¡÷B´– è–»_§mFµ]í¢>M§ÞÞàV^q ¤ð¨¸[G®‘_pª…ŽíQçåÍg¼}ñ¤J?˜õƒòò×oK¤¯~Fˆ ™±ÿs\äõ8Ñâ! ,‘8½°ëìæës>Ó@m‹rþ€ÿá#·¿ ZÔ±™û%Û‹a–­ææó¶Œ‚AÀ¨6ï.Cƒ½f|Ùƒ&­v"HŠù±r¨PÉ „Åû¿S¤.#0Wh‡´º¹¡Åôve8¶ ®*w»ýA4ÖDI«ìbÑ’ÕÞ«‰¦F‡ ˆ‹Š—÷Wq1íÀÏŸ? ŠŠ\Ÿn¡«áB š<#ØL;tåÂgÐóååç§³m»Öôƒ—*ÜOÐÕG£ñß"ÆA.ñð„B9Z[0?˜ºç ³¸÷‡? ÈÙØ©Éîä;ïˆÄÄñ.¶Ctwº*xüý !)!Aø¯F"S®ÿÑ ÇùÚhµœV«g Þ¢VÎoä¾x„ñ‹0E„q¡`ýŸ»ÊõoŽf“·û8¼.Œ*Òü7c©æ=S‘}¶ÑÐHû•–¶wïÔÓÓ`)Þ†îz5«¾Âæ{gW«Së„ >žYý—_Ì"© 6ôŸmþ±”'â¾ÚäéÞË…ÌÌ¨Ý ½?ÆÛ°ÿTn}ó™éŽh}RSË@»ýóãj9ฬ~æææ†¢¿7öæÆ“’²ÛlpP99))¸ Î<K1i6š¸ãWÀîᡌx(ù’q&9"fÎëþNd8w,tȨ ÷W‚8øBŬ¡µV߯ýß¾È= èðEùØîN]ÇÖ^ ÏgÍ<þ„g b&ýßózkuÈ å1ßã?ñ¥…¡à7Uà+ˆ°DÉ|sQ@Rýµ ¥žëú'¥lA…ùrýŸ–è:L-¯\¥h““Êé ë}”ú³½Q]^7«CÄ•B-Ü!š———~÷«ž¨D\±#ò©$¡ÛD¿IÖüT1n€Ê¶!»8ÜAJ»îÇÞýmuºT»p\çqZ™J18 Q§¢¢r:˜ ßÚ2Ú–4Žõöµhöè\øgÄz ]kƒ ð“³o^5W§¹XD×qþ±u­ŽàãöÓí±” =ÿ]ú¹A þªGsÖfw„i­Îê|Ëá›ÑHÄèà| àV‡”ß·ÚÂL1ÏIBwà{Z;/-/OÅÁ‘ Ëí$ìuë·™åÙ3s’å¹öGÝ:n4œJðÃb$( ¢·P)[豌,Ö´¬a:;\y»AªëÞ‰Ú¸ËÜL{ˆšù{ìíñ ï‹sŠm¹H\dÇZ ÏâvŸ³õ­Mâ6)ÙÛ˵‰ß…H¡BF8UIËo©®f‹ë^ýzhóçÏá¹bð+iDú½˜,ÞÎßíïÞÙ×<˜„„C‰”P”ë³áá]DŽ‘ãÙoÕtç(ZãšÑÈQðôllfí÷$‹šàþp4"¯»ÅM33=ŠÏðmOÈÐlŸ’’B¡ê c%M ˆßÎßC ŒEîNïë]½\W;›^zg¶úv»ŽwŽ ½ &ÓXOä|ÓìÒ”ÅT.ŸÆ}ýŸèåqZÏ n¾¼_ïm”IþLmã äöØÀ-¤ÒŒ¯1,ðhÁšHkN[ÛÛ2r ´ô¨ù˜z{Ò...\‰|ÃÒ–Àô¬6% |a˹Zq­´NF\„GžŸƒkÓ¸ôê€Û‰ì}±:Âãö¸º^ŸüI¤éûƾ®ÏµŽîø=† ›”ž›º”j¡ÉÐ¥í®0q‰Î†¢õÔEŠŸœ]ž¿õšÀ¹LCîýS±1th(ìJa¯ÉæÈOqÉàöOŽúŠS))8ž6ÞÆ°×Úš>HNÜéÜÎþO7›À²5Ö”¥/S¤‡ûÇíEÚøÀ%§¤ˆûùñj½[=.˜ï³)LÊhÐBӻ尌OŒîÔÛŸ×ÊÃ2Jý555õ¿‹õ»€‚@.ºP*í‰ô<õí¦`yÝ0)•Æ3¾¶\ñüÈôª´'Tuëîăï¼ý]Ôoè±Xõòòmá"< vW ‡Ï󌊜üÛér=6&yWI2MˆAà®{< ÓØû}ภÀ…æmÏg|c™ƒ€kÑ®4)AººfIÎÌ)«Çs,¶0 Ú÷@|k HU„KéñV]É¥E& x ð½#ãäLÅc -ºM” žUm8d#dÑo’¯wXfqqagÐ(5Z®³¿aîôà »\ó=g³ž¢êê¦Þ¿?K…Mtœh®Çxÿýûjë·j%¸DMØÇ‡÷õù~ÿ´~½ÏÁ“ÕÖï]`æ/þKÝg,ÈFOvýr8`J+í¸€Hêéé• me[ÜLZÕÒ»î±Ùi=y¼ž¨e°[ +ü6šñ2¨’?ÅÚÑæÿ|°ÒÈðwhDŒðèLÉVn ÜObó|»^ƒS¢ïyëŸÈíþøK‘ÿäqý (×Îõ¸ »ŠÉ(áú”íôçMñ•í—±~Z¨!‘j(Y†45uó¾Øü/Ý™¾i’qâ•…ŽëF7¥^¨¬žÌ~WQÒ»:ÿLà€ÀYèÿ|7ò‹3†£—Qǽӎ«Úu_Q2–@$‹×Ý먤HZFfó·/`sÔZN#mëQê0›,áã#( }j¢L·ÉÕ„777gsÙ‘Öà­ñ>ac;ve*¦ê¬4¦Èv|ñJÐ5¾;µ[oû„±Ø2šñµÈbô—„JWÀë­fRr2ŠøùR]˜¦aØóùýÚi p{@¥i„U³‘11|R°¢M5õæÐÎŽü`ú-‘0ó/¢h‚3’ÈéeàÛ™ McðcV]÷¹5å‘3ÊtDåxïµ·oñãá,`EGÂ,1F#òaÑûΉOz®Q®7Xiܽò=Ýy›>íá7+aØ“sIÎz`Dv–¸œ¾õ¦²2Å ³âS ÜÇQ‹D–«Aš­w€É=DjmÌŸT¡EÁúß¶*Úߺê± é““ó/Îc.ž dà’i`¶¶{•u2¹Ég†;CȆ»°ÛZôßè,À-¤ŽÛÈ‹*¹bÿBVVE‰y«ëßñ®ärIÐIpæüßßLŽã)ô8°y=ìÆ9ÆùU™ýKÁð æ—Âðððœ$õòfkmîlÄ5ÒX­HõvÞçÿÒTõµ9ŒÆ2§—‡|ŒG¡÷L–«ó¦áf|Vl<&¬<¡/3=ý¤]­÷k(8Ž`M^%#V^*™‰*jþëXºÆÆ‹«á‰¦Z¯âÔOú)˜÷[‘—iiy¬1¢ËÀwýâf¡÷Ð&÷míj‹¬Œ‡oµ÷_+¡Zr}ÜÉ}ïpTÿÀ ô¬<íþè]zŠþÆò†/NJôb=ÕLð|òLÆGHPÀ\źøëÓípý´¢/¼S® vbÀ|ÕŸ¶€{}«%µì»Ì·çÞ˜0¥5ß\M–sf» …èÐu¹½YMC€ò ±U‚w’ŒòUNpŽP>'kxO+˜|ëgi”?‚'tÿØ*ÊMV ¸úÄ)‹Qg¡p0Ùí)éâÃë÷Z» OÅ^E8]8º1ÆwÎ8ËÑüd„•æ8!êxÞ¢z0ÝèöE«©Æl¥¤Ä¤ ý"˜, ÚÂäóv̲ö/äÑ_«#áh ×È÷" {PéùDîKö‹HQÈX–»ƒ|,bÞ͹Ésà«zxShQؽ㫦üÑ$ IÀÂ3CŒnÔüs€¨á«Ýu>ÝDX$Ü.Ð}_ÿ4!9^û‹ÊÈ7ÿZ§2¸ù» }µž›Cóæ²KXj‰¦ptܤ¢ ‘&ÝöQØ4WoÏçù$eU1”Éé7žÐ?-ÀŒ ¡Q³³'í˜=<˜bú]þàjuùãT!))éòz;“LÉf™î˜Í­Ü´&x×Ùï¥PÄ씓gl EÁgîù)zÓß7·“á˜6ÙøžsW2U”Tà¿x4+M’lž”Äu}oòOºTŸ!mñëÐÚÚéõ‹í\, «å1À^!ˆÕ—JÿæÊu/±“LTF}zñ·r} ùÕŠl0_[¦j|ÌzB|ýê\t­íüt‹÷uΟ‘W&•.³}æ.Šèó/O ÿIC >KaÀëS&Í/±ÿZ¤ƒù°â:nì¾Ñäv(z½7™`=#-~ ˜?î„»3&Ò뫞©S)ê†Mxò+¢/Ê¡þ·óyë€,XNæQÏ”v¼~2#µpÎDñk´èB©6P…4€X¯†*r¦?®3''_ŸË)!´H^ ef¾X™’Y_åpQ5Ôù¯:6ü^ûudº~—Ddÿw$¶÷I©ÇËh …,G£¸¶Øž' ,Åñ™d/À©N¦)§IýIQŸ&¬…@ú˜t23ä[ (I,ÏUw|mí.áL!CØèXÉÊÅ-ä¨ð“;Tx$íp"Gœ‚LºÑax¤þT…ÖD\°s_5aÏ/Œ##1¼‘ÛVÉ,(§‹bÊv€À§£Qa PaÐ*{Ã/"k “Ë»¿,¬žŒDGƒÐ]gWÞßßÏá¸Æo1þ[AO˜F)zµv,_ȯµŸëº±±Ñn¹.5=ýÁä 2¶RäK°a`˜ï&I ~Ë=‡ªt|?)>e“2%ùUŒn¨ËAÂÂÅõÁÂ?JÛ¹Ò?‰7ë²ÑÈlзè „Û›iPzÓµN9`\ì–j¢€Œ#±W”-œŸø°þ.h1˜D}²Ò˜øþ¼®×äö3)æ{䃦Ç.1£c¡½a€våÊZëD£­ËõY«æÃ¿ù7q—äãQå25pÿú2y\‹5Êt&âZ«¸ CªG êgæÊtñ¥¿ßÀ)ØÐ;—élëg̸GÚ.bQE¹" çàT»\>7ö#GxÂ<ï8Ûx“¼ú^%Yd¿gû7Õ¦(œ²Ýá^Yò¿êÒ1@ĨèįªG¼"ûò%t0¹ÈiÝÿþñuµ3Ô Âò|­u%ðýUS¾Ý¥ Õ÷dd¿ˆEÍŽå.‡B>üß×pºPAîó–ëᆭÚáO·/«ëoе6Q™‹„Í;ÜÚ`zl‰¼ì†ÕÐ~°Côï'ן¡•ê5BV¢Î»Ôma²t{2B6û@‚*\ûAPx_b²Šqº=0Ðãd¡3?^0:/4‰oˆøÜAj¦ÝƒýÛ[RþXÏŽÿ©xa³ºÁSèleipk¹¥\§ö|Û^¨&æP*UõGS¬ö=Å,Peµ˜b…Á> Öõ„˜x,QD_¼«èT ªVŒeb.ß•jc§ÃÐÒËî웸þº~Ò\ºŠÎ ø¡2ôßÍdëÌ1÷]=Ø…Z,Q¤Í ɵÙcÁvÆ)0[Йâgwå¢](vVNë±]×ýÕ2¸1·Ÿn²NkÛ–Û³8mçXMzktZ§=É0;ˆöWC¶¦F™ ñ4Þ¾ÁtÝò{žéyVYxôÕ £a@ÍBžSUÂ= Ùýa°µ2Wfö8’’ù5‘RíùÁÔ†ÿ‘j~Ňa’¥%¨o-r “r¡ÒH‰”ªæ“›| n% ‚1Õ¯,íˆ%.w¥ JV·G³5¶óÌ9ëÚ$Ån\AíèÖJY¢ž7´ß—jÙžè»NkÍbIÇ_ŸyÚí>þ0ô‰j …½üéØF^®JÓU¤(Qµ½âÛö•À£eÝܾÐ(uÑdKÛ-&U l"óâr‘¨«{ÝìãŸmH‘x‡:¶=†ÛV´r%ôƒ™‹Ý°È0Ò3uÿî®yfŸï3šZ/&lv7²úrYzž.2*há§ ‘'»ûíËÚ¤ÆâÉê‘%MTÙ¬ÎîÛá4õÛC¾#V‡ f[p‘HÒ—ÿÚtµa=P*%-dz-£¥Î>ê6+ßÇY1]x¨Ê\˱nµDuædùÇÁfwâxƒŠ ?æ×5¯\ §a¦ú„_vÛ4'†ý½è7¼4>K×~v÷d>QwµÜù=ìø©=X^ÇbnKÞA¨r͇ŽA#áín™611´Tn¦+öc—Kh†cÛOóá46-QQQE<É­·W8êŽ(ìGr ºÕ6³6:5VÊGiôYhõäûgRš/¼ZÚŸ›ÇÖä=Î×ÕH…~7”볕éF¨Y‘ÏÚÈÈË›‚Á5@¹³θÒFvóÒFRdØÀ¨UD@úüööIÙ•ìçhΤÞãóX8/O:›;qƱ­s©© ›¦˜Ç‹u¾ÆNæ&†Å„Þìµ·¯ÝûÊ ˆ=2€ó~¸Vºôw`&@…ÿ¬ô{$ {wí‰(oE-¨ÖÙÔ‰›¯Þ܃ÎÈz28%•¡ñaÍ7}¹Nblì³Û¥‰àwíySÌ.rÊ9/ˆ¾:˜ $[}!´™…ôV™{S¥7ƒSa‚ÿ@c¡ê´ù5.5¹ÛÚZ2‡l>“áhâ0>†ò:+‹ù_Mì:?ËžëAšAŽÂ.âÿž# ¢ªj¸ïS=pã½;[û  Æ,²‘}0Â`†þû/eõó]/ i¼ó8 ºFµÄFd5[¢ëz€ÜRQv^x¸Šýž¼ šË29ó«‰ ¥ ÞŸÐ¬ÕN`MãÄýn0g×}Pè‚Êt*`õ›]UNæ bœŸ=LPi»`ßÝRþ2,L5qZO憇‚íçM|ïÄww;CO 3¤µÿAÛæK|øD±wÙ¿Jg¥ÉQÞdƒâí¹ÚÛ¸;üo¶"~³ÊÆóXòáåѼ Ò‰+qÔâ½@ÈÕã´šdi׫û+]N¡&-›^+3ð̤ ƒ@±»‡u;Ä0ãs!‚Úìùãçþˆr+o ‡åVd4…Û£K×Þè_'ǵõ>l-ÂâÏØøë~É3,m$áÝ%³EjŸn)í]vJKsê­+T#¾ìÇøRÐ(\ ¼‘[5‡¦âyŸ.9{œêtíÓ\ådzž-…9Ï3«•á~5m=ü\Ghl;ƒx¬ð5WoÓ²ÇwÖ1Á ÷f%æ ßEÖ›Æ2’ù†¼J7§þ—ÚvC¸êù†ÜìÕG´ýoú~Ý”Û ÂB’é2(BŸ“Œc­·3x¾[­¬7«Æ¬s"æT8ÉI/LµÃˆÒ uÃ'w2Uxöpàl.îÄa5¡Tã†F)O(€øõrûàû§n§‚%¡7áç~ÒPîyø…£yšçD©€ ¨A®åÔê*DýÚèqA±ãXCŸ;m;÷#½Ô¾œ ÍÁøTQh¯ȼ©õŽ\îíüR ÎÔw£¥¶¬„2ÝÉ×+”YÅ‚§ž(­_\½~ûY´¹¹<<Òñ¤ý ™±;z f“Á±ø†=zKõao£àM.aã uß2³ õÞ†@!ãá4Ì*‡Oá”R¬Ä<*5>úM ‹Í_½ÿx1Ù›÷¬ÁÓrR!¹þÕH×­ ®_ëJÏŒ}»0Ø0%Q­•äùöάiÈê­¢n ÅÁ»Æà¥3xSH™‹ýY£.E^S>$Qe TkÒÆÅN!¥Ï‚-îš¡ÇuJÍ›R€ùÛq%–Š\,:î½;©=ÄPþ»À^{k.þ÷µ$(B°Aúþ!b[Ö„„ ÞE¥Wòâ?¶ê@Ý=œ[MKƒ¢"ÃéáÞ÷åӇ ¸ÐÂaÃÚâ%ønt|£—¤5ÜÏObÐÖ§‡úŠÌ ò¹úxDï3¿¯7ŽàѬ…AO¯ 2*›LÃè™'C¦‡§%âõz×©Êæiæ"«‹âBÀaôjÿøöï!XAyšÝ®0 ¼d$ÅËE‚ÿPK“nYTãJµâ?†˜err.iconset/icon_512x512@2x.pngUT U(bU(bux èè<½TTÏÿ?|—\J–DAº$DBI)iîîZJ@¥DJ¤D¤»A¤»»YºkŸ»ŸïïÿœrŽ3óŽWÌ̽F©©È“Ò@¢¨ û pÌ'üDÏ ~!pVÐuÏû˜OHþ/ï-ð/ï¹?í®ádéîeêjxyyqÛ8Ú¹™™:[p;¹Z¥íŠÓP”•Öôþ²Óä—Âò¤•êÚ‹?Ð`P:BV Å%ajŸµ=ùü’»n¥/óz…5¸OùwU/·"øïïdˆŸ;3uGv@Ÿ 3m<ß²Ëy›}):>õBgQÂcñ¨-zûr»¤eó(íoèñǹHˆ5!ÐÞÝ—.–‰Å»4E Æ„…䨒 ¡{Â/ŽQK{: ‹#½ïT3绽.u{;n.L2ÎN 2™ÇìŠ!^‘†?ùUÞ™–å/Z‹½gu¹Ãþ£±5×:ôUýxÓ®ÕtSÐ6‡ÑÁ»w·‘ì·. oî2…¹“ݪ?ÔöÜQ\MÇd¬ƒJÖkHÊö$¨úT]öÛMg/t[¢ÿ GªP»ñ2?è2¿$à¬a^«yô½MeŠ€)¬‰”É@˜Ÿ7 öú’è?¶x%yx!NŽƒ†ŒÑˆrâKL8´Ñx´Ñr3BLYd&—ÍBB§sýâGúïcÊͬ‹7ÿ+,þç5gèÎÉ+c6J^^^ä‹o!àG|||oÝhÈš± -ɈíÍB­‘퓵~½¢·QQQTÁmT;ÓüØ#¾0™™óãaÕôNEÿm€÷vÝšÒÀä]«õ(ãLÜ;#Â_’t~=ž¬TËI¸Š™£ ‘ºƒÒx}s¹¡u®Ñ¶½¨´aYrçû„{0y t4|Ü4 qnAŽm¿,wÁÕÒQ¥GâwºÓ¶;Û-Tïû-@ +yØõ€Q }}Ô‰À$ù X´¯£ÈÑ-6Ê÷ê\ÁŠUx«ê•ÏjHRÇö1lRaKq(創`ßžÒÌ–12$%' ™^‚2€ Žƒç¢g°6 :,U@cBŽ÷c”ýQ¡Ö‡½ùX« < Š^¿ÓIÉÒB½¢Û£·$tÍÈIÜKJ,L‰×š¿´|.™é…ÂK•’o!OË?A9ò~Wá$–i“ã}ÿé;îGáã³/‘Gž9Í[ ò>}U`ö]»Ð¡$¶—4=úòn†´ZÑ(ïS¾(îˆp"ê7“åe²TÑ‘åõ¯9üæÎf=Ïf½m7iOH;ŸsÊ@7BÀ\›• “‰$xù)ôEB´žá–Çh}YΡËi|ö¥Å¡1ÊŒŽC|‚g«Ì_ª¤¢ò}{ó}|{êiÂ;Hë¿ì°U×{¡¡¡'u÷ïHž›pê–·®Ë>òò¥ûÍÁžØMêµ3á2ùdÜ@ +€ì?ô7=–Ã4rFVÞrÖø€ÜŸÊ’âWËßSqµÑÁ¾_áÍwͨ*蛘QÑŽû¼||Á.™*€ù#µ‚Oe΋2Ÿz,V\Ÿ~ˆU5±¶†nýÁ%ú¹ôÖTìOÖº£÷X=¿éÅ<¿˜Ö*¿ÃTÕs°ª0]È:ñêÚCˆ]qkÔOQ þ©Î±›óûòõMˆe†oSLYY™¥â£VPZôÞ Më/\"^qñ0ð[ÿ*þÔ«"G{öí•ÍÑs¯¢O¤Gâ{1W{-h:¯9ŸuéÏú_1èûÿPÛ7äË%cÕ¥‘dî–V<Óß9´Èòö–Ø_Á”hUmb_é0““üA5íÈ7e‘ññdÄÄÄ&`|»V]E6²B÷Ûðs5Ù«ÎMÝ›ªP;¸DTâf1=ÅM§z'a‹"Ì@8Ø•QÈÿLF¹éÜZÚç.’õxÔØðfo‚¬oºU\ÛÔ– v¸“j[õöæê¬F"qû8A“¸kýˆ-¹œøÒ'¾Àű;‘#¾gUﺜ@zxünÿ‘¤óùb„T©EOuá0­“x* ÈUúçò_Gù/”u2Ø¡‹E1à"ÕÅq»µÕòÙV* ûLéè»›œõ@´Ã؆‡Ùu™RÖAî™SòÕƒ'ê:ŒŒ4”îâ‚”Äm8%ÞªsF›øÈá( å‚¦½“ÁØïlפÿË@#ul©¢Áu™ïÖ/q¦X¥üd¬U—\&Kà?öÒr/@ç±a§õ|KæÀF5M×QÏÑ÷¼îe×":Ö>ÓÓ€ƒw 9ÍÜô‰ùÍã¶OÄ«ý¼4cÚ€¡> ÇZv_œ´P§¤£Þc[;y9ƒN²ÞäÑûù‰Ôd™Y§ÝHuõßéEj¦065Cå :ƒßnåÓ!YtϪù&·¶b 5;uÂCXÆEßÕô¢½ ÐïY¥êdA8ÑrØ O˜<íHçf°~^„UÙ¿ý¡å  çªÉ Êüy,¾gw6„Nvj:³8<^˜‹õ#”À¨†Ô'ywÏ¿Ãç“´yÎ4°mëŒjØ…iÆ‹¦ï\ ôÚÕ EAÔÊå¯]pBÁ_/áwJc¼ìø"£$‘˜5hm2˜óÜ{¬"#,œÊÊÂS¼²•’$.ýÓ\‡éê&Åt=«™`0ÇÿüvJ/°‚í¢o¯5tJô³cÝð»¢ìŒ›cºÙx/ìŽXïZÿ‘«ÒûC¡*nz¿aú ›Q¤ºî#²€Ä.õDéQ¾×ˆ¸™–…sô‘ÌD_ߜͣ£Ñç±hDù?sù»-è[±ÝÆ£¾Ð›VH,çÿTWýÛÆ…F=í à ÕÛ{ZŒ}LøëŠÃ—£¿:76OOä H·¶¦¤n!ÈŒuH7öÔ”Ó~;…j–Q‰þuH•ƒÐâ8/ã¿kìTÅ HßëR“6  TGÓ wS¸èƒƒ±í“2”•»­«lÛ<[çgzeÅ\ç£sGL&(?¼E5ïÉ30Ó$BL>ëÏÆ˜L½Èб*× 'IgÌÛÞ_ ­Ù·šà>«:òè°!o,.} oÚc,×Õžd»›ò {»íöG™ý¿ÄwæšèþëNjÁ"mž¹RÓß<‰¾W›Q <æÅÆh &Ci’ϹCè\~`Å7­H´¸8ÓÑÀP´¥ Ó´eóÖ^—@4köôöÒûÉœ6RÌçÁñp¿ìi¬À©=?&äàGqLèQh¸ “PkÏ‹oC^» {Í^NS•Š·_zìÁÌBþ—^w‚'ç¤%ZK•=Ë'Õ¢Ozç(÷ «ë¯¿»{bÏVý š x”=©3+ÃkèØW„sãÄOF4¾Úr-{úq ¾ÜÊ@A¥BùþùOýš;DÔÜöcd <º;V"rs<,_ã8[¯’Nu¸ùò?æõ"@þþ¯¢·ßiët“ß–]?ùß) *Ùû˺ éÇv²'å *yo­ø—ßVAªË¯cã¡GG>‘›¡Ù¥Ödí­¯´Ì¢ÆýŒÓZæÍ×þñ!¬'©× D›O\Ü«„ƒ”¼™wÇCÚóŒOoå{ج+†‡Õêãr8l^×û^è°ïZüé•нö}\“=(åì7Ý¥ß8‰%{'°±±rêWÿÛ/©Æš˜UXË·ûR‚¸„ð¹1 ÿ(ãNÈÂPróñ7t¿û4™3XR_K@}ÿD;i{÷Ö)/¿ qÉv=K5çD„öj =ÛÈÝìÿ¨‚ýÆÚúôu^ÛÖ(ÌnœYäX g{Lú¾çćRt“v«»Ö1³…»K'ŠƒvË9fòC ¯ÞGKËû¹ o:YV{ {ÿκÎ:ñÙYªiL“ ¸èpIþ‚$àK‡úd£i‘­Ö ¢N0síÝœÖuRLŽ tt~W÷¬¾”uº_QaÔÅ%F°Ûã"A­Y|ùÌ÷ß¹ˆ«ÔÍãëÌâ[ž §''ï[ƒŽÕO™êaÚpa÷}Xhû¸CrcdœÛÉ`‰ïìÆ¡YòBOsB‚NJ¥4L2š²l`ξ¶ ¢¯÷~ÑòØÐÐá=Žjï ëÆ'X Ž\u?[¬§.ĵ‹ô¾è£¤Æß ¸“Ÿå¶6¨i§9ðU@ˆB–0!¯©¹‡±Mÿ(0Š—¸¤ æ660l†4ŠÆ—J¹¼xo|l‘• —/õä¢ídx¿p¾<(²+"#IËFeè'§ðHá˜UDW‡bç^¦­E'–¼#:¼_‚üØ+w€áÈñÉô2XÄ–ã+AZ¸Í:IfzUÖƒÌÄŠº¯¸µo”¥$œ¶Ô?¨J^°d¨ñ,A!2‘t >+ñ^A·WSã€a½ kMó ×v{'½×—*)\äñj*|›ôŸ¿Ä5oèMí§Ö÷iy|hYÓÃ:¢XAVÜÄÌ¢õ]ºÒ1³ÙžŽu öÎw³­b-Få`›‰î±G¼)å€=rª¸bðÄÉÁ©Ÿj6^€Â°¼$ÁBî]€¬2Ú1>xêVlÿ+¨c¯hÇ%ùÚ4ñöAÓ¢¡òtU²*ûB&%T^9)È»„ÀäŸé&º‹"ýøéú»uôb èÓšbÃ-FB\Á ªè“mu)” `ŒØ®U¿ç‘#HIG*$AU‹CÕ¼§ â '–F:* E¯$êãiX¾†ºôžÈMN'IÀù§qe QÌb3d+GfËÿ®yoäïŸ/ÇÖ4±2‡!ëaKæÑ·gèõù[ÔüØ@ ŠDtÿ—oþövœÃ³ùØ™±¢.§YBôbÄCf |o¹^ýžéóˆ6?iê¡Ì±FëCüö¼€ËúQïaIôWH“ͪžãø ÷†ö¾Gp¡#§á£`nd2:c; ŸîA¹ê Ï)¡×jÖ¾­CìÆ~:æ+¤ÑÀ.ϯæÑÍ>Bˆ™P,‰þ+—*½Œ' ±ìU!S4CÙ@œcc“_<ýóÛ>±xôšp>C™üÌÇžl—ëƒïM‹$ß[v=(±»¥Iæ–í!ñæúH]ÿ¸uœ)R–‘^›bÞÑi¬Ûïÿ€D16ŠãR=*hݸŒ85õYü2YpBâÍ×<¹Çto®©·BnŽ­$HM "íInšÃ+UOŒ˜Þ¤û_´†"jì¨ Ñ¢‡5ó13}éˆÜÅ©‡or4en*‡Õ¦kÉN*úñ^<g ¢Ñò¦ô÷sô}Æ-ðÞÝÍäδi»ÏN¤Øi´Î6ÓÖªÓ'J8Þo>¼L½N’Ç¡=E§íx¬:7ƒöiÿ>`ì&'£Ú³4UÂï£yüWâBÎ=+++áù¾[{SĨ`IÐ+<Â`¥, ® Iùòeç‡ÔÑݽ‚ü¸–å;+Nu¸½i>ÞÆxdDTY}O¿y3…˜Å¸ î0I<ø{‹f‰½¦²šF—Œ¥îØCXS![/Z”àE¿¦/+“{!—#µ(H‹ ,åé«î©:ðºÜ›ïmD„þ¶ï¼9DÂ…ÍüLDZÔ0à¡ÆÂ_ߦ۾“íñ ”+æ´`Óâš…]ó>¬„èÛ½®y?¸Ä^ŠyZ‘rêuî©NПŸÀ‹NÖn™Ÿ)£àð,Y&o ¶^i×^ ¡s£Œ·Õ…¦PÀú…4¾³¿Z®³öcF²Ël+D¯›|Õa.ñd'Á)6Ó¤ÖJVÿNP™ø˜ŒÐ}’˜Xª@BÑfþIÜ–Eÿ¢nFþ"nõ»vßc`Nâz†º>Ro:‰}ÇŒO… õušö^‚$Ö€PÌ‹×%D»¹X7`9¥9ªÌ¾kþ°¤a¬¯»ËxKü‰â6ü¬ãR¹ a;~ÉïPùæ+ñ;¶ëãßz;Î0’ÅÌÌL9Mdní\]¯5T%N •¿1¿†Ù¢BÔŠrö¿ñdûwÜûÞ¸Îx½L|»™[ŽÍ=?ˆ5ÛH1ãÝñjE÷:4È*è”âκôáGrÐLh_+Ç’h¢Ìõõ5ÐßÿAÒ3Õ§™?~ zÄëád—yÚ¼ØTm³º·7)rµ9lIEøÛÑByK 6tRħߦkœZì‡ó”·Ö-§eh©'¡LaA_"ïZÇT{굋x”R76ÞAç¡v^‘vþŒ'ê+Rh~xª4ÉÀè‚” £†!¥ú:Ö†ö¦–”Òò†¿Š5Nð\zVµn¶rKªŠ™·øÕS{ÕÃ0¤3ò <–ºÚ#1mk¿zŒÎ_^6Ç6xVùËE%ÀÃjÏþ²fú÷p_tKåܵé•´].Hô2£ÙÊ©s ^>Ç}Ò‚øö/¥4òÚÐ+»Dì< …ç ¼ÏB6 X+-§O4A¤ÇÞó!mœm0ô“U`yÄ„xøÃ¡çm£/ãC2ê‘,>ÛÄùG"a…«cWQ ›ãTZùcû@ xXþæ»Z¦šEH–õšsi!”T®ìõ—úžM%¢é$€©Ý¨Ù›([~gWÒTͦŠëHvz¸ºAõOèCuŸÉž¸–Õ¤¤ã2FlÙ ü¸Øy¼!ïÑ"™8Ò¯b¹­_é/ãmÛ2În5qõÀwßµØR{H©s\ÅOß!nþL,^y™Ÿ”?t´êiaýé“Ék®WÅc¶)))—Z|ðx¯kM‡ûޏ%€=Éëýß5³g³?†+•ï—DÃdÖpÀÇÍÄгôÂÖ²¥Õå0¿;EÿQ½Ñ*Cz³¼GíéìJµƒØ\wÖÞ¿8Š}p'ekéëd¿öýHýdó]!Èk’Y lÙ¢sùÞE£¯TÀ¿ûx"ÉÁõç{Ép rrr¥–½´¨\f®I€U“=q/&&&#ÿŽ“û},(SL6€P Ý:~@ܼëÁ–éAåJ*¹1E?ÄzÞrý°»Äÿ!w#lÎ,¶Î3\Ž k N]úHZž>† }?Mƺ’"•fR­¯¥ßÆ#þ…CáãQ4f?v¦©oh$ Ó8ÚàŽèýù«VlRÙo¯ Y÷›­© o.®OÄ wD€O/e58œøÎ¬5 Ðœ¼Ç]Ö`#oèæBÉó£Œëtµr”†Ôy°N—øƒ­ûÀô€‘6dº¸V«§&Àƒþ0œŸ š:ÁŒPbbÚ¤ÂN‡Ãþô‹/»r¯©9„À[W{ÊÌÿ’c†ZñŸG·Úä§{n;ÔÌV¿Î(î Âl–d ÀÕŠ()e7Ÿeû_nî ŒÏÁÞü™®" -ñÆu×îÔÝ¡uwò¬Ó" ýÜ„p,áëä¶}ÃÝ…Îl:}¬YdŸ‘ÕÉ\^7EB‚µ åÆtž7f‚iÀ?¥úXAÅ¥wÜÄ¥_Ýø:³#ôÄï¨Ö sSMÉ{ KÖ6oY¼ÍÌhÄÑþ”%õÝU_c7ÍGŸ²ô±ûk¦0žýØ›ô6÷4)­ëúi„§È§7ÍÐ/™JƒÐ¯Ù‡Ž”\ìEÓŸAƒA’Í5àî9ìß×óa¼ÿš“J¾ÆaÚs³#šn5 ã׈ALLaýQ $O$¡[@çƒ9fy*j¹&z‘lDènþ1®–E±sœÌ Ý\4·:U“¼y“…¸”C–¦^o‡1/½~£ÑíMÀåƒÇ(Ãp^×¹>µ)¤}šæ=¶°°PSí4[s(h"0}À,6ÇU…ýFÃ…ñÇþ'…4ÞbÞI¸›ì³P×g¢³- :jdòj‚jÚ¸!“YôÏR¦}ãW³üŠ:::ÖX ý2§U°¿ïÜ“\XE¾bØ@/cðývLß©¨K£RyjJŽ "« ‚Œ" 6pÔü,ȸ'™ò‹º%2ø¬9Ù +.cp:›•PU°ôSUÜ©–—ê뮊V1ò`’B^pãA™âzVK}OlWŽ.j×±€VŸ—ÉÜ7§k½i™¬¤³B©ü²bLa• gúçרÉ(Áƒ&/ñÿSÅö ¼ßïi@WyF‚yß ´òã³t†_É„ÄoÒ-_´?Tl¹¹Ò'ʼn^•˜³‡iT>AÁΩÑíÍC7<|ü½ùj‡iº¦6.°G¹eÀ¡ì®ç¯ñV‡Uåw§ç=Q„Ln/ÌŸ-Vdz ð6±ëï~8åßr¸70êÁa—«ôÇÐ2í´$C?îÓþmGg'™’Ç }Øî)ÎÛ·oKí'Ë-uoïq¬fƒ…ú;†^¬¸áörõñô#ëÿ9 xó\ÙPà[¹EüÌ[÷öøïÿ¤°L$we]‘¾aƒôeX-þi¯ÅTPKËû7BX/GZúÏÏk]$Ç¥½i¯¡ ò¸>Å‘¸þ(¥Z`ÁÔ~±=VÔ°·Û°'©™ñÃÁõOb¤§ ”k¬ÓNò>ËrÞªR¨©»23ê…¦û½NoÑÛÆ §aqB#ñ…³´8)ÎrX’YJÂýaYŽqÕÁ¾·\–k±Ùÿ){bÛíÒ"xØ^§ÏÛÿÿ.€tÁí)H{ÆUMÝ%ĘÌ3@”ÿ'Fh|IŽ7miâ:TÅT mªJÃXž>¼ã(sþšp¬8üuí›Ex²Š=~?Ã×vëLZ¯íÁWº¯\)1Wç­F–*£g ê/DYé9ü1õªwieSrk`I eâÿðíe²ÐXô˜çX|o 5]cÜl3œ·ïæ÷Å 2tB¤JÙëeÄÏ™ ôÍX,ë-hóî_ùRÑÁ/yVÍ>.ù@ïHÒ´Õ{À"èß. <Ë/Öù‰(µ¿×>ô Q@éôSäv/ˆt/^~Aêz-Ïø|÷j>=ðlÿÓð׿3ê~Ãi¼.'£Å³ð{Ž“½gø+LPòþy.ì4BSíé!^%¹ÄrVíg[Æ®PÝ;¥›hµ6’üŒ1 ƒ~nŽD¢°™›§¥œX¦\øÑ€ æ´jë{neI*Ê*ßÁ¦bókËÞÕùpæmú9dÍk£¸“1èúÚ­ï©U‰&õ Ñï›'aqT[Ã`|ͧ¹+£qGs¬2ׇ´<¾d´<þL´ <¡nÞ˜­I¢ÝºÔXað.ÕW„Ö~ß8(PÍ>í®÷ 5‡(³þo¬,† ’E†Óë ùÜÈï_Ÿ6žÝþ8bY}š/£«æØ&¿3¡~µ­úÂø¨íI‰ÊÓÕOŒ/G1r¬ s]àŸ6êêRé¯jo}‰oQóÕþûÌ‘ÙL‚c%ò—Þ}n 8NöÄb{²·ÛÆò‹~ÈOÉ—÷øÄ?”á3 J-£ít:˜ï+®:Ü=¢ ¼q¯¶•̾ÿ µ1¸«_ZRØdá]»à áÖB€†à…ÁDŽž•9/þÒÄÐ-='¥  ˜hðrªàDk–ä÷\ÙVMé ÛOdI¶Lœ2E0"¡L½”Øüo¶i÷e²Q/~ÀBC­ÇNÙ…^“¨s7xþ¬±"}'<ƒ\z2Þ:]ÕS% pã»Ór¢ ·¸ªQ¬ß ² p¯("s$:¯WÔ&ùbÙèæÏ&ÌbNÐ~¤_mï3ž§œ¶åúdG 7Ïøý P4N@¯ óy>'¾}&Nz’ Úq¾.kÅ@yÕrm12·ÿV À“¸ÿ¬!¹2Eò‘Ï=Øûckyr[ÍûÖæäTœŠlÀhºÛe dúHG8#ggXO2¾ äÓaðŸ7.îîîÇ\[îwÚAÑq̇ É¢Ä e7ð/¿¾ñb‘gšì)×ÉAmÍŒ+~óÓW×ôLÚÅíçOÆM®ë·áTœÎ(cõë_ÔqWm¤ Òüˆ™½ªíçj  ­ÚùbÔðNã 6 Të¡ðÖövÙ-ì÷ã©X­Bm¦ä›ç@g ˆ™Ó ¿Ï/®ßú"}€—#€ e €âCÆ8<žfšÛþÀµ) áó[Íw×g̓®å#Û¤Çz ª@Ýov6Ûa|n§somEŸ37Á¾|ÿ}í^=û¹fø ž–egMtÛÄÞ>è=£ i©ŸÍpôSPav\ÚÚÚd×±÷Ãy×AÚ1z¬S£ü]‰qPºùl¢æœã²X¦ qÃâYgçý6š†ÏAK09¯ lÒö z¯¬Ó<á:ÏoN]¨™¨ë$.GçOnV¼qöûˆ4:•Úe ©öQvcm¦|ÄØu–çw¨ú{‡óœöæØyQ8èÃ…É4þ4àò;Zë-gg¨šR%CÆù`^©q|¾yØcذ¶…Kmb¿®"htH>^\û0³ó}!•r}Õâ…RœW»Ü0l@ðw؇8ÏÞÃrÙro¿KþçÀeMù˜³AæöäW}`fÒpüd÷ʤÆI•AäŒ(Мõý:HöûG„Y|+Fä;l_ûÍ„ ¯‚ø\þÜņ8 ¯›–÷ðÄÇ1æWÁ3ÏH™‚ú%0kgÝd÷™!v$³"’ž}zþ*4`]•lcéåÄ_µEi¤.Qé°}nù›?„ €z (¶U×:U§ùæq#?õ 9±s%:ôË×X°5Êca4þã k³f=퇫˜øô‰õWq|½ ý«œfÐ0HMYÒ8TEÄò›…ä]8l*KLÅp橘aöÞ‰Ð[GYC.·BlÛGyûüOŸÚÜ—"‚xRù“0Þ}ÍL‘Nä,_I!ÃOˆ |ôy—yuÿðln{*úés°#Ëôž/‡Q4|´}ÄS‡3ZÓ2[E—Ê4Ðu³ÂŠáÎ_”_:•çc™Uð‚{ñ'åÆÇ5©Gç”ù²¨+/ÈÂ^WâÐWé‘Do*5Vâöß|’eù·WŠîÜ2™S¯rcDЧF T3䈮ÆP,à¯àíƒØ¬ãÛ³O3²÷Ôfháæà…®†  I^›Ž°ƒô˜ñëÉx­gð×ûú¼E6Ç*¤ï?«J ´aóÑ­óÏ-N¦í‡“ù*H ÊmnÂWêl”…Geʵd€ýh*Ó…"ºÄCÀ¡¹eLöÓ÷„…Ö¦ê~ŸñÝNöç̬ן²ˆK>’¼PÄÙ«;e¦t¬'˜KPŰm$K¤Oˆ¾ÙZ]„þå%|ú›ü©ïü¨Î#VV¨$Š£9¤“‹ÃÕ^7ˆû´>%™ <¹Ç°&àê´GØaŠ¥¢ÎŒHšoƒ,˜ß_G/fÐÀ—¯däûx+ÿËÒTô?¦·oyQUˆ2¥Jïåå®yßB;aÂx[ÖÓí_®¬›ç¾;à»Tã|_îÈJØÁÝö6¼÷Ðvd1+ônÞJ5M ²éÄ‹kÁRïƒ7šy¤Ø1.ÜÈuŸ¹où_\»“AWVnàÔìúßFsò½T+Þý`ÒZ01"X ÉF[àl†¼oø.šÏê<`âñ¬ÃpåÕ2a5!õ#ÚùôóÉ{Ô0‡èûŽF] Ù“DR¬dÀ{/øiQgБóü=Ð.FÝzÔ8^dÔäÛ™î5çg½Ù~ 6¿âæoÆ·gùRuàø©µ;üÍ)——Ú¸B.˜öK!麦MäŒÂSdªø‹50ÙkùÇ8B4£·“Å#=f˜C|³A/Íú‹îù}/"Ĉ?ìaîäßïîrèR?èñôö>×ׯqÔR½›E(d‚ÎÂüz¼Eî`8ÓÕñeHd‹mÄø€q¾³}5¹á”¹rX3³4EôQæ£9¤ÝG6STeènawËcoUÚöí¾šà -•›æÀF'0ý­Dq7КE‚ÚD+[m¢Üc{Ìm”):FÖŠ&ó Ó|O_$ßÙ.žMÑØZÿ²<Þœí²õ½é©]œ~».(,E²úã¥Zé@MK„°öµòãs—?€~æä˜‡ŠÓ›bÇ j}À¦*ž —-9¿ú\>Ôý4ÿÖÐûέ"`^?&Íœ/õ|q-Ͱo}¤O´§Š(àÏJ„$ΧàX,ébëã ‘‰ßïž~…4øÓŸ°µÖrÜfÃÉÖaˆ'`ÉBÛéó+Ü€‘²jãçÑ÷YycrŒJr­ecªêÿóýÝ«ü Ìí¢`zÿE`ËY`ÃdøA`ÿøøã-/ \§¾?c[vDýiN t¬ø9Ê£L®PêYÇi¡q£¸Oo¦—K*žµw¦³¶'=ͪÞ$Üðˆ¸ú˜2ubvÆÝšÉ5{Øž„;Àoü"t=ðPë¿Ý½‡/“Þ÷@·Ÿ¶—ÒI3loâÛþ ˜_¨YúÈz’ á!v—1[bs‹Sáÿ>2Ò{€Á½7ëK™UÜWYï¤w«ç’¬³®ŒÚò /ƒÿP}#Ñšm4°©IA‘Àµx§Tùëßñý¦f÷Í¡êÊ{ wº®ÿ³²±¸üé‘êíAtnŒÌ¸¬G%Žã쨺KqòžʨêúÚ{Ø®qwã¶_ˆ*nëÛÿ|О5¢y*^Rõ³úåüÊU¡¶>.2iñŠ·5£÷æß7F(§a=åŸ7eº1"`)If2ÒÓÓK¨¦;ìÿ·{õ• o¿³œýUžÏß$~gõ§YN·½óµžL + 4))˜n¹ç2ŒöÐŲm(èKÒcL$3{€8Q&ù°tÉ1Ÿæ Œv—S ®µ×*Ò.ò´5lÁ™Ð… ƒy“ªwÿSÐqàEÁ®(¸v4+B–<ÆÛè½Po)\þ3­ÑÍ_/7aDTµžü4 »nö#@¡òX:ù–±ŠŸáô½Þ` ýe~Zgå â.Ì~šÒþR4–»+¶[D¡{FV]Ýò÷;]ƈ#ÖN]c¦Ê:4ÀÆÆŽÀ~aÑ¿¼ˆ ;&EÜ%V¸]‰*\ã:=SEt£XyÉa´8õ^éã2 ñ*„ö¼PZvä]àÈ‹À×ùiç_ƒ¿Ãç)k{ªÕ¥¯í§Å²+Ôš n”¿%´ «º$oî›Xý÷—Œýóž›÷½™øý¸¸[ŸÊròdýYåT'ô3Ÿ }¿`>jÎ"Hl‹W_|Óo{´õUNÁ=¢ùé‘©¿!¡pë Âùšî¾gÏžÍO•[ôlÅÉÉÿ§Ý@øÑ—Ðøê³õ—ߣcsêR«”‘/þ€´ü½Êê WoW(W¶±¿F`wŸä} ¦,’ÖGÒ Lˆ%úßßýê!·ÎqÙô7…ÁîRÒáPž^\<µS9Õ…#×\sÿzÄ „’0DÆÙï*ÃBÞåž2]÷ÁDM“ÃOsòD…»¹’Š/L…ßZ8â)Fòïdz]£§0dð]ºÖáĘº´“ oÅÇ\‰9xªøTØ‚4eëceÚZl^²©ïºÀôži^‘vpøúˆ©µ/´2,¢÷Õ |q=«Í" 0KõŸû;EÀ$ñ P|¢Ò"f£™d}%ðTÀ»_|¬¯p,„ëµaRñ(·¹ëZ–§ySûÒã¢z4`Zí¼.dH1Ù*©žîø¼­½&òèÝç¹W§Ÿ8TÍŒ£ëp³ž‰CK‡ä?){‹,„lþvY¾gãê³kW œ&´ºjj¤¡ogËíÇßY¿;ê!éÜ6«’3ÐpÓÃq®;Á²ÇUdªGJØ![veôNÓXY}Ù Ê:LøzÛIv?¯x°Û Ùlð. ËÁ²Ÿ·ËžÂæèIréß©þBõ¹m§éRÓß³îÃ¥¢æÓ,SP&‰0L|åZ’,/Á)†ý‹uÞÇÿú˜Ø«áFVt¬bðöÊzƇä—Owú+·œh… XÐX¼g;{;×gëKi’F}Ä F¹–)¬uèÛËEUôê5JøÅ]Ä6ÄÓ²ÇwÊL !¡#ù´ñl n´ÌƒF Wm—ã¯Vúø(թ΄¢E 7cÍ8ˆ°ÒÒqo뢫–ÖkâÒ ¸£ - §n9Îŵ¦gÐ7H  M­¨ûû5òùæ€ç€ÌÚ}»ªV¼v€Ö*º¦³ô=€@R-ÞÇn¼Þ“Éí¿³Ü2îÒþšq%DC›ÇÕ¡W+>JÕkÊ›Ô[õÂÛô‰S<ÕºW=¢=»Ì-ÍŠ8@j%΄ 5öÚVàÖ‰(·A䫸¥ÀÔ.ýí•MgµÃtŸf„SZiU´ Àä†v—Þõ^Ð|QÁ/:ºg»mø† ƒ58øŒ; M,*+ad'¥!̉ð0WûÒc[Ö‚°]÷Dø‚úDÐ_`¹²LËsç1ÚbûݪÁÝ4Öý ñ9t]Dè†\¾&û]Í<ÆT;Ñ#™Œ§â{ÛÓÕWN[¥íXÃÜ!ÿ-?p{œûkÌ/‡š:VÈ(Ï HÞ¢ÛÙ¢ãíÛ' pGm¤£ÑpÕ–ÎG þ %ŽÕ¹}ª˜È3¨äÀz°!ɸ·¼f΋oäಡY'Έ{ûâ{˜3vú;ƒ“@X¨v¾Rí¢XU!YV¼Øð§ ŒØ ”+ð™OK<ÓŸ±È=îJüŽþÖC8PU()7¹…•Ã2^Þryw8 (ñ»^´T|™¯|ÈôÎèŸÄ^ÜÛÍ¿þsÌy ¯¤×¨–ÎÝ›©G1ãrÿ=mÓõ3½¿Ý,úg¾êýÕû'ç-h K]PrÆÌ_IYš÷_>ºy¿û»Åñ¡±ÜÃQ“Éê'­–5Ûþ ë¯J”ÏȼFÇû…2/Ë+›”Üȱ¦±üEoWH`#tÆ÷ ÕvRK— ÉLâÔý¸Bqzº–bvž‚y%3W…ýµeSgÿv»¥~G½ µÐ튾q¨"J}v˜|&˜ÀI#-‡†d9ü1ªùÁXvzSh†3ŒÿûrÈOµZ«ä™t«`É;ö)Õüí©*I¾þ¶O¸nöFüƒWVÙ '³IÏóÖ –5Òú²KSÿªÑS_ÿIJ¥Éå‡Q/mægÊ59mUÒß^&rèÌõ:iYeT_ëN§•78½––@ܧ¥›Û³bC®ºFO”Œ1s·Å8·ylÈçAÅ5ú…ÉT3?5B¯K[¸¾'…ùŒ£¬ôÃÇ{íôN2•…[ÆNe?ã¼rwª’OkMÿáÌ\ú=ê)asøŠõáÇö@¹,/'·‹ŽEŸÇþ]œz & óDKâyËUºõ«÷èÜb×l€;¢lc ûã+¥B$»b9Ö¯ËÒÌ™yÊýéÿIü=VvYÃ鎄Ž1Ü{ ?°XR*­Ýâ2.hMú×׺cáP5îd>‘ôçV¾%/[r·ñðñk0ûB?ªÿêcNd†‚\sioju*|dI@,GX Pø (Ý7ªáR•Z©ÊxÈ©â>Sò»KÛå÷Ô;BÒ̺Tˆ_)ù¹HÉMøÔ2€H÷®DFI‚ÉÄÜü«ÝålŠ¥df‹—»û±½!/2³Ùý•|ï/«aCœ^cÀ•AÃ@¦»K•m3ü+©_PÄqy¸ÕÈ•Y1Ä3^iq¬âcdž÷m59Š{ìÔ¦BÖˆq,$=n‹qŽÕSðS«*~†;B{ÇñjªðŠ „šóõ§¼}rÁysÐÑX‘>Ï@•ûf€©Ãe¬Wg §ð¦ýÉí¦àØÊ—1ÇÒ±q0CÆDˆ‰¨=§J“£ÖlÒcu¿¥qÐG»ÑÎ1»Ê©ì+‹É»ªe[ÝþÅ;Ê@cÒJ¢ËÂX‚OAìãÜgh9yy;ºOà( XQ|8w^‹I vfγúàNù©‡rœÿ!hpÓcëRÔ‰0îiž‰Ñ]\sc÷6ù¡Dÿi–ÉbÄ€¡/Ý“íÜ@ìYql„¼^¨•%)&šƒ9Ï{ë¡d­Ghl»\‡ó”m d@‘Í€Qä±…3r)ž³Î3^*ÁZ°°(â!h§µ/G[›‡‰‘"mu\p•ÄÇ |QV[Ãæ£]èoç¿{–x@+ FÒü¨.ÝéÒZ®tn •x¿ßø[ºâ†­…#=j8ð¯=j|3쪬—UÏêt[aGÍñºª£;6î`}(/š˜æ” -i¢è¾ô Ñ!†=ELø™ß|a“€kG~}Ç»¦â²+ †o&=k)©>›¾Ñìˆ,Þ›®×Óm©Ã7sÞÿø:ý0W%^E8¦qÑ1Ébƒìð¢ýxÙ\A¬­ ¿Á3›ç€1Tœ©2šìÿä˜äÜñ!r“aã‡ýß}« kºiª ƒ}ó¯.‚FN±$^4Ù ÷à¢_»±O„øWˆÍýó*¹º8:WI< œ°ƒ}×dg{¡5ñÙmëó;¡yÿ£Þ—£L¦ËS  µ‡èâƒÉ‚1"¿@¿uÖNêMJƒÖG#w<, ¨ÿ±’ì(‡ Å#¿l5wÚ¢óZ•úˆ»}‘f›V*)ÄédTeŸIÛom[ãû쓘Ó'gÂZ[[¼oèÓ  W·ï©yæ\;é½~ŽÍ&åq«Ð1a®Ð±$òb·*-cvc’½ƒ.À¸ã ¨G<)Õ!½Æ=ÊC6ÒAZÄßr—ê Äšª pDëý`&¿jYßþØ5j|úëjËl‘ݹ~ƒ u6JµÍÏ«P²…:PæŠíÖ­gXÕ(Ë‚¥¤+)¥2ûTPe)f#êú=PÏ—ÐëA ÐÀ‰`ØKø•RÁM5¨á[Ó´Ç=ªëC”›SOá=¹Ú·Êã®è¾~,ë^]·ŸqlÒ3æû-{$Ysß;K°iL¬†Ç ¸#Msáß  Ø儿üí§q(!ÐMŒJÄÁgؘ ×|ô÷%œåä‹{ì FÖ‡+ ‚XD¼å7Ûæ'êW5G9Qxµ»Œ³VîœÕƒ§@;ÑI]ú¢˜%o£á F¸ßëÖ5ëXÔ7¯t|¢Vƒ{|I ÜÛh:¨J>tëËTÄIáæá¡z¯_í8ëû®ïIî08> )“çQodÖÛQ_&øÒßæÆÖŸ2ƒ‹§_ïªÉoLŠÇöŸ}—ÅÅ«úNäñEuV35Xß›µ,*“uIö2áñÅ}ƒ2’ZïÌM@¢ŒaJ“†Ú̯7 îë »Oò ÿwÞy…¹³U yŒûø¿DÜ_„@l™xœûøañ áwmP >¦í÷Ë­,á n×á»&î”qÜuS)PýHPkáwñ2ýÙÉŸê)'? ¥eÏä°e•4á€ÏØæ–Ý ‹¸ûx›eƒdœðc™Öc56PÒy ÓÐgA t`¥³Ûˆ¯?‡ªeßæP»Ì{Äv\McªýÍê‹È» Ò¯"mF¥ãœ( #¾“sTûi!^/³È®ôšck'ñê%ÓÉ…Ù•³øëû[°½R)b4&ù㵘bßßçu­3x™ÞínXöšs®Öc{Œhš˜fƒ‚œ\y:%¡õ}·v<¯žŸä¼‰¡f…Á· ló—ãÁbCøãNœ.‡Â倒~´î´(*·G:­d…]™Ó¨²µÄÛªóÛ5àé›ó׺XkAëF|Œ:ÓW›ÿõx×úQ¯ç{DrϪkæ(æ«Hlo¹ö9Âþ‰aŽMfuxlî{¨vö“¿Ù|õ¿]Ïc®‹=ÿNÌ,®×0»ŸO&jÒ±acÏ- —a7ö9ÈzaãÛÛËÛSî’›FD&?ÇX£ÏNVÃøT~ŸÏëAýÕ%2ÐO=”„ák{ê0.©ov¤­˜ç:.o«Ûvœ|ßaH=øN†UÜP2¶)×i-Á <¼Ý ÄG¯Ky¡äò¾g:‡€5ðN=ô¦ÔžðŽÇ›à]d£ÈÕf®öâ(è83¿ÛÊ'”fmçÏiœñµ0|^Ká¸|[Fù’Iö¥d0âYý‡„ Oí£äÞD¹—ÿü|%˜†B!Ção9PÆèmñ.ð¶è>ÆŠó!§bkëä Zÿ!ï¹#µ€£4Œ;9Pàpº¦ÁóÆÈx‰ ë/Ìåä9T‰cCH‘œTÒWÐ0vÁ8ú¨Ÿì’Âã’ ÊðIÁ›ÒÜÿw ¶Jf>ûÅÀVEs¬ ’K«ˆar“³_ãF3ª’™òuŽtYÓ¿n„W¢¼Ó5{cD½»cêÌ“9(S1ff[˜‡Ü2·§H„WŽhÐí¬È]4ÿÉ;áYÍÂâÙ.Ê UÌìñ½4âJ( JÌÁïê?Îõ"¥ú„€Ù_·žy½B;TZR½þœoŸ%6¨©@>]3WÒà Ú8¼~h©áœêÌmÁÄ߾ͱàœ7£ësc%/×Ð7-èšÝ–4(‚ ù‘#7{èÙ*"•”ÆòŒê93Bá9Ñíùx‘Q¬õ§!æju×€/¡€Cþö4–ÏDl}Rg49õH¹­Ss¤ê¯JÀ¡"ÿ“¾ Á×ïAk Ç!J/ÇqbúLéôƹöâý¿÷÷_¦Û¼D®ûX5-àòÔ^|¶+¾‡«~øàw©â•êÉŒÙ}ÿR;áµOeo–у` +ï^ÍËïvJybZ©eå!l(CI&g·]Ë,^ü˜aeE˳™´•R H±ŸH!«Ml´{«V#Ciš´ƒÜL^úAŸ‡®!  ù <ËM;ÿy0lŽõåbÇJê*©°¤YÏ INf/@ õ·$Ï¥ÇþÝ{sẃþE}>Ñ Qøô1SÆ› ·¨/ÙC ¨_õ*:W£Zþu\*¾¾…†u±©KW V_Úwȱêb]þ˜dê`½Hc¯›HuFå¥m™Ít~«tþæ/ŽÈM]Àn‘Ž¡Ç¨Ú4’Ò%üÅ©Òi¡=¡nꪢkÊWk½Ý.~Vê[e§zI‹n‘^¬ž6hˆ;»J§ñW5K(¸ú ífé™Ñ[gCý¬À´hÔœfÎT®:öu$r~ aÓíÃcwUìÈnB:âÒ GñíUÖ×uùYTÕøƒárÛµòòtr\1fû»ÿ÷ù¨Î36ü¶ã»Í±7:ÆÑ—ïw¦šóÝÿÜÅÒ'1^Å‹î1Î9ÿÆSçùÀMSØÑì¸K(ºTÅðy¶ÚÕÖΆ-ØÍ»+€ÔQ%i»×¢—élìt·0!¿îc5Ä:÷Fi ÀÒ ?«”«ú6;^I×:â÷ª†¾ußi¦SbÐi%y”NK 3­w[ë¹—˜;%¹ Þ ˜£7MžÆ*Ö£6Ràû(&I/Žô=í“”»qÚÜ“ ÓH›Rí JéñPÔþ^T°KpͲ×aë£ïÛ¼æôyò‰Î¢÷i™@p‹§ª¿kCŠ«¶ñ¸߆ mÊ@'£ç„iº%Ö×½^¥.N°…ø;Ïurn“ûqK/˜(¼þÌè£Ì9Má 4²ª>ÎÕz=[ðáÉ,sÉ¿< ¼cïpš‹†Ô˜ ͺnn6ý¡Us¯ØÁ<á2$l¾\"ÀÄ?Œ¿úDE¤­ŠµB†ó5²¬$ðnÕxË\ÇQhñío©ÚSæ„cÃ1—®óñÉðêz!ÃÖtAkÒ«éæ%{’ ÐAZþ7E–ÈûÜŒüTŒ#«%Ëc×&§¸‡ØA=î¹gÇcä—…£¿ì^å<»ó´ÝsŠñ{èb<5*[÷¡¬$ˆ¾J ßõB^0F”ðj·‰ú$AÅÕÝhºpسˆ>LÁö~[0þ©j‰Ë[›ðÊ…i,çº^¡L[ž M{’¶²L’4´©ß M™UÅ1?¥¾*z¼…¡(=§)¾“Vpð&lͪ›»1o8ºHý”IÍèÚÅ4߸öÙîmv›<@Ù-JAÌ–\†î SØÖ7lø¹õ‡Úl^â .²Ã;^üÎuþâ΋Ìó00GŠ'-7Âp‹ŸøS½‚ÜNÅ)TØxqW]J£ ŠØ Ú”>u(¸ó†£÷ú’’N¹•ÑÃñ—¦¥ôvKôžÕòöÎñù`쀈ŽÈÁþoRôæ­ 8ïó Lo§ÜYf¼a; º=*˜Ï½ߟ·£ùÚâzº‚]<›*ì}uš}}ZsT”®Æž}™'\wr qQmÉìÈ㳪8›?AÖêB\ö´ÄtþR¿BiÒÅÍ*¸!z´½ Ù¿vïT .Í è]ºžýGF‡¸]áÖ†º,`“ȶćät6HjËf†\Ýô°iïO3>£ìÍ?=ÿ~¿ô–æ¼mô¨/ôuóLÝWÕÒôÃ’ Ü7%Õ“öšúO‹ç«DÉìsž¿´DüÜÑ…\žK½¹£êUÒÁ”fƒv}ù¹ãmÝݽùú‡Ôä%!—Ç[%¤FŒøa—>VÜ…¬ÐaE¤wãþ/åêÓÑBý«ñíÇz³çĤ¹—:Aá—Q¬ÌgÙ¿‚vÊž¦é¿ÌFnÑÍ!ËúîTé4ʨç*î=X`3ôùf'\Ú1Ì·Þ´agÄIÊÎZ••;HÐOw”<éµCòvSßÊÁž•T¿y??¨Õ’Xþê±&Ýj|L¤%‡áH÷˜ABá­û0ퟯÉ\xvM‘³RÍ?VŽ| |'hÜfW{bõŸçrô÷ãùfÚ!³öø'¢ŒÀ ¦PyÀ~Šå%<>$•Œl º ÆouDCïˆva‚<€û§nTœ|5Õ18¹Ù}8á d†Ÿ(Fm ÿM¦wxþì˜Ìôœ!IgGïN܈²¼„xÞO»Ø(ìò»?o^¦3Q,c2³#. éVÅ™%ëè“¿JŒô‰]5ßzˆW¸±>š?bMëÔðãmÖ/ȃàü ¢–%B|Æ™á‹È{h)4EâQö#V°”]Ÿ*]ÏÎcŠ’ Oë¬6ÀÂ~9ÅÞ!$Ä ¿G\vÄ«üñî¿öû|Šê~—-þ4Y°®' ܼ @óW²0‘> 3D%~Öó®ÑÎøÙ‹o¯8ÉZuŠ[nßFÓ ¯e¡G+nD_áÀSƒŸþýºg#~5I3_I°œ&Ätv”ù ÅGàT"lÆ«…M´ámPæÍ·µ=ž[mн•ÿ%d‰]¿ñd“r¯?¨c`Û˜t/ŠÕ á£î’À'™¯¤ëåÎÛ ¨M:' ³ì^òçoôqFNÉÀ¯~à±^Ný½Ù:€üû÷oÒ¼ÍÉÙèQãxÓ¶áÞåñr¬ÔíØà zÖ }É Wä œ‚-Hkw£×Åñ1Ÿ‹õ¥è ³ý #ºó–®ÿÙμÅÙÛÌ_µÝϤàoßÂßF0½ »ï£•¿¼°ÿ›ì§îò®\$•“ÿýDáf²Û’ ÔTâÎ’OÊuD3 7•uãô(-d‰m$ñÖq8º,z¯:жÕi#<éµy=[þѤœ5C, Ù¾öé)ïðNUú¯Œ‡ÿùNc?úo¯š÷Ìüýgر Lså`áä«J^¬´„ÞÖ ™¿‚“7ÛJ ÔP퟈Ò7¸ÎKQņLo°0S¹ÀgtG)æ4VYß÷ùj'¬À˜SL¸­Ý¯ìPè•îmÒÍR:êòˆ²Ë?Ê5Ë–VÇý•÷Ì[´¯jù7Ñ ²CŸÊp'7¹åÝ39K.ýï­G)Ÿª¡[ ëîÍ•[ôÌa!~:ðËö«Vd2‘1z$‰D܈@vÃX÷HšÖó<åâYxÀ»ÇÈäžGW"f˜ŠÙ`:lî*Xyb5T'rco0JÉ¥cü´2¨J• 0q<ÍkH1k¾b×à¤JÓÇ’1'ãk?»!µŸk¼øèìÝ«&N4''Ââì5Šr\Ÿ³Í€„®Êß¿2–Á&uÝl ¯[qáw"ºò ‘Š(}nÑϽįÖÄçÓhe=ìÛyà…>ž Ì<€¹»n0ñõO¬ öNå…mÎkÎ7&&ˆ4.–ñÕ£ ´Ç^Ó™Ñý;…÷ÞѾyÛGê:FùÕÆ#µZ”Ðx±y† JO©ñj\åR¤­Îؽ*TÕœ¶yã2eÉ!›rY8Í@Ü4ýŽË ·}gØèX¯»~øV‹î“l.fcg’ZX‰’÷SÏj’hï<OrOÀ›£µ^'hÏçl‹•@~‚}TlÌÏ”[ýâ¦6Ñ8YÅÐvÞrËÁË»0E¯Ê [qÈøÇ~è*wkéUžhÅYMïSÃW—îR Â$_‹÷kª£ª»Å¡cœ¸º‡Z3ûs5Ùm‚Ð_繤2ûƒÁK ùCÄÏÉæx˜Èþ[Ü›‹ÎÖi&¿ÀgpF½0V“Z¥铜Æ\ÈèY*žµ×A-ÿ ׂWö¥ì4Šb?âùÐvê“×\ dú´Ð èúúк÷2}L Ÿn1 cF0eöÏ»zMªDçAü\àÍC¥Á2þñ•À[7âtOZW©Ëx;ËÐWËÉÆ»SDüªjè=5)s¯åã[ÇÛùO,¥±Óóa»вÝç$ç'rÏ/æ™)q¢kü$£ :‰AŸLÇÍ!Zñü‡˜óKÓ\5¶¬×œX)>±øÒ‡P¾×쉎u7§Ó±È§YVYª¯@Ë.£`ÙófãŸÀ"z׫Øp“®cþLRðŽÔ fÍqîZâ›><ѧ"ÐÍÇdwK R/»$·¦ôº} Ç|†½Xßö íÐIj¯ô§y°ìóÏíròÿ”_¬ö9ù/Óá3ÕA.ȯX˜(+©5ûq7æg¸¢^Ì«¼çûŠV莗úÐy˜§‚³RÒ¼üZ(Lséxõ<Äûɖ;~ÿÄë+k®é´ð F`‚œÝ;{`æ'›Õþ9;;{ó¬Ì°+ù¡˜uÕŒó·‘æøÿ}ˆ(Z›Jk–ÖdŸ@G©’h:¸›êL¢—~‹È¿G]±´þN,FÝÖ'þqæÔ/O"xäš²þätpjK3xÉØ­ d¬Ÿü¹ð8ìe^Eɰb-ò܆õÇIÿ)™¿¡¾ï€öÇ×+òPE®ÛÌÛ°ìŠ>™Íw 'òú´ò:Vä†ÂKít/×™§d‘þFqoils­Jâ³ëeáØ¢&«ûM¥’[Û÷âïòjlê:þ‘¹O*@¤3]Áƒ'«ÎžÈ —¸'&¶ç3÷2Fd)’§éjv¯ïº°‘ùõ?XÐü´/MœîÏòÒÊTbs®ç˜î÷ ¯ ;aèf7a@M§òPƒÅŒãã‡âþœöɸQµÌò?…˧¼_8x !Vrñîªg½ÞP…´z |NZ¨›o'¡°}„”ƹúâÖwñï/k¦=­ˆ“èP™X ¡ÁCwuL6xÐä·f±u§y{°žd3)vÂÍ5 j(XHN—? »Ö7çK9óîÖÒ8@šÑå8Ĉä  EEõ#@¿¦l¶*.—¶KÂÚ©|Gç2Y<3€<âiØ)WV`Ø%´ æ ‚Š$sªY‡—ãfû¡Œ8[ã»ÇŒáX’Wº‘=~2 柛¸œwY¥v½Eí«].»Ž¦wÛÞîÞ‡ô²=oŠ/ê9^¾yƒsMu© Ä)ÚíIĈš;²5ÙŸ0’A7ÐxÞgýg3nýFÀQÝî`*‰½k>Hê­ñ)?ån]'D=çò’!—/·¦HdÖ(=öš?«8â|‹pPg§lJ<`9Ï_(gqkMgX&Ñ5ª¶;´‡…ñº/ÿ»¼²ÄËË;ÀŒ Z’Ãe»öš¯47‚îÞÛHA€È·DŤv9’Ï{üy¼½Ìhè7\£däÍôˆ§¶µŠ.ìßc×úb®U)Gµ¬ÝAíÕ{|Ü­Ëi{r\®l° :âÑÊšS-ö{Xÿ;*:]ªªáGôwÚl ‡…¿);OlØ­ßöQx„¥vîF®2R ‘5a±,Gܼ t±ÇtÒrNôÁ8°,››7¢öfŸío7ì•~IoÔ°3ü³ Büäýƒ}xáOü{ç7 &øï´*¶§µqtãpî'ÀÏË»Âx𞃜D 4fL"Qé 8k ™+…„ûíy€KqßÞѼ‹P4daA¹/«µ~å¸MÇ!¬–Ì£¸Q^ž°WÇsJ,K˜Þ(FDëªîÙg£k€ d:ƒ”oÙ%O¬w²¾,л·!ÿñT>~‘Ÿw&öFF–OD$Ò€{œ³0ˆÂ^j1òAL­#¨lë_÷2ýð³bÞúõïÞ\‚jÎáxP¯ÆízÈ+3á¹ÈuùºÓ0GžfàŸ·Ø´w¶ÃüþdG¬^¯0î]ÑAÄ‹léç^ª‡çÕ&–ÜÑ_hR!¶e‚ýü14&^gCK$ýG¼""Ðù3åuHëÙ›ŠèæWRVÚf óúK™µ°™’ÀðìaUùÅÝÆ!ôŠ+MÃ툪ädkMÔQ°Ø_³{³‚ÏîGS—›å¸K’¦­+÷'¶µ¯GŸ‘$’}:¨¬fKtÁ •“à l‚Ú£kÏ›c]ëìQëW·Rs~{MÔvŸi6(¬0«=þò‹«Ædc%!þj´=´7é±ÏCÛ’À*;Uè&­"öfíV€ÇùG°0T½‰¡pD½kÉÍ)EͱV‹¥½»×D0Ìaˆø\÷OšMj,’d‘÷t.Ï‘°t“äžÕbZzzÃ’MÇÏ)KÀæã£åm™H:ZâÛí–÷ÕDõcf2̾Ð)Ÿf¿X?¸ÔvfƒçÉ:ÿˋ• =t¦sã:_LŒúáT_¥|V‹H0NgÄ¢‰a¼É×±Ëռ̈ÀÓ3öê?ƒÓ ”¼ßó5G4f:MÒIÐÙVÑ‚´ÑxàŸ!pD“‘|î`ÊŤuÓh8æé~íÂ'ä½NÔXˆ*½phØÌ„kf¯Ý|¦èŒíƒäþ™=Œñ™S5N*Hÿ3¦ÌÌ­žÖ#ñO/žƒ.”@+®uTñ²Œ]RZÆ“ 7Õi–‹ïYsysu–vKuð_-nØõLµÊ¸Èä‹8ÉòÓ ÂÅäÚ7¤Æ‹‡ÝÉîP|5¨ÝŠÏëÓ† j2!l¯i|·ašjÒC×4nøè%4°¿JY‹_tÛÈÜÉT9¬s"‰,ÁòÎÀW…BÙJLe§‚^³SY݈C€QÛªU;WWò„„„ï£[ßG¿Vë‘TÙ’Œn™WpSê– ·¾¼wy7ì–©í’‡:q L«ƒkÐï4JJ.N(^0ù_}?Y _÷é}Ó׊ Üל9j)äø/¾‘ƒ¾ðÈê¨PSÆ¥^ŸsgÒmÑŽõ,!Ì_2¶­MZII)%P>™òýŸ’€ÓŠÌ€ÍçÔ†‚T‰ð.Í1ï€nŠbÞ ’=ÞÂpÔq·þ¯}êùzPÇÊÃäZÏиvÌÛm[áãq5£߃› $îÔ+áê" =®ú_¶EÚ^üä*åàS Päú,‡OcÝo¿]Ó-FÓNkg¦®¢Î—B+ á@C(N·‡74.;ÐX²¬ZS~ÁCö=(º”ñG4<žfáXol \yŸµ~¡<­M†0–zòîXT‘¢r\ÕPÝ”/îЬ²˜å»8 ê î`ƒß¹ŠnÌEMšû÷š¶c‰/‚’xm;¹sª¯f ‹mŒš÷6²#—;¢×W9Œ£Dþ@†(j;Ã^O64œöt2:¡¤øøµ‚.ÿ]MÿâÅÐ(ágÐÀ/µ/þ½Ýòæ~ÏEÀT!GòC¹­®oì˜Éˆ¡G(ÃÆßçÄhÝø‹¦Ø¤j:Ü´\Ëa¤Úù›ižÆŒ߃FG¼yD%Î2¤ýø‡/M)¾ ÜZð³[x[À€u%Îi´ÜñJ.59¦¶Vœv ¸A&™V,•ØØûôêûU½Ö~ŽL²ÉÛÌçÿ(Q,@‘É'z=ý>œ™=‘?'ÔµîËoü†Â‘CÇft{φû'§þý¹?{ü„À4ïýuà«[†F§ßoIÐyîÊrdH÷»–`ý×Ë-®¥©vŠ-(«Ô{Zªq¾A³JEm=]¯= ‹{Úy¼Ø8Lв…3ä]÷ U§ŸÙÑÜÊÆë™â±Syx¬Bœ*§í_ÙBDˆ‚/[Ùœ"/þ8Û!ׯ`C7©ÖTýgH“µ“C R’~»2ÌË&E»ÏV¯°óýFm—_ »PH|ae8ôÓ¸è±íå[° ¢€ú…ËÅ9Íy_¦ü³š|Â3¼¬€.v¿£æüÞn¦w;‰Fe0…FýT”Kt›É^2ÊþÎáü AüÞÞ+óÛ¼”o}~}ýz«ÍÍÔºõ#q7'¯Ñ‚g}g#[Ü$§CÞ½{×øu}Ý-ilkk;04Äl×Ë ‘q_Øq†ÆR¡GˆÀ¹cÀ^°a#㲫*³<á|êM§«æH;1(ŸëséN#á÷E(½B‘%ë)pÛÙ7¢fÜz¶yW6ÎRÚ†µúAÄŠÕ–UŸ°Õ‘ÝÚagý˨7é~©Ӥn*þÝ 1 Ôq¯“(ðʇ%h¿âÞ” :¨šJÛ{/b‡€Q¨%5\¿‚«~¤hažw‘øšys±jjn¸>::º1ô­­ê{a!EàØÄüúÒ ü¡‡ñ Yß¾ý‘\Gç±GmGÜ¡¿4duÙ,5©&dªèl;cå'sž›6 ÙlÔ.`UÎIÅ5ö¤?ñ—ë>5ì’õzܨq<¬‹§+?5º- ®EøÛú§~ ÝêòõížöãÊn_ZØÝô6“—Êú3Ç#!"Ý€HÖÎYSÇÛ#ü™ü%%@ )OÅ«6Y¯~¸ÖSB~I8ZÒ¨‹ëèwÁÙ¢çxyþ¥ìû?˨ªª*kkkD2·áÀ·—ØÝÝÝïØiâ¸Ë^ÿ»UáìÂ{'—;hú;‚Ô¸•R†„b ö­Ó„sÿÑÈJÞÚëˆâÊy<Ñcô‡Ñ/w„ÿ—©Š›:ë=g¿É¨ŽÅÙŠóœÓœ@‹+X—ãU'>þLÈ|“nÖ< „"ª67Ú;áe ÔºœÃ©e§X¢‰7³†IìÉL„Ä"ù¨Y¶ú#@ʯÿ}G œ 5—ʲ{‹cöÍÐÉbÎwÐÄXU•u™bôz»ëùFÈå[Žýï×ê9fš¢@T fšžôõ{SµËB[ÝxJ±MÁôÆd ØÕ Éç;4.–Nx¿‘ñþ¤î†òÌñ¼Âf}: ƒb@1î1¬ú…GüàÄ€ùóÛ0KB )ÿo+Ò¯BjXÎ+c _¦ŒT$\T㎡›àG «ù“Œ4ëS>ôE ©·"¡X´øgàçÿR~_V-¿›8îòwtqŽBzÚžÓK7½Ïi³^óLäQ)`<73iÏ:`Zûäô×# vS¼7e)±"»µËŽ8¼ØC®µ¾õbE}È&d@¨§ž#énwºm~·´ò±s zõZ_Mö#w£T`ßÂL#ðSz‡-}£Ÿ…—Ô"Û‘ÉÉL=ž°(²Àc÷~—Sª ŸŒþTH·µù&ÊÖr HÊêî*äšOlyBT€ºgˆÄ2i­#.›? бût¤jgÎ9ïæ(ÀÛ`û‘ Lue¾èõˆî'Ö9yv+5ÎÝW$_ÍÄBøÅ¥ŒŽ;ví¡®ümQ[Û(ÜÉé;oïÅq¿5Â]‰¤{Ë·ÔN¡ZÙììC"+ 0;€]Ê– ÁÖ”ëï'+~Ÿ~]‰bôeûÌèƒsÐðÛ3.AýëôƒÞKìÆÙŸÞ¬«ª#_£òV$û0RbuÎßµnL·þ›«cyF/ âÅÒjJ ¹’ŽÕ8|« é» ÇÆ¡aÚѼÑ} Îð.m2‡QÓ#‡"Êè̇ӒðËøÿ·óªž½.~ñz4ÎÖiTKK+Õ‹ê{Q•Õ¸F`›Ë}M^8ÅO1l…[î§«S¶\4mÕíT®!ÌFú%}8yíòàEèg}G¦FA ë†%ÂÊ9W"5u²jauØëŠ@#ãꨅ¶Z—åöóå¾›ãWFÕ;|Æ|•Ïá!¶‘gGO Zꋙ⮇=àO•Mí€zÇÝÒ_$ÝYãôÔÔTÌ}¾7í¬Iu™Üžo7ÿ'}Šæ£ì#™þü•ÓàªX¢è݈õv[o~}IHû[Í Ïzòü±ÙtžÀrfê š¯i¸­Éeëô#Ï¥!êTÏn¿¤¼Íj šg ²}±›€´<úßNó÷1íïésßÁªÅ­ê°xá—˜ö ^¦šX‹+vÄP§äx¬Òb)‚{êLJ:ÐßeænNï’[¨˜‡#u-¿u»×ì×pÕ–—óŒåÔÿè>™ìÑ{•ø÷ ¥9‹îᨎ1}Àb8µž ȧåoO8ô—¢Ÿ˜-« Ë#•î%·Mü³¢ý"GZD­hòLì%Ïö¸m.{ù##Ïân,XÑ µ£îBˆ2Zg´°»Hÿô©¾ƒÔ-ŸEèOK~w j¥2V+ X#M7 ÆYR LX^åÌðÓÐfÝ#ÛŸêP…µ¦'•p«j_–ªÒ‹„âA°Jìiý]–ŰÈDÅÒÏðí#,HŸdø¸¯ÌõÅÐG©sxôp¤¾h[õ‰u‚è] ìÚd‚×(÷Glq‘¬•¹½Ê½ßüñðH xÙf?~mUÁˆ¬2Ï®ªÕ²¢é0õÛ)ë¤+þ-ríÛ¨‚DÖkˆ³š['}¤ÿ¥Í„ã'*¥2EÈŠjæs›%í 9j½ÈBûç¥Ìɨ„»dI)*V>À^¦ÂH…¤žÀF£si÷ù0CQ²ì`ÞCÄy°Û^@ç®ü,„ìì­iŠ…§}ëÎøÈÉ™œeC+²êg.rfÛÁõ£r!\wÈŽÆ ]Ü¡aM˜(ÇÇl@€wÿyª{´S½j¢”Åi§@mÁ‘#t³^Ì×<£ô€kÙJQÄ›Œ§zþ ö°jêÒy¶ßï(„´ÜÃ_à§w˜¹ÂM©¬ªÊnÊ¥_]]ý^\,磛º-°ÂJ½o%ËüýçOY?¿†ï»OÝÖùÀöI¢Ë‚ñ¸‚¸ÏÙ²éï…糪Ìi´p~¸çŒ‹õÅIÉãÙLxy»ªhPýî9É#o Bórjä?¹‘LήV†÷í-߿ܽɹÁ’ݾ¾ù”Zp5Cl>Õ’ËŸ!m%ßævé’b\'­U}¾ÊœÑs/¨,Eg4˜#‘(NxxYó¸‹O¼2÷C:sX¿¦å±‰8óü' dÕ¡&–Ë¿<<<^)%ßäEÓÓG~ŠÃ•%Õö“®çef5ñryÜȺÁzƲf"?3d>xƒ—…ºÜ&£çc¶×æ|? ïû ×銺<&„—zvO¸JI>@îeV%|C¿·¤C ú>ò0N\Ëü\¤Ú{ýÞˆ£™4Œh³PÙ· S~&_êt†ÏkƒþÒ/'šøØ‘æmú©SŸžÀuJ´AI²(´õ†tX°ŒËŒ‡ðN$?ä»¶ŒEk¸g”À€7ÝËsZm¸Ld‘¼$F#½PïÓ»±ZÒqçåW‘}VQ« ±Æ$ÂÒ{8ÚI/ììèDEs¾ÿŽðñIÍ5äN"8Ï./'?XÉ å|kz¼9ô­à~^Óš¯ü€pŒ\_¯ÛC§£sXo3æœ$éÃ$V?•2E~DŸ~2ževí(µ{* ›Lp|'µðÅ¢¿]…%KKàv§NkíáŽÏu$¾zæÏsj ¦R«ëW@ Ò¨!dµ¹HwMé@˜qm§YG´ 2у·s¸뾋ÕÚòsÓ*’ŒyeÕÛž÷Þjõ¾*دw®Œ þn#ÏN¿Šø¹4HZa_Õ > ¢æÌvš<‚_i&Ì(ÂëáäQ"üúל.ÏÇ ›â‹ŠŠ¬~Î hpœ­¿]ÿâv§A£b¾ Š@íU øMbê§^Ù~6Mê0n#Ðϲ¨ c‚“ÏRÿÒ: ¼Òè½<êÁ=ÿ†Ÿƒ@rŽf¢Òöu*Å¥+ï#îÖÂfï"^î.õ_ö$M6o";vwJlòΕ6L„¯^öâˆe’E½Þ|Û{§4“nBÑʘwó1!ÖDűR˜[ël‹‡Ém±«§¦Ÿ†Œ:þ!³KÓ‚¬Ùû'sÜ«Æa¤ ¥yºy‘ÌH@W ɵpupíîföL'GÚ'c}JN~¯P{ŠÍKl6nè5{âèTüm—ˆÇýO¤ŠÊèoÒ‡ë`2ÝÛcD°PÉFïb†Uñk)¥Cà!ÒZ-ŽÃðx’ž;Ü|*s˜ôÕE"X'©·œŒ©€2Ë ‹åÚÀÌ÷ƒq@LŒ­0w·ÕÖŠ w r/¸>¯m@pœ ý!o’q8æú¯ÖòÛò“÷аú£®S彯P ¯/ân“>›y³r¾2•i´½5ýZÉ—\ßÿö§ú^­XÈbeu¤u_wK(î߇‡¯ÝCÊ’Úûûû2™<ëáR  Í¡Hbl¼œ²”Tø…Rù²΀ r=#2Ï&¹?Câª.AEt“¾šfNÿ¹Ñ8@²„Íᘄn€×¨\[+5|Lø¡û…ûºˆÓî\ÃfÍ‚ë]çÉ"ú.±öj¤tõ‰$Ùà2Tíq?·Q£Zóö*Jƒ!ÕFU”HTlÀëÕ¨¯‘ÔßdÄb òï‚~ü»‡SVsØ|ø¥H§ø±ÕÊM]IFàB§(¦Øäí|ÔÎG·Çúº•RdÞ,¼É‚ãûB2Q¤lòý_96¿D»W»·™ýäÎQAÅãÿ¢-n “Ìe8©(“ÇQ ß^&ß©ßúQ˜ÓÈ!Yÿ @°FðÐ ‹©¸ó³àÁ\ü© KJÕŒíÜ a¨;Òî¶×‘c15w¿õ]ý…«%F].‡WYW jt’©W#¿§[+i‰–ÿt}Tɲ0ߑތ>¨.UMÀ$ä'ú-žÎ”ÔO¹v *®t*eN™÷v,›*7Æ2€Ï¹3WíT›åÏ&:#©“Pƒt3š³•Ÿ "9Gª þë¹SÙIhÑë;TœÇÃr¥žr¥ 8ªjµ ôsúßCuI'¬zPüÊqá]ä€à¿ErPiÀÚäs]Ý{ÌñÐ¥ƒÚÜÞ¡¤¢YtÀLÏ“ƒ4„4R…ø;eYîƒBŽ²É¿ï„Ž ‘Wsà¾Üéz0؆»A#Aûý'ñ4}üãyªÏz¦ µ.à¿Õbm8#ßõOµ%tÅ|Œüþa/´ŸÖ;ÅJü›jÇ“®£Ï¶ª EÒ¶ÓÜ%dÚðë_ÒÏ¿Öß!¤9WÚ£žeBJ9¯f¢í’ÓÍãÜÒ#]ë¦þ;$ÅJLZºô©ï->2êvQH<€Ž¹ `ÎteŸêóþ—öàü÷Óêêjȹ¯¹­åR0ÊnL—¾ͼ•]2F cÊÌþD2º«MìÂp˜BD]ïߌõÅ“É剓ÔMUœˆDü²wšö­éÞëânÞ«ÓD]Ëðß^n£ xž± BfœžÙÿß @¼>TÑåÓÓ™W‡…]^…îcö‚!¹(Šj®Ÿ¾Ü º”B–%sß-©ÅÖA"„Ž|IÅŠ[Ÿˆ9Ñ[«øÝ8Õ:Ó[éÉÂöÉÍï}CGr>¡Bã”?c9¾p«Ù÷šçCŒQ_MÂpÇ^_)…õŹ99X(*Æõ7/;ZÐq¦Ö”§qkþ©ì6hîߢª}êïû²}C ´ß‘ºJxÄ$ê+HüÅ™ÓÞOœÅî½°þ²AAéèœìü‡‘êÏ"6 Ä'—,½GðÏE8_j +Û>b^™*dýVø¥×‚~téïôt79¤Ë Ãh&dæàffýÄ~U=9F¼ö¢ÁÀ¢Ýòd‡áæCÛçUÅBXTËv²MÌ3•¸°Ó¥e"ÎÇg-v%'¿N&ÿ>§€Êêêú$,ÁI%†þš âûbèŸ!à...Ê”tðñÈwvÅc67ec¥0ª7D¢EøQmôFOë‘a+ÃÑ$–½T#O91Dýsó¼@uZ˜x.dtª}/M1ηÁ¼èÏM»ðúŠôµÀþg8táK°Êä”Îêý WäD̦îikÑþçÑd‚/=¤É<Ðr²U:ÑS1ZÛ€%rm9|3)4P«´ýÙít¹¾:5Å/Ùõp`E[[îQÎd÷HÜ8¿ÕµRËZqE±q¾Äx,=Û@¶-ùA­ «Æ?8ÏwµŒ÷Œo“S)XUþ­¼§·€€‹°t’߈Õù[ªjêì7î¨w§QƒƒÏ+ ¥?ÁŒÞÌ÷¨h¯ GÂ)®vô‚&•_¤øM¾·oJÂz]*“y÷ÈÒ¸o }l¾Û,ðºíÛÍû•1`l ây/…þ£ƒ ñþ¶'d†Sí°EyõXC#ÐIÆwåÃOJÛ}¤ò—›û”i¿® É¿jüõ8ÞY¹XßÒþ‡T\#Ã}§´ªÊß7>ƒ‚Ï¥WŽÕG)[ÔÌNËzxYv¿|ÕamõÊY¶l$kV/ÆÛßðÉ·LâAd3Õ^âÜ3#?”=ÒO¶wkÿ1tàoH»ówÏÒ]R‡¡äØX|Ï©³QC/MÝ7É«Åp¤Í ¤ž•¼øKïH8åoé<:õ¡K r\« ™ãKÃkmíí¬O!ÀÌGüßuL_žˆ}æ5 ½? H¶ý”æ—îµ&¬•ïw.dè±ä‹íéQ|¤§J©˜\Ѻ·ª£6Ÿ“æì[þuøSÆCl~f{Tuoá \oòŽ5ÆïùEÿm—VIz|Ô×7Ú†c¸OÁâ)T³¹¼èÞ>¼ -v˦©4R…¹qZŽ…¼nó¿ÿ’%ÝsÊÆ§WaâÎYýÐoÞÓþ"¹=Ã/U¿= (ŽZS…¥S‚õ[N ¨‹¶˜Qéó¾ï¯¶˜>Ð…úŸR(•îhm^åô¢e!Dͪ“ne$o³ç(û»Èüî¿~5<ÿ¡eÞUûKÅæÍ©Û«S3ýoI|ûé/Â`¿„»^ÏPíR§!ó§‰mHóì †{N: Øë…«µ’ŸŠÔ•¤È‡3³Kͳ%/êóýŸ9÷^»X*"„>%&fçæ>;>ûY__É P[L<Á%%³ñ7ˆìƒ:`½Ö³Ö¯ÉyÙ8P›nþ2Q¶?úáÖ·23H³¦rfd]ñÝòrƦéÖ ÂVað±êîEù 3Ùnb_ÿôáKÈk1uýQ>4ÒùÑ+s+«ô k=¹¬ÒÒ\oÇÙýü^è=}ûUå#ó÷š± ›¥ìoQD3á2M»/NÖ·WkNŽFkT‡îö—·`1—í}ÿãaÿx>‚󵉅l®º¶Ô U;Ïç¼ì¼<<ôÕ/`#B&$™x–ÔØë’õŸ±’ŸçÜó›ë˜*0~t~QváÆs'×1Z2S êFŽ“ÿZÇÙ±Æ]`S½(Е´¤…;SºåL¾¸{F~ñîž¿¡iÑ¢ú¡èbꪋXÁƒá^tïtûσFvÜw“~‘£‚ïIŽ?½„6j`]ÿ;>Êÿ!´æŠÜ ¨rZ <«‘{ƒ6ÿ8y·±—=µ«Ê›Ì€ëu©BÎ&Å0u 2ì;±‘÷¾ŒËñóå(ËëçBå®êûˆáöš}ÞòžËêRË=‹øy™lÀwÿl‚5§Ö/?W®Ÿ.;iÃÍÊúûF|÷N÷¤@¬h[ptÉä­ NsrzžÍGÝ@`w-är€G£DȺUmò¶ 7À¥´uWõ>\­Ës‘&G;§2,ð¹Ôt¾NZ¹ù#„ mÕô Öù¹’ïì®Â¾ôQŠÿ\›Ì¤¾S8JF%*†6|-‚ñ­º>¦r(òOn§ÂRýÕZú§=ulZ™Œ:‰6 £% YKÜ*)_v¸ÐÌ?ȳՓQs­ýG$÷Ë×)ÿÉÂK¾„»,C?5‡vØã3µà­Âê5e¡Pÿð ÅéÅä;Îyo5í>Û›"Ý=õ2»Ÿ*2ƒEK[^é‡ Ó/°pÔÔÕƒe™Mçé[y6§¬\è‹ûÿ51bºñ^jmŽš>n‘8ÁC>f±¤)ÅÄÇbÅ6Œ9™R#È4µ´sŠŠ”w©#lï‘ Óij¨ ~†X¼§ ]›FKË:ðÒFVU„ ƒülX¯³{“£^M7µW*ï-§.>ù¦î×,„Ws~3^ka³CÊW¯  ZsX“õÿ–CdÍÞÝö\Söžç_Âðñe¥Ô‰q^bþ¯eš@óö«€å•¬ÌöŽÝÀVW}Óà+‘—¦Ü¡ ‹9¸Kvj0ò×Qû‰÷à•ƒíÕ’éû=¤gÛKÞ©(—?ñíÒÆÆûÞ÷­Gt¨ó«X jȬÂæñ†ïSÀµË„‘yL^öêb„â5N…åõ)úõpÕ¥Öcô¯Ÿ@3bPÅ|ëû*;êìuéø¸î·ædk†TþrO"—xûêy¾byO„…ÅÝ¥ò(ï,©N]€Φ"¹yø8#«ž L2¾_ jú·ç3=§zT®|~A_LÂÿ» ¸$Ã|m>Ö_Ò®žK.„ÝO0H,:-÷hF Kw$Iy09ÊFW´y5ÿŸü U‹ÔctLêk©`HëÙúCÓã;Ý1i9|akfûê‡ç¤Û‘®Eàæ¤Póò£  cwÉaÑ"_4`ûÍÙÌñÃrÿaÈ|à*å$N ɼ.ña2¹)[kTËÚÆ±: {oP†©–_ºÞÝ5mˆã£7ëÈ:ùl÷Ë3Éüì“%O¹iЕ!œµ#RÎ?È)a\Rngýý:žù¹‰ô¨°Ÿ#þc“wã"¬;X7ØÎ¡@ÌvX¡YS[e¨¼þzpÅÜn—;Õ9–˜i”bPp[¾èì凿~Z˜’®ªs}yo¾ºªó“ÿœè\@ƒŒ©oËYAƒæËö÷²`Œ‰¹“ºÇ…‹ɉ¡¡O"ñ«=¿=™7ùfûl”Ρ9P²¨×ÕIÕý=²<-ŸÔ<9øæÛ;)Ú©ö½–n¯Ôyû¦.¯9©À{¡ltÒ'ׇö»X ºÜ0ë ÛŒ—¸ ¶VѳûÖi?jü(ÆC«Ô±£~÷&6¶ŽªXwku•0)Æ)½ábÖ †ô«ërõᆭ,»¼|ÇOyÃ<ýîaû›²JG’Ü]RˆúáÿŶÜŒ­äç·kø ÈÁ*»‰ -±¾¿Ú/r5šÐß<ÊñÌ©º²:Ý’<°¦¸ÞÓ̇âx[<»ô·P•÷õðÄ7suP¬×%‡oQÍæoæ¸û …µF¼Õ…ÝëJ-E=²¯áNÛßÕ·§[õÛóK$$¬ö¾‘Zv.ŸQ9¼ì:Ÿ^ønµ=Dv£¤|¨ãàÀõ9-,Z.Áðýž ³Œš|Åu6† S¼g:ì6õ‹§Â\rjà²A "K7ªûæIúˆO[š2 !ô{× Õ²ãÓcIlqšc–ëÿ™øcg<¶2¸—8-Uë’Œœ¢Ó7aÅvŒ²ÔÅà #¹ž(g}ã×¥¼ò‹Ðç-⇓B:=;™¡|*î„ѹ¤Åã› z¾ü¥~®³ÉˆsýÐU473èWÛǾ=ÄÁ%}ÃÌ 7èŠ övz•†OÉ›ü"PxÒ°‡8RÛ7k×ÏeÒö"ªŠò“q!ûÝXû ÝýgŒ7年z4í./€H¶?ó[ò£sÜÏÖ¤ñ)å'Ë!ÿè=kClòô”UÚS\ÜMءك«’fø™^öÛYn´ L,Œ¡…ž//žMZv”’½õ;ɵyc6†ÀÁf—êùzùpQÕœô¿ˆ=ÎÇçËd{였màD¾Ó2þa! ŒòcQ¥–®O¿ã‡Éœ“°EniUÿ8t¿ìÕ‚µ6<ܨsmy–½÷ÿ1õ—qQmïÿ8<ÃÐÝ! Ò!Ý%"(- H‡t‹JIIKŠtwÇ( HƒÒÝÝ]3÷ÞžÏ÷ÿèy©‡½W\×;ÖºÖÚ,#Rh­Ëå[=ýÏmw¥_Ô»¥úrx‹¥Úx"~àxÇ¥\®&žº•Ûtï\®e ÝIzp‰~líÃôï}ih¨¶’ÕûT×ÄOLxì)üþ¯Ò‡î£Q­rfXt«KeןӇ[æ¿yûúöËøï‰ÕÛyfÙ‰ ¡˜ŒhÍË–‚ w?BHl¤‡µN¬ýp ÝAÚç½µzGA'èaµfñÞ»×^Ž•åoÜžïÅ‹µðó,E¾[¦\Ö8ï³ýêÃë[Wº™¿+^\RBë^¼ŽGú¡5[ê_@[h¦”‰‰[¢ûµÿ¨¢+ëî» ~û™Z¬4a‡ŸI܆#ssŸ“’È÷¦ªÀùÔÔpþ²Ì°aÆŸË~±}^Z688XXRRÓß××G³IFFVXT$—Ìc¬ilõõë°Š®¼H·Â²2¥Çù‘6_Ïw»ƒäÐê{œÖØ}'žJ9âŸ`@=´úLÓݬ¡LÈŽëø“À¯^nðÒ/ÊTÅ¥“³–!4ö¨½3-]hKDÆÆˆ ĦògÕOºÎ݈ZGÔM¡-Ìx]ꢮ;‚k·|ØR]ï•¡áþp|ù®ÇÒF­Ã2èœ_ü´I ÝÏ›ÓÚicƒ9‹÷È~›Ç结–ƒ_…ô[<¸u+L¢ÔÓ„Í;?áÕ/5(~{ ôé`¾Å² Ããçs‰ý×ô—óÔ-Íœ>ç;ç=i¥|/ õö P_¹M[}xm!s)a( ¾ó#FB{ŽX†4y¡î¬Ø³9¶1a-¨"jù}™ùŸ½PŠñ€¯-brœƒo7+5ë(è±ýFòžèè茸ÓÚPÖ#…Œrm~Ü-% Ì0ß÷&Õ× —¾ªÃ.Ñ-ûÙ—ÈYåsn[jPƒn7Qúãæ|wŸw¸[ÕÎŽs¢Ü8²În’cŸ)Óçl+xÞc¯Í÷òI–´å傯eEÛÅÏßÃ(cÏùq2³g=Öx½]Òï!&‚ˆ/Âï!ÁHqÌž Ÿ5aB3‘ØYñ}c¶%—qtÔ®ûÞ›³J‘§lÛge¯&:/·z]‰v2,¹6„³¥•:z5_W¼}®üŽ­`Ž)²þC[R‡~rrœY<ÓËÙº1ÍÌÌTÚO p™¶Ó€²Îòÿ”È©·’æÔþ”»þuxÏêÕAËá0ÚË÷—‹žãzºº3?‚ü/¦1n÷èñ%dÏög)ðððʹ D]íöNÒ± ô€ ú:ó‚·]¥Né“)Ü%Õ°¨íVqúù”¢ûád¤}<ÚÝg†ùÂxj£xÔ/FR3“¯ŠéoÝ–;éðæ9¸,ûꕤL2ê2¸wŸ£8*†äR×åå´Sǽs/c¨<J)éŇ/¾Å ÈD9`² ‰±ýeÊs!hb”w_ 3›¥Ëar© ¼ˆö’óÙF,@¡.2ÅÒorÙ—ä„çE»[²Ùß2S«MÄ$2Æ–°@ôÜÚÚ"Œæ ê’`ü‚KŽ„Ç\,`Ÿ@è÷^¦¹g®Éí8 y‡áÔvN>QaJ_¯¦ˆÞµêRª_…ÜmX  d7<Æïud†ûà1f:ž¼‚Bfö×óÉ/?E)nQrg ?rï­yNº…]%d  ¾^è0š}Eõ„'ÒoÖTn­1“9kYÜÖ¾8û}ð"SñôÍ›¼ŠW—¹Xÿ"÷Ñ'¸ x%}ûTdP Jô$ã1· ³‹½é«£N‚È‘ùgnn‚ƒi¡Þ§P¾OÛý]ø{Ìzc)^c6{Ø0¿b5‹»Ø:š¢`Ø­ Ôin'ˆ;¬û‘5ÿñòYàÌ#¤=Ü›É~Ó¦ÿ•UúmÖðoSEùÅž_cöÐ M=£š ÷¨Þ;îR$K>Œóœ %ƒTá9àšà{¶ªô/»s@xÒÎÌÎò[Ñ´Þ씤Zヷú£ˆIùÉÜIøª‹DCöÏã³ÝI‚:_®h© }÷¿/¶Æò"ßYÊÂ91!¹iÍjAž3âÆ2m-ÐÞÛ§l„ ™ë—ägÏÛxà—?ô¼xð{Cçž™Þ &p¿]"_º%Ũý²ïÞá‰E¨eb‚??Cd…ÇýZ/öîX(áá$/˜>½Dûûû^§ƒ"Çcj¼Ëãz¦JZD¨Œáwààr~zÓŸd>SûPR¢WK!.+álS•æ”mûúæLÕÝR/œp8öjH¯¨ îJöi¸8ßÈÊ.ÄkÄÉÅòõšO–Ý£Òö[]Ïûoÿ4 ö#À=L€¨ÿÑ41ÉÄ9Ö¨AfPþ¹—¤Ð ûK0Iªèb,Wº¯6eá¦~Di"Nø³,9a€œ»Ø§ DÞ.~ÏÏGWø„û#Œˆ™Ï~Šïì`~¶^'ï~óî9ä7}±=ÄôÜ„ú® Õ׃н/øìr¸ûSPÀ/,úå½²û.òêÝÑ òìW¯b‰WÚ`Šº ÍØlÅÿÆ$)&v0¸ 2}°yÛ¯˜êçÔK(†dð^dÁ æÔzŒÉD"(…í)Ÿ|¦ †ÂÐe'Ý»KС(-Ï' BÃ.¹Oî±ýœZjkPŒò£?BÊ=~^øÑïÈ›ÞoŒ¿kníõý##Wô Ι„ªßñÎñÉ¢Tg–ø°$›p’Iñv¨¾;2£äý·‡KÁæ-²„4ê£S­W~³euõÐÒÍb[ú£!Ó]AïG8ßâÙSiÞÉçsf“îµ.O”ûüvòËŒx§}®ôYÿ¯7›=. µ .*³Í7K؉æøò¬|fV-“Ó—.ò³L‰—æŸØ³¿b%>d7Çæ% egGÜ."9 ÍU¦ÛËʸ „¨r„×|¸\ú• ©sR«Á¯/..*™0eyu´L)æúðõ§›Ÿä(Û ]cŒÂÚë¶Så_ÂŽ$ôõ<‚žÏ?ô¥¥üôe ¾lu0O…6Ièý:¶P è4A®‘ºÀc Íæm*„âG©ßµÓ’BØÍÁÍfÌ÷ ˜ÜÜÜ^©Ö|3ýŽ»)Ì[ñ=ö¦‚±²ØH-,-íGÅcO¿+gmmmö?ˆýÁÉ«æÜàZ‡å[b–¼]å]íSæùEßûŽºŽØUí:£ÛY/Nî¦Å6ïìÒ ›úÅz3aœ¿¹ÿ@d;ø3Á¦í+à2Èëa¯í¼ä‘ÑQ¢z ïïùèSnÙÊf›ƒÊ1tßõxO='Ëý޼3"‰„Jx@fÒ Á‡Â(ÂNèÂö|1Ó=3upÏEè±—³4 0V² °'Ñ4áô÷[Ê¢ˆ«Õ¼u-+X :Ý9 Ÿº"`*d¯…ÆÁË-ËÁØßmÛ w+ðò*v%þÉËÊ߀(Sál×'UAG>ã¤î¶cÞU4G°²ÿ×þ— Ê/".ô+Íä¦ÊQå•ÐFxe7ñM‘ºD½˜bf¹Ã ¯\©+A 7R¡^mP/Í: fÿ m¬Fò Ë`Ô;à mÊ¿¹½Ø÷$Îñ^ͰŤ±g÷Õñ*ÀÁ”碿Q=€(% †ký0´GiÏ„QÎZŠL…·LB‡Øy…E—FdžcßÚ. ™a@IÎ;2âP^Ù”\ Œ„|–'Îx¿¢Ÿ¤ðá ‹îÜ$¦|ã;ƒ ø˜£':ð‹§­€¢5oùB²³ÇܜÃð%G$¥dµ®6­;÷~Zýa$<ºÞ,ʆ[gAû“aêêæ¾É¦èx>¯öX¤ðƒ¤Q²°ÈØ4·Ä›1xßJV-»ðÁq„…\:¢ ò¥ãž7朞oI¹¨¤Ä}òá$^' ùŠ=–&,³f'}k¯,@äfˆæÎVïSgäý¥% ¬€–ñ»»ÃÍCœƒÀ0¾vÜ^à u’~i·"øMЯ_-¯]ݰäi„Ç1+¯€—lÄ2*½7aâ¥ð„©ô 9$=僛J¼•Ûè.¤n›DíU|Ù,(™â¾yå @ÈyMJ·(ÅßÙ4E«?øÃUŽTæts¸Çÿr^/á' ^†EKÏÞbÐÈZÈØc™­«.…È<“ªw"˜­1çŽßü'j: µ·úJ;޾îkè„bªtšÌ=÷ú`ÚÞÒWЮݛÆu‰bƯäïSt_þúÅÀÿ÷ÿÏkyû“¸;÷£Iñq?‚÷íÖ"½(ÂKëŒÞ“f¤ÆzÊ„(èÑ;ä.v+Rúè eÃåÑ|Svu5ñ÷'Q?Ñ(Œ–®âqⲦŸ:ÿ€x.?ýµ&E¾ôÍÆµ‰âkCùä«ZÎb‰1d —xùñ"XoñíÿyèîÉWOs>l»\)*È”o…7„Žãˆžk›­©,u‘;Îÿ¼;RómI¥Þ ¶qx¾ÛyÁ!Bã ‡¦ˆº0ýŠ¢\-dúÀlÓYÿM ¢2À©Æz«Ê¨ÕK "g&'&°œð(e!A]lÿOç @}°§|@?„Çæ,-c¦óZ\þ’̹öÒˆB™ñTøË¥’Š †”!´¿?­rü§!ôwÍL_žæ-¦½úYGDÚUåÓéiW«ÝÊ>>Ê%۹ॣ…«áȹ½«¬—wu¿³I4 \õþ(E’?ò=¡‚°ç‰Ä©Àn’ÕØÿA–¢ËÑp ‚ÄsÞ°¹´õœ<œÁñè¿bD>Ê žxÒI3€ªsØŽ3û}€“³³7Ž™ßûä5@W…(bÏ8É5—'À> r§VØé­Õ];sRsŸ# ÒF—ÅG|t#îÄ—ÀgÓøEe¬b:,tÏl'ÑІ>a…VÜ7Ì ,[öe¢ÖÜ-4`‘F›Cdÿd³ýÉ«6B‘]éˆW€þïv<`ñCé(;®°7œÊÊa ¡(2÷ø¬páö…Ï y¾¦ –B8ŽÒóM ó=hb+o\Áƒ =ù!Ï›a>ø›ŒÜàÏ=ÏãïÂ)ú.ëí ‚²ê«[ 6Óh•+ 8¼6{ÏöÓò÷–Ưv#SS”õœ yO žFHã‘|¶FVecD¢NI€=&>X^›´ÙðËŠÚíÑï¬ê_?à𶞟ã±Á°QE¹ƒJΟ†3ê^¥F²p¯¾ÖÕHÕ3 'ÔÊÿ„=Ë¿%vš¯ii.`”÷Ðø{"#°Íþ²›­(ºùº¾å[ûElP3`O“å÷Ë(¬¨è¹ÞÌŠQãm#•ò9ûœuÀˆ.xçmpkŠû@«íJ†Âúº•+è7~!‘=JŠ9$›r”iø§oÁnš!î®Y^ˆÍû)w½¥>NõåÅëÂrÂŒù¬náp„¹æc@ÒÇ}-.æH÷\ðnÜ).ÃE’qu<´a“î8»€âÊÇ«>T—¾@Qqk@jóÉÆó`õÊA‚Ó1vJ1aêä=f00‹ØÒ[gz[® G‚ßþpŸi˜TD/=€­©Ö(2}¸)|ÐXû:q¯³Qe—«åÐÕOÔÑÈûÃÀÌËæ¿f_SP† [Äöüë«f§h1Úo5/8)CüU8«T"cž^Äî¥Ów:Ñ-W˜tßjÞ¸5®ùÐ1ÆAÅpd©öÎT–® õë”8÷=*XBÜ*3ÅõÞ^5ããÒ;b—³¨=*.nm‘#ÖÑÙ‹§þtVåÈóôÑcqqq>Ë_¸4.]D÷õàGšÐ‡e!±í•0L›RŸ¡8{òh 8sÑ…ŒÖ‚ú‚ú'3Úžž‘lÿ‹4`Úùp;ágÛøßmir7?>\MNL¥¾)Ó‡d:`ó¼g\\ì²:ðº€#yFÈçl6eÒôÖÁ¡Û2Fês´(JGë&ýlýàä³@Öš»“idëÚŸ«·—†^|Ã!ÞÓáþ¢7$áo9Si³ÝP²Peâ8ÿo º 2Äœs' Éw§š±‹=Y g º¿èß=BãŸoIóÕâ2Áå2DŸsÁ¨ÜÌ4÷]ÏÍËC#:#D' ûJ烹¿ïð¹QoÝk•ôdÛóe-ªçÌ0À 'Ò›~ äÞ j²Ò<‹‹WáŠ!ÌèÿÆ€p!àÖÆsÎÅk¿nòDÜÑ€Êq ïK´Ru_l÷¦ÍdpUí€gx~½Õ¹Û5µÒ,‰M´Ÿo&»œs#ˆßa—<TéZ¥8±{‹{¹ß$‹N…R.=jh-ÑC,%ðôJïl3åGrØÝÞOâûàw7#Ý#:Z°oHš‚ÿ± *‘@¸"JÇíüáÑ*=rjŽKÃæóüd޼§¯–ö¦þÊ€ÂF }.1ˆk[f{–úR¤î»Îçãz«HžÃw+:2¯¹:˜)c­dƒè#¹ ¦–áttÇP iÊ ªa´G÷ÛØíÛ3E™,ZYÂéiØÕe1Rï¨ôúÜVñ5‘AÛƒ››sà/ÐäÛ‘¢r Ä€óû¥pB2ç{ضy\ã>Àÿù®¥½=Hk0Çb"õ¹@ulþ=àê}ᄂ,# hŠ<,}‹KÂú ìæ2¬Ç…°íù«ÊxBÂwúˆ1Åù4EÃ>8ùjM)¡ `RÁ^Ó —#4ÿxIÛ·àK7,­0Ý—Vú í>’7»®î7µ“ÊÙAÔ/CÕ¤I­ƒ ƒÉã臬·7"-Œi³ír¡“%Ùè½Sǽ°“åA…ó¢¿Õ«Çoˆ3ðŒ1žKOûùÝr%w@b$-èBg:¢Ì;?-ƒ:‰»aî½ã|3´Rº`#tÜý ÜÈ ´|Gþu >—+;ÒŠï&ødF ê:šÄ0R.(ÿûŸšä”¶axs+œöP^nwKöúîšyø±ˆdª¶Pº..&¤%¤-ÈøýGC9G¯"ý\<ÄLù^©ûíûwf^ˉ ¤˜óéà;N™÷fáO‚“MPè¼ ^›•müÛcy8åÍ;Ï2%©ÈÞãáV5Ùúâš~“϶}O&>áá}»³cëùú¯`Ýû25$Ǽ>6‹‚ÏNËUx3»¨y}Ù¡p‹¸]ÂøëÞ…Ž'?û‘"çþ³ ¶ë{̸2Æ•>ΊÝ'Öo"ÒŒ=~ÏÆ¢¾Hh=Å?Z àÚeaî Wóuáü‹}ÿÎ ]eVÛ]Æþ¥ªÔ,êýk1ä@ –ê`|I#ÒQÈj¬¾ÝÄ*N+ÓÜüÅÓ’í°¢X«þõ{½ðcL&û$.ƒ÷á$làÊíï~/ß=¨ä]eу8_\ÿO‚kÿW ›jõ³Ÿ2“®w¤WW‡GÓnXÎ ÿñØÐžõ¢™jŸ—,/÷°zówâ+ÿŸ™WÙåø…ÍïøéÏÏe­ø ¬5Nå8+\‡E!7ñM’pŸ¬ŸkŸ‡à¼×j{+ÌÉ%Óþ š?mrL ÑÃw.à]š4Ú­l+ÚÈo~E¾K˜–Y9çíÌcJ:äfΔ×AÓæÑi’¦¬¬,8¦®‡þ™ ~܃!­ýbtô†ðY'Øa»]þ9‰kqñ€,<–qc5Å2¨Ü¸ó¢øˆwÉ)se&}Ë^5NþóŒ­çbÝœò™ïQd“M’ h0†o‘!šžF릈!œ³Z3 þ¿wž…™âuìV÷oÀ³ ˆ ‘‡>g˜³dï{¿Ö× Ïùzíœ,¢æO~*u§»GÎ 7ŠËéšàëÓàîHèHm³#…è¨Ù–¦ÙŸ› üÏ.lÔ»$ƇÆIž!ÑUÜgâdÆ©6QE‹nœKüÁ/1ñs…¡½Mì}f§28€:ÏQŠL8WÅg‰RV[* ú©dÚAw€põGœN¶®Û³÷8ážø`óRtJt—ÁI8Yï‡Ñ—´/Ì­9åÂC9lÚïˆS{üZ?5­JÑgëühycõjõío,³_KÈ{§%Šˆ4B”†ÞcÁÛló“Ï„D„Î燢ÎdcÓîÞð\ nMèì9È¡j³ýøŒ‰S/Ç|NtËÜéiºåÊýùl©ûb»|¦ïØ? òö-–_i0lï÷Å4ÛÑ7lüNÀF^Û,fÏÌÖ˜Ú™Û«%á³%åóàr{:4KåñdÅÅMlˆÖ3%MmƒZýÏQ|Ö*¨ ëÒa н)okAÁ¥†[îÂëb¦~æV°µ[ÁýWŸi%È|8ÅÇü`ä‚ Q`×=~™MÄ·ºYCK1äéeqFõæ¨~![ÿ*ô">T_.*ߣQÈöwâZNiK£r˜úñÛ‹`ÊÿHä·Ÿâ{,,Œ.=ÁšÒ2åﱤðqhg@ù· 5ínùȖß*ÉõÂnn­Ç«Á mÁY÷­ëÖßÛZµ÷ÞdÄx»ŠxúØk¯ª‡Ïö/»ßùø¤Áyž %{9$øÙRÁ‡€‹a¸„6jeÎ".ñí¿†"‚T,™ ‰—h…FÎP;-8 ©“>¦¥¥m<Ÿ0tùÍ’œ]Tôèè˜õŸgýá¬ÈÑ7yfð®jº)OS7æ:2N u½diÂÐÀ;fç."x0ÆW¹Œ!‰_ó°L¿±VÁnþž5Ï=™;ÂZO.:ÿ³ÑZëï÷+d Îh84r!ïÞcQªýÝ|µtz›Ì ï80ÉYl“ a¨·œ–¶Jô¾›ßyÙdØÛÙ9Üzüs×›r$ü2^¢·úWKcP­/С,õ@Æ]S‹äÊù[¥GY*][ݺ+o+TJ¨¿OÖ7ª£¥.Qyšºì·ŸáRBZÏ“®›Ü'ï¢f'&>Í:¶ 5’¯`Ä(ü”XJ+IÞÊJŸâ£" KÉ,ßSÜ?¼ ÷µ8»Yí…Ç_S/Æ3ä=¯½žü·“ë͈ƒ0æ A“&¾xŸð:{¼{&· À!’™èý_ç+¶‰8_ÎËb¼Uõù‹*‰峉õÖ‹|Ó ì«U@½^™ÌìºÕí½íö—G½h‚hY3Y¾¯`T[Ú%™><ÐyŸå LØôo«þwÁO°/‰o6 lm䎞¹¯Ü;W‹*ʃö[Çg€G4lpÄóku²V"=úvažòñý 4”ýî¼Böñƒz=EÆ£ðëÍ´~#:?BGüÙïwšZ–#S˜Ÿ)ã:\ÊÕ7“7Õzå÷¼3KA=hm*§59ë›0Xõñ•ðCD¸Ñ¿’NMä1öÍݦQ_¯QXõP£é B¿ÛýJ)ŸÇˆ£PÔöGZ:dGpX>_y λÂÖ/*)ž¼[‹‹ÏN‘“?/ÂØµ˜mÜx`VÑP6¸šôý\±-©@©±JõE[ ¹¸ð0òݯk¼;é˜@g¨™Ì«;á½Z$`ØÏŒºZ$o]Jæ†Æfô£ åø¼ïEÇf#RÝÊ(¹³ü·°º›…GwóUèêG,ãˆxÿã0 Ú‚ÌZR\Æ“t17g€ÆWo%÷të6n.ð±ü [ãT ÃÒv[~ÞS ¨ 0°>‚NÊ'[9†nk¼„Âçb/¼¹Y¬ ±›,¿pqwz¬ÞIpkñ70 +Iœiii£££ ÓÏÏgµŸ®F“ðØ“ÕÒ"·!¢¨E,VEéwH ÛOTwL™i“pÞ¯ƒë襶l{¢¾Ç±,Exðw=qkùë3Õ”Û°Ô¾Àôžû£HÍéS-,÷ö ÷úåa%jä±¥öÓ‰ú‘’¬O>áÓª>ˆ‰•ÿO!.k"ÿdå¬D‰üôøî<ân}eùÐç{–$‡„0²›ïM©äÕRˆ÷uµ„czyó7F €Þ›C†¥0€<>\3}ñ"øþr‘Þÿö¢ÛÄwÿÌÍÙvˆ´ÿMv¾¬‡õÞÖü«ÝÑù¤©XñAÆYYÖ+·?×x .(‘]/lïtÒé{g…^¿B›jóõ|–%M«Lï_û}n˜«aÒ%¥P±Mµ¶CåÙµ§¿Rýÿˆ2DQŠÎ9…1i=5šò©Ôeö~uÿOva‡™¿ãÙ,Z½ƒctLðšsþ£L(‚¸5]úDádíiRg·¤€64Qç €Jž„‰„m5G‡HSþÛóÛ ¤ñݫښoñœr${8ÛàÔó §ÒìJ+ÀSúµ6/äô2Û—¾…ÌZ%‰²ó½‰h*x"] ÷Ë%»H¶fêJ\©‚²R‘|I(…w±y;5½cW׋ŽÃ4Èe KKµQU &ê­†MC  7÷ÕóP¹ÅV1{=ì$Ú™èh~K0ÈO2N»¦iv©jËÑÏž¹Û³–¥#fË @tù ¸#—p³=å>iÜéQÄ®F-æ³¢xƒ>àÊ\®t×ê/O îÕx…êî•€ô5*ÚWW«K=3ÖYþà‘(³a©Ë3Ò“j³ ­t‡ÎïĶíG ¾šëa¹¦ŽXïëì+öTo~;1®E òGüŸ‘ ׃˜dËõ]BŽ4ÎCr’¬‰µÆ~ü_îwÁHú~Uù‹ÏOo}ךYÇè«’+Íà?S˜F.h±¡)áNp6åßN¨ÇÌÛ«e‚À”?¤–?_ïÏÔyëžìÙ@†Åþþ¾yËëšIxŠu:Q=Û’¨¯Ðß,Äsè|³{§–†ÔGæhQù¦&ã|Áû«·éçë5ªK‘7š·ê^ÿ쿌ˆÀÖó…èº#)@¤)÷D]ËÙ9)O*à›$° n<†þbòS0¸ž Þl9£6K«x´Ø’÷+O‡‚ ÈØG ½.Lïû$ñÓT¾_–À Ü&­~æÃþË po=QèDëI§­-ö, \] ¼!7k2Q‡°ô@iÀÜV®‚æö¸‡¾ç7[V馆pMqwŽ«Œ—:û«øá†þÇ*ì-ãYãÜPoCH\ ˜ÒÁÿÊI!dH„Hx ½bûÕÏÖJ¹×½—‹1n€Òl˜÷0\Z‘!†4ÂR¤Z®º‘Y(Ê´hsÞÖW+H8Œ +á‘V¥ÕàpœõŒÝÉ‘„666ði묨ÍL_|jÇ®Rƒ>Ç9ÑÉ7í×·‹Á0|ÿcm‘“Ÿ•æÖ§{5!´yyhà2W¼†ôvñŸó„„‘Çêìeu'{þ‡Ó®£ó#Ûþ˜þ›ü“´†åþÒMVâ]“`ƒÔ „ûÃ0#Ó!Å™âö(eud>Œ<¢¬ï>Ѓ:goºpHz¼fC4Z|»JwYÂä‚Öw¸é+IEϹ€Ûý ‡=ÇæmÖ³qNÉPL J![ÒÌ@„w©q yàÝ*½” jÈë~r³“×fw^f«¿Fæzqd® G‚ð,$®Š#mÉʱ(¸³2ç¹èÿÒe‡%¨íC™êÝCÉÓËãž) B…‰¡Ý”ÃNYxs˜Ñ‹.S5ÌœÇ#“e ׳N¡ûOF ¯ov+"b©­ÌζFõ[<–,3œß?JÒ¨ e=Íi`ÓùvÿzÚ=]yÒ—^šfX)Ù~w¢6ЫèRìä3Ž\Êç N¦g¬I>ýãk9ãüÉ hÐÛ/^±wn&ªñ¢-xcLYg™õ4ãÒ‰'‚y 3[þX;9 lXñöÁ;cOɱ·¼§Á—ñ¦OàÖÔaÕÖÌÈgG§çï™·÷¨d ÿ-|c¦öQ˜@"–Úû?¾Gì7˜·È’RÞNâr>ùÙŒ¬ä-\]$UÙ--v¿ g …à¯îŠ0¡Wh툻L)j@Q( h«½*ë(%Oz™E·²CN€I„¿-€6Ìë66ºÐïê[|ìÝ:oà¼B½$šY2Ñ|X~þ!k`úÆ»cºA²[Áqo*,“hÀ º­w]p’œ%”“ÿ×ìˆ&·No…#¯^ýôf'– —Vœ´ÆjÛ¯4ÃÅÄ»»UÃó!ñ•sð躑Ý#†zÇÁéۃ^:¯%¨лFàUÀ¯ÍI(ßÎî.¸Cçw³]à8Ngà¿›:s‰7Гzh`~×o>á}ü„®¢`Ðñ9ÅQ’ Z Àó’M"()tâœÙÒŒ/kLëèƒôŠ…VgJÁ(üÐËj˜îTüÛÏ÷€š&bz¥†Ó÷ÓHßðƒÍà 8ÚÐ?=aDÌGîtIŸq©PüΈø,šê›4M£¾¿_&¸¦½L±Œþ$á”Ë;%OÔÕÕhNúbŽNúyÁM2ÑÍt7Âß–]€95;2T+H},{™…DmnGò¶‡¿(Ç%o^¢êI‘X¹ˆ¸þë?Zõ‘eÊ`¹|ƒ!EZë'§܉V. ‚ɤط@ýŠ2Ò.,‹âøúõ+ßÛ±‡s^«QÞO¯;ŽŸ, ŠFFËá¼àƒ¨ ÁØ8Þh雯B8àÊó“¨ëv!<9ïÀjÇ#ÀE™ë¤<~ûr!ÉÛ~Á}˜ ÞÎ}U=_åb:ñq?'›PQ˜x}Û-ç¨:ØvÄegÎ@Ü_|ëмß蟲Œ[ºl¹Î²”ß‹v¶˜Ä Ÿ+ù­^)úÅÀõ¸bv©QqA¦‡ÕP:Õ•¾qs õçyOzͽþ?ô>˜”⤽“xŸp©Þƒez?ޣ蠀΂ˆI³™Ú·6öö]°HN¾ÆÀDqÓ=3›öò¦- ÜÜànÃxŽŸõLýÉ(c3Zø®À÷Û°Ó›¯¾“¶å‘¼Q]I‡Þ§÷Yo UçsÚþ…Ú¹´‚ªü7ëÿN}ÛâÛÙ£U\dI7öT¿ÊBiÉÒ̱ö|•CZ;»ËÎ’ Ñ3NÌÅ]‚´ž©áÈg?U¹„ñ0"¢ÝÿÖâ`y铵·Rƒ¦HlšÀÖ¦f€ßAH1?xA¬3ØÏÛñ¹¤¢ýA¸¢<»Í”ô†SùÚ¢,•_,_›ÌŸ‚õä&÷êb rkÀª·°„2#ªz¥Ð¦ôõ8ŠÐÑ™™ˆ¬û=ëF€ºF‰Ðã&šg<  #ßP š¨(%ȽzvÚ$òŸ¥¾+u¿+ÇàÈæŠêïT‹¡t1Q®Þ¹ó‡‘ä©ý¦ª÷‹UîÉ_:´˜¶iQ€ö Yðú^1;¹nQ#1¾çÅš9©·G Tñ¦Íëq“¢)µúåÂ!qjàã7!‘?ÜûAÌH2i˜Ÿ|†× KS_韟ÇS$ìô´Q¥²íçlòïÙô#Z Ê»å-øà~9H Ú¤·8Êk‰àVà(z¾ÇHGÌ·`ˆO虦î®Sðâ¿Kyo¶§ï¶ø%S*d;0àú´W) üòöˆxù®i/e˜NÅÓÊ”ü]ïÅDjœx•é±9“ SV þˆ]Šð“Ér0¯!`i ? Ï¸ 빎ªJ}í²ÜuAõ™lúµAÞ°–}ÊŒEpÅ¢ã~ßé…†„â'@Œªñ4¡‚õ¬ÃÈžR §WMšà؇½7?2[š÷ n÷ZDëÕüa€u–¯CRò£íÒ=n²Xÿ¬óæ´ ûUi™ Ò¨Õõ˜ÉÓo‡›Lÿ<‡ib`rŸúeùˆ?ç³[Ö¸WÝ?’*!ÿ,Òz/\yØHQ 'éÎ(•¶:Ζïv'ð@„º»>uT=†áhÑÔÛ‚Œ£«ÕK ‰¶;ÍV A¿+Ãj¬Ð„zÃ5ß2+iz¿£çàhÞûÙ ÌÍã–Ô¬R aCŠ`¬AÅô/’ ô\Ùö&›ÿš("ôq_~Ôüñc"í¦G~€¤ä·@¥49¼§¸†¸q[-}ÙÈ}_¬“eZÃÚÈv–iå=O6o¥"X³ Ößò¿éK€'%¼{±ÎĨ?ø©æ»CüV„8Ÿëëƒ[a\ؤ‰/÷ÆplÆEÅnóá¨I}€£àÛ¹ÉãÝáüØÊìMx]e»á¾viµpª}‚ ¡ ¸œ%/?[Å ü¯÷‡­`-­èvnü ÚP¥' )ÛU2÷o—Ö?&r“h N”áä#yŒ›A„¹ºì@F-´ùbbÊ=|ÄËÛ£.2ÿ£«# x¯?ÛRÊ,à¢$‰×ÕÁÕx¡«¿ÖÛy—X¢¢¢ ­ÝM\u&ÚåÄV oö=‰5±œdÔS±„­‰0J ,JÇÄŠ€Œ±¶/q¸FŹŽl=ê¬w˜E¡?|D Aâ4õ3ºÃ`Ahˆ.£>¶<ß\YB‫Nz‹åŸÁrØoÑðžÁ AëÖÝ÷ß[çæÖÎZO]/£i%œ' ¬ÍïoÎ!wXV% â­;<œzûbÿü~«ª7–ú=­Ü‹ÑÃ6G$^ €aƒ@ä>| ú;襖²E¤üa%N¬–ç·üµÆ²ÞQÜ7· äÛ˜Ê5Æ€úà“hÔ/‹-nª‰ÐzÎx=R*Ãø‹/HAÔxôþ ¬ „H"N³‚ç1Ƥ©S¤$6)hâ0‘Fî:·ˆ‹Y'—‹iëïyyÝ,ínDZçð7ò‰Áp„Z‹ÊÞ©ƒöŠL†:ìm „I/…1¬²° o6$‡Ùg¯ »ðIÓ@Z¶L/&rdàÅ„d±­ìJâm¬*A›g.…*™<;ã·9ì±%ÚP4"¹ÏhÐÄ?Ž—åLJ¹TÅA¨9¨òq r¯4›?|‰O½FLQ।>ÛH÷J¸¼”ô޶+Bµª¨¹˜y0ׯS“Ÿ!ãš{¦ùµÉ—/Ñ­Á»Éu‚"‹„þçÖ=dí®Ü˜dó¹‰/žÍ¢‰OcX&´eËí±3+ü›B1ï¾3.ú LZ©W÷u1tRÀðNÍAÍ8íh!IócîA1¾~ß‘G==-höo7ï&¹¤ÖÞ‘Q¾$Á(Šó×@byó]×c›ªÞƾ~òèO¾º¸z¡’&ÀÄÜæ Õ{ Ÿ•„þn…Fª1Söªî'âþ6Ͼ¶WÉïO³Müh·>U%›%ýõ·^9 X%LÄü¤°ýâþV¶àù +žž5$˽õ<éÆŽ×°÷tc°Ÿ¨ÿÆÙ#ãzÛÜ#“|Ú37åª+³)³Y€·øªŠ±â;úu“n¬Ê#rHØ;‹•ù©ë/Óʼn b_O–+48Îóùß¼KyÆZT…MJ¨Ñ¬[ŽMö媖• Ÿ„¾1‚Að HÍê×OÏ)Ø6=W?ÙHP ©J à¡I_+þ!mmmåó½°ç2¨Fmoo/.÷_Ei\â¹zžK[ŒhjrÛdÎêö ù»…ÒÔ64ãh(<ž$Ží™<ùIª" ‹Î4RÅ B¸Ý¥ÝÞºðH4q ³M‹!|eee$_zo¾Eϧ´X§û~²üï r„-+ÌÜÄöääägº˜ŸçÑ[½Š¸xÃ*” ’çGvãúuØ#o'ÕxÛæé»_”ÚØô麄¾æƒ˜`í43–ì"îN5"Ó Õ6¯ÝÍy5o M†¦6ÝÕ³ó,Þ×Õ “6 k~m,’ز¶fÐ ¶i2ˆ‰‰OÁ2é³îÆuê¶? XÕ55ü3[~â4úßÖŸy· tÜ£?vä’JØv@Y4º¿¿¯l#nâ1{lúb™¡ÅØgE˜ôu)dª{L¨,Zoñ<|2øUHÇØ³ŸÜ¥ú­—WØBÞÖìƒf`â~fË…pyø¬#²Nw¹îç’81¸ý¹Í®#:éˤæt îÝN5lÍÆò.,ônœÙ§½V|áÑ›7×êM"å{ñ7w}±G¹ö®§ ¢¡‚—ϼ™¥wùûµ³38èMnÖçä,“U.Ìš%ä•i^;aƒÈ¯B9ƒ¿ ÚåFTÇÇÇ6å'x‚VHò¢æÜΓ3Rdù·o;å-ÖÃt !ˆ˜¬ò8Xœ@ù±jjý6Äi›RÖ¤Š{Zy¾#¯6®xa´NyºÜuºñ5U›ïnJ##Ôa¶þ~Ò@“ª/ceE±¿ƒSZö©:šÏ9Ê—øqÃ×õ¾©:;НBvù 9kæIü—ýo OŸ®´Ê0#é¹ò‘±Ä,ªf³õ[‹â‹wÛo8œW>«‰s99ñóæ™+H nÚþ¯À}2CØá+G †þW,3ˬIþ9§§Ž!uIRÌÕÐ L´Ç&·­TiÂ_ì{ÒæR×Lö>Ýøf=œÙè²úéÌ+CJã6T%ÈK‹cVÂzÅ¡[ôäÛ«:ÛnÕró~òìWB.í2ÖÝ¿‡ ÂÂ'bÙ¡ÊÍî»ù3_‹ŠrvY¹ÕëXh_™eÛÜjʵ ©³’|§ÈÍ͕ٜÞKzuzÚl;<&t=e¸K©é‹‘€¨à)Ã^¢„Ó¦åìUäÔ^ä‰û%7÷áÙö õzûú¾<èïǹZ‚™Í‹gÛ¼(úö®Î–¬Ò,ØgW§Â„VÂó@ñIÓS±ù‚³C‚³-èÝ9El&b¸ÂÛ7„C±“”ÉíççWiÑ­øäIqýF8IÄ=™Nþ硜 þbN½r³¿…/7~ÃÈÍ;£+˜¾¡DE…Îw–,7ˆ ؼ^ý ºqU×׿|Îc©ˆs<ä¾÷¿½ø¦ž&¤nxø9A$d¶AÏaQ¡ë#æÓCTMó€Eæ_Ñ´‘³ N›ÍÓ —ºA¡Y¾~nÈ#eµI Ž8ÁL)=â™1wÙ\Rfú5«hG_×Ùã>§÷´ýýû7%Ô9ß¿Ç];k¦y¹´ýqæZXPI•ÎÐ@fLÅ1+ƒè]jÚaâSJÌ4˜üH«+Q§üàžÙ%Ð>ýJp;åMíÓ ¯>ä/ê•¡N=.ÆÓK 23ÐdöN›”’2,+àKG§¹ÚùØâx3VâúDMv0R<â êìݹwÆxÃßÉæ õÓÃffÏ륧.®ïìoÄ`AÁ&.´¶Æ"²[žR  N×Ùng O¿ô8&Ž‚…EΙþ°4JáÔàîÑ“(ÇE]벊Ä€­_Zó»:*GC4$¡·‡512.LÉûÇG£Ê3ë¬OÐO»Âá²:Ôâ];?prèkâ2q¿oRŽ¡‹úûW;­calãþxxVünxì5@€Û¯L ˜Âg4;Ó§hÿqK/4—€ÓíÇ{€\«9uä‹_ň<Õ"0DôÄÐW<íGJBfë¡yjjxëš×hWËî>§ƒ"DddyCk­ŸŸ˜­(VuxÞ´ydfZômÄÈ4? Ñ &ãÔ…k}¼øÖ¥8¾öœC›PùËß›ýØ””°í?³gu×Þ}ˆ«ÍSq3ZC‰€ØÉª ôIâ¢(1Ì8tq©xÛ =4 Þ^1xÿ@I¹¿?þñdûêx ëf¹=Àÿ4U)'ô.4 úŒÕìÌÆ}Âv±]*ÿyF1ؾhz û à·ÓgTÔ°ež ëw=Ñ´ü.+Š:_ùa~‰yéOôSD‰r’*Úo°)xMNwí§» ¿R@ô>ÌÖ7XÉ:ÊèÙQ2Æ #ö—ßr¡ ÿ‹Ebf?"{ø˜= 4åW±õÊ¥¨&Èî¾ð)ø–6p䜋G \Áöö6¸¾ ž8{lçÐÉÁG4iJ¡÷E¯œ ÈZÕ§Ð_kq:::p©Bµ©S+¡E« k ñHËÞ``6äŸ|è°›”T%.º0ñìe?Ss;0ˆ‰µUúÂIÙ!\Æ;жaáá?ÚýoKMn/çÚ‡f¸ j»B£€.„¿´Wk@Óç&üýòÈb×û®rŸÙýÈìµ^Iþ%Rwðãç[S?¨à•oŸôó,鍨XB.ãfí›Ã˜ŸƒS(Í&¸à=Ê>¢¡gÝðñ’¾IïÛý†Ñrc‰uœ¸Sþ´î© À× ¥WIoñ²f{:™]97]‹¼¼ÔrØ^s-ª6`µB ­Úþ·èû.*@©àÂ5küïüŽx×vžÍÍÒû¹ñ$×ê q5~מФ÷º¹Z¦¢7 jzã®®–ébŽuý¿-r™ÌlPÖƒþp>‚Œsä›Fº”¯®Oi¾zpFp¹q^¨«~QyŸuâ¾3Y8vÓ°ôáîH‹U™€V6þT{ߌÍV>ëè¹;öO%š{aQî<Ù¿á¯êµ­ËÊš~—X*¥1èÖ²p¸¼$¥FíÃâ:»·Éæäx÷TŒCJËt•ðè <õÕÄŸm:%f&F‡Ú½èTTTaÑѿˆ˜OÜÕãÛnÎa{ÎÃIÈôa ÇíúOlà鼟³³†¹½b)ƒðIÓÈ$¤BhÐÚëYS;¾°‹´Á´ùbvòÂú5VàÁd—•.¬íª!‡&^r>ì•^U'œÝÓÈÜif|è»; ñÚ \ r AÐopéCþ–8>gzøuXÙš#Dß ÕÞߟéy­P —k†¥aGÃùblÛõ~C_çÚƼ‘é¦YYSשR±“¯¯»  à ó$gl±RoÓz¡£[¢ÛØb{Æñìk“€  -mÔ æîLuEéó]¶¡‰BF©„?W;œëv~'¿ÙŽV?ã]:ß‹”Óòyñ9#Ûx;PP‚F¿w/Ɉˆ~¬{Q¢DSæçêg?¿ éšqƒ] ž§Úý}3M­Ëî“Ýzã]kíŠÊš£LD s¡Ä>Ї0¸šm0)9[Ï‹¿z›ãÉÑG…«BýÓ3™7TŒ]åО <<|k®©†•‰@äÌŽ2—Ǻ¢uܳÒ-qŒ¶z»zQ¹ª2}FŸ ϽÞEd:69jfÀ³LH¶Q“+¥˜knŽ€`°S‡Î#F¶?õÜ#EñâvêYÒ÷qY³3LN»kˆ¹‰ß%6fÛ“exµÖGYR °ðR [K_ºcuåb”™D ;œ=ïvÌì´ý2×ïŒÎøß °³˜xxÝ€bÈí)6 ™j3”¼/PÌ(ñ‹–¾ýìôÀx~0M¶'ÂN7É×Ëe½/\yâNê´¡a1€š…tH.Edø"’ÂhÐ:«èt±Ðæër´$—6|·)42<ñí½˜Œuÿu aæ˜a_çËe† f,¿Àçÿ¦–„ïözya¥[…Z k{!åÇ^˜Äls¼gŒ„ä÷Ñ0@1rp`{.$ÒU8™º,,FÅP¾;ÌýU¦Øâ±(À’xB±|<ê WuA¢·C7›¤„»»›ßß:ÐÐÐÌ϶F#&¡SÍ:yÒŸíÏÀ³åvJ뜗úóÈP{«udNNnXÇgdùÙOÕ© TùÀåç+ð–ø€ûªV“u<›ÖöXc‡Ypoƒ½AÛŸo’ÀÔ 7¿û±7]“'#utN¦7ËmÂuAsæÄÏÁè›ðºœ÷ú‰fx¾®Æþ6Õó LÚåî>¸ÎÎ{3­óžÑÇÀCãâ—Ï·î/Ç›Fߜ ÉC~@bæø›2¾N#Ó;¬*æ¢ÑõÅ}b)¤§Ù„ÀŒ}- ñžA+»PS àKÁân6ÒTfÚ¨©Œ›·2𧤥é‘Ö®wô›ãÞP‹jy[ïSW=Ù`3ŠÌo©øïXËéVƒg}wÇÊë:L²öˆuØÕmwNv6CëÅŒ]Ä„~~o¯&zZÕ¹âÆ¢¢"ý&×7íYS2ˆ¦t™áߙԨ{©°Ø,¡Æc6*0'äó¿°ÄÝë5¶xpÆ{47jä£k='w¤ ÂXýõcà­#>¯„5OÊ&mλÜÛÇÍî°‹}Øáº¾¢ùŽŠV㫲†…—lT®4—‡°û[˜”/Jƒ#t{»oòìÃĈRøÙõ+Ç®0"vÍì ùŠO‚°(~F¶Ó à÷H¿ÀÛ‹Y§}éÛòÜ Ä±úMçAÈ݆¹Ûû1¿ÙÑþô† + 'ë½cÛ¥U&R¹Ï2?Ïbà3œ—5˜ñé'K²–›vDÓIù˜Ýœmó=Í|®“ÔˆÏÁоäÓZfZ±÷Ô|{,ˆˆè›‰|nÇ”>`7ÍÖUÝ3o`+™õÍîãMvcx ì/Pâ⇬SÍ{®Ùä*«pâþ<]4X!ÿþþ´u¨s“=¨®¢ê¯ºÙþŽœáÑ#™í`€7(b§óñ~u- Õ;¨P ãæååýLä ­Õ3íÎ0 $ãÇ ø$Ƨiû쥆ŸŸ¤¼¼|ll,ƒ”îz|(F4¦ÐôYÈ.¡-` |´á@]ÎÈçuï>*ý}B+P–†žó¥".ÑÙÉKku¾×½„J¦Àdé>¢b{ì˜Þh/_Tg7‰Øu»äôû㸿%0ÙÝjghÈÛ ß½*‚Z©"kkî„e@FMmw®‘Æ–å7¶³ûgܧFþÚRà‡ï¢ôUWO§#Ôž½„üXôúék!§è‰²¸ñf¡êíücÓö¿(Lý‚ÁM™é­8QarÔòDº¾7)Ïdùœoëý+.ŽàÝ‘/¾É£¹“0ïï/àà=dí”Ó2LTêÍ»§OÛ?ÙŸ©sÙ j™œê ·SìÎMæ%Zéò½ZˆC·ôÊ“Bvhð|ÕUbyU{Ÿ¾‘Ô.ÝPÑméèâЄ?òÊ‘ &m-©h¨ãÊ'yupÜË”änŠQýªVV7’|e35õH<.“‚~º¢äuwŒ!y0Â(D¦¢þñ‡ý§ß‹ô˜˜AÀïݱÆEÄÕvƒªluRpÈÆ.CIÕTU–T´G46ŠnWµ¶mÙð_OÿŒµª^Úzq+‚„€û.§‡{c‚W»u¨lënATã2ø9ØA‹‹ó¹<ˆ qºí‰Qº/äî ˆÊ³g]U–=š&RiY…†·çsˆé™ xOÖÀf];÷Õ‡¬Ú.o%ŽŽƒ«<(í&'$HÆ~dJùòy™uû”º®wÝŸ·,H«î Jùœi²õ´û[ô.š†_Ö¡¡B,AŒ[Š;êÓ¶¦k VPà)ü¬k¯Å=Ñ9tQ‰IËjÌ;Ñÿ–èÈh\Ð#ýDÖêíO{Ëjà¯D`(_¾^Ù ëUJ´òC\o†}þü÷õéb³ó¡R•ýÐÖÝ }*lð®pÙÙzxV`ßôÝí ʰ$ó+·^ÇóÝIeÀîøûµ^-î—KJAa 5ŽóÍH±†ÁÀçÞx(µ—†3 N’„wbzz}hÈUlgÖ‹6ßH.;.÷û(»PRÛÑŒœ²/—¢oF ™RõÀ“ õ«r|~Ç GÓÂ2½PR¤kïú½B·͸間 OãÓbš–Ž›.úÍBày¡©ÌzÞpºXˆ òîÔ4«ÁC)[*ív.ÿÎðV܆êÐöhé8øƒ¢­%ØŠnpÜa¶¾ûI·! .X ž?E¨71¡·Í–ÿ¶Ã¢pB_ûófcNŒEɤ4›ÁlV>¬a‚+r2ç6üÈç>Žygm¹”Cåˆnûs õ3©_וCö']wTŠ$µÑ¢(^,Í 11QTÛŒ2} ]=Yï³”º¤q¾â#|À!•`(ê£=½;[ûö; ÑÇ˶ùÀ­ÄUˆÜ!+Ž¿OÖ×»‡%Oq%Éæ¬=÷R"~‹>ú•¸÷ûû›¾¹ ±éY±X=ž‹wŒ„E Î+=ý³\ºù@ ïÀ@ƒ~3ÂK±ž_(ÿœ³n‚=6½™ÞTç_Åž±.õóo ×X¯?»~ÄIáWH¿g'åÐÆÄ£®½=?X€B ’UY>ÔŸ£™À‘Ý>†¨DÄ›îa2Ô4¨¸¶ sD½Ã¬öc–‰ìPû.:#/È“&Í1(¶oH½Tl{­âOÁQO‹Ø1P`Gï];$8ÛÇÁ¥ã‰N³-ÍÍ …Èžï½7ˆ€-"i竃ERŸ‘cÜ­'è±ÉdÂ9SesÉÈ!aaéS??â‘“RÌóä˜ÎÖáä_ïð÷Ýþ67v} D0;,ò;iÁbnAŸð”•/´!GÇÐI «á$ú~õñ ÓŃɅFFϵMQU¨Uؤ%¤Þ±°Ìaè”U2ÀÄô÷¹¿­;át8²lgK?``шeOôxî:ò|2x6¸úMÞ'W;½ò)ä+–4¢/ìüD¯SJ覟%Ñÿ1ƒD£M”ÁZ[×zÜ´T#UÛ•v'ú&EÝwþ2Ë  Mo Ä ë7³Àɹÿ©Z&WëáL¥žhÚãÕÕÂØF1{À{Îúˆ6$fàu8"wíþ~3ÈMŸÆ]M³Y †ÍHàaŽ‹/ü~¤Ãýñ~·iÎlÓ#Ó_÷úAôXéYlȤò]_¯w vÒÇÛˆzrÂÁÆØ^ÀĉÅv é€YìL´Îí±]0Â-yiùJÐÀó^<6ñ r·ßíg‹‚XFlP5³²…Çôg¯$Ï{鯾ÙûÍE+Ý‘ßÍ~¼÷èȤ…ä|/U%{c—.æÆ:)ˆ¨O¿Ö˜m/+»›X1°,3ƒ¯Bs…ÿͤì“'è ~§êŸaooo­âÑáîMAµKÙ¥H¡êÓ»ý €ÉÊð9¸Þ<Öó^à§™úCRPgÓM€ ùƒñ³s½‡ €/¥EO.¦jOrº„çÐÁée½,…Úp¹IÖ3–Ÿ¥òï•4sMn› ]æ2iÕ÷R{)”>¨É­›†ì‰kõ}…%.{ÿ2.># ÀrAÓÀ{´øß>ãÒ¥ŽtÙÿ²qrRI›XÞdËw{¢Ü!Û¤yâ_°æ»xú½s WÀ¼!ίïêû6ç¼6'¤ŽŽžßõr‡¶fîÔtÿ[8$ŠƒÖÙ’Æîdí)`ì„PðéP3M|Ø}žÙßWpš*G÷õËa»Š¶O0@13¯ÈkemÙ^ÀfëãcQ1“(¤¡‘m$&‚Â(U HjanõnÅô”:<&­W½Ãxè åiç­CÎÔµ,jß!d ,è èP|÷î1xÉ Æ#ê‰ úJ76ͺâ3Í–4¨©©é91c ·Q#a$oýÕý×/™ÑjÓÓ6vŒ}ý8ÅQh¸Ø(õ$ÆÜG2hÈAá_vÈCÉÓ +ö²tˆ×ëX3“ŠA‡²9Dª ÷¿(K–£UðÃP‚›üª¶i÷” x÷ã”õRl ô„¡ÞV·Í!æ´9áõúH¬s¦[Ó᯻ãÖ“™=CNÝÿ¡2†ÙãüoÇ**)-Þllõ|co‘ào§é´ì画ôÍÁ§†@ÜØL–gÌ/Ö<20¢Ôœï„-®[ nob(*ACЧɒÿ~[óÕx{ZÂGĤ”Pæ²9DÙaµÿ Þ(%SJFÈÕ½ñÇß•èí½¾Dέ±<«áLî{<ùïá©9ë‹‹¦¶ì},Æwo%Ÿ•âÔL/ª|2߃(Šø¸Ä-ÓÓ”æÂ«Fgµzúls³ ®Ë/â/ÉÎŽO{Çe"È´.nfœv¯:¸5&éÒcÞa¯]¸ÈXùËXÕ…bý·~ÊDë0]î>Hgª€Rì¥{9$}¸+œ¤Ê}WW) žþR@ rÖL–¶†Šþö ž0KA… ˆO@8¦ 4š_ž´õŒÒ"5g •oÿ°¦Ë"↋ª¦ë'Ú³NÝÄ:’Òü\ÑÿunóØð aÕ3í…I½*fÃtÙ&RÛßzñU…aÀ ÷j (8üÉWO‘öoVW@ž0÷ÛtÁâ±²¼¼²ã ØžKˆŠ3@¦ª•hÒY牕w£ù¼ÔÒŠKM½®¼Rˆ‘ÞÔQgˆJ—µ•E"r·öíW‰Ž®šgŠ}F-xàUVgÛÊÚ«4‚QrÖÏm³5‹¾©AnMí„Ó\Îwt .ˆPkËd‘¢íyÆúX0¦#5H´¦ÆOL³ º¶1AF¯Ü¨ê¶Nµ}ÓXÝ£¾y×À÷•Óðt òÜÚ齨£oάM-­ˆØezyŘ™:; p-MÄ Žªœ)ÞÇNW $Gm'¥?|øn$rŽÇ~ÿY ÄëHí àµ–™@j¥Ûæs vsóò¾öYåùó¤=þPÊHâÓˆ딨F)÷ååç¯,ýñèh—ƒ½q¥àÝÉ€ÆÝ.>ab"“´¿ŽüÇÚó a‡ ûÛà‰²¼P¦(öyÒ®îî¢xÌö«@´*[X0}~ò½VþB­||Zñž Þt¥kb¯®¼^[YÍÜûCß²£å=V+*bÏ·ùR¼xñâkí¯ }f×/Ž´Ñ~Þ.ÂS€Ô)Ü !–52Jϱ[(å§Ä=:=휪²tÆãoá Uš/ Û—b w Ë\JLÕ0'(ÓË% ((EˆIHòz8^ èW£‚e5ìcOk¬àƒm€¢hô9çèÔŠãKG«Á¯B)ü–Ÿj¿"ˆBÍo(à·@zª…˹:Ì5ŽLÞ\CÝw‹S>Ç[b@â.¦ ²Š¯ Ðpȸ¸žÅ"k†#ØXæîZê…öË~¿þ HŠBÇ­¿EZ[‹ ƒÈÎXªǬÜxíùÒz(ýÇñjÏ~€‰nPLL–XµH bŒÌN€ñ_Hçåæš-ý‹–ÓÒÊý¿Z€è¤…'>HE¾ýÏ4ú‘¯îc-»– BEõ(¸÷ÑîïûßÞ‡Õ`ÐbìçÏÜP&Œ•íGѾSœ€Š[ ¸-óÁj gTø´tu¼ÚÛÛ«é .##“ÀkJçââ̺ßÔåþÙÅÁ|俼ÉfÈ~«EFâj1=SVÛŽ¤WÐrgèjݤI¼0Ùc”RêÁTN¡‘-»«¦q ‡ï= .ã22Êž 8‚uÃúU‹7÷ww#%z¼éÒþ€¸Ðr0›œ4 ,Û:'" ¢èq‚Aˆ‰ƒr¶Õ0¸j€$fp|{ØÁÌÅ…[¢[ö…Ž“S¿æjO°þ®¥æ`>«ÈìzûéyûÉrcpÚváïïÿ¢úõSpW^¿Ñ™ñîîNÛ ùÌóòÀ¸{é{¦ùˆŠ¢òuøa/˜é\ú€ipŠùS ¡3ÞXÕˆ_¤Ç ðä²G9wéGÈûEdÑ—HNµgϽ¼DÔ1àåã#ló9ÿ è£Ò/n4k±`E¿R‡ JP4­Î³Þð¼<(¶Ý#Å\DQ1æwo/¼4´’z±Ê|S³ÍçÙ¶:À[ž²û¿¤¤¦ŽàÐý‹‹ÜÛ·o·F¾…ph pHÙƒ#ÁÌÊŠ¾èI  ºvo,ÍS[Û╜W^¢K»%/åŸ;vc/ƒf Ø: }ÑÞíüÅ:ÝN¦ãä#Ô¯ÇÕ¯ sÂÝ~!åAÃá0´òrçáªÎàêM2o§ÍcŽWý@¤}ûöMÔ÷‚ °ðÚ}±4ƒ`õê醺’ÝÙö÷—pº’ccƒ€àbfd”ó)Å&SŒüþ@Ã6œN¯‘ïqÛ7Éÿ jk¶÷`¾¥À#ñË—÷±±„i³ ö¢ÁÑ\4z‹/)y5ÑkŒG-Œ›Ìcü²õùå¬J؉_úüP†>>‘9‚[Y0é%ôŠÑ€®¶¼Ø›Þš®aû§4MQ·Gr>ži®ýú„f;þ²}è#Ÿ’|'8(ž&ð:»É¿;>Ê¥Ãà 3–ô/4ik~bð…ù椟·Ê~Z {×Ëæè·ýkñ`žDd©qzŠhðð?–jJø_nIÒGÿUÁ >øW¶´÷,-èU‰^ůܧñ ‚?ÓËÐu n8ÇÆÆJ2::dl'Ë£îo/™ÅÅdff>x£Í.-MèlÝ7eËÁ„´ úŠð¨Ñ GžÉ)ƒdÏc9œ)eó'oee%·‡Ã”îê\Ïì'jmgnbf¶›ûÄÍQ'Á?!wƒ€/â´,óVä?õ(i—³­_~Ï{Ÿ>ÓIADE•zhÇä¦UýðhÁ—ãáúZY<2¼—ÿØ“HL °­à©ðÜÛùîd^Ïî_,Q¯ØK‰xévÄL\íöè߯å;Ì×#·÷€†Pàî ,LLÙõ¾Ä*@Æú*ûíh4zÒ5¿Û~Œ‚Zâ¹Õ°•ÈÔñ*¼¤bÀP9‰ÕÝ^Zƒ W@>k§ÎÙGØ\/VÊe„ï)^jB¯®,Ý'TŸ>•»½Ø÷>ÜÉÿþØŸmk "ÓC~·czHþû“¨ÇC±4/^½z¾ˆä’j/Ñ‘’d5±²Ü‡ü~1ƒÃga½@xK „„S.ßÏôü€ç«Û_³õðÙSŽ'ŠÛÍ7»ã˜››7zìDZe0VüìË—/ËC*æ ¨ÍA±v|<ʨæú°l[“ô{Sßú|>b‡Ñx&%²`3lmg`­t² ï}ÄmÒJ¹¼¼ 8ˆê3ýa) iÜŸ‡ôš„€À á_4Í8ç1j zž!ÎøèÑÓ 4! ŠÓ+8y: 80—†2¥"ðÙ‰¥cŠÿý\•>ß/.³#l¥m¿X^sðþì9€>ö`àŠ%ز¼žlú Ðc±ÿüMhh£¯”09»ñ+[ö¿µy‰ú1EŠ=è^Õ§ Z3±²n˜–!ÛÛÛÙuŠIÁƒö€6É‘ Fâö×kó%xðÕŬ“Ža§‡jÝzúØ@*<]ÌÇZN±þdLêêè=/Ô×¢òT0a@¶¹¯(Š•ƒœ]Ü#.¢×†ââ²£>'íº† .ŸÛ/¶Óæ©&¾´~µ²ºú›~„`ÄøI¬wµSR±T¡ë‹ÚôaoÏ<õ(™ [;Ý"&q—¹iÏE(X²J¾rŸÏÙ¶ù./ÂUr©‚õ¦ŠŠ6Õ×'OÍŽˆßb~çdšMÕ>»âîØ€R,F±OdñÖXžZXX˜×ëSÓJ39T K ÀÏ54^(®(Ç´# ØáïDyÿ^Ûplûîê;»ü×g>ÖòŠ×ÿÆ»ƒ€n 0ƒÝ»ÑggpÑ—Î'ƒ3$‚#Èò>1½Tÿ&?Y—ýñ~§ÌûîÊ¥Ö~š¸@#K×éYnnn¶Ãl½Ê¿Õ  €Põ< ™©}ûÝÒc-ìK|<]ô›þ¤¢æƒ³mÙ«bžmíz{¨‰Q¬ß5>ÑSpR¬àào£……‡Çѕؼ0›çø .r3éÙåpºîïU½}8àÜ)ê㔾<˜w¹¿qOyÆJÊ® ÀóWõ›þJ×uUTtô &±”ÝÉŠÕ¦ÍÌΉ2CcUÒÈùñ‰2ÙGÙ'ŸR ã¤@2­ÆùÝÁÕæpV2]ÉS’¥†Å.©!Å¡b'Ó¥²†¿Æ§ùj¦[ö*ïà§¥ˆ# €ä!µµ÷0=~L ü ²¢â‡…¢8˜¸Ë *ØHÀ¯7;ö'ÁçšÀÞNT`4{ ýuìÅÁ×õ”bªþŒare©^Ð ×$ðþÄòè¸4Aï—}CfÛÞnñäÙýM1Ï.逃ø«IÍh¯Äç ¢š¤íiÌT ÿ˜Î“'è`ݱyç§ûÝçNTŸðɸ‘:%®å¦}a Î DWMÖ ÜüÐwïÓ!»¤›HVÀ‡D=ä;ÅHG`àöq¯€ì€RìT³¶éì­ÚöDz›1|ÞGX[ ´ˆí†~€Ùõ¤ý7øïN7³s õkmâÀEï!Ÿ!÷ 5fWíDÎÈç€97•’¢¸A RÀ³Ãî†Gp|:,ó]»èå˜Eì©@곫«Õ˜¼ôKŒ.’ïÓ®&OÏOÞ‘ÚG€ÌN?ÏòBñºy+fGç {P™H¹ ¤Pÿ…³ _¯AVX)ؽÇo?øß…Å*ñæ€òö½€ÔÙÊ{-öŠ…%Ô@y˜ÛhÇùæož‡ €ðþBòa+\(L Ñj²i@q§¤ý …RÚ¨ïwC ×ëPê<ô^J»˜ôè'NPCCúy8û?×bUnÒË@´žf›Fõß²xœÚñ9`êˆI:ê£í@ ;ß,Ôì±_üûÀ…7ºÌ Ú'gs”"…~?±Ô)~8twŠNÇÔóïuþÚÌÖ—Õú¦ºý§½ÑŸG²%+–óHÒL5‘¾ÒiI©ªªòb„ö½…6Ãø!1 ¿í_víR}"€‰•qÌêrô¦_:ýG+>¶¹9ÞëX©Š1ùÛ ³íêÍ6i,}dØ(ŠY¤‚וœíM“HKÇ+I#êGi3 ¦FÃËç£lQêR2€'„ÉÔ€ÍLí#rîW¨ßG Qr›ÆÌ D" uË€ŸßØuÐb²moOÙjÅè^ç”Õˆp›pXzË„˜õñ~Kóß«§¹üÃ!á‘VlF÷ÿ­„ÏÔѰ+>TÓŒâò;Ol4PPÃÀ§‘"Év¢4üøÀë3¬²c¯ß¼1,øÝ‘ܧ$à>ð©ü0<øÀM©twà+‹ãM£×‹I'§lKe&yN&¦ž_NZLÕýË¡£ß0Ôó'saÙ/à>K‹P(¾ò:ש2(ÖÓ¸¢à1‚S;µóÀº°¨¨qi¬—݉œz|î;ÚÚe¯ÈÀoùùµnˆ¡¢£Ä{ºy¨ç¹›´•@-„Ý;@Ï+JIùÓfT>€‹é%Æ¢j¼ŽUÍôF=0”‹331ÉßÌ@Fò£l® °âè"Â\ µ”Ÿ©Þ»ûc;C¿É•ˆªþ` MV˜NJõ%#|Ø0ðØÇGl²#@eØx*9ÎÔB£iˆ¬—æåŒÒm®‘ÛlÀ€Û0#ü˜éúø¾ršKLŒ*ï§ïa[hi)WQÝó· Ídì:ª¶ìLÕðaZ➘íVrO•eÏX8m?]m3^L‚üÚÚë{âe@¹+ ŸpåŠ^æhÐÛÏÔ>/¹s]Ýdût×ý«¹‡,ðÉ÷­X<´r“Dú 3¹lkl_ÏQ„†âÐGKq"]ªyð|ÎK²YYUctrP+_c´·Ôö:$‰»;~¼ÌÛúnfò`LÏÎ=‰¡‹ª¬äÔ ®œœÜÍÃõ|iîÏõîOqzö+Èk¹ˆlîùEA\Á¼¶Y^äþ‘Ÿ®¶8Þõ\_¹µûàJߟ•îH°ðù>©ôégJyÝüÏ@ øfV¤!Ê'<’²qŸ£%¨n¹Q80ÿ +ÁÄÂ’?Í×äf°LÏðÒàN ør€ãr=U9_ ¤ˆ“] ÎmúMÖ3ÖÞ,Ž´6±´tž‡+–ƒb²š… ¼Eè«]neФ Lú>û£bté5À<Œb!nW2]ÚÞ¼~½TðS)qg”§JVk7‰¿?S§˜QBBÂl·OC»]á$S•æ0 KK"zú˜ÏŸqÛ´|>ü`8ÈÈ⇱›ÚׯÅA?Óâ dr³"ú7ygîKtâ$XùßÕýbÏ—F”Ðz83‘®DŸßl”‰ë/ƒðs}8RBq´‘x‰{E{÷åŸhi"§ƒ!¼ ÈÀ÷Ý}wÂf¡Uì<\3ÊøÆÚz4í11Ê~~’àEt€zÚÎHRRÿ&¯}ºác“!h­H1´Ü9ÓUòRɃՅ++ž€kÈj@ߦÁûö- 4íX… \Mâ{1Gïµ^<8š0”•¿@uo˜p@"}Ø imkw@›£þõ±\<«ºæ÷'x^Ë´ßõ*LºƒaÎKpèÞt Ös~£*y4³±‡Çk‹ˆÕpéñss{cÖ—£×¤nKoiŠ\)Ê]ûó¼=téö°#™n×¼y¶sæ¬øðà†2à12rÁÈrÏ'Ioh,ÀT‹çáb.®bç'¼Q£ÀûÂÀ0á™x¶¹µ˜1p‹<@#þÀ:çf;22⎓@Ú£óq êý‡l‘MÔjI6$šŒÙÊ/l™&A…B, ú´r¶ýgÌ ŠCvaÎ䊇2õøÝ6Ê@ŽßI¸°Þ—"F1±ëÃúËtÕdpë;Ö…ÚEÄàYOÕDŽo/óTÙ ªsŸOoŠ¥ñÝ61@, ‡6j~‡µ9”ÑY¤Uà üñµµõnFμŸð7…`Ï—,7­$û+DGñx9w{è|\~ÍT@à7-{¢AJ:Ó¢†qêBþÉtEñ£ ô'Ÿ!èø¨ÃñÓF£œ·àŽû$xIðþ,òÜ\ ÐÊÇUMâ _Z2Kd ‹Z’b81‹f¡&#hß‹hù'šš„Ø¤ìApŒ¢ûûûåÓŽ 6^aGÜÛqžžùϸ/_ÞФéÒB›o£÷)+ :?‚ëÜÀH"SNÏËP (â¶rê¨y"┹å1bq“L1RN;’óñN_1Üo™ÓÜø­ 4râ S™ã×±äaF¦?Þ¯¤ gË ™böªá8”%sº9¼›Ñïr…ló]¹µZWuX!ãå?¡)-úöÐåûè#Å„?@/ÉÉóoÈðiâbÖ‚Ûçž§•„ÎËï·o'ž~î}†£÷ƒ ÏSƒÀ:ð¢'œ´úŠVëˆgÔÊ.cŒba¥|y@Ó¥¶æè…ÔõÚÊÊb¥+üký]à}ÍæC&ŸBÎc—»Æ+AÀ§Ž^<;èìÇ #,Cì϶xòoýÂË \Ú̪ ×ËÇ©aÓ¬->ë­ª„õªƒÿÀ„L¾>=ÜåºãyÕ5(Cd ÛÀsÔM?ß]ñ’mñð±V¬N|ûL‘.Ã[µ7ò£MYU%ÛùiÆ‘&‚Ž»´‘Õ›Q ÊHô)…€{àW2Ñc¦l'H­)vÇã>5RfÅK¶ÂþMüB”ÌCæç/§§çhÍdÆæ´âÌLë\™ïD)’T)±øR×zNOaÍî0Û¿±ôjV5©‡báö`Å/Žàƒ¨17V«”o¿M?ûߢ  S Š‹´ý«â7}øIɘóû·õ“ëåe¨äy‚Cà2»Êáge ¦‘‚Jßác&ækdP*QF¾ëÆï&³$ãÂ|–Šò™æ‘)QAL ðìRSÞW¿DP^¾<Šv]Ý~ôiÊý} ‘»ÄóI´õ¹­Ù’ìÒñu•¤du&=䙚"²lxDLLÏÑr§ x: ªX‚‰÷@HBǾESI¥ yR´SMZ¤¨º¥„§04ì0õ@/Ñ£»Óo÷,î±?Ý{!Ã2“¬&š±ì?µK Õ%™\éÀx#ü> ½WÇ¿ÖÞ]pº¯*‹ «}Y™MI>Už±…+ê§û22 -àž¬·oLBaR/¯OI0Ó€M6&ÁÜã±—Ân’!Y¤Þúª.ˆÇXôCr˜+`fâ"¯v+:À‹÷¦ª|À“ï6s¢Û߸NÎP¿>&¢_ýõ<“‡O”ÉúI:ßÔ.P5z™×¥…ˆ%¬Z®028üœÞ“£^ìZTtbéížóìtãÀ¿…È|ŽŠŠ ¼Ò¼ÓY!$¼¡?Æý ”^¥ˆ;·4d®momoŠ1Füa~E¼ûxIä4ΰ$Lò¾öJl}øþ˸"ŒÃMʉ~¶‡•ÀS X‚)Æ oDZVþ39ú3/""øÏ­2)aé áÄ+;5Žó]Ã5ÕA5Öp#®§:è{{GD4¤yî5(”âYW¶]œ+ ÄH´ÃYÀ؇ Ënl&Rxn%÷Ë—/àÝôóŽ„~Ì‹Wþ¿Z€ÑQøí¡Û>"1^'§¥p¶.e$bÅm{N²Òï¤×È$MÑÛ!g7¥+46ôû[ÄPj¨÷N=V|ÀŠÍiOŸAP ”Í.\!´ÞŠ ô`§¾z×bkä[cù«]×uEœÕ?jÀˆå6½GCzßdhY±:/£8oilÚŒIæ…‰8‰ÁåBäÞI|ß®¸mà·“<ìк>]rB2–ò¢¿òΕ6×Ö èDë8Åç]ö«‘¼íðÚ·Ìþ.joåHÕ¿~ Î= É)ù&%Ië×»¼/0Ýq}tîRÒ¹¤æ /_vÉä† .äå……¤KJÑÏçÞÞ @¡²fÙ^ªô”ìÒ((]V2¢úöWj „ô&~ÊiSúÙ¦2ûå¹~'Où?Ç!‡Ã{éô>ô-X¢„µÌ»ý¯¢zfБÊoVæáaéòÇ++!sñ£˜~GPÀš üŽÙÜÅy·oÛÆ„Eæ‹+1{N§ù #Èj0(Ž9ƒà1†¢âš3 Dmþ _]Y:#ßô£„`¸j(ö‘n7å–3dà»<ˆ²¨|q“3Ök\fÀܼâqð—ÕätÎYálö]bùêµzú#ÎÊœ9ߟõ±VPTÌÍ8{7ŠGA…õhÖ¿Úìw;­«k· 2¸3«S*;¶:`evlá5‘£ôïç.¦ µ4ÂE¹ÚE(­7še_ïô}Ò‚¥|ƒÀåý®¦ÿÏB¬ÿÂsY¡øAç)Чrn”¯ÂhøôIôý0¯1—YÙ ;/Ÿ¾TÝ2a§ «h",pÕ€‰Zr¾5 ,Ô"bbbâd ù]!»Kâw{¥ = %èƒLf¦ã"¹n†è7OVŃöoAj´xªYÈy'aašˆè‘ÛÃH.Vå»"ácÛIr-DÒ8kfæó,ôA˜ãÂ_ ¦Ë®Új’'[¶´ß dGOD'ÈŸlP”ļ˜L?ܳ5Eä…ð†OêHJ¥®l|Xïts 㿊„¸âêê "­îøø6ßó¡OÀtÞ£½ÛÇþü o½NËl„![ çºê,)ŽQQU%É£’ nûÏ}˜ØÄŠ¡§ÐÐü„K´ÉDïxE 5Êî¤I…¬êš×àeš—O³ ,EB¯A‡O}‘ ÃFÚ$–6 ŒŸÅ?M?-1¥ŸªVjiTTT¬çKUì´aw^¸óBÆHù„uÄøû­õü™­²´˜2}ù¥•Òa¦Vîúd}Á•Dh¬9IJágw…yjÉ]T= m€þ®RWTLH£ zž:¤×¼F±ßÑ:ÕèÂ,îyÀÅ‹‡8˜Þ(2.ö…„Ö»ê”'¥yƒiÁâî]QÐéé™_¬LL—nÛÄ#ÍBGË¡9JÆõ}‰ |Ý_ïqEUކ,à̵qò>¹½Ø¯zû‡¬3!d¢־ɣk#š6kýåã¾b·Þ ”R9e{¸„‡õ¶•šà=¶EÝ›f–I ½º­5•aàÓ l£ŠZ¹øBé½y/%%u¼‘æ´2ëÔ¡¤©›Î èøhˆ—w¸Wl½ï-õí£ Áɬl{û_['“Ð?Ó`í=ºü}˜|è‹+‡Z"^ÉþHéJgF祠VJ¥ÒcyjüV”^ÚL¿¯ŒcØ ^ârD„\Dä”r¹Ðd›H1ð<GtíëóLR7Gi¤QšWmx2‚¬.¼ ¡KÑe9,³ÞíµÎVé}j%y»Wsòž°‰ ã-S\ôì§$.oÌêlg~I{âcbAo.“}øˆˆšÊ•"»Ž«-{ÖzNNˆвéŽÎ釉hDÔ¹½‘DTTá结ßå?bƒd7Bs~~ n÷6iëzhY–2_é–o^™cr“û`ãæŒÈá  ìU2^|\ö誷ÞߣM€$²ëJ 4€ùµµ¶v¤×öƒ—/Çb“°ãV}W°²UÉ„uÄ:zŒ[X‡>…ÂLñ¸KŒí™˜\y:îÑ[ÞÏqn¹ÚŽ@¶æ fW]}TUQ’x1ç€hÒ¯²H‘ðä¿~í-6G#´•µ½Ý‚Òú+¹Ì–´Ã,+ë •íÉÏÎàåÎàl!ïò¤,‚RæhäïëºWÇ£Êôà­‹¡Ýq$òŠ?ÀÍ3}•0ö€¿y‘…ïKUyøÜ‹ îb ûY€°çä Ž„óóçè~¶_XÈ¡tÌ’¶€Î‘µasaÞ]}oýl;^ÌÈ‚v{™L!¯g Ê ßçWûsëîÈ/Š?R[Tˆí·“мpïžRËOä½)|ÑÔX˜ˆ¨Ès—Ï r4®g{bûbaA6¾¶ýCCúû·Fxh¦ÕûT³è%‹4§4*ò™ 븟‹‰‹  øG”2]÷&%%`æ-ì¬t“š˜˜^r²(Ñ@µ„®c>£šxw»±"»»-ZÅ:'¬Hô(x]åÎx Xk)ƨ¨Íôïiü”AÂAO¢ºR:CÇßdIbIÞ–Nå_oäˆiÕÑ*¹4(ÒmQ@X´Þߨžœ1°aè·è:R ÉÈÈ€Õ[ã%É­„L>\ÿžˆƒ ~±õæ£/Q+-#áá+tÖ‡…ƒÀ€nÞn³1p¨Î¯u˜H™ýeþzgÚÈ0³×—~7YfHQTT”~G² γÊ×Méu꺦d¨B(Š”oÄi€ÄÄAõÁ÷·ëÖTQ²ïóyUZÇOwÐë·ê×Î$²°²‚wCØÌ5VÍáâ(S˜:@¨.&eeâ?vÂH4$LL‡˜oÇÃ}ðÜõp!1KïÛû+:2Zîèjï÷9L.Ú¼bTì\ ñæ|”| W²­k;a<ÌQ^ר_´Ýì®@û_¿LNËÀœá»ÜzV(Ñ´Ó¡I¶»Y7¶·zZ7RÈ®ø÷ŸÙ†à<5@º¬½AEE5;^é/T5{ìÚ,—ËvGñT±OŸËj¶¦’íã^7 ÀD­=Ö³tö†:"à‰ÃV$-u€G‰¦Oβ†Í7‡û-,œœž­ PX™lºöæ±Ã   žL–¯$Œël„È*öé”a¦d¤komý»NNŽò'?\0¯Å³ˆìå²­yý öØ,½¦jý°èˆ/Yyl¾—"ȧþ~¯å•.«Oþ–š`½ý)¤Í”6¸±Ã¨IõæqDhň&ƒŽãùò¢„—fë›bÄWK°Ñº °°¿³M$”¢„¢žÏÕM¼Ù íª þç0½ Ù¼=\ÈÊÖë4JA«Ï­„7dYÃOqÀ˜I.Ö'¢@Ýš¥8:×I¶« wˆ¢†=zbf£'AŠ€‘ƒk‹¶h++AÒþ’v'»I…'¼n'ô¤¤ººŸ#ÂçP=Á ÊÃåƒ l_IÏ{"Z½öf)®ÖHª„ÂÂÖÄ|u[Ï‘+8BÞã%0À›e•l  Ã&&æ(áp5 ~HèçÝ´Å\j î¤Í ší­3{¹]hÌ~U@WÓN­^„*¯ÉSJÏÕ°"…©+í(bSØ=Oè)(BHÁVá‚íù@eeµ;$­/s@Ä1L÷£† D>OrXa)'©!¢ÅƒÇøKÖæ&›Õ»ÃòúóÒ’õÍH´}nà 1*/äý%¿Ý——ïK´÷ÊÀc“Ku—ÈÉY#PMšrx|7Ÿ "0®‘¥¡ÊLLÖ·×ÖÙîóz;h&~£§Ø­&-襯X.oߨ¨`’séM”öã025‚ÂÞ•ér‰™­F1Ú`˜NÞ~¤ã~hâÞ¤¨øæ÷L@1¶¬È'Ì„´ÜØý>3kÈ^"³(MñÈÂBö×VV®'k`ì5[ @i%P*ÚÐ ¥m²lôD]˜b“ „Ó±¾bÙR"âÔ7ÌiJèA.H¡¤ø†mw7<šve°càð¸#"Uj¢køˆü¨0æ'6Ÿpf”bR2èŸ|èàWèl}Ϯʡ0ð.©¯y¬.–UZ¥ºÜBÞ>qñ°R}€å_“UœŸžvÎ5¹/øþXyzOÞÇbƒáà'²@HàÏ‘!ÊÍ„K…bÔQ¶“öáC`”„œÔ XeŠ’BOííãzœ3u¸ò¡õ³¸ûŽÙꯨ­ù–n^FƒeˆI((Aɦä³j÷w×gìáÕorD—gêÀ@>Û›à>N•|Wè%Èm˜§ /©ˆ`~•Y»NÁ§sgؽޞk·¼׈€Ühæ×Vûö»ðåŠRÕÕH …óEé "¤®/ A¬9·ò^^Îa}6^ `sN£~í¥a‡I­NÂ@3¤ðë7¿{Ô—ÌËËö!Ì(lã…Ÿ_—¢`äÑê¦ß¾Í†¤žøðmÇ ²Jߊ{ >ÏLȲ®‹¸𿘘X³v`\uk?ÉãM…BÁ:ðŸ]nʨt&ÂD»IuÅ7OBÐá)ü+æÚë5ýe†ðF—œ›3 ™³“ØŸ¼™I’å_½ðD†ý¡bë¹Ó¨|@ÒBºl ']œ…÷»\ºŠššÂåÁ<ˆ_<ÎР°>ÒH%Òj±—’|ÅgëÉ9‹ç då‚ÁŽëÔ;¢½ªG_SzÏ''ôûõ¡‰ÙöË¥ o*p+ÌÊŠõ°=;w!@ŸµY‘¡Äc¬˜g£sr˜(%²=§d5҆/âô—ü. –~¢]{··Ë"²—¶2=çÙ…˜SD*êhóññæ©G†N`åÌÑùy" šWÍé מ~~èÚ·ZÇ„,n·k‡´¢Z;¶bíÀ+ƥà  ’¦‡Ò¡è¸öUu“¨²Fé7Í<>λä•VxÎé­ŸápYðSâî_Ðiî@G{ EáSØÏ¾J°ÓÍHÁ’4¼]ó×^W­›v¯-š"L½»Ù2H®v§Þô;» \€ÿõfã[™Rq·ðÊ«ŠY6O« ¨Ü88à>¨DoÜŠ„HŒƒ—€RBW{!yÚ !8:˜çë ý%«€ @1_‘ØXD?1cQÔ"9Vƒ_ ¦2 &7 ƒì³®Ûÿ£wTo1$hüGîØ)Bjê&÷7ðÂ+RêrÐJ2öbö’ŒÒäd p·¼™}aaÁU>¬—œfÉ—6…Sx„T<0 ]¯øÞ±|ÕRSÌÁÂ/ @ÜŸÔ|~2*ï>Â0\šèºÿ4[±­Ÿ‹uJ,æ›ÝÁt€A3»0³7—“SÕø»)¾ì—,uÓiÂPõ¯?ù¿KŽž)¾ŽH8ÖÍ”7à°u©SÈ0t£¬\b6ù]9 §ëg%—†ä1T‚£ùêÔ`öéþëm…‡ÃÒùd·BaŸ[˜¼+¯Ñç« x&ê{‰Rf ·=ù*Lfˆ:foDß›A+5z´ÃÕ+`3Âð……QTT Ð&Z`Bˆ •ú](p» èxIÉ âÆ.[‡³Š26«É´Aôt¬Z'™a h³;I¾ä1»O€t¥På›È«šä¶uà1D¯Ã¶K³*ýµ@·AA2 +Ö†>ùLHPhb²ãŠƒÓí´1L+ñw8n³àúqJ‘ç¤9ñe®o–Æõ”\ä4Þmó9e²W²«ïŒƒûÉ&>OÁv‚¢‰è>z”NS9F×4îfŠ)Õº+îÃl7q›SU0›ib ½x :}¢V §€+¨~-fc€±É¯?2Q¥¥\BCAZièDvŽr!@ï’”ÿ½CO7a¿ÿþ Àbá^Ëü>†ˆ†€Ìqì®n¨ÿMØ>23¿QßþÒ´áùÏÿ¯»ÿŒÊjé¾Ñ H I@‚( $JVArÎArœU‚ É9ç,’œ3ˆäœÃÓµõüzô¿û˽·ï£Ç}?¼žsÜÏ®]µÖškΪUUXï¿ûrwP?x€DĨúŸIÀä( 5ÍP} »Òcv&9‚Ëþt}O%fQÏ+Ž~y±ŒöÉò´‰ANw¾¾žì “ºjT6/°áTeKwÔÁ“«ëk¯‹·G_€ŽG3Ì ‰Š©–»tg¬ÅOôüÀ²<*Ò÷—b)“¨úàcÆi[§Õän>CÈåÀç¦áìgÌÓóbbÊ¡¡!¾szšú7è…‘ÇOëûfù“Å”ìMnkŒ†}´Çìœ9ݺÓßrJ$ÔJ‚ª<–t±A3:ÞÂ{Ù"HåfùZ¢G‡(ú®Ï<ÕÝó®/ý*¸”fÔb¾~½ßl@דçñû3nÚ8§¥_—OJ_=[ùÈLlï}­!¦fí¼Ch·Ÿ%G`æö1ˆrõRªž€á3w¢ÎÉO)]ÐåÀ@õVFVðK‚.ê6|S ¼ÔŒ‡GMÿámøÀZ* ¼‰]µ<Ëub{•iF!:K6£ÂËó4 ¨ *))ø&Ôy6‘^ó[ié~^@ IQ¦f()^h[³LléFíÁšUÖ¤7›Í7X/R-~ìâ¸:FjyÌïL¸]h9¢˜Ðh—âZÏëÌüæ´`ùPöŒî~|“éfÌUÃÁªß«m'ÝÂåSˆ%Êû“£cáäxs³“a€¤ôƒ7ÉãÝÇþtéhƒvJ?WYõQÕ)Ø:Õy!¯Ÿ¾•l8Nh¹ÃˆDµP¤ó]}êH5ŽúðUwÈyRcèÏ"†aê’ÂFK•#WzT"EP9I/qpaíTZY–ì:¾{·m±ðì\Ë”óW!ùÞA¯oxø• #3¡ÙµŠÊê¨1GBßWA·'¦Éw¨®ßÓÑd/Ã[á£PoAl·Ž¶™òÊ‘zceùØ áG{UÛ~HøöB|Þm’Q Yß‹(æßãÅ(X$Á–ˆ²[¨¨p)É?šLs ó€ÈG̲[hæÃ/mvÚCŒžüÊáÌ[Ñž÷ƪ°D-ÐJ§cÔÈÕV“K¦¤@cÖ„të±=¤¡AÖ©²†kÈa˜ì„ñ"BLX؈FØúa‹ÜÚ×§YÕäÄ&¬—æ:ÃZrU ÔÚIü„½ 66@|^—#Õ;#}ü˜ö+´çÊÊwß½¿Tâo‘6‚Œ´(‚c´òfêP*‚¶VA.8ÀÎl{³•Vão*ÕÂx×Íù4ÿ+æÆž’zæ*k|,¤'š…êžg‹_ylȘ‰Cñhh`ËH’†h”ÕÈÏâñg-Usí!LMµáÁÚ9V(ÚÓ²–’ßò‰pVNuW(ª7V<¤™ÊçK¬R¹©¼oŠ­ùª bšÏ"ü‘FjùÁ4Ú³u¹³ò ±è²I˜6Lý8ØwÆÒ­¡'¹Ç.ºÅÅ·²¶> yq÷vÁP‘ž¼?Õíð7H†A”-ÏFa''ÚVJ÷u?1Eì¡ü*¢ÒÐÁCƒ Â9[!ä¡ Jv^îª=¢F9ýåAùQ^ͽ‰RÍJikDìÿгFwnFµ¼G€žýyRÎÊKl2ª¹zú`3{Ñ -Cj se–õ9Ú—NŒM5ÔÖm·‰½N9ÞlL*nŽI1áBlùü@´Öp5F Î›twRjSR¨~÷'…tGÑÿXéÖaê¢ýûzÙµ~‹º›?J à ~³õZDú ØhƒúV?ï ò+f¦øKàù^¤«¼76ýV[2¯mד†|Nh˜ºN†ª«.V:½BOoŽN5+íLP²G|F?tŸŸµTéÉ·|Êvj.»#?kùUÍö«¹ù‚÷””èrÇÒblîZvŠØ~£VùÈÊh1fÔXQ!BñÉ.\#o;÷%v0S†Äzªâ6  1 òî8pxˆF/§[1ëbddõ,K†Ý¾ƒ ´Õ£CÅX뺬½Ç¥üÜèÏÔÁo)ù¨Ez_ßµ»B¿s7$<9/£« ŠŒZ­Tkð™ó鎤}¼Ö½Æ$Iò³ˆ„f2}gîiù¤o£Gû ¯íìˆH¶Äá 1QÍVßPr?ÀžLÌ^Cr ȈC‘Dµ™½òÂ9Ze9}LQÝûŠé@Wöô£ Áoåyµß ßDâÒO šù@ãK[ë¥cdP§º-EY¬ÎÂÁ¦.€?ÐD'‹ß ‡B9VfÅ¢éþìJ3 ™qKëQN‘éã¢Yr FÃYr€ñEpéJ’Ô†jvG ç ;qJY"¾[cA@‰©ñ\&؉|$pSýÐgÍcø[®=³?w#îmÆòv÷è.Wý“'‡­a.öJÖ×õ zP×¶Í´Rzà13!”â ïV ÛRÌÄÜ’IS¨–ö÷o©°€« O¶nö¤1iøê7úÚ/û¾C>w‹fBy(¬¤b Ðê’g#Mµ. ò“Ö+ÝQûÝô)-ããòøhHÀIU‰që¼)4«d+²=N´Z´¸„>ôÑa¾71E®­-"ý±¿,ºÖoD³s™<˔إ4]Òê±6ß…‹î~B( N†’·lŒ¶´‡Ùfä8ÛLPºvýÁXð€8¡3&²ö%f¸{ûK®Pw©KñW¾WœÑ¾„%ã·\oV‚ò%^dàžŸ·L”aÝTZ^]‰Ù€$0Z…=šn5Þft¼øãàÉóçÏK¼¯Ý±ïó)q Žpz:‚`2®³>…8¤O¨{¾šþ/@˜$J)Ȉ:$ï6¨åÍn‡^ñ&©dõ#‰%oüï”¶9Šò2ÙûtûûCЧÈÌšÔü,]w‰ˆü?}®°•†Ûy·Ã鿸ˆ{}¾!O`ˆšŒ/%  Œ_ˆ2»hS9G!‚c=µ²¡ÄÇÊ«‘脇E*–L÷ ^0½ñ8×z™>áÆéÊ”ˆÂ@pHûé7µ|±Y²¿óÖ£ùé&Ñ«®ƒÿNVªÓæ]ŸFßÐ r‹L»/õÜÉÎ’çÛƒŒ´_Oþl¨nO• Ú¼BxÝÒ\ØÑÓlpñ}ðÂ÷Û‹Ñ‘íÇÿM–ÜÃ Ï @¾ô¹'UdårëÀ®ãïŸßá5jžòüZ6Vxi¬“‚|Ù| ¤Ô¤•}Á?SÜû'LO㢄=V×B– ŸÌëæªæ$ZmþÓ?Z-II©¥Ìè.|«Qå¨l3¶`½|W/\'ý\£Ìì•?üíWΫ„±lyóÓÈ-ˆ§GŽŠÍå>ÍïÖxT_&»Dˆ¼ê¸ý?µèE.ÇWøÜhí;«ŠspÑD†û"pÅ,®O´Ú¾yFXôq§Épf¡ãŽ)|Z¼ «#”üoãAX¿8;;ƒoÕý3[Ï ïÙmFè_RË,Ñv0ê ¾öèéïµk¬Š5ç2:Û[¼ÇnèûC<ïÓˇð &M^ ×'Ó|Ê#œ(1*ìØò’|öðð6ð#²ù½´e;šo´åô“ø—|j€%wÖRÚ÷Së]VM¸¬Æ°±ˆ™Eûâ¹Ïž×µ6‡?"p×Û[Mû¸ôì< Ñ[Þ·¶¶–¼ú1 !åÐ|3ÕW!ÄCæÍùÓƒƒŠÆAøzšù›^l2®.¢¼|µüáó[JüëlêºÌÎæßv¸ß“¨Ý¨ÉÞ„¾¤æ×!YX1ð¼Ùc™òïI¼êìè ¡¥Eå¶ûèdÆ Ø©Tüåâ!Ó; ®”¥tuÙ·w²=ON¾éäà(.Ó0 saâü™o/ªÅ*4™Ïæ×vós¹Æ''ˆ ìy´:'‚Ʊރyô¡ðAÃ-MjâûÞúµi,¦o+41öÞ¢¢¶LUŠšf5ìPëëëçýÍ´vvOˆ‰ñwØñŠÙö˜V.é¿)ù1N.½o™é°Ú×ùEFFþJ}†X¾åtQa~ü%bñLLkàd×åj >瀆¦Õí½›o»Ñwƒ›®A­§7¨¹T·0©#W;©Äÿqlÿäô—H•VùÝÃõVã¾þXíȹÌjùêâ@ɽütïÛ‡ É5˜ºt|âµã÷,\oõWFÌ9oO]O1´XVò'Z„{œŠqÔï™ÒM¸á£˵þ¤ý6…ǽåò8ìöi®ÆLåB÷¢mæ½Ð+lYèR?ødAp[æ£\y[ö»ùª3 _üy(›ÀsÇ”…Û1(¨Nê Ù2ñ»‹•v)?Æ;ÚÚ 7Ç ï {òÉ“©“¶Ÿú•›E‹ñ«y ïõ²ŒçªÐWØÎN£¸:;s51БðD4ºFñÛ§ÍTªVMX·üŒ Äñ î%™8˜¯fk‰wlÍ”iipkQéîÍÑoä„s°Ø@Ä ¸¨mœõ{V>¾©u™=âoÔ­up]Krù°·÷¦o™¡0„ÄO<Äwåõ>Ï„^"ÿêDÕñƒ|>ì™ðÖ21 ‰i¯¤žÂ>ÿ%>ÑÃß@,l8t éÕ"mÝþDžÕbþ†Ý!C3‡f1ªmíôxóàIZzúþùZJºx1¬¼gI€|úÒ¡ÑÝlüô-†pnnüîpƒ›cFV–ÑT…EOpç¤uZüMvŠe~^qäÃv ͯ’W/Öp³¾è{Ÿ›Ô—NúÖ9ÑbgÝê GIÑßxBO¼ÒTe‡®]u‹ÇFžÛ¤CÅW~aho7B¯s: 6ÀFCYZ^.}»®¬š£ø –* ËTÀ׳Wä­47wú`ì9ÀèA¡¡N­]Òký¥ å¾ùÑíümaXÍ£ù±‡èFwÈi¸¸Fv6ù u’¯¯aoà¦?ù$U‹“£›Ù7ư‡šÏGß;¹ºú¬~>;|âFÁ({ì`5- „ùæææ+¯%BrÁfºŒ˜XQ줫Ÿ( ÈPØí®°––|- oãþý3žfØ/Þ­¸î ‰ñÓ© B÷n,lDõ8»¼|(îXï¼myÊM”ff×€”³Sç´ˆŒG‚~´š(Í“p´kà›‚–%¯6Ìæî4Xô„YÖ;¦|àˆÍS7eý—îÇðº±àéŒ#l© Vè3OBaÕ£ðÉA‡ÜEŸ¦á'ƒ@Š=`RãÖ·÷.®©~Ï í¬+PW±õö%ˆÚyÃûzn¶¤‡¾½@¯/®mžþÞ)!Û†ŽCÈòKUZ† é÷@¬†Iâ‘Õ´ÒUƒß:kèâ/‘¢1åu;¢_ž¢ÈÄ ˆh}NN{JÖõ@ùÓÀø#؃>?¡2¥ß† ¨Ø®Ùÿ8¿8ѹù²¡±‘ãUë-xwf¿üa«N¥³\JGçcï­Æ·š_²Ùœå©æ¾dÚ©oáAÎs«ã¾Ê'ÌæÃ™†¹.ácB €êt’@Doi–¢ˆ aˆˆÀÕy.¾þi4ÔÜj÷áƒ'qì =fí I­mRš´2_8º¶ÌŸžßýrÙŒˆ:‰\o¾‚'s¤£¥º]¿¦K´ÛúÎÖss ¼Á” ¦QuVw½ïÑé°9FåÓo„T÷ßðùóD®å‹™T5&{b]ñc‡Ð‡bí× l]ähàÞãÆ4ÿ% Ì×ÕOÌ­u²«Tj$þèÑ#C`ö<]¥G4Œ(g¹R+?;Þ^'ë_žþ¨3 Þ½L…é ðq=5eU ‚Ôœš%-•kß©x°J‰ŠByê…Œfì8æ†kØô¼§ƒÛŸñF5Ú|'·>|ŸäÈÊUñ ÂX B(ÆÊX>zÙL#_žt²°_éⶤbdfÆ^__wÝÈÍ^d5úÕ_.H,å×Xmå0Íf@ Ÿ£ßæPWf ~·Õpñy) ·ˆÖVñ–”£QL‰ö>ñ;_KÄ»0ÚkÞY?ž 1~è8ÐötˆÍ’ËNNÝZ½—Žl[ ŽÚá1³¥ë*Q)”šî“ÆZíR¬ù!âœÞ€©¬¬¬˜¯ÎáÉý¿~$®¼ì±F¡¼sÉŽßõógÛH®Êâînñ£aSÜ\*æ`•Ü/QÆó»ãÃÓ>¢#H%Á”h—øžû©ç£ 8**ELÐQRâð•ÞFc8ð f%èÍï¶³>/ÖR‘Kxüß|³“6ûÿa¾™Š f”ïþ:Ã^jâåÍÙCÙXV©ÚÓ_ûLácOœ·D’…¢WçšX(5cYQ‹ôÕ¢,쬞GWÞ•~ÈÎŽg*pº[uûšÎ„=—ÍFË×?…–j âäC")pçëS•­•Ïoh6pÿg9\Ì ën‘‰@þkÖ4TÔøûûûpØ bÀÃòi}Iük‘n„£c‚Ü:«ï%ð‰àZÇ5£îHÚ¥ô€²•l_·C_ ­”ÔéÞ9é ooo´%êôAóÓ^D r›XƒOªîÓË¢QF© lYIÅ™“z'Ù¶ÎPÇÄleZ¥š'ŒÒÞ1OeGÔ#jMïããû0‚¦óˆÀE¢K¯öÞ\zìÎ0ßÐ~üøñ; yp”k2ÓÆùû!ößßçÑ4 *`<ýÙhìPq­až“sçWV¨ñ¸ÀÆ­}Xƒ™ÂÂOÒÊIUþz—[)©¿µfãú(÷ùTL'­[ŠôÒú,-ÂÎù,ZüàVþMã»Qé›”­ ckúŒào¸%,,ü•ý2¼Ö_e£cR;^ô±ºYJªe¶¾¿¹¹‘¥ûhbªçµY”#‹ÍDC£¸ž¯†>¾¡š´‰~–œ£×¥äÝ;ø8RG ž|¢ PÔ‹#¤††•µÚ€8}d0‡°!†9ÄÙ àr“ÏÙñ#èç èð£»|G.Éíæ>¨¡ ‘ñÚ~ZYy ón??¿\ dÓb;²¤s_«]Gë&&m"Á—EIÅ—‰û[úëžÒ–ê’6qãgáå¡··î °ÆÞüCtã=Ã×é=‘®Í½ïRäæx®µ³²¡f?‡è¤Z5QÍW¿³9^ÜÙËÖÌ ˜f×{$ß®¾.}¿»"±ÉJd@qÛÛÛŸ-…°ÁÛ0Mlöà dû¦c íf†çºK£lˆ€غ¸îww3+ B…‹Ù7F“†..¬RMdJï¥þàŽ{b×K¼¿ÖìVßÐ%i؆1˜ôîf{á™á§¨ú9)Üš%—€GIÉ ¾#&¼ò b¾¿=/;ºŸòSÖíR€BñÛsT˜{Á'³¥¿ ý²š,Â6çjòÚ<åjRK”JÃI=RX@€ÕYoyk¶^-?¸[«ÚÖ²Ú„„8xàYpÒƒGJøì&˜¿*™Þì§] ¶@ÿ+䎊j4™[ ô°&ΚG¯À¥ D|½èò6¾’V*ÄÑgÊ´žK[-xe•›½\lZëê’´žk UÉ–WS§m®¹7QŽ—î54n_^Ç1MüˆØïÊ16ç ¶ÜJ—@9Þ@ÜÐ>uU¬Hò¸v”Ž\áóÒNËãõyV]<Ÿç—¹ÿëÂBšÈß¹—ý‹ð%ä<{Ä µ+?þìK+“Z×ú~Q"9Å“F}®^ãbs+ Û É“”—BËâóÊÙþ²óµ7§Ä!%16Zž0çMCÞ|qÊŒã`2 /É=â Gk¿>ýÕÞ˜ðÁA£¾76oÃ}£Zƒ@V½:j!!Šoß¾Á÷çÛ™Mx—Þ„uÉã$Ca{ä˜_VŸ2ÒÑ¡ÁpëéÙPÆ’ñX‡ª9®Øœ= ¸>Ÿ öp4_Üe£[FAëšuÚc—’5ÏqÕéÑ‹ {ê©I8Ÿ¯[šçðu(ÕWÅ º(©>ÚHzDß»YeÈ~Š*¼=„$=±÷6 ÍŒ²ÎW¤îÙÍ*ÇçžêA§ç@ä¬tOTXÀçæ0Ÿn¨®+ï·xžÚv7W?G½ÜE̺Ì?åa§¯÷8eõ®(?ÕhŽDSy÷2´ÍÖ·KRTéÔJnôüüh¸¥Ôxá÷݇[Ô4ÈŠJsmÖĨ ¼µ¶Kñ]>'±÷žlEü·òÇ"1‚ç­¦Qñ#z÷¾vÉåÌÜø¤ìܱ=Ö.·Î’”’úþ‰”SQiû-Â[éÑ›Ó „½Z‘µ½¯]ÓùK’vOø(“Dï.{ø«Ê`é!"ŽðÒöÚx¶\ù®k}O?ÚÅ)Éôž£ÃÊ*êGœ»JJ–$3ßã8аtõ§#®ßnO©üÇÆü;H±1wpž$  7zD¯Y¾cIBh3]õ€‡‡M\á²¶VÔ”noÒ¬åæoòPÑhÆ“ÙÃ¥ö>×½T•Žlquõ˜ÙñK¤…¦xn?¥t_V½-×Azô¯|JØoË}ø{®–©D7ÇZòÔà´ÐŽsG‘4’ÞèÑž€pY1o²£ð ¸,Lb”raô“ÓÔåJØ›¬¤­ÕV+Ò%å4ëZœŒÇ:‡ùôÈÂpNÐ>æäÔ«œ"Î÷õë×|f†8uîÇŒ7ûá>^I”t:t¿JîMY‰†’Y–ŸnØ%ÐËß:81ÝŒ†‹Išèèå»Ê5}õż0àEÜ xñIR.ºZ§ÝšÇ˜ >üe±—“DL¬î¯È5|üØw5;E7rûáám%?¸´ÏÄäx°¤Ç\wºó±¼Âñ÷Õ‰lÍè_ Óê6{Ϻ½/† TU}=Î}s6*ø™–OÓ±3*s_13Gò>ºùöD•œ^%,õþ }"?íôç }÷Þ/â!’?í³™ŽB´žæŸ*&Ïž=ƒ¥5ZpîŒxã33:nkêRîùY¢–¼4†j1C€mÀ…í@nSƒT ‰ôˆ.8pçâx»YâÕ«êÅúÛWߣŸ;;óðð)b E ä'±Ñ8H=—ï¤ÚÃËüAé/ VÝ^û8›é6Oµ-`º>MÀ·žz߇·Â”~ɲ>©HØtËkWÐt• ½g;CwìáÍÓ«½±Æ€×`(ÕH\ÿQŽð…Ó`<‰"%ð„;ÂEß_p™S¿b—¿‹G×rºuvžÛ[9ékÒë[Ân¸­íT[¤ªzK6¹­ "aí8’k8†Š7Í'|kG;…ëÂsÓUß5_2}% } _DkAÚÃâèší7¹Õ¤SÂB¬”c·"yÌ‚Ý|u×|T:1Öe<ŠG" ÚžÊM¸ÏGÿDÙ×øAH‚"à å«w']á‚7ç«>Ï”Žþëöñ$×NvFßz=›®‚|gÖRHÐ+(^?fþ`g™—UúGïÍvÓŸ_ýàÕ/?y3bø|øìgÏÕ*‰˜Ô ÓÄq æ3>>nûÝÿüyh,«Ñ³Ñ ‚öúÂ4Èg':NµýŸ?C6X[ÓôÿÕ}/^/uQ˜xÐíu'ŽÒ™¼çàb=>¯ü•úy8`p‰0GáÏvCZ0€‚-ÇÄü:Êwš6Ç,êæôà àóÑD¼t…Ej\÷i^†’ùûܦÈ× €I2³f‰è°Íä'÷c9ÉüÂ(üÎ\Smõ*'Ñq‚x׋›qþœqaB '6øTüª}šLªxf×ééÜ…&1Z$lÈXÄAUQe@õ¡300ü·‚&®¶å7íêö‹ Øk_íMßóËÚzÊÖ”c!¨?ïƒ{¸¿¿³Èúšq8~s³”ì™bñj±Õÿñ¯»+0Œp1Ðoä÷N›ÁÒ[&R†Ô쯃øÌv–ÓY«k4Gn™"O4hé Ýœ+ >{uîÀí&$Ï=ºR›€‚î+âKλb"xø“.µ5vaS&¶²°,ÃXÿòä£é£ù´zCÿUlâZJ œñ{ëù•×rãõ üNÔ@Ûf88«5îqºóêü`õõ½¡áa%MMÍ +ŸóU˜-¦Ü:˜.Ážù½¯úí{$ \ôŽOHñeˆeïCÇg?Ð3õ.zÌå+¡4]lðba%ÓÎNå}ö †UoC1Dp²'š)>m’†9”Œûy4£šá“8rÙkÏUÉÞ[Y‚wÿ~{¨¸•ápZiR8™¼Ð…O-DÑÕ¯ž@~»Ñ4±À¨Q\\žfû%G—4(%OU)jÍvgu¬ˆK¼ììòÒøâhý:š@ ÞúärÕÍ2jšÇÉV÷SJ¡»ùÕxë_ǧàczõadßõ--Íækâs%%í€ß1ðW‚Ï¡aeʼn¢“k½¹¾ÔʘïêïéîÎŒàsýÔÀÀ€0Uò‡|dä=ì%–ÊlŒ;DX”ÓÕ!F^yüÜzMÌýSÅúw~Æ¡0¥;mJðóCñs\YñDr‡ø™¿Ã2뇤¤ÒpÞ3ß!ãj¹:?,yõF͌ĵÆÖ‡$<ä „nœ Jx”7)ý!Ÿ•vØ$&+cï)ÅóÚ…}ùB(÷õ†ŸM<9*ê¡ÍnÐGíJË!Ûb™¹9ÑÓ–’W¾*x>î g!1ò|#$ )èO•½)T§æQÑ[XA,žì Æ°F œïŽæ“€¾==§§a|{©Êo•lÃÅÁÜT)‚‰««›½C6¶Ë‚…­¨´÷?цm[¡i ±‚ndl¬'t?vï`û@Pm{ª%G)ñºY^ûqD ­‚çà"âD™Ø¶óË£Ì<ªùt˜×Üv¬"½DDHä¼ðNý&Jº¨ÛðÓ§x"ƒ!†§ZV”u!ê!†bt.=ƒ_UÛ}¶‹:l¡—…F¯ú,/Djyª0Ùd2åÛK-¦÷ˆ{Bî%$õ“Ìļgs2n€R¨ýñ¶»w“ãnR4­³‹9ËëØbÕÍïæÏ‹a÷ÝA¯g1--¢Ì:UØ ØKhð•âÚEK:rmjXx°†ð¹®  ÍÏ^¿IT„ßeçÓötµñÕÙ~8Ëœ ñ‡À|à˜fjyA·­auZÔ)ËE_y¾5o•¬ D˜LlÅü®ýÿÔf줽¡A0O=ï|7X Å™‘½Y¶Ê€ÿ”ðè·Ò‡È€ãÒÞ¸÷XÕ5ŸÆ°°Ï5ä®Sš„VWóÒÉ~õ|ðíÖÄàè:¾{®;O5Ÿû|zI͈yOˆ,ÇÀÀæD›}çjJ[8‚XŽÂ’ï ÎÍì 7TíO ªêœÚñ1)9}øái$—”Ä#B˜Â#îàPÖ¹mHCs  [ ÝãÔpðMMuÍsTB¡ß¯X³ D”ZgŸ´>?{mÊïé¥èŸÐ#::¸^ÀjbϼACi¥¶žÐÝë¼ÿ)HVtû4eJ`L΋¶5›Zî\È'_âQX*ÔeNØI‡†‹†Œ¼²V›þyŸ»ûç—ê{Ë««þ *Y†ÿ.*ˆ!xhó`вûh/äÃ~Œ“|qv0PMù±ó–ôûNˆ²ÏÄ.HÓm{‹?^qÕ!: G1vqÍ­i9Z[}Ï\íuŸg®ù‘ܺ8&ØF‘‰LÀúDÁD̤jý‡Á@ÿ­BP1Ò‘Ä_bÓò§Yi©V UŽ„8¼QI¬®Í®YŒ¥Ò.%kK»Šyt·×mUîéØlý«º7φ…zêV{7Fr5ëáuzZ…ð¥©X³µ>>ƒC¶ ¢ÇXôÕè‘aùõþ8.qû©iŸ2grGh{ B»rd¥6ýo±£¡¡ù÷Œ\ËîƒmÒãŸÓ:ÖãEZãí î#Û5 ½ÝÊ9é;íKHcmVé^õº}[TìÖÞ܃NCž´wl·Îκ%þn²*q ¥.ÿ±Ñâ‡ÿ¬Z¤«‹½u2(GìßrCàªo«2+DˆŽúÑMÏmrž•a^7õ˜ §„@ù6æÝÑm-*Y¿•¦Ö~Bˆ©Z•Ä}„5ñ=~Â_ozrFþÖéªJ¼6« ì@W/F«²v;“¿cV¢]༷S¿ÛZ`2ôÖï¿rê·ŸSpDžz^7~Æ›ÁÂa=ÞXî\d†Jî bô–ƒôoñ?Ó¢ûKíuE ³ÿØ Äú÷«åÇL`Îg†¸ IËãÀ5â›ãpq‰OžºZÔZ«òï~T.ÏõãÑRïk÷£íi xjï=°þiüæš„‚Åb>vº’Éš¬:ã²ä^ê ##£›iøŒnâöÑçÑḿòcÓtZ"¾Ê.ñµüMâ/¢ uÔ*LÃx•"ì›/‘n r1kßš©yÀŸãg>˜æS&8&I‹w›†ßzù%áºóPQ­_dÉáæ¡ÑËGEE%û• ¾jºªP¦Óè R¡ bŸJ4g¦¬ð¹â牰ùFIMëÛ·ñí®ŸÎ{V,•ÎúÌòî( ½ÿî{væêy2i–£øí\ì ó·Åü1TÝ=ÌbÍP؃x¬¸iè-®Âx†|¦-|­¡aêÁ•ve[[³‹]eã¦s…ØËà¿P²Zw®°O„Ç4ïÞéDèéFŠa#AE¼Þ?=í,¾Zë«,Û3ù1pþ¡éïdÇéÊ=ê¶¡ö¤—Ö\”Bšæ²J=â`5¾ˆ~Œõ¿NùJñ óæ'©=®é%£ÖùA‹/’è|“¯wðÞ ±ñΜžŠ‹ãMƒy·ëAFÃ'÷ãWË¡®;µk¹¶¼°¦é}…ß±9NÑÔTboLxy9íómòˆ-Š~T(å¶fØýÁ·¸wỺáCí¥¤¤Ì'J¾•Ípš‰=+û„í¦µ¾ßÚ*Ö+êb>¬Ÿ`Îyø÷FÄŸé›ë–HÚ4–tf@U.â@wà25þ¥B{ó¦Ò÷c¶ÐcÖ—ç.ó£Î¸¡ÿ3ñ˜%ëWœæuÞÞÞ’,ÔÒI…ˆËô1#°Æ È~‚ýÚ6÷ï®cÔÍÁчƒÅð‘¤<׈3KD÷ëÖ³ýeø¨á[·nuq˜ö.+ä7­ñðÏ* uÒsÔYäÎçtªZèY䆅þTÿ4å|ùé<™/x}4ÜãP^îÇmåÛ&VkÇ’ûÚi#(ÆBùe’gçÉ):.±Î[ÛÕ`Y¹ß€0JEâ†{b0̓Ht²¾Jl>Ï‚‚$ÇÏfßIÒcûû—ìL¦¯Sž“mJ½¶˽Š"Ú^=÷n}æißé·ù<µ|â»wï–¸î©æ«Ëiíü]܇€2:ÝaÉD×dÒ%­®©•íúÅh>=ñ£q—m¾£# û9Ä––é«W¯à£¾¢„à)æžûp@~8N°3ìê¶?»H«s²/vw’3®™.NùͨŒŒÏåÎ…}~¿ó—ÈvÄ ëkùï¶>/…Ø}àÕ|išõyêDj'.êÖ¯‘뜉ìn(8—¤iº{מg‚ÏèïîîÎÑ*Ï‚ã’1 v]Ḹø¢Í ¥Ã{;j¹ïté­9O/n)ñÉ—ét Uaa--Œ«ćgê«LÏáÛy¢¢à]8ªªšmþâîg ›ªËàb`Ú-_!½ ´žRµ>_ ù©×ŒÃ¬ûøÆ¦ë.!á )©ÁýåsƒÁ©ØëÒ°îm÷>ùWÙ.»ñ~c†  Ñ9…§«úM¹¹d<Øõ.I"Óƒjjø`ÉUZZÊþØ]{ ßb…ÇÕß™>ÓŸðV|øa“Úl”ÃßH«Ë4Ý}ÿ«”Q,JtÜ9o#Uý⸣¦þoIå¥mQC"\c@'æoÛp0©«ÞšÿB(Wݵ=5*õS»ò¹|а|}ÊêÇ­Ó­ÛóÇ›IÎ î5ÎÛS˜˜°€ÉÞZªEºíR–˜á²›…¹’Ká“1:£ˆ½´Éß-ðÿPÆ(bPÑ=S&>Çq/4Wø Úmºdýo{Ƽ˱ËÖüa½‡Hî´ËëD‹>ô÷¼íÍ*Ûcç¥Z‡å$ŒûÄÏŠ›0‡GóåëÙ®#&­_zz VÙÎg'¾MLç²Ô ðìÄìf•É÷NÐê\З–*fYV©¶ÿ×¥£±Â2làx¼ÛÜNPûuwª2¾ˆÍú$~7Þuñ÷´Àu“pŠO£‚*B9æùóç_V)…0=>NPêé0ÇP*VæUmjm#q( ·Ù¹‹&c32ÂW†bàâþ³k[Ö× NXÂdùˆ5§Í߃WJòóM]룽ë§Ü¦fé­_r¶Ê÷º{Œܺáäê´©ŽM%|Ÿ.JJÊô™ß¥ð›“‚HIwß1å¤=öö¥ÝéÊK½{Øhð£LEbðLË€þËÕ®4$2’¾Ø†…ÜÞ ™Sît\î¦+*+=¼ƒLøþ÷F8 ¤à3µƒ :{cX@ø6`€ð½H_[yrìªí¢ÿiaÞÁÁwµ·=ŒXëêêêï…vàì }ï‚‚º–÷ë±ámkVY×uôœ+«ß}öäN[ÏÜC}õJy>uÚÓËÞfNð–Bð“ËŽd÷ÞT5n4îËgš÷lÃk|µü¢„°/žû…´4¦z¡¶óõ¶]ÍÃu« ê¹# {ä HÚ ÄŽ“Þö6êÖ@úwfØÒmg뾊øVz.íÇ­,‘‰D„œj¥×Þ››Ð¤Ízí‡|i£Õ¿Dªˆq×éÞ»ŽÐ’8y­ˆe­ÙÙüÍÛ|‘PJŒ;qàƒå{vgð€ôˆ¯Ai!ý»§$¨Ê™ZNe|22FØ‘þ ]+¬`Š‹c|1˜’¥Ë®ÚðH¼:Ù¶ß^GB5ë’#aM½B§JÕV%dl¼áo¨¶y’ÄÊÇwa( ž?è–8?73Üѵϊ7P Ú³} YÀøßîGæÌÚ«ŽAA„Kð‘ogY™ß=ÊòXqÚøàñý»<™ÒúŠóv°•W†­‡·¾ç“'ŠnìªV³d~> ÍgïÊ_Ò[Í7 =yò„ÝûÊÕÕÍ¡»ÁE!1÷æHeáÌž6‚Ò_º•Ä✳5ùíÇü<1sK†T”áшˆ9àL¤Þk”ûL_ÔÖ:rÏÿ.{9Ó³>,q}o_)ÞªÁÀ;_ýÛA곜¹*FùDŒÝ⦻œRC?§§É—;Ã%ÔÕ‰ù·r˜O/œ” Y8”d›ºàÞz›õ5_Ѱ¥[ gÁååÂLðøæÀõüÊ?=.5q¨ÆÞ†{Œæ=8­]K䢹\:Ä.zD—Vc$»B^lècDÃxºni3M³×Ç»˜ƒ–þóGepøôħŽx„„̧”JÉ Om·íŠ? @[•.Å®‡låt¿DÂáÓ}€óÁ tA”?~4Ðoiõßµ¿¬×Õ§i–#×ýùSìY¾:+Eàú÷Y¡îÇÔ3WU»É»jîG¢çÍйzçïÔ›P1úŸÁttç™únâ“<«ÿ¹@|.òR¯ãÚ) LÕ[PnîA\Ÿ©l<×ír³€ââbÓ”a+?ÿM@ßVåt'ÅÐŒ$.›ÿ ñÜ5ÓÍÍù4„$?6©mûï«R²C£?~(Y´aœ±éaöF<d5ÌvXíyõ_h‡³|YÕ‡÷==¦39?ï1ê%Ü\tªÅ¢^—+&ðžAxbNȽÎü4%ƒ<Ïozc,¼¹]<þ(N¼="î6­\º¨°èÚ¹M„¸2»WlàrüÙۤƤe€_ÈÐÄÕ•"qÀ»½7ûéâX„£¹ËSÏêü~÷%<¤¥E½}ûöÙÂ{Ü7¿…×}J'Ûª¶€dÕóÝ{³a WY pDÃY~j^ ý—‡¿û8|nQLWKè_ž<ÎÓð8˨–OÀ7ŽÎy_ÚÀW Jí䪴4¸‰âˆv†ù†Èþ¡t®”¼…K^¡¤–¢Y}lhhØo¾!º>v`êy$œElò64EÒçŠà.—ž]¹æIúЗE3kÉ?Ú·§í­®\'föî|ÝÞœ•ùmi¥ãcØËÊ.É[aT¸@|Ý#²öqAOpé+Ôá°ñ_ÍKKEKâÓ–Ò4³Äà#Æ*­ÒŠ>üìö‘”ĈŒŒ„w3Óè1Ï/}<ê¾Ø®.¹:KXu´êñà¾1zœ½Šn8ŽÉ+nTÿö…°^'ø«Ù4O¦\rAⰼʥŽm`õ:e¡½«CAøUuu "JôØ ½~ñ¾ÂZëŒ`ŽE‡™” Q%µHÞý|õ d¨Î÷%1±€A%ëÏÍån,oÇ{9Èׂèd´+/å.q#®çÑœŒE|bYójåmÜv…Ôfœ®)-]dðϯ¥“4ž^_2Ÿ¯­\nÛvó¾ÏgŸ¦ï¶JtügðGYNÕ‡Ý}ý:®†‰„á§nh¢|xO“‚~àŠèúûû“ {Ö¸‰Cû3lD0ºÑ‹ƒw¨øT?»gQIîÈadeå¹<†»^5\Xw8¾î„ü¨[O¯ÐÙe6sëûûè÷ÊÙí‰<…aí*ë8:Ù¯©++¯e,ÑÞyìJÝåuUJK›£b¶Çe¯ªo« xs^Nޤ•WÅßæo#A†4»ÕóŒ7éá4dé'e½„Ò’ì9éWœó¿ˆl'ò«ÑnŽå.õ Œ¾]úXêJÓ}ÙÇÛÓpaéÔ°Ãïæsö}ÇÙzùØ=:%¥x4_Ãêϯo1£…E1˜X™“å™Á˜½=/‰²û ´Ìh¦ÌwïölñMßÔê’q[~ÉRH)::zë A†e÷.‰ÂÍ 0ýµ¯êVZ[»úÛfmGuÝ2íïˆ×Šªÿµ¾Ž‡œÎœ—]ÎþJ”1ö‹AÑVy¿rýþòªÃÞ‰ßÓ§OÝ/Ö³¹˜rZj/«#ç•VÉú°‹‚{‹™‰œ(‘ %µŠ§©mªò÷¨¤”Ô ç€`ú´m}_Ù1 ÄG²6ÎNÐÜ•x.Íø8È<è eªMè ÿÏŒÖèùù”ºbjdõœòêD©åÆhïNN|~­V.§éc³_Ô´,ºþ¬n ãRÀƒðó+G KüØÌ}(Ù]úâDGFú%jöOèl}}=»ïÚΣ _Â|±ÕŸ·áð'2ä+n´¢!ˆçqw¬8ÜõØ7–lDÎúÊùkžmƒ’N,«Z·"÷à#šˆùççij:¶·¤>ò_ô\\ïNš9W“§ dsw˜¦‰ó¯gD1ç×;fs9šžùNi÷öLuÜæ„„Ϩ¯æ+ê¦È~âŽ/µ‡'Ì_u4Ð@fp)åŒDff®÷/ê÷uWTEñ+;°mnVlxÔ|.¢âÃXé„«d]^&¸äYŸ¦íb§F÷¤é$ ©)*¦vGÑ3=|B€Êç¾þ£7³uUB¤é,ÐÞe¦?VfÍ¡íöž«`ÝvÕôÑJ”#Cw"ø€ ê`ŸvŽŸ»C‘´øw”x­5§õ¯ o5|ÜÉÎñŒvj:$lc¿q…õÓ'+nïú‹®õ;WWÛùù*›ö)Ë#n¤ãžrzŠ/‹²ÆÊ<|ùéW‚]S.€šZ拉Ú&}í*ÙxŽSU}‘‘1!oÑD+РèèE„-•·¹~èÉöôff¬þPŽR:ó¥Ï]Ê[¨TEÛ„hšÁgÑç5úðl–O¢äú¨žë·J71±Âá˜ãÍJã‹·j¡¤éÏÞþùõ}‡Øç»žÒ·OöË_¼N&¥=åê§Kåê·ß"®O­æÜøº²ä_þÀ┉•–“‹‰®Ëà„ÒöëNëw3ÌR¢yìxŠ_ë7V˜Ò>7›gâqï,ZšêRO4>Å®ÈVÉÞÆi$5“Ìñ{ô|ï½½p·f„þ>9Ïcïhí^—x­?×çõt°fÖ7«ÿŽÖȳ`WûDU,š-_ub«¢ ¤ÖË6î8 ” À@5444kûVÆé\TÓÙsþ]Á\3…aí4»þ­ˆÐ9ׇ"2ŽŽN 'Lƒ?ëð?¶V(••——_äÊ•^}Ï|eþFÀé㯧—»Ñ%Þwç¼u>î61…ÇQqTQ[ ÒГäoìúh«iHQ†³xMto[Žä(‘ñ¿Í7,-Él¨«I7ÐÿyäÓD¸9ÝPM ÉÉ m˘%RQOÛ5럟ÿ&B‚¨¥z£…LWHÍí6Y]C¬±–lM%Þ%>"È•"³Î‹×7´ ×U‘s®/n#®²u‰çÒw‹r•êo|áòiêÙ­W£O4ÔÚ6ª´ÒhJ»Ö!s§fÇf²¬= I@õë·ëŸ8xß[`qBÎ;_~÷qº$lmYË%ñQ0@P‰ áU0úTŒ¤Èµÿßy½gyE@³•ÆèïU‹K,6óÞ@ª¼«¢úë}Ãý¯,yƒûs,©eCCSƒ¯÷¾k—ù¿ »Ï.®±Ü×§loæ}ˆ¸êŒŒ 9&…  ™í´ûìÎ5Vºî±Þ AaÏ!è³}{pPX±È¥õ{~?üwÛS¹¿7òÕê,£?]Þ7zµŸ Gɉ–CmjªÍ®Îø»‘U¹D>%Àª‡n÷MÔ©ÅóȽ¶±ÁÌd¤™„„‡)e5.íø[òÎߣݽ½Ã n‡_ââ,ôñ!( $êÓ0 é³?éAÔP2kìF ¶Òz‚]žQë-ÿÈ(¦íÉÒÛáêc™±Œ¶Ë/{7^&è7ºç–”(žÎû4 "a¿sˆ@A’ÊO€T–¹2·ÆV87¨jð\Û}%BŽœÞÍUVIÈ÷¶òA¡¾zC4²^]ÎùWcì-Œ—Xíí¹ü"´L7Fž1=j8Mæ¿Cšv„Nõ¥÷g¸Dú×ému}ýäàè„+­Ù ÷ÜI÷ET‹KçÞž*í‚>è1Kt²·öÅÌ¡%|½/¿v}‡ 9á­b@ pg±Îñ¯ªkÞù%ß[uoû³“‡ª4ô•Êý=:kã¢OV¢zÖç šhe˜óÉmžpr‡û\½p\ëÅ—¸ÿJkv·× ‡ULÿ›°¶8¤y>þ+àÎÐѺ²[­7ö½ÔL™ØêæëB81!Ý‚|ýîÎùˆ¤-»ÌS–~ÛQQ«{ý±‡NAÀP´ôÈ~ùˆýФ›ÍT;¼øÑÃ2ü•ØŠÊNªO”ºíz$w¨a#Õýž«ºõ~qý‹ø+IV.k(·4ðŠ~2 C¢Ø {‰!â´“JÇËóñS­ÐìdKC‰’OÓ…S€Z)ëlDüš\ R^y™ÂS΋.Üaâ'ÿ#€añ=.<È8"Woúâ¹eà‚àÎ0 –üzût.é3#ž¡ÜÓ—_£ùNž"€´3ÚO°û™?ØèáÒxs± ãÌßA~ùMÒÍüDqʳ¤Û¾Fw‹é«ó)¯º+½:MuÞ¶/Ñ ù'齎Ù&Né}çk)ÅŸBï?*SðNˆožLñR6¤ùüŠ& É0&\$ÆôçgFÆŸù®{†DDDë]ùŠqgb—P_pÕvo,‡JP33_#ßòç=ÿ»w È0A`Š>EA{ìtqôç\rÊȦ”ÁÁÁo¯ö;uÔ«+Tÿ(öî}ÃXó¤…Ó@¥ÇÌ_~Ö©´/ïÃãï~s¾Æ2KwòÕl¥« ’41‹»ôh*|ËÄún´åÝötþzÐC#³(ûû%ŠFiŒ/ÃÕål‹žìÔÉ411çn¨D\ÑiÐ49ËÿV–a[±>š‹‰‰y´¶!A©$'ºÎýâÛý¬K’WÕëW7%2\}PN^¤¾[ûL>))©;øb—B¤Å/óBÐÝ Îû¸¯HÐ=êÅëÓ‡u®v[³ Ûˆ)>Ä«@‹Ëëˣõ*‡ '‚›c¶UlмOàŠ + l¹öÝ{Æ7FóÿEn|üý§™´€³¦ººò T7‡v!&˳Á81ëApßeïQù“¹ŸòäˆÕƒÜ¬ZfäŸ÷2T¹Ëjðs³LÛ<ö Ïcت³L 7Fr£à-d¤œ¦~½À­,Ø©ž—Va!" ÌnÕy@f yîùî/R·1“轃Á|½{e~"±žO1?‘þ,‰šøCd¤*‡s´zâ{ÿ÷jk¥ßÇãLŽ H‡T0n¹ÚM&ä^±D^qûjX¦Ü~ìâ¢C BDMÜ-ÖÎ mq<3F"ûuuL‘ç—wn”vRF ¬qf‡²¬M“æçšW±UŠeñîÇOJÈÛ0}Nw¦x¬bœ…¯JÞQðkªW»W:ô ëX¨du™Œ[+±rp(w|¥À¤7f½bXžŽ"›{HÞ·3¶¦ ?®Â×P§+U&QpÍ7ß¡Z ÿ¾×»Ñq}9ßSwåàtó%e¾F^ÈÝÿø`<·—ÊdmߺY†Io+I_/¹@U4'ôüŶ¶Å‰µcµðOéfj£££MàL7Å÷Ô>Gü­ ä<î:$ŨU!¹ºÜÉô5ÒHnPQ²µçé&s¦|Ší\è´«ì/¦â†´tæžÒ 1·Úuª–Ö\¦²ù¦O@õ™Èqz²wï—³ÊÙé¯UqžAX×åv5p*YÈWÈ­1¯@£{c4¯òÍ4¿‹Zô:yÕT’Ç7ˆkØ¡æ=¬º#iÉD¼"£¢XrI±¥wIšXZ‚.× ¿"•Kœy#0èŸUæ€\/âÓÄÚx¤ g¶ê[臆yÏá ãûû–ÂWo–ãŸ%Üý3"%@¯0vBʹRý&¡üLADÍF‰•ÁöU‰NöRŸjjõ7ãͰ È-h@Ì©å«[ýŒ™ œƒÅ\–|4ŽsZ)'´±‘¡UÞŠuGûô©–J–ìàY´÷Q¡–7`Lo ÒÒâ'Yð€!榲ÿPÕ—”¿=œÅð9ÊXköC¸°òÉÞ⻩¬Ø´~Ç“ª-ˆrú¤·‘&N.;_ô=9<­Dm¶ý(Œ°}##÷¾ 0v\§Šmgë`ò´–âÓ§¯7°g"Ïað6œ¥ò—P êÝäv9¿{˜p½ç«Æ0Ñ¢uSûߣ3™ôßïœ#~ó“£Óüû;T÷£A‰Ñ&/Þ ï+{׈§Í“²§( Ëá™ëÙÁÁcáµ"ïÑî µúc±Ìz!A¤q²Œ6m%I€|ävâã¯1Ye;Jëiâ–ü‹·z7êz{F¼·4Mp©Š>àŠTô¶JŸÃèÃXV:,ÄpLw0FÆezc¤8M%YVÃ_þ¢ð‡1q€ûûÞUX€Ì`baéƒE¡! ÜÃd 3èVYù[òc#ù±Ò$ÌŠçm1³²´Õy±F-Ú0*©ÔwÊžçŒrÞž‚ÃÉ}5Zc$]·wãfïýÑOÎE¬£Ž*)hÁAJMmègÜbám #ÓÌ@þ6î ‹žÎÓb† ¾ûÍö~bîló­5ƒn‚yM–Ñ  S33(Ó½}ßS•ÿTZCBi­G½…<6úÄëâhp(S†ÛûÊ•–ž^G™ó¶AªB×Í9[JÈ ±oVÖÞõ â\áõuåÊWã0øa§þ§k_áx¸Â€†äbb²‰{âNd=Þ_c Iùý”ÝNÔš6í‹löpcËÄ ܳŒ­Añ6•×k­Yó¥s.04”÷—تEõ0 mM"\R¼㪲¶´ü´ncÇÚ°÷œˆðû˜(Ôâð×=ñoAßÞn gú/smfG1© {7<—’Š …¯_gmÒ¤èøaÖ‰èY¶†½wYr YýÄE‡¥öÆ®<¢öö¯9!š§U´úÅ`øF—ÃEŠa!R@—€[ù2 ¾£Ôµ©æäÝ$âòɘçËAgtú- ’p¤BíJiY";—K3Lù  *ZRþ·Rá9Á_”ÕAÐýPø•ïÜÊž©7ˆ™i9ý3nŠÃ)/Kûµ¤™â”!*Ùä!å^K‰ŒŒG¡ê!$lc·‰wFðäâzí;)²ÓÒhŽ·§ÇwÔA ÂîU„qÒyá‰æŒ¼e0ûë#È^£ãúLn1£Ç¶“iGTj±M^ÑnÛ•…º¤ƒôÄŽ?9™™GÒÃ…ó>}Â_ÖÖ¶HßëX žw‚ßì‹ù‰½Å' ²Ó}Ø‚„IGŸï9ÃͪÑ%_VåJM=LÔÓð›ÌééùkØy?nމWéaÿ2êšßfftk§öȨ÷÷÷ÝüйÜ^ÓÒÑMÍâ@ÐÙmà3³²Ô©È‚C8Kð¸(?U±j¦&… ¦‰v†ÅŒ»h¨>Ao¢çW—èž÷¤#\cI`WÒ»yµQ“…“S% |VùH¡oý4‡îZÒñF~ñÆA/[5<Þ%èÿ††U2ˆ•©ŒÕM‹\2R ¿o±nƒTh=›7B¢¯8F¤ñçs”‚z`‚úÐÁªÃèøôP¸ÚÅñfv4“†åÖD©´¤dI=Å‹D‡FFÆ¡ýN*;&Øl`€$kºb=}=Å™fÀέ¶J@—³Ê;ò¦ƒ´êd‰•Mã ¿8oùx|óór¸†©w“²é@ŒÙ¥³Îå“ñÍQðmãÇ»óó;Î4‘±±Ù“åfùéw8¥!¨ÅN1xÁ *Ù,ïþŒ{¶áO ÉL‡û<þmâ"àÀÍÓDÌÔ¼sB]¢Cpk³. „]õ&!³…¤EVãEîûí$ÇgËáLœœÃ;Î8ÒÊʑɞRrñ\Rú ¦ÀÀ(/@š¦&üþÜû$ýwÂA“Öj,ç¢n“08«NTôãnS>`²#µv0&V0¨ž;»˜æ`0¶+ìŠx¸ºïºekÖ "bb˳½Eçjd@ ``?ÉåSïÃP¿$¨3+#ç*L@µîm.™¼@ߎ³7¡ò}JÎì{\F³ÑÕD¯ª¡d×çsˆ«Î~ìˆøø¼Û`@AVi¾œÝM¤ôóo2³èÖ(ÂS¿³…pÄàDê@ ¼½*ÊF†¼¾ûñG¿ªj+—?ÒvõWÕ'5O×(mSzk& ð½€q!—Ó¬§Ü1{ÖF¼@£XŽ‚ ©¨/‘‘F.õÿ‰Êál w÷ºÙmÐÈ{QÐHË|£‡X'}Óiò³$èw^ý2LÕxgð4?<—>Û{a2ã–ͺž–þ’Á~[›°¬¾\ݱ~¶1@ܾöï" ýߤ-àÁ=Ý49ÀÔÄW'h4¿\ºñ)vu§Rå¡CÿÈ(5ûiF­ÒçwPÐ&fåCt½›#c˜•ƨnRûÀ²ÙP­5vUUWi­ãZžÇ‡ïÆVömøî×ÇãN;µkSÊTàÃÃèˆ.KÑ‹¿õ4²/]9%Æ6Ä÷©¶âqÌr–MÊû;Yn0·Û¤R¹««¢ v9m²^‰,/°ÍÅ¢W§Ê;û6j‰9ñ#‡çÙí Éæó>;æ|@ú?I€÷§žó6+•èÕZ¤×Rý.Ù¾aRÝ·•&£Œj×çøÛA¯ˆ4T¢€ó«÷û"mì6÷jè\=ÂøñãÇ‹ËyD“úŸOœýì•1˃¥ÆÇðY+ Ý#Ú`xWéU„$ùoiFWVÅ+dh‘‘h›OâaM²½Ól€‰¶½“£Ö/‚ð$"!±.€åçx¾PйÍÞŸÐ!( æþ~(™ÂŽ££ ç•ãØ[%Ãö¹ÖClÜÖ(¢Ã©Š³äKê3cüŸK'ð«QØ5p˜þ¨©¨à’ûÊþ ‹„uÄÎçr:¨£§¯OíÙ3?œ§+xïëP hð0¶bª =7…‹®˜q†Âó§÷Æ–Lª±„ÚÚZþQåxÅê¬ËW-¥S³c´,zy[¯~žîúLÏJçS¸ÌØÃÑp¶¿˜è©ØÙÑÙiuu¶/èVv—€@n‚&º]P‚lc ¼Ï?Ä$ï6¤µ øùFl‹±(¸ÕÞ÷®í¬ïí=«ŸÏ=ßûj…Dó}D•;ùÍ;˃UÞ×AÈIüÝz*N¶«O°’hIˆóÖ»ŽZ;{D8ÔÏò/~ xÛM›SP kà¹ßîÞÝß?ö‰”“ëíE,þ[PÅkŸjG›É²Ìö5ùƒ]Þ¿ªØQ vQ9Û¢•Ì V¼nem­,o|øW^•ãÍÍÈ‘L˜w“Ø­W8~ưr<5ÿwª`³H¥·íèg¢|ÿú Lеûçë]ìàyà‡%ëA*iü¶¬¹¤ÅŒÛ|>zækàã‘_=}š×Ý;\e1|´ŒNe~ù…!Xe:»˜|'Û ©¬¨öåN´‡ÇÇ_©ÏÞW8¬J‡R iÛÛÛ7»²²±)8fjš%7 ø) úh¹¤4KO(Ý%.ïüA $g4ɧÉYð"Ç[·Y0½Ê‡/M¶ÕQh¨â5(ðm°ŠòÓç¯_sÓ%6Cyç~­g§}øpKèjïGÝnÓåJhd KÖ[!Ä'SV,ýR»³õ.!¼¼¼äS \ŽÜ\>7y­²2…˜'–í/« 9d<ÓC*X=eZœu‰®ð¬…ç“m¦™w|I, À)¨{ð‚¹Ø¦BñqÆÐòêÊÊÄ,&HŠ'‰…•Ù>×›,Â>ƒâ$ö¡^FhágE£´<Ä^`P§0 €ó½_ø¿x>4ès'ÚôìÔJˆ4]Uõ'ÆË°©±³ô•QêVVö4쿬ôX@bè áuªÕÕ½BáIżâåo×U—ËEyÊ—Óv¼9SC÷]G~U; Ÿžñø™%+ÍNšÉ¨ËãúvÊ+;8\-Ê{ÒL ý;<ŠZV¦ê±ßŽuÔA.í½ÍÂ1ù¹Ý¾EPàž«ªËÉ$#Ëã_c“壠S™3jj=u–™r)¶Úw ßÃ7Þw8¿ÐåÔ­Óùß½KCIïý­’Š·ß7 Z³ø3­¡c60VÇIô³‹=[’:õSýŽr ŽmDï³úd0 q~mI‰JϹü\ªü»Oeêp€ü ñ‚Øñõeþëî»Ü> ÜÊúnâZzíK¾D7˜{Ÿ[ú†U›”Éxèmã~Àc$ù•n¥õ™Úæ¡Z¶» é[øW®÷%†-A‡ÅÞÁËr]k*ç.÷85©SÃxg3Úœ6?‘â¾IýáBÐ/2à\ÝÈy[EõØäz:ùùE‘»}¼wÈ Þ¤‰Ê‡Uõ§Ç÷²r把nïÖ¼L"žSÖ3Ð ³¢€gåËOìÖ‚^OŠÕ¥dbîñÐ-ˆ};sÝö\@ÚnØö_Z’}Œ§|y›à ¿Wݾ1@íû¸Ð˜¸Ìþ¦­ŽÎül¾g(n²œøê«rÅæL-ækS2×Ç'à9®ç`\ 9áŸ}Ëxd“òDü±Œv|9º¸ë£Ñ‘!¥Lm8Sã‹Âü6Rš„Uu¸´óïoa'€Í,Â> þäÏ•ˆ)·²ž“ÂØ“Ÿœ=dO•wò_t¢&vïBÅ‚ƒ$ëSŠý€´Ï”JÈT e#§µäüà;OÝyDîV«ò ïü=až…Gß>ÜÚv=Ü»Y}âyå  ¢b-™ÓSæÐZkE·åP’Üž35vMJ'â$ÝÕ™‹Æ(aK¹Y ×ëÙDçØTÂËsÑ­XáXÀ6wA£8¬± ¾S7ø{÷¾ÍÂ!q¢ít5=¿’WÌëéÙ"Çn&**æÊÊ=açËÑüV1‹Ë€Œna!A†QŸÇó·U²óJ¨T:X+öÃSP½lr¤To‚³ŒÃ”¤^}‹w?ár^P”Üî Uéٚ샷4ã·}þñãÔÉŒ£%ÿ«JGøt…Ô$‰^[ö'ÑÈ““Sü.Edò"³~/8Ýã•ï.n¶ÝªFò<Áü5¹¨­ÙzJÒxñ~jÞ>°¬¨^>¹ì‰Š%$'+3 âTÓèC) :ò†ëaŸ´vYÛ„=ðÿQÈ—ØÆ ÃO†ÒÁUý‰¹œ\…v혫‰EžvMÚwR ±Ü§@¶Í»ùAõ‰bbW£¸“ú=V(µoñê~5 b]kÃ'Ãp¶àœ®fÚÜÈ]<™Ö¢Æ3g‰•19Iê‰ÇY³Ù𠥦ê¹'oa“¥€¨WzDH’½­ œ/ÃÊQ*)ÉPnH‚quåx¸ÙÄõfþ—1Jððæ/ßá…Wp AÐg ‘þ,½ÇÍÛˆ·’e9Ã@•Ml¬DXeq­Wè¸Æ¤’eR[õœòÚa¿ PwYcHSbeV—;rùEæ½j¹É)°*ŠÈ/êÿFÜ×îlÑ~š²jFÇr8oeX}ƒn`~OGôµLLr…¨â&àç=Lw(8AGMnÖ@¼ýæn‰ý½‡÷gDJg­OeÛŸ$^ŸÉbß^€'[ŒZÁÀÛ³S'ëgú§¤ï‘›dl â#¼ð!ìcûÆSnó^˜çžYc¶sònn=5—¶üà¶Á œåã3¦ft_Ê%q¼Èek2ÿó4í7­›)22’[ëÿîY¦\BVâá€Y_u°Ìefl·]ÿ<Õã÷íGUó&«éo`ß  Þ Ám šS~ & ¸ØîŸ²›¿8“¢~ø $Mì|q®—¹ˆ‚VœŠ.ܹÖÓ?'ÌàM°ÅÊ8­%¦ÃKôWYrŸH±{ªMC-q5ØiÛ¿r AJ)Ž…,:UgW n‡td“¸SÄý+~÷€a5Î «-7+,0ßþ1´dÑ N=ÊNQ?¡}¼³Y ÷–”2ÜY6¹à¢¼ÿ‰mW’@´Û;3ñ2µý‘íQÐÌ{‡2ó€€>Ò¾â™Öÿ#€ÁfŠKGô1«üt–¬Òr7=9i+P™×gû¡€'¾‡ s丸)~ãZ¬[udd°FÎßa6¿zŸ[é[E½rh±y´n¹19\¡LyÐêÿï·~à·Lº¬j ÙT5œÄLJ=í8rØOñ)JœÑ5¼bŽð»ÆÈʲ܄׃Üs^;4˜ëK¸CÒK…×-H”|x&=PZßCNm\¾V7kÌáüZ xR v„ݶ¶ŠR)ë¯Ü¨ªþ¯ß ë>­†óûÏ`ä¼]—+¥n?„ ©T@Szl›õt Ü¥)Þl÷º,ä×sË,³­y6GåÃÕH‰—Î÷|:K^í1kÿçý»cÅõ¹*wH±þç3Ô}.Ö§®:Èv%šØ¤zcó{'͘–ýÐWŠòË3èð¬Èä…Ô(ÝÚJHù×¿Õø ¦?—BèôKð{Àém|¶8¶]P£¢äŠ×,Í/†òŸ®=ÎLÅD“+¾Ý?µøCm?[„ôIL~­ÅNÍ LlRx ô ¾ÑuÏ­bÖÉ PQ¨ÌHv94uj87uzzªK˦ÕÚ~»$°/UÞ7©ŒiìVÖ÷ý÷â Z‚Ÿ_¨‚´ÍØ|íì¿´Ì’K 4 Ó¡‚rf,£ý,¿Œ%2Ç÷í±0Ÿ«}³u¤Ot/¥¢VØx_3ƒT¢\~Ù9ÿ nSÄy–~#3SB‰wcYqÍó§µµÒÚ¥ïtP »ÁIf’—YÙ4Ȱ‘ „3:,ˆ‰¥v¾&´²¯©Î»˜þÅéúxÃaÎMÚíX­6>%ÿŽXúï‡áª“³.äOÔ§dغËmU‚|«!èM‰¢nb]“V&qN­‡‹ŒU§ÍTFâP„?ÃÎÀDpÏ·A§JS›*ˆŽ›Ä  >„5Øõ>HCÙ²©À~ƒ(.ïwZõ.µç5,¢uÛl`%S|¹9æ_ùÉíÔÇ}Ðx̓…ÖѳÓ8þùR^ûq*‚ø÷û1ÐÏàõïÍÂ)~Ç,¸¾Â ¹HõbõlÄ›å1 N³uS/*_¹wRRSû ïñßý6Íl:ŠÚôäÀ¶‘ÓÍì>&õf(š5<-;KÍÒÛô²¿¾y]ä û\Ç*cbÂ.•IÒ"JŸR°ÑËîšø¥õyí•7àÌds¼ÉàÜGTê™OM/‘‘Îç¼u(Àðí†ù\&€D×Ýêg>ÜcרæWPÔ±·5ñÀÀ¾”ãø1èajF­ÅÕê™´ÏfVl;uü™„Äy㛿¢ÔåÖ¯Se5EK ½•™»åƒà]²Wþ=À›JF$Œˆ9<Ó»š£4Õ`mˆSYO!YŸ'Ý]ܘõ“Ünä}2ÈÅj=LÅ]寳…H9<ÌK“¼M£ù«E9ì9Mƒ¥ŠSÌigã ¡—˜Î–UZïe˯•À­ŸžlÈÉPËÙÓq2OÞðüŽÚ㺂Oë¹çGˆ11Kù‹ß¶šÑ¶éiÚ]ïæ»ó^ã©°ª?t„ItË3˜×'°©OÖØcfeOÏö³ù?ž/y¶2s¢ ëà+0À› Ò;)U†z¢l'\[òɹ$å:)Éï ƒ‡JÈ‹gï@AÏô‹óÕ'M¤½Öi3EÎ3f*+]Ž™v‚1i 5¿e19 ËÊ©*I䂤4úvÆÞRðD^ ² „Xr›¶ž8 «SQ!ºéÑœ.Q{¨cÑÑç«:Š[žNKlj=NqÞ-*Ro½8–Ölö7~¢ 'AUBod¤<°.Õà Ư_^gûªz|GµôÙmtàæªØ8«‘KÈP”t¨ÅÞÁ† 6Ð|¬×fVkRyu;ü•—"_^KÉÎúìæk´JP1€htöøE‹ø˜·ž“>2“.ÁGýgðÅÍÎ,ÑÁ}¾¬ŒŠ×|“´vcZgýæÆÊd•œŸ|Òïï7Bº—BÒÆçÊ>zÞ³|n,â®Ñ sBÌî˸7{ï+¦YnÁ…}TömEŠ©µáoØßt=ðìÁTáJv5ÊG¤4Ôï‚ᆤn1²°;¥&°Û¨A”.Ádsñ6H—™ÑQçj Çò¥æ+å}ïÜ,!JYyœ@$‘{à›ûÀ‰âð8‡Tµ±ˆO1¯>ç’üJ‚®Ÿª ætGläÃV„óÀ¬M\«žÎåæ4Æ#Ô©jÃA‰|xzÅsD©ù`‘rI4c5ñ É©Yû¿0ý ÜÖ°ÎÐ2/ïe˜êè¨Foµs¡²;ƒ`æÓ€±Ûæ, é M׿2wÞ¾ ¤_+'jØSÓñ¥÷}zõäHÞí§>/ß ¾"€$•D^@ *\ ‘»Y£›'²Œ=šbÐÀËt¼ýÄ.YÐÄÄÙÅôéîï>@p˜çã¹ë)Ï¢ø¥8Ó˜oŒÊôIPdâ¥,ð«÷\K³2›cÛ¾/?Ë'–•±y•XíéCðKi·mîsõâ°Yq”; E…jKÀÁf¼BžkôIPÖ2á=½òñÔÃÏß l×§L&7W{<Þ…+ýêìB³-ýп"Ã|ÉýO%›yè¢êÖcṴ}šiøkçÄzíà’ÑNŒX²øþnï½mu¼û1æ@ÖŸq…Pú¤ ’C[ï}OU^ëWëxÛ­§„¿ÿFNȃì!L0€5ÔŽ·d­—ôÎNêcdHð—Š·¹w…oøÒžM'*þWý˜)rüå¹””åŸa3 ê_€/ÌR¤Ý>ƒU à2÷xL½7¡€+QˆËõ÷êñxþÁÅæ*‹ÚP0‘´ûòÚ"úØy;¥v5 z—žíí‘¢Ùòy»ã Çfɰ˜P-Ñð  ­³ü-°uZšŒô­›`ù“¶šýÿœïHœ¼¦i5·Ì™èh9ÚMDL+:õ1Bý§­åNùÊÄÌŠ=ïP#;Ó;ägµÌr½[ ¬ø.N•C)îÒœ¦_ËNİcúgq¨2µ3>DMó Ëä‡<Ã¥ëYjÉÚ¤yp}¶X/|F¹~:DØÏf.5zqE-+Wã5ôÝ@ÇVüAjö€…K`ز¥µêÆÖ¤´ÏÒm·ž^¹|•ýñæx¨E0Ñà‡,ˆ£Øñüa¯‘_Ùá=vµâÉCÊçcEj­w‚[œí^ûþ3NNÎ.¤j‚™™ÒI¹@5|ùœz„¢*ð6g—›=.¿T þï^ªnU¶Ü•ê×-~–‚ûb*VðT pùÔ>Œ×fù¿#eT»ië)ᥥ "³•æú ëy[ãØÁ0ö¯öFWxºñaó]ÿÕƒõê÷•×õÓVœº}}0wȹ©iÈÌÌÇ¢£ÍµžáÞüׄoЖ]ð]•¯†¼>ê1W(èyÎ -zán22DˆI³`Ä•#­çMí’È¥, ¥2—ð\I…{%œÏÿ„ À4Ê2àŽÊuê3L·sµA² ËÌþ¸ô#ýÏï°)Û —¶ÜNÛ=ý¤^:ŸO@_>ÊßÍ–õy9só_E3jjÁó5Jö^™glͪ€ë#6˜€"²Ù¡‚€–M¿`¥=„¨«Gùx×§x£—5 p´-[:W^;õ©O¤ÒI¼ ;SÚ2V¿×Ç;0N`0ÿLàøG7}þâJ”Ï~Mv…ê>9ï aÐtE÷µéô³ižÊ„'âÛ€ÊÎÆ™åñ³)8™%Ѻ :W;ݾR\ç4c´è¾[‹ŒÔ»©aà]ÛssêÃR x®:ÀŒ êÏI…[Ö£)n¿mqÑOà.²/ä·"}×0è¾¼>­Ò=Ó¢¹§ªl_² @¡Ï$6×½ £s®9Ë,QÌ=üÍà=Lçÿ¦VÕmÖ‰±~•¸{µ,È<>ÑLLLí†ÛëQò–ûg¢:÷OZGG2@Þº±ËjÑ0€ìÆkWUÏ=ÌEå]C&/¢çt}‘{ó““èà|˶Ûó{ªçæƒÓœ -‹«†J”Má‡ÈÈ ¯¡G£8T¶:€/»pöî¼Ç6ß?Ÿ™Ñ-Ú/Qø Æïý‡¥åQ õ]´/“¶ÛMâÜò¾¹¸r¬ÍÏ·Ù᳟÷Ê®ÙmR´‹iå0·ÈÇg4É%ycjªê-Ä1-›NÖŠI/È};aª°&xjŸ_ïòwï!@­–×ð~¢kÙÉDì,È~ÒgKXíˆ ‚gWk):er‰ZºÇÇõ¬Ÿ_§l áª÷í-AfRcý´€yÑïß{∡Lií&]ÀO·l¥”Ϫ¾$UÏM½ú±e ¬íp‚’ˆ’+"[ì£É;E‚««Í·î6=·Ÿ÷|Ø>±Í; CmŽäwçmU×A–¬5¢w=dl«g··õ¨SA¸EïκDŸíÔKë6ëƒçëë§hWös66òÕ8Ü+Þuw;Wà 8…X„èË€ ½ã씦M ¯F€ÁšM•V«:õê·S¼Qßó8»½™!"’Nâ”Èuüýøstæ”c¿Òìç–fuË5xëwí÷²ý¨~íy‘ F²8§‘%½ÉÇ'zÖ»>>Lp^BÅ6öè‡üþ »›ä⌊\Z×eÈþTëNvRÖE“×èÙô|ÞúŸt¢'æ³ 3&&¶³ŒU61_ºÊ½êØÒÎýe(ÉÂÉMáUÑc[/wl–ø ^ƒ)Á þÙxKÇ÷OØ£É>M–"‘„§ÛÕÀËûxW=Ngsâ«æîºØFª©R¸ˆ.HyÎÉIÈ;‹Ü·61ÿ»w…¿FÒÔÎ:h¨m»ÿT3`NPÑAC£WOÖÅÉéç•ÀD,HŒˆéyU!#±£¹'`pÀÿµÕü¶™)LÈ+jP.êx ’NvÆ’ÑùXÒ ®ÈÄìœÖ­–Ðu¼‡D?»W+Çóòò±u‡ö8‘¡ xm‚”è`ؽ¹V›onæònXjºV—²ëª6 ½;ï¡ÀÚ<¿C\Jz©¦ïšWTŒzA,Kÿ&·|y juxÕœ7³z®<&EWXFGÆ2Gì¦ a!Ã>ã4ª–÷s@ƒ{tÇX†\¾¬‚†œm‘¥ƒã*`Ce&Òú šM§s!µ6hÆI":j… {ShàqbЄŽùúuÎE0“ªW;ÑÁÖLîʸÆTâÓàË «z«a˜ÉÂ]tž`¿¬é'¬}âÓM}®¶º–Ï(bü+oä©ãeÍ{Ó+íÁQòÊ«wxslD»ÛwdAÀQ‚Ÿùê‘… ©‡žÎå4_Ë1®1Ùìèº[Ðû=¾ LׄŸ×t¤Ì ð^£†€z¼Y~}{ÏhWó,zÜ€m~ªR:IÄ ©z>¦>­ug,-¡3½¤ûc€nÞ ¢Yç(€6´ÆÝ† çgl8fm ª`¢!Vc uèçóÔÂ!è7¹¸‡Š6ðþ]N§ßÖHš»¯ZЛ’²ÞÜÝG%Fþ€Ï¬èT÷Û¿UHΣx"Vù"V·õÓÀÔl ÎEóo=y¢êµž ¼[•ÊÁR»4m·©|¬]¬~﹎¸n•æ œÎì‰ûŒ9»€x£0¦ü&¹–+’j¡÷skv›56‹™Üºï¶Û͘»X®9äÂLÿÍ”EžÈ6w¢Cð»Ü\g€.¿,Á+ Ü.ÛyÁÍWâD>ç!KMç/»{c,Îh=Oâ±§fç„Q‡‡Gß Zò_˜sÍ ¢ –êåQ? ¾™|} Wßl}þR¹šýrèÁ—X¦ýíj,>nŽ3íÔïZß¾…¼=ÍRMÐüÃ@0†)÷ÁÚŠæÈE¾Ñp/b0€ïÏÅ!§“re¸ée#Bœ¯Ázpb‡ØèîrÇlÁèèú0G5ÞJ E¼WBi©ÉcGvZñï##{ÚSE>hCÃpš¥й‘O"ü3"õíÌÕê¦4 / „*G’É *Ý¡O6‡Q [¨ªG‚¥døWÂÖóý÷'„NýïÏ$Œÿðúã‘+” ›oŠÓÖநúS^Ñ™þûËèÖ¿àƒþ5áˆþûÓïÙBö%.Åd€]XˆODâÑW¤ÿóÿ/¼äÿòÈBe=R[•âã×.`ì!Ñ„ïçÜaòÿ‹=ÿÿù#@¤S×ù?P¯ÿû\°ü¿ìOHTì$V4R~zØ¡ÙפÿŒÓÿ³ѯ'µÆòî\ ÿ{)Lèþ_ÆÉI4äë;øub¸ÿËýßú×m[¨”…SüHðo{dÿ׆ÿŸä,ÿ·ipæõÍYžÚN)ŠÑ‡§Þp}äï}1d‹¸…Q¯#XONÎèÿ>lÔ»ƒÔ²ó eGäÇ7 (±7óÚàŒàïß”¶zœžÜ»ÿjÑ:qTøûßÛªRÌ Éæ¦zl¸Ø×lb\üÆïÖß1êL®†¶Ø°©1Þà!ûVm‹²]Åý5DÅË:ÔÃæ_høP…œG}ªËîÉLSÓ¼Æ_ÃQólÙ µì¿öTÀûža¹¼TE¬…xU{{E쎱‰œ‹¤BÔ„K»°}[£% Q ÖßSš\ÖÇIN¿7Þ—ÀûûvŠzƒ•]¶[|:[n ðêƒÞl/—^ë]!îßÇC®@º•î ¯ÛÉýkÜyk7êJˆmëôä"U/2šöÓ‘¸û×™‚(.± —ÅæKÇ!JéÑO4PºÃöp ª¤¿Ï _~ô~ÃÖ¹ãö}w®×øÄzµ½›&<ÄþÏáQwàCmEﵺì|žÉTãükÇC?g—cëi»É™‡7uÍå€îU'5²ïDyñå.ßW'”¿} KX=mø:®Oi·Žì3òÂãjkjÛ¾ <ëJrÑà< ?)ºuv~ßÛ@åäÔ¿¹z ç¤ÞÃUjaG²[ï3r£õÏ›i^):äh[çBF§®É^R§W7¢ÉŸ÷þ½‰ï—ãJ£éÄ´£Ç%%‡/D]u+aOt®ÆÃãŽÝkø-U•o“íVüEÆq8>€q½ßEžŸ9úò×1ƒ„ÐÝ)}RÇÑ#ô©ƒKÐD§ËÖùÑ/tó ƒTmŸá§˜ß”œþ®>rß9´{ñ OÀ{®þPT¿ºzWǽ¯)l±«¶˜˜þmÇÂ7ÔÇ5¶Aø CùÜ$û—tákÿÆü}h³(ö±ïÄáaB_e穈HõZÌýúfyÏæ5G–Fb¸SGXÛû•kÆ}7Èï…:ç¦7ñP@«:'ÇÓãä®>v7×B$ØþϹ_ÛÃo¾·šíxšJÓŒÃ÷ËטjËBñ:¬:š2ÐÛÚÝÞ¯«««îC,ÿíîˆÂÚºgQs8ÛöÚšPÊ ì` [æ§ÉEj:¿ Q1±²z?&ÄTÓÞG‡íú‹ÿ›bNYMÍÙƒÊ7¶Í±)¸<÷'4D}ï-–Ö#‰Y^œT9Í$žº® ¹©äæ>íO0óhœ»ÛK4¡ûâ=†{Øcc££…Z•–£ú®‹þvG›!»$ç…^Ö§)øÆ8¦®bT±­å|ºžÛ›¥ˆù¹Æ"Uœ¯ ;Ÿvma2±³\ˉV~oy Ý1ÅÏœ£âÉ:µç ®¥ß—ªNÆ8¹éíÈAóVwJt]u‡·3Ú›)„u”ïÛZ—õfï}0ïË$•ªæZƒ(ª×…º:Õ¹n¹«Ü¤÷A<´¯“^ñLÜFΫ„eK'ó—Y¿œabR¤{Àä[§¶ÕÎ. ÍæÎZ ÇßrÝÛ7 ׉>/šŠ’X(VAsæŽg4ÀºvÓÃ:q£ˆ£ØSJŒY— Cº/в 8¸Guû"²P\›.+ÚŽTÌŠôøTBYû{3±¶X(k¦È+ÇyqàÌ4âjørþbב”‹Xþ˧VŒô s•)ùÈ[—îƒ}»õÞî¬Y œMÒ˜d ËNS2¤_´¯K[ƒyk?e‘ …[»$ý¡7ÐW:óÒÖhéÁ—¾¿ !HàRÖqòõyÙµDTˆñù½Á…þÿúèÈ5š¾8tbÂð¿J‰Ë‹=7|÷¿PK’nYTâPS:¡¬°err.iconset/icon_256x256@2x.pngUT T(bT(bux èè<}T]¸öÐÝÝ- tww§Ò)ÒÝ}(é iPIABº»[º»»ÿá»÷þk ¨Kϼû'öì9'RME ™4y9) €^¿áÁ—^S÷à$'9]WDý‚ªÍ ÿ’ÈMZÇMÓñ“›§©‹àééÉbí`ëjnêdÁâèb™q,D ”€¼”¸–Wæa–g&®ôý‹è´°5ŽbR u.ÃÛˆb1,,L¼K6À²ívòÇã”&ÿ$ðdz\§¼’g„Ïz$T¿8<¢&†z%6見çÓóî^úþ·}¶FÎIÎÆ«€æÏ{å·J££šªÂÚÒ”‰r´whòËe¥ˆû =;ü_¿Ê!#³¾ðÓbGv±6½ ¤¡4„s;ú+#¦‘~£NÜä4’yp°Î÷Å´8þ„(§ ù¾š‘¢î·lª¿inY0-^ä†þEÉÈðª­Êek`‰Jjw½Ž [^ñ³Æ¾×hÑىю„Ôl²Æ½…¤dçŠÀdzhÞ%7Í?é#ͳù¾‘´Ž‰ð@ïOí_ÿ{›;cçóRÉrÓŒ»ð¸È‹Ùà»(hmí<†¨J&ãÑÒFó^ôÃPÜÝÝ;¡ö^¸”OWÛÏó i½Ã×뀻8­glù·à"IÅ/>C¶?Œ¨ôgô¾eÖzëx±2êšš!ûû6VßRd/ÍPe©­&‹ÐÜQµµq¼‡,…À¥éU™u룰¶G Tè%ˆ’'5I,r[¬‰\äííuéy[ ÿ~ˆ.?()+“64Ì*ŒËbWÓ0ˆ9?w‘ê0ÕÒÒÊ• GÇ/ølmþ‘ûά; ¯N5ƒÎŽgÐ5PŠÖ;’  Å–×ãc<ë!zä‚=q¨ócµÐ†ä*ü ÆÎ+*zÃÖV×ߢ¥-íìÌ¥¦§•-ì›o¿PK}Hõ%^øzŽû݇r¡~»8‚ùk(9Zªþ[BHÀÓ½îùÁÁëÛx©$V5…<…u=.¸U­ÙO°Y#R³W]öZ,'çÑ‹ì,ì1wdw5dµŸ’³±Íþ pˆPÿêãÕ6 eÛZ†¸”;gÊôÁÔÑH‹1fUyž,‹Æ²›!lÆ% Éø€K‰¤'$ÛžV^Ik‘V¼NòþÔ—b`9üÞðÈU––Nn ¦¾Ž.XÚJ4 Rj‰5J¯AìÍ}%lÌ,{3tÿ”,îº ®q÷r³¯pì£ôÝ'; Q¯-™ÿÙ¦˜aàïÝû¦a/˜ÍH—'t %#àF¶™j,Æã?_ðñĈÆ~”¢‘°Ôˆ#m­K”û3WZZŒOüd ªF“~Ìÿ*XœB4â{•Ò%Ì„ñöN2‹MjÌ, û!œ¸û·¾7¡5Hp0Dç|øÜ÷æ}~I bžZŸ¶LãhÉÀëÀjh3ë׿ÖÖÎpØ‹#©¿ ¶ã»g!§Õ¶â¥jŠeYªÄDÖÀwù7ÐßΓ¬pxWÄž¶IŒýá,:áÊôóìþÁž²u†6æyG !ÇÕ—K¹~l—FÍ17!è1òËÔÿ¾‡s£J ¾ìýu˜‹gµ¬5õ<ªuis•`6–bî¦7î~sL&è¡dm|Izx><:ßàj95=m:˜Âì'ºš@–ñÉÔ÷ú°£Eã†ý¶‡K›“à@÷õݽ竓••$ãR5½‰?=º– ¦J>]jJ®¾·ÁJÞ-—‘ԘLJñ˜5P0`¨Nïú)·;¤­©·˜8¨ç<¯¿aB+O2¹ë²B¼.GfL=Ñ6S¡Ä=ް-½t‰w“Û/ðh}ø‚êPläÓD?Ä#ÊsSRˆEÙÿö|ök.1ð7[뼺aÃ„ÓÆ½¾ 5 ­Yqü¿¿V¨ÿèÜ&ò$,@(°v{‰á›,!̽ÅóŒ:±-Vª§aMQ3ðóg¾b* £¡-êiNAK‹ÈÚ*P>½Øä}ñ½Ê¼w&"Ýß­Ö8JjB d“q;T@9ä¯ ]°cKd›¾cÝÒ~”2 a(%ñL•zAŒ´üfìúR ~"Ôê&šÉ‰wØ Q#£I"T®&òσ\ÈÖ’]ÿÃ5+$µ¥)…*T‡s5èê[‘¡ßz$}9›¨À "Y yäwõÿÁodz1…<ã¸ÕR]Ħ'ž¾ë£Åd2 ª®€}©Þøp§Ü•‰D‹#‹)G^¸¶”£ …E¥:íK¹·jßêgá`á!鵨ac…®;1J0çûû• ¶u¹šeëÆhøÜ °69ÔXOrÉш%Y€ËU€ÀÁi'0–:M·ŒixÄ 8m0òa$fiÂŒ¨èLùÞS:È[uTÞ•~hsÐkóA­¬JOTÆÑ:?±k±²]ýø×ZIÍm +Qî{ÿÀ2£#H™‘ŸuªÍ¿ÿ:ƒÀýÔî{Xàæ?‡)»)ÀÅüõ`¦þ`›‚.q[”¡—yŽX, H•·’Ê’­ºŽZØý îŠZbȾM³6ò8¨þuâæ˜-yBvø¾õ“³JºÞþÂV·"mùÛwï4÷¹=ruÀípëh¡Ž€µ÷sçšj ³>4[ƒsmˆL. .z+½“²Ž£"ætï–ðO¯Uúœìüb4ÂÀ—YáþJòtåE¥%õ#¼ìhQƒ=t×;uA;ÿ€KÇx©I´Cîµ@î“f¥Æ77wîÔÂ1d¦tˆŽŽnαõ)÷ç[Šr†Apðz/÷&£)yÑ“>BY¸˜©Æù»ùÑjB¡/v˜UŒòíæ }©y·5“¹~e+ë\$Rå¾ËO¬ç@ÚiÔJ?'åÛΙ:¨Rÿ‹£™Ç¦ „KZÚqw²éimëw÷nƒi9¿òó¡·¶¶—iõr¾UŒˆ^“—³ñkM¿C© ¢Ïù(,býg½4§÷.nPî[ É™NКE·-­â®m#eàZ‡/.Üî±¼‘n2e¦›KÈ%> ÃjÚÚ?v,´VtÌÅfÝ“¿~Íç ¿óí³7|È/0Ã×/ p”Ű´±2ÄÀWÔ˜$FÞín–׃ýÛÉÂZü5Ác±³Ó5JÑ—Ã:.¸Øɷ㿾(® oÖvÎ8Ÿ•öÜÓˆ˜M$“À3è¡Ô|†’’1>ÒíbXê¨üGÿ»ó­—t~×O¶rŽZ9JUõ•@ :úLÈi–çÿó›ü€Gvxôп#Wòq¹·hiwi˜¤ªé2ÿ>YCKûƒþÀGÁ7¯t¸Èyùù¿O$ïŽañ•äh³àÅÈóü˜>£IžÎ[6Š’t™!®xÑtÔ­×ÑÂE¦bøïÛöª­=Ž¢&²š°ó[2 ¶ÉŸ•ɦygÈH–`A}ý@IšƒÆnÞ£ÑWÈÓ€¯žéwg‹A »Íúˆ_8sÿ°‚•-4ïÈŽŒÌ[8D­q«BS|½´Ïßo³gœp‚‹b¢al¯Ã”re ó¸Êz{ó ¸í&üÎäÚl"öñ«·Ïï|-»55Ðٙ·•8ÈŠðã‡3+k?bÞM¬– •Öî>ßÌä²I«çƆý¬ý¢É’E[Ý/nïa>Ix?~¨"]"‡w¾6ÔbÂ÷ .À/tj&÷ñëq¶ŒXÛg— ¶XõF?¦©gðQ0!»c”®H+6±“Ôbvf擟ÖÉ´ÔB\27L²÷Zßj@±ðh»=”N—  ­d¥'¥ G®Õ¦ìöȰ&`? _“ßÁ—ÂKx©ŸƒÙ°_b;sË,SÝa·½SÑù¶µ¨¯ãïó$;¢ % ˳۠šHúŸAg 1ɵû7ÛK]¡×}oÂb¾ñ¤ef‚„Ò™jµ`Æúm%7ÔØü`Ê2v´ÜÈ{¹ÜœGæÇfŽ.æÍo¥®®àýÛý]2I®ß3ÿ†¨”I?v‚qÀ™øùµᯓ{5QØcùuÍ^RsaíB,Â|̓ے>$#SeÀ×>„~äûGPP¤H&¤ã ­ÁHeÖ÷xÎÙîü»ät“„SƒÈ¿øâ?÷üô ÿÊߦDæ›IèhdÄîö½ùóK ï߸,Ç£¡©Ïɲ²­ê$¦Îäv"NL¿#nJâá˜Lþܵ!NõwÅfvU®Ê ŒÌã Óö%Ð( ìL¨0rNòÓíì-ñ!&èÅAó¬ÌÓqƒÞÆzÌLkk²¦Ë¿4ÊÿþRœWá ýœ\2¡ê‡Åâ9žtû1(Û²‘·Ç o„îw <[î÷õŒ‡/ή^f)~½WßO(5ýè¤ê‘à¿6Ú }@$‚½’˜Ûãmi¬OÿL¢è) ñòHŸk­»G39ÕtŽlVœ½_Gè-/±:ÅÈxÃÌ 5~…jà®WA:|ó+ª‰Ñè‰ 3lô(T¢PSx¹˜TU&äu0ÀAÀ4h Æ—<£x^ýu>Ûè.y„£š &[=pRY×Ý{R%K×ùg*køL±êÌ}?m"‰`Ê8çØ{gt··M­–@BäÛ“Üú-þôݱˆ¡K5†P•,]¡wg–"}oŽ)Xôjv1Á¡E á\¤nŸPnQàÕ_ŠEó|®l¸2E0ÑwJmË<µX "v)žªEH¢;ÓHÄ ­ƒ‹ Kí €]I«]àöy•ô¯Ô‡¾pç Û[™ÚÑÉ( QÏÉCŒòÔ¬¶@Á:º(¬†-K ðSVº1v`ˆ*®ÜS…çÚt#O­4²%°ÒKQ—øÞšN­øü}*·úÇÕ@«>âaËú hª9«`žóFÞ?Øw!Þ[I~E ý¥áôÕ^ªíæ·.;÷’!kÄÖˆ5lß¡,ú*Zów†£Þ+U _ÃaˆðíøG—äp!]}ysÇü™æãŽJkШÞBù –ÿl´j¨Òá"ŸŒÓÏp¿ºb䨴ÑZI{½"hæôꆩ”@ ÷\æëÔ[ÈißO Z‰ƒT1ˆkèÏÝ7SÆòApqj$IOïÛEKVIë>W ùQa\èó%þˆ.íÖÇÙ9ð•¿vp 80‡ètK3}î{yÊa5”­¨‡¾x¸›¨#°Ò%Ú?šc9½^ˆNøà»záÝV·…KÓÖ¸'mïÛÝïD¹ØqÏU õ›û§£’(¸ å žüzˆÇÏŸ# eÜ£€ëãrëD'1Y,ywè¿×¸Ötá·ÇKfFŸ1mªR®_äBŸlSýyÖ@¥u)¶¥0œÇSÔâKú%A)i+læ½# ÌÜQP–¼zÊJ’«AQ”á3o‘ú„dfxkà#”†~ôióÍý¤7ìSÌÓž ò9?e‚Ý<ôÕ¤*˜"V“¯õKrÙÜðR¾µhQbÙNO¶Ý?}m7k¨ë¼6KZªì¢‚¯ŠíÞH!¦ó9,Ö×­xïd¹´w&ȈqJº”§=$” u“ü…pœ.Óq|Ðÿœ{ÁNcާϹe–0j{ëÌJÔ™ ù&­—†/Mæ+Ñ+Ù÷>33wl?oþÁÖˆò¿ž§¯ZâH¸mQ±^úûGH©$Œ „y~1ÿža¡ön6ðW¦où õ\~À]á õ&Üž #EŒ ¯¼©èÒé¦KÛnÞ«äàââBœô&º'ÄüÊ~ƒÂ6Ê$µrðUÂ}œ|a/×ï&ëÄ÷éËÕÿ‘(±L¬Ö´#{(CNàq¢w˜ÔÂðÍBÃþnkúÎt‚ÉWâªÉëœ0¾mÞ®$xàdKÌ>Éd|‘53³´³sÕ–•)p„+Þèu¶ŽÒPlj¤(™K®'“½óÌjÜ 7౪â©Æ~EÄqY­õ®çæ„Ãsø$úx˜KÄdt$íÓEÖ̃o:z_6Eå›9jc\o͹ÉÔ ´q?˜y¾ÿÜ¿PLajX² &XXøòeó8lâ­×–ˆ¥FGuˆÖydþ5+Ô?~Áüøy®Õ$ö} j§38!¨&jÛËsÑø‡.bbR‹¾ï¾Ë'Aù V³ådÀà'%)õä~P‚ú'Ê’#!“§rA#‚„ùÛ›3ÙýàfŽÛeCpÈËŽÊ÷ú–9øÄ‹høâNEØSÂ8mñЄMo³ÁLHöl›G1IÍŽï)0þ«stô9;¹ÈïÄ}dnðwº ˆh N>ö¢3‚@‘Ý¿£ V'š£2ºRŸŒR#Æ£àÙm³ŸtïfNLLñ·Àëh}+Ê"|È'!ˆ5,êÉX^gÔ|µ¥'žƒ5,.åàD••+vÍêBûU0( å ¿ÓG: l‰ëã+ýЦ¶þ,ÇíèýJ oóv•Ho¢5_^褨%+^å^Q D+s Òek¡¤…Ý>­=HZZ:E9WzOóýûZ—µŽ°Ö *µSù”½B þŒ¢«u^HЃ)üß>T VF„uÜ :Z³zH!ê„\Í ‰äðRÞzÌÙ.? íDW¡yŽ|Za,dÜóËùV4¯˜Ð[pß³©©€)¥¦¡ÑñBæ*ÅVc‘LߨÇ?´£‰ðbðT$¼÷ÌÐtñiX1˜9Ïôƒ›ÚjŠk¤3´Ïýô4?rd(z‡ß zÑôÊgû‘MƒÚ…ÈSCL“éF×þ$:‚4í¹ý„Ïb⯙¸ v È÷ÌÁžùê7"‰³=‘ªsŒF‰ÉÍ‘DôGV$³—‘c¼ô8—†àÜäŽO 3eú0•^ …°Ý›(äÕ#'Ñ>Ò•”&Ò¿×Î8"a‰µ9b I¾}Öÿ­0 ÜczR4—%„¤Ü#¹rá¯æÅ 0 o®@ó¤¦0^¤L²Œ#†Huìûûã>(´¥h­a7ÙÁ.§õ®A­Øa†=ŸÃÄÝNõ£‚ Ù£–Ê&e^Èé¡¡O€Í‡WÐJ{‹Håç´Ú‰C/ØKæ K ¬¤Œlâ°1»öϵ4\nß õÞºtUtB“AõÕa,t|@3*tʶd8¶ÿm¼¦&ÒŸ?õ‚a  ø¼NW rŸï07‘ƒ‚ÅžÿZ`6ûû¶JËå^œ€¯¬Þò0∺yõ +’·°¤¨ÛÈQm¶<÷›î“|qÁÙIQGñÔ?Ï¿š@‘Áx"ÃÙWíkÂfÅHUà{¹{æà×Iyá,áÄÜ2‡ø¹¼)*űƒj߬æÍe¶ð~žÉšìi>]À6·`ñÐ;"ªœœ~>È”¨’.¹˜’ÕýÍïA_ÛÝÝÞùè饎N†?ô{Kž†RõµÃÆ1D±B߃ÒUpÕ/.§„úhžð©N0¶ïÜŸóÕS=†ü„«íéR¶éW—7ž‚,è?Ú¢†q€±“$# ISc-#î®´ø?t_lszÞ%Ɉ‘ƒ=`ã‹[™¯]Êw…ø{E–3}ØÑ„z Æþ[u„ß¡LÂV‹Ù]Ÿ<ÊýŠ±Þ®¤”ø‹Ÿ|¢:N·'Äëÿ¨`­Á™žîUÞë¥ úå9‰<5³Y1N>µÙ+IšÄ¾ßp(øiå\`§BùÏ1¦Y‘ Ђo“+Ó5®‚㻤ɲPÂ_Ön¹ ” Á]JÐ=½;Ä婈8JæÚ‰…Iì°ŒE§ÇÛ÷¢X¿Ñ2äH5Ä·º¤àõ Íyë£Bò‰@„…«µî¸ÝÄ©ÿñîÂ7£{þ§QN:­  _0ƒ?_Œ\üyùûp‚ 5-J4AËg›²B™å$!.Ük@õofÖúãHÜ£7Ýð,¯l\þyÓå9Ãw K|/²±)Cë×ñŠÊÏ--º€¡0K2o¬£Áuç[o€X0Ðs~Ž4rAÂŒ¼¼ EŠ@#ÞT\‰ ÒzO}ºìME Z P¤ÜD$7jêŽßv‚MbZ£*ì r6þuÎWïÄ„®¶¨å³ßºðòOkÿz´ãUªª«û!ЈC‹¼DçqÌý¯òïÖê²y×Ù¾.ËŽšˆÂwþ¾ˆGp¤˜pOUÖFO~¾‡‚9o8ॎ؈R<;†nª/óƒZY-xÅ’~h#ÈÏ_LöI‰&k$§¦ÂTvÅðAåûʧ€Í‡_Òz&cÅ¿!+z*¦Õz‰ý*ÃG‹$5³­†¨?mgä>~¹já¯xîж[ï f°n.¶g^hY³áXº `¼¹D”U=§ÍnÎjð7 {ßߦ†)š‘èÑoLÙ«XFIFiPNb¯?N¿ÁDÒ¯w¢jÔOç‚öu’„è.¥Vë½ÍûXÈÜX^I6ïèÍW„½üRýpµì¸gkgvb™ø×EÊpÝ2|¡Æ€,ü H”¥Ì²ü%Š&6§¿` DóBÐÙšaÒ9¥td{°U Þ½«&„þ•üø@ õL ʦü«ƒðŸ7Ë! iúD'¥æÙKö9+Çòáþº_?Ýÿ Æ«×XDQ°Ãã]'hxn®¡{{ò‘Rç ûDØ»ŠÒ“úÂEÄ `7Ì•ˆ,ùQZÃ2Du@]à3ë¹áê/më%Á½ZŠÔÿ8Qí;4ÿÙ“ÄþÌ9"¶õS»¤õú_°PÉ›óÔÖÍ£™VJØñHœ§”|“UÙ³üUÑÄ$'= «â©%ÌsÙÒšû®ú*>¶dȧv€aJÝÿ/h/Þ' U†'í}Ó|³lî¹âJC¦ä†Ç Fò»<Ì}‡z¨+ã˜SVÊÛ EµI> ¼Ö&ìsõ¨Ì]ªØÁÒ.­?¿ß.[üU¡µ:ÂZ® ¹v‚Íêaº"j.¼¦†å í©¿åúç‡ûQÏ¢UF°3®&µ{¸vVöñ@Ä»û®·%û AÀ¨óVW;<§A˜¶õÚ‰öA…¥ä~7’m]]¢Ÿ?εfÔ‚Èp|8_­JÌïò½ÙêqP±!å#¦µ¡3“qËâyøLŽ v‹d¹íÖà Öí*LIŽ?üVqN®Ý úoOV’’*yòO¯Â(4b޽W+´5¢-_šAøDˆ’øJWÿ-s°GèÔ1#džšdÅ´zåϪÓ–•?2D,KWlÞ»‰Ír[ýE7ä\þ£ƒú­ˆ ?ºÛ˜˜˜8?¢›‹4À˸Æv¶KuˆLPwž1¹(å¬-åçÏ·Ñ©÷ÇKªB¥Õ&ÑÃhaä0 ª»Â¾ÔÿªéÇ ©G¦¹mÕÎVvþœ;ò=¹ýxœû~{”ÜJ6Zgëƒ4Ç5ΜUe½oÒ-ösaÅjåžÖ:èðå#þ¿‘¬€9· úÜ|PѺùýÁåßÉ´ÿä.§*6ÃÐ$ÿQ^<¯\7d¢Ê\üç¯'ün|bô‚kЭã¬V’ /,]œ¨¸K6rä?t5¦;ìÍ Œª¦;‰U3öˆÎsç¦å"Oij êfH¨´¡¤sµö ެ͗Ø~ =°‘¬¹ß2&ýØÉqÄp¿ÍÃWòù4‡¹ÇÝA,É…¶ GoáX ,ýÛ°8£×íE…Æ-'­|"~ã‘1ŽÂqá*¢¨iV+G²[Ÿúhâ“Ï(~ƒüjc½þ¿³\_æv)í2Róãoöó PãÊ^>Ýð¾×’û7›Øj•ìÈ{~³žÿ YŸÏfˆkPC,é # Ù#A<]¬ÿ¹øûwØÐ„.ç îh²xT‡^å#3‹5ìGP“ËqD—Ӝ϶æßþüù ßZè,£­~±ù%WZ:@Q#aníLôôѯ’H~4Å|sÚx¼Ú]îË9K¹=O’WAòè¶o&}Õ±ñNÁªðx)Ñ@Gøw„ºŽ ߘÊYäà}‡¢ìG Š•™ÏGd1Ø­cÈ»¿‘]ú.6ö)£¡Hlì¡åÅ‘Ì]¾› t—ʼîÀw/ Eä&@ÌÅB¬vçÅûÜB+ç @GULè(…€¥)’ù“+³<˜¢oJ·?ŠÕ\h“s¯õqUw³òîà ¤/¹¼²™2[~Ä66—w`æ\T>‹G±¯Ò²ZâF„¼$Yhi‡ßòÿõÍ ŠÊ_¼Zö=1lïnHyÝA¥ý<5æ^ÍmRÙ»¹''ìsgIÀx‰;f…èP’ùù¨Ã ¤[?t*þŽT™^u×6øf+1Õ6‘gœé¶*YÓøýæÚöd…uýâÞVIlä°¢á,Á¯FY‹/,Î g$ÉäÜ) `Èì¦>âw Fÿë¥ï9:f°xìËPæ¬P>ä‰\Ãk$n¯í'†É·%iŸç] ƒ„b†JP-Ѹ'.*¼8#x­æ»ºqÛÿkï­ßƒ,$ìöÿ¸bß©PÖ¡\ÇÔ¤ñ¥0ëºÛàÒ“ò£‚Œ¦¡–Í"a2NÝ*-!ºÅÊûÐOœü&¾ßBvǃF«:ÑãmP…ãŽ6ÛÁi1´!Ö#¼ñ¶©Øvç·"Ýò²p¨nì»"ËÉáTÝ;ýI÷1©@,OsÀæejç%óWbÎŽ¸ÿF¬„¶6. vdî÷ï„ O¢Ž¼‘£ vâbmÆi‘e_â0ZÀTÿð!\‡ ( ºmK ’tø$úwUor ÈPµ>O¬<¡ï[æ€mëSòÖ†,»èc»£ü7îG¿ÆH+ZC¿ï“©¸ÝåÍÕC8¶ïqé¶vÍÚäx/”$egݼþR¹þ¦@C,!gU´î@sG–Îm/C^VÛ?ãqWË`ú²X )]ž™É­­…oô8 5 ¬ÜBk ‘ÆJNIÉÿ^?çÅÊ(mm•¦ü›ãHøt^‘[ÜÞž™K™³5Z>T‚ûaX0”¨¥ˆlÙä«u®dŠ€SýäšÜ56›lox´âœã:føD—›ü[ïnÛ¢È"Œ!©õ‹!7iª1.[ )u17²(‰ÜƒO‚Ÿ;fÁßæ‹âF4Î2¢>ÙOÑGºhÍŠ3À­/cy\:¾ D¯þªE„ÃϘ ùNÍ gË9óOÜåk®?k öÕ¸—üõk>¨¦A‹ð'¹¿G+xéFOK+™ Óž.&`1¨wØ˃ãèÇѯJúéR3ùùØóuûŒYAo7K°ÀçÞè(ÇÜK2é"ZÌ ž3»˜o«NŸ~k½͙F M•«ô“ÒfXÆÎóŸW%ÍKj:ÿ{–pÁ‚wXöú¯t!Ž N¢K/ZnL’ö 8dà§‚Ö{m³Á÷¶Òêjz6„0VÓ?µÍ"?šÇB©ñªŠ=žóa"6¯G³’û·Ã]1ʳBP&§ 7bg.zè_ï·žØ[¨Íz)âîdÃ,Yæ£h1¹ÝŽ7¤ZçêØXzÉŸ†jú 6‡¸ìD)U(,XãÅŸÏ@Yú+“!ʦ EíÛ_"µ&{iõ\kˆrqªÏU&}Jâ?¦;2®~h[žÉ@º)#x°iÚÚIà¶é¦SÍÊRG¶q$Ô 5Cö¿Û-ýÅ ÅÄÅ#(rÀS4ê+W3j T«¨«cÙØØ ý~÷öí3÷§¡´j#ÿ+íÚ|.hƒq©¦I î.L K¶>Û'¹jA”“•gHÐ #Ro©2*Gnκ“±Ocîѯ§Ì¾Á ‹”Y 0LãD­ìÆwì竾}þ˜t›^oºCäÔț۷5Ú›6ÊY¨3ÁìöI; íêÄÙ˜M”ƒµ(|5’”˜§QO-_Q„ÈyÏš––€1ÆâÌóD1kXÄI:yèß¶ £‚NÉ¢T%­§SËþ¼ i´g‚7­_ò7N‘?ÂFà&~AhwpsÉ66Ý'9ÿùó[ڛܨé' ZXbõܽ&f¾±˜ÇÓõf…ûÐÑjò!77Ô•ß{_ä2ÂìÍ ºn2«BµÂ‰‘R„õU(èï„3àMJ©>/5Þ˜Œf7ƒÀΣ8-¶sæ¹5%6B%¦ÁïÉŸ;ÖN£9? ñ¹,Ö;7=h¨ &ÀCºÄfÕ„@xyJéÂùgž·ÝŽ€%xoÕ*èT©0ÇˆßÆ2z°»â€kC eÕÁr·ñ`ÞŒÿí!2çINÄ5=ìߢnad¥ ·x _ÞÁ–4(%¸>ôVÄ’öà 2,èyùÅŒö§ºfñç×åû¡–GÖqϱ¼¶ ÉR¨Æ›Ã =ÝH®q ô³½Íc‚œø2OWÕ0v' a€òP­ÛrP–ABlЊ©÷ÌŸßÕ¸ÛN-»DWýʉ/®–oZÃ<‘>‹>—>j,0™”>ª|D8Ïs>|"Fd˜ÎcÀý«’Ûa°/ •ÓŒÏ`£bí«;“{'Ä’I)ÆÉ™÷ìŽ|ø…Ïj\)zR×â›”Ïyù÷ÞgJ¶1\Q–±«™ÙÎ_‘•ç)cu{èÛz=E)ìuº:Ÿé”r…ƒM“ ¡¥6[.ýk­3èöý÷;Dffé'¼¹Ç?‰ >áË&Á?F¬üˆù¢¿bOÜ6"†9LŸqñ|ø‡?ØRæKdƒ? dimÔ ~þIýýÞ¿¡§êoúÓ–ÎW/ßåW·Ñ*STÙacäy&{8Mhw‡8q…Íß¾i5{:.ƒ‡ ê Ôƒ°/aÇ…æ!{Ðq=8£ —–•q/¬Ü²¶^’ z¢‹•œb{P »QŽõTŽ_E™ßJ<…"•4ny=¾ÆHÝ=?q‡€ßÈ¥Naן:š‚5mžÊôíâѧIX[;ÏšXK;¨h\J/Ÿ¼5YM}æp³<ÐC„£ÌFwry¨&Ùlî“Ã4ø>Ðù±*øÑ Ò¡„w:º€tpC#@‰i"Ž™KEVþº£•„^K[.£†»S-þá€*ÿ‹c4 Ç·–j,³úEõŸ®ÙÕrÊØ‡qŸõ/b2Ikw"o]yÖC/¶ÔÖ­‡Wfü &B‰ àJ‡•ÛªisW½SŸº-™Q6;¤k7‡°¢Ô¸îëx¡“¶¤eÍPkÞ3k™—kk àt£àe³Th‡{5;gÚ Óü­g4/e¶åÈË»3@QÑMa3Z<Ö±nhcê8W¥‹”¡õNkáèd2.dJ4HŠ2WTßÓÍsXØ\¢lþóù –ð…eKcÚ÷S'’ÛOÙfP^æAÊÕÑ&¼¸ o¦žžÑ– ¾÷™d2Èþ°¸<±@n¸¡Pµ(וfåÀZWâб8šÇŒ(~7´+Ê>S§~jqR |vÀ‰L4[Äêþë6–FÌVç–ÕãiŠËŠ£l-L޹BQòó~ªzTdÁ³#)ŸlX¯ Œ_év+5Ïîßf!¨'ˆU„ñ® bößÌ ?\¼ƒ•:4‡8ö2 ÖmànöWkB•b™\ûÂ*…eÊ)¢_åõʾ|ö“k¨Õ|ći¸6å¼ß9)SXn¤j[>w½ë0¶YÂÍ6ÚÚqr¿?+3¤œQZ¥h3­HNÈU=dÿ!ÖÝÝ=7Ùãd¼ ×pøÌ‡X)M5Xµ‡æøMÌ>_=))";°õÐ*BæDÈÁ_léëf倗ºñÓ}Ö³-”Ù¹8ï?hSk=¦Œv<š×ßhNjf#}èupåV´CL{€ƒ&•—WBªþ>䪚طŒ°}¦6'MSX1à7ÙFÀ›,…Êô€M[ÓnðMÃh–Ç?ë•y\Ç*°²€CÐô¯¼ç›Ö–Ë2σÏm+¤Ÿàúì}3ø |‹Ç+n³Š ¥Ž*Ç7šÔ©þ¡@bV-ØdŠ$îE…mˆÉµàˆ‰Aѹ_V¤û­¿ÉÍ…¥TÓ8—²@ó ´“C,¯Nî‘3M!“càÛ ÌÓ,+ÍK²Ûü6)ªRöTD¥á¹?aC­"§ T>CˆúäcÑ‚áØÞ0JjÝ ÏÖ…aûÜmeÞü plë¡ÆÇ ¶ˆŸñ#RKx”¹ðV‹nç'†|òquãþI@³ýóà2<¡gs"Û¾œê§"øˆõñ#G²ñ…Bu…O*"—šÛe†JZƒ?'›Ì‹Ø¨=r[Z¤ à¼åPÐ7okö(YïK¹Ç\óŒ3Ȱr‰\™IŸî•sÏ›.&ý&–Ê’†2¨ØD;p½‘r¦? ¶] 3B£ËŒ}ÁÁ«“uf¶(¿øÔû;Ô4’ß#{²q@¿¼qÕó“úÅiç:?-ý“ü9 k”~¨¦–è þ ”IêÝ™‚1®q› á fÜsd( DéیΪg?O¶‰2‹/$Œí¹ti­V×|ØAFš_~ ´õ N­ËÜ©ÈÁ@:'IßSI2BSfN³|?OpÊ(°Äã4Æ1Ô‡¾0¸ÿ89œµ=÷w{$šŸ¹–ŠrÊÙŠó7Aý}wTѸ>®°ÌÇ“úý#¢(ÿ}nŠz4ZuüÌy¦& ŠŒSÈ­ç× Ê)<èèo^P …=ðl1±ùùÔZН6Ön2yõ’ƒ(Ñ‚[Ñ\ ^ÌdŠ@ØùF^Û£Y#_æ}–zÈCb‚\R„Œu~ƒWm@(Ë>}–˜¤ÑøÅù©»òÖ×½§çUF”¨5%rUr5!œÇ µ¤XÉerãg\‹QØ.™AÎ?Ķ:1l,¬MŽFF¬ô+¸*ðÒÚXèáêÆÆ+„…+f‰ðb(4§Ã¼º¶‚×+„‰ÏØ‘hE¾9Òß—Ìàçäü–qÚ|1•¤Þ·õP"bcŒ#m,èÌ ñUñ³e$Ä¥çGáD'ë—”èÞoø«°0Šßn¬$A°Å¥£2ðàžÕ ªƒ»ªU¬é÷*A1\dâ\ ¾»l×çI¯/©[Ç"ˆöëíO o©ãVçÐø‘Ž`e´ÓÏ°Ž„õ±ÏÞÞsvúE™ùçµÙ@;FÔŠ]xú[J)BX«3ø9%˜Ô d.š~3J¶B ThI,ÎQ¶;ÚPdãKCd4˜5Ï?ÖíˆI«¢Ybø #fX.h@ç\‹ „xÈêäĈfÔ«âœßOiìc>7# IÛ5–«¸W¬z½3[f§{ù<Ã\Åa8î Z§òtÇE·G²/?ŠJÙV†11½àbòMŽ5Š`4>¬Eœ³ìü¢§SŒ…hžYXKˆ!ÄuŽ7詨´¾Ž­¥ýfßþmn7 8"Ÿ;›¿ÿWÖx>PZóÎ:€ù&¯ÞÛ1îùý¤Ö2äynËÏÃ?bË+ýô¿3× ¶¼›„þ>z‡±’?eÜEZvÑÑfShXá2ð¬`é¿9³›ïÚÔwцJ Šò[«7ÿYŠ*˜?ž,2™Ûí BXG_Ï^`M|rA`¤åáâ¥Ê^éùÇiŸÚ–ɈœÔHcõUZGØÊI(LƒâôqÄœ~œ¿O$ìh&´ü1ÏKÅ0Ø£m*ô¿CîjŠàæðð>ùL±ØpòU°ÓK~î×+ævý—Ý­YcÎåO}‰DŽšM?~ýêì‰%©r?x8Wã{}Ø^nØXi;[Þuu¼Ô¨®­½õï=©Œ·wÃÑ/óÞ¸×ÃÍc?4éK~Ú˜²U@Ù*A5®C˜-aëawEéFåœêØQc¨(óá™4“Á»9ònt¦¸˜¿Ìè•È)úþ>i¢ï© Hê1”—Gº>^Ê8?¤{¦")—ë"PPœ•rÆC_~p»NQé°$àw³äy{ø}Òò€žÁcßq}´àÊ¢ÊF(%- ÷×ã( Û¬õéZòæxi¼ÙדÔg7´0&Ú§*š¸±¼ÐMõOšƒz'[Ã÷=e±ªÄˆ‘‚uãMÂ8k»­X÷\îa2ch°Õ¡Ѧù:¨Á¸T°F… gÀ/í /ŸR[[ìó’™ÏÍñ˜ÏÕ€UFRÇÇžØÛÕŒÓyËÓ£n/FÃ2ªo¥%%axìæ h$<ß7±$ÆÊôy/÷&š}ozòÂÉ£@•ü®«Ö®5 DÙ¢NÙ¤jùlÌÖAð÷¡ìâ|&¨2Màytƒ*Îý2­~©5ˆµDC­HèŒhífðâC ¦:OSÂ:˜eݰW@aÖ¯59[ïÖ©2ƒ{_n«‹Ì6 —<ê|:"xB;¡¨¨è7ë Qëi‘ C$1àÐùaw§ëOfÐæ¶j=;¿>|WÃæq² †Š­*|¥õ÷%º— áòÀ²)à‚$·žocÉ«è;ìîÒ‚WäíÂêÅhìì¿?=¶O>”úœ”ÓÓÓiü®o>dFÆ‘ ®ƒ Ó ¢¡¯–––ÓÅ­Qð3aá.ãýŠ[uç8¥Ü6"« ó<¡ p[[zô'Ø8QbÃòÀC´žQ]!’*PrßÞ[ᎊ<0‘ûìRÉ4?ò8€Ïôyë´ÙóK15†û¬ágñJ¼J7ÆÓç1üÚq9LDX§Æb“ÇÛ3B>'…–¾¯'Ü̉fÕï²µ[}'CbÇS¬{awîÊî-ß22*üñ3*^ä¾/Iì¸5r[r0”p¯-Bãº=Ô¾Ùÿ¥*àéþM]!C[[P‘%@#CXþ´WcìǤÏdìÐä8Ÿ”Õâsµv¶Ñk>”ÆÎÀÈXµéÍ[úâ5RŒeü‘ÚGñkøÙCô &¦Y&”ÉqoîÏ·"§’ŠŒAPcf_EAËŒë#V€ËAÂëÐbB >WCÙFLÀ Éåî6û€ãÛƒ¨“&˜¡l´RÄ3ÃÚ×rçžµÐø„£“1y_+ˆú‡tSÊ1ž0by°’Ëkßþ‡×µ­„ÿ’Ïà@Á/{„²¾ƒjRÞUlÖ æ ½êµ[~6Y–”y/tªt3Åárx|fÔ`ÞXŽc ÜŽõ§ÎXÞ|ß:‡”¦Ù_²§ Y½Ôk~<{¸Ì¡w¦ÁʨüŠÿ¼ê€'çn<êOÊ |÷V«ªÐ#"‚ê÷ÃhÊœBÐMfMx‚˜Èal‡:­/7/c±œ°@cƒ‹¯9e⿹ñ@·Z•{ñ³Q*wêåÍf“%,25ŒØ¾¼ºX¨5£š‘ß™t¦Û„|¬Æs(`™mÍP1ý Íl뽂Ÿ2l›ñ$ÎÐŽMP1D0lŠ/$Ò\ÄÝ1DœN‹Î½kû¿*z0DMúéC»â§é ¾ôþ0îØ¢?X®ádMê‰þAÿ&{°Ï´ v+Í/ì+‰’p»k"t!5ù¨Òr”\) jÖÀUùŸìé·¨ÀaâÕ«Ù øÑ¤æ5DBnä4~œ¹¿x^׺&§«¸dYøU:¨-÷oUøÖ`=ìÏðÈúáѶÛ +Õ/© •ÿH‘Ê™°½ÍØq5ö/¶n±‹ØsOs´ßúó¾ÞåûùSÌ㾿Àu‘n¤Ô°_ò3j{†cKºÇ•$DU„÷Å1à Ü-ÒÀ`ÐÙFPwt,Ða[Î>A¬ò}vÀ½õ+z­GöŽ%䟒ÆBq¹\æpt0º©T¹fìÔ¬9†JŠéÁñ¾â®q33À,hTDÒ©Vä1ȱ5ì·sÅ 1º$RÿòÂó×J ÆœöŒÁºÆc¿xm}ýàÒGñ“§÷jP›ð a¹udàÔ4Ñr£f ZÄ7 P9´Ü}«ðƇ K¥ ŠÑâˆu¢qÕðŽù…ó\ÙßXK+Y ¯ x-¬ÆNÇgÙøÿ; ÀÞÞ>¾ˆ€B+àÙ[Ê(€h@U´ÐPt¦UtŸ¥÷ l%¿<Ïg =ÉŒŸ®jöÃ:ÛÊê Ÿ«×²Y`ml 9ÔG¶6{Ÿ b¸·ïÐ2þ4-ÞºÚM##ÂB~sä– –”XýcLGüqƒ¢Í¶‚((4v«¤ ®C²¼8î!éw úÜ>¼¶€‹­R€‹‡§+ó28Ɉ ÆmÛ Í¾ê—u­Tç”ÜÜʪ‚›˜Z+žÄ›¡Î#w`ï± Šæ0¾ƒ%#!Ï™÷÷ÖÏ“¬­„ìÐñ"6JAßQ¨`Í{bÚ =—Âjí rÐMú³MtYª.—!`ü}›ÆÎÝe€ hèFþFasÚȼ$ ã`ƒ>7ݺ½^pdËVª_ÇRæb¥Ðy;A¶mËý¢Cÿd„ëÇ¿ÜÁt½qÜ£q¶œÐgzu*å ÞS­óL}ö®G10<9þ…ŠÝ9"ç‘θ.¨b^ÛJÉFÞ…+f&£‡ód®1+f¸´Ž-woÊ›¯õ´Þ¿÷)×Ôú8tµc6ÕêZÌpXµ(}\g= ‡‡·;WECˆ­bWý{m¼¯_¿FÈ””—ˀɳ±±©ôð°[n"Z¨sÌl§< %¼¸|8ÎøÂ‚c7­”iuH•ÀúµÎ§›V–4[)…L4\" y¢k7'*7y€ Øì\eЂ.FòÀÀCçÖêJ(ñµãEëᤙð;›o–£eɽiË|È›îV¹1ghiCiC>èOÎnEïŽåÁ¼¾G'†(éëCn¯¦´ÁÕÒíè·w‡>Í«ëÞÎ8»Ý(Î èH5ˆ}!5ö;ƒãqXLËSM Å†*o®¿û”ëÿÃ{Ò'xBè_üPusOÄù)W˜†í—2Ü`‹ow¹ÐBö|xI ƒò¬ûàîJé;4ÈeFHdâ \’o˜Îl>8%Ål¶n%xÀ"({®Æ‡¥aÛïñ¬×zZðB‰†ZÈðÆQÀê›óÏ¥%O’ÁqqPް÷’†€ndõv#^tãUæ½C\Ùo=Ž:þý±=kG ø?ŸiÃQ©ŽoÂDßôìc2ñ}ÞüxÞÜ‹ŠÜ—©yzé¯{ç kkŒÑŠz‘™»æ½gKi‰¡ F[þ©´ÿ7ûÐNÓhq*4Àò5íR0bóõXöqü=s$ܪsÇΣ*I‹ ®ÎWÓzUÝ.døP….1®¦uqQÛ,s R¿[§"îMcÈÄ‘F‚!›¬¶)“O[F[qEMÿú`>ž/Æi‰ÊÁΙFjŸkØlŸ>/ÆT&½]avˇÍ*ÞÞüÏw£fc¹âåóãÞŽf¹½­ó©C Úûù¶8®Äv’ÄÀˆ_í$@X%ŽIÿ0oÁnºå#~§ÄU–gþu|à¥~L~´é@2ãíÂÊ3¼p¬é¿€(P…1ÉâÿùÓötCÒˆÀÓ]t8^€ÐG½òò|Ãw9&ÉIo‚>_ïLóiø[h—ñÞ}(·Kbgû³¦Ü¿UÓVÑJìŒTmé[Êï“æ³ŽP¤·ÄóOXŒþêþ¾”"Ë••96éÐcîÂôbÖ€Nâ/™;–ZÈ6eÅì{®ÃÜj¢÷ Øvì6S B·«!ÖŒ/ê1êÞ<__~j÷Lün},thmj"}eõ–Ûu”RãVò›%Oãö·Àî¿?ïʶ‰Kuª W_„ߨfǨd pÿ,û`Ì}-ëuP† âÏÃuÛ‚# 9M§ ¨Ä¾¼Q~%s“Èòë~ŒCŸŒ›$,…š&xØVªÛýKIóÓ $äò›‹|ìô°'§àh|ñù†IGv µZ‡×'`>ÞoòØéDÙNDеé‹Úâ)_ÌàA#šã‹ycˆ.°Kù û¯»B ÿ«æÄ îð>œ´Š>Ÿ§¶®‚î³k(3Lp¿¡Ê>«Ñy˜;Vt—Þ‘Ý ë}9WM“ËËÓÍFœà±Ò#NÃÁoã¸ÞÚÁ¿Oó¿¦îZt`‚%×Ѭ\¾<:ÅG|qij·T!éI®Eß“fBa7½Á ”ÐG6â~è"={ö|»v“}‚Gmkò¾xÝÁ2pæ ëp\‚·8_iìælÏ~¥FÍÄ421r¿D {~¯uüëÑýŒ´8s½y„&^(¸õùªHà@Þ©ðöl1$RÏÎg`4Úˆ1ÚÞúñÄß`ËÁ´ ¾f:Àþ~ã³e{Eës”ë¨0AàËÃʤ˲ß%(Èç¿Ø/ ˜>¤sNþš­s4nºšÑ×ip¡ûŒA±lèÚ4«¡la’ÁTÖ\¾Þß#ó’]ëÍyc½ nÐr Q\ x8ÖÑNÏ›/hÜ£³?\‰·©bœý>º°—_Ll‹)·iåAØe6¡Ý ûúîƒÙéj»NÒçbm´Ôߨy²ºOhlVj>W''-^{…©§{Å9ë1œ#}ÙNp=mA0Un{`ÑèËÒ‡3b³pwF†óHÚd2ÝNiö\&û_ª¿FS+xÞ@EW¹p¤Š‹`B k§Û˜+µwÇð-Bëž#Y â'ôãf[ìŠ<Ü2W¨)œõÑįVö€2Ehö` *“¾‘%ÐiYÔIÙvç Æ diD5ö¿Â<R¤L£íÿQœºeTprv²®llb€Q·f6å­ßƒ1@ûû²¦¯—ã²g]8ª:‡Ç^”¢œª°­ 'þNÿ rFŸÄžYYL’¹j£‡¹õÆe†cÈ=V=[ÈŽÿ°X}ÛnXN jÛÉ!¡é°ûm…ÅfZeC€.t*ÆdP©*|…«ç=ÏœfÂ!úr7z{>ÈêÚ,`@~•Q`ÂÆ&Ÿ¡’‰Y{æù7@½,ÒìWóóçÛLÏeïÛn G«•.ÖŠmH÷ý?ü#9Á!2¹´s€^5yŸCÐ…ÛÓãè_ kfݲÏ;â Eÿ¤ž‘âìoÒkëvK6õOžG.¬ ¿>°úÅ' ð»†{pw{ä$xk08%÷GU‹Âÿ •pU¯6¯}Ž{¬ €Êü»9¬Ýb=VëËÓ‰ú |äÊßn¹˜­MjquÜ=(+ØÿbRÉ:ןÉr[¡ÞŒá¶1åE¯cöŽ@(!B“¬–ÖGõz¾éé×íÑç]£ÚÀ—g/ÓÆ=OQÞ#6]&Ui™Ís¬–7B6âÝ4ŽYñY "idÿ¦,5“òsÔ=ÀŸ±*òê`ŠÞWÅ‚íƒò•#g›‹Б½R òÍÏ•¸0¬Q[á‰$r·æ1¸í§‘Ç'_ß!“ÍÿÞ-Ó¹‡Èºáqp0–Ùô¤uå»´è¼XÔ[pÌäUz'ªÞ±ˆ¶#‡Ëh1d(Îp•¦!UyÏx¸æóó©›ÎzHêwó£ æLH·¿Ø ÏÔUTQ·®ì¼ŠZï‹íÂú­á?B †\6–7Ð&©/‘Bð~lT¬ÅЯí4¹Ú^˜¦hÓ`¿í .5û±—·>ûHMÎ œ¤™CþØÈmÀeük^ŒÀ¢aó<6 Ú ,f&sO6ý¡ýžøF5=©j&Èö=æ7ðÙ+,· `²ý8Ì }·7¿Ä.!/å&›­wE2ž$/×Ð&U (²N#źÀÉ0eW’ ; ý:CNQ¨ÓhÖ–¶JÓÎ×øïÚ'¿QY]êt±•ÚŽ—dÄÒÍ_žŸØ]·•p·¬Õ¬Gæ øN„Vã•È#œº°zœø:È¢‚_w-sükmçI€–'ž‚%ßõø@Ø7*n¬7 è^ßÎp¬®Cù‡»»†t ø „@äÌÏÏOyG­­+fðÓñ/’ÏBm@t"7È)k5“*¯¸®6¨xóŸþ³í)·5R5Äý`„d÷oÓàØ@½‡óÕêI$yç_y—Ùò9À^ýø}óùäF÷< ŠÀÈ J–¿Ƽáñêzt¬EpÃöIà þ÷û¶¦ËMÞqKRn?)['s–Ò?aú¯a‘I¨e5ôM°™ûϧ­Ý}ÈÓÓÓõëQïœ@cíåÃÃ.·úEÀiŠ©¶KǪ<–=ÖÙqãI¾$Mþ¿ ´?>ûn')Ʀ) ¸C“òíæ–zÄ€ÓŠ"ìséÄTçBwÚ¢‹'ñšµñ°±Âw^þË*âXä—¥dAG®¹nà;ç}*;p #"5Ïv¸¨K#µ»)Íyã¾c˜ÿ2Á#®¦ë¶ÖÓ§æK0è}I&,JÙ‡FÛ ^JU5ÿfUjálÁJ;âl‹#ë¿\7[ýù B Wíq8‡õº#ÜžkÞ x <ÎÝ5Úëw":=œ°aT½§kg5©\Q ŒíJÿœLÒ+{<6XTÍ|ŽöΕE ŸáW{Hbÿ2'ÑÇðn•HAf¼ÍA¹ÌDx |’B{¹€aîaJ³dð“k¦ŽÕ£ù†œ8N˜ç×Óæ7ÝêO¦·§k NFGÇBm¸ŽÞíœ[: Ê9®´ðÃM!¶©ÝÂÀRyèhkçöêÜœ¬PXf{™‰C)«Oûk‹ikí†àÇ>f<¼ñ Q‘ [•ÎÞ¬.^h(-•¬¨ý—‡ÖGnÙNS-Õo¡K'-(e¾71µGôãV¸¯êïƒAÐÛŠÞM(¾[“+ó/õ~&'F~žôàœ‰Œ– gë Ö?û˜«.©ŠTËÎŲ;®ÿ&eý°è>kWŒp Ué`ˆ·îu*~cU¤š§Ã”Rï)€6|“¿©+uñâry’…®8ÖA ËCo6 —>ÏȆ)¶Ô°c6…WÒ°¯–cð}Þd²HäÍÀèÀ¢½ÂvásŽ©¢ƒ¿*F1(|«øŽj&]èrüžù_oQxx¨Ï„u~†ó¼ÛâÇŽ]nöm„·IK¤1…½ÜÛhÉØzµ: Â6=¥¨Øœ·-þåêØƒZÙ7pÿ:ì8‚—j‡ʇOîSñ„‰µë3è|Àô—7¦;áù牲¹[.$¤l¾×v¨äB„ ::3 Ç†ÊöêH{ËÂ:šïۦ̨”ÆFÅ|YNbK)Æ?ÊY F‚ø ¯"¥®ÈÒО¢ °áË×£ÕûìÑ-Œ×3ÈaV¯L/¦X³/—¡RùÓ‘¢à3U>vŸ5º(¸¥•­$q},í´¥û¡âó}ë‹øÒo¸7̱s—]û‰ƒyœ*I éζ a•µŒ.3öGÏ»Íã…SfäòôyÍ3nÍãúÁ¿·,³ÉÎDÊRcÙÍÿ†+»¸DÜ‹9]òìù,òë=‘x Ãå “.ôæKÄßòß›ã8å§“ÀžOaì^•.“N|1Ž­Oø…‹ó”‰mo¡ÇWq1­jóþ{;‹ôUü?2ŠÚͱý¸ tq#O§¥È-Ó£òÙÿ±½Ü míäöX¤¦œw®ö”¨ËTgðèb—F–ên4É•¨|«8/Æ­¿1êä5åòþakk•©$ùÛÀ6Â~#§v¸ú“–»ÁR££ (§»­x1áWá¢^ Sè.äøwKjëN9„Öì{«Ô„Yšh ÈgT¢¤”s XÈÃ1ŒQ pàWQú¦Lqã„ÇS6;B§›¥å¯Å*2vmAŸ>Ô¾Y¿Îjðß™ß>¬^Зש±ÂÐo… ™£Žë¢¡LR@€ä«e'¹^]s=È(UƒB»Ý0†Ä¾û o±û†ï0°:÷©ö#¤êÃËX^[¾tÏq€#{\ý; ¤Ä¸5‘¿ëÈïT= ƽ´øJÝ0j yœœ§Ÿƒ2:Riž/AÜÿ®[í~ð>Ó}F×ë´Y”Å!3@àtÞ²çüL¢1®Ê~¡vw¾Úò8´ŸG¿–0zܱ¡ûð’ÖªáØÇ¤¥¥ù+;í.D”šrÔYœYLA”Ÿ#^ñm·^0ÆáKÀ¸þ‚õœ.M $}ŒÂ{Ç–Ï/¡Gph%óºPÞÀL–€h¬ç^<€Ðc'#붯e²*f²ÜtyÓu圱ҳî¦åä/\i¯.Çc‹–çûƒ®?K*ü§§£äæbÄÈ ©ŠM²>ÈÆ÷°ªØ¶ñ¿} 鎎՜E¶æÉ!wª+ø„¦Ëi¹ÑxÜ=NþìpyŒ6ôíëÙpÕoeÏT´:ûXR·#›¦L:‡,' ñ¼VÊ„·õ¤FßĕݧZêiHžöØn¥…̼7NyaKÔ¯¾*ü¹-H—Eñpù(s¥Áug1IºååÙWéï~éRŽ97šù¿Ún£Ô W·ƒO‡‰‹å†aCÐ+KÙÂüØ]A’î#/ Úñ^CeòžVECUfH$|çh‡?¿šÚ¾*¿†ŸÈ‹Þôl–q' m¼Äu0(Šçn?2>¼}÷ŽÝçÒêõþ pø³´+Ðã¸Ë¹L#Çá‚Ëþ!K´pÕÄQãÅÁG±£æÌ‹:Ç•l§#ùÂᢆؙæú‡Q_KrŠÉ»§³Q¦ôÃF;†ÿ"…ÍŒ%±ZÞ1—Ù´*´ÚKòê=åýËOžyL)×÷FÊîÏ»?Ž~aÒ&úglÝô^Ä&}útÌ™.¨?òpõíCʃР9‡kŽë¨ëÈNM?:]0nUiÖŒJÄûƒ4#_DDLúKP]QB uüb*eÝïÊ›è’iT2Єg=ÌV)ªf¯†tH4­íEj!„ªÖÖYÚ3ê†@ÍíEº Ž b“ˆŠ.õþlb|çf|þí Xˆ«¾ôtF9ú¶;°ÐÈÆu°g×hZ¬ÒÖàÊtéx4·p â0¼ÿõ ½j€‘¢>CÃÜ—Ä ôòòÛ‘A”ÑT˜HØÝ´Ûgß/sŒøÞ>ägddÊ#Ð/áL–þ^=®ä•]·º•L…ú (KSª-GóõëäTTð…d©¡ž/(LFÉÛàk{ v%‡ üMäï*"bb¤ÔÕ—«fs„Ú?44ì®îEþbaQÚöÄ$pëäF"O Ö“ÝÚ@›øÒêÿó÷õ­;7uW·yu3’ôÂhèÞ¸×íÕ¬1»åiyñ³ÂWVw}M‰ë+‹ƒÌÚºm˜Wû¯çœª?N.âc~–@L« Züˆ–={G²¶›_DNN ± «È+f˜XX¦Ä’¨®tªÌÂrË}}}k¬'á###Ó¸mS†ZþÕÈï8+F‹²úÀ *8]ÒØDD‘FÍ>Âq‚½«´Æ©üùüÏK¿@;×Å⨗ո%†ó¯ü·ÄÁTÖ/ª"XSuy.[·£Ï!+/dî—òcºìñ¢2ffù3. $ohÓ ó…`Ätp½½½ÿ;}ÖŽ@!TA†/±Ñô â_D.ßÓÃH‹i'ü$a‡¸‡L a¾O’Ñ7^Ç8p'-!Sß IàÀÕåUwýÑçmëî…·¦zÓæd«½VT:TÛy£ír%11Ñà¢'*ŽÎf»ŸíéáRïl©nˆ›¤À^d¨^Y ÆéùÑ;kãçû²¨½Éâ®H«¹Ê¼ÈRN …BìÖÇóèöû癢Õv˜7%Ò:¬`‹à·×Ú/¼žŽ+?gµ´|sˆCî@eµ]¤ýni ’žž~»üÝta†¤nrgIÅÏG uÿE®”³™[ùi˜Ø ÑCùÀ™—wPÎÁ°Z& Ó´ÌMÚ׎ ¿ç»4‹(£¥ ‚ú|¨„ÂzR¥ ên/{Å9§»ã4“„½q}}re¦ÆÆÆ1¢ä²ñäÒƒ)ÌÊvYw m™ü®nqD]èŽ,ƒ¨JI\Äjçƒæ×Ä€L¾ù÷êi/…˜I®Üg]vÇ–‚P¼¼Æw…ý‡ŒÑá¯!K~">¤ÃF"汋()a(5hÀFÖ'pbèΗŽvzyöÏ2£Ì‘È. S«ÔxNk*üºŠ°´4B·“eÊ©½h>èw~'´~­«'ˆý`4Þ*Vª÷é“ÂŠŠ¼üë8 ª®îì„GâЯNj>‹†yØ$Ë»ÁïŽãÓhv™«Rޤ†úǶº•o³ð|¯HÎϧÊäÇÁ¡W‘òð¨]}áq>ø¿³Þl«^£­2cO» þrvq£½QÉ´:m æ°W Sðäó §•VÜ™@Tt4»Ç¡NVYöêA…²U2~G„#˜7ïuÌ8È…¼ ÏOæWûÓð¨€J¦Ia@h€Ÿ_a‹††Æé²ïIzOî‹zÊPE|<Æë¹8Øó@4ó§7éxœï/­³Ì?£Ã}ãbOדS‚)ã¬@ =£DÈÅe½þ^ô>©Çüæxiw¢0z9c1znF1Z]Ñ3O™ãíå{@^m1ˆßŒdÙCÍÄ„ «‘Íly,ˆ4ÔÔÐ#x^ª– nÒ©4 aG»ËyÖÔ rÞ¨©Ëª•Ú (muõ·__Š-û](—/Oÿ„B@4‹",3˜A¬;§»<ÛJ56_$ÿßëÛ]—6^7T~ GUjðd±jjŽH¾Ñ¿Û.&˜ÕOçû{ÛZ´O,QÑAX4”Yl(ž8:@EÌÈÈHÈf¼ ˜v4# e×íºÔÂ*KŸ¾2£–Eá ”2 -•Ű£8' jjJ ëüŒVN‡”ŒLG7ö÷á>PµŒµââãï“ÎÖ2Ÿ®¼|ëc`N®™zc‡òºš¹:GŠ¿GÓÿ¦GÐo×LvT®a“s,u, ,È((X ’ƒ¸ArõOWWwÔ"@XHh¬ÑÓœLDxT¶}÷ÒDÅT*ZZX"""^~A˜Ö'ø4Mëvh±x6*Ó˜Üð _¹Ë‰§·HwñÄÜQï›l´¯CÙý=ÞÄ„„#TÚàåª ˆ²²b¼îL\-ĺ~UÛe£# ¥Dûþ«üŸ›ÓñJ² •D®a£‡Ö˜Œã8õ…‚A….Œß½õݨyùVÞk… ¿}‹¢’üìþè{ýQ¸ûÉ^üî2Ùí™ìÓ¸"vPú¿ýíµ“åé´?ź:Weîu1Ì;询OIE.˜ ƒÓý§÷ Ñ‡ ø7*¸)—;[t-¡gT6äÞ8²×CÇΗ»êí®9VU@êùr5è°biØÜß.ôN‡+v,8¶ÆV™÷º¸›û%‚"€œýuC4))iµ¬‚4:wÜêõnÐåч„Mw+†tNѧ.ü@ª¿«ýË»?ïA0b,8×í!¢ª—Øb@B&êзBQ!eÂð0”«:Ôÿ¤þë{ä9¬´ »Ç‚´kr²Ü\ïuF½üfú ÀDðz‹%DAì&s{8ˆY¨ú¤BëwhçÍ0Ñ; ™ä%¤yEÅξDš³%Ϥ¿U_Çþ¼C¹ó\dJê`ÖA!NNŠ€[*½+ÓZ‡à”!°Æ  À‚§òOGó÷S€ÿP´··ouìÌÍWU¾ØVDZ˜ €Å‡u™õu\NAT´¦é;ýýb_ßRˆ*õl>}凕¸—ù:¦ â3_iñ_'²¢3øë†$Ž. ²AUŽ$KÅæE•9‚­»½BGgP.åê£÷š+))„Ýò»»:š$eÝ: IIç›cÃvצæ 9“3³ë)1–/oªZP´ <ò½¼OHÀìêêÒª/ ‚A@79]m·š*ÁªuX ÚXkÇÐ ù]¤^ £™³h°va`t¶¡ÞáA‰SPQA_öÞ!ó;ë&``aÁªFYb|?¨¤ƒP¦_=s¼t·ó†ž¾tЯÿ=š_SõAbEµ©ò7.qЗTù?x8ô;›_ßí.| ¥ùã´úŽ=&b5ãfÿ×ü÷.Ã…RˆFB2í+ŽìΔ‘x/ös;NЮöayLR–F+|…„¾µ•ËÉ™† ä„éŸÚ 6Å"!ùU7Ë«ñ£ÒqEäõ,5""b[½ó†Óñ"ÿñÅÜ<§%to|OLùx¥œdO›q RýWèÿN|þF„pKܸ.õ ÛC 5±V¸@!u{9©Ú¼º¸8À¡ú‰ßÔ»ï£lQ`` ™ƒ\¹±‘9ÃbD, oGg'Ì+Všv¾vËÜÂÉŠ–Ú->—MDjš*UXýFDÿ”ß&FCÄP¬ª»+Âç˜Ý(Èf•pöønýéï«V¢ Eà#{ê) Àe,%£á’À¬Þ,€Ia·ŒêwKe²{s8ÏYª_‡~0SRP@ó¯Æ:„Åðo®ëÎ"2r°Q彨‹Ñ×{¯|N&ZZZê’3;w{­o2€;ùΈ\¨ïúBh5ãCËXEÎÒ¤9QŽHÇáb½3ŒcëO¹Qó·ãaŠ´ /ÊÂÇ[§”Á*'*͈w£ßÒrrâ77?ÒÒÓÀ~‹”4F&–8O½@U*M*›á«(úÐvFAàp^Uw%8< êÿDĩĚR NâPzg A”zh(P¦iIbª &’ƒÛÔÔ4ø[ròê:t©N;¬8âBú¹â5® #9ˆ ÿ`#jAAß›ã×ÏÉyQaI-x_¦W¢^ÿöCyÌOí_ù6Ó?Á€´¶Šffeå©1¬îï#7 c``ÈÑbüôI¢Pcm¾ÚRíí×¾‘==bPÖ8ý—Á |yâ=^iÿõ¡"*%ƒ2µõµ•KõVˆû+ÿéô_@ç¹wµ}[ŠvÀK{•± éü±Á›mò¹‚”éIàˆ©”b= 9i x(óà ú ^±Þe ´if‹8ÑJ‘,:„jÅqÞvr fÑ¢'Ê Aè,€Ÿƒ×‚Soð¾xãs}Øß|OÔ©fuVQ¯U>ôŽ\ÈdAäÛõf›žÞJc/)µ+Óswwé¯Oñä~Ñ­ÍÂlN”_ Šº[Í$°;ªA.,'‹”7\\œn‹eùÄ;« Úëì¹ÆTùãÝ—[öDé1î5™\‘tƒéœñg#dµhž|+Mÿüæ¿»4PÜÂ+ \u¨JC$žÝ÷+™^db_WkC‹=³“§ÏKɯã{ HKo׎ðÉ*1Y÷ašÌ± ν[©å7Í>FAÿø…±r±î-¢çñâ«@vZë€+÷¦‘ýÍVAÕÁ&ÕÝÙÉœ$ù "R:æ¡ ’Gõ·q8¸ur‡p3É»™Ó¬¦KÈ@ñ;…ZpYmïÜœ*gŽ3 ½Gƒ3y?MÀý-''ÜhUÂö¨e>¬)bv¶Rè§G¯ë‹2}»_¹›_M6v¹lákl{ÖÜ*›šÏSua××¥[¼¹m*ŸxyÕ‡¨Kq];ÂBÈ»‹œÀí¿Œ²ÂõkqÇùò;ÎþÙÚ­ø)uU@vºçÒŸb14[1nFNË/V?–çìmðZµ%1ë–° eZ£8iHPCý«…ûëÆÞŒ‰ez—cR äu ¼îþ§sZÖo»ŸŒàjÞ¼¡Kþõ]õ‡‘—GVŒzßT~ r ðe¸¥50‡lpÀlg4»ª‚NœùÇÚâ£ã‘¤K!!u›¯o‰+š:ZÞ— ´ÔѯŠ®ÕA©©Ô7T?sK±GWBõAUŠs£½y}®ë¨°O²°ušäßdÊÌÌ´©fŸíÚ.>Ÿä­5'·uø¶ë»‡Ë—Ø<´¿ÝíÄòò´Ø ¨‹MCý¯û8” Âé;.“ÝN¦"ÏRûç2±h”o/äУ#¹—+†Á*ÌåÅÜ"zÏ‚‹?'&û!¸’˜\ÞçÊL9-*:lôâÔ)5K ª9P3÷}uè ¯’«°Ñÿêú2\‚jH‘rì=šøœˆï5[sl—T‹wP“x¥¶óáÛè&!“NøÕSÓIÃ/l,¯œÙàgµBîµC¶aÛŠ ÅðUi¤ÎRU„ßX°1Ð YI·ýô”ªÒ…îÝm) ð–)0Z#ö³ûË/ýTQ’tJÄ£ÅÆÞŽëjË‹¯b÷·•û€f݉°/¾N³^}\Hxxø.s6R'hp ©+‹ï0øÇÂ1æ'erDJ•¢);#ãà¿q­­˜Ù.¦í1ÞÞEšÐM>¼9™k§Æ—°Ë…ÂÆÁY“ÐÈÇ/ÜôÆlål;,'Rݪ`iÄ`Lq(ÍyR¾U¬ñålî3"6HØ‹²´Ïòíù И™›«7û¸Ÿ¡Ò À/Cêèh²Èw-5JRè{#-à]nˆÓ-\É_ndaú°žñ¡ùô¸±È±Õï„Üõòd…€Çˆ%u£zT¤ó·Åàêî.C¹³T¨ R›j++lP)’á:…m¥º~аêãˆz5ÀHÖF)ªRZÛý»´¤Éâ ÷X1Äååå×󌯟gàŒFÍt¹ê$bÑÌÝmîTÓgŠÑùÑ–N„Pø›ô‚‹kب«Ç§ Ÿë E?`=ŽaÍÌâ¹l¦=Od=Žº¸ã؈Áª¾ä«½[lâYtÝðØÏ=¿£´û:Y¬›ÚKr·Ý|ÿån¶”1Îð_ßÐLJ'!…ÜÙxÒŸZ?¨³MCÇA›À€ƒ€BpºÁ¤ A(L:rä±éúý)ŸZƒzg¡-G#[kàܦ'n+¾ëkª ç\@ë2E˜DЫW@Ág‚d1Vc#ˆ C.ÕôD~ç÷ËÏ”´gK “Œ•÷ÚOv\2[‚“‡ÇgÙô¤EìÐó¾Oæ=;ó»X\ÒM·ÿc“ŸVˆûù+õñý#'9&&t‚ùºÕŸð]kpKá¢Àî­ª6ÿŠ»”ŸBV\m÷W¥+>^õ|×X¡tΫÀ¯£ÃGPÄÔþ xé09x_†ó÷¶Îf922Òj¦4½¾+4÷T„EB3m vlÜW9.’y[R°¦Ê%Z¥ØohCUiY,s~˜vš† ÙµE³GÖ^o¤0ë¯nlЀْÏe‚Q~$O³Í–wA¼þ´m¬ë̯ÎÃPøµÈbÎŒ¬ÂÈTÝð`|}ËnJè|8ÑýÇV)²2WlÎËÒÒòñ´cw¡®¢þ3Ö›‡ÖÂÜëÄŽÓsèžÓ¨Mþ½Õ¿u~M¢“éPW~23ÓéËñ ¡iˆ„¦·>==½.½G$àu W¬L¯-™‘ép ƒË}¥9Ž å{q´9…i#ÃW¦¨©fÁÓÓ¼SoÒ•±¼íH1<¼ª·DÙOÏ««&´oÞä{_l¯Ëê ½¾TP™~½ ,4ôí¶ ×!c‰©ä/ L‰zOŒÝ9¬4á ¤mÄîÙÔfUý?Ø£<†ß‹a~½g·‡Î‹!&ÕéÕÞ([Ç>È'• ÐÐi¤Nrˆ“X«kk’µ Ŷ£ ˜ÿ"¢Ì¨^ dï¶¹†ð]Ë f+ªïŸ{ãÃbëêêzAwøºçÑ>2¢ÖíWH ¨þ×â{KÒÍ—ª#Èý•nÄz`}=í~þñîð“rá°\[qÎù»{~> Ù·šá ÿ˜•ÎÍÐæÇ5a‚_×y£o»EúÆV„ZL‡ÉÈÈαU•bFâk¸åhD­7®múØ£:*~ïc-w·*à]qÌ®ë ÚÍwÌvÔ)¦²€æ_Â\òÞ ìÌè")±Ý§Ý/”F/dV31t>xxDKB ÿKš9;ÿCš€—O”yªH¶ÜûrÜã. ã`ðÿÿj›þÚÿ;ް½¢,;g»98¢YÜU_©ôû·Nú^½s)œZfVºÉW~Û¯NgÔ '÷Zs^¯çÀ9-GB§H‰»B§ÅÁÁÕV/Fÿ¢«¬°N€)Hn5ù¹+ðyu:.6Ôâ´—bÈ´É9ÄqÙ¶¢Ê!¹¼|}®ãÏ7kýS·3ß§«Ù*›é·S<² â6T¼‰•¤¤:Fm·gb… ~®_jK°\© ¤Fêìõ[º[¿‡¬¤±oë?ººÎ{À®SG…†Â‚ýèJMuZõ,b´ÓÝD¤X¬Èýi]—÷Å*¦ÿêÒoÇò:$KC·..]ÑEXw:—²ø“³Ò+l6Ûa@žI¯©ÀüÈAôú¤íëgb²àŽP£BHéŸj:¦¾ÑU¨æ¶=#qK5ô*çÿ5Ù- ünììŒu 65»>±t¿¥Þýis—–íÃH×cÒJæA]Ìàâbú™ cUf¿HqtH,5#Ø·A¼J&ðLTïÒ-%Ñ*z:£¯”­·š‘ñm ©KB2]€ÔÔ¤ÏÐúÐIß 5d6F3÷g Òè¯aÉ/Z73u…†Iq4ŽL0Ê–Ôô"F­½ÀŒ» KLæsC#…ãË,¡t:—³¤„¶®ðíÑ/Ÿé†zŸÄvFJ$KÞˆ´¹È1î TŽ.ÿûã×_ ƒ€.忯õóÛ¯LSÍWßÐÇÏÛ]aŒÂlî~!Ä«¡Ø5ùÅð\+5%4 êh&••d…§Ãëp‰Ë~`¹ZˆËUéì«MÅ<^4}x’ ûutxxør¨óû#é0^9¥:èy’‡ÅÅ a –ž•õiò±,úð‹éR,Ö5 †\Hj,®^>»\2LFa T? !éTb¦ |ýº_Xˆ”céˆJܵ}æ€Cô% ¿EÂé­öÏPå ÓÅzçub-¾×ŽhÒ«ãƒø^p—:n\9^Q ýƒæ?­éUwüº»ís¥QVo72¿0PÌVÀ”éWk¨§ß |Õí–3ÉõªÝ“…âáªí .nè÷ï´5KzÈ œæQp. *ÀT¤Îþ®Áµm¢Ðî¬ú2›¸»»­H¹£ñû8>8˜>;d”‚ ·;ô¡Xä#µÏ_œØ1¯Î±{Y¨¾sî\ꮹÊēǖé×s*Áõ~”±×TÌ)#$X^R IHC|¼&L©“š²1¹ø”‚ùŸ®ð‹ûÁï>DSÍç¹ gh™8®ŠLVàñŠ@ÿ1, àðèè¬CÔäùñnª#Ì=î׊©ÂlR#„DJxÀý¬Ù—ɺûŒJ´Ã2×ð HL:$p~Ýôœé÷³ÿÔC´CÒ4IU L£°°:.Ô_wGJJP)D @ì„ÞQbe.&¿1NL ×`èp­ú«ªöñ‘ÇM¡×»õóñ¤¤Ú½ÌmÀCðÞ1úvé!aX¢ez-ÛÒ¹´˜÷~S!0QqùHkŒ²òº¥9[nh5ñ=²¾G›Òn/€~ µï3£Ã,ºìÉSJÿ˜ ¹©©)ß`ú×nü6P´54Dv@£”WüêÖVØØ˜,\{o/‚Í⛓•ÞµÎðÄääP Ib""&VJêà0/ÛiŽ].)FNÝXPˆü'¦ÝŠ|ܱ&‹•ô7úqL7è°‘Þ(¥AX[±]ø—’&ÅOxHŠäF¿„ö´CEÄÆJKIÁn¥‡ØÅ1Õ̦,Ô–:,O=”îíÝk£JJJ¾>KÕÖ¾¶…Ûvîëâ ûpµ<]ëÔ;µ›‚"ÿÏ–±?ÜãMëö’c­‡J¦ Ù£ÃÊvƇbô± Š…^úÙò*R,k¤‘‘‘×Û ’’ÝÜ1”ZàRM ô£rE~O¬»ÏøÜ‚dÁ¸u¢ÉT‰:Ÿ×)%<q×Õ‹¦*)_›ÄšÙ›µ¯ úÛùëu«Zäùv#ù™uýä$¾;š @¿Îaë7(l­ák¬ÚWŠÒn‹CŒ®ý¢#3ON×¶ §mðWjäo×_öUPóðà7û\q<4w¼7}EeÓ©ãc2ÀšÏØØ˜É¨‰P¿Ö®ý ¢uĽlJËäÊæúòKªeBƒÃ׿ƒí=±$áÏO(©Zo»_oiåææº,¸_3)êeLÿåÂêßèeÒ|éÄ;XƒÔñ¾;±ð#{®Vê+Âåä×76~„±š¾½:­··€ôQáhvÕ×\û…Úîã¥Fvÿ{7>ºÉ‘,˜¦ñ7##‡•™c«©rCóÞ¸-–^ú?hz!™·_•JŠœÍ‹Jå¬,OŒ®_j|yWšzbuŸ¥Å |H[k’)/T5ÈÒÔ‰«Í7Ë߸mW··ß”;Ãæ!¼îé¤C¸ d›CB`^Inn~tÛ :ø{w§tdw¤w¦°åæ~”!àþöƒ»$’ˆˆØ53Mªé¼Ž¿ÑÝÍ{ûÁ­S$+Ì´ŸÄòBdãCG««aî/Ù[ÁáÎÅ(Õ¥iŠL Gx}Ï™tNK‰·…ú¬¦»†V}'‹ã‚=þËBYñû¯G‘A…{:ÈÚš«Q¨`0Ûê{Cqɧ.ÿÌëË·50™ÌØxÝ·d‚=¼Îæ×ŽÚ‹‡vEQýÕ++­‡‹ 8Ó?µqFÙ !î+ÃP 8Ç(™ü9XïîihhXîÕ›?UÌBÔ88tòµ¤`]°`¤§[±À7{½–/0za:icJm¾'P-Çõ|¹¦’)g#—¶G¸¸•]}â!¡áCPmíAü*0ð•§­ü žñÿ¤YRÍÁq×ùëÆøç”Ž ûµø bbÎ×L¸;£("Ž2±˜88!óÕ–ÝÝaƒE &$­®u~f…üKzY\\Tûó¶¢ï¬Õz®2oæ EHËË»ªù XöõýôfÐëd«ÞçOfÔ‡òÊÏB¢O]¼6Ú)»âÈÈ œï¹*²N?©½î‹Ô;Ó,ûž;£ÑD¸ˆ¡CÐ ê½ÔOu¨VêÔÁ³}G¢ïdjZ]×jJÙ˜Hˇ¡NÏ΂º¯LÀæ³x6* hÀ¨É¯û¿³ÁR“'ÍS£Yáº|~3L;r:ÈkkJ$A­°m¤ŸÏ6 TUA€ŒÒ@:\ì%«zLD|üë‡vsÇQ¼reÔa;Œ\˜M"t%o¥Ñðè(F4kÏë#¥ ½qö¿DÔùe,(¦oŽçééY~`Û9?¯kKPûûÐÍÝb8H&ðz׈Œ¬Ãa †étþªGAW·g¥ÞÙ/PßÒÒäÒêÂóFçûvÝÊí?ŒxbndAÏc.Ú(Ê®Ï Š £ÿnÌaԳƖü†–öáú¨óro²A?-[I¿§¹]Ú!¾V.¸ÜvöGg>T{û#]ÈÎè«HàUÔWÜŒ…|N{KŽQÑÜ#p;ýºñ#´ØÐI­…AŽHR¡ÆPiÒm³¦¨ƒ· Ì1xÅ3¹ã„¤p íããg €ã-'}¸4ôLÙ䊔tÆ{Õ÷ïñg¹ÿ$æäÄS3³{û ˆ££î] óBü”/™¶·žBœ«w,§S£ÞY¨e6öÝNB0ï2édd/Zñ[ÖÖ:¾’Â@C¿žÖ!d—™·£ÔÈúŒ4ê„c‹Ÿy1ÄH*š¯‰y—c¤£ñÛ2l³ÛX[+I¡ìÓŸÿ%O(È“DÕ^ÈÚH\íZ·hÒ?«]-(QZîªÍèŽ{Ãî.eÐñžor‚6¶ùY%kè(ãÊôç}U­‚mœœØÀÉÑð— ¤Ðoȉ†ãj#d`]wê‹ùW0dyÅ A[J.4gré Ÿ¯m‹%y)?b¢¡‰÷ú¸Uã$¯ã#+Û"=0Çl÷å ”öÏÓ…*÷wƒ Œ[P]SË#!ý§®U°-÷#¾Vá§²¢äpÚL1ØÍÿ–¶`×sOy¾PGÅMIÊÂÈZ˜ÐÕ76n€ÓßꈒÐ9’ð°A^ø­›˜F²…õÑm‰vþlªzyzˆˆŠÎÔÉbÜýë×¥6´*q¸3w}-BY†‡iÑo†½U^;Â@¤BBƒÖ‘Ëǰ÷‚‚‚æwç[¯§7›¢Ô`MÅAÑrúh‰ØÉ’©Ù¤ ©²%}Èdj× cËqÈF¯®Õû<àñi¼1£î—ãùÅ…ój[GüWÙ>å·†oTáùH˜¡MTg¯ö¡.vPXeq¾<ÜdéÂÁÄ ‹ˆ(Wh¿;³ÃQèUEY!æ¶1ÙÉÚ,ޝïÁ E¢Dhƒg§}4~j)UÌEL¶B ås‚èÿ®Ëä”>ªÚ`W _ÿæó½f:FL›éÉöMøE÷0H¨PžÍ4o߇ùü|åí-¦C8Ö"œk‘ÚA ·Ä³K}›¨KK@Àú\·d€ˆfÑbã/mùTCL Šø¿î OC3,øóë׌yÒº߹ö 6&&¨÷Þ¯Ö­Hâ Ÿ…c¤{@jÊd ÚAަpÛ?0ðúœùrÞ¢dßøÒ•ÎæÏ ½qìPy••©a‘]E• ýwè„m³KcËÙò€¾‚(dOµTGÝ#@^7¹æ¤²ñš7ˆØ”b…ÕrÌOas{sÐc|Ô–°Y/ŸzK¾Ìcc?=ܘÿ«±6ðýAŒöŽs2%Áóx‘¿«§Y„B°^1…Iü3~Þýþtº\,»³³iôz‰:pòt'µ0Ð0PÌ‚ø2[ÿ¸ñk_öèEÈ>ƒŽ!ßøÕ1œ9­A+^ãü‹oëî†{÷¡¼+†ˆ“2Qnèù®ˆ`%z ÃÏK ® »%om&`½C„Ÿ"q2J, #=Äüü„¾¹^{O_Ý5y±Ç‘òS߀/#¥¡‘4³Á¬wªÓ#û߯Ki?¦cÆmë3ô_7ÓèÒĘÏÒ‘™¬Ž ³¸|uä z·+,MaŽÃ߸±@öá]ö’| %°EÍçrø .¼Ô/¶ÕfJ‚¨ ã?ÇZõCþ½ry~AA•Óš„±8`ôÿ:{ë 8¾(L´ww $Ü]   î›ÁÝ $8wלàîî¶=¿ÝÚ}U¯êUíã¯fªûÞ¾çžs¾ï»ÖùZ« mè{%wJsòó§OQˆ­}ÂbUq^M¶7ŸV×õ¿RãQâ`ÙL÷ÍPFíÛ¥–?s ÎÍ­zõáM`O;Äoª|{PôP<¢iërc3AŸËª8WØ]uû¸óQâý6yŽkÖÄÅb• ÏôhJ¢…?m’©2£¨¢'Œ’’´………PcðßB—û›sòç–ÑÃO`€õlbJYF ž1Ò’_šJóô 3Ÿ¿›£”Í”žŒçÒ§[%ØIaz&ï/ÞþjÌHìÌb ˆáeH@,'½»;qZg†>íú=÷6UÉÐpA-`äŸi±¶Iá5ÄÈ™‚!/>ùfÉ&WYå^œîA ¨»%«ª‹5X=ë™ë}qpæ›háD?Ã\/Ÿªq ×d)ìînò)Þ±® M苬þ'Æyc~¯¤6Õž%«àÒÌDyRÉqªg[n&É·47W¸íjý7ŒØÓHþÅ'¡ó7 Àóp©z«â«aNß3¹]Ó¾¾ÙÓxt”ÓÝ\B–ð¾Wó ÿ#ilPó!DÂçÂtªD_чrý%6&ŽÀÈÐÚj‡×òŠ.Ue¤«ÊêQ™À¤ÛNÝ€”I§›úw‹‹ú‡AêŸ9Íõ82Ö»':…ž=Ãÿo¨—ˆ몞°WÖäfÆÞrÒ€âë9÷³k¿è9Ë’ŠŠÊÎda’Jùb³Èž†•:3¡eßí!Uj˜Ó~ñìôz·;aµ³uÎ/Ò‹œŽ¿ NâSz ®þª„|Œ Bcààˆ4¸"$A @ChÑs ’Qâ—«žð‹~˜·(,¬òžd«MIûð§±ÖéM•%(;9oÎÿNš½zL ,~š4LÃÜFÍ‹*üŽÃç­á[0š;Q7Ó˜ôàw6.­€Ó%7 k±kì«‚þÜf½"OAýp¥“XyîKœ]dý/ÿ‰n +(¥Ís›—¾Bl'%b}‘G|J)ïâbÊ2ÊDÃyïzG8ý£m :BÕz=Ëø°Ö©¶Lm]ÔepÃÄ®RœnøŸê”®€‚ ÷k¥uK„ÓÏ+L9H­ŒKt•eKC?Ç’¶S† ÷¼WNÿ»ˆ6Sƒ•xwçòÉê…¡‘¯Ï…]w_U Ž-è¾ÁCÃÃ?8bc9yL“³rýÒH¼ËäG¢„\ì¯~ZÎÃØs((% *dçxgDôñâ”[ÁÁ~Û©`èW™×\º!¢L=¯ùòDia‘{‚¾Gë”æ‰p茋¾JLBQZÒé”ç·Ä<ö¬É-½:8´ïŒÙ™Õlô<*Ã>ë°U; Ñ•Ö;£Œ&ðÜðì <ÜsÉÚÝ¥»X÷ø\!‡´rŒ¢2ô¢/nOÜØûñQÄEääö|Bdúý¢¨Ü!M¡v$ÈWW:‚Èù­ãe¶<,±`C™Š‚Ã6âv*ÇŠH?3÷!ŠŠ1Ý"m î^܆ÔÕÔÕõ!VÅ}<ÝÒÄ2 ¼¢CTsC —¥¹×;·GaSÿ<þô™…ƒ¯¯o…õ#b”€ˆÞÉ‚á·h¦ŸcŒvaç¯ï³gÿˆ¼O·~7].‰ õÂI[uŠ´e´µ‰C±)A!göL–X*¤œeo# !xd´-ýÛ£¼üN"z6‘“> Ú#&4l&¾ß«ËÓm#©¥U& Û.p'«ê¿[j:LmóëС>Û5—¤ '&E~ ¶áè`²ˆˆh¬?±“ bÆV…2“-‰³[eeG6]‚Qëçôgkn;_ÇPݽ®ÚC†v,-ÑNüx¥äâÂ'ê¶Ó. $EBz͆l×`jh™þþD×F³vù°‰µ©ï<öæîkÓMÕ•¿:fë&v«{«« ˆ¦å#êîíÞ/{zg"küø ±«í:}¶«» ¤c(*œ×9MZ©S΄¥ó<ñ®6ÉL§¹Smì›ÙèµÛZ>vt´Ïüädת÷J8¸ÄziàæìÜÁÓvHñÜ2\—C¿¦bUQû®¼>Ëa6ºùPÆÈdy.ÿfçÀ”” “eÕ¶ïAÞAEZñþRš]”'êöƒi üò††ð\¹¦ôôxn½Ú,\ÿÿ¦¢ì‰þ·<Üì…GDÈ”·tƒZÃpJ¨o×û|Nä÷œkšÄ0Å<ˆÝÊöë–dÍ ·”ÞŸn¨\µ£e11ÍÍa:¹ºvíÏVPQEõÆP¹ ýBfd ‡~ÿé3YØ•xíÖQüŒõãÇ"d9,62 ¦‚‰*Xº©Â%ë¼ú`èp¶ê÷Í#_Â@üO/ÞInnï0ÕçÏW¯Ç”ŽöÆPpÑq¡bm¨øääá4bˆtìDptè›°7 CÃ¥®È4ŠO½¬ Öi ÃÓïœâ2[ÏG8ÀòO±^Ú[¼@zBÒÄeÛ†dݸJfv}ULês·ýÁ½ù´Á­µ"„‡ûË‚³‡Û‚êxze9ãé¼lF‘õ^†rÌšÓPψ5ɬ3ŠƒÓ³ÐàJ@BÂâåàÌë ”"y_¢T‹‰i­ `Q¦ËCïîÁHc½8;ëNdQûòÄÇ`|;é™ÄÙåv²äIpn}™!FD¬X~‘ 1ÿ~KwÆ-ñµ^¼z÷ikã,`<`p £w™Oq‚nl\ãæïïØ]‡o=a½“ÿ†|¾Óħ=I PT\vˆ¡òY •°Lî¨ø­áõõÂÿTÁ6“ooØÇÏÜêíæò\_€ž‰få¶y¾TÍ¢–³Ê‰œfiÑî>Dy…Kÿe?×n>L=“-ÎΖiÊÝ趸±aTƒ’Êi6d͹°‘EÈÉ… ¢O|<½xîøü<Õ`*—œ-Jm 4ðJhHî¤LT¦NJb˜>ïgNaô9±øfôj}-ðL!*~ºœNüáðÑÔóÀ a„}h àžÖþ'õåQ}s/ª³Ö^sô;¦¨gè¯éº…i^H„| ÂAi-õpÅ„ØvTÓRYn‚î}ŽÌYÈ8¤Å¨²¨‰ùè^e‘r¬¤™ø”g,»¿Ã¹tu•} 膷þó½þ,šû&xÊõ³Øºæ;Æñ¶[\ÊÎAZ)ËAt°è_üþâÔDD ¼¯àMMb–#_£æ_˾cäô›â„22¿HÀÞè&dvw_Œ§YÓ‰¸0×ÚÍÊFIÉS€)ûzÖ%'ª:\ï¼FAŸÄàyå$.îKnEš[ Bä\öM«ƒW„"…õ¥¬ôÞÔ‹ÃöK¾ø Ôý•OãtUq-ô›éj§öêÇwL*GGÇ8T,RÓ¥æDEïeðƒMÁôÀ—õõ›;wð¯¿4é5®ËÅ­‰17p¨Ã'ÓÉóþ-D,tå’ª+¤fb–ÛL¬™ÄÛ#Q.8~ý›.ˆ0o/ÖS3¸8Þ%ÖŠ8¼3-ƒJ«`-‡CSŸ±ÿJyj>_kO.h—.¬Hñ\’ŸrHÇõÕoò¤®dö‘gt0ù_Ù°µÝ"Øá§*úÐÈçV+Óu<Í’×­ÜÏfÑÑmmRþ×›d%úUh:ÂIœt|åpF $ä…bÆÄG"ÈÈú¸f_à§z´ÕºÍb$¶ùË™;Ñ¿ÙO#<LšÒØ*p÷o1ábâ•—Óö—“¸ý"MñÇÜ_u»>žZBÜö¡Ó:Å¿Sé@úÝ^˜!tתML¨Í0™„¯•Ä.y¿'·y·À /f¤µ´!MOõr„a´‘UVf°;áËC×ìé½8WÑ´1w´ñ¼¶¤Ú)O©æÝZ&‹õð455Ã##;…–}ƒÎÎÜÀ€]@JåA7¨Cu_Ó2Ùê%&j(gêâÊ£–‹Ë[#óÇ`fÙ‚ÓC;4 íªMÎ('bžÕ´zMõômo…&(´Õù1Q#)…‡Óy•WÑÅÅ] xqÔUÏ5înö¶]_¼—ž.³X'geÈÔÑq©Ûû˜Vß¼Ôá¨5E̺Õ3|‰y§œœ¼ÙeY[®±ÕUðøÚ+|K85ð´Cfd&ÓKºòŠî—ž±ÌÅÆ€W5LêK™A— çÀPH_–ÈŽŸŠi²——" fÝŸ^~Mý‚k7Ó^¹YUíø)\D¶FŠ˜/çÿýâïó»Nˆ 9¶ ¸Þê'Göfl¢ ÿ¤É³ïÛ†……ÿ ;¿ºº¡ëA™aÀaŽL‰=“3–ûDå{5fVÖw<õðØÊô¹B£–r0<~2Û#(¶SÏŽ™À·¡§~nù>IèO$"é§ Ï+€bÛðQ€¶ü,Ã*ûMƒÞö±¸¸W¼ŽÐ‘ø×ü%9rèõeúæ¤$_à‹MžßÔÒ¸ ]±0áÝòÚ÷+Îû¼éRËM?MÍηWSå&tÎÎÎ;ÖÈ¥˜ôn ¨%Éö!Mì”-íÃú$271LšAš’M7NÆÕ¹n?¯1YÁ0mhcÉ*n9xÏ ¸kf E¬=•6Î8®×Uüû‰¾ÞÊÌ›ÓßPiÁ£yGßÛ{PûÈ¿H§˜Õ—Pÿ+ù$¦°“¼áõRƒŒ~ÂS-râàÉza‹ßŸÐkÒȦ o_ÿX™®z"¾5ügVQÿ…¬¬l|VV4h}9Ö$Œ/?Æ*†?ª¥¥¾kC÷¹L/Êý“HÚª–Ê@´í+ƒ¿&óîÍVÊúסËèÙ Ö ŒU˜ûiy‘$¼ÛÍ—Äëífß¼SÿªÝé~í" ¦¶èÙª„å–¦þÞ*%%¥à\“6ÿt^s´‡»ÓW®UUí³UÒÖlíO¯M£¡p.ß4n£HAû9í¬K63Á‰^t@Õ,B+1r0­†.y@còkÈnôOüÉ/_”³¥è çksÓ«^g‹³ J=éÜ.­s«Ó!Mð>ÿË *J‰!q‘:G‡e4ÿ{a'xùÚOq Ÿp¦!É^jt‡‚‚‚`|`}P¡Dúèp–¥. €“ì‹8:[ cÃbÒIÆo±B@¨2óÿâwAÁŸ5{ësÉHÏ qLÍPЪ—£ggÇ@AÇÝÇeã¶Äm?Ùl/}Û¹EN‰ôߢ@êLÄ1âccc "x™t\DM{Óî´BEí5ŒiL¶ãÌyûË#‹X2‰Ùxq×§ø„ÈaË0²éÅ««+ÓÕΙæÏ?L• qá@ñÐkP]\ÝãþlÉ›°…†.P é2²c"ŽÝwÝΗÙ*HëWgîÏÓ†×{j>€^1¨´¹V‚ul1DÉV¬»™ù´ÍªÕ¼·ý¶ Ï]Ѱ;ñ=Ž¡ÎÎNSGÇËq–Tf¯»ú ¶VèN<1à|CEˆŒŒŒOA±Ú†õI?XŸ½½ìêâSaà‘µÍVO|¡‰Lÿõwé®S⢱vQJ¤Ïb]î8ª”1A\û"N¡¢¢²Psr}ýhž—ww[? •Ö$ˆbÛ_|j(É ,LF‘õ\5{Úh0<„Áô 2‡×›]HPc¾)ÿƒ–…õ+¼ê…Vfʈc«Œt¹±“°¿!˜^·x»‡…!  ]Éü”ØYâqà­/&­ ¡çŠú“âi™À¤ÄÈȈ ñ)`ü„0ML¼ÒÙ\7gT+IZË8ö$7ªÅæFýõoNà — -ƒˆžg/aŒèñõ¾¸íq\â¢'ÆS¸£—üÙ™¿¾¢ËzJg}þŒ8ÞÓüßBÃdg} >âý Ë,µØµii¿?ïÀÂé麿Mðoÿ 7wáCnô¹í ‰'&‰°Èõ@h~Û)N0UIb5tU«Fad|S'i”%>À¢ñMG^A!×ópÉðb&‚èke÷³T=ïÈyé¥^¦~‹ÏµÒ(àP: ¥llvø1^]þEÝÞ±V>9U¨Ôáä—vsãßþŒE6<>Š‘ t÷8ÖÅW«îîîîÈ2ø©¨"i¬¼Ò‚îÁ޵¬š]Ø×ï/ÙI)LüzJsM/§MŽŽä´mÆé`¿-2_²=cLQåuÙPÞ_n£CQ£ Á¼²þ–rˆ˜ý÷ϸ5‰bæÑDÏÁÊGQùäE;Âb¦€çSqu\CF¦U! (G#^œˆkús%]úÖÖVÄä6H*­·DÞ´x €ŽZÂ#3=S©usãzÁl¯ï ÝÚªü¶Z˜ÀV¤7’ãÚ¸6ÿ+刊¢¸r¾ûÃi¡0WÂePæ‡úçøää`<É+iþÕÏ¢îéIšvlÌñ «ýDúZÎ}˜ì;ór Ìä¾e½ÎÌÀØ~ÜĆ¸í¡¥9)kïò2æææ"¶ð(F“›ú·ÔÕ !v€à*ÀÆíl¤Gj=¯»íÜ×-zÌf7…÷î]¼$¬uŒ .àur³†¥í0[V¬¡¥µ³ºðñt‹• l+¡x¹YW(BƒÄ1ÆèúP~EõÃXˆýܶ‚µfèDŠÂ%¯ïÛ•×”‰é‰…ƒ‚Léÿ»t\Ï]äž,E+d0MÓÐÄ”·Þ`{ϱàQ ãÏ×9*é +ªBÌ ßÌÝ/Œ¯$ÉØt’¾SQRze†×ùëD)Sr<Ü‚_k%ª«˜Æ´HœÄdÝ)ÜQ¥¤‘aÎÕÈ]c°abË Øïryr¥RUµÚlŽžü§(·ÀÞIÿ¶ó:_‹ß~Ž8OÑÛ[´Ì°ádÜ9D6q¤™™ó®Úüºf-U/GéÔ²ütcC6EÝÀ¦-9­ßë±´5{K0²ã½)œW©Ü=˰‡ˆIªx0äµýýѲ_'¦…©Òù‡Ï ±r³³éüJŒ[n®_·‚„*D¬á./é9É~±÷ÄÒˆG¡¦¨v>”±÷DøI%u‰k¹°Ï†rÞãòcÆ(ÇšIÁŸŠÇu<á'Ìí6ÓÜýZ¯qD_Ê|ôjtc×66V<¢;99©ð¿÷Ʀäo¼"”³áŠ~ýC½åÌõñáÞfÈ)xƒôAHh#4ô/õ:%FÏõ)ke8Q!q×[F¿)Î;¿}r-&¦ jí,–¸JqmžŽlÜF„í‡Í§¸\ÍÐ5Uû½oíö“Uµ3EIý¸–¡ô)_sÞ«åŠ ½/n}7‘…ÍnLöÈí£*æ]vÀÄ FJ|y…Pj@â*©óbc?¿ò6yÓ|Ýêùfø2ø‘½Ã¸ ~7+cµöÊ‹ÍúNOdUŒi}—üÈÚ8*C fTo~ÝÏ€néu1¦4º£ùÞu¶çˆØýŒiº¥Gl¢”"]¡Ÿrt»\ÿzÁN"T¼±ð!šÎˆ‡4®¯N=ÏcOßTÚš¬áÏ 1²Õ×§ çÓ£PÎ&׈èàÃtÞxIÖJwˆŒ61Bëñ-ûà…¼üô—6o,g¼®ëý­Ç¹¹üÅÌOåÅj ™ušXº°Çö4=2|ˆL3T˜ 5ŒýE*Sªô‡ƒ¤ùñÖ¤>4ìS/w'=fPàÑ3AݶחRû‹Ëý ¢!¹PPŽHƒŒïk‰1Í®ëößCÝcí{ƒ<«>‚ô‰õØšþ ƒV¡hð»Å¤tô(²kâ²à‰I‘ðÃ\>^_å…µZ{ŸÊ_ìý‰bA¿¹Ú¡±ߺ7g¤žYˆùìb¢ÄøÁc·UÙ l:n»fœËÍÁU)'úý‚˜Š­™< ­:;m†œzoÿoJr™Ÿí‘¡Þ· `ƒIãU=¹“°HÃ×î>BÎþᤅC p˜~ÉÛ–30"s y߃$sõ¹ !³‚kE4=ô-¨zÞÊ0Êông3Ù/‰[«ºw‹²ðà-=·ê´Z“ïg ¶K ž.¨Eð»{`/=Þóäè~jç ¤/¡q좳V»P¥RW@Œ - _žJª²ÊÛO˜ÖxûÔD(# ®/MIdð§pEAe3 |ZVæœ#±W‹W_Ú/KëVhHÑlʧB5 àÒ*ÉKsµc8½m äþ$˜ÑÎÖEqÚG½³³“Ƨ`üaµ¨úûþÇÊOõ:×o*RÊ›HÝÁsè b˜°eœ71ï”b'牤ÍãÂæë°þ‰+ã×›µc@Ò¼žŸŽM.m»„jÍÔÕ„ëa1/b’µic"ñ—þ’waxaÓ%úñ[áÖôjš-ÞÊF5˜”èèŸ×™CBŽ2øB8P £˜" ¼³]:¯»ioHµð70ù¡¾ôm‡Qc{ˆ(–qÈЧõñüÑ~ ѾÙÅ–(Õ‰(Úòøò`ŸËŒ Óß—yõ`Ê X°ô—É“ \žùYÑä£'…A{Òè¡p£g²K³]íÉc(ä( ‘yCµh?;%NbzøÝðç†-‘‡1ÏCÜrǶNP8îAi+û¢Í4i$¼†?)¹t@dî°›²8èèòÊŒcª\s=\Å_º¾N§X#_ÝëîŠI™Tº÷w›Ý¸ü6¹.i !䘧© @”A’ÔìM¹9ÚùA’y""Go*!:óµ! ™*šüÞ23aøYïïYìjHH¸ÇºFD,žï±VFÒCmáÔpÌØJñ¹JTŠç–;Cœ<1ÌRÙ,˜˜m¼æ+Õ>BÌ==ŒúªÖrúù˜_ü[þÉpˆ§ròÆÈ€­EÝðK Æ™ÅgZ¨®?‹L[¯x]=ó]ö#+‡ wÝFñ¬õÑ1«ØÊž4ºÉ¨?>ˆö ,½œ„Ȉ‡Qk"¿>ü‰¿™wôª´£Ð~x@û,—™€4Cµ"e5ÆÀU̯x&ÌÂ*G Ûˆq ß‹Œá,\gÞ,Ïü¹{ómÉsJ ôYëXjéÏ|&ãXÚÀmñ*»óý é•zfð‡¡ÌŽCЗÍPˆÉ¸5¦E 4tŠ‚÷×Ýb…½'å§ðƒ¯so”Ikjjò´¨ª¬¤W€æ£¢]†ám5Es°}KÔ4¬bü;­¤„¶oÛâ­ÑÔDu@IBp„^0—4u@–‡÷/[Üæ]1´“?9YÒý駱Èâ§šÉâ÷èdµ-"MüH^ù?Pdq·›Ïò Ìš'·øEhaôü)Ö0lÁlÎá/8»Tr>˜c+zKÖãþ7äÄÓE¨1-~ åúº…_½ÏsêÝ ¯W>yE?0Ö;6Ö ÒZ›xièW¶gøqiNs+WU¾° âN„ûD½}µ;æÏž”[ïíŽxů½1 Ëe4‘§H– šÅ«•~bâdœpN £½Š5ÌôÿMòáoÊq(È8=à B¥“¸TË6Ë’§;#ÅÚMîXu"’´_«÷Ž´ÌÕLgZÙ#¦¼Êg«Ì`«K?¯íçÒÛÁ솄8É#W“-žŒ0°9?¯ðOE›’:X&¯EäS½ß–iûÇæõvóhiöó@vH@ÀoŠ‚*”M6wþ''èx+ ¦HYæï‚u¬•óûÿ0‘‚¦'dÊùlv äàÝLëßâè_©ÜgÃdwÇOÓ8¹†Î< µ+¤|H/¬F:×d眜È|éÇÁQLÕ]ÅžYlƸ4ñ8¥‰wJηģꥦ ¬ÐÜñB¼ÙîC¿ ¥›£Cr„é?{ׇˆYì6_ kôUVÎ÷â—Q#Tßó5Yìî:-Ö”Q ÉêºÜžÉL­²•é ZBœÅSyÂNÿ-.ä§ÿBLö÷=°ØQzÃNep3AðûOO匷‡G`OعCc¨4 Ûp›l§sê=p"‹õ`Wn>ˆ<ÿbÞ‘Íz–p”ÀuJxÖĘcå¥8 ÿ÷mXÔ+È·_.ãˆ*iÌyU;ÐLÒÒ*ÖÆ‚y*qôÖèÌìOìïsã›ÐO@ó¿É[™ ¨w–«¦EÁ}òªsuCÅKLìˆaîûáÍßsON‰6½yrÇÚD´ô}nÿI+íF+xRñŒ2ø`ñ`4ËÑyJ\ýá|„G‡cf±e0+p{å¯N?ø³9÷ü†§¹*õ&O©r¯þÝy² orwÍK«®Õn aZäyÌý¯µ~¹·®M›(ÍYeSL-&ЇcÄ)¾n$“>Ý2-ã[}à7#Ʀ•Àì“ [9»=Œ—ð¶8³µÞp!† 2´ÙêmÔ9Æ}6žø$ÍÆ7§ "Òûá‹¥oGꄉõÊE/ÇÂÅ…£}©G™©™Ÿ£ýmO8H+µ²;&ò嵎ÒVˆL~ùÏa¬Ùiçʉ'Â^ø¸°;³dõ`Â|ÂØ¾ØŽã^2/GÇœ½Â`¤&Sû)ÅÄ6°i"£m&@¿#<y."ÕV*ÛÇ}u×Ðþ Æp03^l_\—Í­ð™Ì³d[eL¬AšZ!HLQežÒÖ¼£Üî¡ãÉQ0‹Ü¥+âTm6~uõþ½qT°è퇩…©EÓ®¼„ûa>ž‡ ”=HWéä‹ç(*ÒTTc¿ÔG¹g ºŒ¤8$j+ÂcrjrBbÈÕ¢H¯jþ¹V)P?÷L¿MX\0<ôù‚Ú $ÔŸ,Ò&r:|ûÀ;öôìó”˜ ó’Ií¡ãRtQENÀ"?Õ»Ôrüñ£ˆ$OŸIc_n“çúÑg±Ÿ‡›ƒ6tsÒËêYáxzå½a¶Ó_=wF«ñÐÓÍî­•†K!‡î[*¡µº'¯•¤¼‰±lm'$«wh„ñ³¹£ñôʺÓ\·™Ì@gHj_ÁÖ, ª½:‡ž¥éòõ•û[祖™Ë»ë2¹Ã£Õ+^Þùíjù×ÒU¬CòµÛãõc‡÷,K¥%ÝÅzÎGAÂGGfû° »ù‰cÜ×\ܽÓÏ­Ö¯O¯ï®¯¶gd¼IÒèÝùÂ×ÇîKee½w7ÞwWÎû°qRãæðk!Çwþ~-®Î_b®¯w¸¸jêÉÿŒki+Å=ø>l \y߸i÷ž\…A,Xv˜WOß`Úú·M÷ ¡ðÈâãÿ÷Å@Ñš‡ÕÌn’tzz±Ò²¢!³4EÖH؆€¨¢ ü¯‹~úvlF¤tœáéùo(ÿ¯âþ?. áoç^«Äzãµ—w\{û¸=þß\T’BI“€ÿSý.P­¼w’¤SGÿÞȇf|!Á|™ °€°ÈÌŒhòÿÍ)Ê\õv+>R²­£üã»õ¾Tƒ-@ƒìÎÛ¤ -çÖOý+ŸŸ$¿~¢(í†gdw×;xH@²ÉÙ#Ç ŠŒ£wXí-*¼qf$fæÆÎ.;xn}z.{FvÛ0ukl¸öê”â€ß½±ÛsJ#‡¢znÜÇTñwÛ¶§@uô=-œï œ£ Ö=•sÞÙ‡žL ô²?e#ýÖ“‡åÒ}ŸÁgïn/À¤32·¯4{`L‚{²?ã°S) ùǪ{4;#$$8ŸÀÈñ²T$¿ÔSnH²áQæÁgÁ÷ú··ÛHΩ¿ž‘5ÌÄYõ˜l$œ¯ÕZ˜øñÊsG¸ ¹?ôæµç?œµÃžm”DÏy±> —É&û1 àIõ˜OO]³)ëèÀÔ7­‘ÒÓé¶/ÊúÿD0FÁäg‘röÒÀ‚9ØÚÚÖy?OaB3íÓÑ9·´·?Э¾ä5Žaóð^y‡.ÄýüúÕ­­‰­ÔK ô[Ò Æ^Ñø¦ãE3”¹t1~§ª­ £¯|þ=–Í>†=#->“¼mk¿Á3—¼y+~hŒà-³TØFõ¶>Ô!¥gm•ø}û·^§wOU“_Rþ~˜œÓ;?(5:j*»kB–N€gúF®gqa˸Hße~^Þ{î»&ƒiVçò¤þQM¤ôï‡c‹H—óÈ\)%H9‚;E°…§[{ G§ôêF¸Ð² ÔˆÄÎþæm/×]%®..Ä”oN¡iïã½s ´7r»Ózõƒ­û$øÀî‡é¸Fit$Óm0ì^ÿ­•þÿýýN„!]\m`|”ôFCü¯¢ ._&kø?PK’nYTâPS:¡¬°err.iconset/icon_512x512.pngUT T(bU(bux èè<}T]¸öÐÝÝ- tww§Ò)ÒÝ}(é iPIABº»[º»»ÿá»÷þk ¨Kϼû'öì9'RME ™4y9) €^¿áÁ—^S÷à$'9]WDý‚ªÍ ÿ’ÈMZÇMÓñ“›§©‹àééÉbí`ëjnêdÁâèb™q,D ”€¼”¸–Wæa–g&®ôý‹è´°5ŽbR u.ÃÛˆb1,,L¼K6À²ívòÇã”&ÿ$ðdz\§¼’g„Ïz$T¿8<¢&†z%6見çÓóî^úþ·}¶FÎIÎÆ«€æÏ{å·J££šªÂÚÒ”‰r´whòËe¥ˆû =;ü_¿Ê!#³¾ðÓbGv±6½ ¤¡4„s;ú+#¦‘~£NÜä4’yp°Î÷Å´8þ„(§ ù¾š‘¢î·lª¿inY0-^ä†þEÉÈðª­Êek`‰Jjw½Ž [^ñ³Æ¾×hÑىю„Ôl²Æ½…¤dçŠÀdzhÞ%7Í?é#ͳù¾‘´Ž‰ð@ïOí_ÿ{›;cçóRÉrÓŒ»ð¸È‹Ùà»(hmí<†¨J&ãÑÒFó^ôÃPÜÝÝ;¡ö^¸”OWÛÏó i½Ã×뀻8­glù·à"IÅ/>C¶?Œ¨ôgô¾eÖzëx±2êšš!ûû6VßRd/ÍPe©­&‹ÐÜQµµq¼‡,…À¥éU™u룰¶G Tè%ˆ’'5I,r[¬‰\äííuéy[ ÿ~ˆ.?()+“64Ì*ŒËbWÓ0ˆ9?w‘ê0ÕÒÒÊ• GÇ/ølmþ‘ûά; ¯N5ƒÎŽgÐ5PŠÖ;’  Å–×ãc<ë!zä‚=q¨ócµÐ†ä*ü ÆÎ+*zÃÖV×ߢ¥-íìÌ¥¦§•-ì›o¿PK}Hõ%^øzŽû݇r¡~»8‚ùk(9Zªþ[BHÀÓ½îùÁÁëÛx©$V5…<…u=.¸U­ÙO°Y#R³W]öZ,'çÑ‹ì,ì1wdw5dµŸ’³±Íþ pˆPÿêãÕ6 eÛZ†¸”;gÊôÁÔÑH‹1fUyž,‹Æ²›!lÆ% Éø€K‰¤'$ÛžV^Ik‘V¼NòþÔ—b`9üÞðÈU––Nn ¦¾Ž.XÚJ4 Rj‰5J¯AìÍ}%lÌ,{3tÿ”,îº ®q÷r³¯pì£ôÝ'; Q¯-™ÿÙ¦˜aàïÝû¦a/˜ÍH—'t %#àF¶™j,Æã?_ðñĈÆ~”¢‘°Ôˆ#m­K”û3WZZŒOüd ªF“~Ìÿ*XœB4â{•Ò%Ì„ñöN2‹MjÌ, û!œ¸û·¾7¡5Hp0Dç|øÜ÷æ}~I bžZŸ¶LãhÉÀëÀjh3ë׿ÖÖÎpØ‹#©¿ ¶ã»g!§Õ¶â¥jŠeYªÄDÖÀwù7ÐßΓ¬pxWÄž¶IŒýá,:áÊôóìþÁž²u†6æyG !ÇÕ—K¹~l—FÍ17!è1òËÔÿ¾‡s£J ¾ìýu˜‹gµ¬5õ<ªuis•`6–bî¦7î~sL&è¡dm|Izx><:ßàj95=m:˜Âì'ºš@–ñÉÔ÷ú°£Eã†ý¶‡K›“à@÷õݽ竓••$ãR5½‰?=º– ¦J>]jJ®¾·ÁJÞ-—‘ԘLJñ˜5P0`¨Nïú)·;¤­©·˜8¨ç<¯¿aB+O2¹ë²B¼.GfL=Ñ6S¡Ä=ް-½t‰w“Û/ðh}ø‚êPläÓD?Ä#ÊsSRˆEÙÿö|ök.1ð7[뼺aÃ„ÓÆ½¾ 5 ­Yqü¿¿V¨ÿèÜ&ò$,@(°v{‰á›,!̽ÅóŒ:±-Vª§aMQ3ðóg¾b* £¡-êiNAK‹ÈÚ*P>½Øä}ñ½Ê¼w&"Ýß­Ö8JjB d“q;T@9ä¯ ]°cKd›¾cÝÒ~”2 a(%ñL•zAŒ´üfìúR ~"Ôê&šÉ‰wØ Q#£I"T®&òσ\ÈÖ’]ÿÃ5+$µ¥)…*T‡s5èê[‘¡ßz$}9›¨À "Y yäwõÿÁodz1…<ã¸ÕR]Ħ'ž¾ë£Åd2 ª®€}©Þøp§Ü•‰D‹#‹)G^¸¶”£ …E¥:íK¹·jßêgá`á!鵨ac…®;1J0çûû• ¶u¹šeëÆhøÜ °69ÔXOrÉш%Y€ËU€ÀÁi'0–:M·ŒixÄ 8m0òa$fiÂŒ¨èLùÞS:È[uTÞ•~hsÐkóA­¬JOTÆÑ:?±k±²]ýø×ZIÍm +Qî{ÿÀ2£#H™‘ŸuªÍ¿ÿ:ƒÀýÔî{Xàæ?‡)»)ÀÅüõ`¦þ`›‚.q[”¡—yŽX, H•·’Ê’­ºŽZØý îŠZbȾM³6ò8¨þuâæ˜-yBvø¾õ“³JºÞþÂV·"mùÛwï4÷¹=ruÀípëh¡Ž€µ÷sçšj ³>4[ƒsmˆL. .z+½“²Ž£"ætï–ðO¯Uúœìüb4ÂÀ—YáþJòtåE¥%õ#¼ìhQƒ=t×;uA;ÿ€KÇx©I´Cîµ@î“f¥Æ77wîÔÂ1d¦tˆŽŽnαõ)÷ç[Šr†Apðz/÷&£)yÑ“>BY¸˜©Æù»ùÑjB¡/v˜UŒòíæ }©y·5“¹~e+ë\$Rå¾ËO¬ç@ÚiÔJ?'åÛΙ:¨Rÿ‹£™Ç¦ „KZÚqw²éimëw÷nƒi9¿òó¡·¶¶—iõr¾UŒˆ^“—³ñkM¿C© ¢Ïù(,býg½4§÷.nPî[ É™NКE·-­â®m#eàZ‡/.Üî±¼‘n2e¦›KÈ%> ÃjÚÚ?v,´VtÌÅfÝ“¿~Íç ¿óí³7|È/0Ã×/ p”Ű´±2ÄÀWÔ˜$FÞín–׃ýÛÉÂZü5Ác±³Ó5JÑ—Ã:.¸Øɷ㿾(® oÖvÎ8Ÿ•öÜÓˆ˜M$“À3è¡Ô|†’’1>ÒíbXê¨üGÿ»ó­—t~×O¶rŽZ9JUõ•@ :úLÈi–çÿó›ü€Gvxôп#Wòq¹·hiwi˜¤ªé2ÿ>YCKûƒþÀGÁ7¯t¸Èyùù¿O$ïŽañ•äh³àÅÈóü˜>£IžÎ[6Š’t™!®xÑtÔ­×ÑÂE¦bøïÛöª­=Ž¢&²š°ó[2 ¶ÉŸ•ɦygÈH–`A}ý@IšƒÆnÞ£ÑWÈÓ€¯žéwg‹A »Íúˆ_8sÿ°‚•-4ïÈŽŒÌ[8D­q«BS|½´Ïßo³gœp‚‹b¢al¯Ã”re ó¸Êz{ó ¸í&üÎäÚl"öñ«·Ïï|-»55Ðٙ·•8ÈŠðã‡3+k?bÞM¬– •Öî>ßÌä²I«çƆý¬ý¢É’E[Ý/nïa>Ix?~¨"]"‡w¾6ÔbÂ÷ .À/tj&÷ñëq¶ŒXÛg— ¶XõF?¦©gðQ0!»c”®H+6±“Ôbvf擟ÖÉ´ÔB\27L²÷Zßj@±ðh»=”N—  ­d¥'¥ G®Õ¦ìöȰ&`? _“ßÁ—ÂKx©ŸƒÙ°_b;sË,SÝa·½SÑù¶µ¨¯ãïó$;¢ % ˳۠šHúŸAg 1ɵû7ÛK]¡×}oÂb¾ñ¤ef‚„Ò™jµ`Æúm%7ÔØü`Ê2v´ÜÈ{¹ÜœGæÇfŽ.æÍo¥®®àýÛý]2I®ß3ÿ†¨”I?v‚qÀ™øùµᯓ{5QØcùuÍ^RsaíB,Â|̓ے>$#SeÀ×>„~äûGPP¤H&¤ã ­ÁHeÖ÷xÎÙîü»ät“„SƒÈ¿øâ?÷üô ÿÊߦDæ›IèhdÄîö½ùóK ï߸,Ç£¡©Ïɲ²­ê$¦Îäv"NL¿#nJâá˜Lþܵ!NõwÅfvU®Ê ŒÌã Óö%Ð( ìL¨0rNòÓíì-ñ!&èÅAó¬ÌÓqƒÞÆzÌLkk²¦Ë¿4ÊÿþRœWá ýœ\2¡ê‡Åâ9žtû1(Û²‘·Ç o„îw <[î÷õŒ‡/ή^f)~½WßO(5ýè¤ê‘à¿6Ú }@$‚½’˜Ûãmi¬OÿL¢è) ñòHŸk­»G39ÕtŽlVœ½_Gè-/±:ÅÈxÃÌ 5~…jà®WA:|ó+ª‰Ñè‰ 3lô(T¢PSx¹˜TU&äu0ÀAÀ4h Æ—<£x^ýu>Ûè.y„£š &[=pRY×Ý{R%K×ùg*køL±êÌ}?m"‰`Ê8çØ{gt··M­–@BäÛ“Üú-þôݱˆ¡K5†P•,]¡wg–"}oŽ)Xôjv1Á¡E á\¤nŸPnQàÕ_ŠEó|®l¸2E0ÑwJmË<µX "v)žªEH¢;ÓHÄ ­ƒ‹ Kí €]I«]àöy•ô¯Ô‡¾pç Û[™ÚÑÉ( QÏÉCŒòÔ¬¶@Á:º(¬†-K ðSVº1v`ˆ*®ÜS…çÚt#O­4²%°ÒKQ—øÞšN­øü}*·úÇÕ@«>âaËú hª9«`žóFÞ?Øw!Þ[I~E ý¥áôÕ^ªíæ·.;÷’!kÄÖˆ5lß¡,ú*Zów†£Þ+U _ÃaˆðíøG—äp!]}ysÇü™æãŽJkШÞBù –ÿl´j¨Òá"ŸŒÓÏp¿ºb䨴ÑZI{½"hæôꆩ”@ ÷\æëÔ[ÈißO Z‰ƒT1ˆkèÏÝ7SÆòApqj$IOïÛEKVIë>W ùQa\èó%þˆ.íÖÇÙ9ð•¿vp 80‡ètK3}î{yÊa5”­¨‡¾x¸›¨#°Ò%Ú?šc9½^ˆNøà»záÝV·…KÓÖ¸'mïÛÝïD¹ØqÏU õ›û§£’(¸ å žüzˆÇÏŸ# eÜ£€ëãrëD'1Y,ywè¿×¸Ötá·ÇKfFŸ1mªR®_äBŸlSýyÖ@¥u)¶¥0œÇSÔâKú%A)i+læ½# ÌÜQP–¼zÊJ’«AQ”á3o‘ú„dfxkà#”†~ôióÍý¤7ìSÌÓž ò9?e‚Ý<ôÕ¤*˜"V“¯õKrÙÜðR¾µhQbÙNO¶Ý?}m7k¨ë¼6KZªì¢‚¯ŠíÞH!¦ó9,Ö×­xïd¹´w&ȈqJº”§=$” u“ü…pœ.Óq|Ðÿœ{ÁNcާϹe–0j{ëÌJÔ™ ù&­—†/Mæ+Ñ+Ù÷>33wl?oþÁÖˆò¿ž§¯ZâH¸mQ±^úûGH©$Œ „y~1ÿža¡ön6ðW¦où õ\~À]á õ&Üž #EŒ ¯¼©èÒé¦KÛnÞ«äàââBœô&º'ÄüÊ~ƒÂ6Ê$µrðUÂ}œ|a/×ï&ëÄ÷éËÕÿ‘(±L¬Ö´#{(CNàq¢w˜ÔÂðÍBÃþnkúÎt‚ÉWâªÉëœ0¾mÞ®$xàdKÌ>Éd|‘53³´³sÕ–•)p„+Þèu¶ŽÒPlj¤(™K®'“½óÌjÜ 7౪â©Æ~EÄqY­õ®çæ„Ãsø$úx˜KÄdt$íÓEÖ̃o:z_6Eå›9jc\o͹ÉÔ ´q?˜y¾ÿÜ¿PLajX² &XXøòeó8lâ­×–ˆ¥FGuˆÖydþ5+Ô?~Áüøy®Õ$ö} j§38!¨&jÛËsÑø‡.bbR‹¾ï¾Ë'Aù V³ådÀà'%)õä~P‚ú'Ê’#!“§rA#‚„ùÛ›3ÙýàfŽÛeCpÈËŽÊ÷ú–9øÄ‹høâNEØSÂ8mñЄMo³ÁLHöl›G1IÍŽï)0þ«stô9;¹ÈïÄ}dnðwº ˆh N>ö¢3‚@‘Ý¿£ V'š£2ºRŸŒR#Æ£àÙm³ŸtïfNLLñ·Àëh}+Ê"|È'!ˆ5,êÉX^gÔ|µ¥'žƒ5,.åàD••+vÍêBûU0( å ¿ÓG: l‰ëã+ýЦ¶þ,ÇíèýJ oóv•Ho¢5_^褨%+^å^Q D+s Òek¡¤…Ý>­=HZZ:E9WzOóýûZ—µŽ°Ö *µSù”½B þŒ¢«u^HЃ)üß>T VF„uÜ :Z³zH!ê„\Í ‰äðRÞzÌÙ.? íDW¡yŽ|Za,dÜóËùV4¯˜Ð[pß³©©€)¥¦¡ÑñBæ*ÅVc‘LߨÇ?´£‰ðbðT$¼÷ÌÐtñiX1˜9Ïôƒ›ÚjŠk¤3´Ïýô4?rd(z‡ß zÑôÊgû‘MƒÚ…ÈSCL“éF×þ$:‚4í¹ý„Ïb⯙¸ v È÷ÌÁžùê7"‰³=‘ªsŒF‰ÉÍ‘DôGV$³—‘c¼ô8—†àÜäŽO 3eú0•^ …°Ý›(äÕ#'Ñ>Ò•”&Ò¿×Î8"a‰µ9b I¾}Öÿ­0 ÜczR4—%„¤Ü#¹rá¯æÅ 0 o®@ó¤¦0^¤L²Œ#†Huìûûã>(´¥h­a7ÙÁ.§õ®A­Øa†=ŸÃÄÝNõ£‚ Ù£–Ê&e^Èé¡¡O€Í‡WÐJ{‹Håç´Ú‰C/ØKæ K ¬¤Œlâ°1»öϵ4\nß õÞºtUtB“AõÕa,t|@3*tʶd8¶ÿm¼¦&ÒŸ?õ‚a  ø¼NW rŸï07‘ƒ‚ÅžÿZ`6ûû¶JËå^œ€¯¬Þò0∺yõ +’·°¤¨ÛÈQm¶<÷›î“|qÁÙIQGñÔ?Ï¿š@‘Áx"ÃÙWíkÂfÅHUà{¹{æà×Iyá,áÄÜ2‡ø¹¼)*űƒj߬æÍe¶ð~žÉšìi>]À6·`ñÐ;"ªœœ~>È”¨’.¹˜’ÕýÍïA_ÛÝÝÞùè饎N†?ô{Kž†RõµÃÆ1D±B߃ÒUpÕ/.§„úhžð©N0¶ïÜŸóÕS=†ü„«íéR¶éW—7ž‚,è?Ú¢†q€±“$# ISc-#î®´ø?t_lszÞ%Ɉ‘ƒ=`ã‹[™¯]Êw…ø{E–3}ØÑ„z Æþ[u„ß¡LÂV‹Ù]Ÿ<ÊýŠ±Þ®¤”ø‹Ÿ|¢:N·'Äëÿ¨`­Á™žîUÞë¥ úå9‰<5³Y1N>µÙ+IšÄ¾ßp(øiå\`§BùÏ1¦Y‘ Ђo“+Ó5®‚㻤ɲPÂ_Ön¹ ” Á]JÐ=½;Ä婈8JæÚ‰…Iì°ŒE§ÇÛ÷¢X¿Ñ2äH5Ä·º¤àõ Íyë£Bò‰@„…«µî¸ÝÄ©ÿñîÂ7£{þ§QN:­  _0ƒ?_Œ\üyùûp‚ 5-J4AËg›²B™å$!.Ük@õofÖúãHÜ£7Ýð,¯l\þyÓå9Ãw K|/²±)Cë×ñŠÊÏ--º€¡0K2o¬£Áuç[o€X0Ðs~Ž4rAÂŒ¼¼ EŠ@#ÞT\‰ ÒzO}ºìME Z P¤ÜD$7jêŽßv‚MbZ£*ì r6þuÎWïÄ„®¶¨å³ßºðòOkÿz´ãUªª«û!ЈC‹¼DçqÌý¯òïÖê²y×Ù¾.ËŽšˆÂwþ¾ˆGp¤˜pOUÖFO~¾‡‚9o8ॎ؈R<;†nª/óƒZY-xÅ’~h#ÈÏ_LöI‰&k$§¦ÂTvÅðAåûʧ€Í‡_Òz&cÅ¿!+z*¦Õz‰ý*ÃG‹$5³­†¨?mgä>~¹já¯xîж[ï f°n.¶g^hY³áXº `¼¹D”U=§ÍnÎjð7 {ßߦ†)š‘èÑoLÙ«XFIFiPNb¯?N¿ÁDÒ¯w¢jÔOç‚öu’„è.¥Vë½ÍûXÈÜX^I6ïèÍW„½üRýpµì¸gkgvb™ø×EÊpÝ2|¡Æ€,ü H”¥Ì²ü%Š&6§¿` DóBÐÙšaÒ9¥td{°U Þ½«&„þ•üø@ õL ʦü«ƒðŸ7Ë! iúD'¥æÙKö9+Çòáþº_?Ýÿ Æ«×XDQ°Ãã]'hxn®¡{{ò‘Rç ûDØ»ŠÒ“úÂEÄ `7Ì•ˆ,ùQZÃ2Du@]à3ë¹áê/më%Á½ZŠÔÿ8Qí;4ÿÙ“ÄþÌ9"¶õS»¤õú_°PÉ›óÔÖÍ£™VJØñHœ§”|“UÙ³üUÑÄ$'= «â©%ÌsÙÒšû®ú*>¶dȧv€aJÝÿ/h/Þ' U†'í}Ó|³lî¹âJC¦ä†Ç Fò»<Ì}‡z¨+ã˜SVÊÛ EµI> ¼Ö&ìsõ¨Ì]ªØÁÒ.­?¿ß.[üU¡µ:ÂZ® ¹v‚Íêaº"j.¼¦†å í©¿åúç‡ûQÏ¢UF°3®&µ{¸vVöñ@Ä»û®·%û AÀ¨óVW;<§A˜¶õÚ‰öA…¥ä~7’m]]¢Ÿ?εfÔ‚Èp|8_­JÌïò½ÙêqP±!å#¦µ¡3“qËâyøLŽ v‹d¹íÖà Öí*LIŽ?üVqN®Ý úoOV’’*yòO¯Â(4b޽W+´5¢-_šAøDˆ’øJWÿ-s°GèÔ1#džšdÅ´zåϪÓ–•?2D,KWlÞ»‰Ír[ýE7ä\þ£ƒú­ˆ ?ºÛ˜˜˜8?¢›‹4À˸Æv¶KuˆLPwž1¹(å¬-åçÏ·Ñ©÷ÇKªB¥Õ&ÑÃhaä0 ª»Â¾ÔÿªéÇ ©G¦¹mÕÎVvþœ;ò=¹ýxœû~{”ÜJ6Zgëƒ4Ç5ΜUe½oÒ-ösaÅjåžÖ:èðå#þ¿‘¬€9· úÜ|PѺùýÁåßÉ´ÿä.§*6ÃÐ$ÿQ^<¯\7d¢Ê\üç¯'ün|bô‚kЭã¬V’ /,]œ¨¸K6rä?t5¦;ìÍ Œª¦;‰U3öˆÎsç¦å"Oij êfH¨´¡¤sµö ެ͗Ø~ =°‘¬¹ß2&ýØÉqÄp¿ÍÃWòù4‡¹ÇÝA,É…¶ GoáX ,ýÛ°8£×íE…Æ-'­|"~ã‘1ŽÂqá*¢¨iV+G²[Ÿúhâ“Ï(~ƒüjc½þ¿³\_æv)í2Róãoöó PãÊ^>Ýð¾×’û7›Øj•ìÈ{~³žÿ YŸÏfˆkPC,é # Ù#A<]¬ÿ¹øûwØÐ„.ç îh²xT‡^å#3‹5ìGP“ËqD—Ӝ϶æßþüù ßZè,£­~±ù%WZ:@Q#aníLôôѯ’H~4Å|sÚx¼Ú]îË9K¹=O’WAòè¶o&}Õ±ñNÁªðx)Ñ@Gøw„ºŽ ߘÊYäà}‡¢ìG Š•™ÏGd1Ø­cÈ»¿‘]ú.6ö)£¡Hlì¡åÅ‘Ì]¾› t—ʼîÀw/ Eä&@ÌÅB¬vçÅûÜB+ç @GULè(…€¥)’ù“+³<˜¢oJ·?ŠÕ\h“s¯õqUw³òîà ¤/¹¼²™2[~Ä66—w`æ\T>‹G±¯Ò²ZâF„¼$Yhi‡ßòÿõÍ ŠÊ_¼Zö=1lïnHyÝA¥ý<5æ^ÍmRÙ»¹''ìsgIÀx‰;f…èP’ùù¨Ã ¤[?t*þŽT™^u×6øf+1Õ6‘gœé¶*YÓøýæÚöd…uýâÞVIlä°¢á,Á¯FY‹/,Î g$ÉäÜ) `Èì¦>âw Fÿë¥ï9:f°xìËPæ¬P>ä‰\Ãk$n¯í'†É·%iŸç] ƒ„b†JP-Ѹ'.*¼8#x­æ»ºqÛÿkï­ßƒ,$ìöÿ¸bß©PÖ¡\ÇÔ¤ñ¥0ëºÛàÒ“ò£‚Œ¦¡–Í"a2NÝ*-!ºÅÊûÐOœü&¾ßBvǃF«:ÑãmP…ãŽ6ÛÁi1´!Ö#¼ñ¶©Øvç·"Ýò²p¨nì»"ËÉáTÝ;ýI÷1©@,OsÀæejç%óWbÎŽ¸ÿF¬„¶6. vdî÷ï„ O¢Ž¼‘£ vâbmÆi‘e_â0ZÀTÿð!\‡ ( ºmK ’tø$úwUor ÈPµ>O¬<¡ï[æ€mëSòÖ†,»èc»£ü7îG¿ÆH+ZC¿ï“©¸ÝåÍÕC8¶ïqé¶vÍÚäx/”$egݼþR¹þ¦@C,!gU´î@sG–Îm/C^VÛ?ãqWË`ú²X )]ž™É­­…oô8 5 ¬ÜBk ‘ÆJNIÉÿ^?çÅÊ(mm•¦ü›ãHøt^‘[ÜÞž™K™³5Z>T‚ûaX0”¨¥ˆlÙä«u®dŠ€SýäšÜ56›lox´âœã:føD—›ü[ïnÛ¢È"Œ!©õ‹!7iª1.[ )u17²(‰ÜƒO‚Ÿ;fÁßæ‹âF4Î2¢>ÙOÑGºhÍŠ3À­/cy\:¾ D¯þªE„ÃϘ ùNÍ gË9óOÜåk®?k öÕ¸—üõk>¨¦A‹ð'¹¿G+xéFOK+™ Óž.&`1¨wØ˃ãèÇѯJúéR3ùùØóuûŒYAo7K°ÀçÞè(ÇÜK2é"ZÌ ž3»˜o«NŸ~k½͙F M•«ô“ÒfXÆÎóŸW%ÍKj:ÿ{–pÁ‚wXöú¯t!Ž N¢K/ZnL’ö 8dà§‚Ö{m³Á÷¶Òêjz6„0VÓ?µÍ"?šÇB©ñªŠ=žóa"6¯G³’û·Ã]1ʳBP&§ 7bg.zè_ï·žØ[¨Íz)âîdÃ,Yæ£h1¹ÝŽ7¤ZçêØXzÉŸ†jú 6‡¸ìD)U(,XãÅŸÏ@Yú+“!ʦ EíÛ_"µ&{iõ\kˆrqªÏU&}Jâ?¦;2®~h[žÉ@º)#x°iÚÚIà¶é¦SÍÊRG¶q$Ô 5Cö¿Û-ýÅ ÅÄÅ#(rÀS4ê+W3j T«¨«cÙØØ ý~÷öí3÷§¡´j#ÿ+íÚ|.hƒq©¦I î.L K¶>Û'¹jA”“•gHÐ #Ro©2*Gnκ“±Ocîѯ§Ì¾Á ‹”Y 0LãD­ìÆwì竾}þ˜t›^oºCäÔț۷5Ú›6ÊY¨3ÁìöI; íêÄÙ˜M”ƒµ(|5’”˜§QO-_Q„ÈyÏš––€1ÆâÌóD1kXÄI:yèß¶ £‚NÉ¢T%­§SËþ¼ i´g‚7­_ò7N‘?ÂFà&~AhwpsÉ66Ý'9ÿùó[ڛܨé' ZXbõܽ&f¾±˜ÇÓõf…ûÐÑjò!77Ô•ß{_ä2ÂìÍ ºn2«BµÂ‰‘R„õU(èï„3àMJ©>/5Þ˜Œf7ƒÀΣ8-¶sæ¹5%6B%¦ÁïÉŸ;ÖN£9? ñ¹,Ö;7=h¨ &ÀCºÄfÕ„@xyJéÂùgž·ÝŽ€%xoÕ*èT©0ÇˆßÆ2z°»â€kC eÕÁr·ñ`ÞŒÿí!2çINÄ5=ìߢnad¥ ·x _ÞÁ–4(%¸>ôVÄ’öà 2,èyùÅŒö§ºfñç×åû¡–GÖqϱ¼¶ ÉR¨Æ›Ã =ÝH®q ô³½Íc‚œø2OWÕ0v' a€òP­ÛrP–ABlЊ©÷ÌŸßÕ¸ÛN-»DWýʉ/®–oZÃ<‘>‹>—>j,0™”>ª|D8Ïs>|"Fd˜ÎcÀý«’Ûa°/ •ÓŒÏ`£bí«;“{'Ä’I)ÆÉ™÷ìŽ|ø…Ïj\)zR×â›”Ïyù÷ÞgJ¶1\Q–±«™ÙÎ_‘•ç)cu{èÛz=E)ìuº:Ÿé”r…ƒM“ ¡¥6[.ýk­3èöý÷;Dffé'¼¹Ç?‰ >áË&Á?F¬üˆù¢¿bOÜ6"†9LŸqñ|ø‡?ØRæKdƒ? dimÔ ~þIýýÞ¿¡§êoúÓ–ÎW/ßåW·Ñ*STÙacäy&{8Mhw‡8q…Íß¾i5{:.ƒ‡ ê Ôƒ°/aÇ…æ!{Ðq=8£ —–•q/¬Ü²¶^’ z¢‹•œb{P »QŽõTŽ_E™ßJ<…"•4ny=¾ÆHÝ=?q‡€ßÈ¥Naן:š‚5mžÊôíâѧIX[;ÏšXK;¨h\J/Ÿ¼5YM}æp³<ÐC„£ÌFwry¨&Ùlî“Ã4ø>Ðù±*øÑ Ò¡„w:º€tpC#@‰i"Ž™KEVþº£•„^K[.£†»S-þá€*ÿ‹c4 Ç·–j,³úEõŸ®ÙÕrÊØ‡qŸõ/b2Ikw"o]yÖC/¶ÔÖ­‡Wfü &B‰ àJ‡•ÛªisW½SŸº-™Q6;¤k7‡°¢Ô¸îëx¡“¶¤eÍPkÞ3k™—kk àt£àe³Th‡{5;gÚ Óü­g4/e¶åÈË»3@QÑMa3Z<Ö±nhcê8W¥‹”¡õNkáèd2.dJ4HŠ2WTßÓÍsXØ\¢lþóù –ð…eKcÚ÷S'’ÛOÙfP^æAÊÕÑ&¼¸ o¦žžÑ– ¾÷™d2Èþ°¸<±@n¸¡Pµ(וfåÀZWâб8šÇŒ(~7´+Ê>S§~jqR |vÀ‰L4[Äêþë6–FÌVç–ÕãiŠËŠ£l-L޹BQòó~ªzTdÁ³#)ŸlX¯ Œ_év+5Ïîßf!¨'ˆU„ñ® bößÌ ?\¼ƒ•:4‡8ö2 ÖmànöWkB•b™\ûÂ*…eÊ)¢_åõʾ|ö“k¨Õ|ći¸6å¼ß9)SXn¤j[>w½ë0¶YÂÍ6ÚÚqr¿?+3¤œQZ¥h3­HNÈU=dÿ!ÖÝÝ=7Ùãd¼ ×pøÌ‡X)M5Xµ‡æøMÌ>_=))";°õÐ*BæDÈÁ_léëf倗ºñÓ}Ö³-”Ù¹8ï?hSk=¦Œv<š×ßhNjf#}èupåV´CL{€ƒ&•—WBªþ>䪚طŒ°}¦6'MSX1à7ÙFÀ›,…Êô€M[ÓnðMÃh–Ç?ë•y\Ç*°²€CÐô¯¼ç›Ö–Ë2σÏm+¤Ÿàúì}3ø |‹Ç+n³Š ¥Ž*Ç7šÔ©þ¡@bV-ØdŠ$îE…mˆÉµàˆ‰Aѹ_V¤û­¿ÉÍ…¥TÓ8—²@ó ´“C,¯Nî‘3M!“càÛ ÌÓ,+ÍK²Ûü6)ªRöTD¥á¹?aC­"§ T>CˆúäcÑ‚áØÞ0JjÝ ÏÖ…aûÜmeÞü plë¡ÆÇ ¶ˆŸñ#RKx”¹ðV‹nç'†|òquãþI@³ýóà2<¡gs"Û¾œê§"øˆõñ#G²ñ…Bu…O*"—šÛe†JZƒ?'›Ì‹Ø¨=r[Z¤ à¼åPÐ7okö(YïK¹Ç\óŒ3Ȱr‰\™IŸî•sÏ›.&ý&–Ê’†2¨ØD;p½‘r¦? ¶] 3B£ËŒ}ÁÁ«“uf¶(¿øÔû;Ô4’ß#{²q@¿¼qÕó“úÅiç:?-ý“ü9 k”~¨¦–è þ ”IêÝ™‚1®q› á fÜsd( DéیΪg?O¶‰2‹/$Œí¹ti­V×|ØAFš_~ ´õ N­ËÜ©ÈÁ@:'IßSI2BSfN³|?OpÊ(°Äã4Æ1Ô‡¾0¸ÿ89œµ=÷w{$šŸ¹–ŠrÊÙŠó7Aý}wTѸ>®°ÌÇ“úý#¢(ÿ}nŠz4ZuüÌy¦& ŠŒSÈ­ç× Ê)<èèo^P …=ðl1±ùùÔZН6Ön2yõ’ƒ(Ñ‚[Ñ\ ^ÌdŠ@ØùF^Û£Y#_æ}–zÈCb‚\R„Œu~ƒWm@(Ë>}–˜¤ÑøÅù©»òÖ×½§çUF”¨5%rUr5!œÇ µ¤XÉerãg\‹QØ.™AÎ?Ķ:1l,¬MŽFF¬ô+¸*ðÒÚXèáêÆÆ+„…+f‰ðb(4§Ã¼º¶‚×+„‰ÏØ‘hE¾9Òß—Ìàçäü–qÚ|1•¤Þ·õP"bcŒ#m,èÌ ñUñ³e$Ä¥çGáD'ë—”èÞoø«°0Šßn¬$A°Å¥£2ðàžÕ ªƒ»ªU¬é÷*A1\dâ\ ¾»l×çI¯/©[Ç"ˆöëíO o©ãVçÐø‘Ž`e´ÓÏ°Ž„õ±ÏÞÞsvúE™ùçµÙ@;FÔŠ]xú[J)BX«3ø9%˜Ô d.š~3J¶B ThI,ÎQ¶;ÚPdãKCd4˜5Ï?ÖíˆI«¢Ybø #fX.h@ç\‹ „xÈêäĈfÔ«âœßOiìc>7# IÛ5–«¸W¬z½3[f§{ù<Ã\Åa8î Z§òtÇE·G²/?ŠJÙV†11½àbòMŽ5Š`4>¬Eœ³ìü¢§SŒ…hžYXKˆ!ÄuŽ7詨´¾Ž­¥ýfßþmn7 8"Ÿ;›¿ÿWÖx>PZóÎ:€ù&¯ÞÛ1îùý¤Ö2äynËÏÃ?bË+ýô¿3× ¶¼›„þ>z‡±’?eÜEZvÑÑfShXá2ð¬`é¿9³›ïÚÔwцJ Šò[«7ÿYŠ*˜?ž,2™Ûí BXG_Ï^`M|rA`¤åáâ¥Ê^éùÇiŸÚ–ɈœÔHcõUZGØÊI(LƒâôqÄœ~œ¿O$ìh&´ü1ÏKÅ0Ø£m*ô¿CîjŠàæðð>ùL±ØpòU°ÓK~î×+ævý—Ý­YcÎåO}‰DŽšM?~ýêì‰%©r?x8Wã{}Ø^nØXi;[Þuu¼Ô¨®­½õï=©Œ·wÃÑ/óÞ¸×ÃÍc?4éK~Ú˜²U@Ù*A5®C˜-aëawEéFåœêØQc¨(óá™4“Á»9ònt¦¸˜¿Ìè•È)úþ>i¢ï© Hê1”—Gº>^Ê8?¤{¦")—ë"PPœ•rÆC_~p»NQé°$àw³äy{ø}Òò€žÁcßq}´àÊ¢ÊF(%- ÷×ã( Û¬õéZòæxi¼ÙדÔg7´0&Ú§*š¸±¼ÐMõOšƒz'[Ã÷=e±ªÄˆ‘‚uãMÂ8k»­X÷\îa2ch°Õ¡Ѧù:¨Á¸T°F… gÀ/í /ŸR[[ìó’™ÏÍñ˜ÏÕ€UFRÇÇžØÛÕŒÓyËÓ£n/FÃ2ªo¥%%axìæ h$<ß7±$ÆÊôy/÷&š}ozòÂÉ£@•ü®«Ö®5 DÙ¢NÙ¤jùlÌÖAð÷¡ìâ|&¨2Màytƒ*Îý2­~©5ˆµDC­HèŒhífðâC ¦:OSÂ:˜eݰW@aÖ¯59[ïÖ©2ƒ{_n«‹Ì6 —<ê|:"xB;¡¨¨è7ë Qëi‘ C$1àÐùaw§ëOfÐæ¶j=;¿>|WÃæq² †Š­*|¥õ÷%º— áòÀ²)à‚$·žocÉ«è;ìîÒ‚WäíÂêÅhìì¿?=¶O>”úœ”ÓÓÓiü®o>dFÆ‘ ®ƒ Ó ¢¡¯–––ÓÅ­Qð3aá.ãýŠ[uç8¥Ü6"« ó<¡ p[[zô'Ø8QbÃòÀC´žQ]!’*PrßÞ[ᎊ<0‘ûìRÉ4?ò8€Ïôyë´ÙóK15†û¬ágñJ¼J7ÆÓç1üÚq9LDX§Æb“ÇÛ3B>'…–¾¯'Ü̉fÕï²µ[}'CbÇS¬{awîÊî-ß22*üñ3*^ä¾/Iì¸5r[r0”p¯-Bãº=Ô¾Ùÿ¥*àéþM]!C[[P‘%@#CXþ´WcìǤÏdìÐä8Ÿ”Õâsµv¶Ñk>”ÆÎÀÈXµéÍ[úâ5RŒeü‘ÚGñkøÙCô &¦Y&”ÉqoîÏ·"§’ŠŒAPcf_EAËŒë#V€ËAÂëÐbB >WCÙFLÀ Éåî6û€ãÛƒ¨“&˜¡l´RÄ3ÃÚ×rçžµÐø„£“1y_+ˆú‡tSÊ1ž0by°’Ëkßþ‡×µ­„ÿ’Ïà@Á/{„²¾ƒjRÞUlÖ æ ½êµ[~6Y–”y/tªt3Åárx|fÔ`ÞXŽc ÜŽõ§ÎXÞ|ß:‡”¦Ù_²§ Y½Ôk~<{¸Ì¡w¦ÁʨüŠÿ¼ê€'çn<êOÊ |÷V«ªÐ#"‚ê÷ÃhÊœBÐMfMx‚˜Èal‡:­/7/c±œ°@cƒ‹¯9e⿹ñ@·Z•{ñ³Q*wêåÍf“%,25ŒØ¾¼ºX¨5£š‘ß™t¦Û„|¬Æs(`™mÍP1ý Íl뽂Ÿ2l›ñ$ÎÐŽMP1D0lŠ/$Ò\ÄÝ1DœN‹Î½kû¿*z0DMúéC»â§é ¾ôþ0îØ¢?X®ádMê‰þAÿ&{°Ï´ v+Í/ì+‰’p»k"t!5ù¨Òr”\) jÖÀUùŸìé·¨ÀaâÕ«Ù øÑ¤æ5DBnä4~œ¹¿x^׺&§«¸dYøU:¨-÷oUøÖ`=ìÏðÈúáѶÛ +Õ/© •ÿH‘Ê™°½ÍØq5ö/¶n±‹ØsOs´ßúó¾ÞåûùSÌ㾿Àu‘n¤Ô°_ò3j{†cKºÇ•$DU„÷Å1à Ü-ÒÀ`ÐÙFPwt,Ða[Î>A¬ò}vÀ½õ+z­GöŽ%䟒ÆBq¹\æpt0º©T¹fìÔ¬9†JŠéÁñ¾â®q33À,hTDÒ©Vä1ȱ5ì·sÅ 1º$RÿòÂó×J ÆœöŒÁºÆc¿xm}ýàÒGñ“§÷jP›ð a¹udàÔ4Ñr£f ZÄ7 P9´Ü}«ðƇ K¥ ŠÑâˆu¢qÕðŽù…ó\ÙßXK+Y ¯ x-¬ÆNÇgÙøÿ; ÀÞÞ>¾ˆ€B+àÙ[Ê(€h@U´ÐPt¦UtŸ¥÷ l%¿<Ïg =ÉŒŸ®jöÃ:ÛÊê Ÿ«×²Y`ml 9ÔG¶6{Ÿ b¸·ïÐ2þ4-ÞºÚM##ÂB~sä– –”XýcLGüqƒ¢Í¶‚((4v«¤ ®C²¼8î!éw úÜ>¼¶€‹­R€‹‡§+ó28Ɉ ÆmÛ Í¾ê—u­Tç”ÜÜʪ‚›˜Z+žÄ›¡Î#w`ï± Šæ0¾ƒ%#!Ï™÷÷ÖÏ“¬­„ìÐñ"6JAßQ¨`Í{bÚ =—Âjí rÐMú³MtYª.—!`ü}›ÆÎÝe€ hèFþFasÚȼ$ ã`ƒ>7ݺ½^pdËVª_ÇRæb¥Ðy;A¶mËý¢Cÿd„ëÇ¿ÜÁt½qÜ£q¶œÐgzu*å ÞS­óL}ö®G10<9þ…ŠÝ9"ç‘θ.¨b^ÛJÉFÞ…+f&£‡ód®1+f¸´Ž-woÊ›¯õ´Þ¿÷)×Ôú8tµc6ÕêZÌpXµ(}\g= ‡‡·;WECˆ­bWý{m¼¯_¿FÈ””—ˀɳ±±©ôð°[n"Z¨sÌl§< %¼¸|8ÎøÂ‚c7­”iuH•ÀúµÎ§›V–4[)…L4\" y¢k7'*7y€ Øì\eЂ.FòÀÀCçÖêJ(ñµãEëᤙð;›o–£eɽiË|È›îV¹1ghiCiC>èOÎnEïŽåÁ¼¾G'†(éëCn¯¦´ÁÕÒíè·w‡>Í«ëÞÎ8»Ý(Î èH5ˆ}!5ö;ƒãqXLËSM Å†*o®¿û”ëÿÃ{Ò'xBè_üPusOÄù)W˜†í—2Ü`‹ow¹ÐBö|xI ƒò¬ûàîJé;4ÈeFHdâ \’o˜Îl>8%Ål¶n%xÀ"({®Æ‡¥aÛïñ¬×zZðB‰†ZÈðÆQÀê›óÏ¥%O’ÁqqPް÷’†€ndõv#^tãUæ½C\Ùo=Ž:þý±=kG ø?ŸiÃQ©ŽoÂDßôìc2ñ}ÞüxÞÜ‹ŠÜ—©yzé¯{ç kkŒÑŠz‘™»æ½gKi‰¡ F[þ©´ÿ7ûÐNÓhq*4Àò5íR0bóõXöqü=s$ܪsÇΣ*I‹ ®ÎWÓzUÝ.døP….1®¦uqQÛ,s R¿[§"îMcÈÄ‘F‚!›¬¶)“O[F[qEMÿú`>ž/Æi‰ÊÁΙFjŸkØlŸ>/ÆT&½]avˇÍ*ÞÞüÏw£fc¹âåóãÞŽf¹½­ó©C Úûù¶8®Äv’ÄÀˆ_í$@X%ŽIÿ0oÁnºå#~§ÄU–gþu|à¥~L~´é@2ãíÂÊ3¼p¬é¿€(P…1ÉâÿùÓötCÒˆÀÓ]t8^€ÐG½òò|Ãw9&ÉIo‚>_ïLóiø[h—ñÞ}(·Kbgû³¦Ü¿UÓVÑJìŒTmé[Êï“æ³ŽP¤·ÄóOXŒþêþ¾”"Ë••96éÐcîÂôbÖ€Nâ/™;–ZÈ6eÅì{®ÃÜj¢÷ Øvì6S B·«!ÖŒ/ê1êÞ<__~j÷Lün},thmj"}eõ–Ûu”RãVò›%Oãö·Àî¿?ïʶ‰Kuª W_„ߨfǨd pÿ,û`Ì}-ëuP† âÏÃuÛ‚# 9M§ ¨Ä¾¼Q~%s“Èòë~ŒCŸŒ›$,…š&xØVªÛýKIóÓ $äò›‹|ìô°'§àh|ñù†IGv µZ‡×'`>ÞoòØéDÙNDеé‹Úâ)_ÌàA#šã‹ycˆ.°Kù û¯»B ÿ«æÄ îð>œ´Š>Ÿ§¶®‚î³k(3Lp¿¡Ê>«Ñy˜;Vt—Þ‘Ý ë}9WM“ËËÓÍFœà±Ò#NÃÁoã¸ÞÚÁ¿Oó¿¦îZt`‚%×Ѭ\¾<:ÅG|qij·T!éI®Eß“fBa7½Á ”ÐG6â~è"={ö|»v“}‚Gmkò¾xÝÁ2pæ ëp\‚·8_iìælÏ~¥FÍÄ421r¿D {~¯uüëÑýŒ´8s½y„&^(¸õùªHà@Þ©ðöl1$RÏÎg`4Úˆ1ÚÞúñÄß`ËÁ´ ¾f:Àþ~ã³e{Eës”ë¨0AàËÃʤ˲ß%(Èç¿Ø/ ˜>¤sNþš­s4nºšÑ×ip¡ûŒA±lèÚ4«¡la’ÁTÖ\¾Þß#ó’]ëÍyc½ nÐr Q\ x8ÖÑNÏ›/hÜ£³?\‰·©bœý>º°—_Ll‹)·iåAØe6¡Ý ûúîƒÙéj»NÒçbm´Ôߨy²ºOhlVj>W''-^{…©§{Å9ë1œ#}ÙNp=mA0Un{`ÑèËÒ‡3b³pwF†óHÚd2ÝNiö\&û_ª¿FS+xÞ@EW¹p¤Š‹`B k§Û˜+µwÇð-Bëž#Y â'ôãf[ìŠ<Ü2W¨)œõÑįVö€2Ehö` *“¾‘%ÐiYÔIÙvç Æ diD5ö¿Â<R¤L£íÿQœºeTprv²®llb€Q·f6å­ßƒ1@ûû²¦¯—ã²g]8ª:‡Ç^”¢œª°­ 'þNÿ rFŸÄžYYL’¹j£‡¹õÆe†cÈ=V=[ÈŽÿ°X}ÛnXN jÛÉ!¡é°ûm…ÅfZeC€.t*ÆdP©*|…«ç=ÏœfÂ!úr7z{>ÈêÚ,`@~•Q`ÂÆ&Ÿ¡’‰Y{æù7@½,ÒìWóóçÛLÏeïÛn G«•.ÖŠmH÷ý?ü#9Á!2¹´s€^5yŸCÐ…ÛÓãè_ kfݲÏ;â Eÿ¤ž‘âìoÒkëvK6õOžG.¬ ¿>°úÅ' ð»†{pw{ä$xk08%÷GU‹Âÿ •pU¯6¯}Ž{¬ €Êü»9¬Ýb=VëËÓ‰ú |äÊßn¹˜­MjquÜ=(+ØÿbRÉ:ןÉr[¡ÞŒá¶1åE¯cöŽ@(!B“¬–ÖGõz¾éé×íÑç]£ÚÀ—g/ÓÆ=OQÞ#6]&Ui™Ís¬–7B6âÝ4ŽYñY "idÿ¦,5“òsÔ=ÀŸ±*òê`ŠÞWÅ‚íƒò•#g›‹Б½R òÍÏ•¸0¬Q[á‰$r·æ1¸í§‘Ç'_ß!“ÍÿÞ-Ó¹‡Èºáqp0–Ùô¤uå»´è¼XÔ[pÌäUz'ªÞ±ˆ¶#‡Ëh1d(Îp•¦!UyÏx¸æóó©›ÎzHêwó£ æLH·¿Ø ÏÔUTQ·®ì¼ŠZï‹íÂú­á?B †\6–7Ð&©/‘Bð~lT¬ÅЯí4¹Ú^˜¦hÓ`¿í .5û±—·>ûHMÎ œ¤™CþØÈmÀeük^ŒÀ¢aó<6 Ú ,f&sO6ý¡ýžøF5=©j&Èö=æ7ðÙ+,· `²ý8Ì }·7¿Ä.!/å&›­wE2ž$/×Ð&U (²N#źÀÉ0eW’ ; ý:CNQ¨ÓhÖ–¶JÓÎ×øïÚ'¿QY]êt±•ÚŽ—dÄÒÍ_žŸØ]·•p·¬Õ¬Gæ øN„Vã•È#œº°zœø:È¢‚_w-sükmçI€–'ž‚%ßõø@Ø7*n¬7 è^ßÎp¬®Cù‡»»†t ø „@äÌÏÏOyG­­+fðÓñ/’ÏBm@t"7È)k5“*¯¸®6¨xóŸþ³í)·5R5Äý`„d÷oÓàØ@½‡óÕêI$yç_y—Ùò9À^ýø}óùäF÷< ŠÀÈ J–¿Ƽáñêzt¬EpÃöIà þ÷û¶¦ËMÞqKRn?)['s–Ò?aú¯a‘I¨e5ôM°™ûϧ­Ý}ÈÓÓÓõëQïœ@cíåÃÃ.·úEÀiŠ©¶KǪ<–=ÖÙqãI¾$Mþ¿ ´?>ûn')Ʀ) ¸C“òíæ–zÄ€ÓŠ"ìséÄTçBwÚ¢‹'ñšµñ°±Âw^þË*âXä—¥dAG®¹nà;ç}*;p #"5Ïv¸¨K#µ»)Íyã¾c˜ÿ2Á#®¦ë¶ÖÓ§æK0è}I&,JÙ‡FÛ ^JU5ÿfUjálÁJ;âl‹#ë¿\7[ýù B Wíq8‡õº#ÜžkÞ x <ÎÝ5Úëw":=œ°aT½§kg5©\Q ŒíJÿœLÒ+{<6XTÍ|ŽöΕE ŸáW{Hbÿ2'ÑÇðn•HAf¼ÍA¹ÌDx |’B{¹€aîaJ³dð“k¦ŽÕ£ù†œ8N˜ç×Óæ7ÝêO¦·§k NFGÇBm¸ŽÞíœ[: Ê9®´ðÃM!¶©ÝÂÀRyèhkçöêÜœ¬PXf{™‰C)«Oûk‹ikí†àÇ>f<¼ñ Q‘ [•ÎÞ¬.^h(-•¬¨ý—‡ÖGnÙNS-Õo¡K'-(e¾71µGôãV¸¯êïƒAÐÛŠÞM(¾[“+ó/õ~&'F~žôàœ‰Œ– gë Ö?û˜«.©ŠTËÎŲ;®ÿ&eý°è>kWŒp Ué`ˆ·îu*~cU¤š§Ã”Rï)€6|“¿©+uñâry’…®8ÖA ËCo6 —>ÏȆ)¶Ô°c6…WÒ°¯–cð}Þd²HäÍÀèÀ¢½ÂvásŽ©¢ƒ¿*F1(|«øŽj&]èrüžù_oQxx¨Ï„u~†ó¼ÛâÇŽ]nöm„·IK¤1…½ÜÛhÉØzµ: Â6=¥¨Øœ·-þåêØƒZÙ7pÿ:ì8‚—j‡ʇOîSñ„‰µë3è|Àô—7¦;áù牲¹[.$¤l¾×v¨äB„ ::3 Ç†ÊöêH{ËÂ:šïۦ̨”ÆFÅ|YNbK)Æ?ÊY F‚ø ¯"¥®ÈÒО¢ °áË×£ÕûìÑ-Œ×3ÈaV¯L/¦X³/—¡RùÓ‘¢à3U>vŸ5º(¸¥•­$q},í´¥û¡âó}ë‹øÒo¸7̱s—]û‰ƒyœ*I éζ a•µŒ.3öGÏ»Íã…SfäòôyÍ3nÍãúÁ¿·,³ÉÎDÊRcÙÍÿ†+»¸DÜ‹9]òìù,òë=‘x Ãå “.ôæKÄßòß›ã8å§“ÀžOaì^•.“N|1Ž­Oø…‹ó”‰mo¡ÇWq1­jóþ{;‹ôUü?2ŠÚͱý¸ tq#O§¥È-Ó£òÙÿ±½Ü míäöX¤¦œw®ö”¨ËTgðèb—F–ên4É•¨|«8/Æ­¿1êä5åòþakk•©$ùÛÀ6Â~#§v¸ú“–»ÁR££ (§»­x1áWá¢^ Sè.äøwKjëN9„Öì{«Ô„Yšh ÈgT¢¤”s XÈÃ1ŒQ pàWQú¦Lqã„ÇS6;B§›¥å¯Å*2vmAŸ>Ô¾Y¿Îjðß™ß>¬^Зש±ÂÐo… ™£Žë¢¡LR@€ä«e'¹^]s=È(UƒB»Ý0†Ä¾û o±û†ï0°:÷©ö#¤êÃËX^[¾tÏq€#{\ý; ¤Ä¸5‘¿ëÈïT= ƽ´øJÝ0j yœœ§Ÿƒ2:Riž/AÜÿ®[í~ð>Ó}F×ë´Y”Å!3@àtÞ²çüL¢1®Ê~¡vw¾Úò8´ŸG¿–0zܱ¡ûð’ÖªáØÇ¤¥¥ù+;í.D”šrÔYœYLA”Ÿ#^ñm·^0ÆáKÀ¸þ‚õœ.M $}ŒÂ{Ç–Ï/¡Gph%óºPÞÀL–€h¬ç^<€Ðc'#붯e²*f²ÜtyÓu圱ҳî¦åä/\i¯.Çc‹–çûƒ®?K*ü§§£äæbÄÈ ©ŠM²>ÈÆ÷°ªØ¶ñ¿} 鎎՜E¶æÉ!wª+ø„¦Ëi¹ÑxÜ=NþìpyŒ6ôíëÙpÕoeÏT´:ûXR·#›¦L:‡,' ñ¼VÊ„·õ¤FßĕݧZêiHžöØn¥…̼7NyaKÔ¯¾*ü¹-H—Eñpù(s¥Áug1IºååÙWéï~éRŽ97šù¿Ún£Ô W·ƒO‡‰‹å†aCÐ+KÙÂüØ]A’î#/ Úñ^CeòžVECUfH$|çh‡?¿šÚ¾*¿†ŸÈ‹Þôl–q' m¼Äu0(Šçn?2>¼}÷ŽÝçÒêõþ pø³´+Ðã¸Ë¹L#Çá‚Ëþ!K´pÕÄQãÅÁG±£æÌ‹:Ç•l§#ùÂᢆؙæú‡Q_KrŠÉ»§³Q¦ôÃF;†ÿ"…ÍŒ%±ZÞ1—Ù´*´ÚKòê=åýËOžyL)×÷FÊîÏ»?Ž~aÒ&úglÝô^Ä&}útÌ™.¨?òpõíCʃР9‡kŽë¨ëÈNM?:]0nUiÖŒJÄûƒ4#_DDLúKP]QB uüb*eÝïÊ›è’iT2Єg=ÌV)ªf¯†tH4­íEj!„ªÖÖYÚ3ê†@ÍíEº Ž b“ˆŠ.õþlb|çf|þí Xˆ«¾ôtF9ú¶;°ÐÈÆu°g×hZ¬ÒÖàÊtéx4·p â0¼ÿõ ½j€‘¢>CÃÜ—Ä ôòòÛ‘A”ÑT˜HØÝ´Ûgß/sŒøÞ>ägddÊ#Ð/áL–þ^=®ä•]·º•L…ú (KSª-GóõëäTTð…d©¡ž/(LFÉÛàk{ v%‡ üMäï*"bb¤ÔÕ—«fs„Ú?44ì®îEþbaQÚöÄ$pëäF"O Ö“ÝÚ@›øÒêÿó÷õ­;7uW·yu3’ôÂhèÞ¸×íÕ¬1»åiyñ³ÂWVw}M‰ë+‹ƒÌÚºm˜Wû¯çœª?N.âc~–@L« Züˆ–={G²¶›_DNN ± «È+f˜XX¦Ä’¨®tªÌÂrË}}}k¬'á###Ó¸mS†ZþÕÈï8+F‹²úÀ *8]ÒØDD‘FÍ>Âq‚½«´Æ©üùüÏK¿@;×Å⨗ո%†ó¯ü·ÄÁTÖ/ª"XSuy.[·£Ï!+/dî—òcºìñ¢2ffù3. $ohÓ ó…`Ätp½½½ÿ;}ÖŽ@!TA†/±Ñô â_D.ßÓÃH‹i'ü$a‡¸‡L a¾O’Ñ7^Ç8p'-!Sß IàÀÕåUwýÑçmëî…·¦zÓæd«½VT:TÛy£ír%11Ñà¢'*ŽÎf»ŸíéáRïl©nˆ›¤À^d¨^Y ÆéùÑ;kãçû²¨½Éâ®H«¹Ê¼ÈRN …BìÖÇóèöû癢Õv˜7%Ò:¬`‹à·×Ú/¼žŽ+?gµ´|sˆCî@eµ]¤ýni ’žž~»üÝta†¤nrgIÅÏG uÿE®”³™[ùi˜Ø ÑCùÀ™—wPÎÁ°Z& Ó´ÌMÚ׎ ¿ç»4‹(£¥ ‚ú|¨„ÂzR¥ ên/{Å9§»ã4“„½q}}re¦ÆÆÆ1¢ä²ñäÒƒ)ÌÊvYw m™ü®nqD]èŽ,ƒ¨JI\Äjçƒæ×Ä€L¾ù÷êi/…˜I®Üg]vÇ–‚P¼¼Æw…ý‡ŒÑá¯!K~">¤ÃF"汋()a(5hÀFÖ'pbèΗŽvzyöÏ2£Ì‘È. S«ÔxNk*üºŠ°´4B·“eÊ©½h>èw~'´~­«'ˆý`4Þ*Vª÷é“ÂŠŠ¼üë8 ª®îì„GâЯNj>‹†yØ$Ë»ÁïŽãÓhv™«Rޤ†úǶº•o³ð|¯HÎϧÊäÇÁ¡W‘òð¨]}áq>ø¿³Þl«^£­2cO» þrvq£½QÉ´:m æ°W Sðäó §•VÜ™@Tt4»Ç¡NVYöêA…²U2~G„#˜7ïuÌ8È…¼ ÏOæWûÓð¨€J¦Ia@h€Ÿ_a‹††Æé²ïIzOî‹zÊPE|<Æë¹8Øó@4ó§7éxœï/­³Ì?£Ã}ãbOדS‚)ã¬@ =£DÈÅe½þ^ô>©Çüæxiw¢0z9c1znF1Z]Ñ3O™ãíå{@^m1ˆßŒdÙCÍÄ„ «‘Íly,ˆ4ÔÔÐ#x^ª– nÒ©4 aG»ËyÖÔ rÞ¨©Ëª•Ú (muõ·__Š-û](—/Oÿ„B@4‹",3˜A¬;§»<ÛJ56_$ÿßëÛ]—6^7T~ GUjðd±jjŽH¾Ñ¿Û.&˜ÕOçû{ÛZ´O,QÑAX4”Yl(ž8:@EÌÈÈHÈf¼ ˜v4# e×íºÔÂ*KŸ¾2£–Eá ”2 -•Ű£8' jjJ ëüŒVN‡”ŒLG7ö÷á>PµŒµââãï“ÎÖ2Ÿ®¼|ëc`N®™zc‡òºš¹:GŠ¿GÓÿ¦GÐo×LvT®a“s,u, ,È((X ’ƒ¸ArõOWWwÔ"@XHh¬ÑÓœLDxT¶}÷ÒDÅT*ZZX"""^~A˜Ö'ø4Mëvh±x6*Ó˜Üð _¹Ë‰§·HwñÄÜQï›l´¯CÙý=ÞÄ„„#TÚàåª ˆ²²b¼îL\-ĺ~UÛe£# ¥Dûþ«üŸ›ÓñJ² •D®a£‡Ö˜Œã8õ…‚A….Œß½õݨyùVÞk… ¿}‹¢’üìþè{ýQ¸ûÉ^üî2Ùí™ìÓ¸"vPú¿ýíµ“åé´?ź:Weîu1Ì;询OIE.˜ ƒÓý§÷ Ñ‡ ø7*¸)—;[t-¡gT6äÞ8²×CÇΗ»êí®9VU@êùr5è°biØÜß.ôN‡+v,8¶ÆV™÷º¸›û%‚"€œýuC4))iµ¬‚4:wÜêõnÐåч„Mw+†tNѧ.ü@ª¿«ýË»?ïA0b,8×í!¢ª—Øb@B&êзBQ!eÂð0”«:Ôÿ¤þë{ä9¬´ »Ç‚´kr²Ü\ïuF½üfú ÀDðz‹%DAì&s{8ˆY¨ú¤BëwhçÍ0Ñ; ™ä%¤yEÅξDš³%Ϥ¿U_Çþ¼C¹ó\dJê`ÖA!NNŠ€[*½+ÓZ‡à”!°Æ  À‚§òOGó÷S€ÿP´··ouìÌÍWU¾ØVDZ˜ €Å‡u™õu\NAT´¦é;ýýb_ßRˆ*õl>}凕¸—ù:¦ â3_iñ_'²¢3øë†$Ž. ²AUŽ$KÅæE•9‚­»½BGgP.åê£÷š+))„Ýò»»:š$eÝ: IIç›cÃvצæ 9“3³ë)1–/oªZP´ <ò½¼OHÀìêêÒª/ ‚A@79]m·š*ÁªuX ÚXkÇÐ ù]¤^ £™³h°va`t¶¡ÞáA‰SPQA_öÞ!ó;ë&``aÁªFYb|?¨¤ƒP¦_=s¼t·ó†ž¾tЯÿ=š_SõAbEµ©ò7.qЗTù?x8ô;›_ßí.| ¥ùã´úŽ=&b5ãfÿ×ü÷.Ã…RˆFB2í+ŽìΔ‘x/ös;NЮöayLR–F+|…„¾µ•ËÉ™† ä„éŸÚ 6Å"!ùU7Ë«ñ£ÒqEäõ,5""b[½ó†Óñ"ÿñÅÜ<§%to|OLùx¥œdO›q RýWèÿN|þF„pKܸ.õ ÛC 5±V¸@!u{9©Ú¼º¸8À¡ú‰ßÔ»ï£lQ`` ™ƒ\¹±‘9ÃbD, oGg'Ì+Všv¾vËÜÂÉŠ–Ú->—MDjš*UXýFDÿ”ß&FCÄP¬ª»+Âç˜Ý(Èf•pöønýéï«V¢ Eà#{ê) Àe,%£á’À¬Þ,€Ia·ŒêwKe²{s8ÏYª_‡~0SRP@ó¯Æ:„Åðo®ëÎ"2r°Q彨‹Ñ×{¯|N&ZZZê’3;w{­o2€;ùΈ\¨ïúBh5ãCËXEÎÒ¤9QŽHÇáb½3ŒcëO¹Qó·ãaŠ´ /ÊÂÇ[§”Á*'*͈w£ßÒrrâ77?ÒÒÓÀ~‹”4F&–8O½@U*M*›á«(úÐvFAàp^Uw%8< êÿDĩĚR NâPzg A”zh(P¦iIbª &’ƒÛÔÔ4ø[ròê:t©N;¬8âBú¹â5® #9ˆ ÿ`#jAAß›ã×ÏÉyQaI-x_¦W¢^ÿöCyÌOí_ù6Ó?Á€´¶Šffeå©1¬îï#7 c``ÈÑbüôI¢Pcm¾ÚRíí×¾‘==bPÖ8ý—Á |yâ=^iÿõ¡"*%ƒ2µõµ•KõVˆû+ÿéô_@ç¹wµ}[ŠvÀK{•± éü±Á›mò¹‚”éIàˆ©”b= 9i x(óà ú ^±Þe ´if‹8ÑJ‘,:„jÅqÞvr fÑ¢'Ê Aè,€Ÿƒ×‚Soð¾xãs}Øß|OÔ©fuVQ¯U>ôŽ\ÈdAäÛõf›žÞJc/)µ+Óswwé¯Oñä~Ñ­ÍÂlN”_ Šº[Í$°;ªA.,'‹”7\\œn‹eùÄ;« Úëì¹ÆTùãÝ—[öDé1î5™\‘tƒéœñg#dµhž|+Mÿüæ¿»4PÜÂ+ \u¨JC$žÝ÷+™^db_WkC‹=³“§ÏKɯã{ HKo׎ðÉ*1Y÷ašÌ± ν[©å7Í>FAÿø…±r±î-¢çñâ«@vZë€+÷¦‘ýÍVAÕÁ&ÕÝÙÉœ$ù "R:æ¡ ’Gõ·q8¸ur‡p3É»™Ó¬¦KÈ@ñ;…ZpYmïÜœ*gŽ3 ½Gƒ3y?MÀý-''ÜhUÂö¨e>¬)bv¶Rè§G¯ë‹2}»_¹›_M6v¹lákl{ÖÜ*›šÏSua××¥[¼¹m*ŸxyÕ‡¨Kq];ÂBÈ»‹œÀí¿Œ²ÂõkqÇùò;ÎþÙÚ­ø)uU@vºçÒŸb14[1nFNË/V?–çìmðZµ%1ë–° eZ£8iHPCý«…ûëÆÞŒ‰ez—cR äu ¼îþ§sZÖo»ŸŒàjÞ¼¡Kþõ]õ‡‘—GVŒzßT~ r ðe¸¥50‡lpÀlg4»ª‚NœùÇÚâ£ã‘¤K!!u›¯o‰+š:ZÞ— ´ÔѯŠ®ÕA©©Ô7T?sK±GWBõAUŠs£½y}®ë¨°O²°ušäßdÊÌÌ´©fŸíÚ.>Ÿä­5'·uø¶ë»‡Ë—Ø<´¿ÝíÄòò´Ø ¨‹MCý¯û8” Âé;.“ÝN¦"ÏRûç2±h”o/äУ#¹—+†Á*ÌåÅÜ"zÏ‚‹?'&û!¸’˜\ÞçÊL9-*:lôâÔ)5K ª9P3÷}uè ¯’«°Ñÿêú2\‚jH‘rì=šøœˆï5[sl—T‹wP“x¥¶óáÛè&!“NøÕSÓIÃ/l,¯œÙàgµBîµC¶aÛŠ ÅðUi¤ÎRU„ßX°1Ð YI·ýô”ªÒ…îÝm) ð–)0Z#ö³ûË/ýTQ’tJÄ£ÅÆÞŽëjË‹¯b÷·•û€f݉°/¾N³^}\Hxxø.s6R'hp ©+‹ï0øÇÂ1æ'erDJ•¢);#ãà¿q­­˜Ù.¦í1ÞÞEšÐM>¼9™k§Æ—°Ë…ÂÆÁY“ÐÈÇ/ÜôÆlål;,'Rݪ`iÄ`Lq(ÍyR¾U¬ñålî3"6HØ‹²´Ïòíù И™›«7û¸Ÿ¡Ò À/Cêèh²Èw-5JRè{#-à]nˆÓ-\É_ndaú°žñ¡ùô¸±È±Õï„Üõòd…€Çˆ%u£zT¤ó·Åàêî.C¹³T¨ R›j++lP)’á:…m¥º~аêãˆz5ÀHÖF)ªRZÛý»´¤Éâ ÷X1Äååå×󌯟gàŒFÍt¹ê$bÑÌÝmîTÓgŠÑùÑ–N„Pø›ô‚‹kب«Ç§ Ÿë E?`=ŽaÍÌâ¹l¦=Od=Žº¸ã؈Áª¾ä«½[lâYtÝðØÏ=¿£´û:Y¬›ÚKr·Ý|ÿån¶”1Îð_ßÐLJ'!…ÜÙxÒŸZ?¨³MCÇA›À€ƒ€BpºÁ¤ A(L:rä±éúý)ŸZƒzg¡-G#[kàܦ'n+¾ëkª ç\@ë2E˜DЫW@Ág‚d1Vc#ˆ C.ÕôD~ç÷ËÏ”´gK “Œ•÷ÚOv\2[‚“‡ÇgÙô¤EìÐó¾Oæ=;ó»X\ÒM·ÿc“ŸVˆûù+õñý#'9&&t‚ùºÕŸð]kpKá¢Àî­ª6ÿŠ»”ŸBV\m÷W¥+>^õ|×X¡tΫÀ¯£ÃGPÄÔþ xé09x_†ó÷¶Îf922Òj¦4½¾+4÷T„EB3m vlÜW9.’y[R°¦Ê%Z¥ØohCUiY,s~˜vš† ÙµE³GÖ^o¤0ë¯nlЀْÏe‚Q~$O³Í–wA¼þ´m¬ë̯ÎÃPøµÈbÎŒ¬ÂÈTÝð`|}ËnJè|8ÑýÇV)²2WlÎËÒÒòñ´cw¡®¢þ3Ö›‡ÖÂÜëÄŽÓsèžÓ¨Mþ½Õ¿u~M¢“éPW~23ÓéËñ ¡iˆ„¦·>==½.½G$àu W¬L¯-™‘ép ƒË}¥9Ž å{q´9…i#ÃW¦¨©fÁÓÓ¼SoÒ•±¼íH1<¼ª·DÙOÏ««&´oÞä{_l¯Ëê ½¾TP™~½ ,4ôí¶ ×!c‰©ä/ L‰zOŒÝ9¬4á ¤mÄîÙÔfUý?Ø£<†ß‹a~½g·‡Î‹!&ÕéÕÞ([Ç>È'• ÐÐi¤Nrˆ“X«kk’µ Ŷ£ ˜ÿ"¢Ì¨^ dï¶¹†ð]Ë f+ªïŸ{ãÃbëêêzAwøºçÑ>2¢ÖíWH ¨þ×â{KÒÍ—ª#Èý•nÄz`}=í~þñîð“rá°\[qÎù»{~> Ù·šá ÿ˜•ÎÍÐæÇ5a‚_×y£o»EúÆV„ZL‡ÉÈÈαU•bFâk¸åhD­7®múØ£:*~ïc-w·*à]qÌ®ë ÚÍwÌvÔ)¦²€æ_Â\òÞ ìÌè")±Ý§Ý/”F/dV31t>xxDKB ÿKš9;ÿCš€—O”yªH¶ÜûrÜã. ã`ðÿÿj›þÚÿ;ް½¢,;g»98¢YÜU_©ôû·Nú^½s)œZfVºÉW~Û¯NgÔ '÷Zs^¯çÀ9-GB§H‰»B§ÅÁÁÕV/Fÿ¢«¬°N€)Hn5ù¹+ðyu:.6Ôâ´—bÈ´É9ÄqÙ¶¢Ê!¹¼|}®ãÏ7kýS·3ß§«Ù*›é·S<² â6T¼‰•¤¤:Fm·gb… ~®_jK°\© ¤Fêìõ[º[¿‡¬¤±oë?ººÎ{À®SG…†Â‚ýèJMuZõ,b´ÓÝD¤X¬Èýi]—÷Å*¦ÿêÒoÇò:$KC·..]ÑEXw:—²ø“³Ò+l6Ûa@žI¯©ÀüÈAôú¤íëgb²àŽP£BHéŸj:¦¾ÑU¨æ¶=#qK5ô*çÿ5Ù- ünììŒu 65»>±t¿¥Þýis—–íÃH×cÒJæA]Ìàâbú™ cUf¿HqtH,5#Ø·A¼J&ðLTïÒ-%Ñ*z:£¯”­·š‘ñm ©KB2]€ÔÔ¤ÏÐúÐIß 5d6F3÷g Òè¯aÉ/Z73u…†Iq4ŽL0Ê–Ôô"F­½ÀŒ» KLæsC#…ãË,¡t:—³¤„¶®ðíÑ/Ÿé†zŸÄvFJ$KÞˆ´¹È1î TŽ.ÿûã×_ ƒ€.忯õóÛ¯LSÍWßÐÇÏÛ]aŒÂlî~!Ä«¡Ø5ùÅð\+5%4 êh&••d…§Ãëp‰Ë~`¹ZˆËUéì«MÅ<^4}x’ ûutxxør¨óû#é0^9¥:èy’‡ÅÅ a –ž•õiò±,úð‹éR,Ö5 †\Hj,®^>»\2LFa T? !éTb¦ |ýº_Xˆ”céˆJܵ}æ€Cô% ¿EÂé­öÏPå ÓÅzçub-¾×ŽhÒ«ãƒø^p—:n\9^Q ýƒæ?­éUwüº»ís¥QVo72¿0PÌVÀ”éWk¨§ß |Õí–3ÉõªÝ“…âáªí .nè÷ï´5KzÈ œæQp. *ÀT¤Îþ®Áµm¢Ðî¬ú2›¸»»­H¹£ñû8>8˜>;d”‚ ·;ô¡Xä#µÏ_œØ1¯Î±{Y¨¾sî\ꮹÊēǖé×s*Áõ~”±×TÌ)#$X^R IHC|¼&L©“š²1¹ø”‚ùŸ®ð‹ûÁï>DSÍç¹ gh™8®ŠLVàñŠ@ÿ1, àðèè¬CÔäùñnª#Ì=î׊©ÂlR#„DJxÀý¬Ù—ɺûŒJ´Ã2×ð HL:$p~Ýôœé÷³ÿÔC´CÒ4IU L£°°:.Ô_wGJJP)D @ì„ÞQbe.&¿1NL ×`èp­ú«ªöñ‘ÇM¡×»õóñ¤¤Ú½ÌmÀCðÞ1úvé!aX¢ez-ÛÒ¹´˜÷~S!0QqùHkŒ²òº¥9[nh5ñ=²¾G›Òn/€~ µï3£Ã,ºìÉSJÿ˜ ¹©©)ß`ú×nü6P´54Dv@£”WüêÖVØØ˜,\{o/‚Í⛓•ÞµÎðÄääP Ib""&VJêà0/ÛiŽ].)FNÝXPˆü'¦ÝŠ|ܱ&‹•ô7úqL7è°‘Þ(¥AX[±]ø—’&ÅOxHŠäF¿„ö´CEÄÆJKIÁn¥‡ØÅ1Õ̦,Ô–:,O=”îíÝk£JJJ¾>KÕÖ¾¶…Ûvîëâ ûpµ<]ëÔ;µ›‚"ÿÏ–±?ÜãMëö’c­‡J¦ Ù£ÃÊvƇbô± Š…^úÙò*R,k¤‘‘‘×Û ’’ÝÜ1”ZàRM ô£rE~O¬»ÏøÜ‚dÁ¸u¢ÉT‰:Ÿ×)%<q×Õ‹¦*)_›ÄšÙ›µ¯ úÛùëu«Zäùv#ù™uýä$¾;š @¿Îaë7(l­ák¬ÚWŠÒn‹CŒ®ý¢#3ON×¶ §mðWjäo×_öUPóðà7û\q<4w¼7}EeÓ©ãc2ÀšÏØØ˜É¨‰P¿Ö®ý ¢uĽlJËäÊæúòKªeBƒÃ׿ƒí=±$áÏO(©Zo»_oiåææº,¸_3)êeLÿåÂêßèeÒ|éÄ;XƒÔñ¾;±ð#{®Vê+Âåä×76~„±š¾½:­··€ôQáhvÕ×\û…Úîã¥Fvÿ{7>ºÉ‘,˜¦ñ7##‡•™c«©rCóÞ¸-–^ú?hz!™·_•JŠœÍ‹Jå¬,OŒ®_j|yWšzbuŸ¥Å |H[k’)/T5ÈÒÔ‰«Í7Ë߸mW··ß”;Ãæ!¼îé¤C¸ d›CB`^Inn~tÛ :ø{w§tdw¤w¦°åæ~”!àþöƒ»$’ˆˆØ53Mªé¼Ž¿ÑÝÍ{ûÁ­S$+Ì´ŸÄòBdãCG««aî/Ù[ÁáÎÅ(Õ¥iŠL Gx}Ï™tNK‰·…ú¬¦»†V}'‹ã‚=þËBYñû¯G‘A…{:ÈÚš«Q¨`0Ûê{Cqɧ.ÿÌëË·50™ÌØxÝ·d‚=¼Îæ×ŽÚ‹‡vEQýÕ++­‡‹ 8Ó?µqFÙ !î+ÃP 8Ç(™ü9XïîihhXîÕ›?UÌBÔ88tòµ¤`]°`¤§[±À7{½–/0za:icJm¾'P-Çõ|¹¦’)g#—¶G¸¸•]}â!¡áCPmíAü*0ð•§­ü žñÿ¤YRÍÁq×ùëÆøç”Ž ûµø bbÎ×L¸;£("Ž2±˜88!óÕ–ÝÝaƒE &$­®u~f…üKzY\\Tûó¶¢ï¬Õz®2oæ EHËË»ªù XöõýôfÐëd«ÞçOfÔ‡òÊÏB¢O]¼6Ú)»âÈÈ œï¹*²N?©½î‹Ô;Ó,ûž;£ÑD¸ˆ¡CÐ ê½ÔOu¨VêÔÁ³}G¢ïdjZ]×jJÙ˜Hˇ¡NÏ΂º¯LÀæ³x6* hÀ¨É¯û¿³ÁR“'ÍS£Yáº|~3L;r:ÈkkJ$A­°m¤ŸÏ6 TUA€ŒÒ@:\ì%«zLD|üë‡vsÇQ¼reÔa;Œ\˜M"t%o¥Ñðè(F4kÏë#¥ ½qö¿DÔùe,(¦oŽçééY~`Û9?¯kKPûûÐÍÝb8H&ðz׈Œ¬Ãa †étþªGAW·g¥ÞÙ/PßÒÒäÒêÂóFçûvÝÊí?ŒxbndAÏc.Ú(Ê®Ï Š £ÿnÌaԳƖü†–öáú¨óro²A?-[I¿§¹]Ú!¾V.¸ÜvöGg>T{û#]ÈÎè«HàUÔWÜŒ…|N{KŽQÑÜ#p;ýºñ#´ØÐI­…AŽHR¡ÆPiÒm³¦¨ƒ· Ì1xÅ3¹ã„¤p íããg €ã-'}¸4ôLÙ䊔tÆ{Õ÷ïñg¹ÿ$æäÄS3³{û ˆ££î] óBü”/™¶·žBœ«w,§S£ÞY¨e6öÝNB0ï2édd/Zñ[ÖÖ:¾’Â@C¿žÖ!d—™·£ÔÈúŒ4ê„c‹Ÿy1ÄH*š¯‰y—c¤£ñÛ2l³ÛX[+I¡ìÓŸÿ%O(È“DÕ^ÈÚH\íZ·hÒ?«]-(QZîªÍèŽ{Ãî.eÐñžor‚6¶ùY%kè(ãÊôç}U­‚mœœØÀÉÑð— ¤Ðoȉ†ãj#d`]wê‹ùW0dyÅ A[J.4gré Ÿ¯m‹%y)?b¢¡‰÷ú¸Uã$¯ã#+Û"=0Çl÷å ”öÏÓ…*÷wƒ Œ[P]SË#!ý§®U°-÷#¾Vá§²¢äpÚL1ØÍÿ–¶`×sOy¾PGÅMIÊÂÈZ˜ÐÕ76n€ÓßꈒÐ9’ð°A^ø­›˜F²…õÑm‰vþlªzyzˆˆŠÎÔÉbÜýë×¥6´*q¸3w}-BY†‡iÑo†½U^;Â@¤BBƒÖ‘Ëǰ÷‚‚‚æwç[¯§7›¢Ô`MÅAÑrúh‰ØÉ’©Ù¤ ©²%}Èdj× cËqÈF¯®Õû<àñi¼1£î—ãùÅ…ój[GüWÙ>å·†oTáùH˜¡MTg¯ö¡.vPXeq¾<ÜdéÂÁÄ ‹ˆ(Wh¿;³ÃQèUEY!æ¶1ÙÉÚ,ޝïÁ E¢Dhƒg§}4~j)UÌEL¶B ås‚èÿ®Ëä”>ªÚ`W _ÿæó½f:FL›éÉöMøE÷0H¨PžÍ4o߇ùü|åí-¦C8Ö"œk‘ÚA ·Ä³K}›¨KK@Àú\·d€ˆfÑbã/mùTCL Šø¿î OC3,øóë׌yÒº߹ö 6&&¨÷Þ¯Ö­Hâ Ÿ…c¤{@jÊd ÚAަpÛ?0ðúœùrÞ¢dßøÒ•ÎæÏ ½qìPy••©a‘]E• ýwè„m³KcËÙò€¾‚(dOµTGÝ#@^7¹æ¤²ñš7ˆØ”b…ÕrÌOas{sÐc|Ô–°Y/ŸzK¾Ìcc?=ܘÿ«±6ðýAŒöŽs2%Áóx‘¿«§Y„B°^1…Iü3~Þýþtº\,»³³iôz‰:pòt'µ0Ð0PÌ‚ø2[ÿ¸ñk_öèEÈ>ƒŽ!ßøÕ1œ9­A+^ãü‹oëî†{÷¡¼+†ˆ“2Qnèù®ˆ`%z ÃÏK ® »%om&`½C„Ÿ"q2J, #=Äüü„¾¹^{O_Ý5y±Ç‘òS߀/#¥¡‘4³Á¬wªÓ#û߯Ki?¦cÆmë3ô_7ÓèÒĘÏÒ‘™¬Ž ³¸|uä z·+,MaŽÃ߸±@öá]ö’| %°EÍçrø .¼Ô/¶ÕfJ‚¨ ã?ÇZõCþ½ry~AA•Óš„±8`ôÿ:{ë 8¾(L´ww $Ü]   î›ÁÝ $8wלàîî¶=¿ÝÚ}U¯êUíã¯fªûÞ¾çžs¾ï»ÖùZ« mè{%wJsòó§OQˆ­}ÂbUq^M¶7ŸV×õ¿RãQâ`ÙL÷ÍPFíÛ¥–?s ÎÍ­zõáM`O;Äoª|{PôP<¢iërc3AŸËª8WØ]uû¸óQâý6yŽkÖÄÅb• ÏôhJ¢…?m’©2£¨¢'Œ’’´………PcðßB—û›sòç–ÑÃO`€õlbJYF ž1Ò’_šJóô 3Ÿ¿›£”Í”žŒçÒ§[%ØIaz&ï/ÞþjÌHìÌb ˆáeH@,'½»;qZg†>íú=÷6UÉÐpA-`äŸi±¶Iá5ÄÈ™‚!/>ùfÉ&WYå^œîA ¨»%«ª‹5X=ë™ë}qpæ›háD?Ã\/Ÿªq ×d)ìînò)Þ±® M苬þ'Æyc~¯¤6Õž%«àÒÌDyRÉqªg[n&É·47W¸íjý7ŒØÓHþÅ'¡ó7 Àóp©z«â«aNß3¹]Ó¾¾ÙÓxt”ÓÝ\B–ð¾Wó ÿ#ilPó!DÂçÂtªD_чrý%6&ŽÀÈÐÚj‡×òŠ.Ue¤«ÊêQ™À¤ÛNÝ€”I§›úw‹‹ú‡AêŸ9Íõ82Ö»':…ž=Ãÿo¨—ˆ몞°WÖäfÆÞrÒ€âë9÷³k¿è9Ë’ŠŠÊÎda’Jùb³Èž†•:3¡eßí!Uj˜Ó~ñìôz·;aµ³uÎ/Ò‹œŽ¿ NâSz ®þª„|Œ Bcààˆ4¸"$A @ChÑs ’Qâ—«žð‹~˜·(,¬òžd«MIûð§±ÖéM•%(;9oÎÿNš½zL ,~š4LÃÜFÍ‹*üŽÃç­á[0š;Q7Ó˜ôàw6.­€Ó%7 k±kì«‚þÜf½"OAýp¥“XyîKœ]dý/ÿ‰n +(¥Ís›—¾Bl'%b}‘G|J)ïâbÊ2ÊDÃyïzG8ý£m :BÕz=Ëø°Ö©¶Lm]ÔepÃÄ®RœnøŸê”®€‚ ÷k¥uK„ÓÏ+L9H­ŒKt•eKC?Ç’¶S† ÷¼WNÿ»ˆ6Sƒ•xwçòÉê…¡‘¯Ï…]w_U Ž-è¾ÁCÃÃ?8bc9yL“³rýÒH¼ËäG¢„\ì¯~ZÎÃØs((% *dçxgDôñâ”[ÁÁ~Û©`èW™×\º!¢L=¯ùòDia‘{‚¾Gë”æ‰p茋¾JLBQZÒé”ç·Ä<ö¬É-½:8´ïŒÙ™Õlô<*Ã>ë°U; Ñ•Ö;£Œ&ðÜðì <ÜsÉÚÝ¥»X÷ø\!‡´rŒ¢2ô¢/nOÜØûñQÄEääö|Bdúý¢¨Ü!M¡v$ÈWW:‚Èù­ãe¶<,±`C™Š‚Ã6âv*ÇŠH?3÷!ŠŠ1Ý"m î^܆ÔÕÔÕõ!VÅ}<ÝÒÄ2 ¼¢CTsC —¥¹×;·GaSÿ<þô™…ƒ¯¯o…õ#b”€ˆÞÉ‚á·h¦ŸcŒvaç¯ï³gÿˆ¼O·~7].‰ õÂI[uŠ´e´µ‰C±)A!göL–X*¤œeo# !xd´-ýÛ£¼üN"z6‘“> Ú#&4l&¾ß«ËÓm#©¥U& Û.p'«ê¿[j:LmóëС>Û5—¤ '&E~ ¶áè`²ˆˆh¬?±“ bÆV…2“-‰³[eeG6]‚Qëçôgkn;_ÇPݽ®ÚC†v,-ÑNüx¥äâÂ'ê¶Ó. $EBz͆l×`jh™þþD×F³vù°‰µ©ï<öæîkÓMÕ•¿:fë&v«{«« ˆ¦å#êîíÞ/{zg"küø ±«í:}¶«» ¤c(*œ×9MZ©S΄¥ó<ñ®6ÉL§¹Smì›ÙèµÛZ>vt´Ïüädת÷J8¸ÄziàæìÜÁÓvHñÜ2\—C¿¦bUQû®¼>Ëa6ºùPÆÈdy.ÿfçÀ”” “eÕ¶ïAÞAEZñþRš]”'êöƒi üò††ð\¹¦ôôxn½Ú,\ÿÿ¦¢ì‰þ·<Üì…GDÈ”·tƒZÃpJ¨o×û|Nä÷œkšÄ0Å<ˆÝÊöë–dÍ ·”ÞŸn¨\µ£e11ÍÍa:¹ºvíÏVPQEõÆP¹ ýBfd ‡~ÿé3YØ•xíÖQüŒõãÇ"d9,62 ¦‚‰*Xº©Â%ë¼ú`èp¶ê÷Í#_Â@üO/ÞInnï0ÕçÏW¯Ç”ŽöÆPpÑq¡bm¨øääá4bˆtìDptè›°7 CÃ¥®È4ŠO½¬ Öi ÃÓïœâ2[ÏG8ÀòO±^Ú[¼@zBÒÄeÛ†dݸJfv}ULês·ýÁ½ù´Á­µ"„‡ûË‚³‡Û‚êxze9ãé¼lF‘õ^†rÌšÓPψ5ɬ3ŠƒÓ³ÐàJ@BÂâåàÌë ”"y_¢T‹‰i­ `Q¦ËCïîÁHc½8;ëNdQûòÄÇ`|;é™ÄÙåv²äIpn}™!FD¬X~‘ 1ÿ~KwÆ-ñµ^¼z÷ikã,`<`p £w™Oq‚nl\ãæïïØ]‡o=a½“ÿ†|¾Óħ=I PT\vˆ¡òY •°Lî¨ø­áõõÂÿTÁ6“ooØÇÏÜêíæò\_€ž‰få¶y¾TÍ¢–³Ê‰œfiÑî>Dy…Kÿe?×n>L=“-ÎΖiÊÝ趸±aTƒ’Êi6d͹°‘EÈÉ… ¢O|<½xîøü<Õ`*—œ-Jm 4ðJhHî¤LT¦NJb˜>ïgNaô9±øfôj}-ðL!*~ºœNüáðÑÔóÀ a„}h àžÖþ'õåQ}s/ª³Ö^sô;¦¨gè¯éº…i^H„| ÂAi-õpÅ„ØvTÓRYn‚î}ŽÌYÈ8¤Å¨²¨‰ùè^e‘r¬¤™ø”g,»¿Ã¹tu•} 膷þó½þ,šû&xÊõ³Øºæ;Æñ¶[\ÊÎAZ)ËAt°è_üþâÔDD ¼¯àMMb–#_£æ_˾cäô›â„22¿HÀÞè&dvw_Œ§YÓ‰¸0×ÚÍÊFIÉS€)ûzÖ%'ª:\ï¼FAŸÄàyå$.îKnEš[ Bä\öM«ƒW„"…õ¥¬ôÞÔ‹ÃöK¾ø Ôý•OãtUq-ô›éj§öêÇwL*GGÇ8T,RÓ¥æDEïeðƒMÁôÀ—õõ›;wð¯¿4é5®ËÅ­‰17p¨Ã'ÓÉóþ-D,tå’ª+¤fb–ÛL¬™ÄÛ#Q.8~ý›.ˆ0o/ÖS3¸8Þ%ÖŠ8¼3-ƒJ«`-‡CSŸ±ÿJyj>_kO.h—.¬Hñ\’ŸrHÇõÕoò¤®dö‘gt0ù_Ù°µÝ"Øá§*úÐÈçV+Óu<Í’×­ÜÏfÑÑmmRþ×›d%úUh:ÂIœt|åpF $ä…bÆÄG"ÈÈú¸f_à§z´ÕºÍb$¶ùË™;Ñ¿ÙO#<LšÒØ*p÷o1ábâ•—Óö—“¸ý"MñÇÜ_u»>žZBÜö¡Ó:Å¿Sé@úÝ^˜!tתML¨Í0™„¯•Ä.y¿'·y·À /f¤µ´!MOõr„a´‘UVf°;áËC×ìé½8WÑ´1w´ñ¼¶¤Ú)O©æÝZ&‹õð455Ã##;…–}ƒÎÎÜÀ€]@JåA7¨Cu_Ó2Ùê%&j(gêâÊ£–‹Ë[#óÇ`fÙ‚ÓC;4 íªMÎ('bžÕ´zMõômo…&(´Õù1Q#)…‡Óy•WÑÅÅ] xqÔUÏ5înö¶]_¼—ž.³X'geÈÔÑq©Ûû˜Vß¼Ôá¨5E̺Õ3|‰y§œœ¼ÙeY[®±ÕUðøÚ+|K85ð´Cfd&ÓKºòŠî—ž±ÌÅÆ€W5LêK™A— çÀPH_–ÈŽŸŠi²——" fÝŸ^~Mý‚k7Ó^¹YUíø)\D¶FŠ˜/çÿýâïó»Nˆ 9¶ ¸Þê'Göfl¢ ÿ¤É³ïÛ†……ÿ ;¿ºº¡ëA™aÀaŽL‰=“3–ûDå{5fVÖw<õðØÊô¹B£–r0<~2Û#(¶SÏŽ™À·¡§~nù>IèO$"é§ Ï+€bÛðQ€¶ü,Ã*ûMƒÞö±¸¸W¼ŽÐ‘ø×ü%9rèõeúæ¤$_à‹MžßÔÒ¸ ]±0áÝòÚ÷+Îû¼éRËM?MÍηWSå&tÎÎÎ;ÖÈ¥˜ôn ¨%Éö!Mì”-íÃú$271LšAš’M7NÆÕ¹n?¯1YÁ0mhcÉ*n9xÏ ¸kf E¬=•6Î8®×Uüû‰¾ÞÊÌ›ÓßPiÁ£yGßÛ{PûÈ¿H§˜Õ—Pÿ+ù$¦°“¼áõRƒŒ~ÂS-râàÉza‹ßŸÐkÒȦ o_ÿX™®z"¾5ügVQÿ…¬¬l|VV4h}9Ö$Œ/?Æ*†?ª¥¥¾kC÷¹L/Êý“HÚª–Ê@´í+ƒ¿&óîÍVÊúסËèÙ Ö ŒU˜ûiy‘$¼ÛÍ—Äëífß¼SÿªÝé~í" ¦¶èÙª„å–¦þÞ*%%¥à\“6ÿt^s´‡»ÓW®UUí³UÒÖlíO¯M£¡p.ß4n£HAû9í¬K63Á‰^t@Õ,B+1r0­†.y@còkÈnôOüÉ/_”³¥è çksÓ«^g‹³ J=éÜ.­s«Ó!Mð>ÿË *J‰!q‘:G‡e4ÿ{a'xùÚOq Ÿp¦!É^jt‡‚‚‚`|`}P¡Dúèp–¥. €“ì‹8:[ cÃbÒIÆo±B@¨2óÿâwAÁŸ5{ësÉHÏ qLÍPЪ—£ggÇ@AÇÝÇeã¶Äm?Ùl/}Û¹EN‰ôߢ@êLÄ1âccc "x™t\DM{Óî´BEí5ŒiL¶ãÌyûË#‹X2‰Ùxq×§ø„ÈaË0²éÅ««+ÓÕΙæÏ?L• qá@ñÐkP]\ÝãþlÉ›°…†.P é2²c"ŽÝwÝΗÙ*HëWgîÏÓ†×{j>€^1¨´¹V‚ul1DÉV¬»™ù´ÍªÕ¼·ý¶ Ï]Ѱ;ñ=Ž¡ÎÎNSGÇËq–Tf¯»ú ¶VèN<1à|CEˆŒŒŒOA±Ú†õI?XŸ½½ìêâSaà‘µÍVO|¡‰Lÿõwé®S⢱vQJ¤Ïb]î8ª”1A\û"N¡¢¢²Psr}ýhž—ww[? •Ö$ˆbÛ_|j(É ,LF‘õ\5{Úh0<„Áô 2‡×›]HPc¾)ÿƒ–…õ+¼ê…Vfʈc«Œt¹±“°¿!˜^·x»‡…!  ]Éü”ØYâqà­/&­ ¡çŠú“âi™À¤ÄÈȈ ñ)`ü„0ML¼ÒÙ\7gT+IZË8ö$7ªÅæFýõoNà — -ƒˆžg/aŒèñõ¾¸íq\â¢'ÆS¸£—üÙ™¿¾¢ËzJg}þŒ8ÞÓüßBÃdg} >âý Ë,µØµii¿?ïÀÂé麿Mðoÿ 7wáCnô¹í ‰'&‰°Èõ@h~Û)N0UIb5tU«Fad|S'i”%>À¢ñMG^A!×ópÉðb&‚èke÷³T=ïÈyé¥^¦~‹ÏµÒ(àP: ¥llvø1^]þEÝÞ±V>9U¨Ôáä—vsãßþŒE6<>Š‘ t÷8ÖÅW«îîîîÈ2ø©¨"i¬¼Ò‚îÁ޵¬š]Ø×ï/ÙI)LüzJsM/§MŽŽä´mÆé`¿-2_²=cLQåuÙPÞ_n£CQ£ Á¼²þ–rˆ˜ý÷ϸ5‰bæÑDÏÁÊGQùäE;Âb¦€çSqu\CF¦U! (G#^œˆkús%]úÖÖVÄä6H*­·DÞ´x €ŽZÂ#3=S©usãzÁl¯ï ÝÚªü¶Z˜ÀV¤7’ãÚ¸6ÿ+刊¢¸r¾ûÃi¡0WÂePæ‡úçøää`<É+iþÕÏ¢îéIšvlÌñ «ýDúZÎ}˜ì;ór Ìä¾e½ÎÌÀØ~ÜĆ¸í¡¥9)kïò2æææ"¶ð(F“›ú·ÔÕ !v€à*ÀÆíl¤Gj=¯»íÜ×-zÌf7…÷î]¼$¬uŒ .àur³†¥í0[V¬¡¥µ³ºðñt‹• l+¡x¹YW(BƒÄ1ÆèúP~EõÃXˆýܶ‚µfèDŠÂ%¯ïÛ•×”‰é‰…ƒ‚Léÿ»t\Ï]äž,E+d0MÓÐÄ”·Þ`{ϱàQ ãÏ×9*é +ªBÌ ßÌÝ/Œ¯$ÉØt’¾SQRze†×ùëD)Sr<Ü‚_k%ª«˜Æ´HœÄdÝ)ÜQ¥¤‘aÎÕÈ]c°abË Øïryr¥RUµÚlŽžü§(·ÀÞIÿ¶ó:_‹ß~Ž8OÑÛ[´Ì°ádÜ9D6q¤™™ó®Úüºf-U/GéÔ²ütcC6EÝÀ¦-9­ßë±´5{K0²ã½)œW©Ü=˰‡ˆIªx0äµýýѲ_'¦…©Òù‡Ï ±r³³éüJŒ[n®_·‚„*D¬á./é9É~±÷ÄÒˆG¡¦¨v>”±÷DøI%u‰k¹°Ï†rÞãòcÆ(ÇšIÁŸŠÇu<á'Ìí6ÓÜýZ¯qD_Ê|ôjtc×66V<¢;99©ð¿÷Ʀäo¼"”³áŠ~ýC½åÌõñáÞfÈ)xƒôAHh#4ô/õ:%FÏõ)ke8Q!q×[F¿)Î;¿}r-&¦ jí,–¸JqmžŽlÜF„í‡Í§¸\ÍÐ5Uû½oíö“Uµ3EIý¸–¡ô)_sÞ«åŠ ½/n}7‘…ÍnLöÈí£*æ]vÀÄ FJ|y…Pj@â*©óbc?¿ò6yÓ|Ýêùfø2ø‘½Ã¸ ~7+cµöÊ‹ÍúNOdUŒi}—üÈÚ8*C fTo~ÝÏ€néu1¦4º£ùÞu¶çˆØýŒiº¥Gl¢”"]¡Ÿrt»\ÿzÁN"T¼±ð!šÎˆ‡4®¯N=ÏcOßTÚš¬áÏ 1²Õ×§ çÓ£PÎ&׈èàÃtÞxIÖJwˆŒ61Bëñ-ûà…¼üô—6o,g¼®ëý­Ç¹¹üÅÌOåÅj ™ušXº°Çö4=2|ˆL3T˜ 5ŒýE*Sªô‡ƒ¤ùñÖ¤>4ìS/w'=fPàÑ3AݶחRû‹Ëý ¢!¹PPŽHƒŒïk‰1Í®ëößCÝcí{ƒ<«>‚ô‰õØšþ ƒV¡hð»Å¤tô(²kâ²à‰I‘ðÃ\>^_å…µZ{ŸÊ_ìý‰bA¿¹Ú¡±ߺ7g¤žYˆùìb¢ÄøÁc·UÙ l:n»fœËÍÁU)'úý‚˜Š­™< ­:;m†œzoÿoJr™Ÿí‘¡Þ· `ƒIãU=¹“°HÃ×î>BÎþᤅC p˜~ÉÛ–30"s y߃$sõ¹ !³‚kE4=ô-¨zÞÊ0Êông3Ù/‰[«ºw‹²ðà-=·ê´Z“ïg ¶K ž.¨Eð»{`/=Þóäè~jç ¤/¡q좳V»P¥RW@Œ - _žJª²ÊÛO˜ÖxûÔD(# ®/MIdð§pEAe3 |ZVæœ#±W‹W_Ú/KëVhHÑlʧB5 àÒ*ÉKsµc8½m äþ$˜ÑÎÖEqÚG½³³“Ƨ`üaµ¨úûþÇÊOõ:×o*RÊ›HÝÁsè b˜°eœ71ï”b'牤ÍãÂæë°þ‰+ã×›µc@Ò¼žŸŽM.m»„jÍÔÕ„ëa1/b’µic"ñ—þ’waxaÓ%úñ[áÖôjš-ÞÊF5˜”èèŸ×™CBŽ2øB8P £˜" ¼³]:¯»ioHµð70ù¡¾ôm‡Qc{ˆ(–qÈЧõñüÑ~ ѾÙÅ–(Õ‰(Úòøò`ŸËŒ Óß—yõ`Ê X°ô—É“ \žùYÑä£'…A{Òè¡p£g²K³]íÉc(ä( ‘yCµh?;%NbzøÝðç†-‘‡1ÏCÜrǶNP8îAi+û¢Í4i$¼†?)¹t@dî°›²8èèòÊŒcª\s=\Å_º¾N§X#_ÝëîŠI™Tº÷w›Ý¸ü6¹.i !䘧© @”A’ÔìM¹9ÚùA’y""Go*!:óµ! ™*šüÞ23aøYïïYìjHH¸ÇºFD,žï±VFÒCmáÔpÌØJñ¹JTŠç–;Cœ<1ÌRÙ,˜˜m¼æ+Õ>BÌ==ŒúªÖrúù˜_ü[þÉpˆ§ròÆÈ€­EÝðK Æ™ÅgZ¨®?‹L[¯x]=ó]ö#+‡ wÝFñ¬õÑ1«ØÊž4ºÉ¨?>ˆö ,½œ„Ȉ‡Qk"¿>ü‰¿™wôª´£Ð~x@û,—™€4Cµ"e5ÆÀU̯x&ÌÂ*G Ûˆq ß‹Œá,\gÞ,Ïü¹{ómÉsJ ôYëXjéÏ|&ãXÚÀmñ*»óý é•zfð‡¡ÌŽCЗÍPˆÉ¸5¦E 4tŠ‚÷×Ýb…½'å§ðƒ¯so”Ikjjò´¨ª¬¤W€æ£¢]†ám5Es°}KÔ4¬bü;­¤„¶oÛâ­ÑÔDu@IBp„^0—4u@–‡÷/[Üæ]1´“?9YÒý駱Èâ§šÉâ÷èdµ-"MüH^ù?Pdq·›Ïò Ìš'·øEhaôü)Ö0lÁlÎá/8»Tr>˜c+zKÖãþ7äÄÓE¨1-~ åúº…_½ÏsêÝ ¯W>yE?0Ö;6Ö ÒZ›xièW¶gøqiNs+WU¾° âN„ûD½}µ;æÏž”[ïíŽxů½1 Ëe4‘§H– šÅ«•~bâdœpN £½Š5ÌôÿMòáoÊq(È8=à B¥“¸TË6Ë’§;#ÅÚMîXu"’´_«÷Ž´ÌÕLgZÙ#¦¼Êg«Ì`«K?¯íçÒÛÁ솄8É#W“-žŒ0°9?¯ðOE›’:X&¯EäS½ß–iûÇæõvóhiöó@vH@ÀoŠ‚*”M6wþ''èx+ ¦HYæï‚u¬•óûÿ0‘‚¦'dÊùlv äàÝLëßâè_©ÜgÃdwÇOÓ8¹†Î< µ+¤|H/¬F:×d眜È|éÇÁQLÕ]ÅžYlƸ4ñ8¥‰wJηģꥦ ¬ÐÜñB¼ÙîC¿ ¥›£Cr„é?{ׇˆYì6_ kôUVÎ÷â—Q#Tßó5Yìî:-Ö”Q ÉêºÜžÉL­²•é ZBœÅSyÂNÿ-.ä§ÿBLö÷=°ØQzÃNep3AðûOO匷‡G`OعCc¨4 Ûp›l§sê=p"‹õ`Wn>ˆ<ÿbÞ‘Íz–p”ÀuJxÖĘcå¥8 ÿ÷mXÔ+È·_.ãˆ*iÌyU;ÐLÒÒ*ÖÆ‚y*qôÖèÌìOìïsã›ÐO@ó¿É[™ ¨w–«¦EÁ}òªsuCÅKLìˆaîûáÍßsON‰6½yrÇÚD´ô}nÿI+íF+xRñŒ2ø`ñ`4ËÑyJ\ýá|„G‡cf±e0+p{å¯N?ø³9÷ü†§¹*õ&O©r¯þÝy² orwÍK«®Õn aZäyÌý¯µ~¹·®M›(ÍYeSL-&ЇcÄ)¾n$“>Ý2-ã[}à7#Ʀ•Àì“ [9»=Œ—ð¶8³µÞp!† 2´ÙêmÔ9Æ}6žø$ÍÆ7§ "Òûá‹¥oGꄉõÊE/ÇÂÅ…£}©G™©™Ÿ£ýmO8H+µ²;&ò嵎ÒVˆL~ùÏa¬Ùiçʉ'Â^ø¸°;³dõ`Â|ÂØ¾ØŽã^2/GÇœ½Â`¤&Sû)ÅÄ6°i"£m&@¿#<y."ÕV*ÛÇ}u×Ðþ Æp03^l_\—Í­ð™Ì³d[eL¬AšZ!HLQežÒÖ¼£Üî¡ãÉQ0‹Ü¥+âTm6~uõþ½qT°è퇩…©EÓ®¼„ûa>ž‡ ”=HWéä‹ç(*ÒTTc¿ÔG¹g ºŒ¤8$j+ÂcrjrBbÈÕ¢H¯jþ¹V)P?÷L¿MX\0<ôù‚Ú $ÔŸ,Ò&r:|ûÀ;öôìó”˜ ó’Ií¡ãRtQENÀ"?Õ»Ôrüñ£ˆ$OŸIc_n“çúÑg±Ÿ‡›ƒ6tsÒËêYáxzå½a¶Ó_=wF«ñÐÓÍî­•†K!‡î[*¡µº'¯•¤¼‰±lm'$«wh„ñ³¹£ñôʺÓ\·™Ì@gHj_ÁÖ, ª½:‡ž¥éòõ•û[祖™Ë»ë2¹Ã£Õ+^Þùíjù×ÒU¬CòµÛãõc‡÷,K¥%ÝÅzÎGAÂGGfû° »ù‰cÜ×\ܽÓÏ­Ö¯O¯ï®¯¶gd¼IÒèÝùÂ×ÇîKee½w7ÞwWÎû°qRãæðk!Çwþ~-®Î_b®¯w¸¸jêÉÿŒki+Å=ø>l \y߸i÷ž\…A,Xv˜WOß`Úú·M÷ ¡ðÈâãÿ÷Å@Ñš‡ÕÌn’tzz±Ò²¢!³4EÖH؆€¨¢ ü¯‹~úvlF¤tœáéùo(ÿ¯âþ?. áoç^«Äzãµ—w\{û¸=þß\T’BI“€ÿSý.P­¼w’¤SGÿÞȇf|!Á|™ °€°ÈÌŒhòÿÍ)Ê\õv+>R²­£üã»õ¾Tƒ-@ƒìÎÛ¤ -çÖOý+ŸŸ$¿~¢(í†gdw×;xH@²ÉÙ#Ç ŠŒ£wXí-*¼qf$fæÆÎ.;xn}z.{FvÛ0ukl¸öê”â€ß½±ÛsJ#‡¢znÜÇTñwÛ¶§@uô=-œï œ£ Ö=•sÞÙ‡žL ô²?e#ýÖ“‡åÒ}ŸÁgïn/À¤32·¯4{`L‚{²?ã°S) ùǪ{4;#$$8ŸÀÈñ²T$¿ÔSnH²áQæÁgÁ÷ú··ÛHΩ¿ž‘5ÌÄYõ˜l$œ¯ÕZ˜øñÊsG¸ ¹?ôæµç?œµÃžm”DÏy±> —É&û1 àIõ˜OO]³)ëèÀÔ7­‘ÒÓé¶/ÊúÿD0FÁäg‘röÒÀ‚9ØÚÚÖy?OaB3íÓÑ9·´·?Э¾ä5Žaóð^y‡.ÄýüúÕ­­‰­ÔK ô[Ò Æ^Ñø¦ãE3”¹t1~§ª­ £¯|þ=–Í>†=#->“¼mk¿Á3—¼y+~hŒà-³TØFõ¶>Ô!¥gm•ø}û·^§wOU“_Rþ~˜œÓ;?(5:j*»kB–N€gúF®gqa˸Hße~^Þ{î»&ƒiVçò¤þQM¤ôï‡c‹H—óÈ\)%H9‚;E°…§[{ G§ôêF¸Ð² ÔˆÄÎþæm/×]%®..Ä”oN¡iïã½s ´7r»Ózõƒ­û$øÀî‡é¸Fit$Óm0ì^ÿ­•þÿýýN„!]\m`|”ôFCü¯¢ ._&kø?PK’nYTR-MANerr.iconset/icon_128x128@2x.pngUT T(bT(bux èèzeP›]æ›ànÁâÅK)îîÅi¡@¡¸»»{ÑàVÜ‹;”â-Rœ¢ÅÝa÷»3;³?vf3ɼ3™äê9œ{#T•e0PIPÀ“•TðòAF„= K?Á(ö²ï€<ìåŠÛ:5‡}Iì,¥ë¬a÷ÉÙÍÔÑpssc³²µvúhjoÎfçh‘y$HT€œ¤˜¦{Öa¶›·ÆÖõÈ;½(!½„ØR tŒd?¨ÃÑ¥BQy|œËtx1)&v2rCjºX¨¢y:Nä¤ÐtáHG—HÎÊEUñ»±/^«’¼ìrîi7³vwø&ø šš›!‰7¯]¢C˜¼e…Âúð‰§Úà˜·HªN¬ic9C&ZUÄôPJáòMù0‰0ÌC¤Éšû¼ Jô>S¢ëŒb©¢PTB.¥””½/«ÐÊÓÁÑñ,Käañš R‘QTúÜmNVe_ï÷^¬„Uº‡$Q¹öÆ ƒsm[vÉñZ>7/–ø0X_-+HhA¨P©(‚IKn:Ã*\“ù©¯êNÆN2W-ª'V®æ”°vø³1!RÅV¼ÙÊs.ÄÄ_e¤|}…+Ðc¯t\þ9ƒËq‘‘#“¸µnRtpjªCzÙ yÍUUUýÛÛçmxT!1Òp•Úh1ÒAò)4ªõŸ”$¥¤ÄJfLÓe0ûÖá0ÆFE¡™¶Aj°ôAj?ÓFô€8Á3d ûS=B£>ùQ)Ö +h,×gŒüÔ"ívÕ“ñ›zŸhõ\^ãgÁצDs÷\oÞ8\^ië…_o&©­¹¾VÍíʇb63ÓÑd!Ö É{bݧ=*:ܼkaqqëöIÌàeš.|Šj—¯. PZ=eÙD.èÎa{¾=öÍ® ôí[~:»ª’Ê,@:< !jú %¡L~îѬB/Ö{Ûmƒ©÷,6»”všä>ägoZèEÜú-d\«Ì»9Йuª¢ãã±s©PÏÎÏη•šH݈C=Gr ~¿[#ŒŒc´ NXGœÌÁ:<î’8¢Üt¸dæn¶ÝÞÒu ± +>ÞAIy‚ëÕ^ñê7‚—¿¿%âÒK± >÷.Û1 S5N÷kæê^ êÔš™™uÛðœ;U#Sáž—ÿ¨ß¾Å_XXøÍM2–„„uÕæsUñxw©'â+: ùz¸Û¯Fïv o¬àIýÒhô]\\èb+Þ8$ÑåÖWÇÎü¼úÍ¡,Öw𜗿Ÿ5ËÛãû ¼ö¿ÏjãêžW3æ-w’ñ;BÕÕ%bÖ*ïo3úŒÛŸùC×¥ï.Q‡Cøa}œß>Åv‰7"¶K; Š^1‰ŠœQP&« P ¹TU©TÚèÄÔìwý§ Öw§à?V.Q‘‹zn¦]ÕW¿G ¢ë6X·xV‡„üi´ŽRôsûG+QYYdª-ø“<a÷Ç˹ÃJ1-0…ª->’ñønµûäñj»|Öä+*rmsÜ$3‘#vö˜[JËÀ…=uL–Q“ê¹Dg¸Ëµ*#aû–°FX‚~à* ®®®âü˶¹k²H!MÁæZ~oŸ¹>¹Òtï›6‘ð3µRF÷Íé¡/0ùpËðS"¬w©š’ûùïàÈ]ÒÁé>1õA*`ÚÒ¿w[æ™Z@`±·Û9ÎÁxÿÒóW™b"ÕÈE3”””d ò›ˆ$ý‘ž¤£§)ü¢O$r‡¬ééYÓöJ<-Ya±iòË2ÉA$Ê^˜²»±ÂÀ „‚ˆ¡¢ ¿åG‹Æísñ°…­îÄd°ä4!TªY†KŠòÛ’{õ`µËïr{,S"9ð!ªÿÑ «w®^£V܃#lÁÎÑØ»9,”kÚÔiÔ}õÑšfPŽhën¤~ù`;8³?ñii;Ú“Qˆ€I­®j…6ëÕeØ#ØÄÄ(I#ðÖWÅâW###p ¶77ZÉú P:-qò銔ŰMÜi=°=›“(P[á)²}cyQ[ êŠk¶&/$óëÝ’ŽRõ"TÒª ¿ä”•sÀ.üªWÿ½Æ9h«C_É5ÁÅaT»R¦è\õ±’3ÿ¦ßñ{×).!<¸ã¹G"8¯‹îëEÎ7tÈ ÎÝÆðD³ËC>:\Ô@ ,¼ü‹­²¥ nmžŸ+:¯ôß0×Ð0j Š6;1\è7Ý\}wý²Én„¾{YwA÷\?±f³ žÚà²>>º-ü9G²±=y–}„ì¯0&„ã—h¶Œˆ·× ¾gþeÉ]j”}@ÿ‰hûv0†ô¸lØ7 ®ÈR†-ÿõía¬E.®úYHNþ\ÏÇPïCP$6³ÇûêMÃÌä5j~ªÓáæ­{Ú‡e4Ë éßåZysûb3Ιò)ÌM^×GÚYl:D?¢Á“‡ pc·çÂ]"Ø‹ÎääüÝ í­6‡{±d ••Ó⼉iÜ×i‰ÔÂØÆ!«IV 6¸©µþ¦éŒA=ñYYY‚%™øàFÿÄ àÁ}Îà»æ™”ðÚî¬RS·Åøðl*r¶×R×77òAÌî/÷Ya¡ùkμ;pV(€Y‡  ™rÉŒ¤Ú¯òÍÍM·5£w)°´ŠØ fc©¦w–‰ûñ‹Xxœ!7¹’•ù5š¦QŽÍámªÿ2“åуžû’&ûÝ$©E.;¦xŒt?PŸ˜”DØuöã5¿& ¥Jñ¿:x¯ÊÇçÛ(VT(êtš¯(Ä™ØÜóSÑcñäVМÜÊÞh*k£ŒÕޱÂvïaR“ûBêî.»“y(ë2—÷pL& ¬çßq—¹•þý¢b™û=´B+©ÈÎ`ó¨ ËV¤Åï}½q:¶¤%‚;ÿ]’ë-¨˜ÃªtfoÓPŸ$ÕfOrëGÊyèÔï •¥N/ÚE»gòQp¤ ®jeuÖ”B§ ð ½õhÈH]e¿ç’ÏA„ òÑy‹žõ\rÖ|I ¥[sæÇÁÁuaEæS4ê² 5Ù­®øŸSÿÀ7 ãSIÌ•kIÑ”¨›²p¬¯Ó™ÍOßa“±àr‹ñ}-†(ð Á:î«Ó5ð–¡ 6¡#f`¥™k=–T¯««A×WØ«V5Œx¨þ }?‹ßùénþÒæ/Méó¥}×þÌ¿ƒOe‹\,y˜¢¸ãr›qÍ;o½uá7tüðaÑ"¶‡+ØÔµvk°‚»ó{NÊ{çÝÀu´éÔdõJ_ß‘ŠloÙðÕe;oÿktÀíi"Ù^„¤A%‹‘§/™9œos³{—üŠJ„ ºÔžT¥ƒu‡u³Â+5BÑ8”¯ _É:„÷£,Öh©KÆA> ‚»eÿ0ëµ»0@sðíuQ ‰;ç,¢–Ÿ¢·ñ  jFñà»kÓ.ï¿6q›"ð||«}~ñRx)®`sû=c,¯÷Õ5–ÐÂ8Þß „Šû<êÍýmÁ—Ó©cv£¦—+{ <<PšAö]ÿünNSûÄøµûiɉÑýΪzUg²žáÛóµhÇ$ã R¼½öm`½ÖkŽ„:c]yá³ñôÛ%†kªYéuMÿøÉ’Vú`ô¾š™KÏ_CØúaCPü¾j‚Í¥A¢—÷Çj'?ßäVÿÕŽŠÁÍÇX~z¬;ZoŽ!†-g€èç BT×´9·àÈbÐ7s€ÃÄò{?ÐLYô¥f4˜[ɶ36ïu^‚mq98˜ê:Œ2þzÙ͞NJæÑ·AÈ‹ÆëÙWwÕ NÙáÐ úóp‘#ŽøÕâ®ÊÜ7¯j#1,€™‰1\ÿ!é>Ã++ÿæ>8. UôÌ(G²•¾êuOQ2qrbÏ^ð{Ïy”of  ¹ Iõ›pˆ¢Nû ÊþòJŒ¨ÎcöM¶ô,,öÍãһݓ­òKÒÅùÚº-¦xR¦°\ûB‹çºÀ úµµÎ®/ˆ0v;á¹.€¯n R?²V©Jðóe[‹ÞGC”¯_¿zv=÷Å’ xºîÏ~yw£*­“"„ÐPõÖ_‘«3+õ„ÒáÞL]ãžÍ/ÙÚí.{Ã.^™\™Ü –LáP7 ‚€8ÅÑAˆªÆKw*/äÃ*8¨'¼¾¾>üãL æ6Yœ=üj‘c•œŠBMgòg_/)ŠØþ§,üÈí<;2_Š8‚&Gâ²a«×­…®~ÒmÁlÈ?.ÌVd!&KÃe·ÕÊÅÞv4Ï€¯êÃBBzöœõ~~:ßd”˜ 0t«µp¦ä⯔A‹éœöObÚÌyH'-qØ›¨^CÐ×@÷!dÇ)ë·Î>t¨Q±À µú¹`³Òôe±é9YÊì¿áÀozwó1ÌüJb¶˜<[ ß©øÛDT&@`u'cU¼„ÚËÀ2߉<`!qg%öÉ`ÓùÊãŒâÈ –C€štÃù¿ß l·¦ò -PK€¼’Ô.TŒc,“Á«ÉhG‹ú½tm¬›zïñ8ˆ✺áô ¿Ÿ%ˆRƒ†OÚÅnµ¯£yàHJm,??–€Ÿé!þ‡$'ùb³%P©—°=€ˆÂý'‰ç¬mòá¾úàË  ƒ0EC` ¯¼¸|úÂŽAŽ8Ú$ÙÍ— f! x2c áçTKÕ[¹ÎÎÎ` ©m3s ÑÚW8 3쵕IȾJžÔ 3ZqCÝKÄ] O¢ ÏÝKÏtEz¢hét¥OéŠÒécŸ€“r䈓·^Ñ!¬ö`סXòU©)pØãL š–Oh|ÑñO•“W¯Qü(ãíÙ-:îÒ”1osš'FK3`P`•gU9e ýýÙ¤~ÁþñÎfJç\yQQ ~O¢‰ñ5¡á—¢7µ±Ä“ÎEõ QýBtü¤jph0 ú§(Ó¼¼*µ•™ß «sbtDt8˜—¡cbÚ3€KG<¯\^3™¯¥Ö~)ó3·Ö`‘…·KEÉí–.Avn-âœB2}X/ˆíãÎáKOøóçÉÏä“{ÎRɈzÙ˜ 3ï-¿a×Ï"l‘<2EnT÷àEl¿IE|²4³°xõú $\\“ì!+‹ÜÛ׋CA:9©ÊÓbIç¿ -ýŠ(4`fïáÓÎxvÉw×COTTÍÄYŽæä¤êí½ëAª‰! .ûA¡îäst×ùkwü±‚Šì…a ²lÔ›äÆ¨œEÉV–ùo *{%dʻͳs‰½ùæ—@~ø~ O„Nƒ¸&»hñlL¤é™™øœL˜×ˆG i…$'s™p~U}CŒúûµN•Í›ùAFEFiüDQ¯3Zq#O9×uöÝ?ø¹~˜0Ýö~ñ~);IÕ½òW9hl‚`X2w¾rüË2oêsOËö³þâù{û”ÏëNL¯ýŸ Éòvîe«&ÄÎ+ÉJ’¤==¹ÞÔ› Ôv¨í6ãŽ,FXzÊû´¹µõ¶Ê°íŠ À›¯†GUGª=u Ø\Ÿ¢¿íµd_¯Æ=”i˜/ê4ñ¤NâÚ3Ü,í·T‡Ì DæÃÂçV;Ø B‹ôI¾¨ñ7ÑóÉ„w€î3à5o޶ëÖ€WLPñÿ´¸ÉO¨ffX3 ˜­Ìàèä”›‹U?‚Þa݇ý¯>s{{û711ÑÕå`ÞáÍ=¾HÚû˜Éâ«C¸áÍ|'óT(W#rϲ&Åâõ>€ô׫·jíãwháÃ#ŽùGrëŸTÔ Y$1–;c|iBT„®aÔµÌçª)Jûê¾É~Éøs©Ü˜{b>W§x8t ܈ÈNÂle$Ø»d¦•—Íj*ö¾j0ðÚë®æ½™A‘Ó@Uvô‡Òb¶¶G¤nGË0+:³ÖÊ$1  ˆ<¬=f2¢6­÷%ˆ¸0ïörÍàã—m ˜¶^B:7ï{J¬¾[þ2#²D›€ñOŒ6G´, ¥õ—w×®¿ý/BfpÕu—åÓ¡ïúÎH)/ ›Q!® X>úÜóyïÞé”ÌìuØcÌ8´tª¦øþÛÇ]y­®cדo­iܸxÿ4a¨Vÿ@ì½ô&(ÃéâeÈ«Á¨ÔF‹,C«2M§1W£]DW¡nÏ(CrïeS‡5åð^Ç:Úegóý¡ƒ9f’¡Ã®ü¥ Bò?}sŠÏ/Í’Ö¤¨„&Piï|îÛ¿¯,@AŽ<_˜ <ŸÔ à¡3ÆD’ý©ÖÄ5§—´ôþûH7¯„_ß@¸±ºñõ®xÈcJlf¸—èñ‘‰„¡¼mU8Œ€«'Xu’Ýž?Ûž—lé7h xíµ4¨&Y›*~6J}IQÙQ»2ð s¹¥¡ìÀ¡:T€Ò²dèDÔ| ÈmMè¨o¤ºCæÀ]›¼óà ^ã—]4æPs¿ž§ÐÞ¦~ì= ¢#fx­ ÛÈÀieåØ/S¿ßHØèÜiì^Þ•.gf¼e ª˜ëã‹ sK[b¢6L5CÀi$¨y~ªkxÓ¢Û>ˆÌiû#š­ïe}P°5 ½ïä®1é"Q\c·ý£Ò4ÿ¦l2æ{E4‡:iÙˆŒ†&¡­­í§¯  Ñô°^c¾15­‰¡ _[I$^QÉ™$ȸï5—¸âõêØÔ1µ÷†ƒ¸æ¾ƒ:>=¸.Jˆ …‚Úf':³MïG<”Ø^£ŠÒäÂIªÕ†1¾pFkk+…_W‘¬ƒŒÅf¡ïUTü$Š––#„ÚØ¶K-0D\;îzLy­cÿwÃìÓ'!!rbbâáááµGXÀ^0­+êîÎ[®]YZÊøpì÷,‘Íï¢Úlkø«BëO/‹h<¾;®aÚp½²¸½–0Íš‚PäO¸š×¯Ñ"""n¶ÒŒãÓÓÀM)ì0j>Û”Ëô˜vaáæ†Tê7K·¹N¶:Yp[Mª¶ê(´ÞÑû#t%Ïš¤ËÔ‘ÃEDrðI#šYÜŒ‘¢œ£80ƒmî?=‚,inÖ]ãá4B®Á ÎßýÖáèp±«Ößßor¾=VåbM§VÿIÉùðþòw‰û«C˜‘²~Îï Ù‰z’Üyž@xåÙ°ñÈä‰åF±ñ=P  ޱµBÎí߯ˆ1oMQNT*&¦ÿl¥>²­|Md Ìb¥²FÎýâ/5$µœZŽ…¡¾>Pi ¨£9TŸJÐÀ‹êUÁnB"Ø  Ó Õ Mú‰Ÿlå²M>…yw¦ëîú8N†ï}Êòp‹Ÿïmx aOLöBPݤdüálÎaPÎÖÔAÊœnhDøŽ¨P0--íZ’ŠpÏ@aTǸ%|Ž;ØrÓr‘Àý€“æÀÑ´ä÷Ê◢Š#¬†LOOcãᥧ-yw {óæø=y£5ƦŸ%âÆ:™'%ÞIä8àˆ#P•»Bœ×‘ – Fj&Kí_eé\樱øk…êtP,¨›ÝÚ^I ­—DûŽðæRÇdUØd‘gízU!¶‹+s &#-|n›ylÿóö]Ëm&¦hݹA Ê÷ÇV…lÝ­¸üëÿåi!¨Š122v·{œsø=yó.¡W³êA"Xº,EK=Z<ðde;D×#_LÁT&Ž"Û —ä-º›ƒ»2æÉŠqÝI=¤ž1ò Õ¬¨éwû*°jðAJ×7|fš§›¿X’22–Z{WËðjüDˆ­dâ´SOàD+õºGÙáNO%‰½/ñ¿FÊŠÍp7Ù.GŽg |¼9YoqÞSWs¦aPOø6ƒ†–ÁgI>Z»FˆkzýNV ‚ʹ'ÇÁ0‹P~‡C‚v8"d J©ñz^0ÐC±‘ñBRÎ`FCèí¥î§‰PÓ}m\­˜ØbSrvd C²®XÎÖ–mÅsŸõ›q—‘3-|ºPfú½#ºô\hgôü„¶ÔZêTÊòZÂŒÇî6£y¨¦¶yºd†ß³*lö <š 2öcgêííåøò‡;šŒ¯Žž›õуõ!ÄþÝs ß'&î M„µP!¯«ä\P)št‹1ðÖˆÞ;©ž»AÒa¯c!Ú¢dØBâJÇ’E8íŒGŒ ]Õ|@PÝe8'©ÀçuFž¯S$UÎ¥õêÄ¥Àäþ"¯MÂï¦ðËbD3®Y h´ˆ/^~þ]Ž¿=–†DËãvÛ ×höÚ?,踉 lÝ)(â?19gæ°Ì_½úÙçþ˦ÒW;?pÿw—ý“«E»W*ñ[ºtÛO÷Ç^¹ÕÜìq¼ëÃÆ Á6D1f[¦“TPöî´/D®§xÞg(TøVDÿMR$§ko(®rEýÜ3lB$­!7€‘=Ž…Ò;g›ßi@¸Üÿ®‡™&emîì|ü÷«L·Ã³q× †¤;ã­Yðeh×3b*Bç3ʼn)šÿjpH"¨î~À_IL•þ0Uô•ßí(–à/²ºÍÜøŸª7̸ÊP¡¼à2=óÝ+›_Œ]jÜöCmŒ‘SÁiìÆƒÃ ¯N‡(ýÂÇí°n^©Öï>^ž¬‡múdõ7ÙFDGKÎ+©uùúü*×Bküü[¼H>:³‡M@š•EsuT0Ð~~ºg·]þòBZ?¿¾iÙ³È÷zŒàx÷yóvÇ„Ï!ð›íÃSÛ lJok>  6Ø.ÿa £R´ÿA÷ë+t=^‘Z pätpÍ¢Z™¡€eµÑeñ ‰è]‘‚‰w61\)“ÇtºPn§¥‡ 5'9F{{ \W?Y߯Ž2¶öÛÍ Ã&'QÎæ_¯¢øë1×A÷ö-~&¹¸º:®ëñÊadJšx‚t øÓØ™0ÉÔ:°=öj†*ï~È’ûÃéÆÀ®¾îp­Ô1sæOIf¡ŒÏ d Ø4Bà¨Ò«AÁ“ãúûWm²8†åËmÔ²íÐÅÞ Þ+~J’Gº—JPs³Ç'ôˆ™´@ŒVr^{*’[.t¯ac¿Ç–ÞþÁÁï±Ñ´Ÿ|º|WšŸï»×zükÐ¥ÔÜŸ¯96$WN7Î(뎓ê€ÿüyòÀ–0ö0%»¾~= ÷\•¡ÄõÑ2]H—¡ÀÙ«kÍ›låLÎÇl¬‡‹ÍC©¬úö{ÓtÞ'=H |_ÉtÞŸµo<ÜžÏwúÀ¬ówzºE#¿lÞ‡öáV}ƒDé{“7&ïú¯jµ3  çYŠæ[> RòoÔ¹RŸAΕzu[¬éÂ>ü¡¤¡è=åÄó (7g „…%p†mà6·ó8˜¡û™ñM&–,Ì'H Fá§ûÕ]4<<ZåšëÙîØîgr× Ñ#(£ÉOê/š­:ûõü ôùÿ}@œÅð{²S¥{ÿNóÖ“ ›”Ú_Uêc æ{ý$^V/wûç<0ó]¾J®ðÍv¦¤HN*k@ÌȸÊÈB~ÁȬ>,bF’8Í@tb;¡'"þ&|IùŒè¤<è]ÏOm£*ýg;¹’_oó÷½à±PRºatF.àÚrtxT=I¯Î)”Á"ØÒM¦¼†ã÷P§€>ñ¦‡#¿ÿsÚß/é|0?µ%¸Áe ^àÙ1räÀ;¸qx:Á!®¬÷UU6ˆ½âIu®‘Á™qÙŸxz¼ç´™çX9y¢òÙù€ú*ÃÑç2Þlåhâ7ˆ0PHýù™%¥Dµå‰]RB«60i¹?b•"â^Ãrè9³×ŸÅçÄἫZˆBßz@æ:EƒË·ƒQo‘dèbÓƒ!0Oõ}ãwPïr›ÙèêϯÝÍ«mãÜ$µ°¼oºÛoÿëu¼ùtãzïû8|ÆöíK4é»XsÑÏø¢–Ûmõ¨É²·ÚpÀõó#¹Rf¯v‹´Iaa!Ô¸Ë7]À­ºŸà¶S–¶3¾˜*Óìl¹8^¥THcèéòú:ü|ç`æŽ}%£!`Ñ¥ªƒß§ó ‘‰äøìNÜü«¨Žt;Žf¶f²1¦8Vg21à¿CÃécÃïkºïOÊ…f;J~—Á°¼Õr¶½°¬ÃÙyº÷±Öo±™Í—Bû¦×XþKèmzz8Ìs¡Žãù¨Mt"‡¢+;ŸÑûzÙÍr®*{?}F®X:G’CžÓOø´Âþë[kuuõH ÀqgM#cF%|â?©ÿï¸ï}%‰ãªßjó¸eãðÓ™„û ³WW0VFq­ýº8: 7²ÛÑÒºKŸ bç}¬ ê»±¦/´QS–’66߬ÓôÊê­ð"4Œš¢-‹ÒŒW|÷?¡#ÂiWÅp(¯Ô%1Dp®£y ŠH©Ä¬`dŠ@uø{òa‚s[OÜ€ˆRÕÄR`ì§su„¡`Élÿû]s¹‡5¹9NÆ‹Mé÷À™¥Ìp¼$ŠM˜¦~Îzö„!²åŸ†2¿˜;q[¶“Y}³_"^©dûó éOÂê0Þh¿^ñjÿè´}³2 ãÿnu“R¿Ãóm•A+Øßî a)ID—G„€m©Á´ó7.AÈOز‡¿9ñ‘ê˱Ѽ€¦®Ÿ.&¥p4 ×Ms%[Ï€X2jùnʧ[¤ù¶æ]IIøòg’Ël‘ÁgöN*¯hתqãã?hxôŠ¢0Ú1¨Ž£d ê<»Zý].U†ŠzÒ‡%ßÉ›ëÿëø½•ÆË™Ù4•,°ÉBZLg1ÆC1ÄtÊÀ;pXÝ+µ¯-~ŠþYï6ªƒ‡9Ð!Z‡n‹=õÝå~Xr2d…ovÖåõ&‘ÍÚDD®×Ÿfê›f79ÝÊîÍ‘þßãeOAoGR¨õdeÇ©‰w¼¼ppú-zÍï.ÛéÄ®ª“Ø/Uið«Ø<’ȇ—Z„·ûä]|NN, ½ ùó®WU²6Æ2GÝDòDì­Ø¬Ž$Ä‚­†•èk%húçtBщ72*à6&YûB¾L};0êò%Š%wB AI–)IÊŠ¿ä×nNÿî.µÖž`‘HnJ*¯# sJUÏ(YX²0Ry%Ü_⡉H’èA¯d~xŽÂdÔydl¿²‡T‡§™>!OI®½¡°›[Ì´*¾(Sã–üÅÑ2é;Û¥5ò¹ý‘Ád—ýþ¢Æ‡Ó‡³ëU?¿n8ß§6RÒÅ&:5¾¯_7Ð1៎ŸÍºª¥ Äð”ÑÅ>Ñ‹p–±ÃPîù²L£ä¥–óýÈ?Wõƒ¢hH&>èçOÅöÓAÒ—(¹óoŽÁIK9BàýÈ †ë0†$#"Ï«Ũ=YõS‹Êô¸­’­P$`ƽzfú¡Â†6…×ï©]f»£d(0æ3>ýÅ8?¿žú×í¬4˜’*€ÓL~z=HjG%,LcŸyûSšT¬¡¹Ëý¤¤Ë}¼cÀ:f¡Í3rÔfEÜçëׯ(%3(ņXÔGÅ€¼$'òžæìûÚÅ*¹˜m&a‘FXÞWÄÑH˜¿iFÀsÖuÍ8—q·rÕZNѬðè-ÞûF3Ÿæk¨g}žøœC¶¾ƒ¥Ê©¼Êº©NHL³~]îÏ™6êyÌ0ªøVÈ?¾–%38::žÀXhc'× »B#ì@? "-1[¿°ÖÛõt‡¦\¢áª` t>'zTÚÐ%JHõD†áýUÝŠª- gP_®ÎטÊÊË÷Ψˆ^ µïEqÈ}®6zjüšÆ0ž­ú2À\ƒïÎ(*"ܳrÉdû¿" EŒûͺÁ]O?R^ëÖ~Y=ô…é©ö‚±Œ·}0S€MJ:º˜­Còp1£Â;jËŽ`;šìéâñ{˜òù½~X<˜ô…bìÎV’ŽçŠLTMŃ!=\·ED©ÏžƒÑÄùŠ+5¶Ëü?3ßa¡÷uÃh8Î<Œt<=ksÙ`úâVjQðÙÃiB~Ë÷ú ”ƒO@™c¡Í«¾¤c$ª í7B×ñ4¤o,î®á’3§ F¸GÇ2ßq¥? JÄRŠÄ¾¸G÷iLJsô’ðÔ4@ûívfËO&$ƒÄ2†],{«ïl‘0EHŠ5K-p^׃°¹Kíäx'¦?LM‰íꢡoÊŒ™þil{“cõ%šBˆ¤ÙnUºÚ¨#>99x'X‹G>Á®óVâu2Âðt˜¯(Oó\ô8Ž_üŸžžîÎ×¾RÎâíPVë8ޱã:°Á ‚CŠtBÁ»–úW¹u{^ŽýÈ›››& uæóíoÊuª)üs<aªï$äôx%ûÖEŠõܰ[ Tӹˆ‘ [6G3 ®þÓXïÆ@”Ôcd8ÕûÊ»k,õv³Ó¸¾sÆ›o•fˆ8?À×ÕÕqä“DÈÄI[Z2ÂmXÆJ2)&0šÆ>4ÊÞõsªY‚yÛ|¢eRmø*vñùé/%ʺœñ@Ê…×v¾@÷R”»8X˜I!NUÈ䡱}ã ”ª#Ì×­a.q+ýmœ3ê«1í3iÔ£[½þ'’¯U¡…V~"@†©˜Í_ ³â§KTãòš‰ìZHEááñÝóMÖù9\ê;MUt·#É46CZ¥§w+Tr<û³ê;k+^#wMʵ*&« `®4ÿ˜«ß¢$Ï KÈ‹@Eø–öÓDΘÆàúúæùM†Œé¡^µ‚.Y£­aó¥ÜŒrp|÷ºýZAœp/L&J¹ÜÐÐÈ.  =($ÔÔk'&ÉAqÓ’Tòa6]Ð£Ž±á®™™™ÉŸ+Ë…::L4ñór­WÚ*B[>mf.fÃØu_2:<»'ó6M·0´@È-.û/%+:…ÔpEߦ†v—½Ù$úi/<2L¤í‰Ü8D ’ÿ±Üæ4Ýuqáü¢Ü1H¸»a˜!I£×DûÞÏ{AÙg]-p45bâw5–à³÷‚öIN>4x+! +_¿Ùöæ°yUrÇÈg¾kµßÛ< ”1‘öå€ ‘Ó9?"ÂLuZôzw\âýêV°)¿3òÇÁh1Xó^ïxlæý­çªZ;šÔ^™ì©'.é×Õùs~Î2_ìÁÁ—ó”'çDÁô™URFFäéß¡ìï|©±„e¹.<‹r ^‰JîàÞLÉ)LxÁŠ` InÜ{Ž4×Y¢Ã±È‚ƒ‹úÞ’lzÿ+[;ü…Ωp% í)‡¸8‘'ÝM]®¯²)å:F(ó‡£ðˆp¥¤oQyíýuHyâ™WŠÍ¡vÆ!ÇóS×Ý9ná\‹MJÞl‚Yýv7uÑ í"ŒÚ øÈ†nÅtœœ\¾þØæu2CU\u'BX›[’ûíÇ!€xU´A¯ªw¥õÍí~5g‚®C`¾àDx^ÓŸ?E*‡¨2q°ø²ßŸejÝÉyµP.!4Y˨,ŸÌúÕ²Wå®L£»Õ©»ë9‘Ü™‰iÓÀ–MNº| ÛôMæˆrG)ã™å¯pøcn+š\~2³×W ¸ëüä“Eh§i;7¾vªY`äB«K˜ ÿwR›Å/åz&tkÖmk|Ä‘)W— C⪂È"Ÿ® žGÛ1ÍÃ\Î=yðsè—Ŧµ†«ƒÉÀá þ¸oͲùû¿L‡H&88ð†_·¾3kÕíIYŠŽg_–™…ÝŽ;º+ªå«7’ƒ—•Å;‹¶ïÙÛOÀ³•ú„56Cò÷Ù0±Éˆ_™ªˆ4›¢,ì°…:ÙøzA²°Ÿo 3ƒžÞϹaž{Î2\âj€PŽFÕNN‰ŽzµÚY¦ÚEf®‡4ôÏãÙN1$8I]ÊäÇ‹æDuE·C”r›Ti/úŦ/–´—Xz ˜øÃ IX’•µH“¥Š`)t-, wà>û7£Õ|üÏyóÆiâ6»ÿÜlå«Å V »È|ß÷þÁAÄÊâ<\Õ%Ûîº~8¬ø`Ü6Wœ8®´%“š¸gËn’ԥ᭞)ŒêbMvíÖuw@§Žn§O&rW ²£®.‹®¿EŽÇ`sè(N9Â=Þ)Z4‘ؼ¸ïcJz£FIdZ-3? ÙȽÕ{WÛùzv*Nr…Ä=CzýV}®©……ðŸÄ!˜Ð$Q`wÙOäû†¹ñv/ÌEî~¡¶Gé%Õ÷™õOCi¸ ¡ð߿Źæo¢ÜJ?s}qel\aЦÊ^j„ò[×Úà@Xc?à<…Ôö.ô_åtÂ~W,(T$oBût$Ÿ’$X …u*nm3x.aÒ]—Þ{ xnÑ®h;îŒ2M¥þ™ÖØç¨8 m&DEÓÒ•äøêñïtOÑ>¯+M“Ô8Ò¡;I{W)‘&úkêVOj<=¦m:b\Ókdö}8•‰¦¡HÎ@R”„a,IO×ýšs ´ÄU~¹BþlðR»®: ­Q›™9ŽÌêɺYòö‡Úxn£ÎÐsp?¨Í»µ¥Óø|{¬öË"àÓÍßη RUT\÷õ&; OÓ†¯YšUŠù³wW)ã|5¾Bµˆ©l) ×YÓ¼žÉ¼w…å§¿*d …Õ¿ÝÉ0qÇÛ\*xN×z‚j­fè%¥¤ngÝòÄ™ü•qÑFšm&'}q"†¤¼Šs÷öÌŽk .l›ëÛ‚Ž#ú?ñ‘Ž Ø¤Û­·‹N­ŸUUÁDÎÉ¡q÷îŠTYØDûl,äØ7èe\÷¿uhj–^Šed ¿3¾ÝN3W­ßuæoø²Hàsw!EÀºô)]È#‘§Dcé—¤ò¼ýÊ®%WåFoè9&Å; îæÖâZß}®Ú˜²†µÝ1¿×+SuÒêçMZ+` üæÆ½ýùé¾etabß9ñrSäþ»Ûõ—Õ[¿çÓsäÙ2 ¤\ï3”Ž¡Ýõî.öd ·o§&r”õ:›Jiâ¦[|³Ýϰ( ¹ç%TH z$({øÊyÑÒ¯„/4¯—œ€d}o8UÛUÈGP2b•$%=ÇçêýÁb3Ö+™XH̰•m‹ÙÉ)—†œ½ÓÏ÷,?¿¾ cx& åð^ÄáÀvF—÷×èo}¡úAc"xì]É'ï씳2ŸŸ‹¦Ÿ’JKa6B÷ÀÜ©–ñ׿¨-ÉR&Š%‡‚ÃÂþÂd±¸··`Æ[kzÏã¨îDº•LƒVõ ïI¨Xéž4.ÉÛÏÁU†mßæJ©Çùº9h}´þöÓ ó؈Åvú ÈG°¯[ó²«6„¸‘3¹Èrì^-tju\*ZÚà$¡çÒ$tIõ ý¯_Í*;|î» YGÆéQ­nìó¡-銒j·êñA£!h’7! 5×+^ìM6 GËm÷+-‘´‘j@‘)Í^Ñ?YG«À2555_oE¯’Ã"Oô5Û"Э„ú#û~n®F¯Ê'Á7‡ÔMÀ걎°—O‡„‰-cL%QŽÌ8 º!Ó/pø¸ºhÑ|"_t+-.&¹#aÿƑ̃¯ FæNþÚÑ€‹ †h|žLN33Zzzy[¶VÇ–ß‡Ë ©Ç-A¾ÚÚêÁ­UðíîS—KVˆœV}Ž¢R7wñYù çõ=Л©Â~é쨈a¦¶ æë6(ç¾_î%5aŽOæòiØhÆY aÆý±š„‚f« £Ð åTªb 5ÀØO‰ÌùzIÃÙöúhy )3=}ד-EÁ?„UïìltzÔºD%)²õãàNÃæ‘!T‡}ÏÞÈͱfé»YyûyœN•ñkªþÍ‘¤Q-&[:uÓNà “|#*¦1Šf)5"LŸmnšÌüÒ¬3ŠÑÕoseeŸ ÝM«yƒ‘P.BUøI)ÑI´ÜE)I÷öÓXᛃTxýøWÂFÞG+^ËÕªî}{3¢Šè ÈEeeeEï¯Û"e^"”!ÉHõ–Ó«ž#Ë\¸o$iòé±Yç‹´¤¤Éöϯº]¾›d)mÂ9ÙÙ1LÅáÅÿþ*ÓXglPnÐÛPº†o²iq€­«óþ¶ÇnIÒ ¿['U˜‰Ë¯×ó·Oƒ18>÷W0+¦Z¢œ -9`>.ëÖ…¢’1FƒL¼8us=S/÷ ‡X2y¨­Ï̪m—¿¿}·óóº?³[ÅßyP¿ô¬ÀÞÌã†Éæþß:»“Ôi'pý_w*ýµÊÄóáUréP{»¿^î” »±µ*G’¾“5ßô¹ïßaÖ¢ñ¸ó™ Èüvü|ŽõÜ¢\ÒËŸزܺÁáW«e!`#7]xnºìÓwˆþk÷Èß} A+åqf,¿Þ~wNO›íëgò|©ù8„©˜É£”Üùç3ÝþíhZšò¶ŸÛ\qq¢xV áod”žD:…“õ0JñŠßˆBÈ2(XEy¼T ¦œœíëŒ"ü$ ¤v¤†ÌOúmM2”øÙo²„c˜í:BJSYÕ|&©‚Y õ6¶©U&a4(àÊ‚‹‡7•'4u»?7‚Xðeqsy‹áüNƒs¿w‚]SórnhBä9š— -Ò‘±U4)![9™0‹£0<ðÚýüûÄØ€ŒkÕ-ZóN¯o°/Lm/IEµ^I²Ñ2À+K¦¿Ýƒãéî5£Š“Z©~3›v•ADz:Ñ/\ÅÉl嵿ÕáQÞÞ»Hû…‰´Gžo¿C½S‚•—³¶ýÙÊvZæ’œ¨¢¶xLfËüªY>7Wa”©dËR»ÎÞ.KòÊÒãá8ШˆÑ߅ŽÉÉÁ'hª>'&¿>ÿFM¾CÖSÓíN¡ÁìuÎ+éðº3óŽ?o­ ÓŽÛ{ŒÑº?Ó黩»Æ prr"§EŠ««-iÂ2È_ªŠ}¸ÎãͱËÕ(»×¥¯E ‰l.Þ»82±?Y|5Ò2ALÔ´ÊI©¡5Ç]2f÷WÈúK%ù`SSÓ—#Ž¿§Äi"w6¤>`,ï{]Rù±ø'Cêú~ba“DÂ&,5`4 åî±`J{Vÿn=gÂë5{™Y“œp M/w°Â.÷J|>G¡`H­õ´´Ù? ¹ º}ü/`†L†AÒBÎÿva¡”û#"M®Á`ŒÏw;˜zñ °ÌUHÎJ Â×?FéÔ,Ʊ-ríÑì ¤cj`¶ÄèƒFJX«&jì»ÞÑäzˆ*ZúfÐ,°Q°p,'F_NîæúàýÒû6‚÷Iôy¢:+žÏU4)9-z¥3+=è”åKàñãÝ%^vÌZnÂr±nq`½¡Ûv}¹F¬=¤Ùíxe¾Á*©t%@~jÀ ˜:bí×O n ;ë-6JlÊÉ.4¢¹u=SÄþi¼%äDç±5 ÃVA;jÝ¡`Ñ­¬çª¤‚1$wT²Á¬4™¶‚µ\µ€£“œ#žé¶lå0«™bÓ©|©š½cºÝdÑ­­ž“!ʪ¹—nèþ=#€aÈ.Ô#½·kI×4Uü8óÒ{)`Û¬v’'Ñ+Š©:ô}¦Ë´ÕþÆØZSVBÐ=–i–AÍR¢Z$󅨇b/àJ1˜?8Ö ‹‰³öW©¬bûÎE»b¤1Ãé‚ÄÍ®‡Z4ìþÖz4ÜnGîË=&ÝýxµÖsl/%Øü«jÃW!JQQä'ý`^ß,EöàטJ™bˆãƒ”@Í;« ·ÌεR}B·Tö¡ìãÎ ‰t¥ Sì:‡WŸ]ÿO¦¼öqÜ™«ÐÁz!CBHR7Á˜rÎ8é§xd=@†i2JÓǰMêSyÜÔÊÖ׀é‚ZñÉêš»ÇÈ¿Æõ0R?"b8‹WMuø§dÊÞ ÎB} £ù×’‹Ý)899¹ÄZ8˜¯ì0"Xÿ Yê­"BG|)™ŸïL„˜•å2ÿ(\b:Lz?§ýˆÓúÁAÇÅ Ô[™-`š‚|ûöáéóÅqóL±XRºËýúúúÍIV- ޹ÓTÝ ÙÁQ„x2J úÀQÓÉì·÷xD\fásêjÂ[Ê f@¾¥Sãð«"L ¶¶¥Þæ«{£1Î÷OŸ….“-±‚J¸­¦áIßÙöG¿‘Ü>p­Knv.ã}ÔùDzvm°šü"š( … 4òãþ4AËþ³ãÇÃiØÖ‰Ï¶8ä?Yq½QóØV”¼:ˆ˜|k Å¡Ÿ~ ‚…XÂ+&&9.W*ºÂ=\ ¼ñë\¿'˜–^îÕgrCõ ”P'ŽB Ö(¦2ÂÜTH&y“%›0õ¿û‰R5dÃfÌŒ_šq‹Õjˆ/G/PH K:p e!@ë¼û÷ÚûjÁ‚n›K“éžQGÜ;ä¼ è›¶j/í-jT î¡ùÆ›|‰d âOA|œ8Z+Húâ—yæk¦+½/&˜NçuÈgt•íð¼¬aÁËaQÉD¾ú#l”m2|d(¸Ì)íFö¯™PÞ³w¡ò9”àÃ!©šÿáþõy‘ EøòG¿YÞfÑŒëåêÛ‹p…2]µió‰ðÍZГ7z W舿Á~¸?-Ûø1?-<ñqW©LÍe{üóüGÛ™K˜pÀy:l.ý'œäùîåª-loÓßÙåTÔ0µ…¸-Ô™ÿ#XQµr|7Ò` û$[‹ 0žp¶† bH ]j&V ŒÃC’§”’RG–klV1gžmñR>uÜ1O¯z }ì’ñôäßÏŽ‚­DA}õV¸¦`¨R€oz»J®ðÿ¼‚¯D/Õ L¶“ÿ65~In´~Tñ%4ã^X€µ[ƒÿÚýž\÷¹ÀÆQo´¯7pR eCµ¬úâ/…‰Çô÷°Ù£×VÐ’²=vÞl-†‰&1ÞÐ’ïÿ¬ýÍ¿~2Ú‚“ŽºN…R#YþD-co"FÔHWH”’MPtÛþdýZ^rT`“<¾Î<ŠqZÍï–‹æþ"`o2êR±ˆE  U¾Òd\ëÜžHhfˆ¬–0 Ðm„GŠÿP¡®ör[qPúD_GVÆ JÁejFõçüjï5€Êk=»Iws¦ðË}!ÏcðCOö@T‚°9êHö}e9®*΋ý™•ÐBNŠV.Ú›3ÆY¨ Tìz¤ß D”¢¶>Ð]zßžN¨§ø¾²Tø3$Z&¾Ö‰Ù yíÅB0HiÌ=ÕÆ…—Ç2K9Í™'2è¬1ºM¯¾i©7C1FÙÜʻۚ4nÁîÏ)û滛õwvBä•N _h1ÎÓØ»ðƒå¶%äð·ü$n„ìÛø¢¿ÍÌóîØÅôI\5@"5Âos®õqBcªËú ÉÛGŒñ¼OÕFÈúß!Ñ}8 jOŽףì åJýÒ«?Ö&¨¨+]‘0 Õè½NL–¢ãÂ*ß¿YqøñI"EEDªr¥ÃTЃK¶#)néh9᪩ýcñª¯Ä,Ôã4“eC4@Õþ¸Cv¡D\Ý(Mnyóë×Á*åµb:ð8%ö/OÐ ƒ2ö OÂc¨·ë‘à®B'h†@¶uüä\ô*Òòd¨ÁR¬–$Ô((ážÛÄš~[øºW§˜:ñr™ÂäWƒ1†Õe`ͧƒzª+Y)9M]„îÖ ¸ïšídƒQL‚ï·¬HR ÛT}~1þòxp€ýð Qùkþœ$ w{%‚~þ×¶¹ŽXåÉ" pÖT‘Þ¬ý–ÞÖv1´Ýv™oËÚnUºº¨”Ïžê_Ãç/#/ c?Œó•ŽÉâBø¼¹œÖ³èYß}’gPœ±½4Ô2Þ¨ŽÝöç­­x®¾[í¶?"cf5@­2L,èà"§>=EŽˆs#/x­ú˜fâw"6W5•¨Õ¡ýFÎß]çӶ߸>M·‰X+ÂüCT À'}ÛëëÕPUÜï%oNÂíѳöxª°¤Ïù„J ë{,§+LÔ`‡L–âÄôÌ–ãïªW•t8!¥Vê{ YŠ ˜¦DF”‘=8ÄÑ(xñœ¾‚Ñ]ÏʸN+‡§ÿ€-gq¿Sš Bv³Q(˜ë»Ú-¨¾„|;\ì{Z ʙ۹…EÀÍÙVøÍ¿×–Ž|…¤zôä/qµ’chqîÁRbÀ}3A”þ831qÀx }g¢¶è;ãb~‡*mèäÏ÷”u÷WRÊ]¾¸„óGƤæ3Þ†ë6)rݱ—Ø/Ýn ½?*Ú ¶ù]üw(¸»Ü/A^Ð`(í%¥{a£Tffýñ9d}C*MœÃ è»=Ÿ43Ç_L=ºsÑ|:SÐ4jÁ¾­Ô£.q³Ût9d–¿R£A‡›‰ÀC¾½µ¶]F©)· æòÚ¨úŽ^ª^˜rfšZ¯ñˆY±-ÇJg ͬ÷q Ðw܆›šð;¿’ñÇõMÞÿƒïA.5ò­É…íèŸÅfSAÔA<“§Ãw»O·C_žQI¸EÿyË¥Òk”µ0ö¢ƒ~ÌBº)KÛÓ±(C=V…ƒ–ö¦pi>rœ\±[ÖÕEVõôàà‡üäü/äÎa/¿—¯ ’•³.®ÕŸ+Ã;ãwÿw±ÇAÉë_CjºÐŠ—VF³¦Ôeò—v4Xõaa> ƒü}v…€Ÿ‚]hj2sD~×0ŽIª«%À=Ui¡ý÷oæÿã°¡ª•u3¢0¢êå3’R„ÉwmÚ¬ÿ×OþWÏÿç# 5Õ˜T/¯+õff|"-Pi©¦ ä ‚‰ZyYa¾:…Úÿ£\ˆ?¢?õ|¶ª“9ºªÿ‚±ª±»9ðû>/ÈÈBâMœiˆPEÑh Öþ…}ªV§H¸1ÌT£}ÀÄneÔP‹¤­^U'N”‘h²êj(ÒØ“~G^ %ùŠL²ÏÃ’ 6:Mîù2öûµÒe®âjY¼4ó†°1q$7!¬m ¶œS†}Ðþᣦ†‚Òå¶Ö“£.Á{͈Á͘qF`PžMª–u]VšŒ¿ÛÛ¥¸šÙƒÕ;ôT$ÅŠoÂÌRßÁçÔ¨Râ>UùêP1øÜû¬ x]©5Iìög–M€"ˆçKw¡%5 ¡À.‡ﲬ?".å@["&k{|à^UíÿïušøŒt© òòÉ`/9)eÉ*q“ÀÿPK ’nYT=+ ŠÆÆerr.iconset/icon_16x16@2x.pngUT S(bU(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<SIDATX…Õ—mlSçÇ÷Ú¾Žmb;ÀšfIÚ¦l$"‚0HØV…EëÐÔ&КҤHUKSuU¥2JPU`ƒŠ}(mÍÄÚª-†ut´bj™Ú¢BÓç…(bk“®QÇys°ã\ûÞûìƒkü’€Ö}Ø_²ä{îsÎÿÿœsî¹Ï•HBÿ1›ÍvW²}.˜L&‡aÙ‘Hd®ëÓ£££–——wߌ¯”lðù|çm6ÛÏäÞ^”£G1y½0=±t)‘§ŸF_»65ˆ$¡ë:Á`³ÙŒªªÆäääïËÊÊvÎ'@N6躎©¥GU’ÏÇLc#ÑÍ›1¿ÿ>öM›;:B¤ü Ã@’$Âá0.—Kv:ÏuwwÚÙÙé¸%Ê¡C ªD7n$ZSÃÌîÝ·¢QLçϧdz Ë2š¦a·ÛÉÎÎÆn·W!ú.\¸ðý[ ¢6 ­[‡vx::&'cZ¾>./&ó¥DñN¾óã—.¡066Æž=¿¢ºúÏlÛ6 €¦-%?¿€S¾³g¡´§Ó‰Û½ !`Ë–o¿ýG4MCUÕéd¾”eY$×»½ýc>ø`/½ô/œÎëvIú'ÃÃß0=Æîv“»e Á`‰‰ËH\¼hbhh !²,§tqŠÃ0®7¡¼úêoq:OÐÔäO^ʳÏö±ÿ:òò6³fͼ^/^ïGôö§±±ƒÓ§áõ×u 'Æõ- 8p`7##'xíµpŠ#@VìÝÛËà`/]]‡ˆDdÖ® ñðÃðüó0: K–ÀؘœQÀœOA(4Jnn˜ÚZhmM«€‚¨®³iS“ êëc##+ËÄW_ý„={ŽÆû*¥é\Ã}3ŒÓ eeÐÜ píZf!lß%%08è"?ÿ)^~ùV«õ†ù2§]×ÿí^•žŸ2ápŒøÃaÙ2hoϧ¶ö0O<ј1vF±$ÄÔ–èðʆV¯þíí?¤´´œÂÂïqö,lÝ ~?\¹uu ËàrItv–²ÿ߸çž_¤{mÏÿÌN•vûí(mmÔlßNeå/Ù±ãId¹ŸÕ«AUcÄf3TTÀÐhôç>|‹Å’6Ýél)$IB”Ï?G]¹’èŠØßxƒSSÛñŸ…;¶ÂÂnòò"( tw/¦¼üqy䩌DñØó ˆOBÅë%X[‹p8˜jh]gÇCåä$Ëw6ñ§¿ÿ…Ë—=†Â®]‡Y±bUFâÙ±ç/A¤´[K ¡õëc7d™kuuÈdŸ9Ão4+ÕN‘e³±hÑ¢yÉ㱓‘Ò„†a!አ„$ájjBOÓÝn¦êë WVRÜÒÂÂ… ÓR3\ç/Ál„ª«1ãxï=ä@tHI ‘e˰|ý5r08ï®çÜG2-'‡ÀÖ­‰k¥¯¥§‡HQÁûîK{JÊ]×o.sÕS-.F-.Ž/¼iòL˜s|׸©9iáÿ ÉÌW¯^õ»\®6!DÊ7ÃI’D ðË©}—±ÿ¿ñn?Šêh”hIEND®B`‚PK’nYTR-MANerr.iconset/icon_256x256.pngUT T(bU(bux èèzeP›]æ›ànÁâÅK)îîÅi¡@¡¸»»{ÑàVÜ‹;”â-Rœ¢ÅÝa÷»3;³?vf3ɼ3™äê9œ{#T•e0PIPÀ“•TðòAF„= K?Á(ö²ï€<ìåŠÛ:5‡}Iì,¥ë¬a÷ÉÙÍÔÑpssc³²µvúhjoÎfçh‘y$HT€œ¤˜¦{Öa¶›·ÆÖõÈ;½(!½„ØR tŒd?¨ÃÑ¥BQy|œËtx1)&v2rCjºX¨¢y:Nä¤ÐtáHG—HÎÊEUñ»±/^«’¼ìrîi7³vwø&ø šš›!‰7¯]¢C˜¼e…Âúð‰§Úà˜·HªN¬ic9C&ZUÄôPJáòMù0‰0ÌC¤Éšû¼ Jô>S¢ëŒb©¢PTB.¥””½/«ÐÊÓÁÑñ,Käañš R‘QTúÜmNVe_ï÷^¬„Uº‡$Q¹öÆ ƒsm[vÉñZ>7/–ø0X_-+HhA¨P©(‚IKn:Ã*\“ù©¯êNÆN2W-ª'V®æ”°vø³1!RÅV¼ÙÊs.ÄÄ_e¤|}…+Ðc¯t\þ9ƒËq‘‘#“¸µnRtpjªCzÙ yÍUUUýÛÛçmxT!1Òp•Úh1ÒAò)4ªõŸ”$¥¤ÄJfLÓe0ûÖá0ÆFE¡™¶Aj°ôAj?ÓFô€8Á3d ûS=B£>ùQ)Ö +h,×gŒüÔ"ívÕ“ñ›zŸhõ\^ãgÁצDs÷\oÞ8\^ië…_o&©­¹¾VÍíʇb63ÓÑd!Ö É{bݧ=*:ܼkaqqëöIÌàeš.|Šj—¯. PZ=eÙD.èÎa{¾=öÍ® ôí[~:»ª’Ê,@:< !jú %¡L~îѬB/Ö{Ûmƒ©÷,6»”všä>ägoZèEÜú-d\«Ì»9Йuª¢ãã±s©PÏÎÏη•šH݈C=Gr ~¿[#ŒŒc´ NXGœÌÁ:<î’8¢Üt¸dæn¶ÝÞÒu ± +>ÞAIy‚ëÕ^ñê7‚—¿¿%âÒK± >÷.Û1 S5N÷kæê^ êÔš™™uÛðœ;U#Sáž—ÿ¨ß¾Å_XXøÍM2–„„uÕæsUñxw©'â+: ùz¸Û¯Fïv o¬àIýÒhô]\\èb+Þ8$ÑåÖWÇÎü¼úÍ¡,Öw𜗿Ÿ5ËÛãû ¼ö¿ÏjãêžW3æ-w’ñ;BÕÕ%bÖ*ïo3úŒÛŸùC×¥ï.Q‡Cøa}œß>Åv‰7"¶K; Š^1‰ŠœQP&« P ¹TU©TÚèÄÔìwý§ Öw§à?V.Q‘‹zn¦]ÕW¿G ¢ë6X·xV‡„üi´ŽRôsûG+QYYdª-ø“<a÷Ç˹ÃJ1-0…ª->’ñønµûäñj»|Öä+*rmsÜ$3‘#vö˜[JËÀ…=uL–Q“ê¹Dg¸Ëµ*#aû–°FX‚~à* ®®®âü˶¹k²H!MÁæZ~oŸ¹>¹Òtï›6‘ð3µRF÷Íé¡/0ùpËðS"¬w©š’ûùïàÈ]ÒÁé>1õA*`ÚÒ¿w[æ™Z@`±·Û9ÎÁxÿÒóW™b"ÕÈE3”””d ò›ˆ$ý‘ž¤£§)ü¢O$r‡¬ééYÓöJ<-Ya±iòË2ÉA$Ê^˜²»±ÂÀ „‚ˆ¡¢ ¿åG‹Æísñ°…­îÄd°ä4!TªY†KŠòÛ’{õ`µËïr{,S"9ð!ªÿÑ «w®^£V܃#lÁÎÑØ»9,”kÚÔiÔ}õÑšfPŽhën¤~ù`;8³?ñii;Ú“Qˆ€I­®j…6ëÕeØ#ØÄÄ(I#ðÖWÅâW###p ¶77ZÉú P:-qò銔ŰMÜi=°=›“(P[á)²}cyQ[ êŠk¶&/$óëÝ’ŽRõ"TÒª ¿ä”•sÀ.üªWÿ½Æ9h«C_É5ÁÅaT»R¦è\õ±’3ÿ¦ßñ{×).!<¸ã¹G"8¯‹îëEÎ7tÈ ÎÝÆðD³ËC>:\Ô@ ,¼ü‹­²¥ nmžŸ+:¯ôß0×Ð0j Š6;1\è7Ý\}wý²Én„¾{YwA÷\?±f³ žÚà²>>º-ü9G²±=y–}„ì¯0&„ã—h¶Œˆ·× ¾gþeÉ]j”}@ÿ‰hûv0†ô¸lØ7 ®ÈR†-ÿõía¬E.®úYHNþ\ÏÇPïCP$6³ÇûêMÃÌä5j~ªÓáæ­{Ú‡e4Ë éßåZysûb3Ιò)ÌM^×GÚYl:D?¢Á“‡ pc·çÂ]"Ø‹ÎääüÝ í­6‡{±d ••Ó⼉iÜ×i‰ÔÂØÆ!«IV 6¸©µþ¦éŒA=ñYYY‚%™øàFÿÄ àÁ}Îà»æ™”ðÚî¬RS·Åøðl*r¶×R×77òAÌî/÷Ya¡ùkμ;pV(€Y‡  ™rÉŒ¤Ú¯òÍÍM·5£w)°´ŠØ fc©¦w–‰ûñ‹Xxœ!7¹’•ù5š¦QŽÍámªÿ2“åуžû’&ûÝ$©E.;¦xŒt?PŸ˜”DØuöã5¿& ¥Jñ¿:x¯ÊÇçÛ(VT(êtš¯(Ä™ØÜóSÑcñäVМÜÊÞh*k£ŒÕޱÂvïaR“ûBêî.»“y(ë2—÷pL& ¬çßq—¹•þý¢b™û=´B+©ÈÎ`ó¨ ËV¤Åï}½q:¶¤%‚;ÿ]’ë-¨˜ÃªtfoÓPŸ$ÕfOrëGÊyèÔï •¥N/ÚE»gòQp¤ ®jeuÖ”B§ ð ½õhÈH]e¿ç’ÏA„ òÑy‹žõ\rÖ|I ¥[sæÇÁÁuaEæS4ê² 5Ù­®øŸSÿÀ7 ãSIÌ•kIÑ”¨›²p¬¯Ó™ÍOßa“±àr‹ñ}-†(ð Á:î«Ó5ð–¡ 6¡#f`¥™k=–T¯««A×WØ«V5Œx¨þ }?‹ßùénþÒæ/Méó¥}×þÌ¿ƒOe‹\,y˜¢¸ãr›qÍ;o½uá7tüðaÑ"¶‡+ØÔµvk°‚»ó{NÊ{çÝÀu´éÔdõJ_ß‘ŠloÙðÕe;oÿktÀíi"Ù^„¤A%‹‘§/™9œos³{—üŠJ„ ºÔžT¥ƒu‡u³Â+5BÑ8”¯ _É:„÷£,Öh©KÆA> ‚»eÿ0ëµ»0@sðíuQ ‰;ç,¢–Ÿ¢·ñ  jFñà»kÓ.ï¿6q›"ð||«}~ñRx)®`sû=c,¯÷Õ5–ÐÂ8Þß „Šû<êÍýmÁ—Ó©cv£¦—+{ <<PšAö]ÿünNSûÄøµûiɉÑýΪzUg²žáÛóµhÇ$ã R¼½öm`½ÖkŽ„:c]yá³ñôÛ%†kªYéuMÿøÉ’Vú`ô¾š™KÏ_CØúaCPü¾j‚Í¥A¢—÷Çj'?ßäVÿÕŽŠÁÍÇX~z¬;ZoŽ!†-g€èç BT×´9·àÈbÐ7s€ÃÄò{?ÐLYô¥f4˜[ɶ36ïu^‚mq98˜ê:Œ2þzÙ͞NJæÑ·AÈ‹ÆëÙWwÕ NÙáÐ úóp‘#ŽøÕâ®ÊÜ7¯j#1,€™‰1\ÿ!é>Ã++ÿæ>8. UôÌ(G²•¾êuOQ2qrbÏ^ð{Ïy”of  ¹ Iõ›pˆ¢Nû ÊþòJŒ¨ÎcöM¶ô,,öÍãһݓ­òKÒÅùÚº-¦xR¦°\ûB‹çºÀ úµµÎ®/ˆ0v;á¹.€¯n R?²V©Jðóe[‹ÞGC”¯_¿zv=÷Å’ xºîÏ~yw£*­“"„ÐPõÖ_‘«3+õ„ÒáÞL]ãžÍ/ÙÚí.{Ã.^™\™Ü –LáP7 ‚€8ÅÑAˆªÆKw*/äÃ*8¨'¼¾¾>üãL æ6Yœ=üj‘c•œŠBMgòg_/)ŠØþ§,üÈí<;2_Š8‚&Gâ²a«×­…®~ÒmÁlÈ?.ÌVd!&KÃe·ÕÊÅÞv4Ï€¯êÃBBzöœõ~~:ßd”˜ 0t«µp¦ä⯔A‹éœöObÚÌyH'-qØ›¨^CÐ×@÷!dÇ)ë·Î>t¨Q±À µú¹`³Òôe±é9YÊì¿áÀozwó1ÌüJb¶˜<[ ß©øÛDT&@`u'cU¼„ÚËÀ2߉<`!qg%öÉ`ÓùÊãŒâÈ –C€štÃù¿ß l·¦ò -PK€¼’Ô.TŒc,“Á«ÉhG‹ú½tm¬›zïñ8ˆ✺áô ¿Ÿ%ˆRƒ†OÚÅnµ¯£yàHJm,??–€Ÿé!þ‡$'ùb³%P©—°=€ˆÂý'‰ç¬mòá¾úàË  ƒ0EC` ¯¼¸|úÂŽAŽ8Ú$ÙÍ— f! x2c áçTKÕ[¹ÎÎÎ` ©m3s ÑÚW8 3쵕IȾJžÔ 3ZqCÝKÄ] O¢ ÏÝKÏtEz¢hét¥OéŠÒécŸ€“r䈓·^Ñ!¬ö`סXòU©)pØãL š–Oh|ÑñO•“W¯Qü(ãíÙ-:îÒ”1osš'FK3`P`•gU9e ýýÙ¤~ÁþñÎfJç\yQQ ~O¢‰ñ5¡á—¢7µ±Ä“ÎEõ QýBtü¤jph0 ú§(Ó¼¼*µ•™ß «sbtDt8˜—¡cbÚ3€KG<¯\^3™¯¥Ö~)ó3·Ö`‘…·KEÉí–.Avn-âœB2}X/ˆíãÎáKOøóçÉÏä“{ÎRɈzÙ˜ 3ï-¿a×Ï"l‘<2EnT÷àEl¿IE|²4³°xõú $\\“ì!+‹ÜÛ׋CA:9©ÊÓbIç¿ -ýŠ(4`fïáÓÎxvÉw×COTTÍÄYŽæä¤êí½ëAª‰! .ûA¡îäst×ùkwü±‚Šì…a ²lÔ›äÆ¨œEÉV–ùo *{%dʻͳs‰½ùæ—@~ø~ O„Nƒ¸&»hñlL¤é™™øœL˜×ˆG i…$'s™p~U}CŒúûµN•Í›ùAFEFiüDQ¯3Zq#O9×uöÝ?ø¹~˜0Ýö~ñ~);IÕ½òW9hl‚`X2w¾rüË2oêsOËö³þâù{û”ÏëNL¯ýŸ Éòvîe«&ÄÎ+ÉJ’¤==¹ÞÔ› Ôv¨í6ãŽ,FXzÊû´¹µõ¶Ê°íŠ À›¯†GUGª=u Ø\Ÿ¢¿íµd_¯Æ=”i˜/ê4ñ¤NâÚ3Ü,í·T‡Ì DæÃÂçV;Ø B‹ôI¾¨ñ7ÑóÉ„w€î3à5o޶ëÖ€WLPñÿ´¸ÉO¨ffX3 ˜­Ìàèä”›‹U?‚Þa݇ý¯>s{{û711ÑÕå`ÞáÍ=¾HÚû˜Éâ«C¸áÍ|'óT(W#rϲ&Åâõ>€ô׫·jíãwháÃ#ŽùGrëŸTÔ Y$1–;c|iBT„®aÔµÌçª)Jûê¾É~Éøs©Ü˜{b>W§x8t ܈ÈNÂle$Ø»d¦•—Íj*ö¾j0ðÚë®æ½™A‘Ó@Uvô‡Òb¶¶G¤nGË0+:³ÖÊ$1  ˆ<¬=f2¢6­÷%ˆ¸0ïörÍàã—m ˜¶^B:7ï{J¬¾[þ2#²D›€ñOŒ6G´, ¥õ—w×®¿ý/BfpÕu—åÓ¡ïúÎH)/ ›Q!® X>úÜóyïÞé”ÌìuØcÌ8´tª¦øþÛÇ]y­®cדo­iܸxÿ4a¨Vÿ@ì½ô&(ÃéâeÈ«Á¨ÔF‹,C«2M§1W£]DW¡nÏ(CrïeS‡5åð^Ç:Úegóý¡ƒ9f’¡Ã®ü¥ Bò?}sŠÏ/Í’Ö¤¨„&Piï|îÛ¿¯,@AŽ<_˜ <ŸÔ à¡3ÆD’ý©ÖÄ5§—´ôþûH7¯„_ß@¸±ºñõ®xÈcJlf¸—èñ‘‰„¡¼mU8Œ€«'Xu’Ýž?Ûž—lé7h xíµ4¨&Y›*~6J}IQÙQ»2ð s¹¥¡ìÀ¡:T€Ò²dèDÔ| ÈmMè¨o¤ºCæÀ]›¼óà ^ã—]4æPs¿ž§ÐÞ¦~ì= ¢#fx­ ÛÈÀieåØ/S¿ßHØèÜiì^Þ•.gf¼e ª˜ëã‹ sK[b¢6L5CÀi$¨y~ªkxÓ¢Û>ˆÌiû#š­ïe}P°5 ½ïä®1é"Q\c·ý£Ò4ÿ¦l2æ{E4‡:iÙˆŒ†&¡­­í§¯  Ñô°^c¾15­‰¡ _[I$^QÉ™$ȸï5—¸âõêØÔ1µ÷†ƒ¸æ¾ƒ:>=¸.Jˆ …‚Úf':³MïG<”Ø^£ŠÒäÂIªÕ†1¾pFkk+…_W‘¬ƒŒÅf¡ïUTü$Š––#„ÚØ¶K-0D\;îzLy­cÿwÃìÓ'!!rbbâáááµGXÀ^0­+êîÎ[®]YZÊøpì÷,‘Íï¢Úlkø«BëO/‹h<¾;®aÚp½²¸½–0Íš‚PäO¸š×¯Ñ"""n¶ÒŒãÓÓÀM)ì0j>Û”Ëô˜vaáæ†Tê7K·¹N¶:Yp[Mª¶ê(´ÞÑû#t%Ïš¤ËÔ‘ÃEDrðI#šYÜŒ‘¢œ£80ƒmî?=‚,inÖ]ãá4B®Á ÎßýÖáèp±«Ößßor¾=VåbM§VÿIÉùðþòw‰û«C˜‘²~Îï Ù‰z’Üyž@xåÙ°ñÈä‰åF±ñ=P  ޱµBÎí߯ˆ1oMQNT*&¦ÿl¥>²­|Md Ìb¥²FÎýâ/5$µœZŽ…¡¾>Pi ¨£9TŸJÐÀ‹êUÁnB"Ø  Ó Õ Mú‰Ÿlå²M>…yw¦ëîú8N†ï}Êòp‹Ÿïmx aOLöBPݤdüálÎaPÎÖÔAÊœnhDøŽ¨P0--íZ’ŠpÏ@aTǸ%|Ž;ØrÓr‘Àý€“æÀÑ´ä÷Ê◢Š#¬†LOOcãᥧ-yw {óæø=y£5ƦŸ%âÆ:™'%ÞIä8àˆ#P•»Bœ×‘ – Fj&Kí_eé\樱øk…êtP,¨›ÝÚ^I ­—DûŽðæRÇdUØd‘gízU!¶‹+s &#-|n›ylÿóö]Ëm&¦hݹA Ê÷ÇV…lÝ­¸üëÿåi!¨Š122v·{œsø=yó.¡W³êA"Xº,EK=Z<ðde;D×#_LÁT&Ž"Û —ä-º›ƒ»2æÉŠqÝI=¤ž1ò Õ¬¨éwû*°jðAJ×7|fš§›¿X’22–Z{WËðjüDˆ­dâ´SOàD+õºGÙáNO%‰½/ñ¿FÊŠÍp7Ù.GŽg |¼9YoqÞSWs¦aPOø6ƒ†–ÁgI>Z»FˆkzýNV ‚ʹ'ÇÁ0‹P~‡C‚v8"d J©ñz^0ÐC±‘ñBRÎ`FCèí¥î§‰PÓ}m\­˜ØbSrvd C²®XÎÖ–mÅsŸõ›q—‘3-|ºPfú½#ºô\hgôü„¶ÔZêTÊòZÂŒÇî6£y¨¦¶yºd†ß³*lö <š 2öcgêííåøò‡;šŒ¯Žž›õуõ!ÄþÝs ß'&î M„µP!¯«ä\P)št‹1ðÖˆÞ;©ž»AÒa¯c!Ú¢dØBâJÇ’E8íŒGŒ ]Õ|@PÝe8'©ÀçuFž¯S$UÎ¥õêÄ¥Àäþ"¯MÂï¦ðËbD3®Y h´ˆ/^~þ]Ž¿=–†DËãvÛ ×höÚ?,踉 lÝ)(â?19gæ°Ì_½úÙçþ˦ÒW;?pÿw—ý“«E»W*ñ[ºtÛO÷Ç^¹ÕÜìq¼ëÃÆ Á6D1f[¦“TPöî´/D®§xÞg(TøVDÿMR$§ko(®rEýÜ3lB$­!7€‘=Ž…Ò;g›ßi@¸Üÿ®‡™&emîì|ü÷«L·Ã³q× †¤;ã­Yðeh×3b*Bç3ʼn)šÿjpH"¨î~À_IL•þ0Uô•ßí(–à/²ºÍÜøŸª7̸ÊP¡¼à2=óÝ+›_Œ]jÜöCmŒ‘SÁiìÆƒÃ ¯N‡(ýÂÇí°n^©Öï>^ž¬‡múdõ7ÙFDGKÎ+©uùúü*×Bküü[¼H>:³‡M@š•EsuT0Ð~~ºg·]þòBZ?¿¾iÙ³È÷zŒàx÷yóvÇ„Ï!ð›íÃSÛ lJok>  6Ø.ÿa £R´ÿA÷ë+t=^‘Z pätpÍ¢Z™¡€eµÑeñ ‰è]‘‚‰w61\)“ÇtºPn§¥‡ 5'9F{{ \W?Y߯Ž2¶öÛÍ Ã&'QÎæ_¯¢øë1×A÷ö-~&¹¸º:®ëñÊadJšx‚t øÓØ™0ÉÔ:°=öj†*ï~È’ûÃéÆÀ®¾îp­Ô1sæOIf¡ŒÏ d Ø4Bà¨Ò«AÁ“ãúûWm²8†åËmÔ²íÐÅÞ Þ+~J’Gº—JPs³Ç'ôˆ™´@ŒVr^{*’[.t¯ac¿Ç–ÞþÁÁï±Ñ´Ÿ|º|WšŸï»×zükÐ¥ÔÜŸ¯96$WN7Î(뎓ê€ÿüyòÀ–0ö0%»¾~= ÷\•¡ÄõÑ2]H—¡ÀÙ«kÍ›låLÎÇl¬‡‹ÍC©¬úö{ÓtÞ'=H |_ÉtÞŸµo<ÜžÏwúÀ¬ówzºE#¿lÞ‡öáV}ƒDé{“7&ïú¯jµ3  çYŠæ[> RòoÔ¹RŸAΕzu[¬éÂ>ü¡¤¡è=åÄó (7g „…%p†mà6·ó8˜¡û™ñM&–,Ì'H Fá§ûÕ]4<<ZåšëÙîØîgr× Ñ#(£ÉOê/š­:ûõü ôùÿ}@œÅð{²S¥{ÿNóÖ“ ›”Ú_Uêc æ{ý$^V/wûç<0ó]¾J®ðÍv¦¤HN*k@ÌȸÊÈB~ÁȬ>,bF’8Í@tb;¡'"þ&|IùŒè¤<è]ÏOm£*ýg;¹’_oó÷½à±PRºatF.àÚrtxT=I¯Î)”Á"ØÒM¦¼†ã÷P§€>ñ¦‡#¿ÿsÚß/é|0?µ%¸Áe ^àÙ1räÀ;¸qx:Á!®¬÷UU6ˆ½âIu®‘Á™qÙŸxz¼ç´™çX9y¢òÙù€ú*ÃÑç2Þlåhâ7ˆ0PHýù™%¥Dµå‰]RB«60i¹?b•"â^Ãrè9³×ŸÅçÄἫZˆBßz@æ:EƒË·ƒQo‘dèbÓƒ!0Oõ}ãwPïr›ÙèêϯÝÍ«mãÜ$µ°¼oºÛoÿëu¼ùtãzïû8|ÆöíK4é»XsÑÏø¢–Ûmõ¨É²·ÚpÀõó#¹Rf¯v‹´Iaa!Ô¸Ë7]À­ºŸà¶S–¶3¾˜*Óìl¹8^¥THcèéòú:ü|ç`æŽ}%£!`Ñ¥ªƒß§ó ‘‰äøìNÜü«¨Žt;Žf¶f²1¦8Vg21à¿CÃécÃïkºïOÊ…f;J~—Á°¼Õr¶½°¬ÃÙyº÷±Öo±™Í—Bû¦×XþKèmzz8Ìs¡Žãù¨Mt"‡¢+;ŸÑûzÙÍr®*{?}F®X:G’CžÓOø´Âþë[kuuõH ÀqgM#cF%|â?©ÿï¸ï}%‰ãªßjó¸eãðÓ™„û ³WW0VFq­ýº8: 7²ÛÑÒºKŸ bç}¬ ê»±¦/´QS–’66߬ÓôÊê­ð"4Œš¢-‹ÒŒW|÷?¡#ÂiWÅp(¯Ô%1Dp®£y ŠH©Ä¬`dŠ@uø{òa‚s[OÜ€ˆRÕÄR`ì§su„¡`Élÿû]s¹‡5¹9NÆ‹Mé÷À™¥Ìp¼$ŠM˜¦~Îzö„!²åŸ†2¿˜;q[¶“Y}³_"^©dûó éOÂê0Þh¿^ñjÿè´}³2 ãÿnu“R¿Ãóm•A+Øßî a)ID—G„€m©Á´ó7.AÈOز‡¿9ñ‘ê˱Ѽ€¦®Ÿ.&¥p4 ×Ms%[Ï€X2jùnʧ[¤ù¶æ]IIøòg’Ël‘ÁgöN*¯hתqãã?hxôŠ¢0Ú1¨Ž£d ê<»Zý].U†ŠzÒ‡%ßÉ›ëÿëø½•ÆË™Ù4•,°ÉBZLg1ÆC1ÄtÊÀ;pXÝ+µ¯-~ŠþYï6ªƒ‡9Ð!Z‡n‹=õÝå~Xr2d…ovÖåõ&‘ÍÚDD®×Ÿfê›f79ÝÊîÍ‘þßãeOAoGR¨õdeÇ©‰w¼¼ppú-zÍï.ÛéÄ®ª“Ø/Uið«Ø<’ȇ—Z„·ûä]|NN, ½ ùó®WU²6Æ2GÝDòDì­Ø¬Ž$Ä‚­†•èk%húçtBщ72*à6&YûB¾L};0êò%Š%wB AI–)IÊŠ¿ä×nNÿî.µÖž`‘HnJ*¯# sJUÏ(YX²0Ry%Ü_⡉H’èA¯d~xŽÂdÔydl¿²‡T‡§™>!OI®½¡°›[Ì´*¾(Sã–üÅÑ2é;Û¥5ò¹ý‘Ád—ýþ¢Æ‡Ó‡³ëU?¿n8ß§6RÒÅ&:5¾¯_7Ð1៎ŸÍºª¥ Äð”ÑÅ>Ñ‹p–±ÃPîù²L£ä¥–óýÈ?Wõƒ¢hH&>èçOÅöÓAÒ—(¹óoŽÁIK9BàýÈ †ë0†$#"Ï«Ũ=YõS‹Êô¸­’­P$`ƽzfú¡Â†6…×ï©]f»£d(0æ3>ýÅ8?¿žú×í¬4˜’*€ÓL~z=HjG%,LcŸyûSšT¬¡¹Ëý¤¤Ë}¼cÀ:f¡Í3rÔfEÜçëׯ(%3(ņXÔGÅ€¼$'òžæìûÚÅ*¹˜m&a‘FXÞWÄÑH˜¿iFÀsÖuÍ8—q·rÕZNѬðè-ÞûF3Ÿæk¨g}žøœC¶¾ƒ¥Ê©¼Êº©NHL³~]îÏ™6êyÌ0ªøVÈ?¾–%38::žÀXhc'× »B#ì@? "-1[¿°ÖÛõt‡¦\¢áª` t>'zTÚÐ%JHõD†áýUÝŠª- gP_®ÎטÊÊË÷Ψˆ^ µïEqÈ}®6zjüšÆ0ž­ú2À\ƒïÎ(*"ܳrÉdû¿" EŒûͺÁ]O?R^ëÖ~Y=ô…é©ö‚±Œ·}0S€MJ:º˜­Còp1£Â;jËŽ`;šìéâñ{˜òù½~X<˜ô…bìÎV’ŽçŠLTMŃ!=\·ED©ÏžƒÑÄùŠ+5¶Ëü?3ßa¡÷uÃh8Î<Œt<=ksÙ`úâVjQðÙÃiB~Ë÷ú ”ƒO@™c¡Í«¾¤c$ª í7B×ñ4¤o,î®á’3§ F¸GÇ2ßq¥? JÄRŠÄ¾¸G÷iLJsô’ðÔ4@ûívfËO&$ƒÄ2†],{«ïl‘0EHŠ5K-p^׃°¹Kíäx'¦?LM‰íꢡoÊŒ™þil{“cõ%šBˆ¤ÙnUºÚ¨#>99x'X‹G>Á®óVâu2Âðt˜¯(Oó\ô8Ž_üŸžžîÎ×¾RÎâíPVë8ޱã:°Á ‚CŠtBÁ»–úW¹u{^ŽýÈ›››& uæóíoÊuª)üs<aªï$äôx%ûÖEŠõܰ[ Tӹˆ‘ [6G3 ®þÓXïÆ@”Ôcd8ÕûÊ»k,õv³Ó¸¾sÆ›o•fˆ8?À×ÕÕqä“DÈÄI[Z2ÂmXÆJ2)&0šÆ>4ÊÞõsªY‚yÛ|¢eRmø*vñùé/%ʺœñ@Ê…×v¾@÷R”»8X˜I!NUÈ䡱}ã ”ª#Ì×­a.q+ýmœ3ê«1í3iÔ£[½þ'’¯U¡…V~"@†©˜Í_ ³â§KTãòš‰ìZHEááñÝóMÖù9\ê;MUt·#É46CZ¥§w+Tr<û³ê;k+^#wMʵ*&« `®4ÿ˜«ß¢$Ï KÈ‹@Eø–öÓDΘÆàúúæùM†Œé¡^µ‚.Y£­aó¥ÜŒrp|÷ºýZAœp/L&J¹ÜÐÐÈ.  =($ÔÔk'&ÉAqÓ’Tòa6]Ð£Ž±á®™™™ÉŸ+Ë…::L4ñór­WÚ*B[>mf.fÃØu_2:<»'ó6M·0´@È-.û/%+:…ÔpEߦ†v—½Ù$úi/<2L¤í‰Ü8D ’ÿ±Üæ4Ýuqáü¢Ü1H¸»a˜!I£×DûÞÏ{AÙg]-p45bâw5–à³÷‚öIN>4x+! +_¿Ùöæ°yUrÇÈg¾kµßÛ< ”1‘öå€ ‘Ó9?"ÂLuZôzw\âýêV°)¿3òÇÁh1Xó^ïxlæý­çªZ;šÔ^™ì©'.é×Õùs~Î2_ìÁÁ—ó”'çDÁô™URFFäéß¡ìï|©±„e¹.<‹r ^‰JîàÞLÉ)LxÁŠ` InÜ{Ž4×Y¢Ã±È‚ƒ‹úÞ’lzÿ+[;ü…Ωp% í)‡¸8‘'ÝM]®¯²)å:F(ó‡£ðˆp¥¤oQyíýuHyâ™WŠÍ¡vÆ!ÇóS×Ý9ná\‹MJÞl‚Yýv7uÑ í"ŒÚ øÈ†nÅtœœ\¾þØæu2CU\u'BX›[’ûíÇ!€xU´A¯ªw¥õÍí~5g‚®C`¾àDx^ÓŸ?E*‡¨2q°ø²ßŸejÝÉyµP.!4Y˨,ŸÌúÕ²Wå®L£»Õ©»ë9‘Ü™‰iÓÀ–MNº| ÛôMæˆrG)ã™å¯pøcn+š\~2³×W ¸ëüä“Eh§i;7¾vªY`äB«K˜ ÿwR›Å/åz&tkÖmk|Ä‘)W— C⪂È"Ÿ® žGÛ1ÍÃ\Î=yðsè—Ŧµ†«ƒÉÀá þ¸oͲùû¿L‡H&88ð†_·¾3kÕíIYŠŽg_–™…ÝŽ;º+ªå«7’ƒ—•Å;‹¶ïÙÛOÀ³•ú„56Cò÷Ù0±Éˆ_™ªˆ4›¢,ì°…:ÙøzA²°Ÿo 3ƒžÞϹaž{Î2\âj€PŽFÕNN‰ŽzµÚY¦ÚEf®‡4ôÏãÙN1$8I]ÊäÇ‹æDuE·C”r›Ti/úŦ/–´—Xz ˜øÃ IX’•µH“¥Š`)t-, wà>û7£Õ|üÏyóÆiâ6»ÿÜlå«Å V »È|ß÷þÁAÄÊâ<\Õ%Ûîº~8¬ø`Ü6Wœ8®´%“š¸gËn’ԥ᭞)ŒêbMvíÖuw@§Žn§O&rW ²£®.‹®¿EŽÇ`sè(N9Â=Þ)Z4‘ؼ¸ïcJz£FIdZ-3? ÙȽÕ{WÛùzv*Nr…Ä=CzýV}®©……ðŸÄ!˜Ð$Q`wÙOäû†¹ñv/ÌEî~¡¶Gé%Õ÷™õOCi¸ ¡ð߿Źæo¢ÜJ?s}qel\aЦÊ^j„ò[×Úà@Xc?à<…Ôö.ô_åtÂ~W,(T$oBût$Ÿ’$X …u*nm3x.aÒ]—Þ{ xnÑ®h;îŒ2M¥þ™ÖØç¨8 m&DEÓÒ•äøêñïtOÑ>¯+M“Ô8Ò¡;I{W)‘&úkêVOj<=¦m:b\Ókdö}8•‰¦¡HÎ@R”„a,IO×ýšs ´ÄU~¹BþlðR»®: ­Q›™9ŽÌêɺYòö‡Úxn£ÎÐsp?¨Í»µ¥Óø|{¬öË"àÓÍßη RUT\÷õ&; OÓ†¯YšUŠù³wW)ã|5¾Bµˆ©l) ×YÓ¼žÉ¼w…å§¿*d …Õ¿ÝÉ0qÇÛ\*xN×z‚j­fè%¥¤ngÝòÄ™ü•qÑFšm&'}q"†¤¼Šs÷öÌŽk .l›ëÛ‚Ž#ú?ñ‘Ž Ø¤Û­·‹N­ŸUUÁDÎÉ¡q÷îŠTYØDûl,äØ7èe\÷¿uhj–^Šed ¿3¾ÝN3W­ßuæoø²Hàsw!EÀºô)]È#‘§Dcé—¤ò¼ýÊ®%WåFoè9&Å; îæÖâZß}®Ú˜²†µÝ1¿×+SuÒêçMZ+` üæÆ½ýùé¾etabß9ñrSäþ»Ûõ—Õ[¿çÓsäÙ2 ¤\ï3”Ž¡Ýõî.öd ·o§&r”õ:›Jiâ¦[|³Ýϰ( ¹ç%TH z$({øÊyÑÒ¯„/4¯—œ€d}o8UÛUÈGP2b•$%=ÇçêýÁb3Ö+™XH̰•m‹ÙÉ)—†œ½ÓÏ÷,?¿¾ cx& åð^ÄáÀvF—÷×èo}¡úAc"xì]É'ï씳2ŸŸ‹¦Ÿ’JKa6B÷ÀÜ©–ñ׿¨-ÉR&Š%‡‚ÃÂþÂd±¸··`Æ[kzÏã¨îDº•LƒVõ ïI¨Xéž4.ÉÛÏÁU†mßæJ©Çùº9h}´þöÓ ó؈Åvú ÈG°¯[ó²«6„¸‘3¹Èrì^-tju\*ZÚà$¡çÒ$tIõ ý¯_Í*;|î» YGÆéQ­nìó¡-銒j·êñA£!h’7! 5×+^ìM6 GËm÷+-‘´‘j@‘)Í^Ñ?YG«À2555_oE¯’Ã"Oô5Û"Э„ú#û~n®F¯Ê'Á7‡ÔMÀ걎°—O‡„‰-cL%QŽÌ8 º!Ó/pø¸ºhÑ|"_t+-.&¹#aÿƑ̃¯ FæNþÚÑ€‹ †h|žLN33Zzzy[¶VÇ–ß‡Ë ©Ç-A¾ÚÚêÁ­UðíîS—KVˆœV}Ž¢R7wñYù çõ=Л©Â~é쨈a¦¶ æë6(ç¾_î%5aŽOæòiØhÆY aÆý±š„‚f« £Ð åTªb 5ÀØO‰ÌùzIÃÙöúhy )3=}ד-EÁ?„UïìltzÔºD%)²õãàNÃæ‘!T‡}ÏÞÈͱfé»YyûyœN•ñkªþÍ‘¤Q-&[:uÓNà “|#*¦1Šf)5"LŸmnšÌüÒ¬3ŠÑÕoseeŸ ÝM«yƒ‘P.BUøI)ÑI´ÜE)I÷öÓXᛃTxýøWÂFÞG+^ËÕªî}{3¢Šè ÈEeeeEï¯Û"e^"”!ÉHõ–Ó«ž#Ë\¸o$iòé±Yç‹´¤¤Éöϯº]¾›d)mÂ9ÙÙ1LÅáÅÿþ*ÓXglPnÐÛPº†o²iq€­«óþ¶ÇnIÒ ¿['U˜‰Ë¯×ó·Oƒ18>÷W0+¦Z¢œ -9`>.ëÖ…¢’1FƒL¼8us=S/÷ ‡X2y¨­Ï̪m—¿¿}·óóº?³[ÅßyP¿ô¬ÀÞÌã†Éæþß:»“Ôi'pý_w*ýµÊÄóáUréP{»¿^î” »±µ*G’¾“5ßô¹ïßaÖ¢ñ¸ó™ Èüvü|ŽõÜ¢\ÒËŸزܺÁáW«e!`#7]xnºìÓwˆþk÷Èß} A+åqf,¿Þ~wNO›íëgò|©ù8„©˜É£”Üùç3ÝþíhZšò¶ŸÛ\qq¢xV áod”žD:…“õ0JñŠßˆBÈ2(XEy¼T ¦œœíëŒ"ü$ ¤v¤†ÌOúmM2”øÙo²„c˜í:BJSYÕ|&©‚Y õ6¶©U&a4(àÊ‚‹‡7•'4u»?7‚Xðeqsy‹áüNƒs¿w‚]SórnhBä9š— -Ò‘±U4)![9™0‹£0<ðÚýüûÄØ€ŒkÕ-ZóN¯o°/Lm/IEµ^I²Ñ2À+K¦¿Ýƒãéî5£Š“Z©~3›v•ADz:Ñ/\ÅÉl嵿ÕáQÞÞ»Hû…‰´Gžo¿C½S‚•—³¶ýÙÊvZæ’œ¨¢¶xLfËüªY>7Wa”©dËR»ÎÞ.KòÊÒãá8ШˆÑ߅ŽÉÉÁ'hª>'&¿>ÿFM¾CÖSÓíN¡ÁìuÎ+éðº3óŽ?o­ ÓŽÛ{ŒÑº?Ó黩»Æ prr"§EŠ««-iÂ2È_ªŠ}¸ÎãͱËÕ(»×¥¯E ‰l.Þ»82±?Y|5Ò2ALÔ´ÊI©¡5Ç]2f÷WÈúK%ù`SSÓ—#Ž¿§Äi"w6¤>`,ï{]Rù±ø'Cêú~ba“DÂ&,5`4 åî±`J{Vÿn=gÂë5{™Y“œp M/w°Â.÷J|>G¡`H­õ´´Ù? ¹ º}ü/`†L†AÒBÎÿva¡”û#"M®Á`ŒÏw;˜zñ °ÌUHÎJ Â×?FéÔ,Ʊ-ríÑì ¤cj`¶ÄèƒFJX«&jì»ÞÑäzˆ*ZúfÐ,°Q°p,'F_NîæúàýÒû6‚÷Iôy¢:+žÏU4)9-z¥3+=è”åKàñãÝ%^vÌZnÂr±nq`½¡Ûv}¹F¬=¤Ùíxe¾Á*©t%@~jÀ ˜:bí×O n ;ë-6JlÊÉ.4¢¹u=SÄþi¼%äDç±5 ÃVA;jÝ¡`Ñ­¬çª¤‚1$wT²Á¬4™¶‚µ\µ€£“œ#žé¶lå0«™bÓ©|©š½cºÝdÑ­­ž“!ʪ¹—nèþ=#€aÈ.Ô#½·kI×4Uü8óÒ{)`Û¬v’'Ñ+Š©:ô}¦Ë´ÕþÆØZSVBÐ=–i–AÍR¢Z$󅨇b/àJ1˜?8Ö ‹‰³öW©¬bûÎE»b¤1Ãé‚ÄÍ®‡Z4ìþÖz4ÜnGîË=&ÝýxµÖsl/%Øü«jÃW!JQQä'ý`^ß,EöàטJ™bˆãƒ”@Í;« ·ÌεR}B·Tö¡ìãÎ ‰t¥ Sì:‡WŸ]ÿO¦¼öqÜ™«ÐÁz!CBHR7Á˜rÎ8é§xd=@†i2JÓǰMêSyÜÔÊÖ׀é‚ZñÉêš»ÇÈ¿Æõ0R?"b8‹WMuø§dÊÞ ÎB} £ù×’‹Ý)899¹ÄZ8˜¯ì0"Xÿ Yê­"BG|)™ŸïL„˜•å2ÿ(\b:Lz?§ýˆÓúÁAÇÅ Ô[™-`š‚|ûöáéóÅqóL±XRºËýúúúÍIV- ޹ÓTÝ ÙÁQ„x2J úÀQÓÉì·÷xD\fásêjÂ[Ê f@¾¥Sãð«"L ¶¶¥Þæ«{£1Î÷OŸ….“-±‚J¸­¦áIßÙöG¿‘Ü>p­Knv.ã}ÔùDzvm°šü"š( … 4òãþ4AËþ³ãÇÃiØÖ‰Ï¶8ä?Yq½QóØV”¼:ˆ˜|k Å¡Ÿ~ ‚…XÂ+&&9.W*ºÂ=\ ¼ñë\¿'˜–^îÕgrCõ ”P'ŽB Ö(¦2ÂÜTH&y“%›0õ¿û‰R5dÃfÌŒ_šq‹Õjˆ/G/PH K:p e!@ë¼û÷ÚûjÁ‚n›K“éžQGÜ;ä¼ è›¶j/í-jT î¡ùÆ›|‰d âOA|œ8Z+Húâ—yæk¦+½/&˜NçuÈgt•íð¼¬aÁËaQÉD¾ú#l”m2|d(¸Ì)íFö¯™PÞ³w¡ò9”àÃ!©šÿáþõy‘ EøòG¿YÞfÑŒëåêÛ‹p…2]µió‰ðÍZГ7z W舿Á~¸?-Ûø1?-<ñqW©LÍe{üóüGÛ™K˜pÀy:l.ý'œäùîåª-loÓßÙåTÔ0µ…¸-Ô™ÿ#XQµr|7Ò` û$[‹ 0žp¶† bH ]j&V ŒÃC’§”’RG–klV1gžmñR>uÜ1O¯z }ì’ñôäßÏŽ‚­DA}õV¸¦`¨R€oz»J®ðÿ¼‚¯D/Õ L¶“ÿ65~In´~Tñ%4ã^X€µ[ƒÿÚýž\÷¹ÀÆQo´¯7pR eCµ¬úâ/…‰Çô÷°Ù£×VÐ’²=vÞl-†‰&1ÞÐ’ïÿ¬ýÍ¿~2Ú‚“ŽºN…R#YþD-co"FÔHWH”’MPtÛþdýZ^rT`“<¾Î<ŠqZÍï–‹æþ"`o2êR±ˆE  U¾Òd\ëÜžHhfˆ¬–0 Ðm„GŠÿP¡®ör[qPúD_GVÆ JÁejFõçüjï5€Êk=»Iws¦ðË}!ÏcðCOö@T‚°9êHö}e9®*΋ý™•ÐBNŠV.Ú›3ÆY¨ Tìz¤ß D”¢¶>Ð]zßžN¨§ø¾²Tø3$Z&¾Ö‰Ù yíÅB0HiÌ=ÕÆ…—Ç2K9Í™'2è¬1ºM¯¾i©7C1FÙÜʻۚ4nÁîÏ)û滛õwvBä•N _h1ÎÓØ»ðƒå¶%äð·ü$n„ìÛø¢¿ÍÌóîØÅôI\5@"5Âos®õqBcªËú ÉÛGŒñ¼OÕFÈúß!Ñ}8 jOŽףì åJýÒ«?Ö&¨¨+]‘0 Õè½NL–¢ãÂ*ß¿YqøñI"EEDªr¥ÃTЃK¶#)néh9᪩ýcñª¯Ä,Ôã4“eC4@Õþ¸Cv¡D\Ý(Mnyóë×Á*åµb:ð8%ö/OÐ ƒ2ö OÂc¨·ë‘à®B'h†@¶uüä\ô*Òòd¨ÁR¬–$Ô((ážÛÄš~[øºW§˜:ñr™ÂäWƒ1†Õe`ͧƒzª+Y)9M]„îÖ ¸ïšídƒQL‚ï·¬HR ÛT}~1þòxp€ýð Qùkþœ$ w{%‚~þ×¶¹ŽXåÉ" pÖT‘Þ¬ý–ÞÖv1´Ýv™oËÚnUºº¨”Ïžê_Ãç/#/ c?Œó•ŽÉâBø¼¹œÖ³èYß}’gPœ±½4Ô2Þ¨ŽÝöç­­x®¾[í¶?"cf5@­2L,èà"§>=EŽˆs#/x­ú˜fâw"6W5•¨Õ¡ýFÎß]çӶ߸>M·‰X+ÂüCT À'}ÛëëÕPUÜï%oNÂíѳöxª°¤Ïù„J ë{,§+LÔ`‡L–âÄôÌ–ãïªW•t8!¥Vê{ YŠ ˜¦DF”‘=8ÄÑ(xñœ¾‚Ñ]ÏʸN+‡§ÿ€-gq¿Sš Bv³Q(˜ë»Ú-¨¾„|;\ì{Z ʙ۹…EÀÍÙVøÍ¿×–Ž|…¤zôä/qµ’chqîÁRbÀ}3A”þ831qÀx }g¢¶è;ãb~‡*mèäÏ÷”u÷WRÊ]¾¸„óGƤæ3Þ†ë6)rݱ—Ø/Ýn ½?*Ú ¶ù]üw(¸»Ü/A^Ð`(í%¥{a£Tffýñ9d}C*MœÃ è»=Ÿ43Ç_L=ºsÑ|:SÐ4jÁ¾­Ô£.q³Ût9d–¿R£A‡›‰ÀC¾½µ¶]F©)· æòÚ¨úŽ^ª^˜rfšZ¯ñˆY±-ÇJg ͬ÷q Ðw܆›šð;¿’ñÇõMÞÿƒïA.5ò­É…íèŸÅfSAÔA<“§Ãw»O·C_žQI¸EÿyË¥Òk”µ0ö¢ƒ~ÌBº)KÛÓ±(C=V…ƒ–ö¦pi>rœ\±[ÖÕEVõôàà‡üäü/äÎa/¿—¯ ’•³.®ÕŸ+Ã;ãwÿw±ÇAÉë_CjºÐŠ—VF³¦Ôeò—v4Xõaa> ƒü}v…€Ÿ‚]hj2sD~×0ŽIª«%À=Ui¡ý÷oæÿã°¡ª•u3¢0¢êå3’R„ÉwmÚ¬ÿ×OþWÏÿç# 5Õ˜T/¯+õff|"-Pi©¦ ä ‚‰ZyYa¾:…Úÿ£\ˆ?¢?õ|¶ª“9ºªÿ‚±ª±»9ðû>/ÈÈBâMœiˆPEÑh Öþ…}ªV§H¸1ÌT£}ÀÄneÔP‹¤­^U'N”‘h²êj(ÒØ“~G^ %ùŠL²ÏÃ’ 6:Mîù2öûµÒe®âjY¼4ó†°1q$7!¬m ¶œS†}Ðþᣦ†‚Òå¶Ö“£.Á{͈Á͘qF`PžMª–u]VšŒ¿ÛÛ¥¸šÙƒÕ;ôT$ÅŠoÂÌRßÁçÔ¨Râ>UùêP1øÜû¬ x]©5Iìög–M€"ˆçKw¡%5 ¡À.‡ﲬ?".å@["&k{|à^UíÿïušøŒt© òòÉ`/9)eÉ*q“ÀÿPK ‘nYT{_(ÄÄerr.iconset/icon_16x16.pngUT R(bR(bux èè‰PNG  IHDRóÿa pHYsØØú\¦rtEXtSoftwarewww.inkscape.org›î<QIDAT8‘ÍKTaÅsï«“áˆ2“—A4Á' %†@Wõ”nƒvQ7Bn¢m‹‚ AhˆaR ¨È ù¨Ì¤Ò !÷jc÷μïÛ¦Im\xVÏâœóœç9>þ"›ÍÎV.-5óóbG‡[ŒÅò>ŸÏ, õù|Þv§/nqìÉÉt±»[MO+eê0™T¶m+ÇqT.—SétZ­­­‰•••û§uZiðÚÚ¼üø8ìí!- #¥DJ‰®ëضßïׄ¯S©ÔÃ2eYÑÜŒ?Ç™›Cƒ(¥ØØX"‘xÇѯŸèºŽßoú***ÆJ:£4!¨X^¦ÐÓƒ¨®Æ>ȱ¸ø]ÿAmm;™ô[v¿›´· ]ÕÊH)Á …h”õõ/lnÞ¥¾~ƒÁÁYZµÜëÿ@]Ãêê(Bˆl™A±XÄkiáóï55Ãô÷£¡aŸ¹¹—Ø¡‰Tœªª ‰Ä®ëºe'Ì̼'“yN,v@SÓ–õˆ×õ˜šò Ý9ÓÞÉ•Rõö¹\‘‘+LLT`š°°à_¢µõ)CCã(¥TY)%׃‘Ïx•úD29Ãöö/<<¯™Q:;oÿ«öܤi´yŒÎWç—ßà÷_fxøáp„Òb!D¹”©iH!È÷õqkw—›Uno/†aœÙzn)¥:îêÂÈd0 ðù ²MÓÎJÜ2¥RJ¼H/9Íæœúá‰Áááá~ (#Ÿ‡ãããý /‚?j%ÌûÕ«IEND®B`‚PK “nYTÚ+æííerr.iconset/icon_32x32@2x.pngUT U(bU(bux èè‰PNG  IHDR@@ªiqÞ pHYsaa•ø¶tEXtSoftwarewww.inkscape.org›î<zIDATxœí›ytTU¶‡¿ª[C*U@H@Y$ÒˆD°¼D“C (“ Š ™D»A@!ÍÃg#ˆï¯_7²–˜0ƒ‘ ƒ(SD ŠCA†€!@…Œ5Þ{Þ7•¤ ’T*¡_w/kU7ûîsÎ>ûî½ÏÞçÞhh'Ož|\’¤§âkNȲ¬‘eY’e!„£¬¬lÙc=ö š{.MC yyykzôè1QˆfŸÛ'EA–el6’¤£´´Ä^\\œ^PPðê“O>YÖœóébB ( n·Û‹®-(@—™‰öøq´……P^ŽhÝ¥{wäq'$€^ï· ú,EÁårár¹°ÙìiÕªUÁhœd0üèþýûÃ#¿/4衸u Óøñh¬V”¨(*öîE„„Tóé320MŸ^ÓÑnÇ’BåŽÊ£ϯÓé$88EQ<.©Bô ;™=*&&æ«FMP Z€ReæúŒ 4EE5ô.]¼à7¥C/š.' žëù­± ‡Ã^¯¯nµ¬¡“ÙlÞ“››;¡¡uÔ¿\@öÜ9/šæÚµjsõjíÚywV·²z›gÏÂ=×êUB$Iò©N´:''çõ»¦wß¾^;Ÿ~úMi)Ú3g¼hr¯^^±Ájo±­V[¥ B€Ru¿¶j+A’$“ÑhüÏÜÜÜ%øØkÃïà=´Z¤¯¿Æ‡+)ÉÛ´Óœ9h*+½ú:^|ru±ÞŠP]Y®¦ëõzEñjUqA¯×ëçäææÒ¿ÿ7ð3ijPž€FƒsÔ(5êNá+*~áôŸ~êEw€sÄä¸Ãÿ=. H’TͧÕj}*¡ªIz½~ö¡C‡®ÆÅÅý?óúeõA{íæÑ£‘¾ÿÞ‹îJH 2- ´þy™gëƒ7$ IÒRTTÄO?ýDYY´Z4Z-zƒÁˆÅbÁlÆh4ât:u‹å݃~ëOÂä· ø4c!ž4ÉkñÊ}÷a[¸çOPýýDm+ð(Äd2ѲeKt:aaa@T™½,+(ŠŒÛíâVI :IÂÒ¢Š,ÍfóöM›6u3fŒ­É ¨³ó‰ê6ˆ*—-SM¾–É6Š¢xY$IFBBB°X,ȲŒ"Š\eò¢ÚÿQd@ƒj=n·+´cÇŽ €7ë]CCBɵ¶±Û!8Q}]±|y¿X8ݺu‹‚‚„èt:Ú´iCXXF£I§Cñ(@Q^P¢jZ™°ÙlPw…:j’(;ã˜8Wbb@cäææ²qãZ¾øb?7n”n¤uk••2EE.œNAtt±±‰ 2Œ¨¨(¥*NÜþpX%BCMâý÷µÕ5PI ¢[7‹Ø²e³¨Š"ÄúõBäå !„8}ú´èÔ)D|õUM-õË/ˆðp“ÈÌÌÅÅÅÕ­´´Tdgg¯i²Ž9²ÆjµŠ¢¢"¯V¼}»pwï.äöíEÅÌ™¢èÊ•;x._¾,ž{nœèÒÅä%´ˆåËubúôgë^üÅ‹B$' ‘žîEÞ¸q£<¸•×Xé鈇ê.¬V«(..V«UܺuK9r¤A4êD¨6\±±Xåæ©ST¤¤ÜqþwáÂ’“póæNòòlüþ÷ÞýlÁ˜1Ïù;oÃDŸ>ðàƒ0nœ×½‘#G’›ëð ü£GÃ/¿\âêÕ«Õu¿ðû< 1m÷îÝ 2'Ÿ<ÏŽ6|¹¶¢x9>|˜G§OçŸy/¾ã~Í™A M§!rrrp»ÝȲŒ\«‚¬M.†jÃårñÖ[ صk#;v؈­›76¶œíÛÓ‰¯¦]ºt‰Y³fñá‡2vìXŸý²²²èÛ׈Vk¯¦]¾ ••2&“©Ñ2û_7€+W®0mÚ3´is¼<mÚÔÏ?}º‹>}60xðpLee%k×®åÓO?%""ÂgŸK—.ñòË“Y·®¤š&Ë0m„„è j´ìÍâ{÷î%11ŽáÃÏ’•ÕðâBCaëÖr¦MÍâÅ )++cáÂ…>¯( 7fMJJ1>ªÒ‹‹aøp¸pÚ¶5ú]Í磢àƒ> h@ïÞàt„ êâÝnÈÌÔðÃíÈÊ:@×®]N„<ÐëaÀ5_Y²bcá¶“ñ&Á톔5ÙIH€ÇWœJK!-MGÛ¶±ìÛ—C—.]ßo ðËU}'‚Å¢·?ý jÝ—.© ݸ&O†îÝUúÅ‹šj`ìØIMÝäsÿo6 ëx³CI ¥7+°×ä#hµªÀ“'«B?ð€­Áöí­*tÜ8hÑB¥çä@f¦™ÔÔ™5kn½Û³?Ù`À.ð`x8£ìZV¯æÔ)ïÒ34BBL\¼¨gà@3f@E…ãÚí0s&<ÿ<ŒqqªbNضMÇ•+÷±wïaúõû÷@E÷BÀAÐб#+ܰ)õcΞdýú`®_WùoÞ»ývïÞCròPvï–èÑöﯞü|Õ}‚)S sg•nµÂGˆŒLfæç´k×ίš¤Ùà Ò•+hÜn>uŠ]»öóÒKo‘žÞ‚ X­Ð«×ƒhµZúôù7"#<òˆjÊO?­*èv¬] ýûC—.0r$xÜúìYHK3òê«)¬X± }#¾:ñ~½÷¥]ýÉ“¸ï» O>`ôè1<˜MDD2{÷šùòËCœ9s†mÛÒißÞFT”š³Ÿ;§n™iiêøeeªbæÏW÷ø~ýjÞ§=ªeß¾V¤¥mæ™g&6º*m¶ZÀ _MÙóÏ£»x© €–/_Éßþ¶—Kaöì×â'ºuSÍ1(† ädxýuHJRåùójbãÉ&زÅÀÍ›QìÙó%=ôP b6ˆÀ (:„}ÀʧN%ì•WÐ×ÚüûõëGnîq^{íœ=«ãøq×çD]»ªYß?BË–0t( ê½7`Í}ûŽdëÖ,ÚøSY5~•÷• £G‘;tÀAé / X,„=÷"8{|<#F zödÊ”i$$$2þlÖ¬ùžÄÄr<Ùª^¯ú{í-KFYæ7°vmùùÝ8}ÚHn®ž¡C§²nÝFZ¶lé—ÐÈ\ü*‡oר+2cNö˜˜zû:##)ÌÈÀtø0æ;Yº”Ò©Sy`Æ 23w³zõjî½÷^’’’%´?ð× :º5{6asæP”šŠ+*ª~f[\¶¸8$«•6/¾ˆþôin¼÷3fÌdúfE@AЇuñbÚO˜€eË¿ûÉ¡¡­_Æn'ìÍz¿[ø»!àZ rà@ ÓÓ±lØ@û§ž"èóÏÁåj8;“$®¯\‰þÇ1íßßl/РؤcqW·nüºu+æÝ»iùÑG´ýãqFEáìÑçý÷cÅÝ©Ó 5°ÇÄ`:tˆÊAƒü4ø“4í#©*”'%Qž”„¶¼C~>†ü|Œyy„¬Xܦ •ƒã¨:Õ4ž:…93¥U+®/[Ö¬ïv™ýA³¾R,ì?Œýá‡=R`¾»»Ðh4………™Ü…·ý ¿á7üëàÿ†íz9Çûe#IEND®B`‚PK “nYT íAerr.iconset/UTU(bux èèPK ’nYT=+ ŠÆÆ¤Ferr.iconset/icon_32x32.pngUTS(bux èèPK’nYT^'³+$I$¤`err.iconset/icon_128x128.pngUTS(bux èèPK“nYTãJµâ?†˜¤á+err.iconset/icon_512x512@2x.pngUTU(bux èèPK’nYTâPS:¡¬°¤y²err.iconset/icon_256x256@2x.pngUTT(bux èèPK’nYTâPS:¡¬°¤s_err.iconset/icon_512x512.pngUTT(bux èèPK’nYTR-MAN¤j err.iconset/icon_128x128@2x.pngUTT(bux èèPK ’nYT=+ ŠÆÆ¤âYerr.iconset/icon_16x16@2x.pngUTS(bux èèPK’nYTR-MAN¤ÿ`err.iconset/icon_256x256.pngUTT(bux èèPK ‘nYT{_(ÄĤt®err.iconset/icon_16x16.pngUTR(bux èèPK “nYTÚ+æíí¤Œ±err.iconset/icon_32x32@2x.pngUTU(bux èèPK -ÐÁsurvex-1.4.4/lib/icons/svx.ico0000644000175000017500000000427612540750610013203 00000000000000 ¨( @«´©²³† €†3JL””ë™™™68ËÌÌVV¶‹‹‹ª®®ouê*”› 46)>?O•¥¦¦-rv™™ñôôúeeerrÆTTÓ'ÉÒååõ[[[’’Ì€¼ß³³Ý××ûVV…=Œ‘MMMy~Hbc$ÃÌ7df ‘‘ãFghKXllllllARlJ…P ]6gGMlllllllARllJ\ $+,)B@ƒllllllARllll_;€-(;dY0d:llllllARllll^0/O~k/kvVE:lllllARllllz4`}{OO9?dQF$llllARl#.UUUUUOr }slllARlll{'U‚@V1`%0WAllARll3'''T2= /nAllARlll s''‚ |Hh7gUULAllARllllo&p‚ xo|A†-AllARllllZO„Ao| [O8AllARlllllllllJSZquIU'jAlllARllllllllll €/OO/iAllllARllllllllllllAAAAAllllllARlllllllllllllllARlllllllllllllllRRlllllllllllRllARRlllllllllllllRlARRllllllllJlllRARRlJlllllllJlllRRRllllllllllllllllllRRRRRRRRRRRRRRRRRRRRRààààààààààààààààààààààààààààà?ààÿàÿsurvex-1.4.4/lib/icons/3d.ico0000644000175000017500000000427612540750610012671 00000000000000 ¨( @«´©²³† €†+os3JL””ë68ËÌÌVV¶‹‹‹ª®®ouê*”› 46)>?O•¥¦¦-rv™™ñôôúeeerrÆTTÓ'ÉÒååõ[[[’’Ì€¼ß³³Ý××ûVV…=Œ‘MMMy~Hbc$ÃÌ7df ‘‘ã~„FghhnnnnnnnnnnnCTnnnnofin!nnnnnnnnnnnCTnnnnPnnz* nnnnnnnnnnnCTnnn"vnnnE_yb nnnnnnnnnnCTnnnnnna„F<@L[nnnnnnnnnCTnnniR `8jHOnnnnnnnnCTnnnn_ N$,-)DB†nnnnnnnCTnnnnb=ƒ.(=g\1g image/svg+xml N survex-1.4.4/lib/icons/pres_go_back.xpm0000644000175000017500000000067314141575516015041 00000000000000/* XPM */ static char *pres_go_back_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXX XXXXX", "XXXXXXXX XXXXX", "XXXXXXX . XXXXX", "XXXXXX .. XXXXX", "XXXXX ... XXXXX", "XXXX .... XXXXX", "XXX ..... XXXXX", "XXXX .... XXXXX", "XXXXX ... XXXXX", "XXXXXX .. XXXXX", "XXXXXXX . XXXXX", "XXXXXXXX XXXXX", "XXXXXXXXX XXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/3d.iconset.zip0000644000175000017500000066433614206024122014366 00000000000000PK ‘nYT 3d.iconset/UT R(bR(bux èèPK nYT­O58íí3d.iconset/icon_32x32.pngUT P(bP(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<zIDATX…Õ—klSeÇç´=];Öv€Á9†Ê²/™£1¤\B4q·„D˜ÑO "øa!\Œ~pÓ¨3ˆÊ@$Á„Xб™@w,xH3¶uëh©mÏ9¯æ*ö²¶^>øO·>}Ÿ÷ÿ?Ïí}D º»»ë-Ë}±öñ`0²u]Ï ‡Ã4M»=00ð¼ÓéìHÇWŠ5ôõõ}k±XžÈD€$Ihš†ßïÇh4 …ôáááwJJJ6¥ò•c š¦!„ÈøÑuI’ƒØívÙf³½ÚÑÑq®­­-;#@ÆäcQeUU±Z­äää`µZË„]gΜ¹'bü %†$IÑTF¬V+ÙÙÙX­Ö©YYY—š››g%ô‹5ôôôœ¶X, 2!—e!¡Pˆþþ~"‘ªªF…™ÍfTUÖuý>§Óé»Ó×»™¦ib,¬éBÓ4 &“‰ÜÜ\ªª¢jšªñ[(„YQ&“é4ðи2páÂ9š›à÷{Q+yyEÌŸïbÚ´{Q5 ]׺€®ë¹ŒF=J'àÎÂýýýÔÖV±`›5knñóÏF"‡ãKÚÛ?`ÿþûY´h %%ÑVScqE(F1nÕ·´|C]Ýbvìh¦«+Ÿ£G_Ål>…Ãqš6÷Vº»§²mÛ÷tw¯å³Ïv£( Š¢ Ëòo)ßìêÕ«M^¯W$zúúúÄöí/ŠººÉBÄîÝ…ÂãùUDÑÞ.Dg§ðù|bÓ¦yBÄçŸÛÅñãÅÐÐðxÐ4ÂEE„gÏÆtý:²ßŸò­S!å•LÍÍÅ·zuô·ÒÕ…ÒÙIxútü ŽŽ¼4¡iZz/Ÿ¡ÂBB……c Ó&O†¿}%û;Hk$[ø_!V€ñÊ•+^»ÝÞ"„ˆûfø'$Iø|>ïœê¿¹÷ÿ¿©¿y›SŸNIEND®B`‚PKnYTÓúÊS+ H 3d.iconset/icon_128x128.pngUT P(bP(bux èèMZeTïÛ^`ét) i®RÒîÒÒ!Ý ]Ò±´Hƒ€twIHwHIƒtH.ÂÒñÏûåý03{æÌœçyî纯Ø3Qj*rø8”8 _Aú¸ý;°0€sŸ„é(pÁv–×súþ(CN¥ÀM w˜®»†“•»—©«%ÈËË‹ÛÖÑÞÍÜÔÙ’ÛÉÕ:óDŒ¢S€Jkz=ÎòòÓÔú5Ôu¥2ÉDÏgâ¤,b B×Éš® úÖªþ¬‰¾ÞÊð§'r”–À@ ¹P+j¦SŠ€IÑÙÊfNï†ÒÓ•ÓXFÀ{W7++cc߯²}'OÅ&ݲ÷DöÁêïäi2VÐX'Æ7W¶ë½åÈÙh^{ k’0ÏÒîáh²F‡ä³ SÌÚ½y¶½ÈW,âg‹þ›c¿Pë»õ’» ¬ýW*u}÷åñrŠÕxÆÍ¶f $ªN¤ðcA¼6n%—(Uô.Ǫ!ýp¡Æ`ff†+:ÿÓWqßËBÛ™â¥RT&ʘUƒ¤ŠN™ó3â×µvÅ\‡—05£­¿kMã±ÞÛÝ}´Ì̱]ï| Aý vµÔ¡SÛ88ËÎéxà­÷Õ fF¯aOÁiÔ«¬ü‰OP°)X¥dùâ|R2.[Ô£CÒãÛß c¬ Ýj R¡Iß³£›ì._H? µb.|ÄB˜æ»²xKŠ,¹ã_ø²gƒ±T§z]þ/P“ÁI t_e-øž¸|⎣³Î$æ_ÐÔ$==ýd’2\¯Œ<˜CÖÕÕ]í»·ÎŽg ²€ˆ4QT¼/U· Y™ÐÅè ,IØ0uœ„î2²BýF;ŠFýckɧûót\28D ŠÉÅòNÌ/åÎOII©ÙJcŠÚß·y£«»HÜh7w뤨¨Èˆ KSuÇp©9†1ÃK¢A¼œ4v=¯±ñ0BYDEo«´ÛÌ·c;°@0³JK¤ÚO „åvË/®nç¯Z„ ÂZáš²±jY*WÇóUC\ºµRZ¦B{èÒ¨$A›1”lÞ©=ü¤v÷ òRÀÀ¢Y')---;?¾áÞ—£–óûE=„$æÒveާ¢„æ+Ðòc„JÓRRþâca±ZÿÕhïT‘'J©\ “ÀÛΘG­¼QÚ;_b·‚$$$x¼‘‘¹,*,dRëaBTÐæ²;e_©!‡ÐÄÞ„$²î¯]n)l¼e`fˆ ƒÙ dÄf ~ðù‚Ã$­†zT {?0ñÎÌM%s|W¢ )(k^='ÏrûÇómM"ìÁ LÃØ£ª)ñã`±¶îtœ\VV•æ:ÜW@¨ dÞ¼Avß{Îãç¢þ›,sÌGžðœ…¼ÜQ „ð±%=Š”M©QÍ‚*…Üäÿ°CÀUÛ¶t8ù¬ˆ|CÇíúønÞç…ÉÉÉilrp¬TÜ8éÃù'ÔVŸ/ÒV/Ìè7.BF˜†ý?kÁL?Ý['çkŒúrñ7Ð×PßT?­Æë9?2ƒ’47Fygÿ¸ûÄÊž—kUèk0a•ƒxXåmj¤éa.IR‰L”oö8¹° 3óYápøs<Œ>U :¨$“¤Ž'“VqX…WÎgŸ"ú29Gå=}; ƒ³Ú<RÒ´µÉDDD„©Í’7’9Gmõ¿és‰fÄjÇhôØ@ •’Ñ…»÷¾m«Ÿ§lðR˜lg%ï'³Åy6K4ÿëz–›»]ÈþF¤yrmÓtC Ó á U®ÒNÊÊŠ³ƒ%Z^øø¯Ç3íÙ¨õšÕ™Ôé: “¼”&‰ѯbáû„@8—‡Eì1†ömvÛÌÇ3ÙþzáqºÍË©MòdŽÜ¢E¹âCÛ>„eˆ_8eóóT:gç ˜™)-¬+PîÝüÇë%C(š!QÕi¥EXÚ #ý ‘*D^¿Š;O6–ò•v“ èG£D:Õ*23T>e×*Õä×Ï"ˆXÍ^¯Âc%à!V 4 8K§2W’qDËÆ*õZ5Ð&þ2ámoöA g½ö’|›H'¢EPb"¶.\ºaXY}Á«'Rêp0âÚ_§ì=ïÃïÁ LØz‰ ui–1!*5 ûc»Rö:£>9Ò„•pZ6ÆG¶PӇϙ±N.ùXo˜ƒFƒ s±îºçîHãøGwÒà}êïÐ Úè}gA’'3N‚ÝUàV/ý›°’פ'L#€ñ7¥\„ã-ÑÑS šÉnp>29_ÈÇÃD“ ¤ nÖ¶e7rЩ[™ƒ ;ýÒ5JT²³U¹ÉbГFÀRÊÊx‹ôërwÜ\0g·Ú'¨¨&ÆÌÀÆÝŒÇèüª<Ô˱} ¯’‰ö,äòÈpŽ¡Åó8ÃÚcTN‡òµÅûŒ¡B»Š™9lµÍ+);Û([“ÔkÕƒ›‰‰ég¹ÇÁBÍ© ËhT•q…t¿ÿCe>£ÀV@Ù£kPrT@I¬å`Š" íEffÇÞGÐ`°G÷ÌU¤Kø‹R : {ÑŠ¾˜-C ¼%†B#óü à/ãñ©äÜR>¢…EK"~×¼„´»m§h¹Ò¡b·ûb—‹æv³X°Ëa*i™D±Â Â–ˆèµ,?~î2:;ôoú¢ÞÍ+¡v}µì Çÿ‘ótoÝY‰³ØêÁÁ(÷y§; €ÝÏêb—Ͽ٢]­qtr,T÷T¿¯õm^,)”òô\;¥²ާ;ë'.;@ÝZ·|=)A¯à¸ð_´Œ ëÝåqÁ›×)L2B y`1dZ! ¥¥¥OÔ"‰N70õÈOp£à4£ýFÇÇûïßkíH9õÁ##ñ ôq11æ?s¥™˜™ófþ€N£J×è?¿0 \j°&|!êÞòçòîͳáFà—­~lMöç‚xk¾ª‘žÆµº¶->Z—+†¥F/ÑMÍÌüh3SÐÿ³êîBt=E:v=xÊÆÑ¼Ý›È îíXGçíügíéÎ÷õÞÏ‹@ ±±±¡Ô îŽge:u* ñZÃvÛíF“^nŽ¡i7ÇÙŒ Ým˜”`œÏ=IÒ±–òéÈ~ßæ‰þŒeúeÜ h×o¶3 ¼í®Ù 3U]NÄï4^KjñŒ«ýªb`Kx>£ ˆÒ®`fd ­Ð©qÝK÷+@Ï"ÈöF•ýtwÊcH^AúxN+ ¯äŒŒŽÞ©¨é,þ°Ü$¤ŸŽ— :ƒ Uý«ØÇD@>S‹„È¢™õ"6I|J9tp<œï[®©ii'ƒPÐöëE²¸m,Ó(Y¬3ÇŒ!ã2ˆ&Õ­ÒÖd÷ÞD.Ni7Ëê7VÓ%Ó 3]:Ç.qk#Šÿ×'`r1W¿jÞ ²‘úKAE¥ØmONØu«Ñ@â—ý •±:Ôéhþ­@€Œ *°šÝ‹?3~×›ß*Ä,5h掊ŠâÔ«‡ŸïMžÇÞ£UÍwÏ–ýÌG§Õ¼þrí½ØN±æƒë øšQö“Éߣ™‰öq•¿ DDŽ=ɼ KcTNí=„G†‡ íu„A4~¼"hÙ1oTz(§óÿkÖóaƸ”äç,įŽ=%îo€ºôöJŽ¥ÿ‡Ø…4“qWkãF ¸ä_‹¹îÈïNæœ>®ê<æá>úì6'ƒ…ÝvñV[=Ìç+õJçgCµfèP)÷k+¼±,Ž•V u-=–öÞA¾›ÈzQJ"ö’œ3 k,,X/˜©åÖO˜²QþÈ9¥Fû´Iš“ÉìÓ^®7A;;¢€Mí ÅŒŠ õ8„óí§X'`”„ŠYD$]»J?å8_»Âdi£ñxw#&gט1’ôr¦+0pzz£&éŸqµN.:ne¾ÿ3O—“ìÊ =T-Û70÷GIXæ¸Õšï©xbbâððp®¹Üb—±7ÒÏôH—O€êõ%q†“Q•„3HÔ>)QÓ’ñªƒ p#”³ôÌ0<Ó-hË6©æDÆ« 5÷F1JÚò|çÇû4÷.Å*YÑLlíO•Fí>Ó´f¼²ç÷FlLkª÷{×½Á\üNüøàtj.ñò“,cMÇ%%(‰åF¢j ‹Öîñéö°&+퇪ç‚Wö]&,E €G‘ùÁÑrs\Æ«°;YVDBÆ©¬b4/èyaTó ‹£ “£ N3&sìI`ÜüS#îЄRªÉ>_ÅÑj˜#ADCðRåëF‹›òÒß\­Ï ÁÌØ8‰ÛHëìáÀ3űˆyñ{ç‘ÏOH:@]]ʪÛ>, ÊJ^Q§âSõ“£aö¾>MÞ_¬­åÝÚÞVP¤eeÇê 1Ü•·³³3LH£Pz”IaèNáÐÙŸ)!4ö;CÏETÔt`-¥’L°ÝKXŸy÷FÁkzZüž$ˆ<¨ks³¦¿UBY@~镨¬¿ir\Õ?é -WS\,~›ùœßK§ÚžÒù@ÖêÅóðÑnÌ7-’‹ˆÁh˜®³l@vy»Ü\²ö…ònË>cÜj"[\ †‡‘¾¿Ü‚Õu¹ÿI|ÝØNwS‰f„ºxì ˜}¹õNÿ﮿q¸ p8º8c 7ÜÛήÖÛÈÝYqÞfíúÚÛj2{<Í8@ 7«uÞ”âËݯN“æ¾ôÿ¶žX&b\¥¤ˆéÄų$üoKÖ9y¬áøÄܳËNÄœm“±ðyU{Õ0Eú…JøÃ¯ ‘Þ§Šê“#ÆX¬¤ÎÈ-1ñÍõv\ÝÒ žäžÇáí“þö®–óÑ"àÔGQ_íÒ«ÒºCÑÐÐ0}"+=}$†§sЗ(ý*^ûT™¾ðµQ£NÎüû…hS“™bËV‹ôg¼àE@õ²D=þÙŒZÞg¥éü0±ä¿AÚ_墢œÿ8uÿ3ö2Ç/±@..uIÜ¡N÷ `ð)6kºXdÌ~+®OÛ?ølBWj¥WöŒŸ2ŒQ5Á÷VhÉZœlѽ:Æþªâa¸ä6‹j`û[ä¹Üxt¸ fƒußÎCŠýR½%à'"›>,ó›âØ28Qf!¶Èü±9[ý>“ÜÈ;X)ûl˜±Ö>MfèsPør³›5ßQLL(¹1çwɾ»Üw/Ã-¬¬þþ²¯©ó»q•ºbÓ€·çÓ)ðZDïQ‰SZMh.Ö[â49 @fŠßF}þÌ ñ¼½°}§¡q;Õo ñZ“£Et¸íå.¶j¶Y*™R§2¡wˆm,Œ¦†§”••áQ D6XOB >›n“7 ‚Eo, kq%uñ†È¸I¦ÚbÈy\§~g¡ÆbdEDÐ@N³ÃW¯R¹ÃörÈ)éé;I?sƒ¯êëºå½ónæŽG±åÙïw¡þHu>y†ìû Æ›]O¤±žÈryܸO$ ,..2Tx°œ È CÒ˘I¯ú£µ#ÒSS½‘¸Õ¼ÐgÕ`*ðÃÂúõõÝ:ÌÛÿÞûT!9%êÚ».…tè36Òu4\€6}àxä‰<ß(ÅŒ¾D[á¯Þ°§þæÄ#ÓÒ`ë²?¶ÖÉŒ8n–§¦«¼ë‡ò]\Ì_—•1¼gD£ñ)åâéºw ›­{‡M7ºŒGÉĹa¿ÐORå¸ú··IëYzzo®ÿ¥^“qsõ0åùîdí’É«©×¢¯û>Qç#Í&i!-»eJmÈo33¨ÊJ§?CõoES厧ΟYE‘+Ú¢—ÇÄ OýQb ëÕY^<&²œºtЮ)›–™"%ò\›PÑ ±àÇÒx&é+†¥bÇ÷Ã#ÁÍëdß‘w—7y‰¿ñ`ÏþÞÄØÜGbÉ+B ÛO·j^{“o²DÏ* ¿ÿZ½fn[ã2Aó~ƒ<ñ“xøöœýxgpÞ©‹kw“Áq…¨óÞ´ú‚ê„a=ÅWÈ÷ 玎P!u@™U;|ìMÓ*`jC›•ç—Bô¤•Ú×;Ä6ÓЖ·hد½pžzÃz_þ,½89^ ûЈc„ði¿;ió»ù- £˜`¸å¾PÌÃý2öñjÕ,dh$‰ø.ÝJÙØœÞBŠ{¦×éÔNO)(Jéƒü›•à‡d÷{êÐ}ÏÄÀðµL£+ÈÛ–>VZ묖7·HØu“‡}žªõ$ÙôF­¢—^ =×Û‹ ` Ûë^9ÏG®íî·‡Â:U•BD4Ú/Ì´zØŸ†)E²@+ͺñÆ$ÜåúªF-@¹?«À´=_ÉÂÚáµøèÔ•bn‰k²*ºù`Ð NòA†”dCX°àX*Ó5±Mü£…Z¥´Gy®@NØÖKM”Öþ¡Tz²®íOÁ1Ši—P‡ÇïÚØ¤|ôËЕÊ6(zÚÜ®¹0ɇ©”Y¦TBѶfÛƒ±Û3ª’<T¬¥$¤Îrw—G`+ŠX(ŸcìGÂ3Pô–ǘ{¥âÙ³g+.C/@ÖJí‰Ïh_k7ù²ât=²ž›AJ"7˜™I,zÃ8tLnÝéoÍÍòõÚ½±P¥Ñ]4]è¯w8C}d-,tȵžÌþ2©Ð޲õì„úøˆÞÿÅ]ñZ÷ËŠÓk°â3ëÇ"I…pÀa=˜f„@‰áÃëïáewWävCinûê.„þ ö$…¬çÊ_ |ø5{êÆð¦¨ŽRï–¢$ò:S2KbüŸJô†á–éÔÐóD¯5¸Znº<¥ÿ—Ùy{Pñü+}ËDÖë™o¶åZI¶‹jÐCÙXAájÛ¨ÑЊ!ŸG›OKÀ‹“vÈû[dGš—0Üñp•¿öÏ×êÖFÚì%ŸI…3K)äyŠÜ¾ ±åjUhW4öZûˆ+»—핞‘áµ2W‘;gW ¤ÖÎóW‹ñ‡ ¤Ùúp—¾¾°à›´®HÙ±ì«Ô" ý÷… Ï¢QÐüT€;í$V ¡ŒM4ë|äeN.w g\P¨¨*~¾@ I%Ä ²@ö®b‚žœLò«Ñ^Ϊ˜—ho‚4˜¡ƒ¦R›j5Ÿžƒ7KE&u³º ®Ú`e–?P¨`ö¥ÉóÃÈÁnôÆÃ_\Í –¿$~ßݤ?É¿%VY ¸ûP©[²Öá›vð1Å-##E £ðÈÁ=ShïN\B"[Äm—×mWykkK8À°²Ú㦾åì•ý|ËèîÎNíÇs»ù1_:Ÿg:ñ«¯Ã<ÂþúÊÇ«ÏmÖ€XX8Ô0M³Z›Gt{+#â­V‰æý *vñó @ÑáÓh$)f`»«SLºór^N½­FÕ,Ý®qajþ§žRMÈÓã9§þ·H %]u=e.8ý¬ÔÛ¤yFËÓ;Zý54 w öxÙé>xÙIÜ0ÍIÜbiñM<üK.[ÐΧG߃ùªÑ¥³¥ì¥]Pô'’›t÷âW×Üö =õ–½he¬üÿ²áíÅ8©ÐTWt®Llw<,&¾Æxh¶¿‰òÕʺñ ¡ÏŸòÞ$Tj÷¿e< Æ,]jäØÜÌ3nÀ¨¯oÏ> Ƥ1ùý#V‚ºQÿðâ…< £üW$é]þô8 9Ú½H1ßK¯z+…¯V/±î4NØD6¾Ô..IiØXlóÚÖVñ[ üçAâüã¼7ðÀ3ôWÙÙ’«’ê}áyù¥ßÔ,üçwí<_ý^ ˆVÃÃjºµR×ÕÆ<åf§ö~ ãÙɹ#‘píJ]ià E÷Òà ”èŠøÛY6Bó-ܤ¸"~‡æÕÁÆ©‚ïµ^cü"ì’ÿúÄ™#¿×Tu¾*V¬]¥Xuz4Wq~÷…ÏP¿<Úq•/â½ðI)Jr³5 󻯷÷z#”P·ÉâjÍ—ÇÖç?+¬fW•Ï¥NÒØˆ»SrÁùš·¿Öb*†G#Ö2íñÀeŽf“•š^ÄšÔö\÷¤+Gi4Õ¹ç…Õû}WÃ5ögC¢¶ìeûêÖ[`3Ê}fbê—·+ç…\Œó |~1Š»Ùd3²³CÊÄÄ”ü=ûÿ6¢#Þ É84.g™^ÙåvX”ÒΑѤÏhq\å­4ŠÕ4¡.Õ®PPT4ë Ç¿ û•:ì÷hØ29<;GÒØqqºžóñ|W}f¨µ«™ý(qÌ>7Þuº‚-gÁ¤3ËøáÌŒ3–ª@ÄóÓ¾tèµFƒ´ãQ4uÞXY˜EùÎÿYpÀ'^‰ˆäÎüùÂkŠj>øIZ#YhŸ VR*5i.à±9âïþß]ô{ôæÁø©w¶œÔU›l0 7*àRÏ®Ñ>Âe©Þï÷kƒþVCï?Eiješýƒƒõ#ï|®ÝHËq‚º4ƒŒC¤Ÿ¯¥ÿÍ&xn1V›þ_õ+ÑÔÂñã{ùÜOjEEÏêÍÐó”Òò=³þ oÏ(K¢¾ÝE •“#VŸõÝF%¢Œ ÿ÷ÌN’*†,/V´µ…vWÀâÖöÔéŠB?û±Õ~ÑÜlXYqk+N2ñ1ç)÷y,\5Ge¬;ØñuØ-òPçû`û¦Ú…Oµß-[´‘j£BRéãf„<³n9Ò*~¦ŠŠ<ð@pÞz}Øël6hˆ¤(û,©ƒãTÈE™†ºŒ V_è—’Ùc}êæ¯&wŽÜ\áE¦o¾a¾;_²^e³Ñ¢Ðr|¾/ãØæihØJbßá³yZ¢}uÏ2¨n=JH(Om”Fs¿»"F^.ÿ~Sˆ“÷î]/'òÐmsˆv„šÄö2bØkþòlhêxQÝ1û?_äAáÛœÏ+lOÁ'Ò5þ¬µ ë’±b uÅQÂ~ ­›T¯òt-7óÔ=Ü·º³¹Z¯×ØV¼Ïtß‹ñeŒ»:¿/èqª€§~ÿðËÙtŽ]fo‚Ùlšéb¹¹`½ó¬jÐuR\÷¤“J©/\—J°ßõjUØÑ•Kk&”ÐÌqz5[|ÿ3uqõŸð®B©¢j’ƒ|í$žÿ¤Þ 6°q> ¬XnoŒC*±v®:¨Ž2—Aâr×ü»ÊJz½*øDNÜî"_<Ó‘–3Ö¾Óu,¨šœr$6¼òduä`íň™´ï½ð¯¹)ñèÝágîrŸs%¼ßÝàÂ{º‡sŒr„õ4¾x™qž¿Ç”?Œ@ýn˜í¬ ¯o9jLªÞ·)R†v1ká`¬b`¥{õ¼f.;OÜ«/• îð ¾»£PG%‡tÙæ² )ó°§–etõ|§Bðoè¢bkât¤åòöðËÛ¦Ÿx)ŽhÉdM‹ºuu;îý§Ñ!§F2iœôH;÷‚¼ó¿­Ž° æ7kþÛ úfÿ;œ û[©õ(?ðzgÛEŠwÇ7û§JŠó~“®RÏ•çÙ4.ž´ ¹%±°Š¾·\¤SoÄÞÀNÁÑA-©î` €/ØM¥½åºEBBðϰZt¥âÁ¤€5“Ö|Ö’"…u㣅ʚ З¢† ¨BÀסÓÆÔÐ?›“{/¾¡ç5žãœó¾…iª+]#¤#àšŠ²¢`WñqÁoŒ<¯ÀoŽÊz.àÎpõRðÕs|ñ†ëýg®Úæ®/œÍ~+{ÓŽfüΩÛRtÀ¨(Êëx¦m6Ùİ»­xØUd ¥Ð¼j3´²¸šƒ‚87T~Ý'4þ;ö♚ýVvÿXΟÑy_³Ÿ9ó†$GÍV}HfKVÎ#|(`,$GÁ"BCÄ £ò6›ŒŠ) ­â$—ÇÇÆ•ž}’8ÎüÙ~¬7~EæOaágôeDJqO¿ßK÷'ýâ¨|VàêK“úîü(Óêõ{vë•ðµ[n+«wK‘¹·ýŽâñ/5§¹Mº¢*f¶àë#Ø ~MV…?8×ýIšý¥tÅÍ ­PÞŸ7å¼ÜÕΓ{ÉR‚Ÿ9‘r€/ðr:þýµ„‚>‹”UÆîkÄf8>ŒQ‰´«`߯&ùó>b_Ç0^p’yü!eV_zÆ2ÿ÷w9• /?ÿj‰ºº¾\ŒCèÅÀ¡Ë#°þ¼›Å0Ž_`ø¨ÀëÿçøöéÔx³{ÈØY…â¡«~ê‘ïÕMôrªžgž­+¸çóŽt²©ž¶œ‰¯W]>>,Ó5òZZ õÇ 0íbÞYÖ_¬* þa+hôݲ7Üz4,{;‡Þ\š¼–1SÊdžòòÉY´›„r-”I©MÎæ¢§¯¯ïžìåìåüüüÃ0c§LÃ7ð7¸¡xÀîþ¯†‰ÜÏqìàjðËVŠ—…á—*i¸Öh¾Š®K¿’q4 üü óÅùŠ,rEÛ‰ÁeŒÂŒÔüÒ7¸ob蘅4éß1˜¶|>ÉdÃB|äÜ¿·Ò¨ns1nõsÀ‘áùë eŸ§e¨¢`Ml¹•ü¿ïl êð~1ƒÿ‘Bñ$ ×ìî‰lfúÎŒè­u×ÜÁQæ³Ì~W"ì)ÕÒ"ø™ÄΚ+èÉU‰œä66žüŠØm¼ ü-_ÖzU´æa€š,»òrÂÐ.NÈ~téla±’ì¿@ã¿€jÆ•HCM˜î>Ëc«,Øß‚0½M>'{Φ©Ba-’:b]¥lóÈêýøÀ²Ô#í!ýac¬6ã˜tݶü¿°i ‡3míí1ã(dÀ%³ öŸ4?¸JL럪%þäsÐ3uù´ðþ¬}òÓ§O-ÍÌ^ u"F”ÞçOÊ.ÒÒãŽlYZX„œ]øO?ÚØð¬ï†ùÁÍXͺvÑ‘CÓñ”Íåa ÓÉeOž$Œ ^¼U' ð$æÎÆjâ´Âß÷Þf'¨No*`^)ŸÆHÞ7z£6r㙵Íô zÞI@¥Í-ŒÉ, ùŽ‹m9vl²P븃åܱôö‘÷a‘ƒ_„‘÷{A¤Nßz ù`ËùF fãr/—ùbõvÛU¢„ `¦ÙžÓÓs¶Ü}jòÁ€Îÿ2tÆWî1ø¡¶—k¬Uæ€Z’H^¯ÍýUœÚ{ÔcðÈð-–œ kÑpPºÿ€m•2ÁV·–AT`z:ãÔÜdöÆxñàh¡®8ñ†ýû›››ç¿f=²Ã/˜£À{ªYß÷.)¸*0Aè õ7IZÛ›ý8ëFHw(|I+)©5}ïd é{ĽjfbÜʦ¦G©%C}}ê ˜“囓»æ¤AéFÑÕ5ÕŸ-Ú^á­­æ>V¿Þæœ3k/{~~Ð/{Ú#Ôߨ6,|qŒlHÁÿpÎÖñE„òsz[Ï:µµXëO;wdÌý|ðe`ãç^ôp¸¹iË€éiåØÕ}Ç‹ sý[`Qzc7ä„ç½¼Þ%%%}_ŠÄõÞ(r=Ù}á°üF9xç ªäË—óÓïß¿[0y¯f{Rþi¬©@ï«‚nÕ™_;á_°¶+Æ—‰ÖJõ÷¼-ÿnµEãc'þL9¹²Iùº %è.ekg7x´1þMäI:$L«²¼ü!)Ó‡¥%3ka:׋³ëEÅÅC[5Hu<†] Q†n®¤­LÿçȳzzzÙÍÚ‡Wå›õà/ºµêìæ¨‰¤ÝYò}'?¹* 7' ¯Õ½YŸYÞ‡ý"Í¿E#55UODîÝÇ–þÛ*ëî ®»­ýçÏóÀ·¦§§]ÏOœê/ާ­ÌÌòhÖRÒ[s%Òy.fz¯ÒþÊþõª¤îþèü ô3æp ºÃâcšä M£×àÜ%qV?ÓÅÎqnÓûøHŠúö!ÜmllŒl¹¯MUÙŒX ¯Ž|ÒvÝ(ªÑ*þÙÛ.~ä;‹NðN)Óëd!䔤]Pƒ^ß_ªH!Ì&Æ—ù=UâY<£™J—U¬Ê±–173ª“肋“kƒU6ㄜ¥p». ,°µø`0í÷ù#;(p>¯í[.Üë×òS?Zþ^^rÁŽŒÒ#Ù¼%‰9ùúšÙâfä)N5óÑl»ÞÄóéskv9WœrLêÞÞÓëóývÝ÷Ó7IDÊ~ ]¦Él/7N‡å¢=é§X·£W¢I‰ÅÙÞ¼×/ºÎ(îÌ6ݪ[¯T<^î¦÷2Zþ|Y´E¥¤qŸüTˆ#4¦ù]´y/~²"{ngÔ‰³ûQl–¿tTÅš‡iÈŒ7ódLîØqOŽÅ|‡åZ¸;µdS ÎÆ¿ q´ÀûBd}š˜üò’ïà)ªA>Ô ?² Ñ WO“¯AúK‚ÑèÜ&0v+ðßÿý3> ¬¬lÔËðÅ.+¾+XAX™s$<áŒy Kn½½ÚiRu©Y gS—›ÕS6æ‰^fN>ëgÀ7hC€h3–ƒ¨#¬Ä°zÞñ'å¸A$âBÍ1û÷ò½ðgï<ïŸþ¶ !‹ßÞ Ÿ™)65ºm§¼º!Y 1Þ–  {»ßÉ'øå}´þ¤Þÿ»ôB8 ¦Í»‰‰QÌ1wò]th}}ÝñÍÞ$€—¨•é³ðš¦yD[#½<ä&/ˆ§¹Ø_ÅGïΖÌ<}’†U|g¸ÏÿZbª ­“‘HQ&Ê‚)—£hƒTœéÄïGM4Ðäºß‘A«ù1Za¸ÖòðÂ)Û{dbzŒÇÂZ¿”ô|¬Ã[‘ns¬óÝ@,<Œ¯©ébA_š¸)i°ÙY¶2KýÑ(‡Û"®+éÞÓãW‚〔¦_Ðz=žÀž•¶ pŒìM¾U›D±‹1¨ž)»ÙÛîfë>·â"T’?g¿á ñÁÍz’‚ܪPöQ;ë½Ö8¼6PfÚÙáuº¼YXh2l+¢ÂuÖtHÑ´ßÅ£øÛC_ª¥¢â ¬a§}i¾„™¥\´-û'ÖËšgœX­ü¨É}ÿšn÷ÎÚmIJÚK7E“O”N§ž«<àªs]º´½ÑÍŸŒ3R2b¤À½Bš¬ÖJx?þÍ6J”Á¢6YÛ<ƒ‹8®óíMM}$á^+æ0'cŽq›¦»FGŒ{éàûÊÝݽ\"3¾MâÒü}~æIóyŒúm;=`òJ .pãϬ?⨜»´mz„L«—/¹”NwäŸw*îw+^äåA£˜ÕVÆzšöŠlÓj‚%3˜\±7ÇuLƒ ÂÑUóì.´ëyõ”EG‘ªŸ8@lhÞýq+úË~öOfÚö¸«\ òûv¾²vvE×d£ØÀOñù¯ì¥~$Ÿ¨8GX3æÝ[MÃJÕËÄtÀN|ÿùO‚¬îàò¼ƒ+L²À}íðv¶tP_ÄÑ‘ÛU>Ý$U‡*Çò­Üm1{.¬g«k×› ‡ÊêÐR©œíÃð*ÈãÀâ¥<’jµ·ˆÞØN¼Ï2ªf:yyr"…-3>Á ШKÊ`j-Ÿ™‹›tª 'ùjÙyLß0¾øϱ6QfªÈ&éôÁ…µ¾hÖ>3sº°6SçÂ'ÃðºâJ¹ß üË'‰{a™– ëì+ò–z€óó}n–Hê.Üy³›J²ègD+Õ韢õHæûpñ%¡ÅFMï§³Â5Q££fàHpsK´oر®™î#&q±O¼›¨Õâ âÆfäëó‚…?›òÿ*×ì6ù%Sok²3ltzË4 Ë,z²¼TΞóë†aEËëÁ]6ΙÝìF¿‚ØEeà ðeÃk„XikYŸ|@€åÃÊí/{±‚rm˜•m'ð”–ôæ­LÀ?ÐQP>§7ÐÕ€‡ïº½È*åœI¾_g¶¦ìòÝ-¸ì¬Z‚"W:} k' ªJ$ÛôLݘ¯¸AŒ{¥Ì%¼öÙîÒ]c ŸfÓ´ñ+´Z‚müixí¥Y1²ÈmîaÜïaÔœÏΰ†Ìéo'×Yµ  'øGKwªåV‚„ئÁͤð$„Í…¬Ã½vx\H\ŽïyÉ¿™à—l6€Ò)Š–…Ψ}£¤ÅH5½,ÂЏ÷¸¯ Œ²þiö{é[ß4)íH»®dÚÛÚÎô‡$~~u œŸèIs‡Še{7À˜};zDkÈ „¿Ûrˆ3ôô]Îm|8Ts!JÜÛã@8d´[žØ”4Ýžgá°ƒ¿ýHlé?…ß0Ëd”·¨Ù<¡%÷³Õ†.³ÿÉBµ4ÕMP÷—ÿn¦£HÝü=ÜmîAøºœØä¦ÙõL% ˜pé•\^¿£Ù¡u:)nu{Ù«å}dö;ZþmŽU)d™Öo¸Žâ'®˜ç®±9M›ù ÇNíbTw¿ÔAý‰ÀëÀÅu°:tÿ!VQ/iÞi§ž™ Õq¼žIw×ÛGiD®xÙ¶ÍYá7ZÜ«D,t¸µ© ³w‘õß•‡ÆÆÇ×@å¤7ö 7PcGOOïô,O-Yækƒ‡:à áþm(ªѪ¢g±XFà=tp¿‘³cºæp<­“¡k Ø¥Ý'· ¦Ë»g©8ÓzvѶŸ+E[vžÛ×±ŸÔʹ7ŽÙŠ´Ô‚Vᵓ×ËÑí¤+6M¹÷킇LNJݲnB…8Åþ­ËÓ Aò­2¿ì…€f—çº×˃ïÀmoç^;Ü4*¨Î†0Ó a”P…Pwk6¹ßaõ´=ú`%ÃgÛçÔ±/ìj‘)òOá²~à:*ª³ïŒ«o ú©i™#^®p–°ôÌgÄO–É.û7`è-ô—eâ²–ô!ž…޽UµáúEOŸš·LUí­©¸œv%òdŠ_)-Fú+ô™þA­BxiÈØ©‹dCÉÄø KÞzç½ÆèÌxÖ§Ž|¥ lí±¹gü’4© !K»O­V”« 'Ø×¯ÝÖ‡Ã9rj °É ©Äi }vš4dOÇwnma-oÌãƒÐJø¯wD|¡H/wq<_³¸$aÞ?ÅÉR—ûÑ¥8¹~LÃѲ];-LºM¶<Š»ì•c• !õ”IjÓ2ñ€þðÔ]º˜“ Ë@k:Tõ“)£Äaè›QS³åÿËýH8,I>ppÜ\>±çë’ƒíokq §k}Ëo°í\šù×âQvâ&{­UtÅË—3ou9Õ!_½àžâ 4Š|Pû˜ŽÿLTð1d÷þÖ=z¬§^Ÿ%;1ˆ¸é”WE˜;TQ‚¢‹_0†z0‰áöoÛ솄óL;£ÚCÂ8½Uän]…Æé§!†&dsòÇxù•¹ÿŠ'ü±\r‰âµÞï„}~Vó2ßcTƒ*¨#¬QïàÓ»¾6>©¸¯*PF¸¬Tgí“í›OÍ­…驚‚3Ï8¶_ ð^øúz§"äæK°ÍÜoü³-aÜ-î=¤’Ñ1O*RxR ·-q˶k$±:¾êrWÓ¦ÞÝÎ…èÀÐMPäI'ë0JK//qÉx¯ óÌ} ̰Ù÷TÛ¢/­ /àR›ÿ0ƒ+> FÞàÔÝNÅrì=ÄpG!RlÏèÞ™«3D%›¸è÷{¹à>”ô1 ¸&:#Öÿ­œ“laºÈ~ÌLÿÅÌb´ÌÙª|ÃÆWc'7pЄÿ„ÔÝ.sÜÚÍB[ÖUÉGŸ\z~Vƒ–ßÑÀ–ÑÈþD½ Ò¹ì„Ð’=¸}X°‰vÅä‡x ­ŠI¶œUvˆ¬÷A¯èå^E¿ š¤¡û+Ë©ÄÕÊ %Ö¿ºÿªÞŽÊ97§ïÃðfáä”:ÕÅÓ®Í âlj[Ës@ûÏ®-C³x ÐÌ|Bîh÷±Ša™Ø‚ÉMµ¯ å´WAŒI&%%aV¯Ö{mHï]Éü‡ÿyÆwŠÅÙëgGÏB‚ßÞËþ¬¹L¤B†Ø®·z)®Œ²vqqÑUuiTððú76’¤•³£¾=s¾¯+/˜ÌUär³„U£¸ü‹«0«[5H̹HJ¸>¿ÎÛrzƒ#ý¥+ý{šìÜÍ?:ŒîýXÒZ6𠇍úõ¼Â'ý6ñðN´ð£+Q^Y~gffý‡drròå﫼[“.¤ùHÆ™ÿŠËÚb®Ãus«à]¤æjÝ›ìõÆ~3ô«„ ûÇŽ­ï˜ƒÁKhõGì­“–ÏYÔ-68Ýœ¬°èE§øA–7°ðú(4#¸Fç!ßsÁš|Mûl¼1¼ËS¶"ka” l*›¹ÐD­uí+ù-‹9¹æîõ‚EÄ6‹ (%ý'ÌŒ‚\Dث嶎¼GvPé¦;r›G ¤ˆÎºRòññ%zéÌ_€ý‰^$¢áoìÝî«õZerÅ7M×DÜ¡âB^®6´ZkD¨’^VctÅ>Ã?ÚH½4BË>â: “1ˆ]ïí}$Êã«e'Áe£qÚ+Ó+d’RñËÈk)QAvSŽZ¦ŸÞ:þþ-‚&`»aÇ¿‡øÅço©w¿ Ÿ;~#æoAÕai=ãÝä€õj(úÏUàUި׬ì-ö±C†r¡©½Ë;F Ft±èϨzå5AZ¿ÿL}ï7oÎ}øXqµ‘5Cáo·ÚMÓ³Aýá±ãêa£4ˆ X„6 ê\ŒÕ*3¢ÈJ8ûrª~Ú¥K2ýí+»v&¼¿Wܤ»yÓ(ÏΰïÍý>üÙö¯2ö©úÒñ«•Ø‹ÞøÖ¨ªwKR PÜ !<;“ ¯Ë¤h­uð󻨠á7ðLžeüãáÐTÿpN°¸ª¿ìáÑžÙñp[J°Uo 2¿Øûª•ßF( Lšššëæ„ k¸¿Î<ß–;zT>þi¤º)rŒ€1鿺ã¦ä)ÆŠ/|=± …¿³1•ƒëÙõ|b‹¨[~decc³ãþ„>̪Œ¨çs˜¨?Vm‹ÐE"—ºVúÒ%ÇËCœŒäÄ´AŒÇûW3.*›öw/Ãŧ[%O äšWôILÌ4&¥v6mZM~7ÈÊUŠNòÖÉÒZ/hÞhhÞ˜´ÈðZ¾ÝP+ÀB/£I LÜû,0>ÊTì8Sô¹!ïÐ/ëN)¬íSš¼ßÿÑúÕš‡|zlìiRüúD„À88b?¿ô«jQtBƒ^2ä¤Ó?Æ<=K‘„ øÿòûƒuæèüPóâ—[ÙoC£oÔ¼ÝêÀÎož¾1Kz^µf,˜–tJq—þnD=$Ò#’ù ÏÄv†ÄÉÅ ÀÍj›“ž=º—ìcD ;v™YõÉ/“€e ò{ן®uÙb×ZB}2ìÄDçÈÝ{Í£[ì{ â`5 ¾8äúéã…‘“ÿÎ<"Jÿóe·.‡¢.âÒÅKâ¢vʉø$Cõ(ZÑ©ÂBYªÇA5-úÞGt××› è!˶4ÊÆ°¯ZAmÆr!$Œ9‰‰Ô¬q™Šms¯T¹Ž>ùl×­x0ûš5ÌxAœŽÎ?o®“oËÝý,{ÓY8ø{!÷ê=IÌÖ®ÈpÎ{:mJ3¶à©)zÈ6u`S긶Û[°d½¼ÞÙ×.à‚fœFŽë(›’CÝVêhD»`Ó„ÐöuÚÿÖˆâ_B”ÝãÏÙ=šÅ“¸ §ú+5Ç4Œô?g,34`b³ö<ùÃã [ü>c!X k•)³úë[²½Ÿøº.âò/‹Š ?¡¡^ŠÌ;¶pÕS0T9«…i5&ããIqŸièO`"ê“äÂç"ýª-k³è|^4ö:‚æŸâ±–¦|Õóÿ*WUyí[«l M¥dbóñnÕ»Ê/Ãn½N¢I@¾qadä$±—Wm‡l% 1æýiÒãþ³bº\pÿî_}Täüjô´tº3[ òýÁyä=VsJ¹ ‘-güŽcm;f`ÎÃïŒ{Äå­ÉàÊJ€ýNt¯‘¦4Ê|0ØðxÞß"ÊJðqiÕùÿN,TÍ?_„MÖ³î•-Òú¾Ãj4šÒfa[Íë½Øôª]_j.àØåÈ+~wR8/ö~òœSsÕ×n˜Ío!¥Œ&h«ZF(:BRŽÿöeçywt]‘Ô{¤÷g¶V 3˜“®O%ãõ À5Ý>mÍœ]Ÿà_¶*^nòÿý#VÁ=üš¶qÀfê+Ç/ÃT ~ÝϬìVõg®'-á?Ÿ‹Q•³F<ë‚›Ù¡J?™ß¨Ñó ©öjã•0¤ù¯l[ï×ÂÎ`Ç´é¨Èn•Ö /ÝcDá—‡M6çà k£JÇðöÚâñI`³ùøU«Qp]¾•¾µ‹\‘[Í åyßÕŠG{ŒøY1 `öø”YSÞrÜ?ó‹õ…»"kú‡Œï™ûIvÅñ ¶¼šJJÛtUt¿çn\1(»Å>±£Èùá=…õaZ&/LÅbsD„þÁ»Zÿº¡3 Mu¯ù ÝN´ÿ·®w“àx€°bl©ÌmÖ@'»‚žM°8øí#Ùï RùR ~L÷ÔAåÓfLÆô"“À–æ@düA®|)óíœ_Fš¸ÇF—Ÿ®ö—~*1û¹FzèѲ“÷ÿ›Ç‰bãKúxFcÇû¨{êP8:¥cð8@·%¿'ñKŸ£ c¾äçLj×z›÷@âì»Vt—QÜ98Žígß–®ÿ—oäÞbg‰z³‚ãlš«u'mè?™¤Öq ÜXhÔÅT:}šsàžéž:yùùÁ™©­]ˆõ:ÁîNñX¸@¶¥quéÈ+ª eÎ7wI™e.ƒµN7Ìn¬ôgð0÷‚\AÇÆ¿²™ŠQôUþ­Æj¨Z€²›±ˆ^¤Úã:[<Îþ@=½–5A.›Ì»ñ­¹ÅŒ9`-]™½Qú||xµ6ßöjdÍ5”³„Ï3‚áÉZßÓý‹FôWį:Áþñ+³Î±ïß‹õ· @hæË=AÞmІø~ý™‘êðÖû£ìI—€æ¦æQ·°¬'Õ9±ifÑ Ê2æôõôn²N´v'h8žî/]¦y<§ýeîÿtEÎ¥H¶r Ûg¯Ûò¶OÂÅ)ý…=w€5ïB ࡸ=üéQ!m®“U"1‹ºß‡ÏGŽuÄÈæj¿ö<;í…Ø}9HÒZ-6¨Û×›û«nµÿ“ßA|_ ¹0ÕEj1»œõ\ñgqåÐÞ21El¡] Ó‰·òÙqüÙÛ˜Ø‘ŠŸÁÂ|¡½×˜Y×cq<}¯®¼•*ãŽ)å±mAªM+vU37Á†-½ÜU»¼Rä~`—ZlÈï×O xÑI¸'¶[ÞVöÇÏÎ'ÜË|JwòNXc¥Ë¦Y'ßuÞ"³Æ€­K3Q‘¡´i0,œC²—BktË"ãN«)’Bù¾"˜˜þsê ýJø‘|L¾ÕMØý£GM6³²;·i³²ªÆ}`Ø"¦Oçé“ÛÓ)ŠóˆMiŸ YŒ§ðS‘ïùî¯Ü,üƒƒt|ëty¹å³ñœ•ÂFÈ =[ù.Ù+Øöj9XÊ3ÆÈgëî: ýºZñu¯,Ògø‘¨4z pªÄì9˜¼iÿó"ÿ êÀÂúòOH³pÙö6UˆúºjˆnùåL]¿tɬ9¸¿çdøøR¥rržÁ¡`ÔYǑڽt4åì«tçuår*››™.‚Vïñ³³3"øÅºîÎü,5nh! óߎD8á®xjã®G’ Mj»hÅfi<^qj…ÎfÌús:݉Àr#…) î+BʸɨOÜÆdÑ•Oéî¬TT\è…TÕÀøø ›¾6œh¾nûÃ`š”ÿÖ¼®8ôÊü!Z¦rð”fn_Ò O*‡|xˆ—y/ÇຜJ¯¶Ê@ò[”ëWb€óþ»Â±vì/%%ÕÅýßCM{ÍêÔ’ù¥[CX^bnÿAÈDÎlTºCñá$ÿJ<\äÍÀ$¥и3ÑxàB飣áY¤ Û/ÅÆ­õˆÜÄ€P–ÒŒÊâNf1GIRÞd=•¸ß{ 6 K¯t,`Æ&ÿ®o§üU&2?eË›oþ=tþè‚m㬛á@|9šËAé(sZûqÏ礽×bk€LÞ¸ßûsåJ4A%|Ò©Dp+óñ0ûêü] Ýk£l/v(®5WaøÁï3\Æý÷)˜Ín6ã·JÉk†L¦Õ­{h®0ܱҾ ­×DgbqÒn•8 x³ï)<]Ú'iƒâêÊÐÿ®Üõ ÜŒ8ty¿‹Åò }Ëänצ´fº¦A³·KQUnþK‰ÿŠ ô—½ÿúV³hÜk~æ Z².¨Y€…?[Š/@•ÀúïHÄÐÄM.“nÀ‘À?™6Œz%ÞkÂïLWIn1øò˜"LòÅL¤I±¼Í#+ý€¤v£èêªĸ`ªi£EúªÐJ;ž’Íç6r‹‰^}…ØÿÃ>zÈÛž² :î•#­„Á—l#7É$š¥Îö¢/Ze­¾ÑøÝPû]öÉÅ àµË”ŒèÁî¤å•ûy=µåþ”æÙ{—Ÿñý²˜“E%Ïäßþ‹g 5ÿ7©œþ[‹q)0žMCˆ±n¢{nTDdnÞÐ,]¸XÍÞÒ€ +—’ìâËÆ?ZÞß(²XJÛ]Òk6õµk¦óÀ/ƒwÖÌ*ûÅ`ü Oºt›êy³yóA´ú„piŽ}seUz°½ƒÛ÷(Žgš×ËúåYï<@°»iëf‹5Õ ö¸=  sWmU©Ï¢øÏ>,uDÍ—âbû+zsà&ÆæUë¿ SëöÄ©ÊS~ÈNx±Z5¨m‹ëêÆX¦íîÅ|*Ú˜°‡ûÁ3ÄÝO”Tr(ê ^n¢)^ÈË6·ÊÖ è#q‹ŠŠÄƒ6OÆÔ \ÖÎO<®ã"(AÇþ?Ž nªÜËxÙßmø5£¤!š|¹zQ® —“gÓ”[ЇâG©„ýs•ù†ÎÒT›¢ôÙ•m¬¥dº]3ÈðV+.ÔGÂ%}ùèKqêÔEò`¥sjëøÊzÌÝzÔ+nÖ«ãÆ1DÚSÉ·›š¥‘âò˜<>n‡òhx_@XÉ¿äûJ‚l÷ŠÁüó(ÚðÖ;CSRL³qði{1`ù‘T|kÆ·£»–ææ ´­ò¤`îÁ(è&ó®6Wd¹\ñÁpåý'dX^JšÀ¼TÒRÝA!PǶÜo?=‡éìœwÙ»öCµ:4%lz¼Ìè}lËÔÜìºÃIŠ}|>¡l»¹(–ß2v±ªÒoñÁœŸ ô€D!ùWODžü@‰ã{ÖÙíPžóïm“Ó v»u˜Ó+Û}&·¤W¥ü8ı4~ÚÍxbÚ¶!Ò².‘MLEwÁ,<Îü‘èôÀl˽áâ9 ÌèüY ÀŒ°üY3@ÜkJnµšQNXö<×­ŠLˆ5^7ðÁúý†¬‰ƒfv;ŸJ øé$!Ð()¾cÓJ?˜aôØû§OŸ~œ´5?bÂ3Ìqhj©;ù2B¡`[#pRº*TϲKà$4èf?à¡'Qëø÷Êqœ“)_t¦!“ 見KÜök5Úƒýro¸ ì“WŽNKC¿ž?L®Ò¯låsUþÕ!Î*ýÉNPqº} ]…ƒBx/óºÄAˤˆóˆt,sè3ü¥é|]™þ÷·/¤÷¼ Fn»ö¬¬:ó*oÜFûãÆ’û)Á{´lÒ»9R^ PŸ²tz}›u÷P99›ú¥±ýœK)CÒeùac2¡:ü»ƒßîÇói;_‘æMBäo¿¸>.s|¯ûÐby>5äwÇ.倸ÙËcªÄ'Ü=å•a©ÛØ Æ°b—Üá5ÍšéÞ«–ËĬBú3¤%dèr, ¦ÿ¶(L ̓­n[ì[[Nžo~ Ú‘ì/¦u‘x­pFKF”¹‹¾ïeëA)•wjU©ÛdO·Ô²Y±¢bÑÓˆ¤¤¤r—LJ9®£èúâÙ½0· n¶EyÒcä¿æÈW蹸‰È´íB¨luêûpíÙû€}Lí=•¤"£þÞ\ÖCê&ìSñn»´nÀ÷TÈØèÛA#þ¦UÝø°­ˆ•——8JTNÿ«Ðý~´ÿf§ÿ¦ÇÕ²_\þÒûâ…ÿoíÊ8ÀÉ#Ì÷§ü¼3…£'[“zs±\¸ê¾øHüÙέL½ùOLS1•¹ÞV÷Ãwx+Ûå'RýW‹mGÕÂt•ååq<âÐ8¶Ói$æ¸3à49 ®ÍÚB D¥%ÿ‘ö-¢VþèIüš†f.LÕèkâ4'â5(3±í;|r_žnJi´©ÂìÝýAòI”5ˆ[}÷DT¹®6Në’°9ó0m’ÈÓ¾NfïÕl~ê½&.°ÚиÿòDͶ·#åF1qQ_e“Ô 0½Xô;Ãöç<’µ¶’“'.³¶çÏÀ1Ñ9=U–>â¹£þêKn]Œ6ÙDE¦RúxEuõmÿ¹à‡4ò0_ôóŠT¦Ö`•öÕÖê¦5Þ|¨7j)ýkÚMpmÍ ìÉkµi„3rÈ.\û¾+%òBÄyäl …Ç%(χªú(É&îHèf^#\_çfÿù¬Ùód•TÓ¸æ²ÒWt]"˜ØüogÄ‘úÏ"2åp–¸¾Nq.C¬rR8zQÛJŠï¯´aÛG~OY ß §‡žl"bg†…ä07èÌAuMÓ©ìùný@$+jÚ• Ù rÑgŒ›.³{¯ºOEe5[LŸ?Û]L‘§¥¸©$ÇI‰ÐKô•Ëz\wC¯xÓ£ý´õËýÆÐ•¦ß3 ›¦fôÿêŒ`ó;;s7|;Á ·¯î[€ÓCµÙb·1O‰¾HÑ‹¹œeûék]…B}ü—’›VTVRm`Ÿ`$·k»I¥¸¯fqã_~?wlû˪ ‹e8ôÐ;>Ör¶Oå6«ÂMïž·³ÒqYT%Y*ñcÛè¼Peöƒ¢Ø+‰fرq3ÜÊ™ç?ÿÈÁ{x‘TædþOhÈÿ]týÄý4Ù6ŒÓ¢ÃWdfÌIÒð$í†LÁ}~!–Ï¢O_.±L9×ôÓ Í­.Ý{¥`9ãqéƒ;¤9Ù”Y£ÖK] ï”ÿÊN;xiʈØLóï2ÇeÍg”êžÓ(ô…DÁÕS(¤­ã“j¬Óë‘«¨£E› ºîÈ KþbAß` êéëá™F‰•ó•/š.ôÇ?d‹Ü’pä>p|j ­jÕè“ú½ïôXãw|XJQ}â½æñ•LÍÌX~sþ›e;2`#^z¯ å$²ÖL„P¼ ;8W ¢p+ÌD¥czÉý9\6.ÝÕeG`ú’ÙGòU3sß4k‡œáÓ&þ ,Eáâç]L_ãïë±2šV0¯t­¤k_ãbõjZ‘Þ9­°è¯þØøÞ(*91þs,„×wVWí-–‰SmÞá:Èúò±„â”4ìݦî´ð†ËéTˆuQxó<­ıgË0˜xãEÙïÃÎ*»QG'‘®žpE†·v¼ú}˜ÄAZõ;:cgpÏh¯¯ü­³ë$ßfð՞Ǡµ¶»ó§«Ý3ó¤qM28YÌî*ÛåÝ‘ºÜ׃¼^H¾lœ‡…²9é?Í6kQ&rNÃŒaq­ã›‚Eì˜$ú²–»Ìgï2OßÁ6Ѝ®*ƒ3â迦yþ²éî ÅHZ}ð¥0ºdª9ÅŠlTUª7oShϨ¶ÒæÀA°Û‰¿o8AC€¿yúÎfÔ6¸æjieŵŠ= y2Ya0éÊ劎ßò?0'°kí´Û’€ÿ6\h+Y´(ø!ZT›{ yåñm lŽ„þDºÁ)8Õƒ®‘wóÓ¦ ÓEÔô cϽ/T,ͱ¯Iåqc–õZøúZ#õEpñ<6@DôÒ%döv¦JKfš}|Ÿ÷(›¼Æj°Ûý`nxÀqî*5Þd•BÍaú4*ư!»©-7‰tƒw¿±•ã~¯ôg^z 7 P§ýßYÓ…/š$~É9›Š“#¿SdWœ 嘆ÁÏÓã\î’#$’ÅE+¢í ìc_£è÷†GWkà Y“¶˜ˆ+%N™ÿ<›G ÒúõŸsqLY XU«3¬I]»Ðšý…¯‹æN…8ïͪd9¯ Ù_Î|`Ó4@Ðão~󰯵¬Ò¯llLã¡ÄÌ}å}I¦ì¥é²Á*¨üJ5ÿÕ á·#véÛûÌ&q‡M½/Ã_Ÿä'H.!›EP”džOå.‚£äÑ»+®ÙŽƒŒ@Åõ¢¶R«â4ó •tu¥ós½Ì¢à€—OVo(êƒÀ"þã)ù'ÑU©ÂÖÌÃðÄ bä«?=§;ðý]Þ#åb¢…ÎÛìzNs¶!ÆB°·XìãFs‰(vPd^qº:¬!{q‘ñ'W 5B¥ÄõêY-ÀdáÒc6©ÅèÀ,ôÀ0ü¸lËð$ÚŒ–-€›žZÝEC‹öâƒ,þî2¤­Qú.…*ùåe„}Ì*&ê šDëšiEaÿè«÷>£ú00—ÈË¡äæCsg"o|?ԱɶÕiÜô‡ßyÎ0S%¨”½bmÚÿøswz÷ÓS§wš+z€¡lô…χÏêuPMß¡ˆ}„è>}šqÖ.{Þ®­3G¬)DÿjzÆ$àFô©œì{:‰Ù [b™ Ÿ‡¼Á¬ó:‘ñäöïÓ*yŸÚ4y0Šd>Þ¶¾Ñø•buõõgyJÌ~‡d`ï]'û+ÙJ ;Ìùm™¤(þ9ã®™„‡ó¾oö5i‰!×tt®ít«&·c/‘{¶K9M$ÇUÅq ”ÊWúíhàÿ$Ó9éñ_‰½¥äÙ†Çl³ŸÃ¤ü;~ßZ¬mVÔ¬Ær—F\f6TÛ¬D9u¼þÁÉ÷è]zÊÀbAäÜ·úýu—Ͱu‰ym)ËTóI‚,]=¤~ÖÞßo9QKvwY´åÔCöô§†ˆ †SnõUÝ¿%Ïž` ÖC7Ôó|»›wvÖ”ÂO\z–MóçÜ•;$ÄË]&Øä>û4IÏròQ~™Ê²æ8Ëx,ÇͨãÀÈžvþ@ÂÑŠÅ|>pQܰíìfPÍ€øôoƒß\=½ÕÉÏÁÉslzös«¸ä÷50‹çÕúEG=Bý3jûJä Ì=×þWä`ãL czÏíïÞÂøÒã¨nù‰ä)y*âûÛçb§jNµØÕŽ3^•ÚÀ¸ÕŒ3E>j™En…³ö²Ç‡Ã-‰]ây ðr$ÍÁ6$Ÿ.ßš¬eÀ3Ÿ›ñ*MÕß¹O~7µ¿ýÞ•T\kŠÎ›Þ2ßqèD¦Ù× ñZ$[\L?E¶£ÿßÕ$×'¨Jm;ZÂ5w«œ¶VwÖ;-6$Ü{’Ž çtAçÍÜínW[îÀ 1ˆÖŒL¯‡·ÎP ¸¹@ñ3;‡Eç<wdOæ_ukÑ$ââþïiÇ™ÇÇDÞ£°C‘¡;ˆL;¾ü$%ðûù½†ªõ<n°Û`—b¼_)$bg3~ØD‚íîYá)}´™-_®œ;(ı!®Š—È¢?#±2ÉFN ¯µøß®ùžD¤?qFßxf_~™mÙ¬¦£¬Žõ|b: 7Êõ‘û¥Œ ,S·Ýâ«"Ó}ÂÜʇÓ»ÄÂhyá×}55µ¶0Y@5î÷«TÃ¥Þß°ü{ªqÂͤÙ1ÙëKFI?í [ä† ‡Q‡Ì‹Ö»¤Ï'ÔÈš?ÝÜ<∢¨~ñZ0(szwv…ÂEg¹šœÍâgâØ@"Ø´Kfû)ëµ]·"sSG~õÕ»¼²ü¾\AâºÊêrc¿¼ñ:{dÛ-ÔÌ÷² ±ñ¤KúieÝgm\d"?±¶õGjÍe%[–Rdy„”–-Ä0wPÌÔP(ü^C¬vq ¿ 3‘O}ua—°œéAWþѽ’%¤/PÚׇÇ?ïÔãqHóÜ-YOÞcÂòs®ñ­E7§4œíúÅÖl°É³Äæ[ñ¯÷¥S;m šˆ\T¬pˆË(tî!?é”m¶"U#;3Nþ§e„î…Ï«Á[»ýo&7ÿ@w‰¬6¬›ÆÜ¡¶Å ¯Ù0‰2íPÕ¹,Q‡rF…* ®dzÛMq_•´û­ËË‚š{°æ“ëMà ¸Vª¸®·×îŠê­úðévÑðf}®Í$¹UžrÁr³•õ[ì£Ò/òŠíÍo±ÚŸ^Œqã Y„sÿ´=Pê|'"Ü2¿@—Ú_m¢¤Ó¬Ü3”/""¼ªOççãã{\3g_¶”ẫ„ž^ÁpöÒÒÒ&¦7µ5C”þS1ñò^2?‡\›C@;ýÜî©EŸïIY'SÄCD€ºô;¶góR8Š´¿aîˆß]TT¤¿råBv¾Þ¯RKS«.†í¹Ã›1Óƒ>Vþ‚‹Ž’>q÷¾šuÛy¦‡%œ¹&ü²—êqºÝ\u;r‘kí±Î,þ±Ž*Þ+[Þ[ÛÃm,›x¯„)÷oâ!ú æÓ`ùíd.CM COˆë|2Ÿ—÷¤u¶A=kš ÚKÞû5·äÔü!~ £ùW›”útÄIÉÉVfff:Պ郦ôy¨ì 7­ÔYÚܾº¤¶—õ;Ǩù–:ôvÃ¥¸Í2=±: Éóã/ ~]8s6:R“¤ùu{ Y,ZÒì¼Lȇõö3…Œ;9ýr‘û=½Œbràa¨6†(mŒð^ÓTQ˜ª÷¿!'lÄšMq?!jG7‡êZB×$»Jܬº>.˜ó¥÷Nšæ˜›u‘Šè…ç ³6B…ƒÒ]`©²q Øæ:}t½0­ê;°|Â6X ð>–™æD‡x~ÞGUºk£ºpƱßsÄíÄ`YêÃáUUwõõô®RØó¸ôùà±W—ZÃlßñ‡ g­–ÌñÍÐcöÈÌçYÐ^öAóg×oâZ%aì3VL#ïHælñÃjÄ,ÿËÅ÷¦ÊçuSƒN¯¶R8ûÃÊñ[ìvº¡¥·ö¥¼2Io›JZŒŒÈj\ö›ÄÃ$¡—ŽÛ^äÐ 4DQiB©šo›òèÛfaó´bž(Aþ׿ßÇ?±yBÔôô£‰Oô ͉¿I€¹4Wƒ¾é“Å;^lØíwûݽ½õ±±1Ôå.éåîå‹»ò× j©Œþ°Uéó'híКW@óÑEc“ ?¡Éw'o¸uËË.h)NyY¯8Z®ÜT¦R‡eÌV½Õ{üê<褆Ǩ 63Z°A„yqyïE:ßãm8è×Ùš£ìÁ‡êF’y¢$É«8,¦„ ÊàOêÒ ª«kegÇ×M'æ8TMoIosv//çï8Œ\ ©Áü.CdÏž›9BŸ^±ÿ¥j"Û6ž<¤¼ã}œJ-¶ç/fŠS­ºtõÍõÍji):>sÛ˜X—ɦ;"îpaÚßÓÝ8=Z€‰»êck>¿Òéw§"qÁ¸Vïó8Tº/øVî+(®9vÊÞQà ÕÊSJ½ˆÜùölåy_ìf牜3ñK¨ çœ×T Ew»ú«# C_ÿõoÇ •D”ƒ©©‡g©‡5h?‘„£±ôs­ûvéÑd‚ŽòÆÆ‡`B\ª†s•Z—{ÞXÚ†æÆë,X€çŸ‡xzq” Âz™«ŸÝ)Ê ¨άµå€­E (kßæ÷â<à8?ÈÜ´ÅWG¶EŠåörâ]|$ …Qî%ÓN'N€;c.ó¹ âµê> |ØÿÄ'¶;QÓ8@ú:‰ßÅ9­#ü|¶ªÛú£±?9)iµ5ðˆ÷¹±›Û“ó/“%Íõz¤ ì´ëÝ·ôÝû.ó?XÁg]ú¥[¬©o©ÅÀ’ÿã6EŠ?2Ð\ã'—Ué²· ÷gð—-Z3¿oé'hít"ðŸK>vˆpò© ØæŒ;j;#E«þ =~¤B¹ÔʹBUZ¢Tß)qù*¼Àù6¢¿mÑ™öds kQs7Ì«¼EཎjÖ}”Ó$Ùµ“œJž)$yïÛ¯Óß>Y»ztp¾U”}¯qò;Ȱ׶YF%ã ¨fô¶O÷JàáµÿoÀ‚ƒ‰©NÂí˜taX|Ή–Ï'ø¸ vq'ÆiEîñ.(ÑÛY2Gxu"û·¿õ&‹Ž@ô‰Å"…™IÓ3~›â¸û/Ð9ír]Øóƒ>üÇ‘Bò×·Æ™|}–·ÑëÃú…¦ÊOöU¼+½òíæ%زe »#bl ë™Ä]ºÈÁFwä ² Nµ’ñÜ­-;VŠŸž§KÉ-èW §¨ùbzoÄßciF7´LO3ý1-ObÆ~4Øš7'<6FÁ&_Ÿ%ß!7`¹KJ?.õ¡N9¨CJK€j/¹j+s}]ÑJâǦbÌ òÌ,_6™²UJš…¾=üìmѯGqü=P üú<{lýÞekÍ`¦ÈÅœŒDÉ)±ÛäTg7¿>ú•Fa(lMñžü¼™¸ÃÌšs…Œ5"´ sãÇ{¼i'ssùF%˜ô!}Y¿Óý%櫇—N[¿B€|¨äêsZ (§z`·ã`“ÊÇmÊEüö„ËÜ‹u¬—¾÷dý _G¹¿1z±éùcçnç]ÿ·F";¾pU.-‚X¦g>B–¼%•ょ„íY¤S:bµÊ«ª’³«ÜI+Kˆ»]Ô9>¤®u—jÿ6%¢ç¡RTà/ó€{©lïCM29a#EΪ:ű6Xrè§áA}N,’øo8nr ࿟“PîÙÙ6¡<»Ó?˜áŠ­´?@½„¾íiAÚ¤¦ºÚ¹Äc¶w0Qt‘ßn–ÊÌ<0â7®9òÃÍ¡ýZ½àž¾Í: =t„¼ÜöhAk+ʦ°:#ŸØ^Çç~E ÌãüYšr§/Zꄨ— ·Ž'E¸Á/µD‚ØpL¯y¦å)nIý‚I»ÌøwdJ“fàÄDŸÓ$Ci%¹ˆŒŸ0µFo…ÈóçmóþÒÐñ¤Êò$­`^ÄBW–n­ c¼˜³¯y¦^êo&ù«+¸bïR<ž'R턵2!^ð¸nc1'™ž¦bËÿ£Äì8-eÝŸ¾ƒ˜ ꯈà¼$®C!ýP³4o½>6tQBÐ×ÿ×(=PþàŠP—×y›’ŸZ4±¥Çø] ù;°áV™÷Ƈ§çs¿/©¿ ŠF™“Ë4¨¢9rã¡_­.ïAú–U¦©b~P|õ•,^ö5yËweNÖ?P†EÓDûŒ2.Dÿ$á|ÍC)·Ò¡ŽpòÑßrѸþLïgÎÆ¢×ãmOý>w –†ßï jܨá@Éÿ·fŒ˜q•”„¼Àèöéârê|S¼P€W›—óq z[ù"½Êò—1—WE{½sÕ¨¥l«¡bñmª';Dqߪk9™MñV™,Uõ{N•7k—îSïãrœ¦n©p>yï*‘Û à< ¹ø”½gé/•wK–ÇäkráQÚïÔÔ;`ÈÐ.Vš >îö_Ri–Ò]™Žg øåNALt…ð•Õß°µÌ«;9»ö°®óFÌ(Ñ¢³B&¬ÁÖ·{?“ jkssàê³'.Qéî©W|èf©ßPû0‹P%N³fšËLƒ^WW—YÆe¹Íì³)øhÁ5€È“ÃvO÷Ív˜©¤þ¬ sQ4ò¾\9 ‚U]#XOétóõœo†ÊÀ*Ð(3èîJ? ¼WŒH6GÚÑäd(3WŠZ”ž¸~³U7©ûc9õRþ›öíöç…±T“(!÷3’R+ªÂî*¢*7Wïärs>=î+d{ä_Ç-XùÜTuïT¦CŽã 'çî •õõ ÝÝÝFïtžÞÊ"h‘n]Ã}•yu²Sõ„Š_ ù::úÇpš«LÞUÓá’”{dÀho«àþ\2Çrz×ß×,_¾á0> ©T¬sÃØß̬ô®•’£8W\ò@3¯Ûü—gø4þ°wU §:ÖñyG#@]Üþb•æ”w6õã5ÿʽ‡ŠÈÓŽÇBG“îfx¿+¼Ës¿ôU ©áŽp5——+¤»û¬÷!Ê-‹¬ll"po…Ð7lƒZ¼h§éƒ¾ô0e6[ú‰ðÃJú»¼Á}eË@GÏ–¸§Ü ]œÐÕ¿ÂOà¯R™*ÒÜmèÙlt¤Þì…äù°,‘’c¨yèQvËqªxï'¯å¶ÔÍbn c´‹T"»Êë(ÌÜëÐñ— °[ñÅÌp 9´“ÊãÒ P?Ý|ˬ»òlÕ‹¹hÆÒƒˆ?/O&81dÁ)xõòVøowÔw3•Ç'×sQ§cc×í®¶»Rîëî.ÝV]ù§¼”¡ß^ò4¸?:;÷h˜Ýn¿ÚnD]vhœw|Ë;3ðÿíc/S ß_Lp6‡¿ë>e§Ø‘@™AjÓ q¦Að;“Î*3¤Ã+“Òå]ßí(îl²)&D_X¼­¨®¼ñÒWãÁ;@‚qƒ¶è®Õý®¯j«Ãœ TÃûK¹]øè=ù9+2g²àrHpõæ‡l†¯†”f¦sv½núfþò‘N”…[¾’´Ú`»<+2`îËm†E•Lâ¶D¥ŒÇÕää6åë_? 0· %BõúåŽÖ£q"7ý ·u!ÅÈïióØe;XgÒ–r÷ÉØIgüMs/Da‘•²dãÛG:Í_IŒ(š>¾}?À·8Œ³å6²*Y-d6c?rAÛv·øù™oôĤ«š-bIÚ 6XÖ<˜£N¶zàÀýó]|eõ ÊV+!îPu$J «£ùçúôßcä†BºÝ~z934äww¼Aê/ȘMÎÇQëÁ¡!Šª÷½33î>\ùã?²`K¡N‹{ …FÍz ý’‹~¥´aýß'Ë¥à™Œ$ÏÂX_K‹hguüôŸd“ãÛd’:šuìax1ÇD1c§ ×p|š}kû2«Ø)PX&M,$§G¿4÷t¸=\7âLí×½ðÝb`û™cožØøÉú»Ýp­Ä˜1Ó¶L²¥®Ê±å¸Á}Äž´=çNmÅô‘=Æ©n™²’}Ùïã­¶._ç°cD€"”I’!xãGUzì$Õ&«’5ÍÓåPœ3€ã3mÉꔤ×Z°ˆ™IÐP8ö+Þr1Ê *‡~ïÆþžoªÔzÜ'rt&m]£?b)LhÚ!õ9+ÁGȉ†×:.ì]=d£fÖÀ.Aà€Ý{½Â9#ÎÔ_ ÑåºeñØ•°_™©å1¥+¡xŸ4žŸ«éỿ̄áÌ›îSØ[€?¸¨è…_î"ê™U Æ'Ë¿øæöh'v|ñ7cà$,(‡ÔŸù2xm'lVCB°É^g0_ò×-­ÿt{ÜcT,Ú²¢R*+¶¸D~ö=Cr¦\{É3®ÕÒJ.wð‡Yu/$Å•«µ¯$QüñÍ{¢¢?”dö??a¤M¡ÿžIÄy@1ûf ÙîgÐüQÎߚ̤è~n™݉æáÓˆIÂ:a Ò†ŒXÒø4»ë‰Ô+OJ¢yîReZ)¨F®HFa¯”<¥{ m>1 ™¬ŠõëÊ9QÐv†¾|ì]ؘ"®¹‰d ¶sËžaº[&a=£"nŠ‚šÑðØ‹fÀ_I²Ù$rýrb‰éæ2¦Ù•i÷y‘ОNÍÂ¥¬ÓŒCy~j˜ËûH[5÷njäþJlã¡< èiÄ0ß&^V•ŒÓ¯Ž08kNfEG¨&ô%˜—?k*;Á9è2»‚D–*"3Ü”q6B³8,y:)zDòäªãLð±1WLZº5ê·…Rúõ-a3Ö©[wØ!°ÄwÖêˆù'[ûÞìC™½°s9§¶Û¼=!¡6'MÈs¨]d¢€?µüf÷ü‚cvwÝ.GŒ”SFžE¨ïÌF˜N/US„Æ1ö¾Ø°á¶8ýQ *ÕŒj èHíp7ôÒ2Ö@ÿi^b™2æðÅ`/!]v~ƒ~sQ’”8s`_WÃET—ŠaQRæõW1ãýê< Wrë•z œV¢2sŸ†‡š]'Åa€ÔîV£C ÑÉ<ªÎö™÷×ÞYößßa_¹çž%eìþºôB,VÂ÷#óƒ>‘ß@-s†›ñÝš€kKŽü1f©…´—sË'¥hrFóŒÚܪÐ'ß7²ƒ)Vô 8{ý%·©p¨Û¾GC\%ÒÙ¤Wê¸lÏÔy\löclûíÈP,Ð`µ9{ü’ö<÷' ý¸¸ãÏâs¶gÆØ—·$üy«â¿æÝj8;æÃ)Ý`§»¶4c\&€ükvýí0†Ï¡Ý’DÿñÍ­Ìžwìß©É×ö¢÷jß½kš¤¯éGÝ ›¤”[꺙Óõ4uó£§æGz Ög†ö)çʼL™lçA¿ã}Eh¾9X½ØLhâp¾°Bù¼à<Œˆu,hzWµÒÄîgÄf íXæla¦úƒŠ¬;”Ê%ügPÀ;ðƼB%òÁ+ÜWòÅ6Õ5K|—Á¡˜6‹Øˆ\ãÌWÿG—¢±"?ûæ)Y›1ˆ¡É´¢nÅNìLÛ=¢oÒ³ºîŸçݙÃke…9ÓXU°cÕ‰$1Âõ[Wò”ýèŠô²,p6‹/µü jg¹Ó÷VdQ¯ö?_'Ÿ¸ÚiJ£—‡tè™36›[‚ls8éÐôÞÔÐ9o´`•-UdIà2–$V>!¾±þŒPÀWqÁmÍaäxll,ýêsRᄽ&¸Á”Æ™Aÿjª˜“…æ[5£F™¨H1Ƥ8¡J¾¸£±E§ü|j“¾õl»[`>ÖÏáé×RVQÔ “&î«*q”{ƒ[Hgnâ›±æÑç6œO‰…uœâ›7Q7ÔÌŠýã±³ =èn<;îOvÔt$÷+ÇÛ|&SÂDgÎÿý#Àè$Š~x;$9ÆLs!Jh¶Xv‚óð Ûá©×ãšLÚùõnŒ­rÔÝéæÏ”,*Ö5Wkðé<ãúé}¯,úÒêPeL‹é·(1yPëÿY„ÂCì©ÐÓ!þ0+õ·­(¾çófÅÕ ç%8Í?¿ÍrŸ'l?òûh¦x¨ã`hx«tÞyÿEÙ7éôòëüëÄw²áÂŽÕ?°¶g»S޵'9a‡¢nOä?»AQ¥e—iLEÕ ÁY<³íŠ&î‘$pù%Ë•D.et²Z¨ÐVº_} (‘$4ôìÝ‚jÚñëäædÐdÿçyʬ.ã"aßü¨DP]-¦äZï ‹^öÛå¹W˜:LT›¥‚fÕ¦,:¥§ª'¯›xg»!û)·.ã±ÞàÅç_èzÂÇø&’·aygþi-’È8M­XñsÄq\ßBj¨$Ü­ß¾ÿLe?sÜ•mdà Šw— ÍℳԖ³ÂïƒNYÌž‰YZkX"'(O°Þ¦ò”ô Ãèwïÿò# ŽizI¯Oh\šIh #¢=Nü­u^ÅÄeÝœ˜w¡fmÚó âsãÛÇþéþKÚ¾u“̺g÷…ì&Íu3y˜SU/Vúœ•LοôI”&Å©áîð^Ö Œ¸®(¹_pNC:¤à*à%¼Wßæ6cïPÔ¯•ûŸÎÑ·ªüÌÕ……®5\¼XÊ Ï`âä=¦P¿{\tþùy‘;+gn~¸¦±2¹ŠŠú©™2pŠÁŽ»¹¥­Z?Üÿ-B§X|&¶ÖŠC[„£5;2Qä]ØŽ““ƒ·:ê*ZÏ`÷yýºq¿›Zß¡ûµ½‘óìgÞ‰d_–;ÍŠQý$'»uNÀSJoiœ³h¿…ÂPjVÕ°º¬Ôεó*×JÌk“þ1KkØ^Gð`É9Ó*§BTÝŠ«ÐÙ–,4—ü>‚ÆJGu·¦Î5ºÔùLÅaqбc˜GŠã§‚ô! $ù1?ÏH§ˆ-gÅLÞõBÿüR.ì˜.”u.¶/›Ì0 ¡5èŸyá“#Õ>⇾(™¼A­Ègu ÉÿôåþÄ]óì¤`T‘VÂ.–*øýºÁð6ʰo“ ;·2öiÃýWþ™¸¯Ú®¶ªÒÓ×v&‡À¯5EæÂ‰»åÀ19È¿FæaÌ;¶JïÛl¢ïp~ 0t?NëzI}¢ØÄöõÞÚùL §tëCu³©Õµ ›–@fEÅoJDqbÑ_’&Ç´·á‹ýþ¤Ë¨ë?(Œç–CŽ& îš±^8=ÆÈ™·Z>Ì>”ƒ}ÞQî ·‡CT6WÖ)ëúø—üjÓp̹äKÆ»Evãen•qæYzy½k>íuPu[»ZèŸ ¸¼¸dÐûÿ”ЇR/ÝŸ"ÙÄÍäèƒðmµ(ìäÐdÖ]°³ý üöD¾=~;÷y±›èDºz›ÌªÈyí°¥žõ‰¥ÆŽÐµ¥×ÊUãÎnî-b¦T™×XD¢Ò3å›I¹Ö3hV¿õм†üî|¬$U-¤dy}ï5¥x°©ì¼Mé/ùŽ|Ð(â`ó$Eé3$ûQáèí¦k¸ßü ]ÆÛØx/‡¶Ü–zÞ í\g"¢ÅMðΈmƧ¤fÄŽïC¦„¶ôGõ÷.IqÆó÷nåqJï(INñë(6¶¬aûGbôʧ†B |ço…Suöb~À>Ÿp*!t/2x§š`„gÔtÙeÿ2žá#WÙ¹›> ‹:)¦¢rñ< µ’hÃõžÛÌtT•{ø!3ólŠ8ëá2¶€Ø¬æ- cä¿#ÇØqdnm¯C*ç2‰ü¬¤ÞþÓߟð‹“>˜]W%¿ö*Ñ6#–üòΓëh÷"Ó¯P·¯òt*[‚[I'¹òc]"3;wQäÅ•®­Å{æ+d?û‚¾ÈNÊÏÇný¢Õâá*‚³>=œö{3%¬ôXŽõ›†<ó§úG"…„ø¿ƒ?×™t»ê.ÖŸëîPV½÷µ:E$Ü`IDŸ¹å µ.üÜg’9ðŽÙf„k‘³¢ÿ‰µÍÄÅ{·K©EùõéUÔ×£hn5’òcEJIÈ´²<\'u…]èÉ&ŸaL„ßrC74œµ…¶$Ê û÷&CµIØø –èø’ºá ÓÎ$oíÂÝ‹yo0Ëã¶x«¤-¶.¸;Ò¥hçQ¹5^}ÌoõoÎÛDrÎ>Š•í×Í}”à¿CC N/_ítWñlÉæó•,~K^f?›¾8 íÕ˜XÃût¤SU…ß Tüðéä™dÅ—›ºâ%!]Iª¯oa¨‡0y¶€dýÖskM[ HªÕ`Ÿ—‚Ix³ñ2Côš·®j!vc7ÝqBZÀ’6Ý=qŽÙ‚àÐ@¹Ö"v­û…D¬Wì#KÊÖ÷`¯>´eWË«ýêT‰1Mlö™“@/ó•œþã)UäÈžiò|Mg˜Ÿ›a«ák3ö!ãñr’ÚÙÚ‡FhX¤îL*6l-®òSfäAá`Sa#Ao_wØ9~ê/•>õÏ}«4è¾Äòš$õ*ƒ…µîûüNЕÖœ&Š>¼QÜ™«ýM·eeÒ][w—ÈcJßzþ½·ÆKó_7orÙf÷v9ŽIq'0æêÓ^7üŠl}]Í“‡¼Àe3i±Ó¸˜Ë]!Šéy¨¬@ˆO›À¯L)¯‰­@ƒ P¶ÞýÇ›ÆÏ××÷Ÿ'–³þ`ÍÁ7°µÅ’ÐI˜|@Å‘ ­ :»Ù„<ìSëPêÝb/—çPÒ+RæÓV¤WµTIFî@fʦ·Œl´ÎÄ©ú÷Š/tõ f¢Ê®y9É©cko¹§’Ýðå¤Flû|-‡$ìtQñ/­a<¢é25ƒy0gèÞìbù <=Ee½meR%1|)7µÝ7uãW@ñË6ð3É.³¶ìw!6¬>iåijj"¥ õïná,9M…l@ÿfpLh{á²{ܪQ ÁsmwvEí5Ôʺ٠¾y̾ýÌcZõëë$–ª›É%"ºîp‘R]ÎïŽÖÝ>îœØ p4kñ¼RRˆ”Wh¢c£×=ÎFµ0fÐ4:Ë?¯ÕòÔézðjã»?ý´]I}ÿvHj’|?9Á-}ný¯££#'+‹ìõk¼“ÛM–PMN€ìžåÅbTÿfÛ×#ù êîц†ÜJ¬¦Õî­¬†þÇ„3£Ð—uuÛ\gªm•ZÍ6éª6 茥 6i®K&É2ï`ˆœÇV rü¦)3wÃÙ}(!4ðw†‡_ S¬Ü²ÿ ´±suv …oüä–Ž œóãg…o.è<–ð~à.¨ceRºïRC19™iªÕoÓ^lóâš™ÉÙ4ö’t$EÝKä¹o³°bi‚C€$£xü#o²;Òéòs ±¿¥*×õ‘}²‘7Ü. M—PË¥%û„Od]= § £"“Ï*Î$â½ ßÄj5ÄÞõÌTÞ®ƒ‡|•ŽöHÙ8í8ð½YR¸iîÓóÑlbIÅŸO\/©œ%ýiE:ð'íÉd:êîÉèb‹¥m¬Æk¤h‰ØºVaòÐ+yN×î<‡DQIé–¨¨®Õš ï7ˆ @“)à‡qþz†ÚPµBo—$Yq {ÆnHfUVlo»=úD%Wï_UÅS4}Ñ<3•·Ÿ$øÃìÖG¿Ë¡êF~Ê,«í›$ÂV›Œ Ër”´e_3üå#ŒÌLçljÀM¢h'£ü˜go<#w]ö9“ÙOªÝ/’²ÖF¥¯'ã+taØØïûã^8›æææÆffî "pw1ì,ä¤8˜í`Eak®“â¡Ö¹D˜¨F±;ò¢¾Á¯Hîy8Œùx "~SާÂI²'K”—™>Vÿû;OÔø þ|}ŽÐVË$-¸ëd£-pоÓÜd¿6³6N»qWñ8hß ZrÝ)`Øb™CMh» Œœrjf/T|ˆÿhŠ>'Ç™)R¶ãÎ;´¡söáºôá9=¼µë!]5i«üðaÇk"ª€(ö·WøÁPì VºµâšBáopþ¤)'æ6¨ev"NG"ÜZãlf¶xÆ×J˜Ò2†¥ó$²XÜ+Ébñ€Û}™rƒo¾g‡ZÂu‰VÙÇ#øÑ7VmpVßCûZ ¿E‰}+›ƒé¬x]û;qÃ=YæC`£@‰Å“Œ–E” Ñ*Ú~Ö¯M(F÷ù«^ô'I°åˆ1aŸþ€ÿªGÞvCq]´›¥Ü§cCëáÙ¤!éÀ‰·Åí2‚ õéÂï´_F úGj3mH?”D è²éÌÐoR_m4}áŸûY¢²¹ÍcA£ ›4ó³ °–ÕKí5ú _+X:›Ût—µå¤QÔÈ  ’þC;Z¬š„³¯¶ÏÏ}Ó¤}®[ôg|[Ðq©‹ú¥™ÙÍ[·°’ù ž>½^lPÄ£[<ÿë[Äýj"""§Óý¥œqõJÝby…Áª9£ÇC#"îM–›=®wµêøöí¦  9ÁÕ‹¾¾R]ɰhBjî,ßÓýûò­K(_Â=gÑ6k˜Á›W•4ˆCzH?î ý×µ9´ˆw ±\«²ðŸƒ5/yÙŸe“g¡=K^ìÓ°ÜßžÍ+9–hû˜ãY°0WWwkoþ”éLv~ÔTABwíÓùNùìJŸŸD·Äˆï̯|zëþ×<’‰»1žrÿšWÃȈI=M,ð–RÔüê`®²†Fçd……ÓÙáZI}§–üà5!µãÅÑøâÙF ÌÛ(O•Z§ØàF"÷…*ëQÍ2“ûb $“Œ^y=¸k6yæÁªœ8èåñ)s^‡yÁ„2Û(3ÇT3ÚéE¼çŸ-ÖióñçÇ ¯Íç\F+Í"‹z”ºyR¯KZ'~Õ龆٘±.==QÃlØZÀ÷÷ì ÿÆ,ïî.B †ÀÂ#1¾Ä\\9ö–’ãïäibN9«í.µÎGëO¤½©”¢™ž0®8ŠÅ$$~R˜£šÈýQ¯â¶õèçשöõà𖺛: #t*¸ A~\Ëa€¾$†Ðå%6ôŲAZ¿Ýnp3Ë2hÿYÿžŒåÛFq> ‹ƒÒÏ|¦—E\´{ߪõõ¢Gr”’"|Ïw¤ûÚ“§³$^ù×:/ډЛ˜šÆ&&.0+ÿÓŒ¥¬’’ô ;ß3¤}ç[!›Ó5¤hÔN'<àbIMß¶C ›ñ¿~ÿŒŸ(7‹¿HIIaœ_Nux.á6%5RôœÆ¬+a¯ sO£´d„¾Š\Ω~S À\ð˜aQõ¿&•oVеñwXeŸ:5¢ˆF½Êµu`ÜÓ£_-ËL¤á‘ì}v„ qÉßrPúeé9H"ÆØÓ‰j×µ¡]]CçMlŠD5ž³³sLRÒFIwãÎ(Ɖ:ŽãíÙˆóóscŸíÏŸ?ÛšýÐ¥H™ŸÑÏOî5y9vóÕPù5-%='s6”îÌñ>þÔ(WL­au90±'*ÊüíYêl¹¶7Œ‰NÛ÷tÊ¡3>}±Í1™<é%b£íÁs,#om™¡Fº¥|~ð®¨'dDl¹vî5(ÇA<`Vrj<‘ј²‰ðC$ДÌkiíøoØ7¢%߸mŒ½Xü9Ñì'y¼9ùª±±ÑVØ1ÏýNùÑ#¾úëÔÔ¯½Ö³¿[}  µûæýu¶¡‡@%eBöï,®)ILvÒq‰3³ !¤9ÿ·½C}¹A‰ýÁ]çÑÇ…acfšAAz9‰Né"ø÷Ìkû;Ó&è9¢ÊÃéâ»#®ÌŽbd””¯ÒÒžÉä°“iÊ…ÊýSE– 2¾´ô"¶­õn¥/Úq?àù¨(*øûË ]]Üe kS¾Ê}­“©°ÝUoªhgQÍaH;¤õ9¶&7ALNõb Ã&ZÏ<ïÝ<½OÔͱ—¢ˆ|ÕPã×±o}œÔùZ ¹ö6exÎŒwRª“óT«|±‹L EDäz]]]9ÆÌxWýå¿:E\1ì—geÐîdXçû»6Ž¿:ÂŒaa'òòò«ì7ù ~m”´à‹}’;Š˽ƒ_ô„„mƈÁꌥ†Œ¸_ØCM…ΠTý/*h”ìdæ\)u§ˆsOËpÓÁïüF:ÕŸ‚UÊZ2•‡N w¸NO.oÃ}b„«AÏš˜˜4•ngžàÿ¥ùgo†×:Š bÞ¿7ëNz1]m÷™ùÄì/úU„…O‹ ,Ðx0˜9àÛ–£Ÿ©õ«¬Aøâöì‰å¡t\pq‘³<ÄH;.I*.¹õcÜzW÷¥‚Or%!ÀC°õàõ¦TtÝö­‹¾ Òßæ•ßõCý#/©*pf2¦žÌU 6¤·}æw¾²ÊV/°,Þȼþ+Ô²spà}úôéY£§ –¶¶ÓrÏ;0ZØ‚a½Û݃~Ù^óv¾š™ ±¢ç¹`QÖ¢·WÛê}ûŽ@$á'ïKÜUîS-ÞõÍÎé½ûø1È¥q’UéE7¿ ÄÈ›Ã7æNr,_!MjR­Ϋmî5Và|YÂ)²9ØòÖ ˆ)Ðù¤UÚp†å¸’yBð7`´·ÁaÔÕñõ5Q™çžÉKss\¶G‰ô‰&Q÷¹H.íüÖǬǹ,Ç‹µ´´À,*Þ÷ ¾ ËŒ'V—Lm mr'!àhÉÅ Wb&i-²„ûì$…œÄ‡q‹Ãô™U2r:Éð)¯æv`v:…qŤæg.¡ €mL²ñßbz˜û^^ RddúÒ%i6Ùc@›µêÙ€9ȼ¢J0‰Ÿ´9>|øö}ÓÑ!Ì#Y‚ù)fëI ~ÛæîÉáDä]hãŽE}Ëk£™9gÙ) ÿà!ô $Ÿ\Qe–Xhò#‹è;€ŽMNø7'WÅ#àslÛ“)ËL3">vVŽIL| ÷?Åi9ß'²^´¿QVQ‘/PO¨´ÒžØrO4ô“ÅÊñQ¹ä9+ß<À}Òúõ F÷¤ !Ë?û’§4[>vûÏkN«ë6˜=Ô¸ý\Ž ¡ËEàèW¦æ~ØäqOe‚¿Â‰ XÿúÝœŸKÝÉeÆmО4qJIí«qÌ£;-—QѲZjn9UUB&ß]ùJ›qu|- taDÑEînA–†iã÷µ{Šîç %4á.M¶ÊüŸ»ðÛˆïúE\4u®N,ÑПŸYŸå±C¦\~ãu%þ|ÜÂó·Z_:I¤?«±g4ïψ¼qý&Ç„+{‚ËJß‹¹F¯Q&Pc6ûù€t€ÃÅź^ºïàù*ˆ¿Öj½ƒH-xHmŒŸô¶Æ2ÍêlKesVÕkRÑÅ ?wiúÝ„I]¯œM©|1.ѹ|ÖOô `ùüãñ Pc-–4MàÒv\È6†…‘Þ¹s§ ï³R@PPð*ÑLÒe¦J š‚h’v ÓcsoûÌé¦l‘¿2+ •+ž½Gïa>ò£Iù1ßòO†vnA©±_±¦Žï¦¬¼ÿ¼ÏEŒá³Ícù8(ðø¾F²68‚ض0J¿3׫,Ððà;+Ä åžxf=¼±çèwöüz­»DrçÆ¦íüúè¯ígÄÞù¯8{‰×›ããã_e`nÈ^ž ýúõËé‡ÊöAm["›¥srsŸ cî á$,¡Û}oÊ™ >[í#ÜMY¼Wßâ~Ñ2UíÏ`¯ú9Ñô’õð·|èÊ£å@Õƒw4Ä£Lîí‘6€¿ÔBKñ¯wØÓ ܆5d¿›šJ¿¹„ý¶V,ëÁ5.‚ÚÜ=eUŠhÕÄŽqç¥p,«‘ÓS¹¸Ž§ådØ}™x}8}éXê™×ûg™•¢¡Pœ±"®4é¹»ˆ¯<{½ëZ¨H~Íùì<‘yt—^ŽxàÝqIUD‰¾c€‰O«i”km_‘¯ñGd¿kðÔ{¾?îöqîÍÍÑ„¡½vo§„ûÊB’™E^Q:ïCp¹õ(÷Ã÷ÂcEDÇZ¼7%è>>§ùø„¨víöÞÇÇXšÄvIÙsr‚ç5‹Ó0â88 Ø'°ù§›„ â¬L!$®ü˜`¤„tÆ™h +Ðs.+ÿkX@²RÜç)>8ÞëPô1Äçx÷®ÍÈÐØjìË PY¿Úžmȵ,7BäHr74¨÷ËöÜ(pù‚òôsy¹Ò­ÎGÚÎÝû™ á1Þ*Ê¡¨f¾ äš«Iwßç§qññŒ»°/lç8” ·¢»òW1?^€ò‹VÖ_JÄ~†v3ïä‘Ô½%7œßšî^â¶¡Ÿúžù“Xzkf´ÁËÊê[´´"%(Nø ëç÷:™•Àù5}® ’òS<£…÷"=P"ÕŒúuèø–¾ÊšÄÖÄx9[²ÊGà­{ŒAîç>Füþý~yŸ¸³EñÊ}…ulçzMÞw¿GÒÓ$¼Â•Ki•F…·øûᢟj?ÃßD’ÚÎÚN?=¯õŸà©x3Ue“ oñ_®uÕÂ-·Ži$Adóíž§^å0ßš¼i–EµÄÝïÆ0ÀCQsç¹u‹®â«!С öÊ“«~Q>)÷AÙ7ž.§>«²~RšœCÔÀh9AV‹2"?¬±ÂÒùB»ù„\»”ð±q÷uãvÜ=©8uþа0ùûÙÝJ OßfÁ[?PH ÁVŸâM¢‚ÚëYäƒ)“D­Ÿ†×«ñϪ–©‰€ ÖÀûPàÕ%.ó‡fdû2¤#@0g®°è ZZ¢C°:scuÇrœ„.3ÁÃêýó'ù;½°1V¡ŽíódYŒ 10>(¬0‹ðïz,Øžoïè_2C«.ïl!œU[$Hbº{££5b¤é D[A0j„H0©¸¸øÉfEÿn†òÆmFQ¼$xŽã†¬ó;37,‡:F_§+BCH±lÆž§nø0Á×wÅ $ ëˆá’0„‚Fi‡h@0ßÓ`9?òˆv©€vþî-lEÈÆ€ýyÁkqÆËˆ[˜›œø„6†Dí¦>X«d*ax'-ÿ‚@Ú|‰ñ9¿Ø Pòöö.Mþuÿ!ñ@Ù­‚hüóºn¸³˜§&>¤¸óg|›Ql€âýûÙjÉüžgk „¬ #ƒF¢è¬äÈ4ÓnìGB.NV"ü V²Ãez·» \xH(¬ÁB±i Ej>H–^…ùç.0û¡UW¢úê_4|Zbĸ™çIÆxÍu•%ƒÇŒýRÝà{ÌlC »Z‡éÑúîæM°Cj× 2¿c‘JJ: ê7³VIÛ;72s¥¾ýšº” I½-‚Ö®b«è.ñ{˜å;°õ0®hóç3ì2&¸Ê<Éÿ2ÿh÷'G¦ñ×`‚›E³$lXÑ2„®;$µwu8:"xtŸ"ÔÈÄ\9'xö#éîZÏOZdÞG6û‘SR K^àÉïÒÙ)¼A€/±9Ê¿õH(é¬ÑÒCdÔ©o âsœ0Ö•Ç¡ð¶E63Âw¡ Wj¢䪬[)5 ‚‘/76Gc—Z!ó!̈×DGd;p=E--Š7Ä7‚82})ÂÂ̲xZk”ñwi×:F"#pEÚ}òæË¶¸Þrĉ瀋ƒPÆDÜ’9ûãÞV¹Z¹@!;׆_ÍÍÊJЭŽ]£VAÁy±wPõ¥A®óQ˜ÈYs“‘0s€*Bи f” RQ¡Î–mE¹%#£1ˆLȽ·ŸŒÎÀ€–nèL9Ö¯—ï3. ¸NH ð?ø~ÂÇRæ¨[JQØnŒ‰1ñìpÉÜ/{Ù­ –o4*…㲃¬ùRÉzû ¾t¨µÓþò› âQ[+6!ÈôXqçFìÃõòòº‚OÐRÌ·¨PwQ=.¸øNOŒQ™WV¼ Ë=\}ī㤚– L®å‚në:3NŒžK‰ÉNë#\½üvd÷Œ ^oÇÅ , ¢9êí>N%î-`4_œd{Nn,ÈŽóñe¿éµ™½ú3|Q³LxþDÉÿð-;;ý«ê<ß ™ñ@ú] ‹ˆki7UC?Þj¹)gkÛš,¯L^V–sørŒ÷&nO*žë·ª–BäÌŒAÏû»D|ú•­©¹Àd½Wæ}Œa0Üü‰™\‹ø¯æz×¥zîÓm¢éws¨Ç^CI†Ë7¬0èÚ»Ü8¤„gýq‚Á´ê”Bæ=rÎÎwÜ·¦¨/?ÎÉFÎ5µ–›±Î³²pÒ­Î>OÀa%y˜A<ãeQª»Ô;Z¨+h7%\i9݉¼ñ ì5”E2ÜË.ëLtgúDfúšôL3iÍNÿ³RRRgù–_¼©îCŠy¡ysù?2‘à&èBü/ÎuÚÀ«b­OÛÓ@žèÓ힮ȥK@Ü4B‘:Y¼µmçˆ7qBÿ˜»Öx@¢™ûÊÓ§×okd¼]îM5ÝÿýóÇÏŸîDÛ£{×±*÷ˆûõ“ÄTápaý’¸}ç¦<öY‡{¾¦ÒZ‚Lzn°>¼–àGf‚ûG»Ç½Øšª²ο–Ä«G¡Ùòøq+ÒŠ¹`Í«·ŸEÔstèØ×áx¢ K~u2¿þH­ÊFGŠ ©#jÖc¼ /ä™ÎE2;¿¼(ä[£‰!°ÔmÒ±éáä™öÌàj&ÉBùfA=ñç­4ô"©Þá-(ªí3J—¿)Á~÷õ«‚ïÉBˆçjvˆb{)ð¢-»9‰å»‡ãxÐ qyº$ÆÐz"z¼ñƒÜxsbÀ;šYÒ¸=„T ôÌe®kZ—§Ò3ä“–´Þ÷§´ð!Dº­ñn¡û󺇪-%€=_d¿•;póÁß5ìXÐ,Ä*1µ¡wZ¢ƒ‚‚§v“µä)Òô %í ©y %M·Ë ’øq¼©ÞÁ²[›ýÐ%pÙÃÍIÊ\‚M·7þsРþ›Ÿu“£_åVYhVS‡‰Z“e€b/â³°Ä¿‹ÅA%-˜p°â^œî/A¼†µŽÃ¯h«7¯‡ïæÍÀY×MüžLÒX¹JX‰O‚ªlÆYÙÙq®þ•é¾LY¸ëì-ZÔ=â]]²ÝRê­<‘²T±0fŽƒ›Ukã-4r¡ÿv¨ ßAqÕ•Àµ:˜‹Å,ËD–¹·—#8•!-—)ÃËÁþÁÙl¾¨!{IeEÍPnRCpppRÄ]nëWZþŒç¸%*:¾ØÜ"ynNe‘¶-ÄÇ~°~qíg—p×.£âí ¶ùä>Rõ`E¦¿u8ïýº¸1Nšû rÿÌÑšT–˜AŠ“.÷ÛwÜö›/î}ÒÊy<_ïök°@c· hÁ‚¦ßYÀÙ]¢‘—Û>8‡˜hžüÓÔW¶)ÅYD)û1{L„9AÌî¾™ý¹—¡uÁÊG”W›«§W4ñ ÷ÚWxÀ5YÀh!V¦/+]6ù“D EÇâ¡Õ^­«ŠÔ¡À·ÄW?½mò,ó´—‡€îÁÓ¨¾²@€’V?ÖÙ‰E@ gªYýÅ“í6t©KtŽs}Šç)„W0Äg›<ºÅ\8ÌWô‡_f]­ h0Kí¶byî4¡#E»¢(˲ñÉÒ3V¿.ïuôFÇã¿ú–¥"ks:‰…x†ÔULLäÑýŒ±A~Ñ=œœÌ/!SøšÒûÂÑ8œôGqË,‰Ô•€S>mX@š,l¨=/úððW–,žú“¦<>äÉçP&Òíè÷wUŸí/ÀnÜh]ÉÄ¢¼ tFáxð999y®å%ïöõ·.8®f¬>&¨\9ê0@¶É!{«‘-ãA˜¡<µB’éF¯Šõ ° ÷D38¿Šâý•Y´·„„(aÍ'¬×yŸ‘‘DÒA†ó!|úØ†ŠŽ¿CW#K}jNê=`1I¸i’4›‰ïî0h¶È8vóɽÂýuZT~k/(}‰ÿ÷2ÔeºÓBº9M3S%l;AFÉ¡ÞÁè1³0î[¡Ãa_Ž6¨Ç&¨vR¶ÇcZoW k@Ï ŠÔW ñK¶å#y¥Úd1'íÎp’±åÍYwÅß÷[ÇŠ¾E?JíP÷Wù Ã•¥Î˜e5üK©Â\îáÃRÝëõTT¡oM;¡ î8Œ$!XXx$?bo‘33;üH’eÇb§IÝ}e>2ŒEÏBê«¿à|´>ß»a-o uKô· ½ÝŒÇxçç|ø<¨Ÿþþ <¯½E:^Œ#bKfu¡ønâÙMìJkv&¾çÐ¥.Ÿ'Ù!Ãç'¹d3ÕvDsWÿæÃ41ráƒõ=ø¿¹|ô¸íi»Ü¿y&Ró<ýˆéF,’YSމ{àî.bpáÖ“!-É‚99ÿ!y䂪„—WëÙÈI­ë£­Ë½À¥èKââJ+,PƒqqåܸI^Œ¨AâºoâÏI0yÎC®n½43BGÞ’Jßêc e!¡…HsÞèÐP&*­â×/@SóÝS‘¼Yü¯ Q”Å#ahm Ä*³ègêöc¿~;àÞ›gÛÜNIYî>‘ò?½ï:Ã1¶à? lØÁýiºËL˜&MÔ“‘Úb°·¯õ¼Ã2hfØLÄÁ ÁòÜW™Ÿ—ü>>êÙ%((\–{ÚšPsGã6Q5“Á–ó|WO»ƒEòg¶F²·^ØNx¾á¼ñG …f2H¸â3JºwŒ|ÒæC%¦àû%NŽp’FÒ !Æá4òQ­™áü6áŸ=ØÍ×=7çßÐ+š·Š"CoªÒ æH­ ÜŒ½F¶ŠœÌUŠÎQŠf¢wfsö;'Š¡Æ b!ÆfÚó{O½Ù`ëÎ#a®ü]¢$ÑNŒÉÂþwO!”ùjaêj9LM­bFwñ{Nª²9©Pbm­Õg'Lhƒ^„Jò‚C×çI‡nyÅ}—F?÷ÄJ¥’0å7…un®tº º~ÝdªÒju¬ˆž„3ÃGÿûuà.~ôü—òÄ#‹éd[¾exíe©ïß•æ_XuuuWÃÆ%ezÛÓó°ûâhƒCbz¼È¦®0ëñ3Î÷'GkX#Å|tŸ¶féA›[!æsý¤åK¿ &ËQW‘Œ*³~b¼üÐéÎýî¤À£&»i‘J«a:íõ#/Q}˜>40ùÙüMºV&åå‰Ê ï ,ß5gßîë1˜™ª ÿ}b…··þU¼½%$<¶b.O-·ˆæÜøø‹VêÙËê¶÷"8c_È[ÆAÖîsúA$ÝÒMƒ®_Ï£•ðw²ñV‰Í2㿜 ìñyPˆæÿ /‹åOÿ—ª%ž•¿$ÐÒÒ*,|G ñl'XÜ/oÅ2J*J¸é·®¶–™¶‘¿{×z¸&WaþK'B¯B±¢3Ñ{Û¿†” úŒEC]“ÇR×å÷£à85:î$ë®ÒVM2œ¿V—èdv…üŸâ#£Þ?8ô>´¼"kPËUÎ £# DòzPk¦©Ç.#‹èAÙš D›5Nµ=.1™?s±AÅ&5ΛZ±Af¾k«#\Žþ†½j-çûj†‹Ol.ÛŸ2 pjØÜÏÎ@J[z —’ ±T1\hÏ)…þª.NÇó'©“ùW'ã-3/íü‰gó¹ÑŠÆi1ÆŸ ZÏ8Õa–šN/OLKue1€‘'¤ví6èÒß¾5.áùtýuTVÝö?€>´´4Hww7"% !Ò ÒHw#¥ "‚ŠJK7 Hww—t7Ï]Û÷|ãþqïÃ3Îïë³÷^k®OÌ9×Z?P8L°8 |QC33)/Wb½7ÒlÞgea·¶¬nøÿ¸Á}p}ƒpép5ð­K2lúYf»êƒWÎCz 5ºEzå²g¦@AxÝ©GJ~76öBâ¤_„:ØÉÊãoÔõÅŸw€xÔÕ¹É+Â%ýB›ÙCÉE6íáŸ?3002~zþEù›^9>>þûÔÔ(×õ"Inãz!ò’†ýú¼+MMͨ˜˜ãË u ÞgdÄ66J¼´¶^ùÙÕÕ%cmÍÄÇÇç²ÑG–)ê†Ê¬–Ùº=Zðú¿Rb¤‹Íë/¾Á/éoOò2Ÿ.­È›­)w$Nøà‘CŸ@¨ÉO~ô,¥} }}?†è±-1év!:2éúþYʂ诬Ѫ°-Å÷„ÌÌ>ÒøÿÇùŸ?'ääÄ—[v®¬ÆKãtEÎ/4Ésº§ñÕÿ@ùðl²uNuŸu›ŸŸ¯Yj" i…çݵ†ó­ûÓ¡¢óŠìgqK''®8 ÑPiøíèêk¨ø;ß@’ÂeŒqŽ­Ù,ÁcÞ…{n‡ØVÚ‚øä póÓ "Ë?Xsnƒ’T“g»®ö’¸Lv› †p¾Ôªl²Hê†ÍHBù¯Ë šxþÈe  rêÿœÓýþ¼5•·Õ¾TŸÍìö ¨•½4ÜÔÆ«a>8Ýå8ñ}™¶7Øš-s¾;Åлæåå…6I´QÇàw¾û+[ÒªDîÍÖXN–›_À·z’"ÊN׃ÛðvÇõÔ¥xlñÏgeœJÎîÁßåkEâît´>ÔëËÒ¤‡:×cÇÈyÝßýî/k½ÅºÝ) KŸÞ°ô>*¬4EEG' À,Pÿé”1v&ŠÛÞÓ>q–º7@»”˳û ¾×UÁ|Šöåíá“2Ý< ïìW²ýöey-D}–‘÷4‘I‰ƒUtc²«·÷‰Á£j§ù˜bà ¨ü[eO‚ñ;—(¨íMkík™®_&OÍ.÷„Í–Z[Ñí‘P±Z§Ê-ñ()9 1`,F…(õ%7#ö ß™a^ý ½È×lºέÜYìÂVŠl0¥-ÂÒÿDþ6å+íÑ©¶ÏeBsШ‘­û`=IsIëFψ§m,jøËg÷^}Ã3¨qz—Ìi˜ç±3ñ ,ˆ²¢FÍþdÐGCu`ëþG3•¬ŸáÒ Ÿx|~Šñt÷"ý‰#’DLÀª÷°÷¿¿ÚdÑ-É´# Î΂›}DüVü„U{‘ò‹@à¶®dçÉ÷+-ü‡/Èžÿ¿h7²Ø:< WŽÓ!së´_¸ÕmA)õ0 ,ÏJÇYb0ÇŠ`Ž5ë\×͸Y9ê|ÏØ&Š #ÁJÿüõ«°Ž´š“{j žïQoW©<|ßà·Ü¡žî íÎÙ6•f87“-úŸ`Û}ûDÖÅàZ:¿©¤‰ù5Àv¨ º­„ø=;ÊõþêøF·¤îµÔØ—.âÒýÝÿ e#LÀ~BÕC &«ôíçëU,* RfõìÊ9Ýñyô½ÉÉ ?3+–¦mB`¯˜êŽyÊ÷t+8RêšyÏŒï¬ä\N·49LI1‰9ZcˆØß'&ì2½²“ Wâán’žºIöC‰?oËï?¯÷ZžïN¿΋°sòº>ÛÍÍUwì·ChÎÄ®R5`$0°‹;OÇz+›‚?Lûÿ4aT•z¸ßp@ÇÍ=èÔÝÝš)ÚŠ-¬·ßóüø¸}z~éMå@ƒøþ_þßïbÿ›I“oYÊ‹¼Zÿ+¾Àû+H[@¥$>~þ°&˜L©Ik JV'é ¯Ci†rˉëèØØ¶ÓíÑárKÅqoeñY»Çås’¯‘>v§ œè2¼û«n‹m§ˆ¨ÜY{oHýÿ½¶è¢O6-§ÊÌõªÒÖ›)p–ú…åÑœæ]½’o ü¡a ª#p*ØC-AAP>-‰MãÜõA;|'…Óð wË-þb\ÒIós‰lkžI`×û\.z£Fešª‰ø¶åÖË£Õ#(‘n¤;{¥‹ñaüï~ÕPz!±CC‹Žý=³×3Ö©I廋/ƒÁâÊ0Z@¦ý´ ϧ~ZaBêh4`0ž3–ï,V¯—p0CoH-)Æó®óã7âG¨X¤ÁT~X@Câ.ÈF1Ù dþjô9áqÛPí§é°ó½ ž†=}úØXAær—©ƒ¡PÚ³éúo¡÷ÝÙ$Q˜I…¯‹&écN=]»¡‚ɯ }ˆÅ|°Éï°¥Ÿ*Á©ÿsYï•Ì&Šô½EüÉ?]]üà¾-Àíº´%X‘e¢3.)p Xd|È’¾§2/^¼p!–½µ¾ØŸO´'þª–ƒIÂ…l…MÄŽÈoƒ˜%†Ò 3ÝlE‰£¿c3”û˜T؉bwòy†¿#lËþDšÕà¤j"W§»êû¦ˆL±q`ÝkÒÓÚýÎöö®¸|˜LM_">:Ð%V€ y^ Ñ4žŽ¨$£Á…Ègìeìì.Ñà'›HïÈј/Õ••:7E€°"èMæ|r°ÐDvÉŠýH¼„ìì¸A©¬š_ûÖI—kø]ë7ÍO~/¾èÏŠ—9fl…™1¯ƒx,ÚzSFoþ¾«2(³¯˜ö_˜OÐÜ¥©aª£¿Ûe-žhx¸r¯m`·s¶¹)eòO¬E+Þì 303[çÉ'ßÔßû.mæÈÏ—·™×‰÷v  ¾Á%Ahïˆ 93nðtô?V¼<”†ÔÖ‹BÎ2Lšä  *ƒœ.˜‡°ãTZVBlÃjäûKz3§0Ù4¾ÖFŸVEêhzüb ðo‘й³3þˆy&¾ýäÑéõÉ¥©­±+ àŸ€$Æt‘%'u»ØitOŽJp¨enæ˜Óf7ëŒ;Tç½?Q_Úo ºc/ 4¬vˆ–%6_l •òYYYAl€ák@ &Ô—³5Ζñ’¨Š0¢ŠgÁýòÉj –è´ÎW®öêÔiÒARÙ¾Y×66zP«]WÌx˜Û/Þޏ‘”ÏKºx-N§X]~xLÓÿñðË ‚<‚Ó––FÊ÷òIÀÙxðçÛ–k¶2WF/1_J8lú-•4„¿ÇcÙ¯Û¤â0¨|`?Y"_ã4ßèÙ£ôr´öµ%pÉäcdЍ³ñz?óáΟw˜Q ¹#õU%ZæÅ¨¥o‘²ýŸ–Òk¯‡ºÖÍ;y5”—N¾1H™ÑÝÜ~Š!ç¨Ìvº~?:ÂÓúðü`1~ KÜòW(Jò ›!ñå9ž\¸ŸÏõZ·Œ+ŸËßf·UvãPOL%à5bÒ†—ß¼øªšZY)ä47  JëN)°D†‹‚ÒS/JqŠLq%îk=¤ˆ¹MÞdûbøøø˜ˆ¯qU"4Ìïãµ³K­®iœÐb·¯{žÌïÕ×së/ùî_/Œ9|C¹VNÃ' ¬Òû²ÍÒ…HÊ2¯“ÞAG¶GŽ’§ïÿ! 5©©÷ýU«€b¡i‹1—Q” ý #c‡o$CÑ7Ã. Û"ækÿµm¾Å¯½0fáùýź_R¹H¹òj9’šÇÿÒPj¥2B­{&±ë³»5DßâVÎ;Sœ:,$NÚÇÝq§u:Ô²}oþ{§õ¿ã…Þ`¶x¦x^ZYéÿíÕÖm”Ô(Ló¹ÙC”«ˆkví¾ ýMÁ²3® ñÑR®ÁÁûpÁw¯tÄ&¤§ÇÌ÷·üùú,ïÖ ØkŒB4Éʸˆ©7nm¹?Wç}6®+8Xïe,œ¬C +ö`™NšÑÅ8Oò¼ïA^“Ã+|NJcý/££¤çz¸ôØýïºÛæ@Õœ®Ýá¸n^…§{åú>ÇzYÂ1|5ðNLÌï(3qš\”L¢~/=¡^rÚ°Wâc÷ c¾ór”%á!ç?L@÷Ö,¥ØRÍb`ÅœîÝ5äù°"ð„,Ðfªâ(+þNÿ´âÓp{:ªÄoŒ Úƒ:…ïÏ¿î*5?Ùè5ò9šQêø8X* üév{'& b“_†³8˜‡»ë3HÙÃö–ŒX«Löë ÌJm6m³çž"Ú…Ôdã#ש¢H>Ãø‚ý÷¿”,±nOüþîõöcïär™»™yòkQw¥Ý[C¢Û zmmmÀF â<Ð\ªžujû󎜬l>5 Œö4LâT'±5meѽÅEÿY222oD¯WÚÑa׈֓’Û‡v°®~õª‹¬Ç »#wê܋ܳòÇÊDáý7÷QÚÈ6ÿ#`x7f¥oE®Ï÷b‹Š8J—fßF~„™¬ŽiôʸÀÿR•õ¢ÜŒˆÚýjá~†4MœŠò/”h;G¾¨ —‹;à´Öý.¹l‹46Ø÷-³þé íBŽž$ö# m/»¤‡K3«EÕ'nf#‰yVβ)³ìÄ©tšŸqŸ-ɆÍÖd€Á*›(f~Uíµ7‘b¨ï…l2Æû¸ÏN‰Æ"ÿh«¡Y¹åôó‰ÊëÞ1{"Ï!óÿШë=ðÙG«ù`Új]–C×ï}Ï¡ìfÔç7gº¥ˆ¸°Ý«æ=bs i’‘ d/oÝrÕ(ÍÆÙ–ÆuC©Ð£fhZtÄ‘ 9¤nWs›¢Šy3Ûʉ ‘CNµ‡}cöþoa)ÇߦÏîG"çD¶/J]·¾{í«XfŸ›o ¢bXµ¾êyž>BwÛèGú;AÔp¯[KbC̱%1Óï@å·Ë«ÒþãîF^öÉãïÖOð3°//ZBïúª2À´„ ¡­l çÇü*~.ÙrðåµoúõÕsËRÕÜ©¹:7¥ch­Íø(4Öÿv( ±°°@V`¸ÆÙ4SÜkÀ5WêÃÖÜëÈõÄ•ŽÖYç {~))* ‘Û5Ø«Ÿ^ºm¼ÝuÉíJìEÂÇ&bæ³ ­¯l8h&'riò=S­jpÿþÍ}j/×n±ycFÒm x†¢Ôí/I÷RjÛUÙôhI{ÄoJJín|ªf¥Ã‚,ˆÿi*äˆÑõ|ÝR„§WñqĬpLbØzþ_6–Ýl‰Û²:ñD"vv÷¯áw6åp¤ïÇJq9L¹<ïðn¹XFdƒÓí-úÓ!ïøÝSúöaª`ï‹DÚØ6ÚæIʾª`aU3E†Ë(«êƒšCÜ3Ÿ—¾@Í]7ü޼™ôûÁÉ?œB¸>ÛIÈÌÜÕÆ´CÿÀ®ó®4'Ó݃è{ÊÇ×W¡_aý¬È°<%‹Ëßg9^1Sšû/ôJ-ðæ­{jYFF¨`º5WWñÝ~.LÃÙ^Iåûó O_–¹³j4T;ðÒÍ\Y všo/¢*üø8ݯÓ}=øúº¥éÖ|ŸŸª>¥/̰©(+{ø$§ãêdS0Ì­*ؘUÐtç›äKXöí8jß>R+ìIXäp`[W¡Úó7Íü÷))6ßK¿±,eyËÇVà‹æ;âT©y ?¿c¿fªì5÷ ü_/º“·7­rƒ‚–>EWØ„ìî®ø}QŽF 6õÇ«\ߦ{èçÉ`¶ä³Š´dÔÆÓ¶²Ù=Iò¥xü½ß è&1ñþµS_zߟôßÆÎµ6´/"c½ÚE’ Eø¦É¶£L•ö“8`ù×Ìé&±å¡M7 £ûÈ\ž¨›šìŽ—“C+uü‡v?¿òïœ*{ùb¸ð"áäuCÙ´œ@­û÷W•x+ßZL>žJRµâj» Õk1ÍškÍvH¦‘(/¯¯âª WÚ èî˜Ç- _ƒƒ]Eƒ8¿o{T0ú)wâ*çì _V5£É¾ýíE Œb¯Ë—Û‹­a¤Îxêš9ÓÏÖdN™ ¨n¡.mÔø*®8†ˆ}Xàôûx•~çꆘÀļPÕ2çμÞÃ8 Q_‘^ž]E« oM•çÛ åPDiDg½ÜSl†ÕÉ\Æ1bS-߇K“ Á<þ´ ÓÒŽ-.ØŽÏ:aîΨҀ©[ ¼áLr´‹iª°QÑa…ÑøÆcQ¼Ên‚:ŠkŽ¿ß›nWfë‹_Û­Žû_=mUƒ3<ü×i`!&îµÿ;Á°êí³³¢ëýD&סÐ'ÚÎCi¼ý)Zmaiy´/=½×ôÔûCvãežÈÉÞï:Ž×ÑQÞòb.šgÓàU¡Ž`á ÷—Ë)¦1A‘Êøð{a³Ç´¦gD:EzŸüuŠ›Ÿ×K/‘-¢Ü¸b#Í7T”zΧäæH¢Èþ{#6OŠ)\Æï³³êJýP<÷‘Uû6°}L¼D¼( sÎÉ€ó´ŠãÅ_ØCŸóe籊ñ*n//—éMn•¾Ç«­Ò— xtw±HÏË;Lè÷$’YUŽ®¼<Ïöù!Å·¤!@)̯&…zm{4õÃ?ŠÝì $]ö¶¹s'Ɔ(­Ñòÿk8i'4b…;7)È<¿WŒCNæFcÓþ9¦­tÔGpÛL·Üù’bò;©WáwÊ­¿Ùé+¼1j©¢À’¬6Úz‡À‹¬KÆ·0§¦3¾ a\‚‘È‘Qy¦çOó|=4?¼œ˜¥•”¤$`RœH1öÜö(vE÷Õd—bÃt‘&þÏ€—à2PÕçÏÀÁn/ó§‚9ÐYá\˜!xô}åãå–ŠoÉ…(,ü¯î¼Êw¤ÍC§Î&1DðñåN¢//[‹¸e Ÿ“¯/Ô1Itgó½ì“ ‰&žqŽÿ1:xmQ5õ‡¥cÜ0 œßwè·wÛü43EÖááßþu$EÑBUX ¯å'Ñ„òìQ8¤\’š/§šçk³Èjøm¬:ÃY¯®Zý¼æQ(Dr¹%¹pôj~Óî½>C ^ðF2nðtØü«õb„TšŠ§0IÉɉkÁï@²%Ô®xÉØ¹Ƙ1r¶õt]÷çS|?\‰æ¿¡àþYQqô“ÛlªÌ¼öG²¢9€+JÇé‚` }xièÜd57ïÔ¹;]ñÚò©[HW…MüÖœ´gQ³qÌîm<5n¥£ýÕqhD¿uXúqÊLc„ýiHE¦Î¿ó~G¥’.µÀ‰ÄÈ ¬d†ãsÉsõ˜9‘*˜²g•Øua4Šrs’¦ùƒò˜ofÜÁáÂvŒãª²t‰7çæC¹§Z‚ZÖ›KÔv¥/s×Kd“á7ÒK—¯W=¡ê}¥óâB--~ HV+s¬´ç¥Ut:¾$û×°A)û½kÙàÏŸ Îü,1ÙO 9ñXj̇â+z#äÂPeu}ï}V«3Õ˜o9Lõ¼¤'%.ìGÒ«(ý/‚lŸÙÝŸ¬;(#2úÝ=CDà‡ýÛÒèsµê£0\¶œ¨™ÍV ¼µ±B€ß¼¯™÷$_¸0^}£tùú’g¨Qôð9]–œ³ 9%öX!šÿõ÷ªLZ1÷­`›gÅŸk©˜ÃhÜóüöy;'¾>Ëp§dÜ,©›; |ÒšB«ä™yùž±]õð ËC¥ôw"ÌÛÞ\¹«&¶œî ™óiÝϧ a‹̤B;‰á·›Ò,Ú?>ŠÆÒ-‡Œ¢ûŸ§)]-6Svu IOZl «$? ÍE>ú…F›ŒÞ„£< ƒ™Õ åqÅ=+·ìü±ßÇ.8–¨2:i÷ˆ…ÄìfVKæïû¢¹×!ázÿ©þt¨˜†õw¥í(ÇÅt"{bzàøeÓ%†µçX î–ýÆ5h(ÞgãÌÝl1Ù’ÛZs…ŽnA>Û÷d¡-üòÒ[5KlÜEò<^:ëë…&ß¼‘v,hƒXG, ;j»Ý<<@2T½X:øyqsrT®µi1YîÌS„ÿéê‡ÚPêXFNN`eß‘#VÃn öÙ8.UVc´KM(ƒà7‹ýúÑq7€b5¬ù»sÈÍ(E•*Eùj¬ë¶*••2dØÓ.b!ÑÏ 4Rþç1“Ad^U%–l¦?r]MŠ#q§>ˆuª‡k!Óü×bÅÔí¡¾XÕ ÐÔÛ“êc}PA½l9QýíìåRîC{'ü™L ôJg\,2D£fޏ›“¤pd³ö×¥áüæ¿‘ÛZÄO6ɹ—ÑóòCºûË«n<¡Â©[¦ÁuK6ײ‚¯ýy@y±€ú³¥!»çJÿˑѼX øºº*_/Òß ¤%BÐ"äòn(OS⸋~ƒ#*\èd#zng¼0 ðÌ‹YˆøÕ4¾ÙŸ°\»ñ¤Rþµ´äuu­oɘ8Yú”Ô€çêœG'0Ùy–0‰ñ÷ìó®ýõû]{ª-õUé tTü<¨i=fF:ÓACVéåÏ—Ýøî[C€+çt›|[ß`[\äxóYż&Odz¶ùGióÔ6W‹Xòœ”ÍÊH¤oÚú'’ZíÀxÄ1„<üª6t(û™×ßLá`j9›­v5>)RwÖz|aïû~¶;Â^üä©ÈÛÓ¥M·öƒêìÖ}¤X¤<°ÿWg÷…ãYu}QÉ{;û*OÓóÀ[¼o¦Ôzu#-A^@˜ⱊ~Žâ³ê1kÂ{ãp{„Væöƒß©…TbŠÂÐÔÿ(bRÐÑçËeúÏýøìàD®rÄÜewŠêVK•ðù¹Þ€öE%6¯ùöy;E{ f0»îÛiï“~á~},tI.d*?U÷ÞF—Çkiä´RT—÷~Ùuß[ù%Â\×{È~-ÂÓ+SyÖöjúE‡­îo¯ºju,*¦Íjz#y]=N›'îOHêF`_F8k+ÔûþøðÑÊp­ íòH¾ù¡¥(pí÷—µ×8BDVFФ±×2 A^†J½Ÿrî=·ûâ«lx4¡ð£U„fSB`ï°²ýöEŸs"ººª‚•ðº {ã%´×*ùùȧÓÄ·ÿ®Jü>“fIfê|·Î?«¦Ìõ3ò˜»±ÿ˜Þ~©Ÿ—Ù(SîSèñ)Üäê$ëIº}àû)¹LQ¯/Ð|Ï2~V¼›}F@è½A¶ZM— Ж‰éÏÁU Â÷ïL\,}ÞëD­­ñ¥QdüÖ—Æ7N Y&>7üÄõ7Ž\PEÎßa”Æ&à9¢¨Ï1•ï­j*B±WAL4^çcN=˜‘WÖ—ºPê@žj-½ïÏÝw&úQ–Ó1ÆJ°ýOÞ‰6Ü‹›?qHç@€ú l³ß8øß?EòC‹Ç‰™“{¶Æ™Û·X›û@…5x†ô‹bU>ÚY«q >Ö¿}#è–À])=}ú ˜1Î í ¦2ON‡Ôõº7˜ïúƒþ~/Ðèy[=ËpiÔ„!oTÊᵟ¤~h|ß›Dð 9?¯¯\ÚÅ€ÝoZù€……Ç–×¼ (Û6¦·Ç@‡ùŸØÔ=ª,L¹´¼Kï­N—ý$ë+ “GüϘ~_ÆËçøåéö(3 +|¾>š îµ`[Wõ©LCÀý‚¤a>®`ÊŒ–oªìñØ5|Szcïº!*žDeÒÔ¹dþAÁ³ ¡oº¥Ù‹'ƒ9hž»<¯›+¬´+ç×bÂ\±ásG$Á„¦ê„‡›zRU×AÉÈÿSWŒÁÀ_å;/6“ò[cap,„ÆÄ .ø(î¾Lávþ^e9ɵ4' ß„.røfÒTïƒIÂ,Nî}$ŸûmiK“†½×è½uwšî.ç2¼ßúIŽTÖ4Ý¡<"j" ¶½½}¹W³»4 ;eµ2}ªáÒÂUÃï, wáq÷¿„½œ¹°“ÔŸÌË‘(ÔA¹¿^š÷Bˆ HÂP€Ç@¡áF,Úöõ™ÅdPá‰×?ß{Ëw¸¶1ËE ÜjïÐí.Ø\´Fþ›×âÒ÷—–Ãn_Ä‚‚vŽ¿¬Þ‘½ï•Ñ0¤÷‚G§®’'²¨À¯'[†*lÔ3%|F\ƒ²Äfk8 YðâSL9µ=ëQzßÕ‹¤ú!±£>^¸qÃbüèÕ¨EÚíFõ¬Ó“»ë³»ìëw—;\ß§öZsÿÙã0¨ü¶Uçdz¯N/ó!1à‹Œñß6]¿>œÿåÝéÞŸh¹ÔµÇ¾ÏÉqþÎùäó-ü”@%æÝÏ×ùp7r!‡¨GÖÅ ­Ç³Î­Å5ˆLQÆAìRKât’›ÎrH2Q\Æõ—’ÂôHJ*ü¯yÍ•Zÿ,¾¹9ßkÎWl*)¤Ä{õù…Œ35¬êÑ—ÿsòÞ› ðÍw§Ê‘º»»/· r8.´Ëéʼyµîû—¦x‡·æM?$&öb•gßú/5]Èõôý “±þêÑÜó¨ÿ••¢ÍÐW³ÕÅŸ®Ä½Ò+â\Ö¿f‹ïó8Ù€‘><¹ •©óS~‡rw´îüF{ßoùÚ’Do`«ºÒjGyÅJ/mº©ªÞ©[Ͻ™´Š‡’ ^Hï!XvÆpš³KvvÆÆeŽÿÐßÌþúŒ\+ÓÆ«8È8úÏ[OFrÁç_ý÷¸#õÏàvÆ÷Y*ÿyL%ä÷ !¿ÂÐV×SLœœJ¾4;½Îv³cÓøþáK‰2¡B(bFÿ!Ç™ÔR 숨Ò^ù awÑùY¾4Ä&¸Ò„UðvždÎX¦gé—’-Ÿm`°à_&109Ôàç.E` ÃO)¶71ûÐXÿk‰û íÒ¤^uxY¨¤Œ˜ÌGž‚*Ô…¥À³›(ŠÜ(t‹0çS 1ÈÇAjÆxtÔºôäÞNA¸kd…§5 rº¨¾¬ˆ0è  €Æ,¨‡1Ø÷sÃ=ȇVh [ ááÈÿx ÿÿQÉÖÈÌ‘ÑQ΋ñI[Ç‹åùë%Ê ‘8WÒ5¯Wÿlp†§Æ)yÍ:ô9Zçhá -xëÕRõlpwbñ…¶lÝ^õìm¶ßßUœÔ¿QŠ  YõÂNQÇì~Õ%?¤)žÔýùņӚŠ[)Šêßø’B[ЮžÒæk; Zr‚¨ôÊ¿=ïx®Ë˜nÙy›cÏ@JKüèF’ÿ…y@7úæ‘k4K”½Â{HdÕÔ‚£9Üßuà÷y¨¾ê5¹ßùî‘÷^/o0xbÒåä­DÞÿö9Yï.¶PCzÕk1À¦®ô§UG·9uÖG6«º|•Ç.ÇŸá';@±-XD½ÎT[ ºþþê´ÆÃÞ¬Æ?Ü “_”óKó¯[4‚]eŠ‹û¹?!Hh1Ù7?OJÝr Ý[u3žž¿;ÃxÐ,ÀÅÐnúß'òÚ P›BSÅœn,qž~Ù|z´³:¢Ïý`éœÚŽ…³M«KÕîÇæ4žwÆÀÀ¸mÀjæðEr?IDU^^8hƒÜÅR¨Ý›ú˜£î‰ËïwŒŽ¦Îl-éÒ‚cÈHÉhÿƒas`L|·cv TÏ-¾§mý;.óîQrL-“G¨ ýG8éÆïÌWðÃ6Cà!ò}‘2á‡ß/“;ÃŒ b[­+È®›òa4<3ÍkK¿Â'wDQ5pšÎàCe‹þÕ$ÃEÐp©Ú°Gr·ÜޏšZõÀÜ6µ¾FIY0ð¼|y lGÅ'Œ þpd  8Ô\öû·ìË53]sÚt±,RÍ„;x$Ìõnq¬’ÐèÂÅé[N€Sû³acc³Ú•@o2ð,É ·qý'š3ÆeèÜ£Jϳ´uÄÙ3tóæ»sCH~6xTÏMîÕ ÍV#àJ;Ô±ÓѲ÷Âëxyyß`bòÒ°a|­BáÐBÕk6z‰ð>ßfÉF AÆì ÌåþÖ§#=ˆôïYö#Xk~Bî„‘¨¡ëàÿJTøÐvÅ,q¯?ÿ¹±÷°Û‹–Ö"ý·Ô¡è(Á‡Ömo°I…Hù<Üo{;kpÐì¦÷.™þ¤®¶ËA½¨0t…À‹·/ïäðíÕ@wÀzWð7÷!H¨?x_Ÿ$_Sé,Gƒý×ïÀ5ЊyîF-ÞÛu¶ƒD.‹—²«cÏ{\²âòŽ–²ÚŸoXã$eõ÷åúÚ’ª9-‡Üä7–Ì3æZ„TôÚ®ÅM|-žã’`“ó_“ ~/Mj]~ÑKÆì9ˆ-QE5 ÝÜ£nŒxØ¢ÜØY Ðþç¹dƒooýß’ñ£B­w_TR8.&Á`[a•}Z/‰Âyû1¢a2#±õCVÖ»ó½Ù›;ñŒ´”ÈØ»ž}§Œ©ocÁ߃¡âž÷ró¢Ñ·ø)$JÓ¡d`³è¤¾Ã$ábYÐ'Öð]$CFf\œ›gþ„ø/Âø:ã(Ûp%ê1Þ#Ð _nÑ'SS;g_ARøyYú3U„E$KMâz : I10°yÑÓõøØ¥<Ö–©6·ã²(:@Ö]`è3úáQgà ÃÆ{+šøFÝŽßÌîëÜ6ëÏv¦Lw“äCYûSWÂúå áF°!†ö?’íù¢’™ù–Ó°Zo¿00ˆl³K—^c<êO°‡o©$ñÏOˆ\Ÿ˜–†-DþH$Ë[ZìQ„k˜ƒP®…üRAŽÜEþ‹··ûåм ü0¨êú$ÇLjŸ~JGeÑ«eC*ù±:Ú¿°~Ø58Ø \ Y+lüT¾bkš`ªgWÝvÜ·ÈHÓÓÓ]‚#rÁ—}+±¼ÀÅ?ƒûÓrKSëb`…ÌÇÍRâì&+23ÀTRb~Û⻿ýh¯ ã‰/*âXÛØðEYåúÜpíÚpkWð@Iüº¡-8'œÚ½éz¦RdE×Nʬ–)O%É~y—Øú!ýóûÍA´žäª1"^ÙP¸[–sµ´Àn6¿‹}y 9$³ùùÅÉ[ˆˆóÒF£ñ†‡»Päú&M‘°ém¤\þ) “m¿æ%54ödöŒS“tüéÚɉ(oè¯æŒÏŸóÏâ±àxtí‰Ðù?[CŸD®+×›íÆÉƃõŒúÝhzê6_1~åk†Ÿ§\¿ôŒŒ#K‹£Ûr:¾*È/û5P.J\1ìoÍM»¶ÈI+ ³i«)¥Z¾ÁÙÿñ+%ïÅhéE`ÙÒ¦c´ ÷TZB¿÷;GöÜyHÍ5ç_þÁ‰>äÁ0ˆ))èÆÃ139ùOž³Õß®' CNž ˆzíg~¢‚Âbxé‘dX£&1öŸð^2·ÛýÛûÑ‘)ð¨ÉïâO$uà+Ÿž ÷J¥+ø¹á×ÛHMMYäÃ@,@ZÐõB¨”Ý©Žç_”iii -E#뽚åÁ—Œ×<×âºÅéO1£a9¸çXõËAXr¼Ò j›RËÚÌn<¸Î-Äo¿|ލ *Bð±×ތվEZNнèF_Áû± ˜’ªªÜêŸwG㺦ŸìÆ =õ·ÜÈz³Á$³äŽí„ ÿÈ‘Š¸ò6Ž3ÿ¼Í/ø¿ŠÏ%®ÝÄi lG¯%P˜×º`d8N$:::Ô§SjÒ¿$~¼Ãm¶á'Ä÷©¯V,~§ºmÃÇÊ–üƒÕÛ«ïÝòÎà g¨󹩦f«ø,–a½×ðoŒÞÛúG¸”bá@qgÔ"Â.5UÙëB8ûì` Öà»kZîÞUuÓعËö›udâbè[F` G¦‚°Ú‚.CÈQVY#™ÛÔ©®”M*Nz-¢ìÞNJìòâBmÀ{3Uœo–þŽÖ4ßjþ:²í¾;ïå$äõˆöÝB›ñCÄP¼8eêó“Ø^Gh….•L³'[|bÅ'Œz,ó5ôQ̈\ýã©»k`PßÏØ†˜÷n¢›ks¥;=|©kiƒü'dtôô>i6Jjj ¤¦3ï«<{f5úõYÝýíL•¤™tMPK ¾÷i Ý BJÍ­×þÜt‚øt†PÄAsØŸwÅŠÑOæŒ ‹ ªzø ðŒ¸H.潨4`Ÿ5PSUÅ/Ôµ9ÙèKÊj¦}|û;]о«¯¯ïl³vHí4¦)Çrš¨ ×þÌf ó“zŽTœÃ.zÈfNdûüÎ#îæ#Q7!‘š°ÃÌÍl¿8íB:þÙq +ðÈȺGÕ¥û7ú3¾ÕýL¢(o›/¤D¸ÄöcQâÚ"†áá CçîLƇ¡á ²™PH] ª~R1šO2yýÎj¤çKj²äÚ%Ù`QQF‘ó ^ÔÔƒ@ Ûqb¨$·Ö¾Î=“5ûfH‚AÜw·Yª_ñ`Ÿ¯“,¸xFµãì‡B{×·¦455±Hy‚‚hÖ8ÇÇq¨(+»îœdõI‡Zõ6J"%´~F ŽêL—ô*6¨²¸ØŸŸ¨ø;éÜQí¢·SÒuðÔ¡äF€ñ ——/_z;ôuu)õ$±w‚™€’ W•³Žsµ Ô—´“9¦¹°±ÂÍ_èWå*)}Bx¯³1`ttA+€SZn; t{CC—¢™ÍæÅj 5Wò÷›&›slñS¸Œû^"¶Ž}×J“ô«V¼STP)6æR œ¤P‰÷d{4Áüõíù틽½ªçÏ%1ÿ÷UÚPcR¥ãl²¨Û†Þ ›̺?Txa(.3ñ=ÑïÙoJ±ö‚œÀ¿uèëæÀrXv½§¥¿ ÆÃ{ÜýQ¿Þõ .•@E¦ÛxЗÆï”?éx’Ø$uÙ:ËÿÝš£ÛðóC?´ÙÁkYI:»Q>¯qšÈoï$âÚ½]†Î¢JS1ñ<\z<¥é’®Öh!;BÉL AFqf¹-r{ª<ŸÞðžžÎ¬‡°bÝ´ÿ×ú €² }½ð@)ÒBl˜Ö6=w§¡äÚt‰‹‰™¯ñI,´wŒ*É•¯4q5üû£ ˜¡6÷ùGôc„0dÏÝàÌ&ILü¯$•§rkTý¸YÝ­‰Ó·Ñ}°Ì•{sÐ’hò~Ûp.7—€äÃ\I6tzý*y%vÁw‡Sêz‹¾¦3 Ö쾺8-(¼„¬7‹×¹ue4÷ šHVðŸÓ­á°ßnß¶Š! ï}Q½2X aù#FY=ÒÆë6ÒŽ¸¸›/ólPOh%N° uK™89÷~ÀM^¼ ÿ¡½ ¢ßZxx¸ˆa –£™³»ôÐÑ5ê~*¾9¶C CÒŠŠB‚4»Ü¼ 5]ȱpl‘M;Z¡nÛ7Í\ʶ•€õ¤ø-%á·'ze­üaW@èoò™ÿ/̾ÁÅÀ ããû@ûäÍáÝÅ¢Ö8![{éÞbKÎ@–¸é…`BKÁ˧—³‹<¬ÒË‘_OZ¢.™$«c¢ÝêŒÞRKgs×CU´Ÿ££2ÛÄ}/âƒT< ‹9jffæH“&ßr«^â ´“ŸÅ†5#êÔϵ´à‡‹€d6þ;¿¹ñö¸×w‡;SÒ/ð,ÔËèû² ’ÜaVÈûTÓyPV®DБ=0Pµú TÛsþ‚´´Ö½ðŒÙÛ]\È×{Û¤ï—ÓÊt’QvyÔI-ÉŸK’)æ#ä8s»¼"ÍÂpæúâ`|Ùw­‚¸6~BÓÉÉÐn©jÇ Å?€ìê=Nº4Ù;d$‚fùñ !x»Øôj¡Q4Çÿ8ú¬ŸÑlšÏñŠd‘Ç›GÀn-­\-[â)Ð:¢¾§ßlPÝ5‚Ïebd\÷"7•WPx^b$ªSlБÊkÙ•ÂCbÍÚ¼”ÒéßñØÒæëúU"ŽWžÈ?‹8´`ÓÐc¥ó;õðŽTø­ûrÁR¥sïòÕId*³Â¬t°•T^KGFkûÈúh=íØE rÙdC´ÀZjñ ³š-é‹Xd3pQOw÷§ ø}_–ø¤¥e9šU¯¯ƒH‹ÀËþG56´t“²Ð@³Û f¯/GRo|/ȦcgïµÓq)«ó XWf1ž±ûØåQh0^áåà<_ŸdÝŸî³+QéhÙ<ágÒtt¡Àƒ–;Ló1=K—óö®M±fif¡xw 9ÁøwÓMâ§Û«åË·#Så‡âÿà¯PÃY]æv6g^ðGƒRGbàå2Ù÷w7@Ͳ£ò[ËdMä˹›JëUõ¸QÖÔ8Í÷{Íw˜ú?þþü‹ÿ7h@TcËÕ E÷ý¹´šÅÀ uÇø÷ËЀïͦ‚òsèSNêSË” “¸ú\ccž-|2Âocr §kV‡Éµs÷eKf€ÿyÙrçy¹/Îyß!Ýx'LýæŸÙ:7fF`mÒg“…áPˆÈÜœïU\æHK3*4ΓWÍ‘2Ž ºz××§ê{öw}¸#¨Ùÿð¨S#7¸óÍ©øÉFÝKµ¸:ºÉ'ÐÛ’p›¬ +R¯ƒ°e–”œ·ÓÑx(q/RdŒIĦ÷ÿ(5Å|‚£+gÑÍÒi¶ú]m­‘ëu%—€<°Ÿx{¢[I“bÒŠ_Ÿeø¾ö\‰È‘VoðÜ»ÜÊ—Û·/}|wME9RêÍ*qÓköW”ãÐáí?–„íø¢“ÍA ²>?à0x™.¡Opô 被¥_aíåÖýq2UDEEÝÿŽEƒyOHL|âí-A´’/EÇÊšJꬮéßWnÙ °Ì®St¸Upjñ:× QÌ3ü-–󠜜ë¿ à~#Ûoßü`¡i¢ÂÂryÖ¹_r€îþ‡úe|°Â2[* }¢Øßf€<³í ¶%øóùË<‚'½ÉœÓ ^Ü{³5çcíhŽ‹ÍY`hÀz_~½ºb6³­KÌýÆïEݹ‹]ówÅjt5¤»ü•PÕ%Ïã¥ï/áîÕæ­0½–7ü#¯ÒÆ•+YƒG@ýØ\.¯yo—V‡úô»ººrôj„ßßp˜4¦ÒÉÇx[I­ÌJ]­@3ñoYµP?| ÑàN¾\BÚš#‘wú$ë2ë˜M©%wŸ œÍ ÿùþ¼ X²Ôþ‡!gEˆ(}uÛOUù™iDH¥nþ;Ú­d4œ¯8Zn©æfsú¼Lª÷Rš’ºzUo2äY@„O‹F¹ÔAŃJçÅl0ž¾î»² ´È0¥æãfKäpSŸnáÕÊá9ÿ›ðßÀÕBg%)P–­]€ã0órß™¸Ûƒ3)Ãùüv*–„ûëã0TÈ€gSßzþÌó@ðèQßAS'sŽ¿l¹EE71øHÙÎ8JŸýºM‰À¹ðm<­ÂdÅÈ3L.’·¶¾TÞ¾HÝ·U|=ðêÄ€i/äããƒÊædÞ‡ð¹mǶÜÇÍŸ ëÇã¥`\®Ìu·Œo²Ÿäz$ð ˜ÙU éË hKÇß1hCÞéþü¬oöesóÕ°ÄÊ_ ÓÅÇSâ[T7 ;í} 0QÆpÿ‹ ¿ŒÌ:ÊŽdÓÞ}ËI)‘£tÓÀ« ?¤¦¾’d›qx¸I9h’´RèÔ8¼‹ dЉeAA¿û–F½ç^0Ô‡Üa¨Ø+ƒRù/¾?ŸàkZ_[;Œºmëñ âqþƬ.´¹€ÔÿçF)‡Ñ+›ÛG‚Kâ{à™º@xw|`Ty5QD–!ì\­]ñuûÞŠÍ_yoæ°ƒD£ò[Ö€m•*»q½WöI4Çh¬Ÿlô“‰º2Lsåãbðm.Pû´¯>¹©Ì¤ðÞf|5ö€cìì›Æ/#zR—6þÿXM £ Ý¡§‹‹ ÖÀ¾ÁBçŒ/çEN‘zuܵ¸ç[0#@?þ|7<ê6¶wÝâx­{ì‡v,TRVÐxØxÅÄÀ G¶`“%‚à8û{ñ~ãÊ:(%‰ åb×ÜÜóI‚4ôi"Ýw§„ýGWŸ¥ßÞßòxr00ÉBR/ÇkÖ±Ì"¢‰&óü9~•ý¤5Pøç² ¹ÐbýóŽœßeIÆ^ÒRVv©éÂìÐŒ½í¦(‰½?tUŠfòé¾c:[LÔÅ7 ]œ^¹ $Ã2ªÈÖ®û)Ú"ò2 |XËëYÇ ‘à~û¾À«u`¼Z›.z…¡í¡<•©ó>¢ˆ‘¯–%VdX3` ÖìÏc‰*qú¾êANbv¾Âã —ÝÔ¦L:ù¾¸Æ.%?2:WGÈLþ¬¨ðYŽ Ùšo¨·6O9ÛBèîñ1NìÊ©;ÓqÃT¨²ótfOîìïøU üFšŸïÍÓl¡ { Áþ–6+ëè$We"¢,%ª÷ ¾—)wαm¿¸=ÉnY9PŽÀnî!%÷¹’,€ ý`¹o|Átn¹«npÑÍz@€.¿v¡ý ¶31Ý2Á!(˜„G¯´ÿÄî_ðgww7dÔFœœ Jö³icè‡sý¹ü¨_‘ëd|¹AÞ Š‚™îGÁœéÇK°‡&M¯Üi^Ì Æ ,y± ø}Ó@ô0T°öº 0H„lÄ=~æxl Ñ^Ÿn?12¢ú¹Šš%p$Ñg[²€týík2þÃZWu¾~"ß_Ö·^”Ê ~çr^4_dÑÑlj!3·“…ÿÇÞõ•~áÅφ5N™"¯û.4]üÞèÊ 9cI`¤CÜèã¥lɪ³3%à4— f2aGº£…DjËýYé‹bƒ$\éÛ÷~#ð/ކn*}ï„ âÑŽÒs’V;gÙ´P©õœïåý Œå-PË‚Nû–Âõ‚ì“å$]`qN„´äJL]x9 ÖæÂ®óäc¡­Ÿ€ÏÝ?³~»¬NdVçó¿tqªßfúG©âë[Ö—KC*Ô7 ßoâäÅû;yÐR“£]ž'zRJî-çŸ= Ï4èN„f…'÷IRORØxa?R&3—ü1³=ƒÚm¦M>ݣE5–W×;¥Y˜Ä9.‡KßàP‚` "•ôøþý{Üš‚ÂoEê4DW¥(ú} ‰Ã`ý÷†õ¢GÂ?^„dKÒJÌ&G­ÅAMÎ̤€Þ˜YÑÀÛÚ³Fð°^â¨Ø *F| »‰ðg}ÓfµF\Ä\FJ`A¤Òóò&ìî:l2ÑÄÍVÚ4ù]lld8[ÏÕ¾œ*šl\Åæ'8ç•c™`r¬çõ`¼”+·ÐÄí›7b‰ÌtuÐ|®(+cHú¯%éš@ºJ§Œoݦٲ¬ !~ù„ =ïG·Š7‰¡Œ€öPï dj§Ñ£õõõ_O{á‘“÷¾%ã§à>=Ý!Ñm¯7âqʬ۶„Þø˜›}Å®tvŽ#ŠŽrMùµÖ©ðùú*zãt•äðõ^ó1I£(‘åaÅ~‹í ìÁ…gê »SVãzˆ½=P—•X9\n{K%™žáT½?ßPTLçæC$êÀZ_S÷à>ó݉ÖsCŸÞ§ÙJ—Ê¡o-R?ªÌa¤Ëþ¤h[Ç–Òë1Ž‹.™UëëPs€ßŽ?’€£]õ­°³“¤²\‰FSýöûûËÕÖF«—/ßü(”ÉwíBb Ö§Ê-ÔåJT€  ºåuœ­þâuŒE-5—CÔR`«5U?ž‚‹\¨“Æ WIKÔm¨Ö¿MaYV;Ìì î®KP<è^âîæbÓ9è† ŸN——­I9¢rÒÏGŒtA4|#Œ&¨lºç z¾¿žly^í ÿHЮ}­;Q4è¾ñ‚‰¡¨µ6àãÉD\h¾('AëƒÃ°º/¡ð6PýågÛãW+3££”,GÏ®*tŸ©ÁÞêzϵ¬¾ó ¼#n»QZ'Í$^—ÛÃ6Üÿ_YyºI®þdÞ;œ‡#õq >hè¬÷Øñ^‰f~5[Í™%îõ !‹F«x"† «"“¦tŸ“ ^›qT’÷X6ŠáÐùb¿©—6s–¡=K@·êMïh)Y¬Rœ´€VÜqu_ê/À<ÝîK2ËÆ^iL/­zôâñv¡¬vf"¢â 6mC9dFÆ0%@¥ög€)ŽÕù8,ü˜ÅÖÍœ Û«ýFo^`¡²GZˆ¸qò۞ࢠœ•a’ü¦Ö ÂÂ~”úÛŸÆ(‡åCÊwÀEA[@xKœiA†Ú¨õÛuîÃë™ç,+½++K }jÁ-ðù9þ}G222ãú_àb·Fߟ3T¾zKÌÏ,&6ÓËj:[ãlÓý±È¨îƒ ýÄû„„å=Ö;÷u^}¤,:}³¯X•¸PM5»Ÿ%&²ª¾Yô¯¸ãÀ+WzæÊJ¦š¶î.4Íúê ç½O}à8k‡û;‚öI®¡°÷ñÓTÁÞ´ˆ®ª°@ÄY®—““{HB¢¸úçí\-/ö#6¶žY­Ó§)\Æ;ÅEúoÀûŽëš¾>^{ꬾƒÛñ']öEêBv´[àíðîïéŸiÀJ­H3ýI“øßë@G`[O•™<ÑüaºÈA…¸ÞøUÉäù×·¢?ORZZá7AeM56§-###—·'ƒWàÂLÌ|§ùz`2&¨88p$±ë2‰ÀH%]×–c`f®0oC(5= é'êM‰$1p¾GÚŽ Œ¿ôåFÿׯ ¥…y/´Œ(skèë+F¯ðÖl£/m¢‚Ëù*hO°+eÐ73JÍ~¨à¯šKêÒ>~ Aìì±ïÈ…¾^ýo&Æ©aOÈÂÒò»f>êx¡nA•á}ÖÀÈèèt•= pUÀõ9,4¦­­½liÐ)7{|²8¹ÿD.¼Æf5ódóÙâ;\)¦R³Ç[#„r P&6Uaƒ{w}«4QAü]«ÿܯ›<4´/ïÓ´Tôûxf݇>`ÞàŽºlÌÆhç+'±½(ÒKÀ bƒn`bÓ)RQÓ$0»èµ?' \h+P<Ó-AÐi…fƒÙ’»su‰1ܶGÕy'éè̆hHyé\®L«m§^hžR(¡'È@°ÎLVvàµís-­b›ñbÌ ›¶‚ûfX'UXàYáhÚÝ¡¹ó ›X¬=@²\­ÄrßoæÈËÉi|U%SNæxÏÈ¢ýƒQ%ù³÷Ñ !‡+¤yùù¬/¾=DÁ ¤‘ÈLeÇy®(/Ÿp`:›cÄEb3yu!­¢¢B/)™¬žËòoðõƒ˜$"~çÌj™KÄ€r…rs7“ìÒÒ¥QoÃCžµ5<ÿÒ(I¾ù,ÛÁS\dØ‹W€Ð 2ø öžMt”X¨ø­Ï8ê IóøAïÓä›&æ[Aóáb}Ð9îêô༘˜œ "¬diMÁ‡Mäëßð]ýÄkª&åÖŠÙñŽvxx*ˆßXùQÈ%þW}†œ›CísÅ=HHV“ ÍvõD\` ï0ÝîÍJ†)„q ¿¹»ÙÛŒˆÌȦÌûŽWª”;ŒK€}HKëÆän\ÚJ†Gô{ªá%ô>䣞­N;À£ö7«–TY¨p¾×¯×)Fl u¿9ÝÇÎ ØP5Iãªb'd]QÍŽº$Þƒ=D‰KýU«@-Žãžž®/m±]¼ûZüxºs3zg\Ú*§·Ÿ‚…aéî¼}É;‡y±28»îoÇÑšKç!ØõùøŠ)Ã{[´`½u׺FI©»S­7Xd¿õÑLʵ¿[ p-øßM¼)܉TïÖŸa~í~yiybýâÖTyίtšh¢^0<Å2œ»˜®`p> È GVË–°•ÜI6ìKS¬­ÃçœpÐB=2j¾g õ0Urö÷á:®pì½çÞRó âÉßfû„l'_ê·Ôª&!ˆ_h} å÷¡[‘V¦û deöª&SyÌCµhð,ÖËü ÝbK<•1MVfkû¹Ú•±È[_!Û|A÷ûHÐ=–AUh(J‘ó6ܯÞU–‘ü>Ú…²‘8v¿ÙéZÜ'H¬Lš1ÒÒ†@‰L_½T[#‡T0Ÿ Ò„øˆåå–S<"3„ˆ:EÁ‚öf“\΃<Î,Ú=ëÎ s—ÎóüÇÔÑч[ùïÓí¤ÙÆ­ <ØÍ ’[û ½;@üA`t®’`Žž ;½Ê}Lá–{w†-œÊùÖkÁDeûë«øæÞE¿ù¢”ˆKëÜlàzi$ίh‚æQ–®]O­?î¥zÙ£à¿n=¾(ÛMØÍv'Ä×}AgTNå„ÏÓÒMªn—^q­ƒ6Äøœëv{.¿Ø±ösèþ0‘/'ç¯Üìÿ5ÃwüGÐíÁíu!+2˜ŸTÓÁaêõ¶Ì ÓZ³pÓädkO*#V†µšØÓ¨QqoRIO’¥˜þøË)ftFã[ÿ2m¬½z0N5Yd„Þä+ꟾW“aýöšŸ$an¨O’±a¸R[]ÉðÞ8*ÁMŒµˆY'7¹vnBvk)+›6·Á_ì¥2jqwQj/ I¾ÈÉÝ¿U;‰¹Œ^Z2Ãð[.³vå+Å}ò¦µ#6®36*ê23'èÍ×gËÔpë#Ój,ÒÜŽ–¨Zæ¯c{×ëÿFzë pS®ô ½{g7ÎgH Hq<ÅZwn¦j`Mð,^"ïÍ»¹ÿ‰T×þó=þM¿‹7Z€¤ððð6?dÌ»d‰?Q޹küƲ5M°²ú,>ª‘ƒ³*yS°Áº´¿#²Âû×CÉøû ¢£²ßEEEHß?ðš3÷l=ºÔúŽ/qÍ2 @g×:³6ÔËLçÁö–ÿW}ê9ZÝèɯ¯„‡—ÐÈLëx§á® Ú“D¦ ­W7> ÓÐÝ6Z×N5âA¹Ø×½]vŠy^çñ;ƒ“Ët¹oœ]qÐ3\ý;⓳©ìÆÏœÍgjiäoª/ÎUåã!Z]aÓ¯Óñçù¦šó ‚œ\»d†ÐcÿËOü>ã?Ò¸àV½b‰›Ï<­u»¬€C‡Ÿ ¥Xâõkpì&ß,·õOHÑ ZqýUûú! šôÝKin™ʛý°¨àm×\Ó2¬ûC¡Ü±ƒ $Á©’’Pò3„™É…}ý„èèè&7&M—üÌ·4lˆ¿uÄ>ß•}ƒÔÛeæEPö½<˜ð$v#öÙÅ©å0ÏU÷7>&ÊÌ'ÄÃ;Ò.Ôms¬ùµÒ1°6^âH gT^½3¾íóSë–(éXˆy„v)mò¹¹ö‰¶T-ªgõááÕ‹ŠZ÷õ&»\–Ý5ºéw+12˜]swf{žòÁ‚;ßvôëGvÝ“`%* »”‚`ð9S¿Ò"¶ÝŠàö§ÜÏKÄgdÚLÞ¢Û­H{g'\_ÿü¤ç#oÊSÓx`rÍúZêÞ½ÛæÌM6ÆJy'•執dròòÓèxÝaÐwñ oô·!áÊü °ff|œÄf­ ©¦Hϼú6è<ß8öûÂ×Lƒϵ–ÃpUÛ¤ JKã³ÇÀÀÐnò^‰ê3ô‚?Œ¦æ'sC*îÔr„œeVV——oº‚(ùYàf×êÅÑêRWá~ûu&QJT_ÁÏÁzs%>JÜ–m+ì~^ïýäëáfÙúEeÀ:6JiIÔ¤Ífްá˜cÑ©À§ºŽÀdî©z¢¯ÏÂømv­*íÆ¡‹5ë\­ühé|2Á|È^oû'2 4Rz±Üö)0`ª²»ÎÃmS6K¬Ì<ì®hÉìä¤R—;*º»±o¿Ž×{ënöö"¢IÒY BFyìPTÇw¸‘‘Õ¿P–.¹Ð´·@ÎAGç£k‘'jhû¼BöÉ3­_ÿ[IÍ4¢Ó·T‰¹óÝ6 øÍYLòãúÑÑ­d4_þæhOátc*õtô^Ãc1K“ð<]Ñ$mØp𻭌߫´éü‘¹¹¹§¬Üš0XÌ FìÆ3ÒvÿÝ{*<’€7nÞîÕü{É +› :—Þ䯺o¯N2¬k³ÄÒ½i.ÏtSň<÷+S4+#æÐƒ²w#¢ºà2¯cwÔ•vÀ#ÂSWa@b”´Þ\ˆ§ÜÝ]<$±)a÷¿²ŠŠó䑞éµõPâVd¸©º€-,“Â¥Q[ÆïÓ t\ªôâ.¬l=N|ßläóSBvÕÁ˜–'-̉ž°¨(EBVè/…ååuk›¶Ë#kû¢¯\AÌÁ£Øšip+ü †+M! Ϥ¨˜‡¯ÆïqÞ‡…†B×€UX÷çé•[@#ð£IFN‚‰å…å'W+7&·NœÍŸ{a:Å}Bý5‹B^ü€¹á*ê‘æmªå“èÃÃÖ ðg¢‰›˜ÏµÌ(jX.B[Œgjœ¹ø½_gG»ÌÅþP>!Ë’ƒçóu|<¼ÃÓ0ŽrÍŸlÓØ~å>©º”ö3ª°w; Z}' 5ä %ìŸ%±mø:UÔuÆ?É‘*Éåf££»gþG¸Å†{ÿîP¡®ÙYât=тߠQ•½Jo2§~µ™v¡N -¨$U΢y92k1ÞÍ ±°S¦è, ]óÁ­ÏÖô(¡+·IeŽî·÷Wd㟣E{ˆü¬è×lº:¡eïUSÐÐxˆŽŽµƒ!ª9£&HC]"y²(¤"Cfá")~ûX”ïÈÅgeääJLð)ƤÜR59û èªÎu`í*ôdø®©ÚaUU¬ƒ¦ *ˆDôz±ñLóJ•ð^«ê¥²ÂNp™g4JÎy’cQ;]ØÑÖ äJ™.&"Aó;ŸÄÄŽrTmI¿½ÚÛ¼ŠyÙçÏ ªNÑlòõºÙå7¨qrÓà uÙ½6úþ|¨¦Ôç²'e°n®ˆƒTr&“u¾ì„ÜW–-÷”b©óiiç'1$Â[­¿ú°öòd~ëãGF)îùr8OþÅ7_&QQµò“°m èÕX¨ýƒÃÄ¡ææ0h0¼ÕßEj“ ù9:ºæGTþq¨=¡•8J#ÄÑ—&aú>ËÑwÅaÁ›^@à£yÛ›„÷ï͸åîŸ n®à;ŒWÊfDê{ñÆiž†o¤Î(¥×!¬È€ˆ˜Ã…KWNni„‘T#]ØËúˆš ¸Œ5(tü€+¨©»ä6¨dá·[1mWÐë2ü‘ j~+{fÝñöOzÅ>$ó§Ã CkûoQQS'½ÜÅp]SÑDÝj÷mDù‘ÄMöóÝ:7ZÎ~…bƒªT16á9—°¦‡xG,лåàQ:¯âJÀP0Å2²>¾Œ£ÿ?<Ü 8OÛn[[iyŒä½–ÐjpÛð?üò:Z¬²×Ø©Ü(9寶ÞÃã]æãâv¬¶1ZЯñ,ã·º´h ;݇I+«4NøÑ‘Ëm-$]+zi¤¦ mš8éÛ+uKÂ3)ÄÉ®Ž×W«&M,o/Öp?³Ê? D/GHåD5g7Æó Q=ÛËïÌÎÍjiŽ£.I¤‡OG—í¹;ÝZžÛc^x%Žf6©U°ðྑø^@ë«ê'§ùúsY¹v¶ߪÓ,õ™Ó Õ/#ëC:F[dFñîn[ÖÝ6d²Ä8îÃÂ>=%Õ"†í¬õuÊøVØaêýzoŠý÷Ê&¤>sHðß=úŒ°tªÙÆiØçÑùÄ·¾b¬a6Nì7X¼Ø:ƒ™å9ºe4§ïYa">î}³®®ÀÈõgeHçûžïvéW°”¨ÕÑB©Ï#rFe™Åæ¡æ&Qº¥»¤’ì&¹›¡i§Þ›B¨YÄù?zgÕin@J'H$u;Ds,}'u †£ŒÜEÓùükÐ ¥"¦òë“8µ=0q#üäå¬ôô5!íÔ L²w×eŽwEC¯FQ÷péèv7¯>Xvö%Ûüö¬ |¡|,ñð§'h@+­ˆ@bîŽöÖ»‹Œ½/ššëõ€ãߨª‰ØÄ¹Õ´ÙÝÕ?‘¬jÆz¦Ú¢#×TÚMŽý}õ-’?\²ñ¦¤®îOòFF…Ã4ÔRVq㿆!{A»ÔyXyùÀ•¸u îÞlw‹H'ÝŠJóê߉ýŠÌîBãÙÓpVí°Î-K.2„ _=ùtåHe…¢`Πãá•>‡Ú­LäÂõ£.vÑ#0D3š^Fococ?9Ómþwìû[ ÑKfœxrÇl±JÙ¯OúÁ‚¦RÈò÷õ#~ƒ#8_àµç M¡Zfpµcÿ…”¡s~é‹úJŸÓÂä;S·­‡ª™n.f{k¯62ô¾D?::‚Â*Gû(ë¥ÚŽM¶´ø˜¹¤ n4ïhæÓðBº½Àÿ^À#‡é¾ªIêjjž|V÷ cw7O€X¦´3wþ“HÓæLC mt]býkËd3ž!D0¨äÉÊËú3(í\otòš—j@òˆ6…:.§ßî»”¶†‘VV³î¤ö1ü¦Ók$å2þ™ˆ‡ÿ»+Þg3Ë+êíÛJ::)æÖæ¬%t¡N„ºÂ¸šB5ê÷5-‘âû<Æ?½‘òò!vTù$r)Íl^ÌæØ©¡ÞÓ£¹4–[ÄØzðM[äž!ëóp¯ŸÈ?ïÈRÄËùL £û°Iôáÿhª-e%"%2gðæl@J–¹?ǹúV¼üƒÏðž:P„‡ކ“šC.D´Ÿx9ýÓÊà6™újd”´Â|`~Ä3+ƒ¤+°çÚJ[Ä@ø|0ÜÞæyµÝè|2pÕ›—ßïÈutôßBz0H0s$¦ô8xµûÞLqÍ#Q(ÄG!ÁŒO`I¼"é+‚øÏý¼{´ .מ²7ƒ‚Mþûòh`mÞëÑË@l´4›8Û¯vĦý¯Ž¡–xo½7™åänCÁ ÄÿãoÂ#ž¤L×äÓm¤‹9˱˜¨Ëôv¹oº¸ÕNU9D%{Óü<~_2ÅP´ ~Ÿïó)'±uÌÕ¹mO–æ@@Mµi¶öä,:lѲèôMï~Qùd XÏ$Ò/açõ½„Äe.ëó™¹7úŸd7Š‚€¥!¶è؟籊aÅšu½Ù«©ð¿rµ°´ Êô_çµIK®Ïã9[;6,j¯y«‹½ø¨®œ§joê=Ì7TmŽÁäÞ#±Ô÷¢ØOBåe)Ìj¨’ÿù3ƒòGs°’o¡‚2 DñX¤°ÿQüØwË22àÌ”ÌÜêÌæD¢bÃ$ýv7#"g}%Q¡¡’ì Ö¯0[W>ñs†úÀ “Œ ì:&fˆÀ@(k”Àþ‘=à&mÌÿ*³·¿‡¯Á©‰¨ù(º`yCŸ¾âe9ÓÞøµÎŒF,‚é6±#«a5&1ÇRóÍ~PKjH€ãS8PiPŒ]ÅIß!÷§§Ñ£oŠƒ Yíå^®ž]JTÿ‡8»elú#qNÚp÷ÞÿÏ{镇ÎTÙC¡Ü5CtQ³b? ý?bÇdRóCÛüÞ8\†ƒwt…w¡ÄœK‡æ7>ËËCUìî_VÃÑÒ!Ñ´oä×Àª¤¤DÃË› ,x‚ýØ,˜qŒ !ì:"nœVŠq2›_aG¹Rjt+q¦¼Æ÷-×=i?­úWZ\ÌmŽýŸÙ±õ¥!l늋ÛÈß2_̹ŃàéÖ‚dðÚ#9Å a=\©ÿÑ<²öTc„êt…h¥…êW ÓÇÿæo©E-šmfnugTI~uÄM7)/kç,‘Öw;-²“¿¨~а]š¤×4ã~0Øýšé¢l”ÄlCõDC¿î'ÝÊ"ßÒvùodŒ(MÍ¡òü+²oÕNŒ*ªnº†ÕÝáèq‡+S}–Ö**[ûaÄ5©--‡¨©—**}sØöµ°*Q§TÈùH!^ÈÆG^î¾kÞ¥“’'°x4rçðÇaˆ^G9Yر$ œÕÄpZZZ‰£v‚Æ‹¿ööö)t¼œ‚M·×‘P€Ö½(Éô™rF”¥œSOJFŒÝä{8ï‘?\I9tÖ9²?ãÿ„wƒ0òßôÓ9Qox€’P µ.æPÕ8Q]ê©KÕ²<ƒ×éü¹vlZZ`ëþ¾!Ïì_øÙÑ8O·Ìeâ(Ö_Ë ý*{¨I1¯ý>ð?X©»Z†éVxÿýš’ÆÃö?éL!ã?zqW:ØV/e‹­;TGy›Zäéß:ÏZK³ÿ—0;ˆügóYØ{3ÏL§L¤“‡†4Þ’þ‚æéÁØâ+¼#HÈIp0A‚¡ÞƒŸ²”Ö¾%0@§Äè©‘Q&ôSzÿ~ŠÏœxWY>V "ÿi@þkk 8¯5ÚØ©×¤ŸjY 4ñqßÇÊ{Üì~dl}i_‡ó8%ýÎXY£ñ•§0ñ‚¡­QHl:ý? òéZ‹®ï꓊î7“{þ£ÿ]‘׈+«ý“UÅ ¥/¾¾ý?öOJ0÷Ô/2²Å@ Œ<ùCî ]róû÷ïÝð¨¨\èG-ÿΕÇ<á1þú¶bÚ~2½øw¾Âcë¯@@®åáÔÌ£æþý§< ¼¸¯>0÷‰{Íô²è–P`’p­ÝßÔX;æ†>\¤èë¨\á3r›šÑ¯m'ƒ ´7vË¢.#w´íÇ1⨪rHÈÐq%Ì<…‡O žh7xþj8˜iÒÿgû?0B·ù"WòïýHÑ2¸fÂPQ°†"ͽFâxu±o‡÷zñWØÆƒÁ“AñÑÞÕã×_z’€³ú‘Iq¹ËyiYq·ø&7—ºÍ¢#†‚òcq¨Ð@ÿ؉BªÑ½[€[Ìk Œ¿R¾ij&'™‰–ÕU ¾…n³Ñòk×}6qûE¦ÎÒì"¤é! MŸd@\²Á{Ùºàóâ!³ÚËö(¼päcbL¼# •·J]ËmN÷ûó‡ç³eæaõ¿o>äÒ¸5éȆ։ =""ÿÐ݉€’º€é§}’«B"0h‚¸ñwˆéY¦ãó¿öqT‚ÃPúqÎ{õ‡Ae”çÞÌ4€ûºؽ÷JP¨ä!Cj6NoJ†ßÛù"æ¨HyÅ'5NCù‘'ÎK>äÚiŸ²Ó-TاØ6 òžù(QçÛ’jvé äãq2ËS€õÄLæ2Vÿ¡ ‘ñ-ú¿÷–£Gñ]ËüÈÂφ‚ÑëÇ‹_aýt4,]us GIr Ýöõä2“R_¥»›îŠÞ?<ùÓb£®åõbzºÌ¬/ÇùÀ £wó®àY†BˆŒ”)--D( ö$™é‡Œ¸”Ô„‘f*_ÞÔÝ–ß^=CÛ$h6Lwy¦»ù3…3ìïøòAPdA6Æ.ךˆ×€ÀÂͽÍ1Qh‰ñ2€¹îíÍ_»Ó‡Pbƒˆ­=ùùéè×gЇ¡“uÄì$€Ð˜~²ÙO|¸=šeüª'‡Ýt+]àµ'm6乞¬þ) hx²Ñp@#4Q×töwÃO9—û—’O1Ûë¾P·t`ä‹JÕ% ^NHéò°Zx`ª:`‡XÂŇì0`H¨2Ó?¬ƒîª¶e¥ükãb¢¼?ô¢¬þù•åõ;[òüä÷ïûÑCþ @=¢Ó„Ž&a3å–ŠPO[„Œs ”â¿ÚnMvB’̹Ûï >qGã'ÜWN]ÁìS}}_±"ôBÑ Î$YèÿDÇ¿~/ï×ÿë÷ZïzzYvôfc„QœìÓ§Oжçšߨ®.%qZ::' \è9/Or?¦ò¶©Oþ ’“%æli[ç{÷+™;²Rà Ï|êÕƒ‰gÙIw±v¡êj½"¤HÈgªøÅaˆÓÛ£<öÄâÖÜùÞG+ª™" oBLl²þ ”uàšóÞ /%Ë¾ÙÆD19¢ÃLTµ·8ãѯi\ã ·¦®inÚ…¿}²b£¤ëþ‰”dÎ,ý[ \ÝyüýÜϖܸIîï*6¨Òûù2šN·ròo O'±’_âySl6Žögl~×Êò³gü³® ‰ããÇÔâqÊâ¾mQÍK-µ»7uYý_YìjsÏQ²åùôÏ åÁtA|)˜%iü{ÄÐ&ƒžÛ«“:Ú!qö˜(S ¨¸úR÷;¢Œ¹EÙ#—ã«ý.<-d½jUìåÌ2«Ø;í}ƒŸí|LêÕ ùÏÛ¹9^=²-Ñ_…Ðò°‹þ¿,#}ÛœS…ë—¦y{(³0®kj5Wûz ÷t †nEø¿O!b[ª_¡ÍÇ+##Å”ˆÌ¤˜ªÅ[ð¥À}(þ!±ÿ÷¯èšˆ}1·?Ž#ȷóxGØddÀWL‡ýý¥2F ¡Tû“€áïZ_õš,#›Þ‚¨åw^ ò?| L1ð{+ê²²]ÍW‹·ÅfÊ0·V–^ äÛŒØ `Êe4óÿ¸Û{w­kš&œ•¯–$‡8þÿ„Žiç¿|â¡©4âH¼ôï¬_Q  9tý´êý¦UøOú&~ý*{øþ"7f1‚Ú‚X£ŸpãY2€?ê›zI?³íç΃t##}¢›×gÏhŸ0 10É:p8,8¬ÚmÜÇ´°ØÝ¼ú™Iqâ¶µÿlñ‘áÿå*Læº=é財vŸœî"ËðFÉ2$oœ®Íöpg¿–[ü…@òó=7Üë3ÝT~fç¹ê2B$±—Œ·@8Ly-#žîc\‹ŒÖäÿK¢ÞçZËm¸ýƒ´†â\yyyÐv ¨©õÓ§zyC¹Û ß71`°„V–%Ã%œÞ“º‘ïZ{“·W§Æ¥o±Ü2od°¯Ë9Te—¦`Dç3~¾7TFÛ—º¬jRegÝtu<°võóÿOzƒø¡öÁ—‹®˜¢(˜&£-†˜zhªh1Ó™cAÓõãèse¿àå~½9²Ê156æÍC?’|ÄÿÊñ à132¥ÓsÏÖÌb@ Là8hè~f—ÞÜûy_Š1Q¨°î‡„Þÿ2·+4Dÿ'uÛ1CC»êãþEëæüðdp!ûÒ¾ÃÜ+§F%eW(çIÊSNreL1n|ýY“ž¬ä-™I²Å*-äØÑ²T˜4í·/½#w¢áã±t«Þç¤õv#ÃóÀê\Ñ~Rl”§o’C±fcõÏú»¯‘ø¤F\'‹€!‚ZþUAçÈÄ©Ë%$è6:ÿÜ,oâ·TØååµQQÜ]o4ós=ìmˆá ‡­H©K;¤SG¿Nß’°>‡:óÃÑ9ïåh^¡×®нûAð]2MÐ~e€I^WoÊùÞŸŽŽº€tkèR[$.tªÈ¾úñ# i§’×?Œg%^¢õ ô–¶x:³Û»¸ðÄK?À•8”)Éx ^•½îÊÊÊåìâý“ [Ó|ÇY®wñ ;¨è£ó· ”¯ˆWw&ÅuËóDLsƒì·"¸Il­Èû‘AY'ÜÙuÕøîš~ü_/À ûŠÖébþ”Ð d+´~V#µèÑÌ>þM3,“„ÏsWCÔ[)hG'•çWæIߎôÅÈè¼_~·©td€Õíœq€Ð‰óyŸâ縓-=ߌýXŸó±O`ïϰ©ÿ—ÃyÃôL5ó¾ÿŽMÞçñIˆn\ïnþ+å_+@TT.Ô‘¤n¥]ˆúÉÉaå* v»ÙøC»p °Ñ> °¢uøwËkO;-(küöKå°01¡ã™¸¸òÝzr¤¥¡Å!HC_ßÕÙKrÃ/hšé%)ß`…p/ÚÞø `¤ÚófðFˤü¯äÜ ­;…›zP.±úç}Ðý­'ðþ©sQ—¬ºÞ")Ê»Î6ÑŒÛ “V:bùæD>|ø¥Dݲ<š€Ö•ä4L¾‰øÉ=[/x‘#î¾¥ñw²ô ®Ûˆ–ƒã-tì‹ÔDœ4+:”GC”s˜®X$—^HkdÓ6¢ù¦ñ ¬;¯¿„ªYvŸ«?²iÇ|þÌp}¾gÏ-'×Þ µPu†fvŸm¾¡ôí‡ïSzÍd þnksËò‘ä2æë_ZðA ¼îNPRÌ”rÜÿ9ðN-Kìõ ä…·§,œQB"“ÄÄ;„”ZÜ?èZ ô|J @dJ&‰©ÎvÚ.!È7Üo‘vñ;M›oè×ÎeV›ê­½;Ÿ…Juåå婺…ª~l,ü‰¹ccFA@#[½4:i¡&&þ³ô+ jc†ªónY~Mj9op¥ÃÓøŸ)¾ J™­1\ïM±Yj ÉÎê£f1iy‰ãÁ°ãËizŸn8©eÛ© ZÊ©€Eh! \d v3rjÙ¾þŽ,Øf‹WˆþõŠQê¤/wP@vPâË»èºpñ˜5®Ôà\ }[+[}5ƒ4ý¥PòŸn"›^vv|ïÝ/.2‘r.vÆ 'Uv”_ ÌO^Ô7tüq^„híh˜p¡ÞI^}®ÞìZÛD“8#äqgi 9Yi„zҺѿr¡óU='Îq¶úø3ƒBKçŠÏ{(ÊÚ4‚ôC§ðJø@–øj¿ð¢œÁ#YYÙëCXj½)±¸±YØIË…¥ NEúÏ ãÈøQêTz÷kj£00ÅW” å'ïåÇ?ko+À27Ï[oy‚&zDaìÈYæÁ®¡÷m~IWXXºà“˜#X³»‚.8FÇlUëòøHÒ(ž²âjHsè¤H0EÀÅÕÍ, ¢Òk îêÁwËêH㯮*–>j'øËì†)æµÿV3_AðF,­¸ÿìlED¦%°5éxåƒ[½;z*Bª Ê@ðp.ÍRšÜ§˜ðA)‚  Óº·s‡Á‚2œ—L4r{š`4,,J[îÅ ûæë¿{.~õ¿)Ö#ÓÓc‘:T¨Maü ‡››Ë#xaùæ ¥ezòcrÌ'›AiÜ®…zm Õl, ¯nÃæ¦Öô²ö›H”Ô’+óüÊKø8Toôò>Ëõ9^mïY¸ïÍ5xü©}½Z‰)+7&[“‰Ñ+žP€Óî‘:R2˜ê|÷,¥ž÷˜4žjðâ¶ÌÆÖÕÕ?âÇÆ^Á%wž’r4eŸ,AïoØ?øxn?™Ú°__8=y;µ·´ÏEÕ^ NÂ>ô²§oV¨c+l•I1ièĹ(Ÿ{O+ãÀ±tÀÍœÍ/H¡¤B·eäãï««Ûš®(ñðºi?‚…’®!f¾2% ¶tý ÍÅïÂx|ÿ‚>±;|ºÂÆ~G*êúùïœS·$ÊsôYF{¶³¢Ë•ëIéë‚þ{3UO Ô²Ò=úƒîáç[·Ë¸+¯‚MV¼²í'ÛɧýöšoŸ›ýÌ™1XŠ ‘Ãl~ëó0;»õ Mâ’¦uÀí—êÏŠŽ£¢k_G R,TèæJûÉ’$!¿7QßÍ‚»ÐÉÀx->ÈI1Ø´Má2.ó9±.Ò+Gtœ©føÓŸ)ÆX€C­S¹+CTMH÷ÒI畲›[]àݤôÆ â[JvÔüˆðo§8}7)Í–d^ý9õúÏÝBHp‘‘0z6\Å~8ç&s±?ÓéJ¼¾nÁÔ;œ?Óqxq¡èë+ÍKS_ ž&fk‹`tæû£SÛñƒmß[‘¹8 Í»fiaóßÈP˜ø‘ªƒ]]µþ?—Ä ¬@[ùãíçG/"¢—ñÒa¨)M]d|¼å.—Qâ®’•ôÃäÛ̉!Q–Úp×;EGFC~……XvVÆ™DÊW@ˆ—Æ9\?iÉ’d›û&þõ÷ïßÐõè~ûuŠ `Ýq’B³×%Ÿob­¥™Àtq'jjj íwœªscö½Ø/öi¤NJF´Ÿˆª›1°5™C”™,1þ4º]ùôj5–»Ã.|Úìa'ÂÊêz)Öí©–Ù¥Ë0“‰&­°Ð÷ƒ?ØG4÷k‰®ÍÙÍÍ­oÉò`K2Ar{û[ššáÃÇöÐ=Œ»3U˜”âžc\Àøt"Â\‡_5¾.gºhJ‹Šz°¶¹I/*JfbbòÜ xåÉߟV"IªÚÚý7”Û{Ò40Éb,I¬°loY, w· Z^ò´þ¼g¯ÑQŸžuZôÊ)¼Éô¸ŽJ†Ï:% ’MÆVÜOOÏ8ð{V]ïò8“>‡ár_¼®|{‚BŠ£ZÔa‘‹ÙÄ[äp·"›ÙÌ€£HÄ]©H¿)ÉRª:]*@¬ÚqÊ)ïAsô>Étßaœœ[Šïvj «ñºz{Û€úÒÑä¯ßx7ßLù­èü¾ßøéFTa1V¿‘kÉKìŒn† ľTÚ…Öžìqtzfð³†Û©ã ‹ù<7E{''w[ü¥¿?$l4 1fQ ‰íj¬‡ûû±¡+çBQ0?…FGtÞ„?•{çzuªõìXl'œ2úb¯ƒ…®žèÒU¼‡i8÷7sTRb„ßÙ¶:îoNø±½’õà7½ø~4ݤżtÑBB0™¡¤ñù'¾’*²Br󥬉Ñu&IûÕ~…ÛmÜÆ‘_‰©ôž¥hâO¾× ðµ§{áoÞÐñóŒ~}6 -!vh %×Ã`°¯M~‚ñ¯ÙÝÅ(™Ô³ßÖ,’¨§T—~Eí$Ù4TQ«³q£~“qSÆùäÙ³g÷~U& uµQˆ­üƒ°½ÙB·Aó¿Ö`„<Ò¥`Á4âÒ2ÛëƒYfæ…÷´­}iâ(w³Ñ­?´ƒuVm`fÀ“AÛÒ€¢®|%MA[&Qã7Š‹[ÿ½kqÇ¥ÍÍHLb³Î8JˆA*kWÞéšdG¶Xã )¦…½û TÑØØ¸¢D³ÁOXDO"Sò0x®z÷Ú÷5…Ù¡Ù0™ì FÈg†¥û›“ͪøÍe„öv®KÍhû°>GÞƒ K´¡>éûÕ‚QZ!!bÃj‡×µ{Ìèð0ac,…ã3[Ò )H° ——÷~µ"f‹'ïiŸ@Ñ103«d|p.‡)ÆÁz“Y =¬ø‰³|¥¨^Ëï xÒd¢j‹Tï¡¿'úZ¶(ëæî ƒíéȟ銕¢ ן™dXYⱋêøö±jŸ~`tu=D‚W®loG½€0µß„_y,ýèD”õ„t¯%=U 8¼ÐDQsÞ*Ð[dF‡†"¾¥’40˜#.âེž©Ú0]œ«ò´Ìv |ˆUn~œ^ZŠ}Û"}x¹Úú‘ue¯˜C§ðUÄþ<ùT•ŠÉ܄ŦÚð1üþf¦sd§cøsöCv–íEe•Ž7Náü¼]0 Òr-¿ÿ½ÊÝmùÜ¢¯Š‡¡ûîÞöö¶’ŠÊ¿h´6õ,Ädn’B$òGNwõRX¦Þx“ß^­–6ÛMüŨm°ÿØ7ò3;åcú‘VW}Õ·To„T‰éjDC·«ë˜¤ø|…hYØÝìÑjk½ÇL åŸ8ÊØ¹9£Ó¿ã*¹kÝV+®qéÔ*íÂxï¤àF†ò yµµ¤ô6Pú_Î&t?L ݺ¡]Ÿ9;qõïyküîU‘xÛÙþjÖÃ…¶ ÀMÍ—ÝúÊ~Ó¨e?•ä®èÉ‘?Ãß3½~;Ÿ¨ýüY9[ûŸõØ™ø¥¸aŠ/'wJa\8~¹-ÆvªŠˆ— âY±’~çKqâûï‰kа¦Êû›•9ܶœØßßI_oÑÏâké[Y1ª ¹]¤´´(t äÙ¨có¼|@ckŽ [ú«}$ãsÐÔº=z¼R¼½-#‡LcÙ=Ì‚ª¤–Át1ÅÏÂM”B)šgŒåìì\¤_ê¶9‘íH"'çÙÖÞw§öiÙ÷¹¿õÉy-›tû‘……åÕ¹à9ìv«z6x3éOœcà²|ô6^Í",÷ŸÒb#þ—´<¯–YÅfz//ç=i[ha¦Î_é’ðä¥òYÃûÿxó|ÿæ/6+›iÎë ZÅèËLµcì¤iål30 ’Ÿ;$ýˆõêžg~¹lš®–^[_ÿž˜ú®§§çp9’ZèFLÑ{Š4>Ø&EÌý=ùÍïQµ(/Þ·ï 䳚úÛ‹-íž4µ§ì@IÑì‹tñ—ÊæçÍ©Y@üYQµ£Ãû?aÁiˆŠ›]GCçJ a"‚±1¥Ñý•zC»çä1A2pñò#€ÐÂæ$]”{&¢’‘~ÝË¿\-NLH¸Ô“Äþ—qR5--'£¿¿þOoouš:þÞ"s =âÏÔþ‘Ö½$yùã±<•”à£ÕýŠ@cÒQY‡‡}üÁí 4j«×¼ë¦½ZV!!!Ðö+¼ÿ´ÝOtH¶®·£o½ô·kFoû¢â’XþÑð‰B>Xm,ll¿¿iæ¹ãKä}òÌl”éèSƒaÍÆb~s3•a“¶t¡†‰I\)²m/¼`Â]ìˆçòöDæ`ÁÕ2è®J$æ° ˜Ò^ÔSëÃÌ¡•`Exdl$<—Fô(³[×]'J0Ù`{±EÚÕÍ :ÌÁ–$<*ÊáJe°Ö·dGسí±ï|||ï““ß<Œ–ü[ MÒ?{®ñ!--š:ðòñ]{:ô{¾NÏÉ]ì?bÈÇwvæE ì!lÕ21*$šªÅ{€‰ä¹ûžd2»Ïš†=ê-²²JU¼ _téÎç§yw9÷ýv(8”ø]íöVäé­R¾Ì©£¥Ë3ü÷:.Úµ8%NC4ò“ ›ëÓÅH1îã#ëàÀ…ö1õìLÆÜ|tÑ9ÐQÈÉÏ߉xü%ôœå?.@ª÷§¡MŠˆˆv‚Ms®lÆFŽE„´¤~uÛl7h_{Ùj1,e‰c1dª—z^žùÌ‘³, áòF±°4¢°Ý$àL»ñþz‡'Mu™–ŽN8Â5dB"˜»˜Qްº¦ÿ]•=ÏÞbéUÜŸÙYrî¦S|0¦¼À†Û¾vd…ÁZ—Û"óøZ>•”àp·ÜºVèÂd:ã\‹Ø—!;˜ã«\Èʬ؇ê}ç!ŠÛÅ·7Ã8AK%Æðôß’·÷稭[™õ?ZŠå®ŒÅÃÇÍ÷¢cbR€Ðûó£èÞ„oŒvvŠuô»<^žo>à“ž¦7x<ÙË}üí`‹Y}ÆŸú‚R\ã¬IÈôàð#‡†ÎÐÞ—7‹ð8 Î sÖJ÷íçî;Ø×§ÃU÷jgÜá÷7èžlXX…×êwÐíG«c¶Nk×tœåHÁ]¿ê¦ËB÷6íàã«FgCObö-ÙØB›#ÔxFwþ]ÃŽC%ûçWp’ago´˽ò;3½cªöu~ªBþIµYCmÔã€A ú ˆeñZÌÉñ€ïÈF/wˆyÛšä­×F{ÇÑ2Üšƒ8·–tê§ül$|{´À²7™óÕè×w²Vò€ðAd2_‘ÈØTØ›–{½ÙàH¾ýwg9!«˜…D‘„0€½åÎDñÖ~®:±•••÷r‰Æ_/ª„ý  3v®®¥Úi„lˆñéb`–1¡o8Wý塯ü •¤$• ñT½Ñó•ä±#*Âbžáî¹vÒ”Äs#T¸í¯ÑQçÆ#ÔÁÜü>i0¯P)2W[[Ä`}5óoÄ"læ%=÷_¸7Uc r||üþý{˜®®.#öÍÁœN·AÉÈxé{½¤›ñÉIËåßzM¾Uy7XdyÊbž“Hô °£#™.×ß½ïo‘pü¡À\Vßx? :~*Zw}]qŸ¯ÀúêZos©P7¶*Ñ`{®Žb¼hf;(:ÀÊDÕÖþ¥ýë”)¶”ûoPõÇ&66eM©’ÄU]SÖúÈ °bR%ý„ÎãègijL¹»¿i“ÛO=Î m>Úx7è2l!̸>êé.çS@®•̺††ÆZâØTô¡é2çœÆÚþ#à'Ãdÿç'óºkº£7¤îõˆk}µHóãÔÔp|ÅoÊ0€wƒ[h¾»©z_óë…uìô}÷½4×#âê:ïêy†ú*!Ç™p #Åwf††‚߾łéêï—¸ã4õÛŸ…nÔ”¼ PËû"’Ò°ÿÜ3òó(Âòr+õ=ìt]ø<¿õîI«ÑÊÊÕN\¨íÀE*E!`pã­@ØŠÔšßÃù[3V¾è¢·°P¡êÒ§²RàòúÚŽŒègsJA6fæ‚a­p<<¼w&¥ký R*)¿7Çu››oƒ®¨á—±Ô˜oßEø=é¿pØBørÐ|û[Ö^pÁ¤‰6¹C™­|ö„¿¿?ëš’œœ\.°¯&K(±P‘`¹?âÛ dþêNd>:Ÿu^=”Ž”ÿòú"K,zbwb ,š9£ÜF#§¹\š%jøCJôóç:Lͪ5ó ÍŽ_æ‹þxfÅXfÉBhÛÑÛ‹ Ý嘋âLëúò¥ômY4Â0“ê?Õ“š3­«™ò ^‹°´ù#/Ÿˆ†µ„[ƒ+%³7ôIù¹›²”””’šÚŸµîDèòè˜×Ö;YQ  7£ñ>ÞÞ¹4­Q²Þ o·þÈÓåÖ<q‘ÁÚI¬ú¾½"ÿz"pG‡FhkJSmŽšRâjÎía$XZ/‚‘â–\, »Áó ºÝZ¯ÊŽÈ÷tëÄÂJΚ~Ó»ë°%aùð?Ò$¡º/¤þÿt÷ÖQYu_Û覥Kº¤Dº¤‘T$%¥¤»¥Qi”饤•T¼éNéîæ>kó<¿÷œïï8ñýóqcÉàæÞkí=ל׼®¹ÖÞ»,"úµü3+;*̃³Ãõ0ø5QììØÆ’‘ EEJ_åŠBBm=}Ã,øP%oˆÞ¼u®Õ•.1/~ñ#(šåf”|5¿Boks ç×Îr)†CÈþÏÑ\à|[p±ÅV)b Ü6I¯øÒEÐ_F¨zøŸµ¬­ž3ÔÔÕeëÏ¡[§Ò®Tòl¢ÿ+TæçÍ@Žœ£«ß9¸¹¾§_¬š¨©æ*Ò£_&¦nĵ玳û}UQns/ïf$³åQßż<\Ï÷¿ge!„Vï…666î/b©çëÅî¤ÖÖVY¸l¡ #!Ûˆš”¶»ÿÔì÷æS·÷85(+wME¥ú‘žíηï~­¬ä=Q¡”J¯}£ y=Íô÷ýV1ãKHy_]ËJÚûÎ66¶ Á¶ öÖEµv/‹Íñ¬Q,ú·uÆ&Üúç‡h‘QCßLž¼;AÖ:?8½ü8¿Ên‰+~’9É…cµ·YcÆ™›¨ÈãØ|éùwiIôï/MFÆ'€‰(¹ ˜þÉTlZ› #›šÑÒ»Òzä¢?Y™.mÂ¥^³×eu"øŽ†¯ÎâÇÝÙˆ(°Ü×Y„VZVÙ!ÓÃ_çf8bÈî°F}Eê¯÷ËÓfÍòî§|Õn >pçÝ5á@ ]¿~ÙzÐ)ËÉ•’Ñc ²P¸pŽõ/.Lç[ ‡ Í^׿q?Úª'kß­zŒ8,@X·õ|à×04ŒÞ]èœK3 ¡dË›p“Lvåâj­ÈÆ0>Úùþj>)u…"§ˆ¦&‰Ívÿ¹{÷x%Jz€>žâ_Ëo)Å¥ÕŽ8¸NÓ…Y˜ÿ®Ûí/÷…i²°¸0ÌŠ(((+"õò2—ã•‹¸ªzƾ¹¸H/÷õ*9:šÝ˜Ë}T\ÜøÕÅ0óÄ×°±èz­î¶”ÃåùñÈõ4Á!½®ÈÀ^×Töá dk« i[RžWâË—Êu#‡¹É©)øÕQÌvf¿{þn7…0ñQ¯NgcÄF¿pÊšfZwî|OÔ°ÇÆ&vº1 ~y^ŠÍùð;ê‘o_õ¨î›¡gz½Ý56nYˆJ ¤çE:,.¶œ½Ó4RÙý¿,qå\`— ëØ&—#Ñ5!¬aR¼9•£ó¥+ÊSѼÉ] —MOæ°Ú³LÖF+˜úàgˆ¾ UŠò]»ùÙODÝO@à!îc©…ë…·¼õÇý3Z#eÙ·¥)þûÎîV}‘ûW3åFÑŸ?óGŸßªß†££ê>|µ7jŽgÂÊŠ~-­ÿ6ªËÌò÷•ÑRM+òŽLºúE†ÞÑþ@× xEÒÝíß‹ù……O*'eåAÚÅAn˹¯sSnkuFÇIÙ÷™B[Í& §5Ï{Ú¹°½M'ÐÒ²¦0ïÏ}÷j¦ò`îfãÑÖéidY9¯Œ þæx–~ˆÛˆšäiÃÔûÐã¢ýø¥ðÒÛƒW˜¢|çP?{–Þï+ÉÔ‘Ç¡ÄkéŠ3{n:RæjdÏSôÖЈ÷!în‡‡ó} žÕžS| 9ÄnK=ßžÝÚ*SGEÀ£¢“ã*Ÿ±×ÉovÅåº2q©¾?¯¥¸yky)µRùÑOþ.®¬Ž9È׳Ü.$pÕµÿÓ¼JþÐ]Î{—ÊÒAÞ4R6$™‹~]MþòÝR&Â[¿È@2ܵ’åøŸêD¶»ðxPYgÌwç¹—›Â<”êböÉw¿ ÊËe.¥ûj}KRôBÍðÁ©û¥¤½¥Ø ¯ß¿Ø³€÷Ušñ瑼ç´{™ ¡aóK¬4‚„Smù?e=”§Š¡Ìâ±=ÕŸ*‰_bÌ)jQIBLì~ôìdgÞ1‘­ Gl¦»kÀTÊç“ÓÂ|õ+ä§ñFe§æ7™¤Ï.Î솶5W;Ü3n 4¨q”?ÞšúôOµ¤«mm-7äSÆîjž2 ½/ÞήÆrº×46]Qo£þÝëõ&û_eÃ\½«ë:è×)}|¾¿íC;ËŒ"5ü‘—w™™ñiÃAâѪÏ<åÆGúЦâG??cccƒ'|vi‰…ÙRÍùï·ïN‡¾ó‡™J(žF€ŽI©ŒÌcmŽa rr[/¼Ž—–.N÷çæç³¯'Ùý ÿ€Øv‹óê»l_­¯ ¥±‹‰ªû¦»†ßš²QQ¸‚Zò3B³J”«ÎûË©Þ(´uvÂKŸhkæ×´g ·Ó ÖG>+çý„ŀ΢¦ãÉP–€txþ|¾ù3~¼ý>~{ošØîJNìµ®ÖgˆbýÂK'vÓÈd¦Q¬‡úÞb5:æüxwQ€Éq£/b+Ýw¶Ê“³ݺD3_µ«««¥Îcˆ„„‘s«P³eo1[bÜ,Ž<1€å¾ÞØaêQ «j¸G2Ž]õjQw6 «ˆééË®« ¾F&  œuï_6/ciýZ)ÊS~0ÔQ4£kbLМ{§²~[8¶sBC#SE 2 ­£ã‡)Ïȧº¬ã9º¥¨MHc¥‡gTŸsGQv“G\6˜‡y~år¥337¯x±oYi3 Ë‹Áµ]ñ8ºyù²ºš9+ôÚ Å ¿]vJ©—#ÔE’ò‰)i¢2Ãè_ÖêÅSÞ×àED¨ÆÆÆ(yLƒ*k—ûÐìF"/W´µûTû(‰qëA'5@ó0ɺWZ·ÿ[=yÿL€º 0ºRúæî·ŒÃ,Æü‚‡û¥Êò0ׇÙëAÊ)ÀÅ8À¯jEKÒ-“ûÓJ(k¢‘õoļóÏÒn§y(MŸø«5p*ï^ ºœoÖÀ}ýò÷êê¸9G&§|µïi©™ÔÙˆ Z\œ4òÊžwäc3ÉÉ!±ÒãàRƒ`»‘Ê(ħÇ%úU8>‡óÇÊŒ¨-}}¹œÃ'mnBí­;wsr´å¹JødÚÿ¦ÖL¿»}vº|#U÷¶×FócÓÙ—/TV}ÚÚÚ2kk)544úçu´ÂUƒði*%dU6 õÖÖs$/b©ø1¡V†Š“`:3±ñÝ>ô¸Hû×Ö3ž‚º¢röªÖ°…½/σ^óÿ írÂeþ'K±tÜVXpC”OËH]~=%§Auf æ«;Ý53¨:áüC_l_ÑAÕü)Á â%Eå#,¡ªùðó¥‡ËŒp¶ ï02FÀ…›JKÙ|®Š°Uˆ‘“U«D5õqí|»sQ>êoÕrÊoç¾nÙ‰üt™•Ì7Nö3žùœ;H Ù°éêî–•‘A542úÔfoMdßä|²ÆÁ~Û€ÌÍk0t/ …h¸¹¹KŒ©07U]ÉÇMíˆÆÙëpøé”¨û¥(}ŠjrдywŸ`v‹K°ìj\ÐÛqìeuó9Ý8!=²M.yÚ_WüÑ;3–x '±aÈ'fÊmot•ÇÓ›¨|$î':ŠòǰœjT±|£è&ÿsF@ §¼2®­K /$Zä¡aÍîµS•HD¹æ² õ«àÔV!¶ã“JŠéîqÍc¿Ë÷;ã•Ø ¾xY¯°˜f¹ƒU ô釘ëÜW_ª¤Ý$ß?Ÿþïn˜«£`lCÅØHa¤~o›ßÉ\X܇@ê\#Dv鈢ËåOsNè…Óý‡·4÷ì¶kÑ–÷÷5„3öy ›ðú~§S2Ä¡afNìîø/’%нT-Fk(m9Ù]pÙ™}ГÌ+«Ÿâª‚ÿ6ƒ°ÄÿbçUÂ[Nr1ÈñÍÞÆ8†…•݈²…5\˜¹gTw“žžþš›ÖɃ|ÿÈ >¢º,ˆùD6W˜LJûvm­Í]ßžéÂ丆Rçx’……Ö4¤¯Žææ¬ùÝX„샺“Löj¥ùOONnýØð†¸ÊÚOŸZ> Îg•Tëè’‡ÐA*õFʧRžÊõ”À6ä¤ S¯ ÿ18ª:âÎÞx­Ænñ7 fŠÑå¿Ô}›ûõ£€J„ä*ð’æ•bŸ2VîÞ5V‡Ž_¢BAC¤ÏžàR ¶ Ý€PéÇ>X!¬÷Ü”LŠ„çy.²Ý–Ìa,_żunîc˜½F9¤ïƒÕ¢k‚"æ…:44Þ¾2RΠSªr´9aw=!€Û¿“Ó}ŠÝ·9A6Õº6Éš¡ÅÎä¡­’ô1K–xG ‰vÜ î›ï¦ ’t­ÿʤäÉl>ÃWïYM^Nƒ‡ëagW—íÍõ^NtåÒ)ß­…„È:c;9Ê^%Äîâ4I´>C‡Ö‹5^G2¼Ê.úçIà¹AiKý6ª¼üxïÇðÈÈ …=ãûpM³-ЮÅã§ ÆUÖôzÏ ¡ µµµe>QXûZióêË{޹&+‹«ãÀgî/_MžEâÔúOJž­€“BÓr”g€!æã\ë³­ñ¡*ÑÄë?É÷]ývåáL<™OA+1Äžô à1C7]&¦$ˆ¥ƒšu pÉ31ír@@ï6#Ï›½{4bä‰5¢Úú–såpKwIEèËÜåG Œ >XiýR0Z蘻F«M “6¡ ˜4á<9éK‹z«‘C$jq•„d6î=Fãë#/+ËJ˜ç€vvq‰#ùÚDÏÆ…ùD3¸¼9‘¤ß¦m6‰Ë„ܹÒï„û;˜°Ó599‚Òÿ(VWeG?()ž•l*g-+ìIö…ñ¯•ÙÔJ¯~U,9µe€›À“øÃmY½iU‹@.Å*#DÑѱx†˜ׯÑoÞ¼i °«Þ¸ Ï~ò†ý –ŽîºH†N&ìB ër¢oˆÞ¦@Ûl .ÃÇÐlÕ³Wó¾÷ׯy¯_Ï®q”Ï^€qSE‡V}k<ªªœûúM ieBñ_9)áàQpŠqÖ¯Wq9MG'$ÜDÇÄTŠ:?]̲e®õ׌wÀD$ÿvÞÌ´›¼Âì //ïhà þqgi  bƒÉw8Ó»*VËC|š²}CÂr[ ÷|_÷jæ~ýaó_¦›ô>³ÑklØH{gE1ÿîåÛg­D;ËR²&:–Û  ù·EE©ÛÛá÷!a¼K¿egtá·Z“+§ô0ÿϸTT$5®F^֚ͱ­cÞÌ’EiæÖ))``–Û•U€ Ý®xM…;UopX{VaÞ™]PpÄ|hÞÐHj dÕû{•Hÿ1V‹× ‡ŽõyÕæp)çöô,zoi¸ˆ$÷îþOØŽŠ‘ÍÅyªÚì4Ë–[£Ä‹»»µo“Âúkf:†þZhÅR¡ç~]´qϸsºL,ðÇP9 œàM}½ ÉÛøøWb[µ²ú“ÝIÁø4mˆ _J6Ï6óÝ!Z‰»MyÂŽ@ªþSà‡EÐõ¦¬;ĸõ®ºèE_'ÖyGA‚J÷³­I*2~ËÌ{œøR~gì\ŽS‘{R(—g"íváE’ר;b>œ¬ïEjaÂÏOÊÎξs| Ì~âÂ{ggg.q*ñN ê±4=v¼%fPŸC‡ù –¬_žwÏÎÍeÁj†QÌyÖiWNµ¨¨t  ¢ŸÉtÓ_å£GáÚ†á·6_`P¸ºí¶"rjÜÙïæ+?µ.h8wÀÇßùÕ%Ý%qÜb׊¹+7€³ê.*§¨¸0ûýUxDD°j¿Ýòší-)†‡Ñ¸ŒHžˆ~¢ƒbô¡Ú#¿)É+½zJ”ÑZ¦ùùùÜËt@ßµ?hn'Àb.w¾ðÖv¯T«¤Ol‘Ö’¸à)k8¢V"`Pø©Èe?%šÀz'Ó§‡Rs\¬ÝäI=&’ÂDÎÙâŽ2á¸]ýîþ~+Èx°\KÕ—²n•ñýðkßìÞj¾óåÿJw÷f2óìÞáˆõùÉBŸ#K¿eeë==w‡ÐE6ú›® éUZÛÚÙ ÆŽýhEPSűÅw ?5åK·?Y?¢ƒtŠO¨7'ò/ż€Õ'KJ*³Ä_3œh ¶ñk9îAZòò"Kµä-“…¤=i¢Y¶?^gôxÝú†ãvîÀùvkæ"G‡‚÷ß¿-Z†Ñ{R—ØÂé~$<”ïÂ$`IÚÞþl²Ö~†º†¡á=fÇ"Ÿhþ|eå ŸÝ°›6PÂ’6¢Û6Jtã722âõÚ2úîšhv=€a‹ˆ²gGN™Y®ýw†ö²ò.õn\ŒTà.Œ}…wœ{oL`ÕÔÌ„ªÎSùûËc\¼{7[á/VÖtÁ·†I@>ç¾6ˆ½ººÊvï^› òL7!!áa„ïZ‚»×ˆQKW\¯Á+l:(‰Í ÆV,ÿöýû”………O„ŸÐ‹Gó‹bµ}šÐtYØÚ—‘Ö¯Pûg[ƒØïyyk+$”$¯(uM|°ß} ¸Wùx§ð™K°š‰JÌóyå‰7##hííó §ßÜžÈõމAªi¨:åÃGsRŒŒ¨ß¾}ó;aeÌÖ Öÿèo:ªÂ',¹˜Q wÓ}p–·Ç~½çñZ¹Å[‹aLEu£éØØÛÒ²z£ÑãÍÎÑ‘‚«+Ÿ««+º™b[nËx•´¹º63gÉÝÔ*´–ÿ”ùmm+£HII_•Ôdÿ{k£«4 …Mt0kÔ$5Ü É!ÚÕ°5,†¶ÓWX.œìØ:jj6YøÏŸßHÄ} ™ÿcqÝÆ…NEOòË—/héáòýͨ^9ù•ÙÛL|õ€R¥KôP.ö3ÆÛ­gš$<·&#Ø5óþ ·ïð 5^3Úîþ¹—„3ýœ6Ö3ôI@çQÔ8È6¶M¹ÔùœÜ3}ë»|ž.Ñ?/ú±Úa PNXz×y¬³pn} È­¦\॥„ ñ!©Ï6øM§Dg×´7Í¢©q^¼xñŸÛlÂS!¼w]ÏgÑäG~&"aãY².}ô†3ó¨ëÊÚ°‹ÓŽ÷$£ä¤ “‹¾œk cR&•ïI¾f=Øø¤¦‚Ñt¦¤ÔeéÊ‘GYÏ|Ó¬7‹ü'Éö÷÷Ï./ç_#-+¼«S ïÓ'ždãï 1÷‚Hª8  ö5ô £iø-NÑ-7J½TŒ ÌÎýð\'‰°°ð;w2?&‚FSY«[ŽJEÕ’§”Ãi«Þ’9`c‘4{†ØP´vwã‚ Iæ·Š©Ä'é-Þîð¾–N${ål O»ŸF¹?´}„bä]¼‹$+V•lèèââ²P5%œq•d¨&GñS»‡L”gÖDä©Ðظü³ç”ð«’ÁöPv.šôú>’™Ù¬}^xÆš"Çn¤Ì{½´†Çqò>¼ ‘Xä69®•]yÙìÙvã=ßmßbBÜÖöÍ jGºžÍ‰ÇQë®{w^fgñØ‘$qƒß­;bbççÍ`í9ž2S'Šèm²%ËÌ$~(¨$Uº^Ü›ˆiXŸg Ò<£˜„ÏÁ¸Êox#3ø’E/‹HQgLûi6#H-kK,¬C8}=ʯ£©1¶=Öi—ßWZü³±fa?Z[?µKü玮´v„(H—ò·9pÿ¬åF~7•–‘A.yÊä¡r Ä?Gbø¤m¼-¿'/ éÓ“F Œ–{((ëÿ_$FpP+dG~7;{ÙÿØ™›í-‰nà¥(Œ{é)QÈãÀ‚í¡ÇJ†Š¤ää¡@½åæçÃV”•—Yâ-ÕÙÍ;_/îz(mv9Ç3ˆ¢nL`?‘ç`õº¹Y*ñÞÓ½¼ðá½Æ°p}–+:}3,(ÈEiD«¯ƒú²Êy)†ÎÅæ7µ¡~ Á]n»ÇùŽìëh,dî0«wrˆ+**à-rZZ •µddóoŽCñ¯oà‚hóÑf7žnÆÊlNPþKšL%<•™î;ú*r¯•>¼Í)¦çÇü„Áõjˆ­»Û>ÔKŸ&ÄçÓ®f¢™@Þffư±±©Ý¬žÈm—pÃÔ«@eã"/Ýá»/ƒÕ‚È‘ö©c{m½§HÿÀÒ2o°œ6®9˜EŒ2VU¶º¦£^1í_¯Sƒ‡ZÑFHH5ôÕƒ¨#ZÞ03[Ÿo|µ3ÇŒ^î}\F!–þÍ2=qËÞ 9%ÿΆv:hæ­ƒ†7ÆPÔM¸E…b>?>ã׿G{îßj}6y8d›0dëpÀ@bˆ|Ø2ÝèË+cF¼ô‹ÌtAÁôÜÓa&šcRÕºbè}Uè‘þ£djz‹ˆ‚"füX@á¢äÁ¡êÍЭt-õœ•–Öá¸/BŸFð^3/3·àÙ@Þ£Œ,3ÅåŒ'ÁX¦¢~zJÊŠƒUvºðkHo$è½>½p3ãƒñÉÙN/¬Ö¾äãRØÇN%|…cUk(>|±.¼aR¦ŒUín]ººPûÅ…kc2J¸¸.þÃ÷ô˜KKeeÑ„í¥Wºâæõ‚Èã×R¥yjWxnêW:ÍëOjæ·ýj™7«ùü­r HA¹zd ´QÚ&/uÎÀ*ÌN—Rž`ñƒh¯Â„ƒ=³¸0xn^>¥\Øk5ÛLhðÝSCµ‡-§~ƒSƒÊš=ñ=­)È0FHYï˜Ô½º<çµ¾g³ü矛ȬsâÈé mmi…PÊ“|255µ{&M´=âùr_IN.W ËM ¦îžåõ¡B‚šþ5޵µÏq¹J¢Bߨ“Dü©0Ÿ«záV,Aþ'_acòi9§Œ´tPemglÔíà0Ba#/­¯h³'.0ÅœØKà5ï0ÊîI 7H‚U °-MÙØ5ÜýjRú ng±»ûý}3’nÙÍU]Ø9³²öŒC—èmrøléÜÑn'œìÓTÃVV¬áýL¼¼¼­¼ÒQ¯7ëƒô' ¨•ƒÖbO^ŒýõK› :犻(ÌãáæÝ]¼ÂL| ߘ†‡#Q¿|PTÿkÝgžÔ™o¤ºññÏvÉGÛ°+£b¤ÍtËF­?¼¸¸ØùÅQnú_¥“¬Cvú?vv—ûJ8(œ‰FoéÚÂûúŠuJeÌÀÑ_êôÒ èd~"½úÔúkÿäà*¼ÚÝAM6 g轆FMu· >9nƒ“ÂJ†™´ì«ÔZøÎW9ccú¥ß)XÀ)Øy9ÉwƒšüDvÚ)š/D˜¡µµ¶H·å„Å‘dIÿ³[ÜÜ„ÿU^_Ñ…#]:ð²n“‚æ ¼ä˜„GZíà"ÂŒAÁÏgº5®­oxy¸¾£¦ª°ÓJغ¯–û_‰¯«¯¯³ñxšƒó¹óÙf ¹o v­3JA:kMÊ‹ÿÔÔSƒaqN#5å͛н¦¦½éþ'ÅšüfèJ¸8ÎÓâzâ c û*S°ƒ±±yÞƒ¤ôPÔs#üp}Ä|s¼êÆûûË ƒì|uÃ’4éŸUox©ßßÖU¨ð}9—çÇL\\˜¯(õœùh@ΕqxÁÁÁÿ*é4õÅ0Ô£ú`ø!Wm`yôáÜ|(>Ûc•÷¢ÞO`:‚<~C‰23b6wñ¦‚.$, ‹„”4.%%*˜DXðþ“ߟLšºz{;væZ7ÿé¾ U£¾âÞÖÖ]K™ÁÊ"—u}­×4jRø”oúç©+ÍÖ[2ÄTƒŽÈÈz¦jdHú¿}ÿ>D>ŠüûÌÌÌôêCR2²:1ÏLÿó£#Õ0£- cÆHz3C£¡Ç¯WÈŸŠK¸¶S\3S¯ÉÛÂÞ²h“¸8<—”+Ä)Q""xè$KìÍÒH«îá11  Á‘i÷_ÚÐȨÂô;jnnn‹ߘ`ÝgÀ° Å_OŸGEEF ªeHÖ~vcåj>¢¦¯Œ£7 ܤ†ôONlö埬 a¼ãi´ËÕo]ð²5èîšQ{…—h.>~{ ø€o>p9$¼ŽáŽC¯³~`U]äŸRT” €ÕÂNÔ€^ç9Ô†‘rÅ?æ±Y­³ßo\”#_vN7þÑÖ`fxªM Ì–¿ÿž^-0ëz{Ø]ÁÛ»¶Q$¶ì¸*ŠÝøRJ¦4wómFûnü;õ:'[…˜J;®³bݹoæXãâç÷D_‡å8Øßkrx9×Ï\¿ô‰,^[{ÿæÍ›³é¾[àì#ÛÚÚLòT¬ÍÃbH€uê¯J{g¸¬ ÿS§îL) —ãdxwEÎm¶®éUi]ÜãËsb+‚qBª—™6³i‰˜æ"55òUÓÞ¦§Ç0?NÌzõH5ÿ©¸¸øgû1¾†½_<ã…Q }…;âÃþ­G†·í;Õ°_âÕ}f!Gñ}¼’˜=é‘?\«bÇÎêÊ{^îäž ARysµ—e‘F—Ù  Ð0_}Ÿ^(t[î…½-‚ôÚ-‰§Pá¢î3sò[¸e.WTEÙÕaùýŒ¤°ÏZ7Òz¹Ÿ–:_hž4žÝ•QˆUxhqÇ/‘+dwRÄ×*ÇÉÉé33üh4L¼Ï^¢Í«Ó¾Ûí[Sõˆz/§&¸&žàZž«4 ßîZÊæ6¥K¸¸t“'pE†ÎšÂë7\ùªßæd^ÇÐFxƳ|÷mŤä2©öÒ ¹ÍÁ[Þ°‡ÓÐÐNHÍ]”ëgÇ)Ñ“³³ñk?µÅ¼Î…^›E+>qL -å–…ÑË<Ò þ•áÛë"¬§Wê|~b~‚ÜtºÑ¸¯ZõjõÏíÛ*/K¡¤÷÷`4,"2²çÛî³ÿTWyy‰}˜eÕÙéâ:™Jy<þý™Ñ¶±Vî¹ñ¯>>óã©"lœlÒ¿ 4Àôiˆ~¥¢÷=ºe}æþ:†#cPk%­–~Æ;;ûµÈ¾{O|¼È ÆÖzÎÈËã føý>ì×Ђ5kÅGÓ…×T¨8/îΗ‘³K+f§¼ìÛƒ`î~žlÖì¤H1l†È·¤Š¨Jp˜Ž~~ßÌ€6OÜGH¡Lql(óæÒï¨#)侜­à”‹¢22)ðQ.y®Æ±†bû¡ÄMÿíÀ@D‡õÙÕ±yï˜Uýý[Ï'pØÃñ«yn3ÓX ’BÁývÙs$…6À[cMxÚM­Gl·­Àñ}ö`XåŠïÌùü¦ïö›&4Båjç,¢¯‰÷"ò&WsA-<À»dBl̦¼šiàXÑX)Ñ'ãdMû«©œiøøq‰Q€OŒ8ߨ™:‹GW³X?‡1 Ê—¤tOÊ\¡¤ñp8»½ëà  ö!‘å í!²çx_]¬Vl-¥˜wæ³ÜOŠšâúv‡šÞ‡m íÕ ˆR#Kr7ÊâoÊG³ÍߊÇ/1äirƾ${Mºh 5åiÐî‹ X Aìš í¾„`ašÕDqÇ€èxWŠ+Ýîâ×+&.’mp¤óŒÆ1¼,7JHaèìðiFº¹½‚¥)Ë}ý9.½"?é(ç¸êØÖ/äÖQ!{&(ˆ=W]“t½ùrsÔuÜFž6—H¥fªú5˜»Q«Á%óÝs¾ŠÕ(“è·>•jûÀÀ Ϲz×çÙ(#:Äs¨¥ÝÞQ(1.u¹šMðu5xÀ©ööWÞÑ”a8x$ŽÞåéÙ‘êÖ±6b¢VÉAP^¶½~Ò½ˆ73' 7mí¢„”óʹ-=´{.œEÃeœã÷Õ+¦±QÞl 9F³J#Ó^fÖ§€ £@ÊÏ TÅ8‡¹Œ¨¿‰¸EŠöV2 ï{"O:sæŠQ¢Z¹Ê,pï1íQ¤œ—K)¼Ë Eë‚“:arsÄ·ëöî¡ÜöùŒÉ Ë—ÒRÞó>¤¸eàœƒÇšžz„çS:«´÷Ö¿Çßs˜YI’Æu_Ï |.xrò[ÅQŒXö¾²rÅ\PüÄ´ç¼Õlœ¿ï¦ÿ½6péu`pÉ~¾žáÇg & bêÙçy6ƒ¾ýÉpÍ?rv–£ÝèãÑ#±ß“übH;nu“Œ¯Á÷aÔû· âÅ/öˆD‡¦Õ<ë+)$+â#$}vÊì±Ùïñ>7A žˆÔ¢-îó^†Ò˜M³JQUq7¨OVd¾³øZ17n—³ßFJÊ)¶þ‹£´bÉ-Äç©ò_ÓÌ8ëØ·Ýt¾Åtå'™¡ö…n:.E„¿:ÕSßÓlœ;ðéàĉ¶ÃøM•d€E]}ÎòNkÎÛ÷4? ø>¬ˆœþvÊö*²°]Ú×@þG¸Œs²UÊc4U=ÌKk¤·-o×.Äp³Ž¾oO(ÈYiìù´¤q.´k³ÎN£ó×_WÞ±™ˆÄÕ¨3yæÚ Š"áLâxóóýd-¯¥‰w–¦ä`æÃºäÙŠ÷ú\XÎyAN¤¤Î.wÛV'p¹ïÚ?Ÿáá VlÕ­gn%)~zü—w=ÊD¹„zK @߯¾šoª«üÂ@å—à]ç0‰˜RçµÕ-»,Ž à©â¨ƒ&g»´x̯“ἌBƒú@Ð{Æøˆ˜j¶ê¹Ï¦›² uÏûón'hš- 7=á‹fœ™¤µsjàÅ<ç¨øXÏõ”d¨X—U‡*ðƒó\î/wNOQl„ˆûyÓ£¤§Eº§v«nÔîGIE6¸öoÝ¿ÓhìœêØ÷ê7Þ=l´÷õí¹š\fÄÄ$)Ä‚´$Q ­L8ùÔ]ìéùvsÆÙÙ°Ÿy –7Ó»õ‰r,z?Ój>µDt¾rBNwÔ­—Çʨ¨0®¥û y~»:“³EÞ«AYÉy“ù¡y,s€ÔÞœ€ø™õÆ.k óQU—§‡Ê¯duGÉ“ï£;^I£8iTÈ“XýmdúCN(ó ?SRÌ/kšÈhšÀÂBäþ Êjj='½^fÇæ±oòëéZŽ’dIHé%U ÿqªÌXÅwyY±N¦+w'b º›AO̺Wó; bÅI$.fs£uAlxþd®èté”_%üÚr+E yº"º”,g«r>Ö—½ZVX ¤Å…åvµ¤ûv|4pz3ÜÍ+ã°™ýœ#ýW©ýÉ^g«0/ay®Ì†;forÞ{åô(w²Ä®,¢hxøÚ mâ+Lœ‚Y!'òÇ¢°i–8·¯LuQè[L°Ö«î)D!2PC<=îC¦v­ŠŒ 'o½ ‚Zn CoŸø_Ïç4Cài’FAÑÇJ—õt_®%Cç»»±ŠF^òyÍý¡…Í—fÚºÌOìÎ8kä†ê<"Q¡»±À%zK“ Ià¬|v<åõ¤³ìiÕ]Ïs$Ó‘ø|xòiU¹ü¡“ÊÚ Ï{{‘Ó¿£ '“–ů®FP%I+BÒÌ$„8¿:î4 ”¤tü'.m2¼HÈ>œjæTuã›éƒžÓƒüœ«Õ|#ž·Zãî‡C†„™§G9gÈËftQp"o H›•6Ÿ±çG c™öI°6rQ§{3.]e´oáRt*Z¤’ÂÒLÈç'+kr6ÂJûãùÙyÎi¢ÉT²ùì±;Èû>c_J‹QXvÇ!±"ÿáäÃOÜíÆa ônÈ 0龌CÚïŒMùé=õÜýÖ4IËÜ·ã¨(f2A™ïn@A^cÕÔ³›À—šŽËÝßüuÕ@ TL0'µ¥3œHo…pË*÷ÍùYéá—nFa«Þ×¶Z£D‡ÝI¬D:/:ÔòÙ¹C¸°y¾;ü˜ûŒ¿ÿ#ߟžòÇ“ 5ˆÝ³*q²ÓWÁ„Ÿ!)!tyh¢V«:æÅòRº ÇBQ3Š‹JíF<©!:þèȺa»)Ù!¿›.K!(" –à$Ô׆o§u2HÍ ª‰ýN!]» £B Zl7.%`Þ~8bDaçØ(x¶ÜÇí!6ñÜÇ7gn·Ó¼¦›+ª‘@JÜSj·-ùÔ+£ùD^ŽKwíÈÔïËØ¨ßOfÒ»ÀRá6R—62ø(<Ú÷%­@&nQ]™×»œ}Uaóó]W_²Æšg€I¬*¢Å–Ò<õ–?·šõbP´qÍœé\ì„i\|Ú"ê(Y7gˆjzE˜®þÆ‚>¿Z{" %d­­Y›4ܯ¾§ówÍ$ Óå&Hå‰uÅ^?§iñ»å[¿<Ÿ8xˆ¼Ì9ž}•³-u™¿"q2»¸íûسòQg¶|Å:à,çËv&Þ·¿;BA®¬ÔÁ93zí®€*zž×d¯öŠ1ñ·'MY‰‰foYå€V³Í18¢8ƒ‚%7óK~&KnÈ€sù¦¬¬×i2rˬ%Åå1Êj}µM–CEá2·ãÕòC™´ØPvwUe[ú£ý¾X£««íœÝ¬°_kçÊ^^ƒdž Mˆñó~1FÔ ¯RWÃA¦W”£^3lZçùñ?ã€GÔÅÞg`f(•±¹Yä±Î(ìåø# ZìÒ¸÷6ùÊÿøÍ!ð3„ÏOfÞ…@ä¶uÝùV×ÁQb]é.ûÍl ÷àÆèy?$ûå¶ÿö‘zfàÕEéwag ï³W$þ¾uÁ‚€GU ۣºîhZLÈØßÃ$X2*ì—Ö(Tçä :03Ì0T•7ÀíÍñL³`S…‹åg‡ö–‹SD` J܄ljçcfÊQ»rìK¿O Ç@€‘õŸ"!¦Ï]o0À[u¾1Û]<è@&_ýu*ŸXNÎq¸dEj6he©ye&¹‰ò ©°P.í‰#€pRuÍxe&Hz î-ÉÉ1æÈ­ïÍ¥32Žl€Õ\6\9ëèѺCy*‡ñm•7*:‡ß£nûÎEm7Ö ÜðN:c¸´–‘â¶G…ª‰!(ž5>b+ÖïNÔ^\q£èG§FÁ[µLEBw=¬âË|×à×2ü\Ï›ü̆¥gÓĈèÜÕ¶›oú½LÑWñš¦zC(ΓE­*‹rÝ)3ïçNz„Ïê§ŠÓýŒØ3ÖŒè¼ó­¨3Öt¶™(L–[cT 7æmzGýX[[Êi3¸¥ÚùÖ̤áUöj)’Oki@¿ßøÓOrJÅO²±Y9Êlá±Q·8§ØÐ0†¸)ä 9I“µ#%.~¢*îfZ¸¹OxY~Exýy` «éwÒŠð]ÉÒ((åtȹÔ»ôé±ùRÕˆ‚çþvÒºØN úG€Ì!”Ì·7ß™(eÖ-¯qy48iACìì´j_쓞ݬœÿ»óñÁ2C*þ«ÕŒì?ˆ$š$ˆV2¤šéø<¸®EO…ñÃËc Ef\ˆ-2U¢Næ窽·¢á’ +àZLcå,M37UØ?”•˜4‰¯%qdž‡Ö‹¸œ#„¥ ¢ÑôÁ_¯±O•ø|ÙkCÅðÉ;6–Z¼{ «­íÎi˜l(en€dçé‡y4ÜÆª«­½ç# Lªï­é–8ÇîßÖ*5ž¡ƒ›†6Y#òTJqDQŠzJ‘ÁáÑÉÍw›+áTÈ5Þ˼”H×ͨ-¦Øh œ#F0 _I ÀÙõßéîK&6P•©Nõsmk‘V>_ä® <3:ßëþäè´ösñ?prmà²OÌu1’¢u±’¢>’{q] u­ƒ?ŽöjÚ£/: l€úHA®•GêÐÍ»ø©ð‚ëØÓ6¢v¥‡[i’1µ¶Ý°Üe$™F 0ýÕš®Æþ^wÜæÚ]$M¥¡‚ˆwn#꺺@YW.ÚX³Ïc‘z”ꦧ­ë, ýÁÅ VÔÅŠ°øŠä˜CТ"iEÝi/²Y 뱉cm`!î¦ÚË캰¸cÞp]£Ðš 7G|4 Pë$O®ˆnÕv ¯‡-*C©¼@(±®12nu;6¯~+’  ”F£¥ ¢³[X -ùq¤$¤€)wY?N¸÷,{s©'"Ø<&¢×9–ZŸ!g ³—»˜rÖ[b¶0p³ÕMLÖ#¹Z¥GÀ¶ Udx£lbòSŸ]@ í $KÀÚÙžBwŠm´=›OÚ¹ü®4Uy;Íõt èN®º `Ë7A;ð=ÿJG§Qo;4,m:1ò˜[d(¹4–ü¥šæ7g®„`ª á1¨8¤X÷Ó”OR” òÈ qÒÅ7*G£B±H8°ß˜\¹l×; @¿^CPf×Þïß·®Ûþ•¦!§bL·'#2K², ¹´¿[Ýš–|ÀXÂÒÅ^dîõŠäZÛà`B]cZâêöŒèjàÉœµ÷¢`üsÖ §|ÛðÀ!ã€îô~×ãDƒqä0§÷Ó)½û|³÷kª·‹m.¥3·“rb0þÚpÿƒ€äŽ4Üè1‹RpEs²¦SJ**'d°všØ-?Å­p©H=p6|´ñ5nu‹ËCw‚¬¨(û2ÕÍlY’â´£ãI ”pj¹ùîºX¹±â §]S¤ß`¹ñ!‡ŽÜÙß}éËÂN1KN±p›LA¼§ÊùÙß,šFZmÔµû^·:ýÝî|ïæÌ•ïôD„ÿ FÅê^wŽSó¥Ò¤Þaxë%ñ··”%€Š)@þT«ÆB]ô‰ûîgn~à·"‹ðo#Fœ‡RúcÑ…¼.£y 0c$ñFO-CNÍtÚë#Š@‹84«›ç峯UDn¡™ /2—q± udKDôD8I‡‹žˆÓŸj ˬRTÄÄ@¤6 ây¯ WÕò¿ÆYˆ‰åÌ…IE‡2\9¯ÇQ&Kˆ¹~µR 8;`SN!¸¹YÞ',(oñ¤Ö™&î)ºMM@Ÿcú²¹·¹Â–‚Älý s©É‰ ¡µA‰ç¨›*Ä7ÒÜ'‰€[ÀðÓ8€U6}â¤øÝIŠ—ñj *wTt/f€ûÒD4/·hÕ]½ßUýµOÕ^Pi¡k¢í ñ´ß\[Ë>/ÈcÓI{Á‹ËCk⦅{?“¾fÈÃy’“ï5|ÁG«jŠçcVõ- “ëuiº«‡”<—›€Û|{œƒ]Th'ClG}$ ?)y0`oï“'çŽñss+œ@î¦BÐ-æ=~˶DMÕÎüTíÒRÄ.³¯4_3ÞO9`vOI?~\™á¦ PjiØŽ‚”QQ iœEËÞh¸L·¢749»XRá«53ô‚ͧ*…ÅÖþXô”@©ubRgp *\\A»µèZ¿E½E¡x>ß®q<…ð;ßDAöÜ%¥Áá¶’…ðœ AxôðSy꣰®Å³‹¶Qׄ6¿ÀÔ +e“:¢îUUT͇ŽG£®k…—³U+P}Í‚Ð!¨ÁÀqÄ(gónÎæKÜì€öHë¦ýÞ‚À³Õ.Çiõá¼ê¢¢ýÏ·DÉ9#·Ìc*z ä'´ ž{¡:Š{á¾÷NáÂnAàÒ‡‚À‹ÝäiŸ‘øÐâŠËجr…ù ÁÜ ~˨ \³ÁÜ5 ˆaß3  ‘è°O<¾Ž's»-ÇmîÇŠa-ÐÞ5ðQÑJà¨Ú¿°Ôbáø~öîw¬œÕ«óœ­ÓåÇSú.ZÚòÛß±G\:Ò¶½ ˲£BË=a+ÕÊ _G¸ ^ly!N^1È-€|ÒšÑÚpw|DÓåql:¡?[ÔAÖÊiŽT$<ëõ¨¥0àþk3¾Û£~»í§óQ0ødïÆ)fÏ!s¶@îí£OŽ!w-‰@ëÃ’$’`¸0ýkùû®‡8^uËó-šî:6!w ­ªêŽÊüŒ@ÐÍÆ¿ö)üv 4x'}KØN篾~6@‡l' Ü@ ggn:Ýðh2åÃÄóæ·ü9û' pcbŠì:)s7Þ„¡X;EHÞs ¯`¼–·h|¼i˜—ÃÄ÷êåKmí›?VKõ‚àmúöb}ä`u¢yÙ²'`WœÈößܘ€~ºikǺL %›¿HkʺíC r´ÜÁRÊ•©ćÀ¿vVøÿ ›Dðiœð[è𷨨ð‡((ðÜ øè‰ôõö[ÿVÀå–P#“Å“µŒ!gO>˜}Aýo¾÷?v?‰Dü ‡„]L߇ÿý·3­¤:”_Yêl¸`RxiM4adü_¹ŠÿÅ‹ÿ¿9,Èû–A¶›JSàƒ‚Îeå×dÿ|Aâ¹Ãü–¥XgßÍx²ÿ}§ùÿþ°¢ÇSÐb©:[BPÆ”³³üÓ¦Šb*—x ¤ÝÁ¹“ÔˆÏÿÏNð߈´G!MfN¶!À‰¿ÿ‹Ýüo±^fÝ >Ï¢…çI:Õ*•- šdÄ!^MfaÛ· [ŒWæ_¤¼÷¸á.÷¾˜CŸÍo|^0¢½5þ@é?ÿÏçïÞ̱^…Ü>ŠcD r§rèÿçÓj é¶zÖ‹A ¤Pn«süE:_ú”Ò§ÅúYЭ[òèÐ{‡Ò@xB2ùð¼pZz4‚Á‡6ØþžaË¡ô\ðùÿjU瀹v"ò@ƒÒŠ¡c=Í Ä|ï‚^ÕéC PÞRYÎXÇ#¾e¢Þ€~ÍôúõK¥Ã&dcÈñ'åm&5¸¾Ïëz_ú ”PS¡ºÆJÛrѼ2­Œ@Æô=ÇÚœQ¸¡ž‡-ÚÝ#=M£hÇÈ›v)'%ÕÖG¾c6ÊŠÎ&‹´'0žýìÚð¿ÔI/â$3üe‚øX!61·ÛÍÔ—qªtðŸ;g#Îb‚[f™¯rTv°oÕ.˜Ç#ùî@lR­iùÍüÁ-½†Â×§9³ˆ¥¶d~ɾ'Å…ç“:öLê¹ ¤nÜ!ºšÑe‡vmõQO<©Éw—Y,»²5_Ë?áÝ€O!þ˜®¦“•aµ |ç¥c¿äÉ®wkÐ÷‰âe奈¹éÜW5{“z?ÐÀùER–¸…f¥Óئð݂ظÅÎYh»i¼ F¼™ÐÀñ4«÷¥~F4“¥"¨h¨PðùÝÛôø›z@‡­Ôðéw¹åÛÊ·ËPÔŸbfó/w\ž-§û:²*“Œ7µêûͰzØ»_~Ktàp¼EÛ½:N¿*Øz-,¬š³ÙɯKÙí½„_cSæο6ÿ(¦šŠªPÝ8Æ÷ªºFBø$‘V¬‰ Ó0À1w £iòìÏȬ¿l£ee‹©óf–±"ÕgÔ̼ãPš-|ññ”ÀÊå½™gwÀDÜbߦ­_6ŸßªÀDű©™ûïÇŒ{©…Ï ºï‚/šfO‹x2ìW\ñ˜ðþZøÞ§¡<ªô"kúäôÁùÞ«cN“¦‹q™¬?BTÍ”@J†Èd9œî-ŽtÜè<’Ÿs6­ âÓÐ^ÃLþü½ffmØ_ìkùç·>)¤Ÿ›Û¾yýv“ïcÃeM±+¹î,îŸö–••±2ÒÕ|ܸÝH\^Oâ'Ãvƒ¦¥çRÓŽ²Ä‡ÑºH&þ»ZÞ·Ö˽f³Þ¶ãﯹS€í¾Æ±ü ¹]­(ÚÐÀÔ¹÷é-‹úëí#Ó”®ÜÀR$e«ï&J3ß‚@~i?Ai‰9w]AOj˜'ˆïù;mª±Š™?‘Î xÓ ²ö™›©Õ³g7áî/ˆÎ1ÕÒ±Ô°¶i¶RÏ#BQÌE¶kGÔ;@À?·b¹"Þ6¾Mô*ÁŽ’(Ǿ“m¢õ’¸M™‚Á]©ÁÜÀÎÍ,–#1ÇØçÒÖ=/^v.w’ «£€£­Jâ‘ÊŠ(àÈíÿ#õX,$|t‡NËlgN Ïd[`¿96f ªúmå/wGzÓG¤Ò!Õã/ã/…&%ÿ1ÄKÓ&ÍVBМL08M–+vówÚ§,¢« ë á4­c» ØŸ¾1lz¼ªa%¢FÛ¤Ú•¿ô3ª)lI%º])ž×“ÂH³ÕþîIä0± Âiº³PñEë~|‰;õ6NPVµâ™ädSýöC°¿ÑpB”[¢PŽ¡éÎñ.: Ë%ûówïãÿ–Œ@D×Ý…âB õ\-i$Ò8,*rr%Olú¥›¿UR¡ièˆWNåÈÜ3ñ¨ýÖ"œ5Å ïGØ å¯€iï=DiqŽß»£ŠAY(ÉnIÒÑK¹Ý˜ÛÌŸá¹t3DºÄÄ÷“û‘ái ¢Nø 6¦ç|•y#AþhôC`B5ú p›UåŒ ”i­ü%9òÂ|Uyë:×üÿö_&êeàÖ¯îÛmÏàßɫʕɘ¾ü?PK‘nYT2Ž»ÁTœ4¡3d.iconset/icon_256x256@2x.pngUT Q(bQ(bux èèT½uTTß÷?´œÈWíôD†“øÅú„(7V¦-pûô\H'Á+E P~ïRîõÑÛHißþ¦Z±,8Í˦Ó~»~QRŒž=Š¢ªúÛ³ÛIf®3{£/ž®°°0îînÓs»§‡ûJ›ï Qºãgœ·¡Z3X²®}·øR¼À}îJD¾‡FŸÕ˜›nbqA©Q‚:NKŠ‹Ñ·¶¶˜XX€qcÖ¸^?xÄu¼Z•åÖ§í”ï˜çyèä†C«ÝïI¸»»;³!?¢†h·7HVS$îɦ1úÀd—:32lŸx<—cI¦%®BÊ—žobj–+ŸÎo±ÜÒøqÒÁsx`àÞçéþ {(…‹n¢P­Aô) ç-(FÄмËwh3@ðØŽÏ—ÃJ òKOwF~‰ƒûu˜ë9GöhhF…‰¹9ð£‚L7²4^KZkÿ?¹L*Þ7Ç­¦À²zŠÚïbÐÒíÆ~GÁí.·6ïy™šš~YÄ) ,?PRåóa%‡¯d±Š0ϱԺuX¹Øód;Ž`£Y¤½ÒÉ9€”[ñþù[ŽÏk=†òÇ@üIoЃVAƒƒ¿kP]t³ýoÏV°H¹79-ºÁ´Á¯±A8åa®‚CeébIÞƒù‡Òå¤[¹ÇM1’¡~Rªª‰¦"lUÕά·£ùŸ¶ Nï|”se”Œë—ê6»!n:‚&Ïh¿ÀÃ2Ëãýá°öV•¤YíQîóô})’›ŒÈWã– =p)ßetAò-ûÞ(d~î„Ï ±8¾yÐX Â^Ölóñ$ï“¡Áå*¼†ãH}î¢OÛÝ‚“Žßˆ´üù8ÁK!棡5M2æJ Ì–4p‰¸ÄDÂçÏ>q~~ÏÓeÍhÓË 5ey±L3Ó V2Ÿ4t=äuC1«_AZÉ•_ ðº3ïgò„6Qµj-pUÛßiè ˆ™—¨•))+<=ÜDÞ¼U"ØjÄ»5X­2î=Æ& ñ ¬eÐàÁ{‚K“PèÃBb,£ rDÆ ´H•š{–³y/ôèÇRDÞ]Ta"„͸ê~03cr; V¯U®E¬ÅdáøYr+b*rOø°o’°Ð~0‘Qã' ¨­ƒ‰ͧˆ¢Ë¦ªTu§iišÇó>Èß"ø<¤ ØÇL—i‡Ž6ÞEä¶´ú=ÝûnÑx¡B¤@ñJÿ…}œÒÞýY˜#=a¼»ÚG9DëÜΠ”`W#ôW™š§‹îpo e|f¦í|3xÆ Z¡Uo×êz4_GL¦z>ô OKwIxÄŽUï+nɃnüÕüöi{égǦ¿ÐõÍ ïîcyàKçñ"IÆx±†Ó> &±ÉÒ^.8î°èÕÛ-e÷ÄRŸ `¡á|„Á)NLX䉯Õ}&fûçÏÑ‘½¸QN€3M+³Ð äGEÅ¥èö:醠’ƒÔÔT‹•6QnžÎeȘùK÷Ñ´¶=Ú§¬$¼Ô{تþFçf|W-¢vw´ï¦D@ßB,±{üS$$…3¹æük_y°Ó·ØOrryÝ*˜ p$ÛX©&Oêì^fjêÝÇû CÆã@¸þ·2‡\9Ïûóï‘gìP¡v…ÃL,ÍT¶›Ñ¼5œœˆA³ ©ì±ß¼§Ô0OmG†‡¥®Ö.îºf!ðªªúloßznÿNÖ@îí÷|Šœ"£@B(Єó¡T“„ïq­!†úØWQiÆê â*¾G”ŸPRs£Ý>ó«÷ŒÊ—'' òDøªšyZ“ýds±?UÒ Â5ÿß(µ³ñEAnï¡ÇbnÎÏeû„;Õ^&È©7 h8>ãç­ÅË}cB„´ü×ââÔeÚõüh%c;¢MÆAr™Ôë-'¶'ø¬§/áÃA¹I€¶@ý‹+LÇšß‚å’:-¶Kí¨ÝoöDÂ¥ù£§¦7ãšÁijõÑå3h% Lá·ÿvó…sþ×—wûJû¼™,„FGâ …Ú\ÃjIÀu×"«U°.°¼>Ø®+)-eeo½×èj­¦j³Á»&!!ˆÛ£ÙââØÄà.Ðáqäá²ßáª,Y)ÊÐÕ–¿IÖ©Dâ,,-•’——ÿ w¸,$$$€ï<'~Eä.ީΕiMò¾{|ƒ-ƒ¤YRíæå?‰knNS ‰Wº‹¶z5pxôÈ èÎÅO׃i€Öã ¤Àº'—ûôÉ%ô¦¥*»†o…W‡WñóT«j;wM³E<¹[½ê]Ã<]2ØSè" 6ªªæúí~zÊÊÊì²84Üx· Î7Þݥ†§nî–³ym™vb (Dªá¶u{Ü•òîîÎâß/´À^yŒv]ê%`r¿ÓË%¹À{" ¢À–\ü÷Y,®É|ª³4•Ö³YªÙý¶:\RRR‹©âD›$è(9ŸÕ¥2°°hâPilN§\¾D/Ø·û’ù/7¹ZO\¥¥¥™ð‡Ò|!jÖkœ¢ó!;‹ë† £ œÇ|»[íž§›;ÃQ‹ qÔSQ Ê—Oÿ{r“¾ï2‘ä±éHæÕ?:úá+[@[ù¹]óÿUW8>½°Û!§*§‚üŸâ£8«ŽiŸP ÐHÖ‚ìæ'O ¯å žp3‹¾BxS¬N=è Èj@’š:ÂÉûŠ­T×YÏ<9GebÏÉú+µÎÎO-[pwD‘Ôn_6öàâ~2Yõí¿ÍwG0`O¸‡  …EŽˆGIõ*øû÷ÿc"^’ÿnþ«Ìë¼…$îêøN¨ë5|ªÎJôÆ-™ÿUñÞ"z'B3€ €f$NãK`«åu¼Ü?i»YöFú*A›Cõþ¿¡xÐ÷ @“#§h0®/Žï‰)ì(ž¦¿ª©¥Z+èµ.u‰4•oüPQŸÿVþ!‡aÉó ›³}¸ÕxOÉŽQf.îVò¯`¢“ºP{IW×:^]cæ8M*ãV˜‡"%9ùCGà¤àsµ£hPC†@ÚÑ7Úûe˜íŽÃeq«ÑiF¦/¢m,ÅFÞ­M ´ [þ_Ÿ*Ä’ƒ$6·¶^32öÖÖqBò‹‹Ùµ[½®†ÿNpÆ|DDø£Øøè»Ùý ‡óV3Jk·XYv¯?‚0çrŠŒú¬UBËPá™XY „ÁpÙ£7ëi|ÖTœÅ8éGÇý¸EèÿÍk<©+Ô¯†F86€\bÑg”õ¼s¾ž¶oµÀß5!ªO¼Œ ª:^k©ÊïN!PU-(ïñP*Ï›ØH)0ÙÿÍíåv÷›$H/¥kU¢äu ‡â§Iaƒ¤ÊOŠÒ\‰þ#¡Ë É•² çáZ‡§@XNþ9íZ¡B­Ü CœZW÷­µŒ~(§|­/µ°…`࣢0騠8pA€žjó;[ï>zƒ á=<ý ê ĈT¬‚‰¨4*%ÝßüXÜUYã%*ôÜ cÀAëY¦¼®ª& QÌÌÍÓ‰°¾¨ÖÉÊ4d}}ÝY‚ñ•¿®Í .˜×ä½ 8ƒYÚpbó§Á¯ð^ä´üÔ}®}ø!£Î£1øQ¯ËféêCÝ™oaÏ7T˜ÈlÙÑ·¤eóû?>É­Õ½ª¸©jÊJLDRUUVSëÑ·ÊŒ¯2à9½i7÷×Ó '&œ T††¿²WÏKŸw6&¬&òš ÝûVZjÇÂêU½¯ìV/@ÀJKHôcxµ•ØWhÖl3ä¡êST‰[цÿÇ»ø #±‚58á[Ÿã¥gö}׫x«è÷ã7 Èfô£5SGŸº†*”W’&§x¿HÏe[/®séI¶ÿ¬?“‚¨c§ÝÎÇBÊž±ÀGæm¸cDÈÞ«·³%±WbMåyŽ=¹Œ€ ßZH_äÓ¦¬æh¶¶¾áDÖ3ë7/·€ëA‹¯'S½Z¡\’ÀK¸Öø×Ïà·M£~ÿ‹]„!ºü"«Û³–È…ß”Ç\È>9!º8_yw§z² 8Ãkzë#æ29ìûpí»ÕM¬ 1Cý…ô,×7§·Ø%¡lÇv¬{nŠþˆ™]Á ª8Øöö¦„çœOáÜ"-äñÑÇÄÄ$6/¸î×¾©5ˆ;|ýŽá 迱PV¡p¤¯›S\äVᪿþá‰`5÷eÂûkb Ð˜È2.°x?LðnnnÒðð¨<¾zà³_öÙÊ•ŽL#U=›å¡õüo*ø¸gZGõ§­ÝUb•{¬áXè¶ÏðQO~>©Ì؆ -GÒÈÿ·mÞüHL¤€P`¥ÝêswÎ/CèãJEý&ãQÇü_ÐydLªòcQoÓÅV-•Skß<–aXuJ ­.?À4ñ z¯®‚¡ñ¦Š`龦н –Ÿ`ÖltÚ²üÞû–‰¦»YJ1ÿX„•EUÏFw ­ª!þ¨{{/êBy~c¡ï¿É,η$þÆãWö€pÑrÉÍ—ÐxУŸøùùy×I™±ŒLO!‹Z†­ÉNd“¯™”ѵ6¼Ÿ¿ºËj·øÕ}.3ªœ¤OðŠ;6ÐQsÕÈ l«Îö¹@Ï—Õ󫪴Ÿ_Û´Û´ÌŒƒJÀ¡ý§´D™P¿l™GFïÍή±WpEAÕNj!ý?o»cÜ@Ÿ?´ÀG”x¿«}#Õ¨"ܺ\ œ'‚V:|rs»F'Ç¿ÏyõßxM$ü«‡ýoeÄžu[Ø/˜ÃÞw 3â"P“¾âìy¸sôÓü°’rM\G–ƒ· ýW€Œ«îŒ²’JÀcÄo²#øúw& ×.®ÉtâÉØöà‰|ëVd½5w€|‡JLÅ£eå=e×ÂmäÎÞXɵüÄß,b©^£“©;°…lÎÈÿTêµñȧü¦Oç¦Z¯ýPÇM\@ò6´0eÊtQÀ¥kÁ7³ás$|‘•÷D•:µ•îÌx¡rÞé ±ßõÃÓ`dd¤÷é”&>Ú²4+îªÍs¦}a•·^÷”ûˆC '¬„îoõÓàÙ¡.ÄFj¡ÒtµoÜ[~Ð7:*EÜÌçŠñ_´ÿ€#EýRVäu«Ýà;tØ]Ž÷úZá¼,qpÔápÚ¼Ó®ö[õPhiÁž!²ê×Y©*¶5tsŃ`$„‹oÄ¡GôÈȃ禂ZÕ4ÿþ¸g—îÉw:ûæÁ6®t‰ˆ q9šò.C0åààP¼D$(.nÚ|ºYyAÒZO ãyn²ol£DÐá…¼æÅláZI˜P·\31ñÉ{½µeZ8Á>;¦“ Oc²ÛY‚8èëßÛ¿3Éh`¾]…Jy‚<2Ì„RÑpcEÎÊ;GGG{KuÛžÎ(ÞA"½EûݱŸ Ñû8ާ½RÿU~²V—.ÔàçÊ{ßn× »úcÐ\ K ÝžC:•ìR¸íqoÚñünî|þØF&ºÂà ˆäð0Ÿ'<´eZBBÍå°ÀÊa—º±ãç.´ÿÊ?=ViÙ‰ÊçZ+Ð….µÜ !{º•†õâÔ˜}½ˆ·Oáîi=V ¶}ÆØ±$ø9LŸÒÿþýûƒ˜Ý¦ƒ¸^aôSmïjÇw5Ê,/åò¢½Ÿºí2á;¼ñ(DüÊbsÊõº] ”5B'>MdD>W³Í #Á‡+ÒøŽŒ–!ÃëYm–ôACµ,¥~Ä5@"ù—аÝð鎗µ„Ðõ¾µ35ˆw¬NµDíd$ãOlÅÈzJ!°ˆ ÝÌL«±4ëa YíÄÉíC…ÏÍWëXœÿ>«À%þ„#±R»uF„Væ3¤*“²¬Ûä¢Éé¸.¥çƃè04ÍÚ¶!rš ’±¶WššÍT¢úIœÊ'çÿdè׌?˜XÑ<´ï«àscÐK[.€'ì §ÃnÝŒž°ûãí™Ï&}8D¦Þ„:”úcŽÔ7£#Zwp¥"PkõÑlJ|§N޹~Ž,UÏæÃtŠO… §z!þ˜¨ç[}Òé ÿÞ²™=ë¯y ƒÈƒH©:HŒ´4Ò‰ÎôÖÇ<ܸ˜C bâ2˜Ñ“ è z¡õÄ«C†ïW«gï>ô‰•0ÁUÍ|~~8Yéúï 0ãöëõå!ëhú qÝu®8`½µË:·J^ñ×!áÎàHö&D¥Ð´³c‡TZ¨À@M“t ® Yÿ¡‘ÃnEÙº+K ÛŒ‚\ƒš…ÌM $°"¡Ú82äÂ>ID(-AƒSÙâOû±WÏ·47胪*@_ T” 3SSÓÖF—½#2®°cþC.ºtvkS‡².ýí{›˜XÅ.ie¤«–ný9<çFWsßÐPÔýçþ7K^Wz}€ñí@Ï>hZæea98ÊÍÍ}ŸGÖöÉ’þ}-)ì‚knûk;FŸAö8·ò!&w¦G•çï=nà¿Íÿ,s¢ªF—ÂÁJðÅÅÌ€úÎ-.FŸšš*,.–15•Þm@ï0Àý¿¨H0“ªª„.ºKiÍx#N !À€i=á@øo”pPMÀ(9̬4\8¨4À_::@ÃÜîéÃÓ¡(‚fjª²#†ÚJt²ˆZ.3ÕM¼ïà—c®”‰‰‰=+=¤NÖ€Ýàö¾>̉Ӆ³¥Ø$ûòžžž>_<+KÔ;­\ýë×7u¢ˆñû»^&é:mîvS’|çý«¡x]çjzHyQ Ú4Ê0âÛ¼lå–d9{‚$˜¹ùù Üåä=™Šz2žyÇ9ùØ+Ô ‹¦í—ÝQüûìÜéÀ8ƒ ÙJ±lìwsï`åa;»WÕ55ñ‰‰„~£ÀÍÌò¯î¿‹~¨ð\œ~—› ÏÇÇ2@íúðpsâÏñ2Nßû kŽ5W-lã¹:«a¨2r&Ú¹ÙËdG- Þ›d]S\¬¬MŒÀºÔ`†J)?‘óíŸf:Ý2’Á®SEy¨4$O‰™¢iÊ“7ân’'\/ïŠ~{þxן°%èYMñ!æ1_üö±tIsN³opPÒNá•÷è°¤ž;0\¶vR½»ýÕþ¿ý Œ¸˜ÈÑ'ëY¸Ø­´¿´Ã…¢ÈÈþWÛÖ‰#uÑçm‘I³¹…~˜^Hž²Mì•UWEêȹ£Š(~?Î[X /ϳoˆ,^h Ø:1]”÷Ç®”C~5石Ë-•\(Q=?Ü.·Þj Giå.´ám¡…‘8I²¦”pa—É~§k¦°*f.9UÙR¼Ý;5T!|ÆÜÜÙíIÜÝyÂ* €¸ùì‰ÇõÃર¡Ò ЭOÛ»îînaL’ÓÔZál¹¸‹V™~l.ÐÃqî,ü¤èÆÚZ$oTIvCEÕ^Ì<æJ(¦ŠôæxŸ†˜'Irý9Ѹ+Ôœûßûجš£\‰Øógryp´Óð0!|)—‘¾ûRþŸ ßŒŸ”½r °+µKŠ#ZDÏ/.þ£‚~nkl#ÍåMÂÆÍƒ¾÷V¢úHó^~zLÇã>ŒU€+PºÄß7S¡Hðšt-7Æ›Ìtâ/½TÏÁ媃Õb1•™"Ðuc=p¾JKpþPTVej)ÑWÎ)#âÈ9„ ÞWS%ìÈA–Æx¯š¢a`;ýóÀ ûÃì‘ý™a~98 œbf0˜©çgùÞûˆÆU!]e‚‰Éy¥-(¯(EÝ7Ò/!!‹„UîÆuF9Ò”÷ÙÍ`p0º¥ ÎrÂl¹/ž®Âïéjæ.ð íÑ3@÷æv.^ã æTWÿë{Ù=ßo¹ü''€QƨùÏ脱¨É,Œi’ú!¤¢Æ‘Ò cNBúÛÍ®î|Ö áuùš_x$¤ƒó‘$]«VÁtç+;¤jººV_¥pv×p‘œ½vý•íüéj¤Y!:$^µRL^‹)JÏÞ@,å]±b¨DCŒ{cèXX0<=ª¦d«íÌŠŠŠ:­ý¬;ƒššZ1”-þBœ÷!–0}ûŸ—õ?^U‹7[u.ºá˜¦ËÒFÂ%;Uyîz8Ó‹4ˆ GH$¿Q²ð—  1¢Ò8Yá|,.ÿ`†ºÛÃ+ÑqD-d¦ÞP¥ÑqªÝ/‹ÕJ¥êññ×€1ÍàpxTÇÝV”0+ ~CUW%:¯7¦C]+"#ƒ ³”,OV#À’á7•“K ˆ[/5]åŽI}þÛˆç<\¼¶Ãl?l*õ+ÐDñi*¥ÛUÌ€3zŽìaEEj*—PuµHƒ§Ž*òkê:½èÅ“d#±u²lYYOsÐEù+é鮼›q!áþ@Ukaþmk¯E:«ôQuÊÁKÚ”ž¹¤8Ž•†‡ã9®>˜Ã¾)²û‰°“%XíÿõHs c*lÅž™õx¡þÄè§cþþE|«ICšÕ 0*LľAŸÂNñ>ì¦î5NdhFñ_â\õ¡Ò|·Ý& ˆ2ùXpb@Ýú0Jˆf±3*ÐR®ÞÏND] mv¹Ùù/ã¼KGì—pñnôäRä8I"­_üé||êãG}¯á!W\Rœsçpô¿vrá¨èX[:Ÿõµ dŒ¼ò_¯ÂF{Hâƒþ6’:A9Ù*¨)©Ró²‘Dìμl‹K†4>¹ê 4?B¨^~\=—Iƒß´FtÐlðêÌîùycŸ‰ì€,>ù5à܉bz=sQÏ3â(à‰ð~&êÌŸÀ ˆ òX>?·’¤ããÒÆ&奕íØÙÙýL¡8\6xY‚ÿöˆÐ eéYíÇ=¦·Ý˹™ÙúJLF‡y3æ>D[q•pf(ÎÈ·ú H‚¶«^”˜Ý‡È½RÁœÕÎý«ÑuÖ¯q>©7.û7TخޑÀíÅw—Œ >-¾-ÆÃEZû Gù{­¨”÷Ÿ±÷>ñ­X¶ý4GËØÑõ‚=G~@äÿ•.R¨9É]XnÚIp¸Î#®f‘îÂ{•@ðQÞ‘Tp4¡´º¾?—Å­©scÊ0Ûû!å¾—ÏÝÎ5ñ*ެúd˜¨P-%öW6"pV—+߬î—éàeô¦.E¥¤"¦nl6‡"-ä¢{2[¤Rð·ˆá‰cD÷_ù½z¹9,¹ñiÝ^˜røì“YýD§Øeó +óàéÁ'bò4] ãF|{9V!Ö‹á=iIÕÓ®œÓkƒGqfœ¸Áž¬2*¼Õœ'J§QÑbéé,?"C3ªËÚp¬`€Ÿ#O… «N5'±ë Ýœr¼ Ðzþo$ ­ÞÍËÍ·G!ð&W$3¦¹ïÿ¨±iþ\)ä%bqpP £›˜‚X!ð”JyÞ/Åk#É$vHB.HJ92º [¦Gp úïf‹ÜÈ`4_äΰƒŒ*µ†“o"ŸÀô,ÿ¯BÄ9Ì-$aˆˆ2úêko•~˜È„Dãp¿sý“ÉÈhsbµ¡Â2ü{`z¡Ÿ˜húó©ûÏsL)'æ>Tª••«=z'Àíð a%…¤>¸ÿe1–@ˆvˆî×vä]¸Õ‚»p}"}(6Z¥»¬÷KDÕ{œyFè<ÀC–ÐCÅ4¨žùE(ra ¾°¿8ï> |Ø~ýöÞCã}èÛ×_i)p<ýrùEg YÞ3 ˆàØ^âÒ£Â|fŠÜß·ÒVÄ»¹“sr^ÚnYþ_‰rcƒ¦ÙŽƒ&’ž3ƳË2ÐÈÁÏTüŒÊ,‚çMŽL>Ö)“)pÚ²F4!ß»ŠÕ.èV‘2ÏùMªÐJÔªTz"´_šI–ø­gÞUì­ É^JTãG¨Iü¨Z»ÏwÐh/¼Ö«oËQ¾ ÷ép©Vñ(>Fï%Ca€ñQÚ¥1²'u%5¶·hÇžpË>Q]y–»¶¥J¾WŠšplPÐ ¥ÚOÔ"õPÀÙ;kæ}lÂÛ F`°‡PUíÖƒQï~‡Ã¿þnbAJ÷Ö ï“ÁEƒ¸¿·Ré?8ñnHÔØ ¹€GÝKÕÔÌ3CÑðH%ÓáXy…‚/ï©D <š µOéæ~䛫zË9º–åÓĬ龬q§8­¢DÀÔÄE8–kÎáx5ˆ%>“'@ê¥qy\6²fpÙMå÷«¤,pÕ$o–â_›¿CÁÖð¹rùî¤xUBé¯4AÊPKFÎ6õ³‰¹y^)«W5qûN.…|"a 1°²Z/͆uyOãðçàñý˜陋wWuÈÙŸƒ'áæ{¬Nj\Ôââ”óT©€©ÆÏ¨²Ñms«Îs8¦‡wÁÛ^ ¯|³*³àßÐfrïz~²Ïoõ¥3×J\ÝÅ¥¦† hDùÿñN‡“‹¾¨v•!u8‡¼v`€ 2„D€u¾›T£Ž)B §óQMþK}»Ç+) ¸×ã.8ý£ô¡Ä븟MwÓ¿£3‘6 Å9TCÅugà6žÑÿŽ g…u€AcØPóIÏÈÿÞQ2jÄ}"( +ìý{d…Vÿ*QÒ6ö¼ÌêǤ,Z*F§ýd'!S/êØ&V% rZ@!o’ ªN9““ë“Nñ½Õ©éÊï¯$²íÎÇÞ\jȈ/ºÌù×abHÒªc…Êt—ŠŽªƒ¾¢ü‡{BFcYª>ÝÉvfj}µb}™Ï@Âÿš³å ` ˆ%qdì´_zˆu»pöü=“ù ÒÅ­Ž${–ÌAý}-;ZÖE¬[$*Çaµ©GiõusyZ›6ý'L@b­Ki’/b!ñzü'©¾æ_Á]#/ x½¨!pY¸ðt+ñî[Çíâ¬A2¦N_KÖuö|Õàr‰¬¿ü Pš‡ãç§ãVĤÄÖF'¦x;w_ßW /OØ=ôZwœIœ:´¤8÷x/yV7•úRå4±ðû¢'A<ùj÷îÜMÔ¯J~= ¾ùO8-„údSðÞ¹Ïëv‘¯hA<Ä”d2ñàNõ U%½Ï}[ 㔇9ê2lAß‹¥ÆÊ€ ÌÅ777wzçó§ï¿Ù7™è‡s5(€®u†:ÎrQ¼sBüCFM-êEÀ¨áPʈK$$¤¤ "6­߇k‹¹jz±ìß¡‚ÈC\HQb퉨bÈ]Ëþ“|I«v¯15’,ò8(Ñ9)!%nFé…ðˆ"æ*Yù¸”âÜ>`†u Ó®³ ÷ÆRÇz]#ýŸö’Ÿ8X1ØɼÝ/©8Í~yDÑ÷½"¼>^Š” }Eß* ÛŸÈÇš¯³…µ¤#Ú­‚mv‡ÕŒaÜÝ݆—íÂhÝpW{ލ3g|¨ì˜ɈÓâü5Wh}QòEþ·ìyÍë"#eA ßÑg¨e¤¡,HSŒ‹Ç¶´,Zq©9¼ü×Ȇï}}ØJí6*ö€©]o×ýÇváWdÍ$áÔÔÔl«·€ÛÉ2¥«¼2Ëîœn“KÇœyv4l(KM®’×G¶XMæ¸ .¤Ù0ø½Æä3ÿØúûDZƒéà7ÿByÖ rèF#y×4"vAà~ƒW9œqò±í$Œÿ«2?ÜœôîO•Tù=yÙÌVÂ*:`èŽ*?0t<]ö> ž¸8?«³V¿<^"÷½¿”¨ÐkKO·&}³»{mŽöjæýÎk9[Ï]Œ€ÓÔßÍúkÒ;\[Ñøß5@©œœY‘U÷Ù6²`¸'cxMMMG§—ÁœÚJ³a² }½Ñ,QùfæïóT²„¼òùòé•FÝè¥:x õö ô”Ù£¡ìºM«£ØÀïÓ0ÛHô¡÷dr•"±žC–1{çžb¬DÄ6C‘x¾$O"´¤&ž&pN@¯&%Í”ë2l¬´ûûÏ…€yÁ8ˆ¯s-ÉÄîwéZ®¦µ=v2ÝNW;šì¾dâa"W¹¨Ù,5ŽŠÞPHw¤šg…K!ŽåHìÎÕ0úˆé]Mˆo’#Z `÷‰Àû%›'¿BAÝ nŸüÃÑ?|¬ê°P6è‚'™cO[,ì0qaÏÙ£‡ S/¹·ÇÍ'•ð-÷û%³ÍîöºŒ¦ã®”Ân‡ÐJáÓIÅŸ–ù$œ dlª¨ç§‡Pï_ÇÕ-Ó³ œ_¿‡þ R¨v¸Ñ~…âàI«Ù¥x²žø)áo€ÿ_L,ÍSêvÁE¨çò=ë.2ÙXÚ#‚¦›u«MÐô|ΤKµëGjÙ×b:C±ó Q¥¥¥ûúúÀ'Ë­\&}8˜ÔbÃi|5\—xö=,œO?ÐáÀÜÏö ;ß;¶.gÔ‡¤ßx\`0U×ï®¶¥“m½VÑW»ý\9±X&ûQ•,Á‚/Q¯àRÎp_öÌ? @O (d¨ëy"Õ˜ ÿ­_ñKŸô~ð_lƒÀ=çî1‹ñtÐñ¼ó™µN0å`Ôß“›<û•6.#ÄLR#t¥šH$ƒð¥F»M†ø|V¸éð¼ù¹È#•ò¯‚Ü×ßG’öxF‘û1 JŠÅîº~¤GÂUÞã`}"ˆCÐ1}ˆ¥ê®‹œ«1߸=Û@kŽEqÙGÌp%rØN…’šW^¼¢„ü±ÍÄò±}Ë‚àvÂßÞö”ÔúrÓ­2oMNNl $j4:Ñ;9;s¹ì*éxÕ5Ü®G®]p¥›P €_!¤üûû’à…D{=-’¾ÑP—tìÆZëTò6„#U÷ÅÍ•ý°ç¥ÿ665XQ€ç_oÜÉê,Õ¬Á3ºvG¾¿„kr7¯pErrZ÷#ŸÙ܆7ÏÖãn»CžýÝúÇδB·" ù‘˜ЦUk@nß‚[¿è„1_kIµÑŒv¿•=˜­¸óÝ•Vý çNTð.TÅî,þU@MIQ(‹ ¢Ù•Á©1©^\\|úƒcõ¬—ºw<ïÆš}è+¨i2\²Î_½2íÞ²}¡.4T~;Äér$±[Ъ[j´°_;u²ž×Ûž(Ò ÀGqî7 %žð³eU1g͵5×UiÈž GÛëô?76z®É‰ec§ Øó랬´·GXý:C‘IIÀC cYu›T ºËu›­t“‹á‰õPu<é9MPfÜy±fÛ(™ÞÂM—Ÿ<Ü0në™g8"ÃÞ7žî­€ÀŒËpçËèŸ ÕDF<ʳt]èÅÃà“ÁHwÞèNçj_“z\Öô-ù8H 6D©_<0,^r_‰NdQŸn*ó…”#ÈDR·>ÎW;3`]ï†Þ_[²GG{wÇóèÈõ¼ØÎ·ž–Yiîp§CÍ=oþôMu([.Ëï2_b¯Åà‹êT?ÂXN´8ž$å žàʧnѵ./‹M>Oθ^·¹§*à*ªšÛ`Š™uÙœ¯ÃÀgø MbÓ6*ßh¹€¬<½jØNëú°7#(±ëqÄw¡~¦ÁÂÊ¡ +ÏD”ˆ¯AщڑV¥­þ _«wcÝ"ïöÞû¾ )FÐâƒL.Màp%~½­h9G¿¿: N8S'0¸u0ká·5:öã~^>»ÓàÜé_G\ö y‡·šÿÜ ÛdØÍŽó½_h¿Ãj»Û&Ÿp•V~¿°Ïü^È]ž³=ÂAô˲կLï·Tz:ïÞý,Ñž•ûÛ\~~„¬®p®c!™cP–”èêl•qÃÓõ—å¿7£Ú§d!þƒD«Ãì²Jtä4 N¥¯ˆ‚ –Sø±zûÑ×RòòXzþO®:.ãÒ /Ï’}þª:áãG´Ó!èß`Ö8N5¯ëÃp “Ì1䨵ÐB*Ò_ÔÝQo‰Rõˆ /L>®>ðÇ%Á3„ñŠ…„Ç óù¦ýÅ“Ùý¬z8gÃöüõýÄì¿fíúên7·äë#„ëc¤¶—,Û}r'ç€ë£¹y$ÛyÐÑ< €*-£Í3:%™κ¯®f ’Øp;SSËs-ž<0ª>iÁ÷¿í¤ü ˆ¡“)]¬0åÅ|„üíf«Ä‚ ñ™;[ï›×ãàrû± <lPüÀɘÿùìÒ=Ì‘=T×}Šý–UÏçŽ^[Ï}èÏâ1±~%•¯n\jÿ5êîttãGã·Ö’·œ‚MÞ§»yÐÅÆ¡\ ñ‡¹QNãÌ ?jARûæ½À½ÁÄ`³ÃššùM¸ÊPªh±j‰Å[Ú­ÂÂBhëÍrd²¾ßœJ#Ï("ká¨Ý÷aVëžE~0‰ËÝ9!ûr “¢O¯ýVz ½€Úd6ÊòKà ðV&ˆ¢x‡7Q ø!A$ˆrúF¤k#‡)Â2ÝTýÒ¿í8Ö‰ÐË/²—§.³!’ÃÅÆ •Æ*ã€Tž9 ê¹¶L$R"ª°—|]aþXÿI¦?à/ºá¾"•bý(Û‚¿€8_ígÌî‚ ä•ÿþz"þܽ-%"ð:.óоå ‹l³ÿÖÜÁy»R;úÅÿáq‹ÃƧUŽØ-㸇t}h(zºÜ ¢h ÷£NÄËL«9Ë? +“r¿õ±#Åq#Z`½íáXRU5q/mÊ¥í×%.[>Î@ÖÎÚè["(% ™i‘ŠJK»|o–BÑð<´fw¢xf™ýŒ{*)ÒztÔõúCÈ©< WÏ,= >7LJ|Þüç&N »ÛŒ²h»èöf¼sæ„Îár«¶n\¯g–?…ÿ‘«õiô¨Œ5ÈÖÓú‹¤Ùíèïïd½@+x3»_ Û(g›ØÌ;’ jY„Ì´i¨Ñ¨WiŠáÐK îþxÛkK"ç»2*†A@äÅbÍJudL¶±Ìä'ŠÓ™;wM!R¿“1|üP.»çÃQ½ãŒ®ûÏÚÚI×ÔCþéì(½Eñ*ªSñçø–¾§žhò<Øñ¡ñ\¤êê긄„ ÃÃÃÓªÑIKË·]+©©… |ú‘œ¼€Çl½=õ+J¡?ÜÌL@íôäö üoë1küÅ9iµ%¡,€Òè¡‹ÁËb×H®dÂ5•‡z¿ø`BÊ¡¶ Å„ˆJWIE%(”Ê •Ç|äòk¹³ùêÕŒuý÷ r… –™§§“ºìdXCìîtùÈ» —½H°Ó)%jecy÷½²çú¢¬ ¬¥ëµ‡“ö^÷ßP޶[ø…?¶;Ùþ1¢Þ×]{øR}ðÇ-ø 7z9š5 êöƒÞ'UÞÞO¢^—ÐÇ»‹ñ(ëJË%H\ÀÖÊ’QbvÅhC(k,«ü¯ÊÉ “<”ü’`…~3@¹’»±Š=ß+n…`›ã®é-µë¡"Ï•»a‹õåçui z­^?ý_žV1`§Îj-ÆiŽ7ûâéf›\YÄO%KõZÉf*>x²:½ÙÜAhuíÇêq‹ò|ý|†m_ƒ$ä² Q×÷%4w`‘& ™êß¾Zìn©ö*‹%t$/MÒñðL¼a’ÍJbKB>þ ðpÈÊã¶ÀOÊ¥ÅøT4‘gÁÓô•7•† À÷‘¼:-”û‹`C¥_žŸׂ‰§›Ô³™€Ù­´œ`(ÕªC—Kfïàv³¨že£v¢Y3Û#×o2ÅLD\mŸýÀ ØèÛ™öçàH޶Y.Žo¬RøË.w:}5Tiå zâylâþñÊáÔÂÏrý ¨‡A¶úÕÒš‘}„„¾,QïJ z-Ï÷³•†’e]оø¡ôïC†Ôþ&Žh‘ÄÍ7gc’Øk× ö¿£b‡v´3µ‘ÎÂÿþÝn*OñÊGj¡Å!BH½Hà߀¤jìWÄ¢ÈØ‹Ý×»* ‡¶VÉ 6dV“´g½.«””” \Æ=C)\»ÿ~Ëù«÷¤ÎÅöpçá\ã*4 eßbz%9Rçð ÇAnC?àTå™d„[—7"£`S¹è–{:ìýëjz„3Xâg>²ø–ËD"î'òÇ~%†Ü®áõ#BJãaõàéœyöÚZ(µ[kµžç;ŒÓËýà"¶^„“6 ^«Mö`ÈÑæÙ¾Ó?̶æëz£šÓiÀb»¾•R¿Vœ½wõ¹$ºRa']›Ê;/÷&p1‘u“V¨ x…Šß_¬ {mÓA"àr¼HÚÝÝÂgMDÖXG„•… ¬wR}Ÿ3$@¤ïV%t؈¶©o7qš3…îO'òÏ3…YÔË ø‡Ü8ôIþ*SŒÖŸ³öý+3uñþ…ÕÍp?ü±™ „•@®ö§Ê™ÐŒøÇÙý!¤/ƒærMk#Â']œÏÇMy·½PÍVuªNO(c×íÒ¹W¿õë}ì 9HMW_ñÚ nED.•)â`"ÿ§HPE ²ÚoÙÉl5/Û†¼ixÎ×ãàIýO`s/ ühV4KyÃ߉ûóá48¹$¶øP~ %4 ÷˜ö PWg0Újžõ1\ÞèK`A6òˆøÊÄ'±ââÿä„£#—Ö›½ý™¹ýÈŸ nÿw(ܨºÂñÖBÈOƒ:çÇÖSÚTíõx/u(üªK²+aû “ßé>ĬìÝCýrûá«wʢ︴MãÒ »œÁÆ{ Aèâó‡ÁÑ(žJÏ ³(R†3,9¿Û€²Å‹ävPEÛ<ŸˆS?}²€P‚/”jê5ªºBdë!ĸ•æ£T‹Nƒl…¥¥.C,ìK, J²:(ÐòW©`%ÕDl§Éª N(ˆU¿mÑ•TÚ¼«T ©Ö2ÚÌÄ‚PÞ‚w{­½ÓãKjHͨ˜0lD¬*ôŸ>Aö&cÖXüÇv!·¡`×!ïK&N §4P *»[}Çd¾|:§ëþ×"e¢‰Ã$sÅ2»ƒ"ÑW‹–A34œkØTxîýNvØJT÷rº#&¨<ò¦öìz"(?o^i\ÛYäÖZ2J!ŠE†ô9t¸÷éüÁÎú}ûC-³`׌ÕZÌçŽÿ×  ¼e¸×¢× )Ó°®7Ø@LbCØr4«öŸ¨ÜG¸? _F³>%&U_Å›…i_ùµS;ïŒt78nP\”ë ‰Üè,Ú¥IÍZ+ì6Å„ã3Êt#h°=Òic@z­Ø@m˜þŸí^æa-rz·“m °ÇIëH"¹x–g¼°‹¬Rç Ñø ?rïËÝ€Ü\ZFç‰û¯›·Ž«!äý'æê×GýGš:õnÀªª"7‹Î€+·¦¸x^Æú¿Ï,4¯«·Ã3(¸ŒÜlÄŠ¯/{ŸÔµØÖ2Œ —!A“­°Ñ@ý-žw[ÉéömŽº€ýÔhˆ+k"B}Séˆh©Ùæ±Ñ¢‚¬ˆîHb:wÑŸT—½"¥MŸVâeû¾ƒvQX˜ÒL÷,Û¶s§Õ? ³¼&]øÇ_‰Ùu¶“ÈÜÙ@üä`ÌEö÷Ò´0LXkj’2|Nˆ?®a—çfaùa¬&(‚ˆ3[T¾ü…Ÿ>‚ KbÕ Üæ’ª›!WÈ29N­2žcþŒÌ¦ ¯(Š”áçõÞ>P²îËž(€¼¨®7D8=D³ ÈÆöØ"̱–4l@ýÚxQèÑ%ÀRãéy½úˆAåZIEÛß­dý˜` b¯ÿÄyãRö«–³Áþ×XùvDp#ªK€AU³*ÉLäEÄáÖá(#ÊíUEK¹ì'XÉlFߟ’””ôÏ]¾<‚ÈîhÃø/4|8…ƒ¯>7Kî×sæ¿EÝ›-üJ $ÆW¯_U’ Ñ`CxÞ€(j&é[÷wV^ž1I íÿ®Väô¨Òß]ÿ“Š™DŠ$®aûvD"êÅ+C‘šü›ŒzT0£íóÜøNö½jÀZgÀÉ¢UB“ûILãÂöÝõÂ&¡ `o¡¿>ŽÜ™ ¥ ÛÁÙV r]êoLtë#º)!‰q¶ùŠÈÌÂrÖ+þŒ‹Ï¨Ð\D7Yøâ3 ˜ˆ>¨©ï ˆÏíX.5ñeyímò2MiÔÇD_½èCÅ¥õÛWáW»‰–YA0«1W\ñb‰D+ÄÈWt¿¶HLJZÄMÁÑüSO•Åiæöñ`”¨x:˜Õ¶{Ð D/pnÆ1éÎõK=Ûóî{ßsBMæ¸6>º¹ÛL–ÂG'²Ì_ÕÜW†·¯ý¹r,Ç=GÄÒ¥m„µx¾­œÄrgÑ>Üð}!Þܽ܆:·„B%þt©òu”Òaù1´w lAžàE8•y´û‘DlW;‚D4B›œï.mßLº^'}(õK@¬¸™õ­øÙ·«^¶ó•g?T¾/ðP‰zÜž®ýñܧ%[­Ì0GÊtüû&ÇTÔ_x¦-@u5'³°’Ì(gÅù I‘UU w¨>§pÂ1.Ú% ¬¾óã`žþUšõ,¶£nó£§žÿ’ŸOƒûÉrÃãù`ÂLN“Éÿêw¹Y'7·æiS3n$÷^ÊÖiø€¦øc Ù~¼ûhõ]7C½fð…€,|õŒ-âo#À ½9N£Ú?ò¨nÜ@³Åƒëþú(’MûO{B"’È+93;“¬Á†´ŸiÑïá¨ßRV7×ÒæÕ& 8ÎEf0ÿÕsœÞ´3þ¶ÔœWéÑU”þfmr\¯Ò ÀÔ^‡è jÊÌ©ûÁñÎ/ɉZFN4¯ ÌrøÞ»\‰ÜKí®[.‰b0œÖpˆ†ïÎÌ2‡‰Èx\N£®°M¾BöÛ}–}ñյЀ“v÷‘•<§·»ÜÇ3ÔóuÖæžO öºÍ߀Ú-ÍN‚…ÕÊuÂÿýû2Xä÷Øì™²ó4Ø‚ ¾dÃÃüüxÎíóà —Í,§ÈÓåD–M–ñøU«}¥cÁ у´ ]CÞ x·äÓ5l÷^ô&KËÝØ÷‹l:Btá5UU]&äÿxòÛ~úbÌê@ÆWTZ*°È~ãÜ«QÅ€¦^HJ ÎR*xX¹p{8]7ùìA3ô|X@³T£xÝsñP";Éç‹Óæt5èØë ¤½í¾ý9Çy§ëOY’ ¯¹+¨¼±Ç3ý›j‰\¥Þé‡3ÓZÓñ'ÿ|–¾‰kÒKpƱ¢!þ“~ˆŠÖÓ+§öD,©u$&B;‚>ÚD}“cw©1î9­šú©¾z*‹jÕV¿‡±–Tk§Ã], ¼øì0±Å¬`{Ô”¤Pîwß¿Œp\;eÓTYXˆ*ž-FÉbj}+ìx=Í•þ¼ö—RØ­¶µÍÝÞiÞPºÙíдw$Sø·5¨/ªþs¡Ö0ç"Òušx<]öß®y MÆ;—]™h²­¹-qÎÈóöÓ¿ˆüì¢Vþ­ÀŒówPá8ê{cx (nø•3,^>mµ¡óºÑPÈÅÀú€mÚ¬ ¨àäx¶ê _WHÍHuû󔺾&û!Âì‡ ínÖkœe8ð$9¿Í,äùéÁx©Éµ|ðÖªÿ Ϫ«µ3íš n|+45Ìöû÷oØ¬ì Šù‘´í÷>ûïûÇAËŒ|Gãí{Ë¢gXò …]Ý#Ì>çÒëlJ!·#ܼá‚wWÓK Q=˜ˆ¿„Ñ\¹ñf_¼à®¡Òå½Ü,÷éÞæ9q•Öú24ÛÌΞJ~‚Ój’É ýùkÉPΪj¼d~»¨ MÍñ`ž9þè¢jMILAw‹¬žqZµ•íìéžtÎKä½>Ìý§ÞXÞç9:Ôë 'XMHÛu¡úm¾eÚ©âKýCµízkn:èç%€¨IÖé ¯ænñßDeíÍ“O£±yE€D‹êñxö«–Gù‡°ËYMMÂ$yFg³Ûºÿ«’Æ—Ü’v3H5Pµ[€lîÌ‘ú[Ý(¡ Yy&òxñ͡ŒFpX™œG)ê*Õ¬Qúúõ[q1soË‹¨ *öĵõžè*ŽX¶‹‡yë¢vHÂJx‘/†VéÑp ñÇS…ž"ãGncŽA¹®ìË+,Ô‚gÚ; ’š5fk(Ô—“öÓQG¿k³=›Æ[ÞÕ8«ù§­4ë¾æ2%•ϩĄ>eÍð«ÄĆMnóWi¿]Ké½)ÿ>f.žôC-QÑ $ßÉ(ÙÑúKîÝÌ“Ãnj}¶Ê8…×/‰]w¿H'[ Úþr$bú–²Àh}{ìõÝÕÑB=c½DÉËóSÃFŒ0Et¶¬‚«ñŸ¡tlùùÚJ߉õ} ½[m€µˆŒM-Ëe ‘%üD@ýÞÜÏ!ƒþWû÷–X‡´Uí·ë°³—\u9ÅÅè3:ÎXmçrŠ[°šÙÃI;5à ¥Ò½Œãœ0L6Z¦wwä-ÒÃõ”+F˜Æk8ð/$˜(û)Yå}c7cJ&`–~+rE`PóË«j—ü7-L‘œfŠVÅ„ÕÄüÍÌØÛnJu›‰n–½íᵓ|Û'|¸Ò¾rîUls¢”¼€‡_0@ü?€èá7zc{[o–˜I†rÌÙ:Ë߆W`!~»´Éû‹èqOÑÿïwz9ŽÕÉ*ãŸS¹‘¬§K%B_Qâ-6mn\fþ˜žÌöÓša£1 ®Z}8[…„‚ÝÛ*Z´÷C(ÕF™L tÐ]3Á$bÕˆËéêûŒÁå}m£.I˜ššº;Q€ «ZNäO-Ðëëû^©.­ÂÝ “ÁËœÎÛÊʸ!˜¤xzOÃXwwÐ’ xEñ#¶¶ñ6ѱ¦º«+“ "—’\ûb(…¹Û0_{hÆí‘½$ð} ³€~÷_ µß-Ü`[MËñMAÏzˆ\Ò$çyÀWʾär\—úœ!È%â>‹µ“Ñ©ó<£Ÿ íù-غ Ÿ-îïçD¶0ê¢C'ÖìgÜáÅÝX«·;`D)bÅî™&]ôšÆ‘0ˆX+3×…,pâ’“»5OG„]—àsù'Oü¥¥´Î®fôûâ^313Ÿ=ÞNÀ"‡ŒdâOVò®m§UŒf ‹wW'èŽñbÁHXUfé¶ n—NüBåÓùÊ%³´Ò]RVQ ÚÉòápÏÄl{Éb+”þŬò«ÑËP uEä_†M1Z.¿X•†©Í\ÛŠSž)à!œÔ“ÉiÿéÓ'Ö òÖgÀ1¬ µìoôú»Øè|ˆÜÞs¯<™"ÜE!÷òfiHØ$0³Ê_ÕÔ`èÓ[áÿdÝë:êù|ò‰&ÏßmàÝÌO?¬Íx‡òŠBVÁ˜b^ùëW“½m»å–w°§rÀºis¥÷][Ýýëׯ«@¢×ó8™,a,WsYKþF/dìU)ut·#>7\+¬w±Hù˜ß£‡GêÊß¿ïu» ™Þ¾íäåÌÃ/:Ø  Ž›}¸ >ÐHx×FäƱp¯0ðñ,Ña§´¸Þx͵c&¿È ,m¾h±ÕžîÐC£–—#`'%#i„ƒƒ£·Ò°³Òaíoâ ¦ào/FÇÍEκð=»?žòƒRìvAÇc-xvLj¼•1»t¾|g‰A±ÜWÔõÊ[jPÄaä(ØT]}ñt¢ÍíGo—A~ŒÁA¤<ªb4”_ˆÈIöPº/ § ÀêD³ Žt~wƒúÓM#÷P€[8=N ÔÏ8¦Žjgˆõ@=ÑÎÄ—3¿>®/HvQó¤{l?‹œ¿}ã[ÔrC5Vª OþÁàßþ˜)Àèæ8ÈVï1¿kØ>i bÌò€gQ+«ì¡btgÎúèbW‹KÊê6¯Æ~Ú––§¼K õj“D¹¿I/2×*8ß2…ËY&Š÷Õ¥“d‰Ø‘‹Ó6­Æ;- [Qd­Å´²–£-8+>Ñއ˭ä°/  ªj­ðADŽGu3F?Þ¢6ÍŠx»¯ÖÍì›-¶ç‡ Q(¤m¶íø/¹òÚ$—)ràò„bS÷ë8 àïÉ)ìôÜЖ?=š np1üűî&û À°’«Vmß•(¬ Ót0é§çÅ6ןj?X»b†÷q£ÇŰ€î–øÅçmÜ’HSܶ'¢†[£›¬ÐRÖÕûƒ?cZZ73¸Îö ²×«Ù/x}?+k€ÇÏ·À‘DáÖä†òvìÚÃGçƒK[â>·œå­×Z°LŠIŸÄÁh5äcÃÚwÀSIßus@ꬒØðÑì[»ÛóšIIm"Þîµ\† ‚ÖЀPñŒzð£§ót¾œvº ÿ7ýS¿l$7Ø´HIëÏ&U=ÑOmÂZŽ›kÄb6’±w¯©ë‚[iE¨Ýó.õëWûrÿt”ƒ°eï‰yO»dhןhY‘7 Ô Q/X{W¾bv €3[ìM¨³ÕHP¹ÖŠ`ºë™.ó³VÞ|üf—l:¾šmôDï®´‹Ãj Šë}8 1èx³‚hú~h—û€Í/}à&%:òß/ ·&ŽÂU>ûÇ–œ½õò àbÿÂ*Îñ;ÝÝàt~Øüà‹Qk³{L³2 .žA5Úû «kWYMwñqÊ϶ù Þ'€„QÖdóǶ?S®Üž{ô€Ü2Xà¿1­®†¤Û#+³9Ñ~Ç@ý‡Õ+Ý^/Øë&[ÎxÜè®hTÈêöÄš?°×Ú”-Âúdá `eW€XÉÇ i|ÖœF]¨.ÓXíÏMÁæè©kŠ×í±ÿ¾¬æ§Ïæ‹™šní Ô/õ\ïÒìca”ƒu! 7 øßOddsÔ¤Kݶa牧ÊðKOåò¨¼©îîî&á·!r?Žú@å‰,Ù•oŸ`oÇ+ôÅYuÆjNßíP\Ÿl—àMÊbü±1TÁ$f=U+WadÀ{ëPÿ,†$}7ñy¾Û!áµÀYö{°UÜê‰E»…Dkçó ä•ïtb¥×•Œdèééþ(;Ey¾W_iWxŽH¶ž©>{>i¿Q;~yÆ&ág½ —:ÿíï+•yÓ¤€fŸmt.(pXÊíÛëÍõszºbMÚgœEw¬« gTÌ‚Uv""#á@www»S%ÄM®!vKM?­gÊkðé ‹Š:üŸ/¨mþ°=Î×Zªèsóè?¡7Ü,or$ácÂO `‹õÅ,­ß  À·z3–ÛJYIÀCÀ€¾fzÝ*/¨EÄàÚæ ªr{ÿ(J¾‚iël(5r–'r˜c6 > ¤`½¦jå:¤ O»‹<0,œ.ÓÎd²ðÎZuVÁVÒ €aƒ=}xbbeý–Ë$èvH,*Ñ/~$%­º ¦þÏQ{ßwÃvòËõ­›áö‰õ¯ßþd“c6µHŸTcè\Hã±7 ×µýµ²{È èa£ûË=`)‹& _|^½š ¨UPê ûñkïÅþ¤­3µ†²¢Â½—‰*ËBõ>!æK"mØ$R0á`Án1¤™¥áÞ±ã7“¬¼E¸°I‚Ç20‡Œ÷=.+õîÙ#êWªg¶ÉrÑÍI““²ÙrjÞ›‹Œ›·;RðöíXŸSáV ¨UídrX<tÞÆT°ñ ±šæGÝÇ"•™è |ÉO$¦ÉÖZµ85"Üu4}<§ä&3Úûë#ÑÛXRºNÇÓ½©’Èxõò°­l*7©||:-­—óHÙ° ®[bÂðò4ßû>¬ç¶6hÜë\LNÿ“.RÐǬÊA—‘ÌnÓˆIFñöfÑ¿á *L^Ëï·Y³Íê?~,ÕÉM&ߘeîZ¼³ü>˺3ä•ÌiÚкUŽ«ò_üí E$d'-äÿ÷ï_tù;«7nwöå_ 6§yÉÆw~ºÛÓ¨gPi´’ÍÖ 0±º¸¹\ÿœŠ0úØ+~Lf½•ξypmÛx°¾ÑÝžI¥a\¯‡$7øÜqÃNÚ_ôö›âéºyí¥Ñ;ãnÐPq‚6+ Á2!LîÍÎL|>I5y ø˜.{´ùÓ¡¯݇ËiQ<ž=«6ièhÀ“î³J™ }Oœp§ðÍî'=€ € }îž¹½‡wÞËå”"Ä¥b‹¢æx~œP4*ÊÙd¡ël<Ó<¿AѪGr'ê]krql­;›(èÆì*Rqš™*¢›~|ÿ-r‘„­¦£PÀj¶Xœ–‰®öç»zë#‡M×ýiƒí†pqýVt aä:j?œvqo")ÅŸ)$Uñu–*ÊÔíš~ÒúÞ×^Öéû½=æÍPnúÁ5Õâ_×\|CG;ÁƒÃ!GœƒÇ äð—l©­µ-XdzòŸòÆ¡J݃Âî—qv…ÚPzÚ^–½Õ™²ôÅÕŠ‰pë,¿UAíŸû ù7vêx¸à*¡ö4k öÝŽ?‹Tà°ww?m¶t…/ŸñCŸ˜ˆ_Çí€aú™²Ã\ˆCÇaè¡}§Ñõ3¨PGZzý ¸D J¬/(LF;Zo[XŸÁê®kS:K£Q“/ä˜HDiõb”ò&ËDÿ3¨/ŸÇ‚Bøühþ0ãÇH›Ó ñãâhA½<£"vtI)F¤ÃሬҥHpþãq$„øŸÅ¦ö´áÜýžóæøðBŸöGÚü#ó‘Âð¤„ô (‚M¾'gÐó­ÁoÁÁEËë©Ì!ÿ½°kɧBÐmºøîä(ÆZR_ÃÃÁƒIçr6lZa^èããû]ªI߯žÙ´»¢‚ñ†Óø$œ¸5>MÒsÁ~Ê,ôà÷têA;™}^ÀªIk†&Ûøè£lê܇ÓÖÖ–>ºÚat¿¢\]#½g˜zõ ÛÛz¸>*Ômþã üȧøxhƒãzŒž[Òñµ-WÂX¹Ãqó®gFywíÓÃÉ ®zòéåDŒ}ûã íøË•ºéèÌÁ•ÇÓÕL•Å8ííÃC 9…*:>(P†nà§ØN7z¥Ïuªà[NãÅ*zZû/¾±?lëß]ÏΠßÐrÛé(…‘KµèÍ@?¢¢º ²ý"v²¼– }ì) ±“À é¼xÆ,œöäødF~®în¸±ÅøÔñÍ#È2±D5¶ïÞ T``Ì\±$Qün ™m"œmÓõŒÏÞN7¾9^h¥¦©#~‰.GÜbRö¼Ý„Ìó<>#$†²û>…2¾@Èí³ ©NÌqÓà ±ÊóÕA ¾º'7O·Wûgú±ñ¼€ð¤,TÎ ñ ˆ_â‚Ëá¾» ÷…ó¿O˜e¤ÉkÐ(µç·gwÃÂ÷ÌûîÔF)< :0aÕÝ–Ve¼e¾Î|pnZµ\qù-¶Ã ³0õ+~äb1‹‰²nf`~¤ØË?Nß]÷Úã$C¥ŒñRÄŸÞ4aÄPa e²dËâ4–LuW_ü¿^íz©óŒoÜu- Í´K’˜ mˆ>àÞœ¨?óPáãý–KÎu=˜f¿hÜevlÀÅÉ‹‰åšA}Ìý]ŒYCz{k ®îª8[ZægÞ9…Eîéþ*,"â §*;\A™Z†¡Ý¬Â÷2¤6ãPAþÛítèÅhä “ûË5§ÕÛå$åßL‡*eiBŽšÎÇ…R)Ù‡w0ͳ|…ä$ï0ÅýØ*}qãâBS¸riSmVÎJYÇ÷kåˆÇ-Âú2mòMQ^€‰¡z6S·_Ú òÏr­´]à¯'¼ó´£ÄsFËø„‰^DݪNë‡ä+ ¡cQSǧ¡£w9ÎHu}múdâéjǹœebb2c ÝñRIË7÷Ñ,Ñ*ëvÞ"ÙDN'Kfþv…ÎõÅ×DåÒŒP(;¯ž‘®®LîVn½YI>VnmbÊ^jiÔŠO<¹wuìRÜ‹—Š– 2Ïö%*Q+{_xˆÍ߈t GÓl9«th æt’::›|›£ÂXÕšéNáÿœ*[MŽ/ÝAAzv¶®QJÇrŸxûì]õõgíWwÎÿ;‹¡9¨¯üñQjîßÙ†t»)CBƒ¤å?©Z z'zOO£ÿ[‡ÆqðPÌ»¦ ‡úà“íá”—û«º·oÃډ àÁÅ…ªvà9ìVõ®ïO× ÃéÅß>¼Ù ¥†¸m ß&ü³šUJ¬,èÇå4Ѻ»ßÍ“UPñý0CÍP»Äø4<§%žRMþã¹@D¢\Ò¬(/m·ZQÐK‘Ê@Å[Ý7Ruc®WÅ·.ç.\…–NØ|Lb¯âŒ€kDÆ gù|!€û¾t•ÿÚ ïþÉïY3ó6là{êÛˆ‹(r”Ímævö7R:eéÎû:«F<0鿇……Açë¬ÏkFßç’S40€6qÈ¢g÷^†xì’20ym™0™l?}Uþ*Ó‚#çïÓ)ŒO9¯ÐÕÎl(}ËNDþÜYOOìÌÇiÊVŒ>È©°’sœÂb–sü@GÆ®¼‡Åç¡Lè,ÞÆh5ç{ÎàCç½) ®÷mœI¢&¦áDmÜâı¢×$ì–"·¬Ø íû}FBópLà¥&£Ðó*c§¿›LÁ/W烹×MÙÙ̯¿'7:J~^bdÔènàNÍ$;RT§ Ófq±1ïð9Îÿé@fËȈŀ䟸}ˆô…Ë“ ÇV&íî6zGïVËI_åû õN®£ÝR…k뤴ãe–«jBoU¿L‹Ïf¹%5H˜3ö „Õ9ùKó‹0ˆ»&f«À^MÀí0³ÕÈb‹"ê4ç? QSwØß:ì ‰"T¸¹žÎÎÎ`³ŸÎo;‰³ˆ ÄML̈&[7,<¾yÚ†È][„= çíÙ x¦:”škóEµ$âdâúh*r8íÒÅ`Ž[9\ÃÀ©jÕè»` ‹žAæÂñ”Ü$nœãQšF$¥ R­9=³âûÀ”ó—s¹Æ@µ×ôŒ_ìtß=“ ü]™™!†m½´¿<ÙßÞÞÂV¥|-ðÿ¦³ûŸ]„ª(Æj‹RÖÌEc„ÝÂöÍñ‡mMe›wwµ®èW¿¼¸@@ÆÄ©ùVy^-S!to¢`Cüå;P0Sš »jz÷üz¹®Qh•ðÅ.5  "–æ«ùíš›Õ+þx[l ¼ s¾ÿøÑi†Ï’vàN¨†q$:h4ˆ·¶¶v{»;÷7™9 úosGÛwѾí™ìvauˆéw®Õ„1›`K ¹ÑZE¥›¡êùIÚUЉ`Ï­ñf‡«âóƒK¯³§óÛ\Ž`âH-b@ÿ)ÇW[ÇgdD•ë6“SxŠ0€ôØYä2¸ôš‰úúÜxó¦"ÎK#£uªÝŽ ºC·‡âY°äF.*À7Çë?Bÿ¥ÝBf…ׇœÚ ·sÚ_ìxâ^KÆ¥¤„¥ì‹IQý7f9öˆlqlV­7#Ã>qM¹§ÊÂ9´î®ïÞA'‹ AØðŠ âüÕÙeÚje]7¥QDl ] ×õ/ëÿ œZ“ºØXìç« ÃŽ@¤S÷i$O À%XéêPô€â4)Y™ñ~˳ÁûÝ,ë›Týúæš#/ê“ÉúZg*M/bhŠ*J –Ó@Áâä$Wôõ v•3¹ãEkOUµ’s>%2ß^N(rÙ- º"ÐUtó']k9ºFˆcËINbàï¦g Ttü³¨£ÌwtPqtá%-mô.ÇV`â‡Õ‘» pè«u¦‚Ï©7€A ŸÕ¸2ª©Æjéò`{ X&þ”Dq ¢«è®OÈgÿ ´‹¼Š™™,$e ±ê0!‹«Ÿ)Eô¹/:g·äVÈÄCúá…ç ÅR=¶$·¶…ã¦[* ^Ú÷™ ?d‰û÷Î6*HE½xçÒGÔö‹ ˆOqádY 6d”Z¹y°¹×ߨÿð¥óò>øé2|ò¿“_œ\ª¹xÞÇ8ïÄX óÙeܶ~ƒƒöŰí`€ÄŸ™ý‹‹·µµÁ—ùÅŸSzUÀ(õìZ¤°SìÃÉ"WbA©ÖõýpÓ“tªÜ ãyÐîÈÏŠõ€×’Rp¯ùÌÈwõÄiÜöý«]A:A3ÂcÎág=üû¥ÕËõÍ›7]a¸ûÈ@þüé'wNæÁ[µð”¨\ä§:‚.xõ2¿­QOƒ|JKm”A=ã@ÕÀÉ%5<Ÿ‡5kµjñ:|¿Ócy»#ìVz1pOûq¹R|è+ÊJ@LÕÚÌ}YZm côÍ* †ˆh(&²¬ú2Aî„(‘ßÐîO ²W ¦&Ò#C ï÷©äFÒkvƒã·¢zMK ëMúÌcnn®wêéAEûúŨø‡OŸÐÑ™ÇÇ¿¾F*ÕeÉ÷ ç-Œ úì(ã¿!Óxð^²ûðóÑü~×ïÉ2íÜ?=ÃéY㜆ÿ;C¢7kâDáWïYùžÜÏL\¼ P€Òhvc[ö:`3‘;tö×›œ<™ü˜‘î~)díÕtÄë”Þ[¼Ý»<]¨ŒHkØùÚ³Qÿgüÿßà AÙ 6ÿ ¬UÇc¯šæ‡{ëñŽ“ôd|ðT¾_K„'bÃÊ~ÕJÐldF>?N‹D™´Ñ h‹à»°/á úšð¹b³R²hä<™è¿?%C9]v•Š^Ä¥¥¡AFÌ:Ãò¦ï܆î/÷#9ÚÂÔõ<·°ƒü-§ŠU;a瑚ÝO>uOf´B®µeYÉO9v;õ>•hìhÿ•q†;Bù(ÏÀµô²WèCX¿ÃB½ý‡v¿§Œg͵"}@Lc›¡cÕ¥,ØŠ ¿–i^ìŒö:R ‚¢›OòHIÄîâ„è꟫®6`ŸñëK!hMR+é¶®h ihhøÔëúØ0[{ýãXU²#ÕnGøJßGÙSÔEÐû0_ﮇ"öi¯Ð¤›ù[Œì§OFúN€G¡úœn]WØz ˜×ïZ»“Eøn'ËÑÉz^hÈýß-@D³mÂ¥rÉмdü6aUƽŸZ³ô*zK*Ú"@‹2)½ç ÷@Ä×¶Vïî—‚¥æ­rëñ÷‡íaáÊŒì¿ËuñÄd½·àõØN5‡=ÎáÛ·o€œˆÇú IQèxÇ·ÂÑÎzqòôøxúOŽÃp¥Íw÷ßïÈɇí­p+sõb÷¯#Z3mÄzû.’á……LQT¢M‹½¦'Üz”û=1„„»åëFÀX 8˜IÔßÙ@À¤Ø}tj9œ¿©4 >gÐ244¼ÝLP„õZÔ=îÒïl¸ÿD™Ðo³¹x÷³Æ\»Uµýåù¡ÊíHËçv-´ðËïˆÉ‡—Ç‹¥y¸àà/ÉÌ^GÕ¼v‹$Ãi|%§bç}t[Ǥs_žc&lˆÌgÓùøm‹4¨¶v²Øu¥PÄSË#a6g;_HœŽGð„†6ÌšÆo‘)ì^ÌÓü ùxôhÑþ„Ó…æ™í Xß0ìÁø Ÿãš¼¹ÈºGŽ»#¥¥y½™ØÙÛO¼eÃ|5/!!˜sçÔØß‘p…êUwŸ{® •†ëǪ–(‚Š?âh„n}¯]9y¹)HÏd+6(½Á&ãEÕ®·“.Óª›Äˆ5ÜìÔñpÂ/팪_¶ÄÅá´Üm§ÏV£¤½L[ƒ‹¢0«”­Ž´Gš¹¹y›@ `ÝoéQ0ÕãÈi¥1ñN4òÀN?Ý ¶_ÇPB°Ã(O¸ÝÛÙÅõm¢(„¾Þýxº½ ï²<5àz:ùÜþHë>/]1c È%‡×Ú·ßåŒàW;.ÑñAgœ"E·®°Oq²]øc¸=”ŠŠŽþ=bïÑSùãéÅ(‹(©þŽãÍD>ë¢wÏy(T9‹7lEaa8ÖA(ÕÙG©©F½Þ€8ž«IÄœÆÊxGGvÞòÒ¶èÊgí—¨1^•nÜ Q-ù!Õ•Æg ð|Êô°P„¨ˆ«÷sƒ-½Z©ÅîL‚­Pˆ"ø&éå˜ù)õôàq ‘¢)G‚¤¥¥ïn&Z}qxɸøž†xÀùç'w;FB>=˜'ñ„%ê‘ó¨xwô xÎ(jìo¡%øÉ_º»¡ÓeNl>°{üõëËþäÇ¥Õ0æp˜ Ðm„/û§õ äÃâ¡Ç&$Dƒ‚DÇß›ºÞOB•6©>Gs²’o!!ŸZý=áþª©että¾ÃWU36Ÿ_t›5Òµ/ñ ·ºZбÍqcóÙ!`Y‰@àcSð Úr¥×ÕéÜ(ªê ZR­O–‹‡›,ÎíqþfìgPÊy’¥çAD۲ŒÖ×îåúòÝUõö6!ÇþÍ!%ÝÆÜÿœ–}û?0åÚ†ð«?}Lì´AP›òSV0š¿ÿËŠ5JŸ‚ÿr#¼ZYõ’Ôï-QMMÍ/'šY--"I<Œö% qÙÙ ÞOÙ ~•ÎÔ®œ‰–w•汋uå9ÿSÃG©rB·Ñ¤²voUjÏæ£^¡¦×ÏÅÀ€ Ä»_Q䧃”p·t\_s£Å çuL—Áv˜pHIߺm BC©#Dá·Ž.9ì'tÓ¤-7"˜O\kµ¸ ,ÊÍÒO¦åý˜þÑ+Ó˜ß:ŒkŽP.¶ a’Ð𠚣bà[?-5½«Ïà ¹väZÛÍ;¥èØXX“è‘Óý·ÃQ±Ñ©¿ˆPüÔáÓwŽïï¹ÛPrâw‘-¢eò:ŒcEÕÖæá²ýÙ“Øun76¶–‚ÍMLV›>k6:=*) xùû7J ô~À´I`€ã³êë­rÌ›…k÷ª{¬‹qY…0}¯u.Xt•O {óÑé Œùß?)ŽÈ‰‚D}«I¦Rýö¶Eù<©ò4Ê?ý&D[¤üN>$¤Óú VpøØ˜ÒÙßà˜ç²‘p鲚 (uù÷òîõëu»ÖÞXê ©Ú¿ýN׊߂U¯ró¤'ÒÄ|7g–^óÿ»:±o}¬âùñãâh©ùñïgÓ·{«7·ç˜¦ž[ w*jm\&âЃ•öÁÚ¸}Á@ΫÉAr+MS1ñ‹„ÔÔ±¢Þ×°ÌÇÄüÑtýèÉEîp[™’ÆG±šð;¶›+ç&:??‡= ‡›ºäók25—²tÒ8›ZT𢮀%üPjÞ£`Zšßáî²n†A\8#󧯗Ö+z­³?˜5O’-×´ (aÏo@@yõU@Å~5€™ûIÿïÍØëqz%$ú:„WT"LºÕâÔ² DîVêåa|×Õâ~É„?Àì£Y¢Þq*#ÇÞ_°°‰Ó—B°Nô³Ó1>g¢‹ÜÒ(0KÚ,1ç?š¬Á»ÞÉ|R?ªED9ÕéDo«à“×ånü¡hÉOñ ˜ îYA8ôWì7\òʸ¦ÄÎôÝ]]ýßéowób•$çù{Ѳ§U3Õè¼£fÑ©¨¦F¤V®£y¼qͺµ\š*È=›üX§ïKŽ*ŸéeoH[GHæÔ„2è*pyEHÑýDM³¯Èªùåúù{õÚSÝF§ßKVò8ðiÓº^q@{ð s+Ôî Ÿ+ïW³ãVã4¼¯öƒh üxûźȬFÐLm9¤ŸQÁsúŠ-ù¤D¬`™wÁûÖ3DÒV‡o™d1#òdàª7>)Çk¼ ‹FЬª,qÞéú¯$>eX¨§ks­ÊÁOºâÏÁÿðöè`¥Ë%Í×ZŽYð*¼Üm'/kö"B;o3á¢5‚Ù´ioªzKÛBNfô%Or’\©úþýû˜LõhI]öÉÝÅΠєµä’Ù¥?}úÔ[oË‚ŸšŒ1Ï&”1Yèz¹¥Ë %19úм†ýiànà¸"*–8šŽv2\Næ#ÆÊpzbýi™~»¬£5”Ú6GÀ…ž=]k—Äÿ± ZrU²8J²Q³å1ð„±zW—ÔP¦0ñšÈž—ìì¦ý…’E½ü[ÿÀÏ㌠ŠÇ‹ì—®ù:ëA_ƒœYHCD-)•¸žÍCþÈ·G òRͺÞý#D„=Ñ % $$Lf|:?A¿÷¬EVp íÛ·hXd¼Jœ´ŒÆð«†˜bµ|[Vë›[:‚ÊÄ8 .Ìš»}Ý›‡dl±‹1uÞxX"‹ºÑzW8 ÷Þ[Y1ƒ &Ükç[ƒ0ë ;jYâþ +ÏlÚF½YByª•E6Y¹ØW­šsÈY¬j©öy`Ë y»ñü ýXÎm§×Êü.8šëçÄìq#>§(¨qK¿?nšeèx^ÎVmd…o’Ô›Š£Bª´$Ìr ½é| ×’·ÁëQð3.îØRKxJƒ`‰yÃ÷£÷ÊïÊ)×N×:SÄ|…üÏ>4·šõ •‰_ßÍâ‰ñ^i€³YP«Š 744Š…v…;uG™U¼Ì[;‘cÖiåÈŸÑ7GýL2îí:ûø»—€Ž–¶Òaí½ÈíjÐ>²L1—Æ!·¨•£$¯ãù»¡/–y.èyFúŽ`¦e£º§is¡p†ºÒ4Rw#aªÍ×ö”:³¡Ê…¥”Þœç§Lž[ðT±–ï*¸*A¯çhÁ]7[¼â0­–wuüƒô;ýÔqÞ¯—b»ÓÃ|È/ëFñ‚ýµ§ÑÑÑÒ_¾à¡øŸ3³Ÿn|º6:xôn=_|-Y*&n0HT žù¶ˆ2îû÷@;€-.[jq)÷3>æá:ŠÜèt_¿†íÕØ—@ÆÖ:ò²7×ÐxíXó<¥ª¹ZÇÐ'×6<†uÌþ²2˜Ã“ò]tpLµ² óûëà¹9~]+fŸöÇìUªj€æ;=ë¥6îŽ ,ÔkmÚ?™)Œoxp'¤ƒËq¥áy/îŹÔ0„ßVªdùßP»ëéÁ?i^£/S€Ý„ŽŠÖŸfr#o§£ˆÿÖÍ AŒ‹ “ÕÜy–x:|Ü͘¤ZšìçRëÉfwûÃ¥fb@ÇB~³m»îƒbE·É&æ’Òøðkà¾32ÀgA)f$öîت˜¤ °+wã‚àÚw~ûo•‰¡s”Ÿ(„bX˜EË”`õÕÅ\@Žýj Àmä$~ sf¯g{cÈÝÑû ঒Ëý)e^y¶#­¥åS¨¹bGGGÊ;g—CêäÉ¿ ÷ö–sX«??éÃö>j+£Öªú+LåVP ¢Þ›åös_\X+ˆƒò‰"ÊùžŽæë:Îorµv ¢+p^uF”Ëk…ìé#EåÎd®â-÷cLãDæ-½‚Fg”çê¼oA°oÔþcÓ¬$\›ß-Ux¯_CwÇ \·:Úk½®ºÐ‚_Qnš³°ë€J‰Ÿôõ úp Æhf˜v0œº“ú¯¤ 0ôs›S@¨+¡ebvÏ/­Tž±bVWó9ª%ÌdIûµZl°Æ*ÉÐW†»c? ½¢¡`®Ó™ ûU ¨ˆÊO#ƒH©¤_ásTÃý²NæLEØÅN·Wû?¢6XÍã¤õ†ÓûÚæÏ)ý=0•†ÀTVþóŸšæ†¬í*§#…d°13£ÃÚn`^TßéÍh?næ~÷É’r4Ùú¬~¶Øu«¤ý„ÌâøøkïáNõœ`ûh2¾¸¸8ˆagHàîÒX¡}f¸õ{r½‹µæe ‹å¸Yû»=<¸H­¤ÕURÑ´¨©v9œÅíïïOá6 ŽœuZG¬tø)ˆ·3¬U6›rs9‘(Þ¶»Ã¨@ø¹!Ô$ttÈÕÁ–Ö­ÛÁ4ðB‹ãOÄRì…žŠºaÎ/Ôú¶úù¦”–^ @3ÃñËÄÊÛàÖ*Z·/›@Ÿnïï×'ëýmó}û-G\d}qÙ4qLÒÙ»¬. Ã!GDyE€ÐX:_']²n6|H­-½«£gˆ–ÞýÖ¾ þïÞÓ÷Xo[sßP·÷‚ׄÜaalülDK«çÕÏö*T)x5]ªÔIœØ÷£Dí‡z8Oï–Öœþé[¿ª¬íV:K°Ç¬‰wðôI€  i­[¼ ö¹†ÂÌŸ6ÑR@ Ây¸Ï?ªe_É Næ"Çl¸¸œàÏ&B]¸ÖùSE˶ “„úŠò{9¥7œ¾?[’B¶˜ ®3AQäuš¦JkÓË)ÂñŸÓ¥Úžxjz¢6 °žî¯T„ E„ßQ‰a. §o‰Ù¡cIKÌ”Gè±<ô3*Œ?݈8!Žc‹GA±È» jÉQÑÐ:†Ryª|Üj-ÆßïÏ—²t"i)¯PòY½á¿Ð¤Ó6T’olÌÅÿùce¹Õ¶un³&÷ $@l‘gk¯·Òfšõ‘ uwaˆŽ^}÷Õ֌᯾é¸ï=ôdU´âÞÈØ¸Êth(… AýYXNØŸ V$^•¨×Dj -³GP/Úw?JK9Ùc4Ùsz‡¾ÞžŽÔr—ôõMûà¾rùWùOîW̶.‡ƒ¾›¸E)‘VÓR÷Â'9ΣáÕŽü·{r*5yI^Á¦ôpÝuÊUˆv°v¦ ˜NYYY%[åxYÐH2&¶ %x4<]ÀòCLÌ~¶JÒÓrýôÔU£rõf8«üòâcL¯¿ÿ;öS:EB—·¼jbo£U‹iÚ%Qöf†f°-/vä2_¸Ohõ| §66pù‘}b)ïj\ÆÇÇSì©`çÞ|8Ÿüjpç¤,L# þt44m̓Pl›Kùnu¥T“à_Éû_(¸hŸA‹?øE)%²ý¬®Þ·¢êñAý «] 2ë—\ÂD¬Ð(BÉóêAõ>`»¥z—kÁß¡ “¦¾ת nÐ@¤\ÒèÈaþ çi<°Q¥ÓïY‡¢ÉÕŽ ø¸8šÌÜq]àm¾Žd¿7Þšž(¡kþž9âôpÓý ‘`¦\÷ç«z9G?ÞWßC®I‹e Õ,/t‰uIÿ3£ßë_‚²³©a½€àÏqÞù2³½nÆË¢¯vm,”É2êÓÊËQýŠc@¦ˆû‹=êþÆæŠO_§¹›ðÒ: “•(öSŠôñ1?©êpý¾\õå@—©JÍîヶÊÏï=ïź¸6þ_/@~ Ÿ]ÔßY >{v?Û1èžðøþtY$Ÿõ4Íë×pö­WDÿþý#иÍu/üf•Oð|+Q#.ùHšš˜¼!bÓúöŠPcš6WÜÞ ƒ’?þöd¥µN›¡Œh.qáèiHBB6[»1V,¢Òÿ ClgDõž¯Îýz“n¿ú0,Ðþ’Ye¥Jà²ÿí1†2~¥U8JµDíÞ—ù}Þ8¬õÖ`¸ì}" ëhd–áJô}« ^ýÄøOÇ9§AÃæRØOçŽÏváO7¬¶Xá>‹æfóUöÎH=HÀ¤DX_¯ÞŽéËÏ:]¿›ã†¬Œ¨KÿrB²¿v‹8SÈúžHÀrS6}ô¸ed”Üøõ„ðóçOmÂÎFôð{Ñk ôá`…L—#qó¨¢+}gý*ˆüÞÆôÒOë¸~õüŸ›Þ}¹¿+Œq2_¼‚Û‹ã1B,÷}~÷o{XÒp0i¿%võÅ÷AÉôß›.—]š}JÁ·é±‘‘0veQ^½ÍÔçéŸãù¯*ÿ2ùÕtôæêª{Á¾=z®Æ¼óƒ%í—(4H: /j…pˆfÊ£}‚_˜;m8iÜûp~Ù-„>þbÖ˜³èë7éä´ˆ°·*8¢œ˜ŒŠÅçTv¯¼`gµnN’Ùy´5˜>Íظ©Õ˜>iÝ–ë²ðfVnõrµ™¯E‹n’ÀÅÅi™]ˆê˜YÓ-ʇ¢-³¹R•åWû U¹ß ¥›6CÜÇå·,†·×ÚRâ稰ÜÕúixÌ—Õíi'v•Q7údÜ¢‰çS“³5Š 1rNø‡r’åÚÂOIXž6™ðÄ—øê5 1€ìº¦è\ÌZ©ÞI†rÒFÞÀ•¬÷‹¯Îݵöâã­±‰bFX®Lôá >üL™äç™rT½?C–^€9{z¸1†™³‰ ³šBÊJ‹øÛ©x Q‡¢J›Ô´Âo2y·gUfÃd{ÇÑRobÑ äh³mKûwºÍ7i©3ÌÄÅ7Ý"üÈË ~­îÇÓÉúßè.’¾Ã Æ¡Ñ5èûÎ/Lnhß¾J¸bž=÷ÖêÝóó3 lÝgømçeu½wbRÐ4¿x¦/ 8mbBNÕµˆ_srâDsôtñ³bó÷mg6¯Àzöw£«3Æå§£R5¬w!¯Íg9AüJ1ó¨ÃùÌÞØÎ›SÃ]ÿ'Õ{W_vðäîxßÁ )T£µ©U²¾èc€Éà÷ïáŸÏbýiDEuÏê’9"‰(…@KMUõ“¶ÃHA h³íúå‘+°“>°n@¢$bCÂ60!é§p÷ƒÉƒ¾‹€ÿlYn¥$V¢OÅB&øc lÜCó´äîxÉáûòžç%˜*a|òzîïÛ›ÃïKü}èðñ„‚m´Ù?&•/“GÂIÌÏ®£Ä!SgrrîÿÚÑn>šk†Gñ§e4€_ex´Y|Úq?Ú?×½µyÛv"f¢˜u€òjuºÚô}ß»w0Tþz°ò’/C@D;e»Ñý/HËK负ѨÞG-éÉXÅyužÏ±KÑ2Ñáj -ü†‘Ѹ'ŠôÿWñµF)äCø_)Éï—”†  ¢-'ò%ÐEÃÂ[üïa‡lý{ÂEhÓõä¸BÑäçÁœ¹ãÑØkÇ&‰m¢)¢¤&‰ÓB…¢¿*_„ `fãy¡“uww`§ê†’6§n±³Yod¨ ^ïÞúSÛùÚ·°åUþªPUBj¸„ÞŸo™˜nÎÕÊ Ð±Ý ¤bL£bdî[<ª,ñÑ©=ÀûZ0a6ž2ì<ü×™Ck5U XaµB7hµ‘ÀÓõÑúg_ÓYgdaòÛ]ºÆ«g؃+ÑÐÐ UK’Î#ÃdùfƒœÄÓ©QsX¬,KÄ ªKèP|q?÷ÎqJKÉêx_2å>\KÏ–jª-0•©WèÁú¨³03 n…j4]F´*êùN9r‹þ“$§gó!fÕ€€ú·(h¿`ÇÂÍhÊNýÆäǃ<6žyý§ygŒ›(Àþk6*3v!7d‰ÛâÁõXo' ¤lƒžèüýý?g ÂÎ]æË§‡œ´=(œÕÍÍåºAÏ6À/Ï›~ï!Ð×_Á'ƒ1Æ«Œ?œÜQѬݤPŒ€4º¿|™(ôW*4\øƒÑ#ò·3^ÌüÕÛ÷ñ&bOS%ai‚¸ÊŠb–­eÕ°îê’j¹YöFMÖiktA»õVý–‚ˆšÀE$³Mª¬ÒL”Æ€Z$! ë•=ã¤Ü6#²wÊ¿¡A"'ÌÌÞ»oÈ4ÆóY€Ð]o–¤%þ4$ýø¶PÑþªfÓÎû¥Õw¢„ø=›Ó§kßçáÞ¾}KÂmöõ’KbÕÃ|¼L¨¶fBˆK};ý@ÏÀÂé´)û†áÓ‰' m/à6Ö}F²ëït›YZ©4Ööþµâðzz¢¦ó pµzuœ´¿¨¾äææÂޝ•j׿º:˜InâgÂ5T7àöõW=ëh£5ïz·Zõ÷>"u@`ÇQõh×Íu@ fSû×Þ{(!¿Šèº"ÍË‹çwg·+×XOãû]>¥ßô­Žónⲑ†Â"@NÁÝž¯‰®¯¯_dí+aƒ'âÓðXä§Í“óÛü?Ò³®úÿz¹î¨&Ÿ.Hè5©Ò"E&E:„¦HéEªô¤Š†"ETP¤*Ò”"€(•ª‘Þ›ôÙ7¿oÿüv÷ìÙs6çäŸLÞ™ûν÷¹Ï™;BP,ŽS–¸]üMœ^ $óªïÃAPÌ3lÝÕêÍ©”÷î‰VË⿼µïÁ﵄éìÔº ¿ÇnH"÷\Þ¾}«[ð|ð{«âìú¨ªJu0yá£B§*Û¢4¢¢”ˆÎdQe­÷U1Ð éüº62ò^EÜFk“s~p6z7@Yýôi¯@Uxñ<5}tôŽb”e eU¥]«,Ñí—¾gó j¯ÿ©¼«µk׺UÅUèBÎ+vÇÖËg¦¼$“_ç:'Ë8YyO¢+zÊ„(´æó“×±½O7¼†álW(„ ‚VŒw{¡7œH\§LÕˆwÉ?}¿»Ð{{”^âel º£14¶ªõô—™dda0™Hˆµ&ný¯¾²t |QDòöb©ýÌÆ²Üä8iéK¸h Õö¦S›€v°“TŽ„oÙzPÓ˜'ˆ"® H:“ïe{!fsË΀¡MëáªÁWü:ª{WÖ•'<|ò)5nx —>ÈöõØ-?¤ixS Ý¢rª°?³¸å~!ï1ýuë;¾â+ýš ÑçŒ99”wìóo¿¨±ªsÓÕ×'ÞÀ(€<ØÇ#g‡ø6#ô["·ˆÅT·ÇxáØÏ€î¿ÿ1ñ ÎÅ–´"ä=JmôÓéáôÓÅíœîê :Nàžõ>)¨»öP×W\–ŽˆÊQbœ‘÷Ÿ=ÒåFšYw–*¨r÷½eÜÐÐзv6¨ ´gp“«öª~g˜"C:üC°¨Òfž"åŸ$ÃÝŠp ð¿U)£qc‹¢ óÊ{[“Í– žÏ5_m<|øxï±¼Ôæ„ Iy!ÐzÓ »mcñ «oûsÿ¢ã4úýV/Ñ^“°QCiÕÂLìRÛö2Ü>’ˆ4šoêu|¯ë¯ï%–…˜‹¶ý,3æ÷žéàˆ¾ÙÒaF°Š›¢T±kibµå…vж3ÁìÒ™Læ°Ã%%|S7OxÒ9ªlø÷–²Í ÉñxüN6OFìt§‹b÷‡x3 @£R®Öq¨ Äê^;¢bžû‚¼ …•‹íÉ㟙祪sº0ì*¶VOeEiâre“\ ïp"^üe7êûÏÊ_H ‹˜†‹‹K‰ýíÒŸÄÓDãíÄlŠo’¯L?{°›˜ßåîÁè¾m?—51t‚C‘w€0C3!Íø³U.Þ¢æÑ»àçÜŠë3hUâîÙÕüðbÃÌÌLË:7: 0\-D¡&i9³gʳF{ϳ²¸˜“Ž…=¦8°>š¸× ¡·! áYáy¿ÍÃiØ¢³Ún¨äŪëžbè—ªD§TÔ‡ Ø°¥ååù…tÕž¡"Íñ¯éJ\Åˆ×øOﯨ'üM”ùv23Å¿¾8¯R¹ÞMÎfl„0rF²Í?|zhñÛ•5-NàÚÞ' Æ{ºù3ÙÅbI$ð; ·âHIHHˆåö?º 0)Dfge¨ìÚžb YѶC*óɺ#ÓÙ£㇥_“vŸÿ6×ÝÔàHBýç“yTóź¹§,-IäQ›)M<|ðM|¤¸çI€ûªQåà.С1„Ö8¼ä‡Š †]ž õ–dE¨g`ôðà'åé`ŒYZFºéÛJC+Àaµ}Ñx©²µd>i¥\f†ö}ó›áÆÂ`+»½Ïí¥ø¢Æ®!:pš4Œ™ÇÄgR‡‡1Q¸û¹ƒ4‘g>Ay^xe]Wl½BPÆÅr®„¨R(k½¸"¼¹9!¢£ƒ˜ŽR¿¾¨evæzO×s=7銶=êxY¿P}#3¾qç^øáOC§÷ÖæÃûçô<Ú |š"Q-±¨2AЖvMorß±Öx”N›NØc…ÔØoæ4•iPÏÏûûœ…NèMùEE㨆ùu¬Åhµo!0œ™m«ìˆ{íTÕ€·ö—Bê¥4ÉóäïFKÄHßâËÈD ï?·GÀ ÕÂ6^|Ë„f·dÞ-F‡½á UåðBzn~u ™™±›ƒÃä+UžF‡(ccÎ{4¬_ôÕ¬_‹ùá†_ O\UJµ½©Æ¶èëj‡@‚E(ÒÑѺôn˜wÿ+kÀ~ƒãÑqãipÁþ T9J>Œ*Óà©ù@nZmàMºHDõÖ˜˜—*·SÐr™…_¾ÈõFÕ "ß–ƒA™KÁò­šˆ§9ókÕ`ŠPöíÏKQä׊ìè{8ô5ÅØÃxòáɇï"ãLåXÑ›|Žò‘,Ãot4só6c1¨ÉÇòÙ` ÃÂQ¸ÏØ5cqK¾î¾,»HÝ [ÁÆf®m<Õ¢k×Ê¢Mvˆ£+5ä÷".#;I*Ê×x£Þã@H®¯sú´Š2ߺÒÜŒz­Âe »ªÑ+ì’mf†î°¤72ÂÀxš fáüð0âîß$»¤Æ®sRì3æ/Jx üñ¦©¤TEY19ÝtyüQgÜÄ'¢Q ´[ÄmTJwCžbæLsݼW°œ_ñz–!hù‰EÌ6eêþq0=%·¡GŠ&­)Û­ ÓXODÈu.9É‘j§ÕÃ:ÿn¤xåʉn)é.R°´ßè8]μP ßqLC–ø“wfÝoÀà÷ ”ùH´B6D:ôØY&{wû{4Àu ,`•xçoȸTÎ9þ½Š¡©Ql™{ÁR. ]7bäL©ÔÓÃà~0›¿ƒrô)­¨oD¨1*Ò´<‹—õñšÓÈ ¹Y9¸zên†\»Û[€*£Õµ=dXók‹ã¼ýBè¾…Fؾ`E^ª¸7-qpPµ’¯³9þá´$‰<†‡Oݤ@ [¨b³û6GiîfeebÛ[…\ίW¨0Â/N W¥¤Ì’Ó\\ÒÙùÝB¼) ”s—â“Vr@á|ÎfÌ&Ù×uþ¼·’ ƒu˜Z¢2\¿½¹Íú°ý˜Fš!ùà&µõ§zÜe –tr¦a ’ ºZÔÎQ»Ö ¿€‘."]±ùº¡¢ñ%•}§9X¯„·¥.ÁWÜ– b£+d>ä€7p1_‚6ƒAöÕMb¶hnöŸïÆ'­|õ²²¯ÊRýMZ•tfü)'£¥%¢ukI¸ÚÜ8ìÅe¥j?³œÍ‰EaÄ$HxlýGlÇÛ9‘S-}~²Ý„ýAãõ҇(%8áHîäÁ>Ýí‘›F¾éÜMÒ£+¿Óý®œp@¶pvUÖºç«ü“¶õ”=ž£"ÄõÕ˜=ª :ÎGgó Æ®ëf·oÕ²²ÝW<úLz6jl¦~ ‹hÌŽUѧ¢P¶ì@÷æ¡Z<ØLTàõ’ëÞ_5<Õ’Xx¸a2"ðËsŠcØP%iÖP%nîl{¼Á€¬GÄÄîœá6ZcÊ•…ú¯ÿ™E,Û,MÍ)g1 é³{©Où§}ÎMgÑl(º·IBmÝ#U{þf®ªÂ}º»«³ç$戼¥Õyq>P®ê'óy¥´`vÿ§!¥þ- yóhfcD+*dË»Î3¿uW9” °èã³m¹gü8– 4þdÜQͷƸó}AXšÀ xú瘶×Ö¶-œrŒõ÷aŒßdþÒ“ìRèu—¹ÞƒÄl¾ì4Ñ0N&üøý'd]¯ÊÔ[/þbA ¦¨b锭խŨ­ëÕÔSX0á§®«5ö‰Ûa3];Ý è ³¼Ì“=L9³Ð;‰—ÿ<ÃÓƒ¢\<ÚLøOæLužX…õ:ü ›ÚäJ#ÃÔkRÇc+ „àN.Àæ€~;žÒ}õû,œœ¤n¬O;T3³SzûNâöÚO‰×*bi|U†sCUug™›×Äí"nÆc߫Z!aQÿ:œyã$™CÆß’ö»AžÆïù¯”“í68!·€þWº1K—¢ OuŽ/ ‚ezV=µuø#g¦f @;ÊÇp«¬ tùo]¦uÔˆÙ|µ¾»ê;¥Ñáá[|“ž1SÍU PCƒ NÚ tRæëWb¶Éç…ýL@ª†¼˜e½Q•]Ì,n+«(L`‡Ù÷Žv¡Š'¹2Í+Û /_J¼Vàw£ȃՑ³Š—9wnc '\ ñ˜NµÅ°­ÔÉj»Ì‰vE€1U´Í(ÿp;É—ëÌS„Ö»Ò7úšŸ”Ftö‡Í¸&jÁq.²èavº91s~û TE•píiüÓÅÙ¿V«5¶'Î<ƒ‰`Hº}qþ¥;O‡[?”ˬa|0X¯“˜]2R“BtDƒIÍ]³îû˜ö{S\IÑð“9ä‹vПúûAƒ ÚÕ†¦_=¤¥f KÙ;„¿Òü1zÈí{|,±qˆIOÑ´ÌÇDî¨3Uy‹¯3´¯úN?竨žœ1=žûÁÞI?có.ƒqòMÐûýQbãåLVذž–»N(ù«=èxþ*yÙ4\>w¬c@¸º›ƒŠUºŠ4wΖ9[ƒá¿˜Y» •5³„Ñ» P]ÍõÔÌL5«ßÉ`vöŠOÙ³“Ù9LŽ`y£ÓQJÔNj­#©9oh8½ÑƼ–‡¾š´=áQIUŽdÌyJê£ýÈnZÓÔÈhíþY²„7ò ¥‹Ê!sr¥yÐɬYŠ³Ø¶d^P³ro£ÃÛöC|Ç ©ºžà˜&‡ôSÓDEp(²XÅà`©Üã¨Ë T ¤€¾m€R± ¢#¸»+‚ððMk¶hüðxÑóÊ2.—t¶¸¿™üNÔÔ¡òˆÅž£ºwþw9z«…ž®í\¿/ÍdzAsñuš € ÊÿÎugòðlŸ>y‚ÂðXaü&XN}&àç‡Ø"t Y\k(ŸÇ„,›A^ %í»YÇÅÐí´×ˆB(ž@‰¥¹¼µÅ _Rª ‚šè’þǾ¿3 €ç–|ßµv¦eÐqò¾¶7Ѩcv$„z’ÒA,vƒ ›V⫺OKü¯­má$ÿ&YAÐJak¸åà@*w &9p¸#-ÃcI8iOYÙ ÁÖ¬QÐ@üGOó«xVh¦œ3©š  £IvʰßöÙ¨Égcã$ŒPhæ ¾§¡B¡PmŒ0¿þ‹Bahv™cé^ô ü¶Ganìî[Ñ»ÿëOî k ð=Z¼Rcš4€A{èŒ@Xb1 Eòù’ÖÇåêI9XµfÉŸüŸ>ÿ›áþç¦kdÞ]µÏÞV©Â ™^³+ —þ5à-Ãÿ²é7-†\6‹È€o{ÑÍþ/ØA4?x“PJ`ÕÁªÚÓÓɇ®@º$¯[ÀoTòàÿÃøÿ¶IšW}‚È2XBáHêx±ù½Dj$5›·Þ‹fF_…Œ¦ ƒÅ=uhO“YO*Înøû1}æ÷ÅFRÄðoݡԠéßm&bÿÛ Û±å$ézO±Êe6;ÝeïµëÛ$ã´aŠ£«€©W2íãŽÝëHe”K¹‚>öÈÏ=ÓßÌ~²$½#d&vDŒƒUýÃLågçÎÀJ $FR'Ù‡lÀk¼{ªìÐÙn¿Á ×$u|Iùû) Néç©7NrùzÈÒ•¥VË©bÉó7±ÏöÍ-≗¸G­‘t´í8sgCÂ÷bïFDô~ëÝ“ü¾ÌÈŠðvú}@×’»×ÔtëÙóz®ÄcÜyy|p8«ÅÚîç©ðuZµµœuÏkj¹¯‚¾u¡ÚH_(§ùû%õÖv|S¢¾'ÃašÇ$…–/7Õ¦Æ9®*îP()’mðŒïaŸÎ.Bæ>'bŸh/Е"ôˆPw?Û&ÿ¹˨iÍq¶¹KqÊ¡AšÂ·’ –y=óÛ× aÏ Jä’s:"žÒó[ôžáò¢Ö´U_4¾W\¸o>vFâÕf·TûäÑìZ ‚®‰µB^&š _´Éb•ªØlœ¼°#x?@~Í‹¡òË!rBÞõ;uU˜ÍYq° 5â zJÈsó73c®LŽ¢|;¿C#DE÷[0ºÌ^÷"ïät3C¡^—³¹‚žáE²(-£‘—üîS†­9@l7Ì áð†ç´³%[ÜñS잸‰â}ë3zü’9ýµv… ê—“‚Gvˆ½ƒ|öHvK]Öш>}R¢¤ï×"ln“Ì1Ùƒ@ DâY3rAÐÑ?>tˆ<¬W†þ¿~2Oc&«“~*Wçžô´ ÕŽñÿPK‘nYT2Ž»ÁTœ4¡3d.iconset/icon_512x512.pngUT Q(bR(bux èèT½uTTß÷?´œÈWíôD†“øÅú„(7V¦-pûô\H'Á+E P~ïRîõÑÛHißþ¦Z±,8Í˦Ó~»~QRŒž=Š¢ªúÛ³ÛIf®3{£/ž®°°0îînÓs»§‡ûJ›ï Qºãgœ·¡Z3X²®}·øR¼À}îJD¾‡FŸÕ˜›nbqA©Q‚:NKŠ‹Ñ·¶¶˜XX€qcÖ¸^?xÄu¼Z•åÖ§í”ï˜çyèä†C«ÝïI¸»»;³!?¢†h·7HVS$îɦ1úÀd—:32lŸx<—cI¦%®BÊ—žobj–+ŸÎo±ÜÒøqÒÁsx`àÞçéþ {(…‹n¢P­Aô) ç-(FÄмËwh3@ðØŽÏ—ÃJ òKOwF~‰ƒûu˜ë9GöhhF…‰¹9ð£‚L7²4^KZkÿ?¹L*Þ7Ç­¦À²zŠÚïbÐÒíÆ~GÁí.·6ïy™šš~YÄ) ,?PRåóa%‡¯d±Š0ϱԺuX¹Øód;Ž`£Y¤½ÒÉ9€”[ñþù[ŽÏk=†òÇ@üIoЃVAƒƒ¿kP]t³ýoÏV°H¹79-ºÁ´Á¯±A8åa®‚CeébIÞƒù‡Òå¤[¹ÇM1’¡~Rªª‰¦"lUÕά·£ùŸ¶ Nï|”se”Œë—ê6»!n:‚&Ïh¿ÀÃ2Ëãýá°öV•¤YíQîóô})’›ŒÈWã– =p)ßetAò-ûÞ(d~î„Ï ±8¾yÐX Â^Ölóñ$ï“¡Áå*¼†ãH}î¢OÛÝ‚“Žßˆ´üù8ÁK!棡5M2æJ Ì–4p‰¸ÄDÂçÏ>q~~ÏÓeÍhÓË 5ey±L3Ó V2Ÿ4t=äuC1«_AZÉ•_ ðº3ïgò„6Qµj-pUÛßiè ˆ™—¨•))+<=ÜDÞ¼U"ØjÄ»5X­2î=Æ& ñ ¬eÐàÁ{‚K“PèÃBb,£ rDÆ ´H•š{–³y/ôèÇRDÞ]Ta"„͸ê~03cr; V¯U®E¬ÅdáøYr+b*rOø°o’°Ð~0‘Qã' ¨­ƒ‰ͧˆ¢Ë¦ªTu§iišÇó>Èß"ø<¤ ØÇL—i‡Ž6ÞEä¶´ú=ÝûnÑx¡B¤@ñJÿ…}œÒÞýY˜#=a¼»ÚG9DëÜΠ”`W#ôW™š§‹îpo e|f¦í|3xÆ Z¡Uo×êz4_GL¦z>ô OKwIxÄŽUï+nɃnüÕüöi{égǦ¿ÐõÍ ïîcyàKçñ"IÆx±†Ó> &±ÉÒ^.8î°èÕÛ-e÷ÄRŸ `¡á|„Á)NLX䉯Õ}&fûçÏÑ‘½¸QN€3M+³Ð äGEÅ¥èö:醠’ƒÔÔT‹•6QnžÎeȘùK÷Ñ´¶=Ú§¬$¼Ô{تþFçf|W-¢vw´ï¦D@ßB,±{üS$$…3¹æük_y°Ó·ØOrryÝ*˜ p$ÛX©&Oêì^fjêÝÇû CÆã@¸þ·2‡\9Ïûóï‘gìP¡v…ÃL,ÍT¶›Ñ¼5œœˆA³ ©ì±ß¼§Ô0OmG†‡¥®Ö.îºf!ðªªúloßznÿNÖ@îí÷|Šœ"£@B(Єó¡T“„ïq­!†úØWQiÆê â*¾G”ŸPRs£Ý>ó«÷ŒÊ—'' òDøªšyZ“ýds±?UÒ Â5ÿß(µ³ñEAnï¡ÇbnÎÏeû„;Õ^&È©7 h8>ãç­ÅË}cB„´ü×ââÔeÚõüh%c;¢MÆAr™Ôë-'¶'ø¬§/áÃA¹I€¶@ý‹+LÇšß‚å’:-¶Kí¨ÝoöDÂ¥ù£§¦7ãšÁijõÑå3h% Lá·ÿvó…sþ×—wûJû¼™,„FGâ …Ú\ÃjIÀu×"«U°.°¼>Ø®+)-eeo½×èj­¦j³Á»&!!ˆÛ£ÙââØÄà.Ðáqäá²ßáª,Y)ÊÐÕ–¿IÖ©Dâ,,-•’——ÿ w¸,$$$€ï<'~Eä.ީΕiMò¾{|ƒ-ƒ¤YRíæå?‰knNS ‰Wº‹¶z5pxôÈ èÎÅO׃i€Öã ¤Àº'—ûôÉ%ô¦¥*»†o…W‡WñóT«j;wM³E<¹[½ê]Ã<]2ØSè" 6ªªæúí~zÊÊÊì²84Üx· Î7Þݥ†§nî–³ym™vb (Dªá¶u{Ü•òîîÎâß/´À^yŒv]ê%`r¿ÓË%¹À{" ¢À–\ü÷Y,®É|ª³4•Ö³YªÙý¶:\RRR‹©âD›$è(9ŸÕ¥2°°hâPilN§\¾D/Ø·û’ù/7¹ZO\¥¥¥™ð‡Ò|!jÖkœ¢ó!;‹ë† £ œÇ|»[íž§›;ÃQ‹ qÔSQ Ê—Oÿ{r“¾ï2‘ä±éHæÕ?:úá+[@[ù¹]óÿUW8>½°Û!§*§‚üŸâ£8«ŽiŸP ÐHÖ‚ìæ'O ¯å žp3‹¾BxS¬N=è Èj@’š:ÂÉûŠ­T×YÏ<9GebÏÉú+µÎÎO-[pwD‘Ôn_6öàâ~2Yõí¿ÍwG0`O¸‡  …EŽˆGIõ*øû÷ÿc"^’ÿnþ«Ìë¼…$îêøN¨ë5|ªÎJôÆ-™ÿUñÞ"z'B3€ €f$NãK`«åu¼Ü?i»YöFú*A›Cõþ¿¡xÐ÷ @“#§h0®/Žï‰)ì(ž¦¿ª©¥Z+èµ.u‰4•oüPQŸÿVþ!‡aÉó ›³}¸ÕxOÉŽQf.îVò¯`¢“ºP{IW×:^]cæ8M*ãV˜‡"%9ùCGà¤àsµ£hPC†@ÚÑ7Úûe˜íŽÃeq«ÑiF¦/¢m,ÅFÞ­M ´ [þ_Ÿ*Ä’ƒ$6·¶^32öÖÖqBò‹‹Ùµ[½®†ÿNpÆ|DDø£Øøè»Ùý ‡óV3Jk·XYv¯?‚0çrŠŒú¬UBËPá™XY „ÁpÙ£7ëi|ÖTœÅ8éGÇý¸EèÿÍk<©+Ô¯†F86€\bÑg”õ¼s¾ž¶oµÀß5!ªO¼Œ ª:^k©ÊïN!PU-(ïñP*Ï›ØH)0ÙÿÍíåv÷›$H/¥kU¢äu ‡â§Iaƒ¤ÊOŠÒ\‰þ#¡Ë É•² çáZ‡§@XNþ9íZ¡B­Ü CœZW÷­µŒ~(§|­/µ°…`࣢0騠8pA€žjó;[ï>zƒ á=<ý ê ĈT¬‚‰¨4*%ÝßüXÜUYã%*ôÜ cÀAëY¦¼®ª& QÌÌÍÓ‰°¾¨ÖÉÊ4d}}ÝY‚ñ•¿®Í .˜×ä½ 8ƒYÚpbó§Á¯ð^ä´üÔ}®}ø!£Î£1øQ¯ËféêCÝ™oaÏ7T˜ÈlÙÑ·¤eóû?>É­Õ½ª¸©jÊJLDRUUVSëÑ·ÊŒ¯2à9½i7÷×Ó '&œ T††¿²WÏKŸw6&¬&òš ÝûVZjÇÂêU½¯ìV/@ÀJKHôcxµ•ØWhÖl3ä¡êST‰[цÿÇ»ø #±‚58á[Ÿã¥gö}׫x«è÷ã7 Èfô£5SGŸº†*”W’&§x¿HÏe[/®séI¶ÿ¬?“‚¨c§ÝÎÇBÊž±ÀGæm¸cDÈÞ«·³%±WbMåyŽ=¹Œ€ ßZH_äÓ¦¬æh¶¶¾áDÖ3ë7/·€ëA‹¯'S½Z¡\’ÀK¸Öø×Ïà·M£~ÿ‹]„!ºü"«Û³–È…ß”Ç\È>9!º8_yw§z² 8Ãkzë#æ29ìûpí»ÕM¬ 1Cý…ô,×7§·Ø%¡lÇv¬{nŠþˆ™]Á ª8Øöö¦„çœOáÜ"-äñÑÇÄÄ$6/¸î×¾©5ˆ;|ýŽá 迱PV¡p¤¯›S\äVᪿþá‰`5÷eÂûkb Ð˜È2.°x?LðnnnÒðð¨<¾zà³_öÙÊ•ŽL#U=›å¡õüo*ø¸gZGõ§­ÝUb•{¬áXè¶ÏðQO~>©Ì؆ -GÒÈÿ·mÞüHL¤€P`¥ÝêswÎ/CèãJEý&ãQÇü_ÐydLªòcQoÓÅV-•Skß<–aXuJ ­.?À4ñ z¯®‚¡ñ¦Š`龦н –Ÿ`ÖltÚ²üÞû–‰¦»YJ1ÿX„•EUÏFw ­ª!þ¨{{/êBy~c¡ï¿É,η$þÆãWö€pÑrÉÍ—ÐxУŸøùùy×I™±ŒLO!‹Z†­ÉNd“¯™”ѵ6¼Ÿ¿ºËj·øÕ}.3ªœ¤OðŠ;6ÐQsÕÈ l«Îö¹@Ï—Õ󫪴Ÿ_Û´Û´ÌŒƒJÀ¡ý§´D™P¿l™GFïÍή±WpEAÕNj!ý?o»cÜ@Ÿ?´ÀG”x¿«}#Õ¨"ܺ\ œ'‚V:|rs»F'Ç¿ÏyõßxM$ü«‡ýoeÄžu[Ø/˜ÃÞw 3â"P“¾âìy¸sôÓü°’rM\G–ƒ· ýW€Œ«îŒ²’JÀcÄo²#øúw& ×.®ÉtâÉØöà‰|ëVd½5w€|‡JLÅ£eå=e×ÂmäÎÞXɵüÄß,b©^£“©;°…lÎÈÿTêµñȧü¦Oç¦Z¯ýPÇM\@ò6´0eÊtQÀ¥kÁ7³ás$|‘•÷D•:µ•îÌx¡rÞé ±ßõÃÓ`dd¤÷é”&>Ú²4+îªÍs¦}a•·^÷”ûˆC '¬„îoõÓàÙ¡.ÄFj¡ÒtµoÜ[~Ð7:*EÜÌçŠñ_´ÿ€#EýRVäu«Ýà;tØ]Ž÷úZá¼,qpÔápÚ¼Ó®ö[õPhiÁž!²ê×Y©*¶5tsŃ`$„‹oÄ¡GôÈȃ禂ZÕ4ÿþ¸g—îÉw:ûæÁ6®t‰ˆ q9šò.C0åààP¼D$(.nÚ|ºYyAÒZO ãyn²ol£DÐá…¼æÅláZI˜P·\31ñÉ{½µeZ8Á>;¦“ Oc²ÛY‚8èëßÛ¿3Éh`¾]…Jy‚<2Ì„RÑpcEÎÊ;GGG{KuÛžÎ(ÞA"½EûݱŸ Ñû8ާ½RÿU~²V—.ÔàçÊ{ßn× »úcÐ\ K ÝžC:•ìR¸íqoÚñünî|þØF&ºÂà ˆäð0Ÿ'<´eZBBÍå°ÀÊa—º±ãç.´ÿÊ?=ViÙ‰ÊçZ+Ð….µÜ !{º•†õâÔ˜}½ˆ·Oáîi=V ¶}ÆØ±$ø9LŸÒÿþýûƒ˜Ý¦ƒ¸^aôSmïjÇw5Ê,/åò¢½Ÿºí2á;¼ñ(DüÊbsÊõº] ”5B'>MdD>W³Í #Á‡+ÒøŽŒ–!ÃëYm–ôACµ,¥~Ä5@"ù—аÝð鎗µ„Ðõ¾µ35ˆw¬NµDíd$ãOlÅÈzJ!°ˆ ÝÌL«±4ëa YíÄÉíC…ÏÍWëXœÿ>«À%þ„#±R»uF„Væ3¤*“²¬Ûä¢Éé¸.¥çƃè04ÍÚ¶!rš ’±¶WššÍT¢úIœÊ'çÿdè׌?˜XÑ<´ï«àscÐK[.€'ì §ÃnÝŒž°ûãí™Ï&}8D¦Þ„:”úcŽÔ7£#Zwp¥"PkõÑlJ|§N޹~Ž,UÏæÃtŠO… §z!þ˜¨ç[}Òé ÿÞ²™=ë¯y ƒÈƒH©:HŒ´4Ò‰ÎôÖÇ<ܸ˜C bâ2˜Ñ“ è z¡õÄ«C†ïW«gï>ô‰•0ÁUÍ|~~8Yéúï 0ãöëõå!ëhú qÝu®8`½µË:·J^ñ×!áÎàHö&D¥Ð´³c‡TZ¨À@M“t ® Yÿ¡‘ÃnEÙº+K ÛŒ‚\ƒš…ÌM $°"¡Ú82äÂ>ID(-AƒSÙâOû±WÏ·47胪*@_ T” 3SSÓÖF—½#2®°cþC.ºtvkS‡².ýí{›˜XÅ.ie¤«–ný9<çFWsßÐPÔýçþ7K^Wz}€ñí@Ï>hZæea98ÊÍÍ}ŸGÖöÉ’þ}-)ì‚knûk;FŸAö8·ò!&w¦G•çï=nà¿Íÿ,s¢ªF—ÂÁJðÅÅÌ€úÎ-.FŸšš*,.–15•Þm@ï0Àý¿¨H0“ªª„.ºKiÍx#N !À€i=á@øo”pPMÀ(9̬4\8¨4À_::@ÃÜîéÃÓ¡(‚fjª²#†ÚJt²ˆZ.3ÕM¼ïà—c®”‰‰‰=+=¤NÖ€Ýàö¾>̉Ӆ³¥Ø$ûòžžž>_<+KÔ;­\ýë×7u¢ˆñû»^&é:mîvS’|çý«¡x]çjzHyQ Ú4Ê0âÛ¼lå–d9{‚$˜¹ùù Üåä=™Šz2žyÇ9ùØ+Ô ‹¦í—ÝQüûìÜéÀ8ƒ ÙJ±lìwsï`åa;»WÕ55ñ‰‰„~£ÀÍÌò¯î¿‹~¨ð\œ~—› ÏÇÇ2@íúðpsâÏñ2Nßû kŽ5W-lã¹:«a¨2r&Ú¹ÙËdG- Þ›d]S\¬¬MŒÀºÔ`†J)?‘óíŸf:Ý2’Á®SEy¨4$O‰™¢iÊ“7ân’'\/ïŠ~{þxן°%èYMñ!æ1_üö±tIsN³opPÒNá•÷è°¤ž;0\¶vR½»ýÕþ¿ý Œ¸˜ÈÑ'ëY¸Ø­´¿´Ã…¢ÈÈþWÛÖ‰#uÑçm‘I³¹…~˜^Hž²Mì•UWEêȹ£Š(~?Î[X /ϳoˆ,^h Ø:1]”÷Ç®”C~5石Ë-•\(Q=?Ü.·Þj Giå.´ám¡…‘8I²¦”pa—É~§k¦°*f.9UÙR¼Ý;5T!|ÆÜÜÙíIÜÝyÂ* €¸ùì‰ÇõÃર¡Ò ЭOÛ»îînaL’ÓÔZál¹¸‹V™~l.ÐÃqî,ü¤èÆÚZ$oTIvCEÕ^Ì<æJ(¦ŠôæxŸ†˜'Irý9Ѹ+Ôœûßûجš£\‰Øógryp´Óð0!|)—‘¾ûRþŸ ßŒŸ”½r °+µKŠ#ZDÏ/.þ£‚~nkl#ÍåMÂÆÍƒ¾÷V¢úHó^~zLÇã>ŒU€+PºÄß7S¡Hðšt-7Æ›Ìtâ/½TÏÁ媃Õb1•™"Ðuc=p¾JKpþPTVej)ÑWÎ)#âÈ9„ ÞWS%ìÈA–Æx¯š¢a`;ýóÀ ûÃì‘ý™a~98 œbf0˜©çgùÞûˆÆU!]e‚‰Éy¥-(¯(EÝ7Ò/!!‹„UîÆuF9Ò”÷ÙÍ`p0º¥ ÎrÂl¹/ž®Âïéjæ.ð íÑ3@÷æv.^ã æTWÿë{Ù=ßo¹ü''€QƨùÏ脱¨É,Œi’ú!¤¢Æ‘Ò cNBúÛÍ®î|Ö áuùš_x$¤ƒó‘$]«VÁtç+;¤jººV_¥pv×p‘œ½vý•íüéj¤Y!:$^µRL^‹)JÏÞ@,å]±b¨DCŒ{cèXX0<=ª¦d«íÌŠŠŠ:­ý¬;ƒššZ1”-þBœ÷!–0}ûŸ—õ?^U‹7[u.ºá˜¦ËÒFÂ%;Uyîz8Ó‹4ˆ GH$¿Q²ð—  1¢Ò8Yá|,.ÿ`†ºÛÃ+ÑqD-d¦ÞP¥ÑqªÝ/‹ÕJ¥êññ×€1ÍàpxTÇÝV”0+ ~CUW%:¯7¦C]+"#ƒ ³”,OV#À’á7•“K ˆ[/5]åŽI}þÛˆç<\¼¶Ãl?l*õ+ÐDñi*¥ÛUÌ€3zŽìaEEj*—PuµHƒ§Ž*òkê:½èÅ“d#±u²lYYOsÐEù+é鮼›q!áþ@Ukaþmk¯E:«ôQuÊÁKÚ”ž¹¤8Ž•†‡ã9®>˜Ã¾)²û‰°“%XíÿõHs c*lÅž™õx¡þÄè§cþþE|«ICšÕ 0*LľAŸÂNñ>ì¦î5NdhFñ_â\õ¡Ò|·Ý& ˆ2ùXpb@Ýú0Jˆf±3*ÐR®ÞÏND] mv¹Ùù/ã¼KGì—pñnôäRä8I"­_üé||êãG}¯á!W\Rœsçpô¿vrá¨èX[:Ÿõµ dŒ¼ò_¯ÂF{Hâƒþ6’:A9Ù*¨)©Ró²‘Dìμl‹K†4>¹ê 4?B¨^~\=—Iƒß´FtÐlðêÌîùycŸ‰ì€,>ù5à܉bz=sQÏ3â(à‰ð~&êÌŸÀ ˆ òX>?·’¤ããÒÆ&奕íØÙÙýL¡8\6xY‚ÿöˆÐ eéYíÇ=¦·Ý˹™ÙúJLF‡y3æ>D[q•pf(ÎÈ·ú H‚¶«^”˜Ý‡È½RÁœÕÎý«ÑuÖ¯q>©7.û7TخޑÀíÅw—Œ >-¾-ÆÃEZû Gù{­¨”÷Ÿ±÷>ñ­X¶ý4GËØÑõ‚=G~@äÿ•.R¨9É]XnÚIp¸Î#®f‘îÂ{•@ðQÞ‘Tp4¡´º¾?—Å­©scÊ0Ûû!å¾—ÏÝÎ5ñ*ެúd˜¨P-%öW6"pV—+߬î—éàeô¦.E¥¤"¦nl6‡"-ä¢{2[¤Rð·ˆá‰cD÷_ù½z¹9,¹ñiÝ^˜røì“YýD§Øeó +óàéÁ'bò4] ãF|{9V!Ö‹á=iIÕÓ®œÓkƒGqfœ¸Áž¬2*¼Õœ'J§QÑbéé,?"C3ªËÚp¬`€Ÿ#O… «N5'±ë Ýœr¼ Ðzþo$ ­ÞÍËÍ·G!ð&W$3¦¹ïÿ¨±iþ\)ä%bqpP £›˜‚X!ð”JyÞ/Åk#É$vHB.HJ92º [¦Gp úïf‹ÜÈ`4_äΰƒŒ*µ†“o"ŸÀô,ÿ¯BÄ9Ì-$aˆˆ2úêko•~˜È„Dãp¿sý“ÉÈhsbµ¡Â2ü{`z¡Ÿ˜húó©ûÏsL)'æ>Tª••«=z'Àíð a%…¤>¸ÿe1–@ˆvˆî×vä]¸Õ‚»p}"}(6Z¥»¬÷KDÕ{œyFè<ÀC–ÐCÅ4¨žùE(ra ¾°¿8ï> |Ø~ýöÞCã}èÛ×_i)p<ýrùEg YÞ3 ˆàØ^âÒ£Â|fŠÜß·ÒVÄ»¹“sr^ÚnYþ_‰rcƒ¦ÙŽƒ&’ž3ƳË2ÐÈÁÏTüŒÊ,‚çMŽL>Ö)“)pÚ²F4!ß»ŠÕ.èV‘2ÏùMªÐJÔªTz"´_šI–ø­gÞUì­ É^JTãG¨Iü¨Z»ÏwÐh/¼Ö«oËQ¾ ÷ép©Vñ(>Fï%Ca€ñQÚ¥1²'u%5¶·hÇžpË>Q]y–»¶¥J¾WŠšplPÐ ¥ÚOÔ"õPÀÙ;kæ}lÂÛ F`°‡PUíÖƒQï~‡Ã¿þnbAJ÷Ö ï“ÁEƒ¸¿·Ré?8ñnHÔØ ¹€GÝKÕÔÌ3CÑðH%ÓáXy…‚/ï©D <š µOéæ~䛫zË9º–åÓĬ龬q§8­¢DÀÔÄE8–kÎáx5ˆ%>“'@ê¥qy\6²fpÙMå÷«¤,pÕ$o–â_›¿CÁÖð¹rùî¤xUBé¯4AÊPKFÎ6õ³‰¹y^)«W5qûN.…|"a 1°²Z/͆uyOãðçàñý˜陋wWuÈÙŸƒ'áæ{¬Nj\Ôââ”óT©€©ÆÏ¨²Ñms«Îs8¦‡wÁÛ^ ¯|³*³àßÐfrïz~²Ïoõ¥3×J\ÝÅ¥¦† hDùÿñN‡“‹¾¨v•!u8‡¼v`€ 2„D€u¾›T£Ž)B §óQMþK}»Ç+) ¸×ã.8ý£ô¡Ä븟MwÓ¿£3‘6 Å9TCÅugà6žÑÿŽ g…u€AcØPóIÏÈÿÞQ2jÄ}"( +ìý{d…Vÿ*QÒ6ö¼ÌêǤ,Z*F§ýd'!S/êØ&V% rZ@!o’ ªN9““ë“Nñ½Õ©éÊï¯$²íÎÇÞ\jȈ/ºÌù×abHÒªc…Êt—ŠŽªƒ¾¢ü‡{BFcYª>ÝÉvfj}µb}™Ï@Âÿš³å ` ˆ%qdì´_zˆu»pöü=“ù ÒÅ­Ž${–ÌAý}-;ZÖE¬[$*Çaµ©GiõusyZ›6ý'L@b­Ki’/b!ñzü'©¾æ_Á]#/ x½¨!pY¸ðt+ñî[Çíâ¬A2¦N_KÖuö|Õàr‰¬¿ü Pš‡ãç§ãVĤÄÖF'¦x;w_ßW /OØ=ôZwœIœ:´¤8÷x/yV7•úRå4±ðû¢'A<ùj÷îÜMÔ¯J~= ¾ùO8-„údSðÞ¹Ïëv‘¯hA<Ä”d2ñàNõ U%½Ï}[ 㔇9ê2lAß‹¥ÆÊ€ ÌÅ777wzçó§ï¿Ù7™è‡s5(€®u†:ÎrQ¼sBüCFM-êEÀ¨áPʈK$$¤¤ "6­߇k‹¹jz±ìß¡‚ÈC\HQb퉨bÈ]Ëþ“|I«v¯15’,ò8(Ñ9)!%nFé…ðˆ"æ*Yù¸”âÜ>`†u Ó®³ ÷ÆRÇz]#ýŸö’Ÿ8X1ØɼÝ/©8Í~yDÑ÷½"¼>^Š” }Eß* ÛŸÈÇš¯³…µ¤#Ú­‚mv‡ÕŒaÜÝ݆—íÂhÝpW{ލ3g|¨ì˜ɈÓâü5Wh}QòEþ·ìyÍë"#eA ßÑg¨e¤¡,HSŒ‹Ç¶´,Zq©9¼ü×Ȇï}}ØJí6*ö€©]o×ýÇváWdÍ$áÔÔÔl«·€ÛÉ2¥«¼2Ëîœn“KÇœyv4l(KM®’×G¶XMæ¸ .¤Ù0ø½Æä3ÿØúûDZƒéà7ÿByÖ rèF#y×4"vAà~ƒW9œqò±í$Œÿ«2?ÜœôîO•Tù=yÙÌVÂ*:`èŽ*?0t<]ö> ž¸8?«³V¿<^"÷½¿”¨ÐkKO·&}³»{mŽöjæýÎk9[Ï]Œ€ÓÔßÍúkÒ;\[Ñøß5@©œœY‘U÷Ù6²`¸'cxMMMG§—ÁœÚJ³a² }½Ñ,QùfæïóT²„¼òùòé•FÝè¥:x õö ô”Ù£¡ìºM«£ØÀïÓ0ÛHô¡÷dr•"±žC–1{çžb¬DÄ6C‘x¾$O"´¤&ž&pN@¯&%Í”ë2l¬´ûûÏ…€yÁ8ˆ¯s-ÉÄîwéZ®¦µ=v2ÝNW;šì¾dâa"W¹¨Ù,5ŽŠÞPHw¤šg…K!ŽåHìÎÕ0úˆé]Mˆo’#Z `÷‰Àû%›'¿BAÝ nŸüÃÑ?|¬ê°P6è‚'™cO[,ì0qaÏÙ£‡ S/¹·ÇÍ'•ð-÷û%³ÍîöºŒ¦ã®”Ân‡ÐJáÓIÅŸ–ù$œ dlª¨ç§‡Pï_ÇÕ-Ó³ œ_¿‡þ R¨v¸Ñ~…âàI«Ù¥x²žø)áo€ÿ_L,ÍSêvÁE¨çò=ë.2ÙXÚ#‚¦›u«MÐô|ΤKµëGjÙ×b:C±ó Q¥¥¥ûúúÀ'Ë­\&}8˜ÔbÃi|5\—xö=,œO?ÐáÀÜÏö ;ß;¶.gÔ‡¤ßx\`0U×ï®¶¥“m½VÑW»ý\9±X&ûQ•,Á‚/Q¯àRÎp_öÌ? @O (d¨ëy"Õ˜ ÿ­_ñKŸô~ð_lƒÀ=çî1‹ñtÐñ¼ó™µN0å`Ôß“›<û•6.#ÄLR#t¥šH$ƒð¥F»M†ø|V¸éð¼ù¹È#•ò¯‚Ü×ßG’öxF‘û1 JŠÅîº~¤GÂUÞã`}"ˆCÐ1}ˆ¥ê®‹œ«1߸=Û@kŽEqÙGÌp%rØN…’šW^¼¢„ü±ÍÄò±}Ë‚àvÂßÞö”ÔúrÓ­2oMNNl $j4:Ñ;9;s¹ì*éxÕ5Ü®G®]p¥›P €_!¤üûû’à…D{=-’¾ÑP—tìÆZëTò6„#U÷ÅÍ•ý°ç¥ÿ665XQ€ç_oÜÉê,Õ¬Á3ºvG¾¿„kr7¯pErrZ÷#ŸÙ܆7ÏÖãn»CžýÝúÇδB·" ù‘˜ЦUk@nß‚[¿è„1_kIµÑŒv¿•=˜­¸óÝ•Vý çNTð.TÅî,þU@MIQ(‹ ¢Ù•Á©1©^\\|úƒcõ¬—ºw<ïÆš}è+¨i2\²Î_½2íÞ²}¡.4T~;Äér$±[Ъ[j´°_;u²ž×Ûž(Ò ÀGqî7 %žð³eU1g͵5×UiÈž GÛëô?76z®É‰ec§ Øó랬´·GXý:C‘IIÀC cYu›T ºËu›­t“‹á‰õPu<é9MPfÜy±fÛ(™ÞÂM—Ÿ<Ü0në™g8"ÃÞ7žî­€ÀŒËpçËèŸ ÕDF<ʳt]èÅÃà“ÁHwÞèNçj_“z\Öô-ù8H 6D©_<0,^r_‰NdQŸn*ó…”#ÈDR·>ÎW;3`]ï†Þ_[²GG{wÇóèÈõ¼ØÎ·ž–Yiîp§CÍ=oþôMu([.Ëï2_b¯Åà‹êT?ÂXN´8ž$å žàʧnѵ./‹M>Oθ^·¹§*à*ªšÛ`Š™uÙœ¯ÃÀgø MbÓ6*ßh¹€¬<½jØNëú°7#(±ëqÄw¡~¦ÁÂÊ¡ +ÏD”ˆ¯AщڑV¥­þ _«wcÝ"ïöÞû¾ )FÐâƒL.Màp%~½­h9G¿¿: N8S'0¸u0ká·5:öã~^>»ÓàÜé_G\ö y‡·šÿÜ ÛdØÍŽó½_h¿Ãj»Û&Ÿp•V~¿°Ïü^È]ž³=ÂAô˲կLï·Tz:ïÞý,Ñž•ûÛ\~~„¬®p®c!™cP–”èêl•qÃÓõ—å¿7£Ú§d!þƒD«Ãì²Jtä4 N¥¯ˆ‚ –Sø±zûÑ×RòòXzþO®:.ãÒ /Ï’}þª:áãG´Ó!èß`Ö8N5¯ëÃp “Ì1䨵ÐB*Ò_ÔÝQo‰Rõˆ /L>®>ðÇ%Á3„ñŠ…„Ç óù¦ýÅ“Ùý¬z8gÃöüõýÄì¿fíúên7·äë#„ëc¤¶—,Û}r'ç€ë£¹y$ÛyÐÑ< €*-£Í3:%™κ¯®f ’Øp;SSËs-ž<0ª>iÁ÷¿í¤ü ˆ¡“)]¬0åÅ|„üíf«Ä‚ ñ™;[ï›×ãàrû± <lPüÀɘÿùìÒ=Ì‘=T×}Šý–UÏçŽ^[Ï}èÏâ1±~%•¯n\jÿ5êîttãGã·Ö’·œ‚MÞ§»yÐÅÆ¡\ ñ‡¹QNãÌ ?jARûæ½À½ÁÄ`³ÃššùM¸ÊPªh±j‰Å[Ú­ÂÂBhëÍrd²¾ßœJ#Ï("ká¨Ý÷aVëžE~0‰ËÝ9!ûr “¢O¯ýVz ½€Úd6ÊòKà ðV&ˆ¢x‡7Q ø!A$ˆrúF¤k#‡)Â2ÝTýÒ¿í8Ö‰ÐË/²—§.³!’ÃÅÆ •Æ*ã€Tž9 ê¹¶L$R"ª°—|]aþXÿI¦?à/ºá¾"•bý(Û‚¿€8_ígÌî‚ ä•ÿþz"þܽ-%"ð:.óоå ‹l³ÿÖÜÁy»R;úÅÿáq‹ÃƧUŽØ-㸇t}h(zºÜ ¢h ÷£NÄËL«9Ë? +“r¿õ±#Åq#Z`½íáXRU5q/mÊ¥í×%.[>Î@ÖÎÚè["(% ™i‘ŠJK»|o–BÑð<´fw¢xf™ýŒ{*)ÒztÔõúCÈ©< WÏ,= >7LJ|Þüç&N »ÛŒ²h»èöf¼sæ„Îár«¶n\¯g–?…ÿ‘«õiô¨Œ5ÈÖÓú‹¤Ùíèïïd½@+x3»_ Û(g›ØÌ;’ jY„Ì´i¨Ñ¨WiŠáÐK îþxÛkK"ç»2*†A@äÅbÍJudL¶±Ìä'ŠÓ™;wM!R¿“1|üP.»çÃQ½ãŒ®ûÏÚÚI×ÔCþéì(½Eñ*ªSñçø–¾§žhò<Øñ¡ñ\¤êê긄„ ÃÃÃÓªÑIKË·]+©©… |ú‘œ¼€Çl½=õ+J¡?ÜÌL@íôäö üoë1küÅ9iµ%¡,€Òè¡‹ÁËb×H®dÂ5•‡z¿ø`BÊ¡¶ Å„ˆJWIE%(”Ê •Ç|äòk¹³ùêÕŒuý÷ r… –™§§“ºìdXCìîtùÈ» —½H°Ó)%jecy÷½²çú¢¬ ¬¥ëµ‡“ö^÷ßP޶[ø…?¶;Ùþ1¢Þ×]{øR}ðÇ-ø 7z9š5 êöƒÞ'UÞÞO¢^—ÐÇ»‹ñ(ëJË%H\ÀÖÊ’QbvÅhC(k,«ü¯ÊÉ “<”ü’`…~3@¹’»±Š=ß+n…`›ã®é-µë¡"Ï•»a‹õåçui z­^?ý_žV1`§Îj-ÆiŽ7ûâéf›\YÄO%KõZÉf*>x²:½ÙÜAhuíÇêq‹ò|ý|†m_ƒ$ä² Q×÷%4w`‘& ™êß¾Zìn©ö*‹%t$/MÒñðL¼a’ÍJbKB>þ ðpÈÊã¶ÀOÊ¥ÅøT4‘gÁÓô•7•† À÷‘¼:-”û‹`C¥_žŸׂ‰§›Ô³™€Ù­´œ`(ÕªC—Kfïàv³¨že£v¢Y3Û#×o2ÅLD\mŸýÀ ØèÛ™öçàH޶Y.Žo¬RøË.w:}5Tiå zâylâþñÊáÔÂÏrý ¨‡A¶úÕÒš‘}„„¾,QïJ z-Ï÷³•†’e]оø¡ôïC†Ôþ&Žh‘ÄÍ7gc’Øk× ö¿£b‡v´3µ‘ÎÂÿþÝn*OñÊGj¡Å!BH½Hà߀¤jìWÄ¢ÈØ‹Ý×»* ‡¶VÉ 6dV“´g½.«””” \Æ=C)\»ÿ~Ëù«÷¤ÎÅöpçá\ã*4 eßbz%9Rçð ÇAnC?àTå™d„[—7"£`S¹è–{:ìýëjz„3Xâg>²ø–ËD"î'òÇ~%†Ü®áõ#BJãaõàéœyöÚZ(µ[kµžç;ŒÓËýà"¶^„“6 ^«Mö`ÈÑæÙ¾Ó?̶æëz£šÓiÀb»¾•R¿Vœ½wõ¹$ºRa']›Ê;/÷&p1‘u“V¨ x…Šß_¬ {mÓA"àr¼HÚÝÝÂgMDÖXG„•… ¬wR}Ÿ3$@¤ïV%t؈¶©o7qš3…îO'òÏ3…YÔË ø‡Ü8ôIþ*SŒÖŸ³öý+3uñþ…ÕÍp?ü±™ „•@®ö§Ê™ÐŒøÇÙý!¤/ƒærMk#Â']œÏÇMy·½PÍVuªNO(c×íÒ¹W¿õë}ì 9HMW_ñÚ nED.•)â`"ÿ§HPE ²ÚoÙÉl5/Û†¼ixÎ×ãàIýO`s/ ühV4KyÃ߉ûóá48¹$¶øP~ %4 ÷˜ö PWg0Újžõ1\ÞèK`A6òˆøÊÄ'±ââÿä„£#—Ö›½ý™¹ýÈŸ nÿw(ܨºÂñÖBÈOƒ:çÇÖSÚTíõx/u(üªK²+aû “ßé>ĬìÝCýrûá«wʢ︴MãÒ »œÁÆ{ Aèâó‡ÁÑ(žJÏ ³(R†3,9¿Û€²Å‹ävPEÛ<ŸˆS?}²€P‚/”jê5ªºBdë!ĸ•æ£T‹Nƒl…¥¥.C,ìK, J²:(ÐòW©`%ÕDl§Éª N(ˆU¿mÑ•TÚ¼«T ©Ö2ÚÌÄ‚PÞ‚w{­½ÓãKjHͨ˜0lD¬*ôŸ>Aö&cÖXüÇv!·¡`×!ïK&N §4P *»[}Çd¾|:§ëþ×"e¢‰Ã$sÅ2»ƒ"ÑW‹–A34œkØTxîýNvØJT÷rº#&¨<ò¦öìz"(?o^i\ÛYäÖZ2J!ŠE†ô9t¸÷éüÁÎú}ûC-³`׌ÕZÌçŽÿ×  ¼e¸×¢× )Ó°®7Ø@LbCØr4«öŸ¨ÜG¸? _F³>%&U_Å›…i_ùµS;ïŒt78nP\”ë ‰Üè,Ú¥IÍZ+ì6Å„ã3Êt#h°=Òic@z­Ø@m˜þŸí^æa-rz·“m °ÇIëH"¹x–g¼°‹¬Rç Ñø ?rïËÝ€Ü\ZFç‰û¯›·Ž«!äý'æê×GýGš:õnÀªª"7‹Î€+·¦¸x^Æú¿Ï,4¯«·Ã3(¸ŒÜlÄŠ¯/{ŸÔµØÖ2Œ —!A“­°Ñ@ý-žw[ÉéömŽº€ýÔhˆ+k"B}Séˆh©Ùæ±Ñ¢‚¬ˆîHb:wÑŸT—½"¥MŸVâeû¾ƒvQX˜ÒL÷,Û¶s§Õ? ³¼&]øÇ_‰Ùu¶“ÈÜÙ@üä`ÌEö÷Ò´0LXkj’2|Nˆ?®a—çfaùa¬&(‚ˆ3[T¾ü…Ÿ>‚ KbÕ Üæ’ª›!WÈ29N­2žcþŒÌ¦ ¯(Š”áçõÞ>P²îËž(€¼¨®7D8=D³ ÈÆöØ"̱–4l@ýÚxQèÑ%ÀRãéy½úˆAåZIEÛß­dý˜` b¯ÿÄyãRö«–³Áþ×XùvDp#ªK€AU³*ÉLäEÄáÖá(#ÊíUEK¹ì'XÉlFߟ’””ôÏ]¾<‚ÈîhÃø/4|8…ƒ¯>7Kî×sæ¿EÝ›-üJ $ÆW¯_U’ Ñ`CxÞ€(j&é[÷wV^ž1I íÿ®Väô¨Òß]ÿ“Š™DŠ$®aûvD"êÅ+C‘šü›ŒzT0£íóÜøNö½jÀZgÀÉ¢UB“ûILãÂöÝõÂ&¡ `o¡¿>ŽÜ™ ¥ ÛÁÙV r]êoLtë#º)!‰q¶ùŠÈÌÂrÖ+þŒ‹Ï¨Ð\D7Yøâ3 ˜ˆ>¨©ï ˆÏíX.5ñeyímò2MiÔÇD_½èCÅ¥õÛWáW»‰–YA0«1W\ñb‰D+ÄÈWt¿¶HLJZÄMÁÑüSO•Åiæöñ`”¨x:˜Õ¶{Ð D/pnÆ1éÎõK=Ûóî{ßsBMæ¸6>º¹ÛL–ÂG'²Ì_ÕÜW†·¯ý¹r,Ç=GÄÒ¥m„µx¾­œÄrgÑ>Üð}!Þܽ܆:·„B%þt©òu”Òaù1´w lAžàE8•y´û‘DlW;‚D4B›œï.mßLº^'}(õK@¬¸™õ­øÙ·«^¶ó•g?T¾/ðP‰zÜž®ýñܧ%[­Ì0GÊtüû&ÇTÔ_x¦-@u5'³°’Ì(gÅù I‘UU w¨>§pÂ1.Ú% ¬¾óã`žþUšõ,¶£nó£§žÿ’ŸOƒûÉrÃãù`ÂLN“Éÿêw¹Y'7·æiS3n$÷^ÊÖiø€¦øc Ù~¼ûhõ]7C½fð…€,|õŒ-âo#À ½9N£Ú?ò¨nÜ@³Åƒëþú(’MûO{B"’È+93;“¬Á†´ŸiÑïá¨ßRV7×ÒæÕ& 8ÎEf0ÿÕsœÞ´3þ¶ÔœWéÑU”þfmr\¯Ò ÀÔ^‡è jÊÌ©ûÁñÎ/ɉZFN4¯ ÌrøÞ»\‰ÜKí®[.‰b0œÖpˆ†ïÎÌ2‡‰Èx\N£®°M¾BöÛ}–}ñյЀ“v÷‘•<§·»ÜÇ3ÔóuÖæžO öºÍ߀Ú-ÍN‚…ÕÊuÂÿýû2Xä÷Øì™²ó4Ø‚ ¾dÃÃüüxÎíóà —Í,§ÈÓåD–M–ñøU«}¥cÁ у´ ]CÞ x·äÓ5l÷^ô&KËÝØ÷‹l:Btá5UU]&äÿxòÛ~úbÌê@ÆWTZ*°È~ãÜ«QÅ€¦^HJ ÎR*xX¹p{8]7ùìA3ô|X@³T£xÝsñP";Éç‹Óæt5èØë ¤½í¾ý9Çy§ëOY’ ¯¹+¨¼±Ç3ý›j‰\¥Þé‡3ÓZÓñ'ÿ|–¾‰kÒKpƱ¢!þ“~ˆŠÖÓ+§öD,©u$&B;‚>ÚD}“cw©1î9­šú©¾z*‹jÕV¿‡±–Tk§Ã], ¼øì0±Å¬`{Ô”¤Pîwß¿Œp\;eÓTYXˆ*ž-FÉbj}+ìx=Í•þ¼ö—RØ­¶µÍÝÞiÞPºÙíдw$Sø·5¨/ªþs¡Ö0ç"Òušx<]öß®y MÆ;—]™h²­¹-qÎÈóöÓ¿ˆüì¢Vþ­ÀŒówPá8ê{cx (nø•3,^>mµ¡óºÑPÈÅÀú€mÚ¬ ¨àäx¶ê _WHÍHuû󔺾&û!Âì‡ ínÖkœe8ð$9¿Í,äùéÁx©Éµ|ðÖªÿ Ϫ«µ3íš n|+45Ìöû÷oØ¬ì Šù‘´í÷>ûïûÇAËŒ|Gãí{Ë¢gXò …]Ý#Ì>çÒëlJ!·#ܼá‚wWÓK Q=˜ˆ¿„Ñ\¹ñf_¼à®¡Òå½Ü,÷éÞæ9q•Öú24ÛÌΞJ~‚Ój’É ýùkÉPΪj¼d~»¨ MÍñ`ž9þè¢jMILAw‹¬žqZµ•íìéžtÎKä½>Ìý§ÞXÞç9:Ôë 'XMHÛu¡úm¾eÚ©âKýCµízkn:èç%€¨IÖé ¯ænñßDeíÍ“O£±yE€D‹êñxö«–Gù‡°ËYMMÂ$yFg³Ûºÿ«’Æ—Ü’v3H5Pµ[€lîÌ‘ú[Ý(¡ Yy&òxñ͡ŒFpX™œG)ê*Õ¬Qúúõ[q1soË‹¨ *öĵõžè*ŽX¶‹‡yë¢vHÂJx‘/†VéÑp ñÇS…ž"ãGncŽA¹®ìË+,Ô‚gÚ; ’š5fk(Ô—“öÓQG¿k³=›Æ[ÞÕ8«ù§­4ë¾æ2%•ϩĄ>eÍð«ÄĆMnóWi¿]Ké½)ÿ>f.žôC-QÑ $ßÉ(ÙÑúKîÝÌ“Ãnj}¶Ê8…×/‰]w¿H'[ Úþr$bú–²Àh}{ìõÝÕÑB=c½DÉËóSÃFŒ0Et¶¬‚«ñŸ¡tlùùÚJ߉õ} ½[m€µˆŒM-Ëe ‘%üD@ýÞÜÏ!ƒþWû÷–X‡´Uí·ë°³—\u9ÅÅè3:ÎXmçrŠ[°šÙÃI;5à ¥Ò½Œãœ0L6Z¦wwä-ÒÃõ”+F˜Æk8ð/$˜(û)Yå}c7cJ&`–~+rE`PóË«j—ü7-L‘œfŠVÅ„ÕÄüÍÌØÛnJu›‰n–½íᵓ|Û'|¸Ò¾rîUls¢”¼€‡_0@ü?€èá7zc{[o–˜I†rÌÙ:Ë߆W`!~»´Éû‹èqOÑÿïwz9ŽÕÉ*ãŸS¹‘¬§K%B_Qâ-6mn\fþ˜žÌöÓša£1 ®Z}8[…„‚ÝÛ*Z´÷C(ÕF™L tÐ]3Á$bÕˆËéêûŒÁå}m£.I˜ššº;Q€ «ZNäO-Ðëëû^©.­ÂÝ “ÁËœÎÛÊʸ!˜¤xzOÃXwwÐ’ xEñ#¶¶ñ6ѱ¦º«+“ "—’\ûb(…¹Û0_{hÆí‘½$ð} ³€~÷_ µß-Ü`[MËñMAÏzˆ\Ò$çyÀWʾär\—úœ!È%â>‹µ“Ñ©ó<£Ÿ íù-غ Ÿ-îïçD¶0ê¢C'ÖìgÜáÅÝX«·;`D)bÅî™&]ôšÆ‘0ˆX+3×…,pâ’“»5OG„]—àsù'Oü¥¥´Î®fôûâ^313Ÿ=ÞNÀ"‡ŒdâOVò®m§UŒf ‹wW'èŽñbÁHXUfé¶ n—NüBåÓùÊ%³´Ò]RVQ ÚÉòápÏÄl{Éb+”þŬò«ÑËP uEä_†M1Z.¿X•†©Í\ÛŠSž)à!œÔ“ÉiÿéÓ'Ö òÖgÀ1¬ µìoôú»Øè|ˆÜÞs¯<™"ÜE!÷òfiHØ$0³Ê_ÕÔ`èÓ[áÿdÝë:êù|ò‰&ÏßmàÝÌO?¬Íx‡òŠBVÁ˜b^ùëW“½m»å–w°§rÀºis¥÷][Ýýëׯ«@¢×ó8™,a,WsYKþF/dìU)ut·#>7\+¬w±Hù˜ß£‡GêÊß¿ïu» ™Þ¾íäåÌÃ/:Ø  Ž›}¸ >ÐHx×FäƱp¯0ðñ,Ña§´¸Þx͵c&¿È ,m¾h±ÕžîÐC£–—#`'%#i„ƒƒ£·Ò°³Òaíoâ ¦ào/FÇÍEκð=»?žòƒRìvAÇc-xvLj¼•1»t¾|g‰A±ÜWÔõÊ[jPÄaä(ØT]}ñt¢ÍíGo—A~ŒÁA¤<ªb4”_ˆÈIöPº/ § ÀêD³ Žt~wƒúÓM#÷P€[8=N ÔÏ8¦Žjgˆõ@=ÑÎÄ—3¿>®/HvQó¤{l?‹œ¿}ã[ÔrC5Vª OþÁàßþ˜)Àèæ8ÈVï1¿kØ>i bÌò€gQ+«ì¡btgÎúèbW‹KÊê6¯Æ~Ú––§¼K õj“D¹¿I/2×*8ß2…ËY&Š÷Õ¥“d‰Ø‘‹Ó6­Æ;- [Qd­Å´²–£-8+>Ñއ˭ä°/  ªj­ðADŽGu3F?Þ¢6ÍŠx»¯ÖÍì›-¶ç‡ Q(¤m¶íø/¹òÚ$—)ràò„bS÷ë8 àïÉ)ìôÜЖ?=š np1üűî&û À°’«Vmß•(¬ Ót0é§çÅ6ןj?X»b†÷q£ÇŰ€î–øÅçmÜ’HSܶ'¢†[£›¬ÐRÖÕûƒ?cZZ73¸Îö ²×«Ù/x}?+k€ÇÏ·À‘DáÖä†òvìÚÃGçƒK[â>·œå­×Z°LŠIŸÄÁh5äcÃÚwÀSIßus@ꬒØðÑì[»ÛóšIIm"Þîµ\† ‚ÖЀPñŒzð£§ót¾œvº ÿ7ýS¿l$7Ø´HIëÏ&U=ÑOmÂZŽ›kÄb6’±w¯©ë‚[iE¨Ýó.õëWûrÿt”ƒ°eï‰yO»dhןhY‘7 Ô Q/X{W¾bv €3[ìM¨³ÕHP¹ÖŠ`ºë™.ó³VÞ|üf—l:¾šmôDï®´‹Ãj Šë}8 1èx³‚hú~h—û€Í/}à&%:òß/ ·&ŽÂU>ûÇ–œ½õò àbÿÂ*Îñ;ÝÝàt~Øüà‹Qk³{L³2 .žA5Úû «kWYMwñqÊ϶ù Þ'€„QÖdóǶ?S®Üž{ô€Ü2Xà¿1­®†¤Û#+³9Ñ~Ç@ý‡Õ+Ý^/Øë&[ÎxÜè®hTÈêöÄš?°×Ú”-Âúdá `eW€XÉÇ i|ÖœF]¨.ÓXíÏMÁæè©kŠ×í±ÿ¾¬æ§Ïæ‹™šní Ô/õ\ïÒìca”ƒu! 7 øßOddsÔ¤Kݶa牧ÊðKOåò¨¼©îîî&á·!r?Žú@å‰,Ù•oŸ`oÇ+ôÅYuÆjNßíP\Ÿl—àMÊbü±1TÁ$f=U+WadÀ{ëPÿ,†$}7ñy¾Û!áµÀYö{°UÜê‰E»…Dkçó ä•ïtb¥×•Œdèééþ(;Ey¾W_iWxŽH¶ž©>{>i¿Q;~yÆ&ág½ —:ÿíï+•yÓ¤€fŸmt.(pXÊíÛëÍõszºbMÚgœEw¬« gTÌ‚Uv""#á@www»S%ÄM®!vKM?­gÊkðé ‹Š:üŸ/¨mþ°=Î×Zªèsóè?¡7Ü,or$ácÂO `‹õÅ,­ß  À·z3–ÛJYIÀCÀ€¾fzÝ*/¨EÄàÚæ ªr{ÿ(J¾‚iël(5r–'r˜c6 > ¤`½¦jå:¤ O»‹<0,œ.ÓÎd²ðÎZuVÁVÒ €aƒ=}xbbeý–Ë$èvH,*Ñ/~$%­º ¦þÏQ{ßwÃvòËõ­›áö‰õ¯ßþd“c6µHŸTcè\Hã±7 ×µýµ²{È èa£ûË=`)‹& _|^½š ¨UPê ûñkïÅþ¤­3µ†²¢Â½—‰*ËBõ>!æK"mØ$R0á`Án1¤™¥áÞ±ã7“¬¼E¸°I‚Ç20‡Œ÷=.+õîÙ#êWªg¶ÉrÑÍI““²ÙrjÞ›‹Œ›·;RðöíXŸSáV ¨UídrX<tÞÆT°ñ ±šæGÝÇ"•™è |ÉO$¦ÉÖZµ85"Üu4}<§ä&3Úûë#ÑÛXRºNÇÓ½©’Èxõò°­l*7©||:-­—óHÙ° ®[bÂðò4ßû>¬ç¶6hÜë\LNÿ“.RÐǬÊA—‘ÌnÓˆIFñöfÑ¿á *L^Ëï·Y³Íê?~,ÕÉM&ߘeîZ¼³ü>˺3ä•ÌiÚкUŽ«ò_üí E$d'-äÿ÷ï_tù;«7nwöå_ 6§yÉÆw~ºÛÓ¨gPi´’ÍÖ 0±º¸¹\ÿœŠ0úØ+~Lf½•ξypmÛx°¾ÑÝžI¥a\¯‡$7øÜqÃNÚ_ôö›âéºyí¥Ñ;ãnÐPq‚6+ Á2!LîÍÎL|>I5y ø˜.{´ùÓ¡¯݇ËiQ<ž=«6ièhÀ“î³J™ }Oœp§ðÍî'=€ € }îž¹½‡wÞËå”"Ä¥b‹¢æx~œP4*ÊÙd¡ël<Ó<¿AѪGr'ê]krql­;›(èÆì*Rqš™*¢›~|ÿ-r‘„­¦£PÀj¶Xœ–‰®öç»zë#‡M×ýiƒí†pqýVt aä:j?œvqo")ÅŸ)$Uñu–*ÊÔíš~ÒúÞ×^Öéû½=æÍPnúÁ5Õâ_×\|CG;ÁƒÃ!GœƒÇ äð—l©­µ-XdzòŸòÆ¡J݃Âî—qv…ÚPzÚ^–½Õ™²ôÅÕŠ‰pë,¿UAíŸû ù7vêx¸à*¡ö4k öÝŽ?‹Tà°ww?m¶t…/ŸñCŸ˜ˆ_Çí€aú™²Ã\ˆCÇaè¡}§Ñõ3¨PGZzý ¸D J¬/(LF;Zo[XŸÁê®kS:K£Q“/ä˜HDiõb”ò&ËDÿ3¨/ŸÇ‚Bøühþ0ãÇH›Ó ñãâhA½<£"vtI)F¤ÃሬҥHpþãq$„øŸÅ¦ö´áÜýžóæøðBŸöGÚü#ó‘Âð¤„ô (‚M¾'gÐó­ÁoÁÁEËë©Ì!ÿ½°kɧBÐmºøîä(ÆZR_ÃÃÁƒIçr6lZa^èããû]ªI߯žÙ´»¢‚ñ†Óø$œ¸5>MÒsÁ~Ê,ôà÷têA;™}^ÀªIk†&Ûøè£lê܇ÓÖÖ–>ºÚat¿¢\]#½g˜zõ ÛÛz¸>*Ômþã üȧøxhƒãzŒž[Òñµ-WÂX¹Ãqó®gFywíÓÃÉ ®zòéåDŒ}ûã íøË•ºéèÌÁ•ÇÓÕL•Å8ííÃC 9…*:>(P†nà§ØN7z¥Ïuªà[NãÅ*zZû/¾±?lëß]ÏΠßÐrÛé(…‘KµèÍ@?¢¢º ²ý"v²¼– }ì) ±“À é¼xÆ,œöäødF~®în¸±ÅøÔñÍ#È2±D5¶ïÞ T``Ì\±$Qün ™m"œmÓõŒÏÞN7¾9^h¥¦©#~‰.GÜbRö¼Ý„Ìó<>#$†²û>…2¾@Èí³ ©NÌqÓà ±ÊóÕA ¾º'7O·Wûgú±ñ¼€ð¤,TÎ ñ ˆ_â‚Ëá¾» ÷…ó¿O˜e¤ÉkÐ(µç·gwÃÂ÷ÌûîÔF)< :0aÕÝ–Ve¼e¾Î|pnZµ\qù-¶Ã ³0õ+~äb1‹‰²nf`~¤ØË?Nß]÷Úã$C¥ŒñRÄŸÞ4aÄPa e²dËâ4–LuW_ü¿^íz©óŒoÜu- Í´K’˜ mˆ>àÞœ¨?óPáãý–KÎu=˜f¿hÜevlÀÅÉ‹‰åšA}Ìý]ŒYCz{k ®îª8[ZægÞ9…Eîéþ*,"â §*;\A™Z†¡Ý¬Â÷2¤6ãPAþÛítèÅhä “ûË5§ÕÛå$åßL‡*eiBŽšÎÇ…R)Ù‡w0ͳ|…ä$ï0ÅýØ*}qãâBS¸riSmVÎJYÇ÷kåˆÇ-Âú2mòMQ^€‰¡z6S·_Ú òÏr­´]à¯'¼ó´£ÄsFËø„‰^DݪNë‡ä+ ¡cQSǧ¡£w9ÎHu}múdâéjǹœebb2c ÝñRIË7÷Ñ,Ñ*ëvÞ"ÙDN'Kfþv…ÎõÅ×DåÒŒP(;¯ž‘®®LîVn½YI>VnmbÊ^jiÔŠO<¹wuìRÜ‹—Š– 2Ïö%*Q+{_xˆÍ߈t GÓl9«th æt’::›|›£ÂXÕšéNáÿœ*[MŽ/ÝAAzv¶®QJÇrŸxûì]õõgíWwÎÿ;‹¡9¨¯üñQjîßÙ†t»)CBƒ¤å?©Z z'zOO£ÿ[‡ÆqðPÌ»¦ ‡úà“íá”—û«º·oÃډ àÁÅ…ªvà9ìVõ®ïO× ÃéÅß>¼Ù ¥†¸m ß&ü³šUJ¬,èÇå4Ѻ»ßÍ“UPñý0CÍP»Äø4<§%žRMþã¹@D¢\Ò¬(/m·ZQÐK‘Ê@Å[Ý7Ruc®WÅ·.ç.\…–NØ|Lb¯âŒ€kDÆ gù|!€û¾t•ÿÚ ïþÉïY3ó6là{êÛˆ‹(r”Ímævö7R:eéÎû:«F<0鿇……Açë¬ÏkFßç’S40€6qÈ¢g÷^†xì’20ym™0™l?}Uþ*Ó‚#çïÓ)ŒO9¯ÐÕÎl(}ËNDþÜYOOìÌÇiÊVŒ>È©°’sœÂb–sü@GÆ®¼‡Åç¡Lè,ÞÆh5ç{ÎàCç½) ®÷mœI¢&¦áDmÜâı¢×$ì–"·¬Ø íû}FBópLà¥&£Ðó*c§¿›LÁ/W烹×MÙÙ̯¿'7:J~^bdÔènàNÍ$;RT§ Ófq±1ïð9Îÿé@fËȈŀ䟸}ˆô…Ë“ ÇV&íî6zGïVËI_åû õN®£ÝR…k뤴ãe–«jBoU¿L‹Ïf¹%5H˜3ö „Õ9ùKó‹0ˆ»&f«À^MÀí0³ÕÈb‹"ê4ç? QSwØß:ì ‰"T¸¹žÎÎÎ`³ŸÎo;‰³ˆ ÄML̈&[7,<¾yÚ†È][„= çíÙ x¦:”škóEµ$âdâúh*r8íÒÅ`Ž[9\ÃÀ©jÕè»` ‹žAæÂñ”Ü$nœãQšF$¥ R­9=³âûÀ”ó—s¹Æ@µ×ôŒ_ìtß=“ ü]™™!†m½´¿<ÙßÞÞÂV¥|-ðÿ¦³ûŸ]„ª(Æj‹RÖÌEc„ÝÂöÍñ‡mMe›wwµ®èW¿¼¸@@ÆÄ©ùVy^-S!to¢`Cüå;P0Sš »jz÷üz¹®Qh•ðÅ.5  "–æ«ùíš›Õ+þx[l ¼ s¾ÿøÑi†Ï’vàN¨†q$:h4ˆ·¶¶v{»;÷7™9 úosGÛwѾí™ìvauˆéw®Õ„1›`K ¹ÑZE¥›¡êùIÚUЉ`Ï­ñf‡«âóƒK¯³§óÛ\Ž`âH-b@ÿ)ÇW[ÇgdD•ë6“SxŠ0€ôØYä2¸ôš‰úúÜxó¦"ÎK#£uªÝŽ ºC·‡âY°äF.*À7Çë?Bÿ¥ÝBf…ׇœÚ ·sÚ_ìxâ^KÆ¥¤„¥ì‹IQý7f9öˆlqlV­7#Ã>qM¹§ÊÂ9´î®ïÞA'‹ AØðŠ âüÕÙeÚje]7¥QDl ] ×õ/ëÿ œZ“ºØXìç« ÃŽ@¤S÷i$O À%XéêPô€â4)Y™ñ~˳ÁûÝ,ë›Týúæš#/ê“ÉúZg*M/bhŠ*J –Ó@Áâä$Wôõ v•3¹ãEkOUµ’s>%2ß^N(rÙ- º"ÐUtó']k9ºFˆcËINbàï¦g Ttü³¨£ÌwtPqtá%-mô.ÇV`â‡Õ‘» pè«u¦‚Ï©7€A ŸÕ¸2ª©Æjéò`{ X&þ”Dq ¢«è®OÈgÿ ´‹¼Š™™,$e ±ê0!‹«Ÿ)Eô¹/:g·äVÈÄCúá…ç ÅR=¶$·¶…ã¦[* ^Ú÷™ ?d‰û÷Î6*HE½xçÒGÔö‹ ˆOqádY 6d”Z¹y°¹×ߨÿð¥óò>øé2|ò¿“_œ\ª¹xÞÇ8ïÄX óÙeܶ~ƒƒöŰí`€ÄŸ™ý‹‹·µµÁ—ùÅŸSzUÀ(õìZ¤°SìÃÉ"WbA©ÖõýpÓ“tªÜ ãyÐîÈÏŠõ€×’Rp¯ùÌÈwõÄiÜöý«]A:A3ÂcÎág=üû¥ÕËõÍ›7]a¸ûÈ@þüé'wNæÁ[µð”¨\ä§:‚.xõ2¿­QOƒ|JKm”A=ã@ÕÀÉ%5<Ÿ‡5kµjñ:|¿Ócy»#ìVz1pOûq¹R|è+ÊJ@LÕÚÌ}YZm côÍ* †ˆh(&²¬ú2Aî„(‘ßÐîO ²W ¦&Ò#C ï÷©äFÒkvƒã·¢zMK ëMúÌcnn®wêéAEûúŨø‡OŸÐÑ™ÇÇ¿¾F*ÕeÉ÷ ç-Œ úì(ã¿!Óxð^²ûðóÑü~×ïÉ2íÜ?=ÃéY㜆ÿ;C¢7kâDáWïYùžÜÏL\¼ P€Òhvc[ö:`3‘;tö×›œ<™ü˜‘î~)díÕtÄë”Þ[¼Ý»<]¨ŒHkØùÚ³Qÿgüÿßà AÙ 6ÿ ¬UÇc¯šæ‡{ëñŽ“ôd|ðT¾_K„'bÃÊ~ÕJÐldF>?N‹D™´Ñ h‹à»°/á úšð¹b³R²hä<™è¿?%C9]v•Š^Ä¥¥¡AFÌ:Ãò¦ï܆î/÷#9ÚÂÔõ<·°ƒü-§ŠU;a瑚ÝO>uOf´B®µeYÉO9v;õ>•hìhÿ•q†;Bù(ÏÀµô²WèCX¿ÃB½ý‡v¿§Œg͵"}@Lc›¡cÕ¥,ØŠ ¿–i^ìŒö:R ‚¢›OòHIÄîâ„è꟫®6`ŸñëK!hMR+é¶®h ihhøÔëúØ0[{ýãXU²#ÕnGøJßGÙSÔEÐû0_ﮇ"öi¯Ð¤›ù[Œì§OFúN€G¡úœn]WØz ˜×ïZ»“Eøn'ËÑÉz^hÈýß-@D³mÂ¥rÉмdü6aUƽŸZ³ô*zK*Ú"@‹2)½ç ÷@Ä×¶Vïî—‚¥æ­rëñ÷‡íaáÊŒì¿ËuñÄd½·àõØN5‡=ÎáÛ·o€œˆÇú IQèxÇ·ÂÑÎzqòôøxúOŽÃp¥Íw÷ßïÈɇí­p+sõb÷¯#Z3mÄzû.’á……LQT¢M‹½¦'Üz”û=1„„»åëFÀX 8˜IÔßÙ@À¤Ø}tj9œ¿©4 >gÐ244¼ÝLP„õZÔ=îÒïl¸ÿD™Ðo³¹x÷³Æ\»Uµýåù¡ÊíHËçv-´ðËïˆÉ‡—Ç‹¥y¸àà/ÉÌ^GÕ¼v‹$Ãi|%§bç}t[Ǥs_žc&lˆÌgÓùøm‹4¨¶v²Øu¥PÄSË#a6g;_HœŽGð„†6ÌšÆo‘)ì^ÌÓü ùxôhÑþ„Ó…æ™í Xß0ìÁø Ÿãš¼¹ÈºGŽ»#¥¥y½™ØÙÛO¼eÃ|5/!!˜sçÔØß‘p…êUwŸ{® •†ëǪ–(‚Š?âh„n}¯]9y¹)HÏd+6(½Á&ãEÕ®·“.Óª›Äˆ5ÜìÔñpÂ/팪_¶ÄÅá´Üm§ÏV£¤½L[ƒ‹¢0«”­Ž´Gš¹¹y›@ `ÝoéQ0ÕãÈi¥1ñN4òÀN?Ý ¶_ÇPB°Ã(O¸ÝÛÙÅõm¢(„¾Þýxº½ ï²<5àz:ùÜþHë>/]1c È%‡×Ú·ßåŒàW;.ÑñAgœ"E·®°Oq²]øc¸=”ŠŠŽþ=bïÑSùãéÅ(‹(©þŽãÍD>ë¢wÏy(T9‹7lEaa8ÖA(ÕÙG©©F½Þ€8ž«IÄœÆÊxGGvÞòÒ¶èÊgí—¨1^•nÜ Q-ù!Õ•Æg ð|Êô°P„¨ˆ«÷sƒ-½Z©ÅîL‚­Pˆ"ø&éå˜ù)õôàq ‘¢)G‚¤¥¥ïn&Z}qxɸøž†xÀùç'w;FB>=˜'ñ„%ê‘ó¨xwô xÎ(jìo¡%øÉ_º»¡ÓeNl>°{üõëËþäÇ¥Õ0æp˜ Ðm„/û§õ äÃâ¡Ç&$Dƒ‚DÇß›ºÞOB•6©>Gs²’o!!ŸZý=áþª©että¾ÃWU36Ÿ_t›5Òµ/ñ ·ºZбÍqcóÙ!`Y‰@àcSð Úr¥×ÕéÜ(ªê ZR­O–‹‡›,ÎíqþfìgPÊy’¥çAD۲ŒÖ×îåúòÝUõö6!ÇþÍ!%ÝÆÜÿœ–}û?0åÚ†ð«?}Lì´AP›òSV0š¿ÿËŠ5JŸ‚ÿr#¼ZYõ’Ôï-QMMÍ/'šY--"I<Œö% qÙÙ ÞOÙ ~•ÎÔ®œ‰–w•汋uå9ÿSÃG©rB·Ñ¤²voUjÏæ£^¡¦×ÏÅÀ€ Ä»_Q䧃”p·t\_s£Å çuL—Áv˜pHIߺm BC©#Dá·Ž.9ì'tÓ¤-7"˜O\kµ¸ ,ÊÍÒO¦åý˜þÑ+Ó˜ß:ŒkŽP.¶ a’Ð𠚣bà[?-5½«Ïà ¹väZÛÍ;¥èØXX“è‘Óý·ÃQ±Ñ©¿ˆPüÔáÓwŽïï¹ÛPrâw‘-¢eò:ŒcEÕÖæá²ýÙ“Øun76¶–‚ÍMLV›>k6:=*) xùû7J ô~À´I`€ã³êë­rÌ›…k÷ª{¬‹qY…0}¯u.Xt•O {óÑé Œùß?)ŽÈ‰‚D}«I¦Rýö¶Eù<©ò4Ê?ý&D[¤üN>$¤Óú VpøØ˜ÒÙßà˜ç²‘p鲚 (uù÷òîõëu»ÖÞXê ©Ú¿ýN׊߂U¯ró¤'ÒÄ|7g–^óÿ»:±o}¬âùñãâh©ùñïgÓ·{«7·ç˜¦ž[ w*jm\&âЃ•öÁÚ¸}Á@ΫÉAr+MS1ñ‹„ÔÔ±¢Þ×°ÌÇÄüÑtýèÉEîp[™’ÆG±šð;¶›+ç&:??‡= ‡›ºäók25—²tÒ8›ZT𢮀%üPjÞ£`Zšßáî²n†A\8#󧯗Ö+z­³?˜5O’-×´ (aÏo@@yõU@Å~5€™ûIÿïÍØëqz%$ú:„WT"LºÕâÔ² DîVêåa|×Õâ~É„?Àì£Y¢Þq*#ÇÞ_°°‰Ó—B°Nô³Ó1>g¢‹ÜÒ(0KÚ,1ç?š¬Á»ÞÉ|R?ªED9ÕéDo«à“×ånü¡hÉOñ ˜ îYA8ôWì7\òʸ¦ÄÎôÝ]]ýßéowób•$çù{Ѳ§U3Õè¼£fÑ©¨¦F¤V®£y¼qͺµ\š*È=›üX§ïKŽ*ŸéeoH[GHæÔ„2è*pyEHÑýDM³¯Èªùåúù{õÚSÝF§ßKVò8ðiÓº^q@{ð s+Ôî Ÿ+ïW³ãVã4¼¯öƒh üxûźȬFÐLm9¤ŸQÁsúŠ-ù¤D¬`™wÁûÖ3DÒV‡o™d1#òdàª7>)Çk¼ ‹FЬª,qÞéú¯$>eX¨§ks­ÊÁOºâÏÁÿðöè`¥Ë%Í×ZŽYð*¼Üm'/kö"B;o3á¢5‚Ù´ioªzKÛBNfô%Or’\©úþýû˜LõhI]öÉÝÅΠєµä’Ù¥?}úÔ[oË‚ŸšŒ1Ï&”1Yèz¹¥Ë %19úм†ýiànà¸"*–8šŽv2\Næ#ÆÊpzbýi™~»¬£5”Ú6GÀ…ž=]k—Äÿ± ZrU²8J²Q³å1ð„±zW—ÔP¦0ñšÈž—ìì¦ý…’E½ü[ÿÀÏ㌠ŠÇ‹ì—®ù:ëA_ƒœYHCD-)•¸žÍCþÈ·G òRͺÞý#D„=Ñ % $$Lf|:?A¿÷¬EVp íÛ·hXd¼Jœ´ŒÆð«†˜bµ|[Vë›[:‚ÊÄ8 .Ìš»}Ý›‡dl±‹1uÞxX"‹ºÑzW8 ÷Þ[Y1ƒ &Ükç[ƒ0ë ;jYâþ +ÏlÚF½YByª•E6Y¹ØW­šsÈY¬j©öy`Ë y»ñü ýXÎm§×Êü.8šëçÄìq#>§(¨qK¿?nšeèx^ÎVmd…o’Ô›Š£Bª´$Ìr ½é| ×’·ÁëQð3.îØRKxJƒ`‰yÃ÷£÷ÊïÊ)×N×:SÄ|…üÏ>4·šõ •‰_ßÍâ‰ñ^i€³YP«Š 744Š…v…;uG™U¼Ì[;‘cÖiåÈŸÑ7GýL2îí:ûø»—€Ž–¶Òaí½ÈíjÐ>²L1—Æ!·¨•£$¯ãù»¡/–y.èyFúŽ`¦e£º§is¡p†ºÒ4Rw#aªÍ×ö”:³¡Ê…¥”Þœç§Lž[ðT±–ï*¸*A¯çhÁ]7[¼â0­–wuüƒô;ýÔqÞ¯—b»ÓÃ|È/ëFñ‚ýµ§ÑÑÑÒ_¾à¡øŸ3³Ÿn|º6:xôn=_|-Y*&n0HT žù¶ˆ2îû÷@;€-.[jq)÷3>æá:ŠÜèt_¿†íÕØ—@ÆÖ:ò²7×ÐxíXó<¥ª¹ZÇÐ'×6<†uÌþ²2˜Ã“ò]tpLµ² óûëà¹9~]+fŸöÇìUªj€æ;=ë¥6îŽ ,ÔkmÚ?™)Œoxp'¤ƒËq¥áy/îŹÔ0„ßVªdùßP»ëéÁ?i^£/S€Ý„ŽŠÖŸfr#o§£ˆÿÖÍ AŒ‹ “ÕÜy–x:|Ü͘¤ZšìçRëÉfwûÃ¥fb@ÇB~³m»îƒbE·É&æ’Òøðkà¾32ÀgA)f$öîت˜¤ °+wã‚àÚw~ûo•‰¡s”Ÿ(„bX˜EË”`õÕÅ\@Žýj Àmä$~ sf¯g{cÈÝÑû ঒Ëý)e^y¶#­¥åS¨¹bGGGÊ;g—CêäÉ¿ ÷ö–sX«??éÃö>j+£Öªú+LåVP ¢Þ›åös_\X+ˆƒò‰"ÊùžŽæë:Îorµv ¢+p^uF”Ëk…ìé#EåÎd®â-÷cLãDæ-½‚Fg”çê¼oA°oÔþcÓ¬$\›ß-Ux¯_CwÇ \·:Úk½®ºÐ‚_Qnš³°ë€J‰Ÿôõ úp Æhf˜v0œº“ú¯¤ 0ôs›S@¨+¡ebvÏ/­Tž±bVWó9ª%ÌdIûµZl°Æ*ÉÐW†»c? ½¢¡`®Ó™ ûU ¨ˆÊO#ƒH©¤_ásTÃý²NæLEØÅN·Wû?¢6XÍã¤õ†ÓûÚæÏ)ý=0•†ÀTVþóŸšæ†¬í*§#…d°13£ÃÚn`^TßéÍh?næ~÷É’r4Ùú¬~¶Øu«¤ý„ÌâøøkïáNõœ`ûh2¾¸¸8ˆagHàîÒX¡}f¸õ{r½‹µæe ‹å¸Yû»=<¸H­¤ÕURÑ´¨©v9œÅíïïOá6 ŽœuZG¬tø)ˆ·3¬U6›rs9‘(Þ¶»Ã¨@ø¹!Ô$ttÈÕÁ–Ö­ÛÁ4ðB‹ãOÄRì…žŠºaÎ/Ôú¶úù¦”–^ @3ÃñËÄÊÛàÖ*Z·/›@Ÿnïï×'ëýmó}û-G\d}qÙ4qLÒÙ»¬. Ã!GDyE€ÐX:_']²n6|H­-½«£gˆ–ÞýÖ¾ þïÞÓ÷Xo[sßP·÷‚ׄÜaalülDK«çÕÏö*T)x5]ªÔIœØ÷£Dí‡z8Oï–Öœþé[¿ª¬íV:K°Ç¬‰wðôI€  i­[¼ ö¹†ÂÌŸ6ÑR@ Ây¸Ï?ªe_É Næ"Çl¸¸œàÏ&B]¸ÖùSE˶ “„úŠò{9¥7œ¾?[’B¶˜ ®3AQäuš¦JkÓË)ÂñŸÓ¥Úžxjz¢6 °žî¯T„ E„ßQ‰a. §o‰Ù¡cIKÌ”Gè±<ô3*Œ?݈8!Žc‹GA±È» jÉQÑÐ:†Ryª|Üj-ÆßïÏ—²t"i)¯PòY½á¿Ð¤Ó6T’olÌÅÿùce¹Õ¶un³&÷ $@l‘gk¯·Òfšõ‘ uwaˆŽ^}÷Õ֌᯾é¸ï=ôdU´âÞÈØ¸Êth(… AýYXNØŸ V$^•¨×Dj -³GP/Úw?JK9Ùc4Ùsz‡¾ÞžŽÔr—ôõMûà¾rùWùOîW̶.‡ƒ¾›¸E)‘VÓR÷Â'9ΣáÕŽü·{r*5yI^Á¦ôpÝuÊUˆv°v¦ ˜NYYY%[åxYÐH2&¶ %x4<]ÀòCLÌ~¶JÒÓrýôÔU£rõf8«üòâcL¯¿ÿ;öS:EB—·¼jbo£U‹iÚ%Qöf†f°-/vä2_¸Ohõ| §66pù‘}b)ïj\ÆÇÇSì©`çÞ|8Ÿüjpç¤,L# þt44m̓Pl›Kùnu¥T“à_Éû_(¸hŸA‹?øE)%²ý¬®Þ·¢êñAý «] 2ë—\ÂD¬Ð(BÉóêAõ>`»¥z—kÁß¡ “¦¾ת nÐ@¤\ÒèÈaþ çi<°Q¥ÓïY‡¢ÉÕŽ ø¸8šÌÜq]àm¾Žd¿7Þšž(¡kþž9âôpÓý ‘`¦\÷ç«z9G?ÞWßC®I‹e Õ,/t‰uIÿ3£ßë_‚²³©a½€àÏqÞù2³½nÆË¢¯vm,”É2êÓÊËQýŠc@¦ˆû‹=êþÆæŠO_§¹›ðÒ: “•(öSŠôñ1?©êpý¾\õå@—©JÍîヶÊÏï=ïź¸6þ_/@~ Ÿ]ÔßY >{v?Û1èžðøþtY$Ÿõ4Íë×pö­WDÿþý#иÍu/üf•Oð|+Q#.ùHšš˜¼!bÓúöŠPcš6WÜÞ ƒ’?þöd¥µN›¡Œh.qáèiHBB6[»1V,¢Òÿ ClgDõž¯Îýz“n¿ú0,Ðþ’Ye¥Jà²ÿí1†2~¥U8JµDíÞ—ù}Þ8¬õÖ`¸ì}" ëhd–áJô}« ^ýÄøOÇ9§AÃæRØOçŽÏváO7¬¶Xá>‹æfóUöÎH=HÀ¤DX_¯ÞŽéËÏ:]¿›ã†¬Œ¨KÿrB²¿v‹8SÈúžHÀrS6}ô¸ed”Üøõ„ðóçOmÂÎFôð{Ñk ôá`…L—#qó¨¢+}gý*ˆüÞÆôÒOë¸~õüŸ›Þ}¹¿+Œq2_¼‚Û‹ã1B,÷}~÷o{XÒp0i¿%võÅ÷AÉôß›.—]š}JÁ·é±‘‘0veQ^½ÍÔçéŸãù¯*ÿ2ùÕtôæêª{Á¾=z®Æ¼óƒ%í—(4H: /j…pˆfÊ£}‚_˜;m8iÜûp~Ù-„>þbÖ˜³èë7éä´ˆ°·*8¢œ˜ŒŠÅçTv¯¼`gµnN’Ùy´5˜>Íظ©Õ˜>iÝ–ë²ðfVnõrµ™¯E‹n’ÀÅÅi™]ˆê˜YÓ-ʇ¢-³¹R•åWû U¹ß ¥›6CÜÇå·,†·×ÚRâ稰ÜÕúixÌ—Õíi'v•Q7údÜ¢‰çS“³5Š 1rNø‡r’åÚÂOIXž6™ðÄ—øê5 1€ìº¦è\ÌZ©ÞI†rÒFÞÀ•¬÷‹¯Îݵöâã­±‰bFX®Lôá >üL™äç™rT½?C–^€9{z¸1†™³‰ ³šBÊJ‹øÛ©x Q‡¢J›Ô´Âo2y·gUfÃd{ÇÑRobÑ äh³mKûwºÍ7i©3ÌÄÅ7Ý"üÈË ~­îÇÓÉúßè.’¾Ã Æ¡Ñ5èûÎ/Lnhß¾J¸bž=÷ÖêÝóó3 lÝgømçeu½wbRÐ4¿x¦/ 8mbBNÕµˆ_srâDsôtñ³bó÷mg6¯Àzöw£«3Æå§£R5¬w!¯Íg9AüJ1ó¨ÃùÌÞØÎ›SÃ]ÿ'Õ{W_vðäîxßÁ )T£µ©U²¾èc€Éà÷ïáŸÏbýiDEuÏê’9"‰(…@KMUõ“¶ÃHA h³íúå‘+°“>°n@¢$bCÂ60!é§p÷ƒÉƒ¾‹€ÿlYn¥$V¢OÅB&øc lÜCó´äîxÉáûòžç%˜*a|òzîïÛ›ÃïKü}èðñ„‚m´Ù?&•/“GÂIÌÏ®£Ä!SgrrîÿÚÑn>šk†Gñ§e4€_ex´Y|Úq?Ú?×½µyÛv"f¢˜u€òjuºÚô}ß»w0Tþz°ò’/C@D;e»Ñý/HËK负ѨÞG-éÉXÅyužÏ±KÑ2Ñáj -ü†‘Ѹ'ŠôÿWñµF)äCø_)Éï—”†  ¢-'ò%ÐEÃÂ[üïa‡lý{ÂEhÓõä¸BÑäçÁœ¹ãÑØkÇ&‰m¢)¢¤&‰ÓB…¢¿*_„ `fãy¡“uww`§ê†’6§n±³Yod¨ ^ïÞúSÛùÚ·°åUþªPUBj¸„ÞŸo™˜nÎÕÊ Ð±Ý ¤bL£bdî[<ª,ñÑ©=ÀûZ0a6ž2ì<ü×™Ck5U XaµB7hµ‘ÀÓõÑúg_ÓYgdaòÛ]ºÆ«g؃+ÑÐÐ UK’Î#ÃdùfƒœÄÓ©QsX¬,KÄ ªKèP|q?÷ÎqJKÉêx_2å>\KÏ–jª-0•©WèÁú¨³03 n…j4]F´*êùN9r‹þ“$§gó!fÕ€€ú·(h¿`ÇÂÍhÊNýÆäǃ<6žyý§ygŒ›(Àþk6*3v!7d‰ÛâÁõXo' ¤lƒžèüýý?g ÂÎ]æË§‡œ´=(œÕÍÍåºAÏ6À/Ï›~ï!Ð×_Á'ƒ1Æ«Œ?œÜQѬݤPŒ€4º¿|™(ôW*4\øƒÑ#ò·3^ÌüÕÛ÷ñ&bOS%ai‚¸ÊŠb–­eÕ°îê’j¹YöFMÖiktA»õVý–‚ˆšÀE$³Mª¬ÒL”Æ€Z$! ë•=ã¤Ü6#²wÊ¿¡A"'ÌÌÞ»oÈ4ÆóY€Ð]o–¤%þ4$ýø¶PÑþªfÓÎû¥Õw¢„ø=›Ó§kßçáÞ¾}KÂmöõ’KbÕÃ|¼L¨¶fBˆK};ý@ÏÀÂé´)û†áÓ‰' m/à6Ö}F²ëït›YZ©4Ööþµâðzz¢¦ó pµzuœ´¿¨¾äææÂޝ•j׿º:˜InâgÂ5T7àöõW=ëh£5ïz·Zõ÷>"u@`ÇQõh×Íu@ fSû×Þ{(!¿Šèº"ÍË‹çwg·+×XOãû]>¥ßô­Žónⲑ†Â"@NÁÝž¯‰®¯¯_dí+aƒ'âÓðXä§Í“óÛü?Ò³®úÿz¹î¨&Ÿ.Hè5©Ò"E&E:„¦HéEªô¤Š†"ETP¤*Ò”"€(•ª‘Þ›ôÙ7¿oÿüv÷ìÙs6çäŸLÞ™ûν÷¹Ï™;BP,ŽS–¸]üMœ^ $óªïÃAPÌ3lÝÕêÍ©”÷î‰VË⿼µïÁ﵄éìÔº ¿ÇnH"÷\Þ¾}«[ð|ð{«âìú¨ªJu0yá£B§*Û¢4¢¢”ˆÎdQe­÷U1Ð éüº62ò^EÜFk“s~p6z7@Yýôi¯@Uxñ<5}tôŽb”e eU¥]«,Ñí—¾gó j¯ÿ©¼«µk׺UÅUèBÎ+vÇÖËg¦¼$“_ç:'Ë8YyO¢+zÊ„(´æó“×±½O7¼†álW(„ ‚VŒw{¡7œH\§LÕˆwÉ?}¿»Ð{{”^âel º£14¶ªõô—™dda0™Hˆµ&ný¯¾²t |QDòöb©ýÌÆ²Üä8iéK¸h Õö¦S›€v°“TŽ„oÙzPÓ˜'ˆ"® H:“ïe{!fsË΀¡MëáªÁWü:ª{WÖ•'<|ò)5nx —>ÈöõØ-?¤ixS Ý¢rª°?³¸å~!ï1ýuë;¾â+ýš ÑçŒ99”wìóo¿¨±ªsÓÕ×'ÞÀ(€<ØÇ#g‡ø6#ô["·ˆÅT·ÇxáØÏ€î¿ÿ1ñ ÎÅ–´"ä=JmôÓéáôÓÅíœîê :Nàžõ>)¨»öP×W\–ŽˆÊQbœ‘÷Ÿ=ÒåFšYw–*¨r÷½eÜÐÐзv6¨ ´gp“«öª~g˜"C:üC°¨Òfž"åŸ$ÃÝŠp ð¿U)£qc‹¢ óÊ{[“Í– žÏ5_m<|øxï±¼Ôæ„ Iy!ÐzÓ »mcñ «oûsÿ¢ã4úýV/Ñ^“°QCiÕÂLìRÛö2Ü>’ˆ4šoêu|¯ë¯ï%–…˜‹¶ý,3æ÷žéàˆ¾ÙÒaF°Š›¢T±kibµå…vж3ÁìÒ™Læ°Ã%%|S7OxÒ9ªlø÷–²Í ÉñxüN6OFìt§‹b÷‡x3 @£R®Öq¨ Äê^;¢bžû‚¼ …•‹íÉ㟙祪sº0ì*¶VOeEiâre“\ ïp"^üe7êûÏÊ_H ‹˜†‹‹K‰ýíÒŸÄÓDãíÄlŠo’¯L?{°›˜ßåîÁè¾m?—51t‚C‘w€0C3!Íø³U.Þ¢æÑ»àçÜŠë3hUâîÙÕüðbÃÌÌLË:7: 0\-D¡&i9³gʳF{ϳ²¸˜“Ž…=¦8°>š¸× ¡·! áYáy¿ÍÃiØ¢³Ún¨äŪëžbè—ªD§TÔ‡ Ø°¥ååù…tÕž¡"Íñ¯éJ\Åˆ×øOﯨ'üM”ùv23Å¿¾8¯R¹ÞMÎfl„0rF²Í?|zhñÛ•5-NàÚÞ' Æ{ºù3ÙÅbI$ð; ·âHIHHˆåö?º 0)Dfge¨ìÚžb YѶC*óɺ#ÓÙ£㇥_“vŸÿ6×ÝÔàHBýç“yTóź¹§,-IäQ›)M<|ðM|¤¸çI€ûªQåà.С1„Ö8¼ä‡Š †]ž õ–dE¨g`ôðà'åé`ŒYZFºéÛJC+Àaµ}Ñx©²µd>i¥\f†ö}ó›áÆÂ`+»½Ïí¥ø¢Æ®!:pš4Œ™ÇÄgR‡‡1Q¸û¹ƒ4‘g>Ay^xe]Wl½BPÆÅr®„¨R(k½¸"¼¹9!¢£ƒ˜ŽR¿¾¨evæzO×s=7銶=êxY¿P}#3¾qç^øáOC§÷ÖæÃûçô<Ú |š"Q-±¨2AЖvMorß±Öx”N›NØc…ÔØoæ4•iPÏÏûûœ…NèMùEE㨆ùu¬Åhµo!0œ™m«ìˆ{íTÕ€·ö—Bê¥4ÉóäïFKÄHßâËÈD ï?·GÀ ÕÂ6^|Ë„f·dÞ-F‡½á UåðBzn~u ™™±›ƒÃä+UžF‡(ccÎ{4¬_ôÕ¬_‹ùá†_ O\UJµ½©Æ¶èëj‡@‚E(ÒÑѺôn˜wÿ+kÀ~ƒãÑqãipÁþ T9J>Œ*Óà©ù@nZmàMºHDõÖ˜˜—*·SÐr™…_¾ÈõFÕ "ß–ƒA™KÁò­šˆ§9ókÕ`ŠPöíÏKQä׊ìè{8ô5ÅØÃxòáɇï"ãLåXÑ›|Žò‘,Ãot4só6c1¨ÉÇòÙ` ÃÂQ¸ÏØ5cqK¾î¾,»HÝ [ÁÆf®m<Õ¢k×Ê¢Mvˆ£+5ä÷".#;I*Ê×x£Þã@H®¯sú´Š2ߺÒÜŒz­Âe »ªÑ+ì’mf†î°¤72ÂÀxš fáüð0âîß$»¤Æ®sRì3æ/Jx üñ¦©¤TEY19ÝtyüQgÜÄ'¢Q ´[ÄmTJwCžbæLsݼW°œ_ñz–!hù‰EÌ6eêþq0=%·¡GŠ&­)Û­ ÓXODÈu.9É‘j§ÕÃ:ÿn¤xåʉn)é.R°´ßè8]μP ßqLC–ø“wfÝoÀà÷ ”ùH´B6D:ôØY&{wû{4Àu ,`•xçoȸTÎ9þ½Š¡©Ql™{ÁR. ]7bäL©ÔÓÃà~0›¿ƒrô)­¨oD¨1*Ò´<‹—õñšÓÈ ¹Y9¸zên†\»Û[€*£Õµ=dXók‹ã¼ýBè¾…Fؾ`E^ª¸7-qpPµ’¯³9þá´$‰<†‡Oݤ@ [¨b³û6GiîfeebÛ[…\ίW¨0Â/N W¥¤Ì’Ó\\ÒÙùÝB¼) ”s—â“Vr@á|ÎfÌ&Ù×uþ¼·’ ƒu˜Z¢2\¿½¹Íú°ý˜Fš!ùà&µõ§zÜe –tr¦a ’ ºZÔÎQ»Ö ¿€‘."]±ùº¡¢ñ%•}§9X¯„·¥.ÁWÜ– b£+d>ä€7p1_‚6ƒAöÕMb¶hnöŸïÆ'­|õ²²¯ÊRýMZ•tfü)'£¥%¢ukI¸ÚÜ8ìÅe¥j?³œÍ‰EaÄ$HxlýGlÇÛ9‘S-}~²Ý„ýAãõ҇(%8áHîäÁ>Ýí‘›F¾éÜMÒ£+¿Óý®œp@¶pvUÖºç«ü“¶õ”=ž£"ÄõÕ˜=ª :ÎGgó Æ®ëf·oÕ²²ÝW<úLz6jl¦~ ‹hÌŽUѧ¢P¶ì@÷æ¡Z<ØLTàõ’ëÞ_5<Õ’Xx¸a2"ðËsŠcØP%iÖP%nîl{¼Á€¬GÄÄîœá6ZcÊ•…ú¯ÿ™E,Û,MÍ)g1 é³{©Où§}ÎMgÑl(º·IBmÝ#U{þf®ªÂ}º»«³ç$戼¥Õyq>P®ê'óy¥´`vÿ§!¥þ- yóhfcD+*dË»Î3¿uW9” °èã³m¹gü8– 4þdÜQͷƸó}AXšÀ xú瘶×Ö¶-œrŒõ÷aŒßdþÒ“ìRèu—¹ÞƒÄl¾ì4Ñ0N&üøý'd]¯ÊÔ[/þbA ¦¨b锭խŨ­ëÕÔSX0á§®«5ö‰Ûa3];Ý è ³¼Ì“=L9³Ð;‰—ÿ<ÃÓƒ¢\<ÚLøOæLužX…õ:ü ›ÚäJ#ÃÔkRÇc+ „àN.Àæ€~;žÒ}õû,œœ¤n¬O;T3³SzûNâöÚO‰×*bi|U†sCUug™›×Äí"nÆc߫Z!aQÿ:œyã$™CÆß’ö»AžÆïù¯”“í68!·€þWº1K—¢ OuŽ/ ‚ezV=µuø#g¦f @;ÊÇp«¬ tùo]¦uÔˆÙ|µ¾»ê;¥Ñáá[|“ž1SÍU PCƒ NÚ tRæëWb¶Éç…ýL@ª†¼˜e½Q•]Ì,n+«(L`‡Ù÷Žv¡Š'¹2Í+Û /_J¼Vàw£ȃՑ³Š—9wnc '\ ñ˜NµÅ°­ÔÉj»Ì‰vE€1U´Í(ÿp;É—ëÌS„Ö»Ò7úšŸ”Ftö‡Í¸&jÁq.²èavº91s~û TE•píiüÓÅÙ¿V«5¶'Î<ƒ‰`Hº}qþ¥;O‡[?”ˬa|0X¯“˜]2R“BtDƒIÍ]³îû˜ö{S\IÑð“9ä‹vПúûAƒ ÚÕ†¦_=¤¥f KÙ;„¿Òü1zÈí{|,±qˆIOÑ´ÌÇDî¨3Uy‹¯3´¯úN?竨žœ1=žûÁÞI?có.ƒqòMÐûýQbãåLVذž–»N(ù«=èxþ*yÙ4\>w¬c@¸º›ƒŠUºŠ4wΖ9[ƒá¿˜Y» •5³„Ñ» P]ÍõÔÌL5«ßÉ`vöŠOÙ³“Ù9LŽ`y£ÓQJÔNj­#©9oh8½ÑƼ–‡¾š´=áQIUŽdÌyJê£ýÈnZÓÔÈhíþY²„7ò ¥‹Ê!sr¥yÐɬYŠ³Ø¶d^P³ro£ÃÛöC|Ç ©ºžà˜&‡ôSÓDEp(²XÅà`©Üã¨Ë T ¤€¾m€R± ¢#¸»+‚ððMk¶hüðxÑóÊ2.—t¶¸¿™üNÔÔ¡òˆÅž£ºwþw9z«…ž®í\¿/ÍdzAsñuš € ÊÿÎugòðlŸ>y‚ÂðXaü&XN}&àç‡Ø"t Y\k(ŸÇ„,›A^ %í»YÇÅÐí´×ˆB(ž@‰¥¹¼µÅ _Rª ‚šè’þǾ¿3 €ç–|ßµv¦eÐqò¾¶7Ѩcv$„z’ÒA,vƒ ›V⫺OKü¯­má$ÿ&YAÐJak¸åà@*w &9p¸#-ÃcI8iOYÙ ÁÖ¬QÐ@üGOó«xVh¦œ3©š  £IvʰßöÙ¨Égcã$ŒPhæ ¾§¡B¡PmŒ0¿þ‹Bahv™cé^ô ü¶Ganìî[Ñ»ÿëOî k ð=Z¼Rcš4€A{èŒ@Xb1 Eòù’ÖÇåêI9XµfÉŸüŸ>ÿ›áþç¦kdÞ]µÏÞV©Â ™^³+ —þ5à-Ãÿ²é7-†\6‹È€o{ÑÍþ/ØA4?x“PJ`ÕÁªÚÓÓɇ®@º$¯[ÀoTòàÿÃøÿ¶IšW}‚È2XBáHêx±ù½Dj$5›·Þ‹fF_…Œ¦ ƒÅ=uhO“YO*Înøû1}æ÷ÅFRÄðoݡԠéßm&bÿÛ Û±å$ézO±Êe6;ÝeïµëÛ$ã´aŠ£«€©W2íãŽÝëHe”K¹‚>öÈÏ=ÓßÌ~²$½#d&vDŒƒUýÃLågçÎÀJ $FR'Ù‡lÀk¼{ªìÐÙn¿Á ×$u|Iùû) Néç©7NrùzÈÒ•¥VË©bÉó7±ÏöÍ-≗¸G­‘t´í8sgCÂ÷bïFDô~ëÝ“ü¾ÌÈŠðvú}@×’»×ÔtëÙóz®ÄcÜyy|p8«ÅÚîç©ðuZµµœuÏkj¹¯‚¾u¡ÚH_(§ùû%õÖv|S¢¾'ÃašÇ$…–/7Õ¦Æ9®*îP()’mðŒïaŸÎ.Bæ>'bŸh/Е"ôˆPw?Û&ÿ¹˨iÍq¶¹KqÊ¡AšÂ·’ –y=óÛ× aÏ Jä’s:"žÒó[ôžáò¢Ö´U_4¾W\¸o>vFâÕf·TûäÑìZ ‚®‰µB^&š _´Éb•ªØlœ¼°#x?@~Í‹¡òË!rBÞõ;uU˜ÍYq° 5â zJÈsó73c®LŽ¢|;¿C#DE÷[0ºÌ^÷"ïät3C¡^—³¹‚žáE²(-£‘—üîS†­9@l7Ì áð†ç´³%[ÜñS잸‰â}ë3zü’9ýµv… ê—“‚Gvˆ½ƒ|öHvK]Öш>}R¢¤ï×"ln“Ì1Ùƒ@ DâY3rAÐÑ?>tˆ<¬W†þ¿~2Oc&«“~*Wçžô´ ÕŽñÿPK‘nYT>«ŽJEµF3d.iconset/icon_128x128@2x.pngUT Q(bQ(bux èè|uTT]nD:$¤D麻‘T@Bº{@Jné’éîR¤K:$¤á]¾·^¬÷×cͬ™wÎÙ÷ì½qÖ>ª©ÈbÃÈa`ËËIix|¢£‚/†ÎÅ–à †£œ¾ P†=>!1›-À_>q•ÖsÕt°tõ0s¶<<<8¬ím]Þš9Zp88¿K?&@^J\Ë3ã ÓË—P{¦? AdGAœ¹œ9üi5F53«b.‚¦š>2ˆ-‚u%è2<èšu€ž&S”®–\][]«cEÏ{  “ÀWØùÌ1øó¦ÿ€¡¦Py¢ ­þb‰7-í§’ÄÈ÷­ ŸC,f¢å.æ[íß}ÝI¢‰Y’«½aÛP?¤D›(µKØ|ãÄ–D络¯ÈÌþ–‡Ø¡ÕŽ@¤ˆ0ÉöMŽVôz‡SÆ6Ïêj?Šþ@³Ñ32.,¤èõèj¶f¿á¯ú5+¿ér.ÑyX€k\Ã^|ßC ©k¨™é+òÜq+Ó†y3ðQ3§fh¸?;*2spd]u¢Q]löàÄ,E¾ Ý%‚—é”çŒ[ e¬½»×ç×À4Á”õòoÖ:ÖOv»Ý¤&BÌÄÁêFXèϸ÷;5Ø[¬ÿV""!9ZÙZ[[#}ûæ?Š6Ô_Ü-^&ÄÄò`Àz«1¤ÊÈÈÈÌÌ WWÇ' ”ÉÔ) ‘É÷ô$Û©ˆÙÞ¶Úvt¤˜é3墸½¿9ÚzÆÀ€ü·a£÷5’úpÊàkWä È).fιМľFÌÄ^_ÞÚ®†ãv¼h:Å]:k˜?XáÇñn¥rÛÂ×Ç èXJÉÌŒzÊgœ"8ê´ÐÓOà[t\{~e sm,LŒœÂ^iHº º¯¸„Xü8̬¬2–”ÃŽ*Æ­(>JãEËD‘w¾©àôQ25waÔþr³ÕŠ‹?ÀÒ++UC«K±Tœ`X»š\æ›ups?;mØáþþm’—I‰âææ yyyžŒÜÅî¿™.Ž–ÅˆFX¤KÑ[¤ê¼€Í(.¢ÚóÓ¤¬Sñ–êDH»jþ8ôfˆA±œýbJÍÛoNa*à“ =9ïûðŸ?•6þüù5nõÊÖÿr5 2óÍÈǩᣡÎiühÃìܾ`<–+:ŠœñFPÑ“‚Ô¬ 9&neŸöoþù#¨À¨ˆ㥣ƒžïÍl­£~°o>¨ï¶¶¶Ž 2@2Î%Gé$_ÁY<• µ2ì߆W¢û®†±±¹9íQˆuæ-rØ¸ŽƒŒ‚¸Þ(#˜itw#fPkØþµ½-}¬"@:“™ñ*1$þ“ðϪ{²4¸ ÌèzÉÜ@8Þ“'ÑëµÀ’çq'ÚEÑ—/KÝËA&má6¨Ú‘ôæYRˆÆgN²>Úý[IÖ±–§9Ål†-¿öέÆr X¨Hd¡Ö¶¯Èc ŠŠÚ]œFðCO4ŒYÇ,ZU«!hŽà¢(<4]Ú°}§>Ôƒ¶ø8ÏÛ5Ð SPô£Ø¾úÌ æ¡ÝûG2{gNDŽR14§QŠõ웯o¡]¡žò•ü(Å$^NKMmEcì&ž‰”´ôߊ0i)) %yùïÙíìÙ~/¦ÑKfޏë›o2Ö¡9¾ŠnŒÄÀ“óÄ@u „útÆfee‰:¦ó@§™Ïh9¢"«&þ–€£nÇæ .vw‡}À¿›I`@ËÌÊŠyß½ù£YªöÎÎŽCG}©{± Dm*dÂ5û¹nG‚>’GåÜûh[/òýÓgðâq«Ë$SoïëxRcOñ0òt° y¼Ÿ§Ýte@<Ö¡‡jkž‡;µÙEÉÀƒÀîTIw@(©ì'²¸ŒØX¼¡€)XMRž ÞvéµcælwúïwŽṲ̈ÍùbütI$ØuóyoŸwTÎk—‘dÉ^7Ø/NQ ¹K4¬ì8|gÍDc/õ¼ò@RɈ͹Äë#»tÑe9Ÿ„µÕ7Ôì·[ò‘Çþì¸Þ1m)1¸†Â¡Ôw…£«!ñ¢ù ÿȦ ¿Ê g뤂±£ší§åK¥g„zÉ­?ÞTíÏ×¼Sżç½ý›‰ ›&]Ö¡$¦Âõk¼ÐÊGbZ7¾ıA[%ò‚<97: ýQ}î&hämc³û¶Ø2Pü¿N‹>û­îmLrò¾ýà²i8JšŒ‚!Ó@4ñ¾Lî¸.67 •ƨEAûŽ .cªïE†4`…´¤´<3&\Y¾cî¯Ø÷äÄ/þ¶z©::ré%ó Ͷ€%ßVüLÎCäq$"«ãXúë[¶{Ö² Ž]ÝW[”åuŠª.#fff¦ú¿S#…nQ™¤@V ‚îò\æÛ`ÿZ¡š_2%Ïi*aCùÕìèõË®|ïVãv7²Œ.ƤÇöhP#¿+ìÁüèS=íx  E[üpƒ_¨Ï%bÊÕ_uŠ&{uÝsš–V\Œ•èÊ>%ާ…Câ³/Ç´3füý‰ÙÂÁ;Dž–\¡:d >颩ådæàÐP:>>ݲÉ䢂¢¾¾¾gAÈ/È´r©B¦ 9‰'β&LŒñ)¶ðèîï6MòÏ ü?V†ºM’áúö~'tll”Õ`ÜÃ#™BÍy0(˜tÃ5ÖYùâ$ Â#â÷ÄØq-W£²“zÉ!Æ7¢‹ø®&ªÄyg¢ŠI¦ì—Úü|д^0>âVdúcYTBÜ‘ñ¶k½ç©ˆ™²‡`¥ÃêÕØŽð©Šßê²O)ür”Š€Ú¼hÿ"}øu|BBzŒ6`„`Üõ­ÄÐ^bÊh+=$ç̳Z»hÚÛ­¢íóéÅÐñŠoYãuóï`þNŒç3ò”™ñþøûµáòôg sÕ¡ŠD¤Oš}/á NwBµêA@AŒËä;ýØ.ûpõúäº[ëñ>‡¤ä/Cè›Æ¨“a‚1cÚ±’_\Ó'X¨G3¤ùMEGøÆó R˜¥’ŒÛ*FF$ú˹å}~:ßà@ØÍÇÿþi¥Ž d4û“‰’-kƒá¯žåÀû¦fl+u  øx"bâ¸ørTü:›Üœe2 BúR9ÿ>ús … E€; ìA™|¼‚î0Ö3#Y1ÓmÎÝiúªë=7ø¦ë=/b=K/™x1_¨âÊN¸·· ñݨÉÕ sg:·Iˆh¾ÿv ®€Ì Þ¾bç)µÖ;""Âqg‚Œ'·¸‘¬>ž ¬ÚT‡­?ù.P°Å¿>`áã], Oœ6FÚ)œÞ‚ýôŸ‚(„£Tv’`d4!™«jghðüåè;.²'Š÷¼ógµµµš` úIÐ@½Ä’RM÷pënÍ«õ½ }Pigb=:&^V'^4)°†E.ƒT®‚öËž“ø•q¸×^Ó§{¬îð§Œ/Û~Í•‘ †æ[3zn\LÂJŽYBR‚âg ~Ê02ºØÓ˜q+ä~'óL×íé].ƈ‡(ÀÝ`Kh)!£‰I*Fñ«&ÌöBhu÷kÀ œ„í‡DYdÑdœ çÇò–_ÅÔ^HÆ@ÆW´m æ_Ëö`9€CÁïÈà!)qÀû´ºÚžîùsLP“D>AÉ™™Ñ¢ã-wšššš)eeºß çü7âPÔÒQ)ZaoˆÑXF“{¦W¨”‹ÒÙ¤RAÚºüm\":Èåò·yååz"ð`8Ã{o‡¼€9Û÷o™öêD/ŽÐ=ß#©®q1Ũ©ªÃüÕÐtõ.}Ø’ˆˆèUëÝ¿y1T®´…‚ÿz®„\Ž¢Ä)¬ri°«ú…rçõtgÞ9®ÍÖFŽô˜¹6 _¢¢îzÇ>l©„K²Þ}F× ]Æ/”åŸSö ôbbÔ`=s¥ÿÛs‹ø üç)Ôõôø_°³³*¦p¼¾¬@gU{lœ™&øàW´ž?úâˆÔK÷æÌˇ «ð33Væùí¤è¢ºŸ˜‰}‹ˆix(óÅVð$£ßÊ7fÑßdf+'6îg@§Ž#?¼_á'ÔÓú× ð1{ðÃZ2kÐ)ƒ­Cá±ÅeÑeKàÍΘ‰_ãps˜T™Ûʱ$™þGpH¾Øýίwu°˜“ìN…*èÇžþC7"cˆés¦+åùKHK €)Š ¢s sY»ù™¦¹D.+4Ô¬cöÀT1Æ µ"2 áÒ<@Œ'}ùN+ö¥ëèöëÄæÐ›&-(V>„âù“ÍNõÈÞ ÛÛ[]päº&Ÿ‹Ã~Z˜***HdÆù¯ûé‡IWbHabœ—l?e•£?Ô»Rÿ¨³ªƒï¼ 3ó@ÿß~´@Cy^'»ó¸~x³šâÏG0–ˆŠ)‚2ס¿2ÀVˆˆ¤Üâ"ÃÙqmRz`í Èr`Ÿý%Ûñ™7щUóÆ)×Á µèTˆ^å/ªvâeÒ@Ç'F ±ª¯¿È žÌäoø(¦(6Ã7 Xâ‡ZGø:’†EDAÿd‚è]ÿ ”Žf&©µh^ÄI~–A©¦ k³!p•‘K?Ã\‰‘Ô$¶AÛ‚ÀÁ…EF`J„¼|峪æÍFs¥XÿáH¤ãø†âÁ…‰]ìZñ_b–"Nœ4áˆ׈ÇK,NNN –1Å®'É€Â]Ú³ù«™®q¸×oUÁkÅuÈíöÑ«+G F`Ë¥_@u»ÅQñ!S(Ęà6A…ºƒÐ~íeAé§Œ–¹QBy9 --íÀà ‹­)fø£4]#>üt<‘“-g¥8ì·SKÛž)¶TeRÌ…\‘á¿â$WC vZÅÜÚæ¬4ë=?­ ð¹¼!jy&@;°¨kÝ>CaB´CóËâ v¥ç0iûtº5º^Ñ~ßuuºåtubaþî=ˆ, Të*Ý •Ÿ1n%¥§GÖÕÕ…GNªZzAAr'4òWV¡£Bì§¼Áõµ°X!y©‘-•q·paj†`5ffhÕT·5•œv ¡úR°½ÍŽˆ­Â;ªËFT…s‚nxÑdç{^p¦5œ £`Ù8É;9½À¡eó6·´ôöͲù–ô}ÙêUž|Â3«ßµ,ŸylCÁzÎÕ¯±Œ‚+p„h®(6È—%/hàf ý\±¬Ï±/µƒéö ά¢dÖ‹EÔ®ŸdœÆ@‚Á^ ÏÈ (øòe­ù¨MÒÆ†ÕÙÅåÎ8/ŽBÄ›H6†Êí=&ŽL³ûÁX®$šëÁoâáÏ<ω9JæŽ`ŒO;B0Vú¶+ x<þ<é 5¬è† AsÖç4äxÒ9ŸwÂ[}.œrt"f0üOüïçª{_8”?{Ü]ea>8ÅöT á™wëûC“ ®í§1].(«™ dãÔ[>Áþáëè'Âü È+üBîX!a·®(v1ˆ¥˜•mQ÷fJôš\Y¢©ÅÿÝØ·SZ-5ÞØç¨Óç‹äè°ÓÐAѱ“Œ‘Ý~\ FPC€Ã˜!À®þ¤Âë|W»§¿Ÿ^T” {¦‚‡"œ×î7?’“=òCb—ÿÄêâßR6“@§ªHü&ÔÓ¼P³D¶dÄöv>Àœ¤èìÌ-z¹‚”!àòåçú'™•ª~%"Œ•Ê+½¹‚™êƒÍïþI‡ 9š‚å5ËB‹¡““Sxdd·‘Çbˆz¾ŒÙåñ*z’ 5éÚ7G9ùç!æ;ÚQ”\të¯ÐX7¡5Cá -­uhAa¡:i¿û>ÙÕìèì€û¹Í««ð£%ør|4 .'ǸDƒ¸õ]é§ô»AÌšøãŸˆH¶Ä"…ÎÙr =l½0NÞÃç\¶Pñ¿-@™ž ºüÞ„trÁÕÔðÈB|^¼xÑ‹^L '†cç ƒ]Є‚iêò¢¥ÞE)‹G-É÷ƒ…ã&,6ëýtÿ7Jbb£¨Nþx(ØSÝX?óÚÁàûÆY Øy)œ·ÂÌÐQˆ£Ê»ädLRV@{€êS éò aïéÓH¯Ó?,°%¬Ê±'ÖýQš)ÇHp-¢ãÛS¸:j¶ŸŒ!>£^ro½ÝüX­î'rØ»Ñ,7K&7ñ pk­údz'î|1qèímâ%ùj9¹°œÏ5ö‹‚gûs„LªY‰¶¿°ää÷£gþþÚ9*”¦ kt¢Ø-·ÜxlbÑëüû³UH ëÙLpº»vë¯ÍÔ|BfÁŠBªÿë9è•Ë‘Kš÷¹9á08:Úo[Ñz¾7óã Äe‹Àe™´ýG$i f"àÂa‚ú͈¾SÄ &®†gÊ÷äöÕIãƒ?w¤Ú¸ÏÀj2;’èU°ºhpMû>=!{i©d ã¦I¿vùq¦ o¼ìïåU,Ñw»<6à)FZ´>¥ÀlÍ;\4$/$0=Òü>ÿØÀÏ~Ð,Rü'r‚^ùEœé”¬Œ˜ß¼4¬»?&aGÄå3‰œÖñv¾”¾§¤Ó‹Jwöã%ŸŽï.Cýµvó$Iö»XdšßºÓz•_Üœ/šâ¹=F ì~„¯=JßÞ&·½ã뽊üœx­QÊ’šç|=w]W 䈱Q1½Ûý4ÙôU|Z­$¢(Kƒ÷èG~cj†è% ¦ÐÊG†•úâ-ê3åÏ Ægš†DŒ„&¥´f&4çÂFÂÌŒö‹RZkƒÁíÆ""[”£Áí¾eäÃÆè¡Ø÷ÄþˆFœ×õ½LìÊòå_„ÄežªéïW+£bºÆ‚áÐÈÈÈ>ÿÞc=åÅJKK ʺ|øÔ3êÑ–{û·xú­Eßãâqí–ýo”ë+4™Væ¯ÏÅ–³ 5–q°ù&nn‚át>Ù|™(Z/|¼Éþ°5c2¸ßÇ Ê¬é2]Üç:_á ¢¶8C‚1ƒ‚ç R•žªbwÈp«=4Öñš€ð…Û®ÖÆææÇú—X\oQñÉËõ¦3nü! ]äʲ X D{ìœÔT2á“úƃúù–¶‡Ÿ?•@- X[[϶ú4Ðëc”“ ‘¤¾ì?}/•Ž*–­'>Qˆ#“¯˜Ì&þpI¤ÆÄKæN°OÑá]µàNÓÚ>¦»šSª~J{ùŽŽƒC¥¾l™M…•L bËÑ”= m®ò^bÙÎBžÇ¦¯þZ’¹'ˆ=Ü‚Hã‘ö…â ›>‹låê*à …LˆßG§%ÓŒ¬”éÜV>úç¸W,ú@W¢F¿ø7Ñç0n 7nõÁ gCöðÛñüAÆö´¢þ¥Ûn0H»kûs5ž[™·¬·€ãÅ¢ÇzyÃR×ÎdQÕÛ~×£%#w%T' cÿ4ä[á\7Ûê_+;E½óÑÝ7Gí1ß]¶†|½=üJÞà‰êÚR X¬}Ñ”Bcå¯ùÒJ~rIÑLL P±„tí9ÆòÑ^”ê8ìý*¯rÙRÙ_l&õ»>‹ã0ÿ+„ÕW´çåj˜E?›±Ò‡¥³ýZZ†¶ÑV×cÄú¾êט[¶hTiê^ ·ÁsÉQhò$ð5A— ®éÐ~42¦yVhcÊ)!‹Þ%Ju,Ò>ÇÜ^Ê4‡À@§úò¥`ÿ5jJ¦àj?u€+ ÉI7nÇzL³ àŒÒ L!ýý[@Z+Ib¶3Qôv“¾íÒðÛ…f¨c^˜Á£µiü3”ôü‘ÖÚnOçbŠÜlWŽÍªGNNgõªÏtäNÿ ;m«+e‹.ªçsÒÜÞñUz×Yvs‘ 83ø_m’Êf„o],ä>}F»3÷Nþ$V ãvKì¡s$SˆrÆý\ן™â1”+´T@Ñ亳†N…‘&œ¶ÑÃg¿µïN€,ä,Õâ7–#Îïyœó–Å®#<†‰o¶¹aíðQ)Ý\õÄÑKÏÜDõ Ga ©îåü&ö oo/ÿ‚ÍšñFûíê±·.}Ëg*p®ˆEû~p]>áÓˬ|éÜô›í”ÿ“Áô3SQgã‰;Û¯oF{º¸è|ö±Œ5ïLü´ÿg[õD??>ùÁY4‡ÔróÍ#…š ¡ììùH(-‚›h )°l{^RCÉ‘àæææ2í~¦ó©N½! êò/Ær³²/f_ЙH<*Ðq¡þÚ0iÏâ?yÊ —©±Ül 1#c3lT³Äø™.»]ⲧзfÞ8^í¾Ü¯Â‚ÂæÓ¿;“NÁ´Ö·Ëm~á?vƈÝ3Ï󆻌Š,e¾´ûUªýü«A]éý-ŽýõnÚ»žÛ׿ëÆ;÷P³ãó“|É0œh;w!§¨…AS­7P]|îw#æææ‰iÀkGQ}N6Ñ4 `][ûE$Ò<éH.ó<Ãv£³ÌÔ᎓Ù<¶ÌÄÙµäQ]üU£Ì•€P>ë¤ÚBê¹Èƒ0ˆýTÙ}¦\¦ç»ÓèøSìBÞ‰d„K93 —o­ÿpñ‰¼KÂÀºŸø¤j·£v”{± dJÊ~¡1°óÚúÝÅrØ¢=éÏ de+{®còw¯D³(äb¡¾-¤ŠV?ÿ$ÕŽž³‹x™(òU±‡««ù~jŸ€HåÏ@EëR½÷¹M†Xbv#Ö(ôj#Áƒ|‰o‹‹æÍ›7•ªüÂ)'?_väJJah·? þ;tkÃÁÄì~êТ^•àÝýÍÈ|õ);–§ø{¡[î,؉’À¤*Óê}NQCA;ùaéäz~ð{d†‘‘ñòOºƒ9ÔDG ¾sñµ~ù» \ùÃ:?›A-:*\F&ÔŠÚá¤Â`ÓÏ ‹ö)_„ßZQ¶?y¯þ|³ðWjQàMöéT…ª¨•«k'>&ú3Ï€¶J.‚—øÕþwÞã‰4ºƒûºÞÅø¥®£C’åõç‰ïq'Z5]æÅ‚$Ô˜ç*Dný£dkšÄq²ˆ"šRÞUy–rÆœŽXˆH÷Õb¶Ò,oæ¤C& ‘Áê»3Á¨.àVÂG‡M¢‡ÎÈFÍîÒ ï—ci{–æ&fˆþàíœ{×:,/5ªå•¦âBø2Ób!)eÂ>=YŸT¬?§1E!Eë1DOÎËY|ÌsW@ß|ö½ìíª64"Ìxƒƒ‰a›¯~­Q¦æ¯ò„†_¥ÌL# í[Y>·YǧGu¶³gÇÝ Ï™„^ûw¬tv<ÜeV”[)ÅJÆf²s(íbLj²úûíϾPŸ¢V;Ê)@žJ%„¿þ  ››óÜLÒ=^ôXüÇc#å;ÍkwërAáäAtäˆÖ¼]µÞg¶õ‘Ðswɧj;;ñÕµòåòƒ¯f´^  Ûn¸ñr‹~ÕˆÌDb²HµÙb©¹™}L ³c4ƒß ZUUѵ\„[}Çx ÈÂ_;úÔ®kì…"//Ò|gßËwc/^™¼²‘r絑 ò÷ßçù’òu—¥¬:NHîÜÂÝwß]H/ÙM¸ Ñ2nÃ0N–”Ö¼é…ýÌ ì'fõ9—eà:t(ãÎ ‚né+X8ûõ¬õFJÿ°‚¬,L—yÊ—Iï¶^¼Y xÀ4²næˆKKcñf.,ó™É L¨^¹NÜÓÍíòvÛifÄ®”±1•±ß¹öû¥ýú q¤ê%rÃRrì´Ñ? ˜·§ª³îÙ¯¡B‡= qªçqmÔ[O¢rŽfb©ˆ¶~!èâ~ƒ*Ùû–Õ*¥Ñˆþ/Ûž.KÉ;ö8Pøu¨›||Š~7»°`Ø»ÛI¼Ú‚ ªûÒ÷gØ88}?8Û?¹º–"¯¶{þÍ+:þ€ë½„$Qënêö ®¶&wÝû…pû7̪YG1h©Ù=Žü.)ʵÔoò‹²¨‡¸8$ËçP@Ÿ4/ŒÊ}o¦¢lX¾Ö¼#Õÿ: Pd›Ü*uýÝ7î ûgEP¡«Ðr{òã1’¯ŸA©^°ÿ뵃¶ï«’hsÒsݦ÷ø‡ýfgÛãrªªï_¦?rÙÄÄÄXÍ»Q˜Iw‚O‰¼ßnIDfMÜX(·IœŽ"ŠiïûÝö~ þëí‰ýB”dz—<(‰û1e6DP·{-{mQªŸŽ“°˜.6¹0IZ>R†Åû~–fAA‰ízhXåâÃNcÝ v˾_hÄñ>ë%Šô<ù‚NíY;á³p“ö›ÃæjɬJФüÌ£¦èï´zõŒy¶ÁúÚ³2kYÔf FͳK`j^Æ“Æ(Kr•-=TCYA‘––ö¼;Ÿyá´&µ™`ÿå±O“äÕ7—jt2'ÏÚ›2•=`ý™l4Eç£U ‚ w !ËRtuuùº6dýÝ-«XËÈ¡tlõîPäÔÞÏpÙŠ×Ùš¦œfꘔŽÁ–~âwó¯Ìâ†* #õ¶ª ÒXåÌE6c0ð»Î–2„ca|%9ë›QshQ–7 TŸž¿-ò ®@†µøŽFí«V¥hm½Aq·kwë¶®¡Aª„ “€;íÚL3ß æ²oeõ´[ÅxËÊú’ñ=ïS™ª¨–a¶×õX¯ëß‹ƒk~çXtXå´.ÓÂðd×çœî©usMú„ã%³vj×ÑK­ô‚¾O,éá.Lã«o`˜ôÚå¨8XcÃ^ñŒ w—£bƒ¶É/¼Ï¬666LO6-Ú<ÐÁ¢nó»Q[Npïö7½:Ùô¥½4q"ù+š’%Ø~o$ƒ#(#×ÄÅ×Lsøò?ûJ€^'…ÓD&[Ô"É,¤ÖA•õ@‡x Žnº¥çw¬a‹L1öÆ —ž¶Ñö]nXö,--mN—CÍÜ1x³o@ïI·Š‹©·£’l]Ý×ר_©hï™×κò±>Ÿìÿ®Ão_óÕ•‰WÑ\Ëé°hˆÒ¸ÇÁÝξS¢]¦“ Ê€ËÍó£'¼ïSgÄ%MœN6ä…ï/×S…<¾É= ]·£ ©³ b³v™:rË.ø 'F@yÓ±Z/¨@¾eÜë&%‘aá0Ô[åv‡Ú½¦Éd`Åð>cþÝàc=ùePéÔâ\oû°jíÉÑK¼Üvc¥Ê¢)EÄÄ!i”Ox?±¥“LTÒr½ n±Ð{D Ý ãÞŽ@¤¿W[Ù?”üÛêjùüv¦åj,‡l Á<“°é!ú¢ž®·^,uG=åƒ:èëë?Š`r>ûO`&HÈëì•Kï=k2®{0òSØŽl§ÐÉD[lž{z¨GAÕºÏpÅnT"Þ+ ˆÄøüÓ7}ð½>ÖFÉË—ï]™1IÙb7÷nd鍨\îûz¾w{Ë~ýNüŽ+@_ u̼C;åKËŸ±Œl/°¸œèv†ŸvŽ)IÏ!…¥ó 6?ï üynGBŠÝIr¸ÍôI²îDo%çp…ùSkKŸŠ¶L8”MŒíÉSÞÑJÊà˜­#^õ…GFJ‚}gß~ç~v´L ÎölU¾j|ÀÉÉI¥Ã²èþRëÓ§|ö=½‘¤FTó•®,%‡,—{¶RÞTw×ûݨÒg¹¤y‚(jsæ––o& ägŸ³e˜ Ý]$Ô»Ù×––‘ÔZK~A×­xf]IÊ1óÝ÷Š›„Óø8ªdÙt˜<«¥ƒZ«@0Õ´¬¬0uuut\ܰNÓÇý ¦¦¥œ‘Aq{:*Öè¼ ã0lD2©¬\þ]ç÷:1ÿ™—˜öRžRÝáö¤;ìc§™ëX%­Óž¯QL«Z>1˜b´ãµHÎ5ªýFE›z¯ó8´%ÊPd¢èºªmˆçÞ9G"úíÖGõ¿åo»úó´}a 7¶å~+ëô;y?$’$NŠÝzÏ1*WÈkAažo€²¢šðqÿö(àáÑÏqb²¥)(Ncr^œhC?šOEQbú>ˆTÁxíŒZî”Ë à÷ °åÂÈ‹"3„õ~;&ṼËÇ–äºvþ¾ÒjåÐcR>‡¥Ç]Ÿ¸äägóº“Jþ^û/N.÷_r»5úð ¦<\½ë@³@É™†–à›ýNº-·ÂãàIÒsŠÿ¢ n‘®ÿ1ú(ɰ ºÃp K£÷yéûåIÕ›éÎN1YƒTd‘kmuO~Û0ƽíGü·KDû|››{ íÖWã“V>m—%oB’÷øøÆx†ü’õ¯Ÿ]V5q…³ i}¼ç o°g˜0É<½wƒud™~^ÑB·×Ýï²O¦?xq¹îßì[×ýþY¯ •7ó˜‡D£gÜÏ_ÌuÈeFOÉ^Ée]nà´]Ê—N[¨)oçsß²–Mïž©& ‰>cæ«É-NWNšËpËn›]ÔåÐpÈIH7M"ÚHtd ±„ug;×¾¨ÀïLïˆHâÝž|@TôÜ;‡f™GŒN6xy1˜É}&ü2¹“S"£‰:½•àٌѱèñ£Á¤UÁ_ÍïzêS)—v’Ø=Mf {|úŽÛ^|Á3V$“ïädò§qttt• lH-?é /l¦é¬³? =GËGü¬ÍÉ~iÊBUíÌ(o¨1¤n5ÞÎW§MA»‡T`o zÙG³.l<$Åc9~e§`3À‚Rc¿ý¢DKlÉX'Æ¡áKQ:®bÖ–ÿGy@Àh Š¯éžŽ†&ü·ªèQg›Üžƒú/b±– Ë!ªIK½¥—‰õ÷ÖøwÄT6j9ÿ.Q5ÌÄŸV´"WmÛVñ[GÊ8²*8•¾íx:÷íz-žNuÜ7!  B*½¾^ŹX@Rú,E`RPEU–¤uc7Ÿ¼‘¬ÉŠMo¯†3TÞô»ÉÙfúäv”#¶Wúá–~‰êÉ“ ¾¹<^MºúUI«˜B«ÈÈÄèü£¡fëÓ5.¹¢‡G=e°u"Ê)–kádïqÌòìj&Ø—Ž=Ç™è£ö'rßï´‘w<¦/Ul¦b±Éñjª_óÅK?뱤ß"aG$&v,˜¸1‰dNmÌ×+·}kFšheõ²Ä¬½‰?)ß8;ýùR¯Á>s¹”²ìÀã9JŽN­ÁŽRjŽ¡ïÚ­WŽGu²(<Ä¥”’MQé~Vï»õ·ñXhxã%r²âÓä5Ú ±ã•Ÿ’p†ƒn—ìz×M Ðì5šy¹œ0ˆX“Ž#ÃتT:ël{ ²¹QbÙ¦¤ôÈœ~züãHyøù„»“ýf±ÒL’‰éí@,­ñ²‡v+€kJF’%œfŽ©ðÝ=JIU䪠¥‹­ÐWC#|°Ý6Å×$áYφÃXÇé©3…þÄíAƒ‹šÜÌ7£*¿÷Wê×håGiEKk~¾Ri6¤mŸ O‹YHlM$Àû4Íø`N³ÍW·ˆ~>Ûÿws´tG“›¹W娹%jÂ3e __ßoòRÈt9êW…jæ¸x º!‰“Ó@¾e†AF“e"¨ôH¦TœB© c;î¿¶î“:[©ËBåXI ‰JÇU á¿=„K™äâìØî¸ÆŽíqšÍ~êú7ÒO¬¿~é‹2GÉŽ?nx/¯sìõü–I5>ѸäxÙïbQNA!¯Ë$†!Fˆ`}»»9"ô1æ÷÷_•¦‚àF$»ß̳¶ä:e.(ÙG°O2¥eG¥Ð*¶|ïcß½ÿ·=Ž:žFPš>ß¼Ð!&ÒÊJ‘¼EÔQ1\)éÁ‹lay‚ð¾&ž¸å¦4ŸH’Á i鸣/^.G#Fjð Ðn·•M¯=îÌU[üÀ[^0ãùbÉ‚Pˆ–‰OÖña¡ÐkJœ¢VRúš8¯Žý\7þÕ.!ÓÆ Xÿ(r…w°ÅÍì9v4k—QEÖAJî-Oè4å¶I„ŽÉ….~@»+"|E^Mâ×…_÷lsˆX£øÍÞU‹«=Sò5H5ùµx‘!‰Ox3Ii ³›?6ïî êß<˜oX—¥>?ìáAdòDöý8¹)–éWñur¿ î‡xÐ~U0ýê˜(l+)âÅ¡~(Zh/Œý”eÇŽ*=ªàÔ~þY…аë¶ógt‚‚¿›fðÀÐÂÕSåÚ¼“ Bý/2…å{t¹°Jd·†î~ѵ9¤p •-–ÒÝÂÚú©Ò7}â– O¡#Œ-;º­Æ1 ÊYIP Ÿ4å‰cKvßF,‡ ï·ø',þՌʹ™šÄô<(³a‡ JÑMLžÍ,|?‘fÕþ¸7¸Ô*/XñŠ€š\Á0p$³õ¨ÏåoÞ Á’÷ù®Ùz_”翹w­BNØ GÅ[ã!­èGP.… ³¹H©Uý{Úh˜Ðôjd²faeIXµÖôÔ‹¥PŸxŒ_¦¢¶Ún´Jø==A¬í”Ú!Xr?ø=ÊØÒ&ÅËáþ#«hP ¤B~BÙ˜åªúæC0ò2>üá[ö“ þ,[4¹ºF-Óî7Vªý<…Ø2†ŠQ¼‡où,ÛvMñÒuiVoMcuÒ+ ç¼ >Œú~ißãèú|ï®>x&¥˜îVÒq›²ÃYR¬9^ÈŸ^ëB4Kþ7v x_·êæ}OŽÚ‘Z½½o—zÝŸ¾²BàŠ^°ÐŽ&Õ7~¦ ÄÿªE½ÍTŒ7h»š‹“µ3l’¢»»¥YÖ ¥æsxì'L‹WäÁ€×vвQs–þ¼AŒ™˜˜‹£”Ì$L—=}}É^-jÍïöñqâ:(ÕÖƒ;“ ¢¹‰#¯—PZ.ÖÞGB&:QQªU…ÂtíO¿}¨¦Y€€¼›SÕ9ÞîQ1ɇ›£µuWÁO”B$;;;düŽ9û"¾‡õvßt/“¼I“ÉÃæQ´lÕ/?.¿0Š‹Ÿ¬'ÄË¡ä Ùtñmð»+µUÐa xÚ/Ð,”h®tvv^‚žöø×kñ=»!i™( t½Ÿ¸!=éÏWøŸ$±»3M6“6 l†B+þh%ù¿ß‘4‚#hå䃑QP>®¾íÖšrÖîÏ…ÒÖyìn<|aüþ]Š6Š\š(/á#3«¹3úÕ:.ÝíËlóaæë{é ãÖ1i|ÐÞqÅ)ø©†Ì@Öì¬Þþ\ ÚäåâO?‡Ýþà GÁü–¡ÖШNñWSfÒ>¼µQáü…Ú›#yšeE°Ë”ÕÛ®dÚbÆkK.¶¶RŽY“ö#¢¢¤¹ÏyMô,Ї‰ÏTò}š†µaÀõdQnŸ2®ôáT^;r MMbÒ” 1Õ/»ÿ'=ºÄŘ˜ÐžLèŒd¬{ÚW1s~ú~c?£¬ÃÌTVÄ¡d=Õ°§?{6­]@‹¦*QgSPô,RN—I9¾N#ÏΘTÓ¦ßþþ>Y~úÊ~Ìvæ[oW¦úk hqA03‚³Ò4oïr8ßêã‘¶¥¬¬ì&¬[ÊØÑÍÇîuïµ¹S·Þ/ß¿ðwýù¯Ú>ì•’¢ÄI¯ç¿c?líj¨‰x¨´´ê”è}wfü¢œ¾s*‹#?= gˆöþØSðŠ‰©Ù#ÔŒËjŒ¦ ¨èùsËx!³¾ß GH”‘É ;€òI•< ¯Ïå‡!…_Ù7_ת}«|Må+]ÀpÕÖ|è,"¹ŠÑƒäädN› ÎD' ð$SЭt…Ù>We¥‚@É[~«a0¡ãË–lŒÄÍŒ UæK66¬šw£} &ûi­ÞzÚÛs|QÍæpAyœ™oÙ—°^cOªŒqÜÕc%=Y)c»ÉZ>†ê½j^ž"×v¦ú©³œ¥¬HÐÅŸ]|EÌör»!áxŽøDÊ~éaa‡§V lŸóŠÚÙ}¥è_d¶½¡z}¸—vŸû·ìg¾Qº.|¼¼ôü™Î‡{5ÁåŲ5’Ùí2*ÖOåƒu¾7Ó‚Iê¸Ò ;FbHÝ*AHKŲu‚kžôÊÉòΛ»t4]6ZsíÄbâ‰×²èUÛ±£FÑhúç[ g—ÁÛûå€È†=WÁ–ûë½T~§7½ð¿dÓúÀ=ôZc°ÐW>ZDûqqÌÛË&®“Ï*f §ß‘XXXÂ?~tò243£+®Êfšu¹Ý„á––viëæ%VÅ3-ñû£vsX…‡ƒ×d|"wCíòçXO é‡ Æµd¹vN·}ŠÑÂÉs¬øñöF7[¾šÓEõdgö[³'~¨I@ùXÝãép zz{½´¢úÌéè+ù†9ƒƒƒñ–µ'ãÚè%D<8µWÀÕv9‹Kr ŽÞü³–zÝ|=ˆwL‚ mWaªµÈð€6J4^ "|Iã•7ž–£Ô [:ïÕÆgÐË)*v÷|$ÌMÙa’M(nƒ“j§ÞÒw6é”oÜÀ`ÜëÞçS¹¯*í4ÚévZ€4×¹ji/Œ£p|úÇ]½©Óúãbi»*`šx“H´ÎIP0Íòò9âg6Æc—¾x‹Ÿ`DR:¶ƒð9TW9.¹<lóû¸S¡eÇ'ôºí 7Œ5käG¶Ï•3ÜFíI”Ìcâ]þü,Q7òœV¨Ó>/Æ#©ÁÞUå7ðRdbLظ­³ þýˆh9æ¿$\š/ð1IØàìò¿> Ë8£‰> ê¾²‘ú(Kíf©ºu0Yô Ÿ¥8O«ú9++ì)ïûޱ\ÉçîˆÑâ°ŽÚ·hdâ9åÅFBŽ ÂG½¤Òì{3ù Æþ53fϪ|7J…EÁ¯¦“/ú2­V^)që÷ ´5kŠˆLÌ8˪`šà¿B¸` %Œƒ|H6.,‘“ñXËÅt®Iûì÷ïæ†ýÔ Q?µÙÂH«×c»ÓÅóe¤J ¹ajE*”l†x[Y>æ71”ô˜Ÿp¨ÎTÓŽ½ÏÃiØ~ÞüG<æM/x´)4MÉPßö}ê|ÜktÛÕÚ§#ÊÎ;ûGæIÀGäÔÉ=õ±ü°[= ítëG5ÒyÀm  ½LŽýÑRå××hþ(g/¾¾ùwðh&¦¾Ôi}ûéÕ]•ÉØˆo߆2Dñ3–•âŠ=PÔXé”a{D“SÙH‚ö<%¸§÷ch~׬^%GžÝ{°¶= ˆê¬éçßñûSàW´†nÿ*W÷À f328\£õÛqMå2ƒ‚4þÝåÝܽbÊ4ÿ`Þ¯yHõZè«\ÿWÐ2_ÝjHO«Ó¿_jyÒJÌÆá]\ƒ»ì‘!ëû±Bö†iGf{Síþ<Ž ›¶îd¸TR—hÔ9þ[#áöÓ°†(òÊ«S³Û¿²\‡¿î“·2=Þl%=nO%öˆ7ÌfûÓÙºŸ“ìÔfóíÙy\,¥¦’½¡ÖFpž h |íèPÊ_£ÉTâ´_v¢Ëz<¤t6ö¢;9Ççýj–ûÄ™'-«°ÖuUbŠRHÝnžî¶õ"Çé¯q ýb-##J¾lL²vëà ­u­í/fÕe/ iv ,‰mU›uŽÇ¬ ìqZ-Ìy‚ºßè×5‰µøA2¾·°•}±}÷Ïû<–LJ÷…`p:u–í{¶FgµW|t’æE*èúm e_ ´´´"&>>~L6rëç“7Øû‹{~9zÀ“'æªÔ4üüd&w<–?SÅAžÍáíÜ*I~ÐhŠ$5ã÷šøû;¤îjÅH/ }À¶Ú‚^=Ö…PèS'§j^¬ú¾(#œL°ƒÛo8è²} úºÃZ›ìAÊKM ܼŒH8qCKtÞ[ì|¹ÒƒA°ŸÀ±j7Q€Qï°ÌÁú^¡„\KÅôêPhÜÖöâpÅ7Ö­/M©Ò}/4ÝekÍÆ€ü^À‹`fæ›ôÈT ³ú±ÇyûCtÓTÚ7»Z Ð(™«Ýaô""”H¨X±íîQèæoòZÜõ=m ÇŠž|ö‰œ« ëáÉÆâ‡YûƒM PÐ+òUUt'e¯’––y 2§YDGψÂw!6kßnä‹×Okµ.#å~¸_÷ÚqÞ®Álµ+D¯ÙœÏžm>`Ÿ¬Òó…¾ëztÒÎG”ØlÕˆt9E÷WA°U"I9C{çýMšD€¦ÐíÐ.`\N£µý°…ûu±™þí(ÕFË Œp¡íSQ—½xeåÛ~¥LAbTù~l°šô«ònû¾ºßðø$«ÐÒÑAËtÊ»‚1…o¢i§ÕÆ¥0ïò¶õœö~™º5)(ž™FÉ,|æÅÖÕÔ0Õ.Æ\qÄü¢øçÚ-fÔ‹ŒËbˆ¨   çmtõ©I‹yzr’ÐJ4ŠãºgÁKœÇƒ> ›Ùï¸àsé¥ÚÓRu í:+(D P[øª2ºƒ]/tÔs¾ùÃén¯Â,Agr…Ùîwðõ‹èÆß'Êý»C± Ð÷þj«šèµ¨ÇJ$§œƒ‹…>Àû´Ò­ ”Ä$TSð*ªiœpõtºGýF<±–Ý{H2{Jøëpщ‡‡xNóËÀbÐþ{©ŸDýÌ,z-Œ¤ù“r`ˆîô|b¢KWÁ‘K^Šè4íÈp©4턦*=«8LÈS)Í„Ž)RüzSx­—„õŽ›ÖgWËp±S'$ÑÌFîRG`8˜©Ï¯„E¬¬˜-‡?‡”¿nÈ+ êrAÕ«F>ÑÓ™ƒ:Ö7øß]ËÉÉuTšu ·qF\—¸ÃàST3)ÆvhT¹™¤aLLÿ¹Å¶È[¼éªü÷Øš_ÙþÂJçµëj>j{n+«c¨ôå$™#)åahäYœ¿5e⿃ùf%¹<-\0PSäzÛªKóûå½f·îéD¢ ¥ æf1ew^›á¬(ðþñZ,±_MHxoæLî<š­‚ÂBPü™ÇrMØi\¯êÕXbu½~Œ/8BSC ¥á‹ªlßH&³–%¿þKKšëÜ0ÇùÙ*tãœÏ?•FM*ŒEØô*''§F£7v‰ÄªõØÏfËR'½þ«q®^ì¹"ûC¯Ü´@úD[F~½ïÒc˜|A¯…Ì=š¦¤Žÿ³¤$Üs{a©ž}7šLœ ‰oÔ2ÄÍG}‰,šæ ½xü¢hOÔÙÎdÙ¨D‰·– MÆ¿·ïySPħ:5UWÁ&wÎ  Ê(s_sRZˆ òïü¸ýáXҪ˜ýbáY†f‘Ê£øån‘'V{ðÅýÍQÅ@ŽÖ‹G<æcå)ú@@Àê;2„ ë*oXîÛì‹»dböÝÀOÙô~õý;úÝîs)·ÃO4%šGA>G­¤ ¡¦Š´åW±´{ÌU[¸b80æÔ #`SAÙÓùþlP@¡…í[n³ï“qJ!Áümöo LùÑï?§ó™Íµ>M¦2ýݾl‘;‘Aj"õë©C#åÅÀÐPW‹×éãqM×ózJü^»K‚í0ÅÉŽ›ó½"Øœf¯2Ц jûz©(‘¿ë¥û~×sú“š‚qVîÏÆ?—Ú£ôüjÔ´Ò—'m*)uôH¬V+ƒªEav¬cîüÚ«ˆ ^ô¼äêÚ­Ø.G¡àe@öú€¶nãÌ}oTý§ñ2«?#9tÀÿÎ|P-±#Ÿw2[¤fR¢å1gF;Çîd6ñâÀï´b¦ Ož¼nâ¦<ß¡­6KÅ¡@ËT/%˜Ö€ð_g;Üíbo~±sê­h'g’WIËÒ¿íF%:ÛeüýmpDfñÅÛb‚œDÅ:m c0Øö¹N‡q{›•ÏlQvÞÒËQO£FM;GÌoœúA_w&¥!ð>›B„0÷Çq ¦n$¡Æm.˜,Üé§Æ¿šÒäº;KP­ å"C |¶rϘ7õ¦ÏFz±ê­™°+3‚O?¯^aC„hgþ~alþÕ„³l®¨Ùå<[²\ÀÅ÷7W,‘ð_äo÷ßõ0ˆˆrÆþÊGŸòtJ[¡€œStY:½I¨þõfJøþ|Ãoôp^¾d6|øôÆFΡ˨øë'~}ÌÚ0ж·'ír§9Þ%¨Æ^ËV_߇j©=”áU»²ð§³¯Xä³^ÄDõF©Š÷"»êVä(r>gÁ¸¼›Þû­– ÚÔï’ak µxvï""ðþ®†…ïΓöåË"¹z´Ñ·ër.ønQŽóNªŠåþ*ÊFÝŽf¶)èãÕ†:*ëãY`þ¾Çaþ~!ü5g+²J<¥Õåß5?^ƒrÖ]ÚKH“ärìK"gÙOxv˜`±os¢ÿÄV×’Ò€Ž×F;rn5:;›Îjt™3BÕœCLÎŽêw1~ПÃi/ÕjKÖy45‚ ¨ýˆ:„òŠ?’—ž }I”B޶'æŽç'l˜Š °ÝhÊHÔÑðBäõQ1]‹Ž'Q·Ç’êÂ-> ºuh,Ó¸ÓÌ8ª<Fƒ±±n½ƒ¬x UDÈIÝÌ7Ú÷;SÔÂdØ¿ë{í8[ƒ+9Û^GÆV/¹¡Ž3‡šSy(0d¿²fÊ?ggÀ’ú°´]'ÜàT>h䱺ÌÙ¼:ÅÌi€¬¨±fU1<$¡¦AO1?kP§vÛÄÜöàߟ¿±ä³©#¨t?ÄúM=Zó.Žºã&·© b¶Ÿ@~ðÿ‹âúä úR%¤soFÒcG#íhÜÜ¢ó¬—ëîøÃÛ§EÓ]¿_¨£+Îi”'$ª³Ã¬÷Ù±®0 ³˜ççÕ™pJÕx™ ËÁz2·½ògäuÎöØ.Šff¡ŽÙƒ±l$0;è¿›ˆÁ$œ3ÛL¢þЦ4;˜Âè½X>ò°Ç5ë¡ÉW Kôë³o§ç(W¥ŽF»TD“º´:˜­µ&DûŸÿj ãÛ<ƒ)tÙÿÃê™5™Jf¸ ÛœÆg6I¹ÑB±óíb'  jÀ;%Pö•øõU|¶Ú"b.Àëîfýš)ûrÀèb¥™—RÀx<Ò§=@U´t<ÁxmÎC.¬%+#}ùŽÖyÜOÍ•!Š­¬¢’¶5aÔlíaI’[i÷zãü 2èpÑ¢Wt(dÝôú\ÙnéÓŠÝ|Nœû9c…*õBÎ$"Q£zŒŸ1÷)/™]Áz¸°Ù7ùƒf‘© 'Þ—ìcß'.JAäÉ\É¡£œJ7["×£è #µ‰ÊÜÆ_Ô?$Ò“Pêl¹¨„P×+Ú»n'UÇîî~Ü<·^ K{¸ŠycË­0,Ml‰®Vgˆˆè "êð=¦ùyóÖj†£á žÀñZñ„Mw\Hý¶•y uÌB®¤4f0s¦dH\Ù%ÿ>¸FO ðCP*™ùHÆéÅ2½ùä3=÷¨¦VÁ%Õ—ÆÙuÆ`Žbö«ÞÆ-7pûçÖ/ ÜY ”“üRÉ4Sø9ƒBOC¿Ö–œ;…íìÒµ~@nãbçC‹ÿÚBÁGjûÔÇs;pÆÊÜܧ\€*¢ÊÀl©:¹ÕÇŒß Öô#¥sö}ô[Œu¦FO=–£òШ¥ÔËt˜¿¯GþPí`V€¸+m˜`–[.T» ´ùUcN c`…¨ù‚¤ˆ˜øRv…\-äºû,í|`êE¹MÊ®Ýe¼‡¬`N$ÿdcPÕ¥ÉEpªí}6ˆ°CÿA’Ñø CH”t?CgV4lÇ‚%þ¢ÖÝ+AçN™CsÔl¸´ ÿ{0,íÿóñüßÖpX¡`î¯e¾ºÿó7 Æ@™ü‹ûÿ;‹Úÿ5ª@„—‘C4Ér W˜¯rÚήßÀZ:°¼/Œ‰‡/HÑ!H¤.C`NÔ®÷Ù”ê—Fé«DþOà Ì! ùÕĵËÜiFufÿ>t:\rà“¹I!KàÐ?ñWAa:Ç90„ÆäŠ‘É=mb”B+†öß½ŠvÔk0hI‹×€{§äöÃlDD„ÿ· Ÿ\5¨ÄŽÃâ3/t‹ü‰Økª¤@T•vrt¢ÏÒ-=èK²¹Zijí†;B";q.û,,ÞЪ¾ð؈Ü-ªJ.©h‘Z)”-|33 ¨@ßG‡Ÿe3ÅÂa>]¡>…j !¤—'‰pøVë4›Ö§qb °”V ¸ý ‘«ÆL ùÿ~镼§³ChÙ+¡༴ŠÔ7 Ó ÿPK nYT­O58íí3d.iconset/icon_16x16@2x.pngUT P(bR(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<zIDATX…Õ—klSeÇç´=];Öv€Á9†Ê²/™£1¤\B4q·„D˜ÑO "øa!\Œ~pÓ¨3ˆÊ@$Á„Xб™@w,xH3¶uëh©mÏ9¯æ*ö²¶^>øO·>}Ÿ÷ÿ?Ïí}D º»»ë-Ë}±öñ`0²u]Ï ‡Ã4M»=00ð¼ÓéìHÇWŠ5ôõõ}k±XžÈD€$Ihš†ßïÇh4 …ôáááwJJJ6¥ò•c š¦!„ÈøÑuI’ƒØívÙf³½ÚÑÑq®­­-;#@ÆäcQeUU±Z­äää`µZË„]gΜ¹'bü %†$IÑTF¬V+ÙÙÙX­Ö©YYY—š››g%ô‹5ôôôœ¶X, 2!—e!¡Pˆþþ~"‘ªªF…™ÍfTUÖuý>§Óé»Ó×»™¦ib,¬éBÓ4 &“‰ÜÜ\ªª¢jšªñ[(„YQ&“é4ðи2páÂ9š›à÷{Q+yyEÌŸïbÚ´{Q5 ]׺€®ë¹ŒF=J'àÎÂýýýÔÖV±`›5knñóÏF"‡ãKÚÛ?`ÿþûY´h %%ÑVScqE(F1nÕ·´|C]Ýbvìh¦«+Ÿ£G_Ål>…Ãqš6÷Vº»§²mÛ÷tw¯å³Ïv£( Š¢ Ëòo)ßìêÕ«M^¯W$zúúúÄöí/ŠººÉBÄîÝ…ÂãùUDÑÞ.Dg§ðù|bÓ¦yBÄçŸÛÅñãÅÐÐðxÐ4ÂEE„gÏÆtý:²ßŸò­S!å•LÍÍÅ·zuô·ÒÕ…ÒÙIxútü ŽŽ¼4¡iZz/Ÿ¡ÂBB……c Ó&O†¿}%û;Hk$[ø_!V€ñÊ•+^»ÝÞ"„ˆûfø'$Iø|>ïœê¿¹÷ÿ¿©¿y›SŸNIEND®B`‚PK‘nYT>«ŽJEµF3d.iconset/icon_256x256.pngUT Q(bR(bux èè|uTT]nD:$¤D麻‘T@Bº{@Jné’éîR¤K:$¤á]¾·^¬÷×cͬ™wÎÙ÷ì½qÖ>ª©ÈbÃÈa`ËËIix|¢£‚/†ÎÅ–à †£œ¾ P†=>!1›-À_>q•ÖsÕt°tõ0s¶<<<8¬ím]Þš9Zp88¿K?&@^J\Ë3ã ÓË—P{¦? AdGAœ¹œ9üi5F53«b.‚¦š>2ˆ-‚u%è2<èšu€ž&S”®–\][]«cEÏ{  “ÀWØùÌ1øó¦ÿ€¡¦Py¢ ­þb‰7-í§’ÄÈ÷­ ŸC,f¢å.æ[íß}ÝI¢‰Y’«½aÛP?¤D›(µKØ|ãÄ–D络¯ÈÌþ–‡Ø¡ÕŽ@¤ˆ0ÉöMŽVôz‡SÆ6Ïêj?Šþ@³Ñ32.,¤èõèj¶f¿á¯ú5+¿ér.ÑyX€k\Ã^|ßC ©k¨™é+òÜq+Ó†y3ðQ3§fh¸?;*2spd]u¢Q]löàÄ,E¾ Ý%‚—é”çŒ[ e¬½»×ç×À4Á”õòoÖ:ÖOv»Ý¤&BÌÄÁêFXèϸ÷;5Ø[¬ÿV""!9ZÙZ[[#}ûæ?Š6Ô_Ü-^&ÄÄò`Àz«1¤ÊÈÈÈÌÌ WWÇ' ”ÉÔ) ‘É÷ô$Û©ˆÙÞ¶Úvt¤˜é3墸½¿9ÚzÆÀ€ü·a£÷5’úpÊàkWä È).fιМľFÌÄ^_ÞÚ®†ãv¼h:Å]:k˜?XáÇñn¥rÛÂ×Ç èXJÉÌŒzÊgœ"8ê´ÐÓOà[t\{~e sm,LŒœÂ^iHº º¯¸„Xü8̬¬2–”ÃŽ*Æ­(>JãEËD‘w¾©àôQ25waÔþr³ÕŠ‹?ÀÒ++UC«K±Tœ`X»š\æ›ups?;mØáþþm’—I‰âææ yyyžŒÜÅî¿™.Ž–ÅˆFX¤KÑ[¤ê¼€Í(.¢ÚóÓ¤¬Sñ–êDH»jþ8ôfˆA±œýbJÍÛoNa*à“ =9ïûðŸ?•6þüù5nõÊÖÿr5 2óÍÈǩᣡÎiühÃìܾ`<–+:ŠœñFPÑ“‚Ô¬ 9&neŸöoþù#¨À¨ˆ㥣ƒžïÍl­£~°o>¨ï¶¶¶Ž 2@2Î%Gé$_ÁY<• µ2ì߆W¢û®†±±¹9íQˆuæ-rØ¸ŽƒŒ‚¸Þ(#˜itw#fPkØþµ½-}¬"@:“™ñ*1$þ“ðϪ{²4¸ ÌèzÉÜ@8Þ“'ÑëµÀ’çq'ÚEÑ—/KÝËA&má6¨Ú‘ôæYRˆÆgN²>Úý[IÖ±–§9Ål†-¿öέÆr X¨Hd¡Ö¶¯Èc ŠŠÚ]œFðCO4ŒYÇ,ZU«!hŽà¢(<4]Ú°}§>Ôƒ¶ø8ÏÛ5Ð SPô£Ø¾úÌ æ¡ÝûG2{gNDŽR14§QŠõ웯o¡]¡žò•ü(Å$^NKMmEcì&ž‰”´ôߊ0i)) %yùïÙíìÙ~/¦ÑKfޏë›o2Ö¡9¾ŠnŒÄÀ“óÄ@u „útÆfee‰:¦ó@§™Ïh9¢"«&þ–€£nÇæ .vw‡}À¿›I`@ËÌÊŠyß½ù£YªöÎÎŽCG}©{± Dm*dÂ5û¹nG‚>’GåÜûh[/òýÓgðâq«Ë$SoïëxRcOñ0òt° y¼Ÿ§Ýte@<Ö¡‡jkž‡;µÙEÉÀƒÀîTIw@(©ì'²¸ŒØX¼¡€)XMRž ÞvéµcælwúïwŽṲ̈ÍùbütI$ØuóyoŸwTÎk—‘dÉ^7Ø/NQ ¹K4¬ì8|gÍDc/õ¼ò@RɈ͹Äë#»tÑe9Ÿ„µÕ7Ôì·[ò‘Çþì¸Þ1m)1¸†Â¡Ôw…£«!ñ¢ù ÿȦ ¿Ê g뤂±£ší§åK¥g„zÉ­?ÞTíÏ×¼Sżç½ý›‰ ›&]Ö¡$¦Âõk¼ÐÊGbZ7¾ıA[%ò‚<97: ýQ}î&hämc³û¶Ø2Pü¿N‹>û­îmLrò¾ýà²i8JšŒ‚!Ó@4ñ¾Lî¸.67 •ƨEAûŽ .cªïE†4`…´¤´<3&\Y¾cî¯Ø÷äÄ/þ¶z©::ré%ó Ͷ€%ßVüLÎCäq$"«ãXúë[¶{Ö² Ž]ÝW[”åuŠª.#fff¦ú¿S#…nQ™¤@V ‚îò\æÛ`ÿZ¡š_2%Ïi*aCùÕìèõË®|ïVãv7²Œ.ƤÇöhP#¿+ìÁüèS=íx  E[üpƒ_¨Ï%bÊÕ_uŠ&{uÝsš–V\Œ•èÊ>%ާ…Câ³/Ç´3füý‰ÙÂÁ;Dž–\¡:d >颩ådæàÐP:>>ݲÉ䢂¢¾¾¾gAÈ/È´r©B¦ 9‰'β&LŒñ)¶ðèîï6MòÏ ü?V†ºM’áúö~'tll”Õ`ÜÃ#™BÍy0(˜tÃ5ÖYùâ$ Â#â÷ÄØq-W£²“zÉ!Æ7¢‹ø®&ªÄyg¢ŠI¦ì—Úü|д^0>âVdúcYTBÜ‘ñ¶k½ç©ˆ™²‡`¥ÃêÕØŽð©Šßê²O)ür”Š€Ú¼hÿ"}øu|BBzŒ6`„`Üõ­ÄÐ^bÊh+=$ç̳Z»hÚÛ­¢íóéÅÐñŠoYãuóï`þNŒç3ò”™ñþøûµáòôg sÕ¡ŠD¤Oš}/á NwBµêA@AŒËä;ýØ.ûpõúäº[ëñ>‡¤ä/Cè›Æ¨“a‚1cÚ±’_\Ó'X¨G3¤ùMEGøÆó R˜¥’ŒÛ*FF$ú˹å}~:ßà@ØÍÇÿþi¥Ž d4û“‰’-kƒá¯žåÀû¦fl+u  øx"bâ¸ørTü:›Üœe2 BúR9ÿ>ús … E€; ìA™|¼‚î0Ö3#Y1ÓmÎÝiúªë=7ø¦ë=/b=K/™x1_¨âÊN¸·· ñݨÉÕ sg:·Iˆh¾ÿv ®€Ì Þ¾bç)µÖ;""Âqg‚Œ'·¸‘¬>ž ¬ÚT‡­?ù.P°Å¿>`áã], Oœ6FÚ)œÞ‚ýôŸ‚(„£Tv’`d4!™«jghðüåè;.²'Š÷¼ógµµµš` úIÐ@½Ä’RM÷pënÍ«õ½ }Pigb=:&^V'^4)°†E.ƒT®‚öËž“ø•q¸×^Ó§{¬îð§Œ/Û~Í•‘ †æ[3zn\LÂJŽYBR‚âg ~Ê02ºØÓ˜q+ä~'óL×íé].ƈ‡(ÀÝ`Kh)!£‰I*Fñ«&ÌöBhu÷kÀ œ„í‡DYdÑdœ çÇò–_ÅÔ^HÆ@ÆW´m æ_Ëö`9€CÁïÈà!)qÀû´ºÚžîùsLP“D>AÉ™™Ñ¢ã-wšššš)eeºß çü7âPÔÒQ)ZaoˆÑXF“{¦W¨”‹ÒÙ¤RAÚºüm\":Èåò·yååz"ð`8Ã{o‡¼€9Û÷o™öêD/ŽÐ=ß#©®q1Ũ©ªÃüÕÐtõ.}Ø’ˆˆèUëÝ¿y1T®´…‚ÿz®„\Ž¢Ä)¬ri°«ú…rçõtgÞ9®ÍÖFŽô˜¹6 _¢¢îzÇ>l©„K²Þ}F× ]Æ/”åŸSö ôbbÔ`=s¥ÿÛs‹ø üç)Ôõôø_°³³*¦p¼¾¬@gU{lœ™&øàW´ž?úâˆÔK÷æÌˇ «ð33Væùí¤è¢ºŸ˜‰}‹ˆix(óÅVð$£ßÊ7fÑßdf+'6îg@§Ž#?¼_á'ÔÓú× ð1{ðÃZ2kÐ)ƒ­Cá±ÅeÑeKàÍΘ‰_ãps˜T™Ûʱ$™þGpH¾Øýίwu°˜“ìN…*èÇžþC7"cˆés¦+åùKHK €)Š ¢s sY»ù™¦¹D.+4Ô¬cöÀT1Æ µ"2 áÒ<@Œ'}ùN+ö¥ëèöëÄæÐ›&-(V>„âù“ÍNõÈÞ ÛÛ[]päº&Ÿ‹Ã~Z˜***HdÆù¯ûé‡IWbHabœ—l?e•£?Ô»Rÿ¨³ªƒï¼ 3ó@ÿß~´@Cy^'»ó¸~x³šâÏG0–ˆŠ)‚2ס¿2ÀVˆˆ¤Üâ"ÃÙqmRz`í Èr`Ÿý%Ûñ™7щUóÆ)×Á µèTˆ^å/ªvâeÒ@Ç'F ±ª¯¿È žÌäoø(¦(6Ã7 Xâ‡ZGø:’†EDAÿd‚è]ÿ ”Žf&©µh^ÄI~–A©¦ k³!p•‘K?Ã\‰‘Ô$¶AÛ‚ÀÁ…EF`J„¼|峪æÍFs¥XÿáH¤ãø†âÁ…‰]ìZñ_b–"Nœ4áˆ׈ÇK,NNN –1Å®'É€Â]Ú³ù«™®q¸×oUÁkÅuÈíöÑ«+G F`Ë¥_@u»ÅQñ!S(Ęà6A…ºƒÐ~íeAé§Œ–¹QBy9 --íÀà ‹­)fø£4]#>üt<‘“-g¥8ì·SKÛž)¶TeRÌ…\‘á¿â$WC vZÅÜÚæ¬4ë=?­ ð¹¼!jy&@;°¨kÝ>CaB´CóËâ v¥ç0iûtº5º^Ñ~ßuuºåtubaþî=ˆ, Të*Ý •Ÿ1n%¥§GÖÕÕ…GNªZzAAr'4òWV¡£Bì§¼Áõµ°X!y©‘-•q·paj†`5ffhÕT·5•œv ¡úR°½ÍŽˆ­Â;ªËFT…s‚nxÑdç{^p¦5œ £`Ù8É;9½À¡eó6·´ôöͲù–ô}ÙêUž|Â3«ßµ,ŸylCÁzÎÕ¯±Œ‚+p„h®(6È—%/hàf ý\±¬Ï±/µƒéö ά¢dÖ‹EÔ®ŸdœÆ@‚Á^ ÏÈ (øòe­ù¨MÒÆ†ÕÙÅåÎ8/ŽBÄ›H6†Êí=&ŽL³ûÁX®$šëÁoâáÏ<ω9JæŽ`ŒO;B0Vú¶+ x<þ<é 5¬è† AsÖç4äxÒ9ŸwÂ[}.œrt"f0üOüïçª{_8”?{Ü]ea>8ÅöT á™wëûC“ ®í§1].(«™ dãÔ[>Áþáëè'Âü È+üBîX!a·®(v1ˆ¥˜•mQ÷fJôš\Y¢©ÅÿÝØ·SZ-5ÞØç¨Óç‹äè°ÓÐAѱ“Œ‘Ý~\ FPC€Ã˜!À®þ¤Âë|W»§¿Ÿ^T” {¦‚‡"œ×î7?’“=òCb—ÿÄêâßR6“@§ªHü&ÔÓ¼P³D¶dÄöv>Àœ¤èìÌ-z¹‚”!àòåçú'™•ª~%"Œ•Ê+½¹‚™êƒÍïþI‡ 9š‚å5ËB‹¡““Sxdd·‘Çbˆz¾ŒÙåñ*z’ 5éÚ7G9ùç!æ;ÚQ”\të¯ÐX7¡5Cá -­uhAa¡:i¿û>ÙÕìèì€û¹Í««ð£%ør|4 .'ǸDƒ¸õ]é§ô»AÌšøãŸˆH¶Ä"…ÎÙr =l½0NÞÃç\¶Pñ¿-@™ž ºüÞ„trÁÕÔðÈB|^¼xÑ‹^L '†cç ƒ]Є‚iêò¢¥ÞE)‹G-É÷ƒ…ã&,6ëýtÿ7Jbb£¨Nþx(ØSÝX?óÚÁàûÆY Øy)œ·ÂÌÐQˆ£Ê»ädLRV@{€êS éò aïéÓH¯Ó?,°%¬Ê±'ÖýQš)ÇHp-¢ãÛS¸:j¶ŸŒ!>£^ro½ÝüX­î'rØ»Ñ,7K&7ñ pk­údz'î|1qèímâ%ùj9¹°œÏ5ö‹‚gûs„LªY‰¶¿°ää÷£gþþÚ9*”¦ kt¢Ø-·ÜxlbÑëüû³UH ëÙLpº»vë¯ÍÔ|BfÁŠBªÿë9è•Ë‘Kš÷¹9á08:Úo[Ñz¾7óã Äe‹Àe™´ýG$i f"àÂa‚ú͈¾SÄ &®†gÊ÷äöÕIãƒ?w¤Ú¸ÏÀj2;’èU°ºhpMû>=!{i©d ã¦I¿vùq¦ o¼ìïåU,Ñw»<6à)FZ´>¥ÀlÍ;\4$/$0=Òü>ÿØÀÏ~Ð,Rü'r‚^ùEœé”¬Œ˜ß¼4¬»?&aGÄå3‰œÖñv¾”¾§¤Ó‹Jwöã%ŸŽï.Cýµvó$Iö»XdšßºÓz•_Üœ/šâ¹=F ì~„¯=JßÞ&·½ã뽊üœx­QÊ’šç|=w]W 䈱Q1½Ûý4ÙôU|Z­$¢(Kƒ÷èG~cj†è% ¦ÐÊG†•úâ-ê3åÏ Ægš†DŒ„&¥´f&4çÂFÂÌŒö‹RZkƒÁíÆ""[”£Áí¾eäÃÆè¡Ø÷ÄþˆFœ×õ½LìÊòå_„ÄežªéïW+£bºÆ‚áÐÈÈÈ>ÿÞc=åÅJKK ʺ|øÔ3êÑ–{û·xú­Eßãâqí–ýo”ë+4™Væ¯ÏÅ–³ 5–q°ù&nn‚át>Ù|™(Z/|¼Éþ°5c2¸ßÇ Ê¬é2]Üç:_á ¢¶8C‚1ƒ‚ç R•žªbwÈp«=4Öñš€ð…Û®ÖÆææÇú—X\oQñÉËõ¦3nü! ]äʲ X D{ìœÔT2á“úƃúù–¶‡Ÿ?•@- X[[϶ú4Ðëc”“ ‘¤¾ì?}/•Ž*–­'>Qˆ#“¯˜Ì&þpI¤ÆÄKæN°OÑá]µàNÓÚ>¦»šSª~J{ùŽŽƒC¥¾l™M…•L bËÑ”= m®ò^bÙÎBžÇ¦¯þZ’¹'ˆ=Ü‚Hã‘ö…â ›>‹låê*à …LˆßG§%ÓŒ¬”éÜV>úç¸W,ú@W¢F¿ø7Ñç0n 7nõÁ gCöðÛñüAÆö´¢þ¥Ûn0H»kûs5ž[™·¬·€ãÅ¢ÇzyÃR×ÎdQÕÛ~×£%#w%T' cÿ4ä[á\7Ûê_+;E½óÑÝ7Gí1ß]¶†|½=üJÞà‰êÚR X¬}Ñ”Bcå¯ùÒJ~rIÑLL P±„tí9ÆòÑ^”ê8ìý*¯rÙRÙ_l&õ»>‹ã0ÿ+„ÕW´çåj˜E?›±Ò‡¥³ýZZ†¶ÑV×cÄú¾êט[¶hTiê^ ·ÁsÉQhò$ð5A— ®éÐ~42¦yVhcÊ)!‹Þ%Ju,Ò>ÇÜ^Ê4‡À@§úò¥`ÿ5jJ¦àj?u€+ ÉI7nÇzL³ àŒÒ L!ýý[@Z+Ib¶3Qôv“¾íÒðÛ…f¨c^˜Á£µiü3”ôü‘ÖÚnOçbŠÜlWŽÍªGNNgõªÏtäNÿ ;m«+e‹.ªçsÒÜÞñUz×Yvs‘ 83ø_m’Êf„o],ä>}F»3÷Nþ$V ãvKì¡s$SˆrÆý\ן™â1”+´T@Ñ亳†N…‘&œ¶ÑÃg¿µïN€,ä,Õâ7–#Îïyœó–Å®#<†‰o¶¹aíðQ)Ý\õÄÑKÏÜDõ Ga ©îåü&ö oo/ÿ‚ÍšñFûíê±·.}Ëg*p®ˆEû~p]>áÓˬ|éÜô›í”ÿ“Áô3SQgã‰;Û¯oF{º¸è|ö±Œ5ïLü´ÿg[õD??>ùÁY4‡ÔróÍ#…š ¡ììùH(-‚›h )°l{^RCÉ‘àæææ2í~¦ó©N½! êò/Ær³²/f_ЙH<*Ðq¡þÚ0iÏâ?yÊ —©±Ül 1#c3lT³Äø™.»]ⲧзfÞ8^í¾Ü¯Â‚ÂæÓ¿;“NÁ´Ö·Ëm~á?vƈÝ3Ï󆻌Š,e¾´ûUªýü«A]éý-ŽýõnÚ»žÛ׿ëÆ;÷P³ãó“|É0œh;w!§¨…AS­7P]|îw#æææ‰iÀkGQ}N6Ñ4 `][ûE$Ò<éH.ó<Ãv£³ÌÔ᎓Ù<¶ÌÄÙµäQ]üU£Ì•€P>ë¤ÚBê¹Èƒ0ˆýTÙ}¦\¦ç»ÓèøSìBÞ‰d„K93 —o­ÿpñ‰¼KÂÀºŸø¤j·£v”{± dJÊ~¡1°óÚúÝÅrØ¢=éÏ de+{®còw¯D³(äb¡¾-¤ŠV?ÿ$ÕŽž³‹x™(òU±‡««ù~jŸ€HåÏ@EëR½÷¹M†Xbv#Ö(ôj#Áƒ|‰o‹‹æÍ›7•ªüÂ)'?_väJJah·? þ;tkÃÁÄì~êТ^•àÝýÍÈ|õ);–§ø{¡[î,؉’À¤*Óê}NQCA;ùaéäz~ð{d†‘‘ñòOºƒ9ÔDG ¾sñµ~ù» \ùÃ:?›A-:*\F&ÔŠÚá¤Â`ÓÏ ‹ö)_„ßZQ¶?y¯þ|³ðWjQàMöéT…ª¨•«k'>&ú3Ï€¶J.‚—øÕþwÞã‰4ºƒûºÞÅø¥®£C’åõç‰ïq'Z5]æÅ‚$Ô˜ç*Dný£dkšÄq²ˆ"šRÞUy–rÆœŽXˆH÷Õb¶Ò,oæ¤C& ‘Áê»3Á¨.àVÂG‡M¢‡ÎÈFÍîÒ ï—ci{–æ&fˆþàíœ{×:,/5ªå•¦âBø2Ób!)eÂ>=YŸT¬?§1E!Eë1DOÎËY|ÌsW@ß|ö½ìíª64"Ìxƒƒ‰a›¯~­Q¦æ¯ò„†_¥ÌL# í[Y>·YǧGu¶³gÇÝ Ï™„^ûw¬tv<ÜeV”[)ÅJÆf²s(íbLj²úûíϾPŸ¢V;Ê)@žJ%„¿þ  ››óÜLÒ=^ôXüÇc#å;ÍkwërAáäAtäˆÖ¼]µÞg¶õ‘Ðswɧj;;ñÕµòåòƒ¯f´^  Ûn¸ñr‹~ÕˆÌDb²HµÙb©¹™}L ³c4ƒß ZUUѵ\„[}Çx ÈÂ_;úÔ®kì…"//Ò|gßËwc/^™¼²‘r絑 ò÷ßçù’òu—¥¬:NHîÜÂÝwß]H/ÙM¸ Ñ2nÃ0N–”Ö¼é…ýÌ ì'fõ9—eà:t(ãÎ ‚né+X8ûõ¬õFJÿ°‚¬,L—yÊ—Iï¶^¼Y xÀ4²næˆKKcñf.,ó™É L¨^¹NÜÓÍíòvÛifÄ®”±1•±ß¹öû¥ýú q¤ê%rÃRrì´Ñ? ˜·§ª³îÙ¯¡B‡= qªçqmÔ[O¢rŽfb©ˆ¶~!èâ~ƒ*Ùû–Õ*¥Ñˆþ/Ûž.KÉ;ö8Pøu¨›||Š~7»°`Ø»ÛI¼Ú‚ ªûÒ÷gØ88}?8Û?¹º–"¯¶{þÍ+:þ€ë½„$Qënêö ®¶&wÝû…pû7̪YG1h©Ù=Žü.)ʵÔoò‹²¨‡¸8$ËçP@Ÿ4/ŒÊ}o¦¢lX¾Ö¼#Õÿ: Pd›Ü*uýÝ7î ûgEP¡«Ðr{òã1’¯ŸA©^°ÿ뵃¶ï«’hsÒsݦ÷ø‡ýfgÛãrªªï_¦?rÙÄÄÄXÍ»Q˜Iw‚O‰¼ßnIDfMÜX(·IœŽ"ŠiïûÝö~ þëí‰ýB”dz—<(‰û1e6DP·{-{mQªŸŽ“°˜.6¹0IZ>R†Åû~–fAA‰ízhXåâÃNcÝ v˾_hÄñ>ë%Šô<ù‚NíY;á³p“ö›ÃæjɬJФüÌ£¦èï´zõŒy¶ÁúÚ³2kYÔf FͳK`j^Æ“Æ(Kr•-=TCYA‘––ö¼;Ÿyá´&µ™`ÿå±O“äÕ7—jt2'ÏÚ›2•=`ý™l4Eç£U ‚ w !ËRtuuùº6dýÝ-«XËÈ¡tlõîPäÔÞÏpÙŠ×Ùš¦œfꘔŽÁ–~âwó¯Ìâ†* #õ¶ª ÒXåÌE6c0ð»Î–2„ca|%9ë›QshQ–7 TŸž¿-ò ®@†µøŽFí«V¥hm½Aq·kwë¶®¡Aª„ “€;íÚL3ß æ²oeõ´[ÅxËÊú’ñ=ïS™ª¨–a¶×õX¯ëß‹ƒk~çXtXå´.ÓÂðd×çœî©usMú„ã%³vj×ÑK­ô‚¾O,éá.Lã«o`˜ôÚå¨8XcÃ^ñŒ w—£bƒ¶É/¼Ï¬666LO6-Ú<ÐÁ¢nó»Q[Npïö7½:Ùô¥½4q"ù+š’%Ø~o$ƒ#(#×ÄÅ×Lsøò?ûJ€^'…ÓD&[Ô"É,¤ÖA•õ@‡x Žnº¥çw¬a‹L1öÆ —ž¶Ñö]nXö,--mN—CÍÜ1x³o@ïI·Š‹©·£’l]Ý×ר_©hï™×κò±>Ÿìÿ®Ão_óÕ•‰WÑ\Ëé°hˆÒ¸ÇÁÝξS¢]¦“ Ê€ËÍó£'¼ïSgÄ%MœN6ä…ï/×S…<¾É= ]·£ ©³ b³v™:rË.ø 'F@yÓ±Z/¨@¾eÜë&%‘aá0Ô[åv‡Ú½¦Éd`Åð>cþÝàc=ùePéÔâ\oû°jíÉÑK¼Üvc¥Ê¢)EÄÄ!i”Ox?±¥“LTÒr½ n±Ð{D Ý ãÞŽ@¤¿W[Ù?”üÛêjùüv¦åj,‡l Á<“°é!ú¢ž®·^,uG=åƒ:èëë?Š`r>ûO`&HÈëì•Kï=k2®{0òSØŽl§ÐÉD[lž{z¨GAÕºÏpÅnT"Þ+ ˆÄøüÓ7}ð½>ÖFÉË—ï]™1IÙb7÷nd鍨\îûz¾w{Ë~ýNüŽ+@_ u̼C;åKËŸ±Œl/°¸œèv†ŸvŽ)IÏ!…¥ó 6?ï üynGBŠÝIr¸ÍôI²îDo%çp…ùSkKŸŠ¶L8”MŒíÉSÞÑJÊà˜­#^õ…GFJ‚}gß~ç~v´L ÎölU¾j|ÀÉÉI¥Ã²èþRëÓ§|ö=½‘¤FTó•®,%‡,—{¶RÞTw×ûݨÒg¹¤y‚(jsæ––o& ägŸ³e˜ Ý]$Ô»Ù×––‘ÔZK~A×­xf]IÊ1óÝ÷Š›„Óø8ªdÙt˜<«¥ƒZ«@0Õ´¬¬0uuut\ܰNÓÇý ¦¦¥œ‘Aq{:*Öè¼ ã0lD2©¬\þ]ç÷:1ÿ™—˜öRžRÝáö¤;ìc§™ëX%­Óž¯QL«Z>1˜b´ãµHÎ5ªýFE›z¯ó8´%ÊPd¢èºªmˆçÞ9G"úíÖGõ¿åo»úó´}a 7¶å~+ëô;y?$’$NŠÝzÏ1*WÈkAažo€²¢šðqÿö(àáÑÏqb²¥)(Ncr^œhC?šOEQbú>ˆTÁxíŒZî”Ë à÷ °åÂÈ‹"3„õ~;&ṼËÇ–äºvþ¾ÒjåÐcR>‡¥Ç]Ÿ¸äägóº“Jþ^û/N.÷_r»5úð ¦<\½ë@³@É™†–à›ýNº-·ÂãàIÒsŠÿ¢ n‘®ÿ1ú(ɰ ºÃp K£÷yéûåIÕ›éÎN1YƒTd‘kmuO~Û0ƽíGü·KDû|››{ íÖWã“V>m—%oB’÷øøÆx†ü’õ¯Ÿ]V5q…³ i}¼ç o°g˜0É<½wƒud™~^ÑB·×Ýï²O¦?xq¹îßì[×ýþY¯ •7ó˜‡D£gÜÏ_ÌuÈeFOÉ^Ée]nà´]Ê—N[¨)oçsß²–Mïž©& ‰>cæ«É-NWNšËpËn›]ÔåÐpÈIH7M"ÚHtd ±„ug;×¾¨ÀïLïˆHâÝž|@TôÜ;‡f™GŒN6xy1˜É}&ü2¹“S"£‰:½•àٌѱèñ£Á¤UÁ_ÍïzêS)—v’Ø=Mf {|úŽÛ^|Á3V$“ïädò§qttt• lH-?é /l¦é¬³? =GËGü¬ÍÉ~iÊBUíÌ(o¨1¤n5ÞÎW§MA»‡T`o zÙG³.l<$Åc9~e§`3À‚Rc¿ý¢DKlÉX'Æ¡áKQ:®bÖ–ÿGy@Àh Š¯éžŽ†&ü·ªèQg›Üžƒú/b±– Ë!ªIK½¥—‰õ÷ÖøwÄT6j9ÿ.Q5ÌÄŸV´"WmÛVñ[GÊ8²*8•¾íx:÷íz-žNuÜ7!  B*½¾^ŹX@Rú,E`RPEU–¤uc7Ÿ¼‘¬ÉŠMo¯†3TÞô»ÉÙfúäv”#¶Wúá–~‰êÉ“ ¾¹<^MºúUI«˜B«ÈÈÄèü£¡fëÓ5.¹¢‡G=e°u"Ê)–kádïqÌòìj&Ø—Ž=Ç™è£ö'rßï´‘w<¦/Ul¦b±Éñjª_óÅK?뱤ß"aG$&v,˜¸1‰dNmÌ×+·}kFšheõ²Ä¬½‰?)ß8;ýùR¯Á>s¹”²ìÀã9JŽN­ÁŽRjŽ¡ïÚ­WŽGu²(<Ä¥”’MQé~Vï»õ·ñXhxã%r²âÓä5Ú ±ã•Ÿ’p†ƒn—ìz×M Ðì5šy¹œ0ˆX“Ž#ÃتT:ël{ ²¹QbÙ¦¤ôÈœ~züãHyøù„»“ýf±ÒL’‰éí@,­ñ²‡v+€kJF’%œfŽ©ðÝ=JIU䪠¥‹­ÐWC#|°Ý6Å×$áYφÃXÇé©3…þÄíAƒ‹šÜÌ7£*¿÷Wê×håGiEKk~¾Ri6¤mŸ O‹YHlM$Àû4Íø`N³ÍW·ˆ~>Ûÿws´tG“›¹W娹%jÂ3e __ßoòRÈt9êW…jæ¸x º!‰“Ó@¾e†AF“e"¨ôH¦TœB© c;î¿¶î“:[©ËBåXI ‰JÇU á¿=„K™äâìØî¸ÆŽíqšÍ~êú7ÒO¬¿~é‹2GÉŽ?nx/¯sìõü–I5>ѸäxÙïbQNA!¯Ë$†!Fˆ`}»»9"ô1æ÷÷_•¦‚àF$»ß̳¶ä:e.(ÙG°O2¥eG¥Ð*¶|ïcß½ÿ·=Ž:žFPš>ß¼Ð!&ÒÊJ‘¼EÔQ1\)éÁ‹lay‚ð¾&ž¸å¦4ŸH’Á i鸣/^.G#Fjð Ðn·•M¯=îÌU[üÀ[^0ãùbÉ‚Pˆ–‰OÖña¡ÐkJœ¢VRúš8¯Žý\7þÕ.!ÓÆ Xÿ(r…w°ÅÍì9v4k—QEÖAJî-Oè4å¶I„ŽÉ….~@»+"|E^Mâ×…_÷lsˆX£øÍÞU‹«=Sò5H5ùµx‘!‰Ox3Ii ³›?6ïî êß<˜oX—¥>?ìáAdòDöý8¹)–éWñur¿ î‡xÐ~U0ýê˜(l+)âÅ¡~(Zh/Œý”eÇŽ*=ªàÔ~þY…аë¶ógt‚‚¿›fðÀÐÂÕSåÚ¼“ Bý/2…å{t¹°Jd·†î~ѵ9¤p •-–ÒÝÂÚú©Ò7}â– O¡#Œ-;º­Æ1 ÊYIP Ÿ4å‰cKvßF,‡ ï·ø',þՌʹ™šÄô<(³a‡ JÑMLžÍ,|?‘fÕþ¸7¸Ô*/XñŠ€š\Á0p$³õ¨ÏåoÞ Á’÷ù®Ùz_”翹w­BNØ GÅ[ã!­èGP.… ³¹H©Uý{Úh˜Ðôjd²faeIXµÖôÔ‹¥PŸxŒ_¦¢¶Ún´Jø==A¬í”Ú!Xr?ø=ÊØÒ&ÅËáþ#«hP ¤B~BÙ˜åªúæC0ò2>üá[ö“ þ,[4¹ºF-Óî7Vªý<…Ø2†ŠQ¼‡où,ÛvMñÒuiVoMcuÒ+ ç¼ >Œú~ißãèú|ï®>x&¥˜îVÒq›²ÃYR¬9^ÈŸ^ëB4Kþ7v x_·êæ}OŽÚ‘Z½½o—zÝŸ¾²BàŠ^°ÐŽ&Õ7~¦ ÄÿªE½ÍTŒ7h»š‹“µ3l’¢»»¥YÖ ¥æsxì'L‹WäÁ€×vвQs–þ¼AŒ™˜˜‹£”Ì$L—=}}É^-jÍïöñqâ:(ÕÖƒ;“ ¢¹‰#¯—PZ.ÖÞGB&:QQªU…ÂtíO¿}¨¦Y€€¼›SÕ9ÞîQ1ɇ›£µuWÁO”B$;;;düŽ9û"¾‡õvßt/“¼I“ÉÃæQ´lÕ/?.¿0Š‹Ÿ¬'ÄË¡ä Ùtñmð»+µUÐa xÚ/Ð,”h®tvv^‚žöø×kñ=»!i™( t½Ÿ¸!=éÏWøŸ$±»3M6“6 l†B+þh%ù¿ß‘4‚#hå䃑QP>®¾íÖšrÖîÏ…ÒÖyìn<|aüþ]Š6Š\š(/á#3«¹3úÕ:.ÝíËlóaæë{é ãÖ1i|ÐÞqÅ)ø©†Ì@Öì¬Þþ\ ÚäåâO?‡Ýþà GÁü–¡ÖШNñWSfÒ>¼µQáü…Ú›#yšeE°Ë”ÕÛ®dÚbÆkK.¶¶RŽY“ö#¢¢¤¹ÏyMô,Ї‰ÏTò}š†µaÀõdQnŸ2®ôáT^;r MMbÒ” 1Õ/»ÿ'=ºÄŘ˜ÐžLèŒd¬{ÚW1s~ú~c?£¬ÃÌTVÄ¡d=Õ°§?{6­]@‹¦*QgSPô,RN—I9¾N#ÏΘTÓ¦ßþþ>Y~úÊ~Ìvæ[oW¦úk hqA03‚³Ò4oïr8ßêã‘¶¥¬¬ì&¬[ÊØÑÍÇîuïµ¹S·Þ/ß¿ðwýù¯Ú>ì•’¢ÄI¯ç¿c?líj¨‰x¨´´ê”è}wfü¢œ¾s*‹#?= gˆöþØSðŠ‰©Ù#ÔŒËjŒ¦ ¨èùsËx!³¾ß GH”‘É ;€òI•< ¯Ïå‡!…_Ù7_ת}«|Må+]ÀpÕÖ|è,"¹ŠÑƒäädN› ÎD' ð$SЭt…Ù>We¥‚@É[~«a0¡ãË–lŒÄÍŒ UæK66¬šw£} &ûi­ÞzÚÛs|QÍæpAyœ™oÙ—°^cOªŒqÜÕc%=Y)c»ÉZ>†ê½j^ž"×v¦ú©³œ¥¬HÐÅŸ]|EÌör»!áxŽøDÊ~éaa‡§V lŸóŠÚÙ}¥è_d¶½¡z}¸—vŸû·ìg¾Qº.|¼¼ôü™Î‡{5ÁåŲ5’Ùí2*ÖOåƒu¾7Ó‚Iê¸Ò ;FbHÝ*AHKŲu‚kžôÊÉòΛ»t4]6ZsíÄbâ‰×²èUÛ±£FÑhúç[ g—ÁÛûå€È†=WÁ–ûë½T~§7½ð¿dÓúÀ=ôZc°ÐW>ZDûqqÌÛË&®“Ï*f §ß‘XXXÂ?~tò243£+®Êfšu¹Ý„á––viëæ%VÅ3-ñû£vsX…‡ƒ×d|"wCíòçXO é‡ Æµd¹vN·}ŠÑÂÉs¬øñöF7[¾šÓEõdgö[³'~¨I@ùXÝãép zz{½´¢úÌéè+ù†9ƒƒƒñ–µ'ãÚè%D<8µWÀÕv9‹Kr ŽÞü³–zÝ|=ˆwL‚ mWaªµÈð€6J4^ "|Iã•7ž–£Ô [:ïÕÆgÐË)*v÷|$ÌMÙa’M(nƒ“j§ÞÒw6é”oÜÀ`ÜëÞçS¹¯*í4ÚévZ€4×¹ji/Œ£p|úÇ]½©Óúãbi»*`šx“H´ÎIP0Íòò9âg6Æc—¾x‹Ÿ`DR:¶ƒð9TW9.¹<lóû¸S¡eÇ'ôºí 7Œ5käG¶Ï•3ÜFíI”Ìcâ]þü,Q7òœV¨Ó>/Æ#©ÁÞUå7ðRdbLظ­³ þýˆh9æ¿$\š/ð1IØàìò¿> Ë8£‰> ê¾²‘ú(Kíf©ºu0Yô Ÿ¥8O«ú9++ì)ïûޱ\ÉçîˆÑâ°ŽÚ·hdâ9åÅFBŽ ÂG½¤Òì{3ù Æþ53fϪ|7J…EÁ¯¦“/ú2­V^)që÷ ´5kŠˆLÌ8˪`šà¿B¸` %Œƒ|H6.,‘“ñXËÅt®Iûì÷ïæ†ýÔ Q?µÙÂH«×c»ÓÅóe¤J ¹ajE*”l†x[Y>æ71”ô˜Ÿp¨ÎTÓŽ½ÏÃiØ~ÞüG<æM/x´)4MÉPßö}ê|ÜktÛÕÚ§#ÊÎ;ûGæIÀGäÔÉ=õ±ü°[= ítëG5ÒyÀm  ½LŽýÑRå××hþ(g/¾¾ùwðh&¦¾Ôi}ûéÕ]•ÉØˆo߆2Dñ3–•âŠ=PÔXé”a{D“SÙH‚ö<%¸§÷ch~׬^%GžÝ{°¶= ˆê¬éçßñûSàW´†nÿ*W÷À f328\£õÛqMå2ƒ‚4þÝåÝܽbÊ4ÿ`Þ¯yHõZè«\ÿWÐ2_ÝjHO«Ó¿_jyÒJÌÆá]\ƒ»ì‘!ëû±Bö†iGf{Síþ<Ž ›¶îd¸TR—hÔ9þ[#áöÓ°†(òÊ«S³Û¿²\‡¿î“·2=Þl%=nO%öˆ7ÌfûÓÙºŸ“ìÔfóíÙy\,¥¦’½¡ÖFpž h |íèPÊ_£ÉTâ´_v¢Ëz<¤t6ö¢;9Ççýj–ûÄ™'-«°ÖuUbŠRHÝnžî¶õ"Çé¯q ýb-##J¾lL²vëà ­u­í/fÕe/ iv ,‰mU›uŽÇ¬ ìqZ-Ìy‚ºßè×5‰µøA2¾·°•}±}÷Ïû<–LJ÷…`p:u–í{¶FgµW|t’æE*èúm e_ ´´´"&>>~L6rëç“7Øû‹{~9zÀ“'æªÔ4üüd&w<–?SÅAžÍáíÜ*I~ÐhŠ$5ã÷šøû;¤îjÅH/ }À¶Ú‚^=Ö…PèS'§j^¬ú¾(#œL°ƒÛo8è²} úºÃZ›ìAÊKM ܼŒH8qCKtÞ[ì|¹ÒƒA°ŸÀ±j7Q€Qï°ÌÁú^¡„\KÅôêPhÜÖöâpÅ7Ö­/M©Ò}/4ÝekÍÆ€ü^À‹`fæ›ôÈT ³ú±ÇyûCtÓTÚ7»Z Ð(™«Ýaô""”H¨X±íîQèæoòZÜõ=m ÇŠž|ö‰œ« ëáÉÆâ‡YûƒM PÐ+òUUt'e¯’––y 2§YDGψÂw!6kßnä‹×Okµ.#å~¸_÷ÚqÞ®Álµ+D¯ÙœÏžm>`Ÿ¬Òó…¾ëztÒÎG”ØlÕˆt9E÷WA°U"I9C{çýMšD€¦ÐíÐ.`\N£µý°…ûu±™þí(ÕFË Œp¡íSQ—½xeåÛ~¥LAbTù~l°šô«ònû¾ºßðø$«ÐÒÑAËtÊ»‚1…o¢i§ÕÆ¥0ïò¶õœö~™º5)(ž™FÉ,|æÅÖÕÔ0Õ.Æ\qÄü¢øçÚ-fÔ‹ŒËbˆ¨   çmtõ©I‹yzr’ÐJ4ŠãºgÁKœÇƒ> ›Ùï¸àsé¥ÚÓRu í:+(D P[øª2ºƒ]/tÔs¾ùÃén¯Â,Agr…Ùîwðõ‹èÆß'Êý»C± Ð÷þj«šèµ¨ÇJ$§œƒ‹…>Àû´Ò­ ”Ä$TSð*ªiœpõtºGýF<±–Ý{H2{Jøëpщ‡‡xNóËÀbÐþ{©ŸDýÌ,z-Œ¤ù“r`ˆîô|b¢KWÁ‘K^Šè4íÈp©4턦*=«8LÈS)Í„Ž)RüzSx­—„õŽ›ÖgWËp±S'$ÑÌFîRG`8˜©Ï¯„E¬¬˜-‡?‡”¿nÈ+ êrAÕ«F>ÑÓ™ƒ:Ö7øß]ËÉÉuTšu ·qF\—¸ÃàST3)ÆvhT¹™¤aLLÿ¹Å¶È[¼éªü÷Øš_ÙþÂJçµëj>j{n+«c¨ôå$™#)åahäYœ¿5e⿃ùf%¹<-\0PSäzÛªKóûå½f·îéD¢ ¥ æf1ew^›á¬(ðþñZ,±_MHxoæLî<š­‚ÂBPü™ÇrMØi\¯êÕXbu½~Œ/8BSC ¥á‹ªlßH&³–%¿þKKšëÜ0ÇùÙ*tãœÏ?•FM*ŒEØô*''§F£7v‰ÄªõØÏfËR'½þ«q®^ì¹"ûC¯Ü´@úD[F~½ïÒc˜|A¯…Ì=š¦¤Žÿ³¤$Üs{a©ž}7šLœ ‰oÔ2ÄÍG}‰,šæ ½xü¢hOÔÙÎdÙ¨D‰·– MÆ¿·ïySPħ:5UWÁ&wÎ  Ê(s_sRZˆ òïü¸ýáXҪ˜ýbáY†f‘Ê£øån‘'V{ðÅýÍQÅ@ŽÖ‹G<æcå)ú@@Àê;2„ ë*oXîÛì‹»dböÝÀOÙô~õý;úÝîs)·ÃO4%šGA>G­¤ ¡¦Š´åW±´{ÌU[¸b80æÔ #`SAÙÓùþlP@¡…í[n³ï“qJ!Áümöo LùÑï?§ó™Íµ>M¦2ýݾl‘;‘Aj"õë©C#åÅÀÐPW‹×éãqM×ózJü^»K‚í0ÅÉŽ›ó½"Øœf¯2Ц jûz©(‘¿ë¥û~×sú“š‚qVîÏÆ?—Ú£ôüjÔ´Ò—'m*)uôH¬V+ƒªEav¬cîüÚ«ˆ ^ô¼äêÚ­Ø.G¡àe@öú€¶nãÌ}oTý§ñ2«?#9tÀÿÎ|P-±#Ÿw2[¤fR¢å1gF;Çîd6ñâÀï´b¦ Ož¼nâ¦<ß¡­6KÅ¡@ËT/%˜Ö€ð_g;Üíbo~±sê­h'g’WIËÒ¿íF%:ÛeüýmpDfñÅÛb‚œDÅ:m c0Øö¹N‡q{›•ÏlQvÞÒËQO£FM;GÌoœúA_w&¥!ð>›B„0÷Çq ¦n$¡Æm.˜,Üé§Æ¿šÒäº;KP­ å"C |¶rϘ7õ¦ÏFz±ê­™°+3‚O?¯^aC„hgþ~alþÕ„³l®¨Ùå<[²\ÀÅ÷7W,‘ð_äo÷ßõ0ˆˆrÆþÊGŸòtJ[¡€œStY:½I¨þõfJøþ|Ãoôp^¾d6|øôÆFΡ˨øë'~}ÌÚ0ж·'ír§9Þ%¨Æ^ËV_߇j©=”áU»²ð§³¯Xä³^ÄDõF©Š÷"»êVä(r>gÁ¸¼›Þû­– ÚÔï’ak µxvï""ðþ®†…ïΓöåË"¹z´Ñ·ër.ønQŽóNªŠåþ*ÊFÝŽf¶)èãÕ†:*ëãY`þ¾Çaþ~!ü5g+²J<¥Õåß5?^ƒrÖ]ÚKH“ärìK"gÙOxv˜`±os¢ÿÄV×’Ò€Ž×F;rn5:;›Îjt™3BÕœCLÎŽêw1~ПÃi/ÕjKÖy45‚ ¨ýˆ:„òŠ?’—ž }I”B޶'æŽç'l˜Š °ÝhÊHÔÑðBäõQ1]‹Ž'Q·Ç’êÂ-> ºuh,Ó¸ÓÌ8ª<Fƒ±±n½ƒ¬x UDÈIÝÌ7Ú÷;SÔÂdØ¿ë{í8[ƒ+9Û^GÆV/¹¡Ž3‡šSy(0d¿²fÊ?ggÀ’ú°´]'ÜàT>h䱺ÌÙ¼:ÅÌi€¬¨±fU1<$¡¦AO1?kP§vÛÄÜöàߟ¿±ä³©#¨t?ÄúM=Zó.Žºã&·© b¶Ÿ@~ðÿ‹âúä úR%¤soFÒcG#íhÜÜ¢ó¬—ëîøÃÛ§EÓ]¿_¨£+Îi”'$ª³Ã¬÷Ù±®0 ³˜ççÕ™pJÕx™ ËÁz2·½ògäuÎöØ.Šff¡ŽÙƒ±l$0;è¿›ˆÁ$œ3ÛL¢þЦ4;˜Âè½X>ò°Ç5ë¡ÉW Kôë³o§ç(W¥ŽF»TD“º´:˜­µ&DûŸÿj ãÛ<ƒ)tÙÿÃê™5™Jf¸ ÛœÆg6I¹ÑB±óíb'  jÀ;%Pö•øõU|¶Ú"b.Àëîfýš)ûrÀèb¥™—RÀx<Ò§=@U´t<ÁxmÎC.¬%+#}ùŽÖyÜOÍ•!Š­¬¢’¶5aÔlíaI’[i÷zãü 2èpÑ¢Wt(dÝôú\ÙnéÓŠÝ|Nœû9c…*õBÎ$"Q£zŒŸ1÷)/™]Áz¸°Ù7ùƒf‘© 'Þ—ìcß'.JAäÉ\É¡£œJ7["×£è #µ‰ÊÜÆ_Ô?$Ò“Pêl¹¨„P×+Ú»n'UÇîî~Ü<·^ K{¸ŠycË­0,Ml‰®Vgˆˆè "êð=¦ùyóÖj†£á žÀñZñ„Mw\Hý¶•y uÌB®¤4f0s¦dH\Ù%ÿ>¸FO ðCP*™ùHÆéÅ2½ùä3=÷¨¦VÁ%Õ—ÆÙuÆ`Žbö«ÞÆ-7pûçÖ/ ÜY ”“üRÉ4Sø9ƒBOC¿Ö–œ;…íìÒµ~@nãbçC‹ÿÚBÁGjûÔÇs;pÆÊÜܧ\€*¢ÊÀl©:¹ÕÇŒß Öô#¥sö}ô[Œu¦FO=–£òШ¥ÔËt˜¿¯GþPí`V€¸+m˜`–[.T» ´ùUcN c`…¨ù‚¤ˆ˜øRv…\-äºû,í|`êE¹MÊ®Ýe¼‡¬`N$ÿdcPÕ¥ÉEpªí}6ˆ°CÿA’Ñø CH”t?CgV4lÇ‚%þ¢ÖÝ+AçN™CsÔl¸´ ÿ{0,íÿóñüßÖpX¡`î¯e¾ºÿó7 Æ@™ü‹ûÿ;‹Úÿ5ª@„—‘C4Ér W˜¯rÚήßÀZ:°¼/Œ‰‡/HÑ!H¤.C`NÔ®÷Ù”ê—Fé«DþOà Ì! ùÕĵËÜiFufÿ>t:\rà“¹I!KàÐ?ñWAa:Ç90„ÆäŠ‘É=mb”B+†öß½ŠvÔk0hI‹×€{§äöÃlDD„ÿ· Ÿ\5¨ÄŽÃâ3/t‹ü‰Økª¤@T•vrt¢ÏÒ-=èK²¹Zijí†;B";q.û,,ÞЪ¾ð؈Ü-ªJ.©h‘Z)”-|33 ¨@ßG‡Ÿe3ÅÂa>]¡>…j !¤—'‰pøVë4›Ö§qb °”V ¸ý ‘«ÆL ùÿ~镼§³ChÙ+¡༴ŠÔ7 Ó ÿPK nYTÒ³{„„3d.iconset/icon_16x16.pngUT P(bP(bux èè‰PNG  IHDRóÿa pHYsØØú\¦rtEXtSoftwarewww.inkscape.org›î<IDAT8‘ÍKTaÆ÷S§ et†A²&!fB­”`\Õ_³ ÚEmÜ!´‘h×¢Œ h! ´h3!R^4b™ƒ¨4‰4*qgÆ{¹×yßÛ¢®:8pžóœçœ£ðÅbqA×õnê (ŠyttwÇ.•J£ƒƒƒ›5õ0ÙßßÿnÆå&xž‡ëº8Ž#«Õjz``àUXWÃDJùßÐ4 Û¶1 CB¼Ìår÷€ ê#Ÿÿ‚e½¥rx€¦i†©´´´Ì„Mz˜!PÕ=Û>`uõ!šö‹ŽŽ~ ?Þ°óÓ¤¿†Xìâ1±é ëëŸØØ¸M<žgbb>õ.wRïéì,±¶6¢Ø P­V‘R²´ôŒöö4©Ô7zzvY\|Ž‹aå2D£,kÏ󼆲Ùw ³ŒUèíýM"qŸímÏó™ŸWˆÅnÕ|éØAAÜ®°·×ÆÔT7ssQLVV|2™sôõ=bròÉßk×;Rrµ-AòÚc^ä>²¼œekëßß¿Äøø4CC7ïÔô Ò4iK\àŸKWøðõ5†qžtú)]]IÂÁBˆF)%RU‘BàŒŽrcg‡ëÑÞȺ®×Lmê@J¸ÃÃè…¦e¢@k+ªªÖ4„Ü Râ'“øÉäi6õ8uÃr¹¼‰DÈÍàºîgÁ·”îáDIEND®B`‚PK ‘nYT’>çãÎ Î 3d.iconset/icon_32x32@2x.pngUT Q(bQ(bux èè‰PNG  IHDR@@ªiqÞ pHYsaa•ø¶tEXtSoftwarewww.inkscape.org›î< [IDATxœí›}XTeÞÇ?3gμ8# €‚úø’Wk%©»öÈ&—ø^iW¥YZV𹫬m¹šnú<»m¹—¤¡ø ¾ .˶Xn…š¦ä ‹‚ 3ÌÌ9çùã88Â8êó\}¯k.†ûÜ÷ýûÝßó»/÷9£¡9rd„ “ZêçOH’¤‘$I$ EQê¬VëŠaÆý(þ–¥i©Cqqñú^½z=«(~—í²,#I6› AÐQ]]e¿|ùrÚÙ³g_;v¬ÕŸòt-uPY–q¹\þ”{4õ^ȲŒÓéÄétb³Ù1 õÃóz½~hNNÎ3111¹þ’«õ×Dþ„F£ADQGmm-¢(bÐëi×®]×ððð=EEE\²d‰_t¿'pß}P-NQ´Z-Z­I’p8èõzDQÄh4šçÆÇÇçeggß®l¯p+u'> qÿu8ˆ¢ˆ^¯w4&“éÑààà#‡þU« ËòíÌïÜ oJhÐh´ÔÕÕ!Šbý§5t1›Í{ ¦ù*ûž°· ÷ÂÝß5ÐhÔÿUŸp# :.Èh4®ÍÏϳÕhm4 ±­V{ Šòµë hH‚ &ƒÁðû‚‚‚exÚâž°€¦[ÀM„º@–¤úvO$èõzAEQœ_PPðî­pOø @ýP¡¾]«ÕÞ@‚›­V+ˆ¢8/77w¶·r[L„îÜ¡®oA-ååå|ÿý÷X­V@ÐjÑhµˆ:z½‹Å‚Ù܃Á€ÃáÐY,–÷rrr¾ö&aòŠ€¦w§µÐ0 ¸ 1™L ÓéFYFQ$IF–%\.'WªªÐ –¶m‘%É`6›w¤§§w™}•w­ÑhEï–æÕy€¿`³Ùxë­¹frà€¨(¨¨€¤$ii 118p$}útBEÊËË9|øo,^¼‡¨(…÷Þ³2iL˜p•uëNðä“OðÖ[K˜>=h\Uº#IK¸c[à‡~`ÆŒ§øÅ/Êøê+;ðí·gf„ç9yr)íÚµó0rN«•õ›>eĈ7Y½º†É“e{ÌN\Üa·Û˜=ûUàÆJ²%Ü‘Z`ûömŒ3„_,eËuñÕÕ0v¬…•+׳råÿx^¼¢@j*âÉ“$&ÎäàÁ"Þx#€¢"õò@v¶>XA^^ž×‹n¯Ra_ó{»ÝÎüùsx÷Ýר³ÇÆœ9×Óê¿þUǰaã˜0a¢gÁ¥¥ðÄ @DD«V}DRR`}·îÝáý÷m$%½Þ¨¦¯…ÉÛ&ÀWœ>}š¸¸ÁTTì¢¸ØÆ/ÙøzNN[&O~ÎãØâÔT”¾}áá‡áÉ']?~<uÿĉð㥜?Þë…»Ñ*Õ`VV£GaìØSìÜiÓuËrã"ÇC‡ñØÌ™üyêTXºô†ë×Ï ®·ét (2ùùù¸\.$IBjPA6¿†A§ÓÉÛo/b÷îÍìÜi#:úæ}££kر#˜˜˜ú¶ÒÒRæÎ˺uë˜2eŠÇq™™™ôëg@«µ×·ýôÔÖJ˜L¦[Ö¹E¼5§sçΑ˜8•ÓÛ i¾ÿÌ™NúöMeÔ¨xFEmm-6làóÏ?'<<Üã˜ÒÒRæÌ™ÎÆUõm’‰‰$b4oYw¿l}ûö1rä âãO™ÙòâÚ·‡mÛjHLœÈÒ¥‹±Z­,^¼ØãâeYfóæMDGG‘”t™ÇSÛ/_†øx8}BC YZÂmm—ËÅêÕ+HIùˆÔÔ:†¿µñýúAaáU,ø#½{¿O\\,§S§ë‰Ð?ÿ™Ï®][ ·³u«•Ô±EE0a„†ªwîô-Oñ9ºxñ"Ï<óµµÇùúk'aa>ɧS'ظ±– `÷î­îæßÿÖãrivu•]»zHí/Ëð‡?Àòå0r$ôîíÖQn¤§ß,àf>}šÊÊŸ°Ùœ¼ü2|ðtìè•L‡„HH°žÏ0ÊÊà©§àÌxþyê£ËW_AY™Lçνҽ!|öf³Ž™3Õ|>2>úÈcaæ8}ú€ÃÓ¦©‹w¹ #C÷ßv 3ó=zô¸epÛ‰(ÂàÁj¾²lDGÃñã·;ëu¸\”¤&;ÇÈjrX] )):BC£Ù¿?Ÿnݺù4¿×à §³þ{x8<û,X,ªsûÝï ÁeŸPZªºy3LŸ÷߯¶Ÿ9ÉÉz¦Ly‰äätñßoÐðH¬‘yUUQ]qûõ|­VUxútU餾p¹UìØ¡–‹j]mÛªíùù‘a&9ùSæÎ]Ðlxö&ôy <Æ»–µkÛpôhã*¬}{ 2qæŒÈ!&fÍ‚«W½›×n‡Ù³á…`Ü84H%Öá€íÛuœ;wûöbÀ€ÿôUõFðÙ ê;wfµ Ò“?åĉ>ù¤ /ªý+*Ànÿ²²ö7†¬,^½ ;»y9%%êöÉÍ…3 kWµ½²>þXODÄ(22¾ C‡^?mò ž œ;‡Æå¢ÿÑ£ìÞÍË/¿MZZ[ÐSY =ô0Z­–¾}ED„_ÿZ5å§ŸV jŠ àÑG¡[7?ÜÛúÄ HI1ðê«I¬^ý!¢(úª²Gø| 9‚ë¾û0~ö'N&'ç0ááqìÛgæàÁ\Ž?Îöíitìh#2RÍÙOžTCfJŠ:¿Õª³p¡ã  þ‘X^ž–ýûIIÙÂÔ©ÏÞrUÚªçúüë / ;sáìY‚‚‚X¹r ùËœN™yó^CQ¾§gOÕF=ââàÍ7!6Vu”§N©‰;›¬«ƒ­[õTTD²wïAyä_Õl¾ Ëss±LMBÁ¯¼‚Ø ø0€‚‚"^{íuNœÐQT¤£áÍèÑCÍú¾û`ÌÐëÕk—.Áúõ&úõ϶m™„xSYݼ*‡›:c^R§N¸Âé~ñEd‹…àçžCiÓ{L WÇCéÝ›3>|$ Îcýú1rd îlUÕýÞ0„—”ÀÞ½&Þyç=ââž|?•nÕ-`Þ²…šGU5Ó¦q!/Š5k:t tÆ Ú-Z„¶ªŠ®]»’ššÎ’%ÿMFF0{ö˜©«SÇɲâdÉËë@zúgõ‹¿ð)  ±ÅÄÜÐîèÕ‹êÄD.dg£ „ F›ôtYfèС|ùåßèÓçiÖ®µðÍ7Š¢¦º›6™P”¾df~ADD„χ°­›N¦­¬D ½iÙlæò¢E”o܈eËÂâã±lÚ„E’øÍo±aÃ&JJzr옂‘1cظq3^)í‹Î7ƒWåpSFòó±ØìXGDe›6a:tóÎ-_NuBΚEFFk×®¥{÷îÄÆÆÞ’ÒÞÀ[+ðéDèʼyÏŸOyr2ÎÈÈæ;k4Ø Â6hBe%!/½„xì—V­bÖ¬Y¾ˆ÷+|r‚¶Aƒ¨\º”ŽÓ¦aÙºÕëqRûö”ò »àß6ûÞƒϵ@í!”¥¥aIM¥ã¤I¿øœÎ–³3Aàâš5ˆß}‡);ÛoÏW'x[ÇâΞ=¹°mæ¬,>þ˜Ð7ÞÀ‰£W/<€=:W—.7ª×c8Sn.µC‡z¥¨/ð&ðËÓášØXjbcÑÖÔ /)A_R‚¡¸˜ Õ«‘BB¨5Šºk§š†£G1gd rqÅ ¿:¾¦:{¿>’-ìýûcïßß­†#Gh³?ÉÉ(z=ŽûïçÒ;ïP×·¯?Eû ¯0áë²GEa¿öt·ÉÄ>Íç-¼ÕùžyS´5pWÿ_Á=õ¦èÝÀÏÐR‡[M,î%øÅ z;ѽ•ëÕj¹}uî®éÞ¬þ-måüùó………f@£(Ê­¿‡v Ñh@)++Ë ~nû3~ÆÏøÿƒÿ ¿]ó©\[†IEND®B`‚PK ‘nYT íA3d.iconset/UTR(bux èèPK nYT­O58íí¤E3d.iconset/icon_32x32.pngUTP(bux èèPKnYTÓúÊS+ H ¤…3d.iconset/icon_128x128.pngUTP(bux èèPK‘nYT‡¥=Ié`Ft¤'3d.iconset/icon_512x512@2x.pngUTR(bux èèPK‘nYT2Ž»ÁTœ4¡¤Fˆ3d.iconset/icon_256x256@2x.pngUTQ(bux èèPK‘nYT2Ž»ÁTœ4¡¤ò$3d.iconset/icon_512x512.pngUTQ(bux èèPK‘nYT>«ŽJEµF¤›Á3d.iconset/icon_128x128@2x.pngUTQ(bux èèPK nYT­O58íí¤ƒ3d.iconset/icon_16x16@2x.pngUTP(bux èèPK‘nYT>«ŽJEµF¤Æ 3d.iconset/icon_256x256.pngUTQ(bux èèPK nYTÒ³{„„¤«S3d.iconset/icon_16x16.pngUTP(bux èèPK ‘nYT’>çãÎ Î ¤‚V3d.iconset/icon_32x32@2x.pngUTQ(bux èèPK "¦dsurvex-1.4.4/lib/icons/open.xpm0000644000175000017500000000072114141575516013356 00000000000000/* XPM */ static char *open_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 5 1", " c #000000", ". c #848400", "X c #FFFF00", "o c #FFFFFF", "O c None", /* pixels */ "OOOOOOOOOOOOOOO", "OOOOOOOOO OOO", "OOOOOOOO OOO O ", "OOOOOOOOOOOOO ", "O OOOOOOOO ", " XoX OOOO", " oXoXoXoXo OOOO", " XoXoXoXoX OOOO", " oXoX ", " XoX ......... ", " oX ......... O", " X ......... OO", " ......... OOO", " OOOO", "OOOOOOOOOOOOOOO" }; survex-1.4.4/lib/icons/Makefile.am0000644000175000017500000000474314141575516013733 00000000000000## Process this file with automake to produce Makefile.in xpm_files = \ aven.xpm \ log.xpm \ open.xpm \ open_pres.xpm \ rotation.xpm \ plan.xpm \ elevation.xpm \ defaults.xpm \ names.xpm \ crosses.xpm \ entrances.xpm \ fixed_pts.xpm \ exported_pts.xpm \ ug_legs.xpm \ surface_legs.xpm \ tubes.xpm \ solid_surface.xpm \ pres_frew.xpm \ pres_rew.xpm \ pres_go_back.xpm \ pres_pause.xpm \ pres_go.xpm \ pres_ff.xpm \ pres_fff.xpm \ pres_stop.xpm \ find.xpm \ hideresults.xpm \ survey_tree.xpm \ pres_tree.xpm EXTRA_DIST = \ 3d.svg err.svg plt.svg pos.svg svx.svg \ 3d.png err.png plt.png pos.png svx.png svgicondir = $(datadir)/icons/hicolor/scalable x32icondir = $(datadir)/icons/hicolor/32x32 install-data-local: $(MKDIR_P) "$(DESTDIR)$(svgicondir)/mimetypes" $(MKDIR_P) "$(DESTDIR)$(x32icondir)/mimetypes" for f in 3d err pos svx ; do \ $(INSTALL_DATA) "$(srcdir)/$$f.svg" "$(DESTDIR)$(svgicondir)/mimetypes/application-x-survex-$$f.svg" ; \ $(INSTALL_DATA) "$(srcdir)/$$f.png" "$(DESTDIR)$(x32icondir)/mimetypes/application-x-survex-$$f.png" ; \ done $(INSTALL_DATA) "$(srcdir)/plt.svg" "$(DESTDIR)$(svgicondir)/mimetypes/application-x-compass-plot.svg" $(INSTALL_DATA) "$(srcdir)/plt.png" "$(DESTDIR)$(x32icondir)/mimetypes/application-x-compass-plot.png" uninstall-local: for f in 3d err pos svx ; do \ rm -f $(DESTDIR)$(svgicondir)/mimetypes/application-x-survex-$$f.svg ; \ rm -f $(DESTDIR)$(x32icondir)/mimetypes/application-x-survex-$$f.png ; \ done rm -f $(DESTDIR)$(svgicondir)/mimetypes/application-x-compass-plot.svg rm -f $(DESTDIR)$(x32icondir)/mimetypes/application-x-compass-plot.png # tubesprefs.png stationsprefs.png indicatorprefs.png\ # windowprefs.png gridprefs.png unitsprefs.png \ # legsprefs.png ctlprefs.png pres-restart.png pres-create.png\ # pres-record.png pres-finish.png svxedit.png appicondir = $(datadir)/icons/hicolor/scalable/apps dist_appicon_DATA = aven.svg Aven.iconset.zip: aven.svg $(SHELL) $(srcdir)/svg2iconsetzip aven.svg Aven.iconset.zip SUFFIXES = .ico .png .svg .iconset.zip .xpm .svg.iconset.zip: $(SHELL) $(srcdir)/svg2iconsetzip $< $@ .png.ico: $(SHELL) $(srcdir)/png2winicon $< $@ .xpm.ico: $(SHELL) $(srcdir)/xpm2winicon $< $@ iconsets = Aven.iconset.zip\ 3d.iconset.zip err.iconset.zip plt.iconset.zip pos.iconset.zip\ svx.iconset.zip MAINTAINERCLEANFILES = $(iconsets) EXTRA_DIST += png2winicon png2iconsetzip svg2iconsetzip\ $(xpm_files)\ aven.ico\ 3d.ico err.ico plt.ico pos.ico svx.ico\ $(iconsets) survex-1.4.4/lib/icons/pres_pause.xpm0000644000175000017500000000067114141575516014567 00000000000000/* XPM */ static char *pres_pause_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXX X XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX .. X .. XXX", "XXX X XXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/solid_surface.xpm0000644000175000017500000000075114141575516015242 00000000000000/* XPM */ static char *solid_surface_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 6 1", " c #000000", ". c #214F14", "X c #347D20", "o c #409B28", "O c #54C934", "+ c None", /* pixels */ "+++++++++++++++", "+++++++++++++++", "+++++++++++++++", "++++++ ++++++", "+++++ .X. +++ ", "++++ .OOO. . ", "+++ .OOOOOOOOo ", "++ .OOOOOOOOO. ", "+ .OOOOOOOOOo +", " .. .OOOOOOO. +", " . + .OOOOO. ++", " +++ .OOO. +++", "++++++ .X. ++++", "+++++++ +++++", "+++++++++++++++" }; survex-1.4.4/lib/icons/hideresults.xpm0000644000175000017500000000073014141575516014750 00000000000000/* XPM */ static char *hideresults_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 5 1", " c #000000", ". c #D30404", "X c #1094A5", "o c #FFFFFF", "O c None", /* pixels */ "OOOOOOOOOOOOOOO", "OOO OOOO....O", "OO ooo OO.....O", "O ooooo O.....O", "O ooooX......OO", "O oooo......OOO", "OO oXX.....OOOO", "OOO ......OOOOO", "OOOO..... OOOOO", "OOO..... OOOO", "OO.....OO OOO", "O.....OOOO OO", "O....OOOOOO OO", "O....OOOOOOOOOO", "OOOOOOOOOOOOOOO" }; survex-1.4.4/lib/icons/pos.svg0000644000175000017500000004206414141575516013217 00000000000000 image/svg+xml survex-1.4.4/lib/icons/plan.xpm0000644000175000017500000000066314141575516013354 00000000000000/* XPM */ static char *plan_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #F2E9C1", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXX XXXXX", "XXXXX ... XXXXX", "XXXXX ... XXXXX", "XXXXX ... XXXXX", "XXXXX ... XXXXX", "XXXXX ... XXXXX", "X ... X", "XX ......... XX", "XXX ....... XXX", "XXXX ..... XXXX", "XXXXX ... XXXXX", "XXXXXX . XXXXXX", "XXXXXXX XXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/pos.png0000644000175000017500000000224112540721306013164 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“VIDATxÚÅ—mLSWÆõ‚mqDÈÈŒA¨¦SÚêtÌaÑÈ݉ø˜½8eÃ8#1dQ—‘¥/q_͈˜éÒÅ)&Õ-ÆéŠÄÉÜÔ ‰C*n”WÛ[nï>0\Ò{ÍžäæÜ×óüÎsþ÷ä^ A²Ùl2ÏQGŽÑ(Ý1ñÄáÇgd&’$=;.))°sBvV1'Ü3“® ‚ÇåÑ6H6›m bzR~`J¡bR~`’y(eee)BL9ÔPaÍ 4㦠##C"lÖÁÓ5W ‚Æ fb>±&þÕÔ…i³ÙdI’Æm—Ç·ð¬ÛW»ÕÕÕ=§.à‘Kùg# ~åêëëCÆ®VSLŒuMM7[N²Âp­n´NâbeuË|ñ£• w« Ê|›”Ev )¹Ýî%6nIII£#yð-999X^ÿ€ŽŽaâ¢ûUÐÒÒL^^»vÜe~Œˆ(þW ^¯—ÚÚZ" »ñûýŠ!5Šþ~ •Š}+®çgù¥ÝΡÂv´Z ¢(12"“ù¦–šóßP]õ˜Ô4­-×hr]Âl¼‹»GKë-É‹õ³8z´˜ü÷D´Z >ßø…l“õ)Í7í\¹x‚€†4-KMK¸ÞÐÉ“'½<Wxù¥(þöÄóýÅ?ذ^ËÐÐøEÌ’®ãµå²&’îî¹Ô8ˆž'Ó톹ú7ßžßGŒ»‹9‰ÏK{q÷Èøüàóƒ(úE?##p³-ÀÆ>âæws¹úu8ÅV.3RßðIr³oOm·5Ô^ÓÓçñú<}2ºMÜhêE§õR]3Lºi³*sUS°;2’ ÓÎ8~#-Åqy×ôüpe!Zážþó¢jy%!ЦV 馨íß©2W•À€ßÏþMÙd®ßFƒ+Šë®D¹#Ù¼å]ìgáó ­¡±E`iªuZæŠ øN4V+¿ž:ÅIâ³ìlÎÿÕýûu”——`\®¥¹ÕË75k-;vlZæŠý¬yø (Ú¶ý èÍ«i|ÐÓy£Ñ„Åb¥¬¬lÚæŠ_gfòI[ÂÊ•|Y]M]UY••""HÙó1«×­eëÖÜ™+²Ûé=xùêUbvîDÐëy+7—®Œ ««1&'³xË–›ƒŠ"Ô8Ààð0ååˆçÎ88H´N‡ûòåY™+& KLdáÞ½ÌëìäLe%‹NŸf 6O\Û‹Š^<€ ×³À`àÒÒYN”êï¥ÿ`Ò„úÊ}‘šøƒð\ÏÕøþš¹ ‚zäî¤IEND®B`‚survex-1.4.4/lib/icons/svx.png0000644000175000017500000000237612540721306013214 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“³IDATxÚÅ—mlSeÇõÂÚ®c‚qL†[%30F†©aÙ 2…ƒ5S^FR!„%ö¡ÙØÄoÆØL“Õ_qÄ]X€­ƒ:@äEAat‹ÒA_n[î® £ko_ #þ“›´çž{ÏÿùŸóœç\ Q°X, £ˆíÛ·kRùŒ‰5ÔÕÕJðÆÆFHJâ15£Ãá@„6«ÕŠ X­Ö´ü,K„Dz°X,Š,Ëʽ‡Y–‡¯ÈÿX»ÝnWõ·X,Š(ŠÊ½´&$¡ª€,˪6µÕWUU©ú˜L&***’*¡J@ V«³Ù¬,"¿ZR‘ˆ+ÂDHIIBµ5AØ»· Ÿçcæ‡è=—Íò×·ÐÐÐÈÖ­[).YÍo—ËésCA¾gçÚá´<HÅ›Íæa›$IÔ¬}•çrm¯pæ¬DVö\òòòîJyå –-[FIé®ý`ÒäÌ”j&lDÑ«ïéqR]½‚µo]À  Ý/2I’èèè øŠp8L}ýäO×ãói°î¹š’€j D7CŽεQ»á§õ@?…Å8{NÐÕ}˜9E¸u;ƒNùÓS÷9UÑMg×®zÖ½B«Õ Žld/—pž¶qäÇÏ’ÁX¨%§p&®Þßq»¯Ñ?ºg$¤i:Ëä_ÏÓüpø‚>Ÿfø(™­£rá8^©œˆN—ÅOíü 7ú3ÐJnDw/ÿ¥A&¸ÿ¤ `;|¸‚a†!  …¹sN»†8~rì‰7°ë!CWJKË7¯@³ž/¢ýºòï™Çá:£¡ã˜žAO)(àT¸æ.æx×MtZ‰¯ÛÌ.^ÌÁƒSOXѨ;[ÎÚ¾;ÃŒ¼~æÌ∨åû#SÑ ¿â¹5„!³ƒ§&gÒuJÃ¬â…Øl_¦<©‘)Gòù¨©¨`~Ùkt»¦òKç“ô¹Ç²xÉÛØZú½L¯ádÀŒ‚ò¸à©¯1‰‚WUU!Ùíô\¼Èù}û˜$ËìX´ˆCÿ pñ’Hss#E3µ8OIø¤Bæ½XÂîÝ»Ó^¹*¢G2Y–•þ)SY–•׫„¼^eÓÒ¥Êåuë”·lQV®\¡ :eÞ¼R¥¶¶Vu,‹áDQŒÏ’nÃOËÊ].½A¯ç£ÖVþª¬¤¢·—ê€Äûïn`Û¶M455=М2ÑSŽyÚ4”£G™°z5‚^Ïüå˹n2‘ÓÚJQ~>Ï.Y :/¦ƒ”ÛP¿y3^¿Ÿ“ÍÍ„ìvr¼^Æët¸ÛÛïêžéLMIˆUbêúõ®^å«={ÈÝ¿ŸÛYYÜÌÍåÍGøÅ>§vïD èõ /dev/null || { echo "Error: Inkscape needed to generate macos iconset files"; exit 1; } case $1 in -*) in=./$1 ;; *) in=$1 ;; esac case $2 in -*) out=./$2 ;; *) out=$2 ;; esac tmp=`echo "$out"|sed 's/\.zip$//'` rm -rf "$tmp" mkdir "$tmp" for r in 16 32 128 256 512 ; do inkscape -w "$r" -h "$r" --export-filename="$tmp/icon_${r}x${r}.png" "$in" done for r in 16 128 256 ; do d=`expr $r + $r` ln "$tmp/icon_${d}x${d}.png" "$tmp/icon_${r}x${r}@2x.png" done for r in 32 512 ; do d=`expr $r + $r` inkscape -w "$d" -h "$d" --export-filename="$tmp/icon_${r}x${r}@2x.png" "$in" done rm -f "$out" zip --move -r "$out" "$tmp" survex-1.4.4/lib/icons/png2winicon0000755000175000017500000000036014141575516014051 00000000000000#!/bin/sh set -e t=.tmp.$$ pngtopnm "$1" > "$t.pnm" pngtopnm -alpha "$1" | pgmtopbm -threshold > "$t.pbm" pnmcomp -alpha="$t.pbm" "$t.pnm" "$t.pbm" "$t.2.pnm" ppmtowinicon -andppms "$t.2.pnm" "$t.pbm" > "$2" rm "$t.pnm" "$t.pbm" "$t.2.pnm" survex-1.4.4/lib/icons/exported_pts.xpm0000644000175000017500000000067314141575516015143 00000000000000/* XPM */ static char *exported_pts_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #2070E8", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXX XX", "XXXXXXXXXX XXX", "XXXXX..... XXXX", "XXXX.......XXXX", "XXXX.......XXXX", "XXXX.......XXXX", "XXXX.......XXXX", "XXXX.......XXXX", "XX ..... XXXX", "X XXXXXXX XXX", "XXXXXXXXXXX XX", "XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/log.xpm0000644000175000017500000000061214141575516013175 00000000000000/* XPM */ static char * log_xpm[] = { "15 15 4 1", " c None", ". c #000000", "+ c #E0FFE0", "@ c #FFFFFF", " ............. ", " .+++++++++++. ", " .@.@.@.@@@@@. ", " .+++++++++++. ", " .@.@.@..@@@@. ", " .+++++++++++. ", " .@.@..@.@@@@. ", " .+++++++++++. ", " .@.@.@.@..@@. ", " .+++++++++++. ", " .@.@@@@@@@@@. ", " .+++++++++++. ", " .@..@.@.@..@. ", " .+++++++++++. ", " ............. "}; survex-1.4.4/lib/icons/entrances.xpm0000644000175000017500000000065114141575516014401 00000000000000/* XPM */ static char *entrances_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 2 1", " c #4AA003", ". c None", /* pixels */ "...............", "...............", "...............", "..... ......", ".... .... .....", "... ...... ....", ".. ...... ...", ".. ...... ...", ".. ...... ...", ".. ...... ...", "... .... ....", ".... .. .....", ".. .. .. .. ...", ".. .. ...", "..............." }; survex-1.4.4/lib/icons/err.png0000644000175000017500000000242112540721306013153 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ÆIDATxÚÅ—mLSWÇ—¥e†’‘!‚¢ ©C¨o CÐŒº)Æf:Ý¢#fq&.sI3„ÄȧÅdFLt©ÌBŠKÝ·É…Ê«²èÜÔ‹¼‰F@(}¡œ}(¢bñÔìŸÜäÞóÜœÿï>ÏsνWâ éõzÁKÔÁƒ%¹{Ç8p`ì\joGÔÔx/bb -Íoó‚‚<"À× ÔÞŽ”‘4k’ÑHÀÆddxÇÚÛý†Ðëõ &À† HV+"?QZŠ°Ù¼`V+=ê7@vv¶,„o€™3½)ÏÏ@DG?޵µù žž. á@”–2ÒÚ:f,?ŽB½,ˆ@¹ ¤âb¤}û¼æ:ݤQ¡Pø|>&jL½^/<÷°X„!@Œ¤¥ Åò86Å£ººZŒÏ„ŒF„V &ÓÓ=0Nµµµ>Óî¯&:èt0yEE-‡YÔ‹2ÄÛJá‚Î.Á׿e±rÕv¿@|<ª»HKCX,ÏÄÍf3-M‡ˆ KC #"»}û@ [6:ÉÉüƒë×od!|Œ6dµ"Ξ…¼¼±ØÉ“…¨ƒ*Y”âÂÚ8ƒ\Ý'¤¦¦ÒÑÑÉdâú¿×™ó;óç RW» 8ñ\ßËð‰N—–/Àáp°ãÃ÷˜c@“x›«×„G,"66Öû$·¿cݺuh—|@k«fDªeKàÀbaäÌ„͆ˆŽ¦¹¹‰Í›óضéa¯áryf ¬ªªŠàÄ-¸Ýnú‚¸85ƒƒÇKlSëòòÀy³‘¿®øtWJ¥Äð0  V®Prá¢ò²»ÌKH¡©¹Ž†Æ_IÕÜÀ馲JÅœ8Õ Œêè‘]lÛ:‹PÕNçÓÙò¥ý4]1Pyá#HLPŸ2k{÷z¹Û£›^@:›û÷ÕüÒvìL%ýýOobÚ…!,HR ¤ ºº‚©0?dZ¨ ën0ê×´²« ÙoõÖÝJòÛ±|UÐOwÀé§\.7.—›áa¸Ò2Â¥ú>"Þèâܽ‡,ÁhüA6²Éó5ÔÖ aìd÷Ž0Z®JTÕ¨èëuáp*èí´w§p©á!Jåv¦¬Æd2ÉšûU‚íAAOÙDÅOÿ0×&©‡š:?WF£TüIoÿ¡ê*ÞŒTÓpYbaÊ* †3~™û•‡n7{ÞÍ!sÅzêÕX£èìbõš÷1;q:›&Q߬ ~^Ö¤Ìe3à6›‘²²øûÔ)¦{<|™“Ãùû=ܼUMQQš$%M— :XºL˱cÇ&e. пs'Kïܽ{Ø·~={"#Q¥.¦þv+fóM4š´Ú, 'm. ðmf&Ÿµ´ HNàHy9Õeed—”ÈÜ>fqÆ2֮͒¹,ÀçöïGX,„mÝŠB¥âÜ\:ÒÓ‰*/G3gqkÖLÙühBU~>v;õEE¸Î j`€i!!t_¼øB沉Š"z÷nBm6¾/)!æôi†‡ÓnôµýJ*ÓÙ|øð Ž—l ^µþw€gJàë+÷UjüÂKý=÷Ç÷?Æ ÖJO2IEND®B`‚survex-1.4.4/lib/icons/pos.iconset.zip0000644000175000017500000073422214206024133014653 00000000000000PK –nYT pos.iconset/UT [(b[(bux èèPK •nYTÇ¢4½¯¯pos.iconset/icon_32x32.pngUT Y(bY(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<=22ò}¯×Û};s•TÃÐÐÐßF ë·Jœêœ—†@(&,²&¬íÿ ðÙÈ$ 뾆¢(èºN8Æl6Fñññ_VWWïÊ ¦t]§Ð¦à»¡aˆ "è†ð÷¡8 Í "ÿà_8ÓÅýË ‘™1†a ( ‘H·Û­º\®gº»»/vvv:ïÀ¢5…*¾š!œÖ¨)0!ºÆ¾7.rî£ ¯ýè–-ÍGD[©(¨ªŠ¦i8òòòp85"Ò{îܹ/ß €XUðš8v-Ž·ÀD<á§/¶ò%·ßl[‹Ón›3IQ”d*Ìf3‡§Ó‰Ãá(±ÙlW|>ß}™Òj```à}»Ý¾Þ¸Ô©Ê7áFñÿéTTT°aÆôU¨*"B4exx˜x<ަiI0«ÕЦiã†a,óz½¡yúûûÿjw8¸Ô©)0aV¨¦œ+“É„®ëLOO355…¦ihºŽ®éhº†ÕbAUUÿŠ+¾~ëþçèë+aß¾ ôõmçøñÃX,,‰ü'û’ftýúõ¶`0(™®¡¡!Ù¿ÿIin.äðá2 >“¤ººDzz$ É®]«DyõU·´¶ž’±±1 çSãelD™V=::ÊÞ½RW÷"Û· i÷Q\\ À閆Ξ…ÊJ\.Ï*D ¡!Äë¯ÿMÓˆF£Ó©ñÒj@UU‘”äwt|À;ïìáùçÿËõ¹]Q>bpðÓÓK‡ÃܼyEóçM L "¨ªšVUi†a$»›ˆðÒK?Ãå:ISS0u(O?ÝËÁƒß¡¨è{¬Yó0~¿¿ÿ=®^=ÁîÝ—xë-xùeÒÒ‚d»¾#€C‡~ÂððIŽ‹¤M°Ù`ÿþ«Wéêú±˜ÊºuS<ö<û,ŒŒÀòå0:ªf˜÷LM°dI„úzðù22PRuuyd “ ¶lIa›ÍħŸ~ƒ½{=[Ki)ÈðùîÆ .TWCs346Âädv–رÊË!pS\ü/¼p«Õšô™@×õäý=˹ÒóMíÜ{/|òÉJzènNš;'I~÷]¨¨€ŽŽbêëðÄ»³úÎ Ø„m¹¿¸‘Õ«NGÇW©¬ôRZZÈÙ³°u+ƒpå lÞ ª n·Bgg%¾ÉÚµßN;ʤtAÈÒŠg·J[ºK{;wì ¶ö»ìÜù$ªÚÇêÕ&›ÍPSvâñ 9ò+,Xq»3ÙÒEÁòá‡DW®$^U…ã•WX81ÁÑÏñ©G ´´›¢¢ twàõþ€Ç*k Yß9f;¡Åï'\_8L46‚®³°¥…ÚñqVìjâ~Ë—[0 {ö¡ªjUÖÀ·úÎ 0›‚Xe%ö¶6¦6mJ¼PU&7oF½y“¼ÖV~¬Y©;t›ÝÎâÅ‹sŸõª´"4 CD„HM ¢(¸›šPÇÆ’`ºÇÃÄ–-Djk)kk#??Þ/çœcm¹Sp«¦êê0áðEë¶ú@¶ÿ+¥˜¯]»t»Ýí"’ãGüΤ(Š„B¡àLLí‹ôýÿ­ÿJRŒšW§xIEND®B`‚PK•nYTrQ¨5t#›#pos.iconset/icon_128x128.pngUT Y(bY(bux èè%šX“ßûÆGwwHŽîÝ£D¤¤FKKǨÂFA))ié.¥DºCº»ï÷ÿßu½;‹kïÎ{ÎóÜ÷çÞµXm5\Z\D ¡®¢ŒaÿؘÀ}·lp<ÔM¼@ Âîÿ”~÷[àEo¨±·¾»½·ÌÓäççÇÿÆÍÙËæaÇïîéy(C 14T ü³²ýüÉÿN÷Ë×ë3“ŽIE(¼èÄŸÃ šÕ©ØX˜Œ;V(ºŠi,CDŠ\Hot&Ùs‹Íí t¥’R3‡%y7ß: ñ/j;á9™‹Ò"~ÿ²‚n[Yu£ï•Ú!Rƒ‘£J󦔔/«f]gó¡qÁþ’d%š?Ñz  o_õÇŒ–f¯û}ÐÜ\ ‡®öÅÓ©§DšV¨Œ“’®ÑÑÒš>¯šv_j ¾+)Õ/v:SàÁõD¡'²&‡vòó|z¼Š>è‘wØ9žJç5k`›w¯¼Z“:}êgGŒEf\!®ÅNæTO[o¯Y¨T5­_¨IQPUuÔì³;9ÛëŽvòç"ó×Bm”ë‰0:À_tî²½šœñÖý÷³iEÏçáÇ¢÷£Ôg×¹[ü›léKÆ‘©¾ °†'é‚Ði¸©±9 ×àM{Ž7·`dt´\îôžMƒË죀-‚E…ÈÈ€ì°x-5˜}Bf½ß}ÙaM«ÖÑ’¥z¯a‰ö­(þ“£9öLè·keĪÕÄ6¢@±úal>‰b¤ŸÓüÀ½XñgÇ×uî{)™E:tC¬øJ>võîwT z1©*½à™½ë³øˆ3È)Ñ3É/V‡:íbQ)…UÝy^xƒìèw·Ï{5„ªNh²sÂ$ ÏȾ–á—Z÷"C[Ó]çÄ¿nô€=º}‹ÑÙp[9T„Å´o'Rj/ äÌa¿ 6£=8ï¿>ø“ÞTuÛpÉ>–ÔxWîúLð“ÖlL™N< ¢*T„—ת1‡Áð E2OPKGgÙUÂåEÝrj9B‡ž¬e´m´IzötÄ>õ!:”A1ÒH:Xš…dò™´D,|R(Ôƒ‰Ò„„„T())–›5ºi†á ùˆ ˆÙ99O^°“=¨¾€™g hDƒ5ïÞ(]ïF<Þÿ«íC­½X~K¨áÙÜ fff|ZјÙ:‡­ëw*š9WzEݬÿDÊ´B|Ú‹2 ‡>3Ÿóúúš:^uqoª¢™‘H$\Mû‡Ý0e!0 ­"™ùv<i<)ªª»ÒÎRÊÑøy&uö-§C<Þû3B£ï‚›¸ˆ˜†Y*¾ÞÝ–QÔÍjijâr*xê‘ã×¢"–á®çôUz¥c;ÞÛÞR粦لنqUUrrrÛ¶&¾”™?Ù4XÄÄÄ€©¯æQYÂO„ô°zв4Óh†:°ù ~IvNɤ®—ã?²E==?>ÜázWäG²6h¤¤nWj­~#¥/´¢NK#/7äIÑŒê´Ø.Å!˜y)ñ(ã0L u&hT’)€yܼç2ª¤ßþ0ü×Ö¤ozº!¬1LÉo~m¼5’-›ÿ$ÓºaŽá99ó¼0 Å?æy±ô.çX… /²15¶{ÎíâæPCèãwQãVZJh &!]8#%¥*€D±H$@xh‡xº‹Êž|ÒÓÓéÁw—ãµvÃóEË¡H”µµµ$r­'–¬ä¯ #1ü4–ø@²Ó:üOñê­ÐÜŸ‰\% l|r|2Ò”³šÁAAL­,ì§{Ö¶æ­/AÔbNäL`Ô&†ô»ô:ð7áŒ\ê¿ËÑbmmÝbñ+’Ȭôñc_ëUW–ä±#á—ó‘lkô£9 ,B·†W…¸¢Nè|fJÓ•¡Ú.7ª­» 2‰=øÕFêKa· %eåìa”©Ý×4V‚Õ£ GÉ ¥_ À“YÕ„]çD¶¯sB) f((ñîÑ´>¡ª%ÚëÆK^•Q***¢cbæÿÙQ×ÒÚ¸½ØË’ôbOmÈî®íª†wÏÞY×w==rP3KÒ ¨7'ý9ŽSå4+Ú¶ö¨Va‹Í~AThþ¸§`]]ÝžÞÞ¼¿]B‚þ‚³ »ß^)=£—ç$""*6ª²øîô‰I@»²·—¹.¦-Õ dã!£Ê§ú|Cå9A'rƒòŒ‡Œ:‡<3óQZ1K¸X¸Ÿ²¡SH0±EX1XËc ÷áØW:`›Jô0ÄÝ"ý–kÁ¡$5ÊXŠ÷@üWã;ŠoîÏFß,µTö`•X´JÉž[íLš7z„¿” Ϙ,«f¾¿0º´éê† S^+WÏîãÓ‰¿Låh®ñ…Hêó3¥YiëvêòO5û¹“’¥:.3>Cô3Ž.hÌsxyÝþ„¡8šÆ¥?Óì'P*—¹]Í JõâÈVN¨¶¹9ýK¹°ÃHÇzâs—ù­Mª¬à‰žØµ' !Cá[G á¾”=“ÖDv šð™” ó¯(íõésã&R¢¶á™,í¿ Øb<d¼=ô©+=íh™è¨è7ŠRÔýI?#>µ`XJ”v¶ÊÊÀ³¥,ÕrôໃÀ_&°.¤².‡KG£–+¾/¿„ÁªCZûdë²¥a=Øc{>åÆ5 RQæ–­Ô>>À®µ’YãU»7Sw–Z¥ONŽO‡%sì¯=`"@FÄ$¤éµ~ûøQ góç:ÒÇÍJ×(;àZ#KJ8IÉÈÞüÅ%d ×mÍ´ïñ»ïýÍ»O~Mô aX±2ï¾ÚÏÈ,1ãZ$CÝ S1këH³OdìÚ‘ß^EéJ:O•»ÌþÍg’Kó¤[â‹ÌÙ/­l) =j9ú©òAY‰³Qy%*zz­§Ç¼](É£õðÇê ü©5(GàY[[[  • ­Ïigo‚ƒWëF{¶rBn¹ô9ªºSbP`Xaê¹Ò‚ˆ€^ûl¨”éɰ«R‡-þôé¶$ßÏWKTÊ?î£cá•°Fo9×ûòîb÷/^½éïÛ‹¦†½ Œ¡dÚ2‹¿5Np P\ÄévÀ2ïF_|¦¨+w¾ÏK¹Oíë£_(îe#ßþ)í»o5YVe=Û¨ o†ÀÏuÛ.®®8dd²"#Åæ— RwÀzúúì È$ËÞo<‰£™·~àýóxÑo×½€N<&Í5d5CË Iƒ €„ ¿à?ƒ /œ'­Üç(SöÊ=¶ªo#6Ü(`DVƒý™i AÃÄ_Ùý[†ŽÙ%ЮП€!ÿò·õqM@§‹ø ÀÖŒR-ȳˆ£œ¤–¥…{Zz²ïIŽdK«)€®ï¶–.'ØjÚá7µußexdnÊ[-PÜØ—ðìùtåë¦À îxZžvÁ,u¢æ:«NÔ-al¥#¼§§‡˜ad¶îfõcI’Xr%Ÿi䬋¯…4ÇÌÇ¿÷×ôüþºèÇN˜êêê¹ÏÓùßÓA¡É4¢ê‘:GMÅÇ[åúX¦ß‰Y§2¥ßÓˆDq˜¨w6ò=Zz|9\6ówdŽÖÑÞÔðú§hAbÔql ñèOxöŸU˜5èµµ¨kg€v¼Ýð”£cÌÜ[Kõ‹~ܬ'ÊgÈKymØ¢Å>0–§¿¹úÎ bà¾F$7p-_U’3] z‰ákkòoÞ½}³0]Š„‘ñ¥íטïmLjâ@܃ù¸qÿ³|R¾ûñ8Ö66± ö€ayÒ36}s»WE#"óøHêµõ3QQÙž€Æ„ʧ_Un\fÉ`Té¡LWY«%2Ào6Óg\|o¯ÞÌçúŒZ:ßûçá&<“V]ï‹7®³?ƒ”ýš,ÕÇÁÃã™lJMIñ¸˜¦¶Å¦ï*7Á%!9œ·hb©MÞ›ÂT[´*½®;¦ÅœipgÖ344¹ä“0T& pn„šl`Çß²iÇéÊg£²WôÀ ø¼ýg¬kƒo½4SE!¬çÛ+ÉçUt*Äo×Ußæ´g™ ’cÉØ£‘òr!»å€Þí£Š!üì¶(3^·7ݽ?+P˹‰LH(ò=˜už¶ÐÞãp¡If&üi¦Æ+‹¨ûÿe¦át?Eû³cß^]Ú¸ˆ“\UÜ ƒßîÝ$:øëï¯d%¥¥õ4µ Ÿn£¡i‘¼=YC€;ÃPò¿¸OrfHêÀdá²ø“‚øo иz…š³š]Ú9r/\\\Šö_¯÷ŸôOêVù=ÊxÎÿˆu†8ßwß§åRaÈÎ"<ì\\x4Ø\hòº¾ŽÑ½Þ-û²ÿ¢“˜šs!ÐN~8“e òÛ™`ã—ÌqËý«yÜC–ÿTï¼·^©ŸV‰ªI$’¹¢Ÿü¶Ù檋5EÏIÒf¤6 =0­Û®ómcp#KßáJQ>>šÜúèR2Ps"µºº" !´^òŃà](ûKÊ'£ î}„ç&òÜð#1qúô@•ù;ºª ™Fþéj‰lçâd}‘J÷#¸«»×И^š}r8O9W/VݶÎ~ÍËм‘©…a@–У?±7þf\髇Ã(åš`kà]B‡@;ö…ÇvRõaÐ9qe±ôZÒó¢GÀû–Õ¥ªï'èši(Ü' ·—”ÇñtÖHÃw„4oæ'b¾‚acm§È’§*‹×ñMq3.Õð¦jiqj Pû£T¢gïWFMÛ±ò%%• áhùù¹aZŒüÞ$|XÆ` …˜{2a•³‡a±±ÕyÄmmªmwnÂv¢yBJZùI·c 5H'«®ßŒÞMPKLN1J¬„kS ‘CÓ°ä.3˜B@*Pœ­„k‡Q\¿UTƒ2Ê‘o¯œ³zF—/Atϸ ˆ×Î Ó#˼s+ÞRxµ’4¸Å?æ*æ'Ö;ã%•È “²ðGeÎȧÝrUãi{çw¼ýŸ¡Iè¶\|LÂ5ä_PLVðt-E.6CïCÆYHȧ ¥ü|»~˜ByzZ à€Ißw‹ÂquÌ×Þ¤m;­t:’§Jµ[jHg`}µÏ5T²ø»‡ŸYrú°‚¦8£ù!W¿8‹'¥Êò^Ï. Êf†Ô…ÚgÑ7z%†·®a¨?ªLô¿ºgŠ’Üz_º0„ÜUX¥_¯­÷ª3Šª?彋äH%;Id¤º•“c`ÜF™ª˜WHe±áЬ'ÈըꗆKجF¶…»7•O ‘0ëJù6=„>ñuØwÞ^°Ü6øV¨³ûì¢Ê ܦS Q3Å;[Xhg*Ì ù¾#{”9I0©´•#ï7©VѶ ùcc¿¼îŒª(¹­ç¾£â}Dí‹ð»©1;?'Kgh!Ž3ÅcßXÛô'lfº·½åçÙãã$¡Ð©‡âù¢ÕÁƒq°±™Ä)Ûî´Á–§Ü™mæ‘Fh¨¨%¦õÜ ..Ò‡[œÐ»™š®Ee7‰ Ãë3kÒâ(ÔÎÒ¶+¼ÌvëÍ|«¬Ä]c;¨x¾½:.Ë©>›^è^±û€ÌȈo¹^‹ËøMZf÷ÆW2ö<ýúì¥ÿvÞ» ˆ;`­gªaœH„)YnÜ=ÀHÆ/îí8Éí^Åêú~Gü“ÚÚ¥j½²`pk¢¨ÕÅnýd™Ñ躋l©.Ê·óWü¯¸¸|nE—Cîøâ(ùòò1ÿ VýöjöáQÄ¡0šPQñÊÜ×ç­œ–P•È©xz.Tõ +ʶÄ7o¬w}‹µ=ÎØ‚ªˆoÄœº wÉW+œ7úÌkÞ˜¡¹£ß×JÁðtÕG²nwoÿ ”ûv½¯Ü²ýK¢Ü-v…áQ– ]æÛ…‹½Ü?oJâ):ƒª¨xœu=ˆukòìê€ï )öll Ÿ›gŸ¥²Ûmð^ è©9qßß–qžŽ9ù¼g”ÿRÕv‹û‚äU€6:§ã;o~1—¹È´¶Iª°Ž0ÀäÇZ¼RR"Ã%ü*ÕÉið­êçH·/H¹)ürJŽK--µ¾gˆj4¾Ù›Ú¬rOÀ_Ê Uº9Í×f.öàÇv·­I[½Zø=ôgÝð/j°qÅ\Y85¨×QESC±ÝîyÑrww7€„"#`^Þ÷ëý½»¦F•1t–;u®NNÜf?\Ø%$ÖéñYÂÎwËòÛVÎß•6x9Àr›”­ó“ªZXT½U"‰oš^(IÂËÑüÏØeNzÈÊMë?Çd …¶’³Y£ï2 3í\L£ò¿Þýñ0”Ùjvj‘íO˜õ¦kwGí6'k½û35WKA‰™wÝöKþ‰á„ÏиÈùËaOó‹xÉÉ‚¡m%¿§µ{.½¾×ÌGÅ×Úâ̸n`„–4£‘õ> ]ºpoû^$…fw4…Ú?t¸ Œ€ÖªÊüÓµ˜3v™%#8ö9Ë–°×iUûãÅJ/åÍ9ïlîÈbO:*ù9bª:é¶©™ìËHP»…,3Ÿ'ëc“—ÒrŽ<Ñßo‹€Uó ³¯ ÓLé:€eCá)¨Ôy!nôs¬jž²†…zãjDµöÅ ´ÅðÆ¡ÊãÝ1 ”°ä$ÞUáUNq¼g5º`¡ÖÚÞ¨­—büϧùaò× /”Ó3I‹_H(Wæ4K ò*Pýê}ø~wN ‘”pj —J\ ñðÀݶaPe‘íµÕS+[f¸)"§æÜ=SؾÁbhªø9>΂ZÊÉM@×`Éɨs~(—b m¸\UÁÏ2ý?E3܆Þ!¡ÁûƤX„*µ¦'9âñÕjŒlÁACñÏâ`¦êÚ¾AmjŒÁi¯Ê …ü­Di_î+°)¦,YÖŒV,ìOñÁ6e8•FëF}))ÓkŒ¸YÂo’–÷gAà‹ÔB*n·àkætqwö&#ýððíÇÛ8Ïå`µÞi‹õÊwŒìŽcL“nìŽÔø˜˜D ¿~úì9!46 9Óù;³éÂdßëôèår½Í5hÍ—1 ±ÞÌ}ÓvX'ñ_cY<›È’Šº ÙÿÀc3+ÅŸ_ôó²™ää?\ýPø¼ébõÝ×z'¶¥Ô:[ŸÙš¼nÊßÏ3AG­é’^ÿí†È„D=ûË3ß¹”§›»’½‡œd¸‘1Û¿³yº:ZŽQŸä]=l>µá¤äc€èýŽó×Âî9gÕ^ …]æír±hXž>ÿ´øç šW‡êoÞ ¿gx¡ž)NM/ÂY› ¸„ËRË' >Y‡¹Å]oþ€GrFF²Ñ3¡åVI`1 WlÖzbGZº³c¬ëP¼wŽþ ‰¹™[;Té„;¨yìèñÉÅ\Nrqû쩎u„—ð¿šZZ^Ε»{¿½íÈ?V\[§°ÿE Ûœ4_.']™»ÞáðDWRB˜´ø =Ü] ¼}Ú?úé=ü+%s0‹—Hþ׿¶ceè ›§Hn8¯þx=±Ë|ÅàVø<]Øz8<6žBuíñá[G ×PTµÖ½š,¬¬x‹£kaÓ³  Îà Öß?܃²`§4{+~ø¬¥[€½7†²þYLÝä^!^UÙÀ€œâ¶EeÁ$ö vãIr‰‘·µ5JE!³Øìç¤ô­êÃ#`l@ƒ¶¨õ·—Ë~_%“ölúIÛmq>JùŒ1H«¶7•…#–Bm(÷ÀàH2öÿpÿ›A)º×î& Æö.´2Þ,øÍGë•?cVèëZ=/´ñÃÖ—Ù*áýÆéé¦ùÝ­³V<]¦vŸß8 wë)î‡LH?DJJÿnªÂ¬.ä!ðöbïi»¨h° '£ Ær´w7†¨P”0—ßüáyDøi*»îêÙhòiÁÞS½2ÿÃ%Ýæ£¾jfÙ {Ä“RŒÜÅm&)²T_ç„Ø`2 ´FöÕH¸‘t>=˜'$ô‘’„Ö½&ÃϺ» XŸ![µvÆÎ“ ¡ÇLà_°þ¿ÿ|öí =\`Éþ #‡ŒÐ—×;åÉû'åæ)ÇùRjp)ŦEš8Mm¬µ§N–Qé9q‡3«l‹Œæ.×— °8\âRÄäÈ= ²bjþ¸ qÐŽU;;ÌP·‚åRÇ›ÓI¦\ç„ö™¶JÝÊ?¿;)5ûõ»Ï hh0´UhRNX. †´Ìo¯†0˜±•W«;ϥŕ­CüøQRÙa3MdÝ#Ùœ´±:<ŸŒYXªUU¬šžB6æÍŸÿ=¿^Ï Uhwg¼m”øÕ@ò™_Ã_7m[3øŒFk`òB=œóôÚÝÝuƒ»pñ·ç¸Ö 0ŽÙnà\‚bN*¦uöÆxյѶõkP¹9›~…”êt%ª±?ÇÔhŽÞÒ:ßMS¤}ÁM6jà8ŒÅ“õí¨ß9ç\£ÄùÛ·Ž#9j^2r;^håbNI÷]x`ùÑô”󝨨V›­1PäïÃØeàg¿!5†¥zÜñYlúÔþQèXÐânóþ¼gUbéw{ïÍÖêDæR9J}y)úz÷‹Ø_$ë~e*,Ê—$váÕ»uaÑ·C€.Ò‡-S¾Ëëq CtQÒ"ùDÓ&§*šŠ8©/úÝwôàSåŠOÓ–Û‹-•fã;ê®ó{ø_«;çÏÜš¦5¸„))§Š9†•*¢]ß{á×Ôl?Þ“qñ4Áȳ Íþ~ËØ›‚Žï=ÿÙ`;ñT©S&Uµ>=U"t0ª"5ļ:þ© C³Çh‘ŽÇiƒX‹˜ÖN³H+ ÓíòB~ß±¦ü —3¢_§ôô6í:ŽuXÇÃÿ4 }ö¿§¥aOCÔ+ò ˜׉ë¾. œc|J|níF™=¦ô¯J«ÿ)?¢€;¨:AlW}Â×hNè²zœèdþCxê²€»Ñ°’ èɾM™ÿôšE5w MJ˜úyë^AgÍJ8A5È>W½ ‰»Cßë;úÉ_ìîÚ÷(HL_íåyNðø°N´pZ¾§2ÍÐÿ?|2¹—ïÇ#øòÙ;ü Ü4 Ú*•JVˆÿPK–nYTŸƒ(}ç€X•pos.iconset/icon_512x512@2x.pngUT [(b[(bux èèlýXT_Ø7Œî†FºQJº%,”P‘nî†!D:”.¥%¥k”’FºAéîÎÿÏó÷ýÎá½.cÖÚë¾ï_Ük­m¸ºêSB|Z|Ÿ)>z˜úü%€á~0ø ž£¢Ž ¸Ó£¿!?<7Áߤq}üÚUÓÁÂÕÃØÙðððà³¶·q15v4çsp¶LÛ•¦fàÙ#y-Ïôí¯tzíÔ­ÿhµy•ê‡g ŠÐGꔤÃü??*†…+²!˜ñϯ#hÕ{BJÄ=Û ¢Ã^-ï!²å]ªá žY³R/±†Q'dd¸:Õn¯nP…EÏN6\Þn|-öÉ<ÛM)vQÍ8*TV“ºHפÅe !QP¬µz0Q2ó'ÏŸZg¬Iÿãø»‡Š­(OðoÀDªîœ©ž4àÔÙT“^©º5¯²„ÄIËc Ðã®”sÆ—36TuÙ~¡1ÿÄ/Læ8² lýña÷P7¸‚^9©‘ƒÿà9-‚þw¨ËâÖäé_ñŠýûSGƘÚï2‡|`þÍìúãΛk߈[ÌõÇK£ÿ×§ÊŠ^e}=êöü'Pt|vVPðQÂáÿM©ƒé]êÍÐûq„Ÿ6 ðà¸,÷B`¹7 u\Ðj̃åȇ—ï~ƒn\xR¤™¡+UÒÿ5VoStà"/+wAfú¾l‹xoºÚ²sMö¬¡î«³Žng¥f“í&Kˆü´Ÿÿ>­±LÏÈj¸=¬1ó+ ä³kËѶW£ò¡½$Žø/Bm776tZÿ ¸Ù2tÓùaZàî¿ Žm†‡þr5é€ ‹|22l|ÁÖ ‹Ãó-7¯=¤òöñ¹]ô;›¯;\ðÙS‰ÈáŒyüïaIs pz¯åpŽSH!$:0 çS9݃,%l Žëp~°S²]À`Òífq²TÇeO-àrÔÀž4ŒÀ‹»¬ò8pâN9pØÌU‚„×f°0CÕôÁŒ®a;Ú›!¯£¿7_¿~ݹ_m1qªÝd÷vKõ%©‚"ãï4n§?á™ÙGªà“ÿ¾›[ݰ`w*7yj_ÿåÆg»¢WT%¸l+`kc£áFjñb)Óë/S,ÀKÛŸŸ ÆÇ y ~ƒ3ßóØÓ'¥'ökø£Ó$¬{E†Ñ˜Y–óÕEÒ˜ûEÅ‹"­[/1 Èô'Àïì[K^ÞÊßaK”†Õst^AÁÔp ù—&öNn &PÝ+NZ/_ææçc‹ŠŠ–”l‰c›ù­7.ÜšÓ`iá·´´¬olÈ ¥lß.ÌÎF–••‰¶-e޶Zë=/µ¸½Øv{Um9´`=ßxÚÀ~8˜¾¤âKç+±ïó­Ñs}Tÿ¬‡öc;Ë,RÕ’j’ÙÂóÉ™Y»S4[Ëí¯ؾ ‘¨Óý2 qòE#ýÒ-rE{vzºL,‹,ÓoJ°3[U¸aäüoN&oWªúø¶@ó† !W…?~ü¸ò:b aËú¸?cv ^ò ã;ß¹:mÕZ«’üUX1T¦›¶¥SùÆÍ´°‡CV–¼Ta+Ãw'¯D1´ºàjjÄ>ÞÃ^ë$DôðÉQ> ¿+|—2233÷T3$Oüÿ°[c‚YF騛ôç%$&'–²¥b_m:‚¦8ªj¬Rg9“[ÕØŠÑ– kI÷æ+^dŸç45Ñ1àH Ž~<¸”èd±aó×ñ!9>>Ím*¡ûeEñ0&ïç×Âññ±InTQaáëpAËg¿Yj%7Þt;‘E’(T!°¼ür\ cªxw¢·lI%ZlóßLÔ1±ì™û5Ñ™èŸwÚ¤_V‰ºøðdS¯ïîvå<|§ÌþÅôRÑžFöòÕ«¼ââMG/‘¶Xi²ö÷Äýsq³uQÆ/UT\vvv"“ù ¸üHÿ•ÖBŽ7åIF´Œ¿eËMýNeYôÕ¿C*W}«ª0‰<‘ÊÛ;~³Îxõ|o¥â`x|üÝà ê†èt*„T塊Šh(Œ&hsóí£< Ww÷œÚZÊì*?–¾3 v:Gp«ŒÚK¡ÎW²lä ÒD `ùÆÌÿ†u|~\Cz ÉÇ'¼/uÅÏ'ì˜æ4„=ts.J~wåîÇg®®®Ç–ç)'oÉéë脳ã˜g¿Aÿ™‡G^NMAEEå O•éïk+•Ñ ‡ÙZ»PBº.%ûxv0‘ÿàý‡Ã\¸§cuÓ/ùRa šúl¾ÌTÉ—ç|»OPj‹ØÝÝývpdŽ­¥¥•]VF”˜˜(áºN’û‹³+–)½ áXy‰Ì×7ܪqˆ¯||®–ïÜ&ó„XYF𤿠™´Ò0Þ˜@´‹PËÛ9b@Âד3aÕV!üô®ŠÑÑÑȇï‰Ì¥s¨ùCafÊÈœÆFÚÆ2¶et!£qýWiô“Ñeg¡ Ë•&»Ã?=jöó'®N¯W£¯l@\Ç l}FötŽó—«@ÂÀa@|T‰)ËëÎéÁqÙdÂ3­•0ÓF^ª¸“¯ÜgwsdÚ2/Öeh}è¦EMn—W0æaxGcpiÆî0R¶KñýÄ–'Å{þ[¬ñŠ·¦$‹>{2ÛÓÕ8—¿!,¿ ÀVÚ½Ö2öô|:}:%++1e¹ãH0?A@ò ‰kfUºy%A¾åßjWÂF؆úù^I,瞢ª$¬˜ ˯¹=cmåÓÉH»=A¡E¿é’0Ä—+n|£1F‹KeTÀ¢ŸZ9Uo||Üà ³Â­ÀÏ|®Þ)ÀÎÁ¡M½´Zš\Õ•T! d:4oÿ¹£³Ù6ËTÉnÛiÙ™¯ªÆâS\QECåºOýKi Î[¾ °ƒ ç)Ú@4lºËgélšÍ„Àp⑳gçä°°ÜÝqÿ#Ç‘'ªrÕ^k7ë_g1ê}µ¿´&Ï2Á)ÔC3kNûéñ¼¤Îÿ­OƒíË…êäE)»ÓÚWn¥B¤Íl]JÏ[¨±{ÌȘ|÷EëhŒ¨ÿjâÈJÄaó;‡Xµ„jö~ÿ‡¡ÉÉI¹Å™ï‰o¥N”v¸,Ÿ·sþ[Êt <û:0=T_yè4؆.ôOiZGpU©û$Û À³9nÁÀ®Bâ×èhð|“Çý+ôX;8ó³à"ºo¿Vþ$¹sç¯Å­*{œº˜eä|“Ýlm ¸=½ Y?6X…¯þ#¦»–ZÂB@ú¥¦9æçIº¦ZéróŠájS½óÞB²'K–¿¡Âý‹ cÉ¦Æ =YsžwBàc565Å+ÞuÓxj|¼þ«×–ä½-b:›Ð»µ¥å†ÖIBÇô-$$‚÷?‹ÒÄF<_—úºEU~ÔˆƒHv ïoi‰Þ|ÍóÑNq}¬na½¶QPV}½DýùÌ{ ±¥ÑÀW˜,º:*p»~=eŠž™y#¬°7 <«Ã,ü-qÛ)YX=È”Ÿÿf*†þDt»§÷C´SÜ2nštDCõÓ¯T¶¨®ªó8t'÷,¤ÃÊ^ž,ˆc"„$™Ôq{xM{O„R\ÃbܾUžâ¶ èJWôCÊ£4BGrhXk³@]_œþó<ôé?­BïA'¹š I_¾·»;h# NãG,g¨¶ÉX1Èýei¸æ@ae2[aYØMÑLDW(ÑxeÍQ+uÚÉ|qá–¯ŒuãW^€ºûÌ Y/IÎà Ë¢ð‚6Y³_Õmú[x§É°a“ûÎL@‚FƸj÷ͱ¢ªÞ µã…PP†ÒZü`þ°ÜiÞ›E^ ¤ÁîØËíW:’m›’¢×ÅW.½Ïã~³» —'oi;(AF6@rAÝà蕟xð¥@Àl°=é8?X!í¾±ÀHOT¼›é}ÐÝ615eu›Þg ò?ÆÓ¸Öíf5ØÜ¹ _U57Imy¾ig¾qa¿q]¼Š]eª}]uuüð¶f™,¨õUùe’QV Øž­#µŠõÍ_.Dòa;š¾¹¹¹¬GîÂh„>·ÍE’Q?Q¹K¦ã¾àµV#".®Föþ8¸ð½dÿS¢÷Umnç7oòo}R~½üÙ}Ú:wJ‡§i³L·ÀYFw•š…™«õj»-ƒoÁ0XÓ8UÙ­¸ûq'*€cnnm ÿÀìXqZ£jdá–wÕðO„p\šìÿI*§Ô{u›æ&s ªÊÝT}Û7Mxþu)¾>º‚/ë\ýø•°:*ÍÏrgåmrн¾ŸÕ3âÜ’}}ýÞÓNŒ1pASó—;©e}ë…ò¾´ ~’‘oíQWW'×ì´ÒEºLb$°˜!¾‹‹.+–¥o˜XÁµMKš¢Äjòû(7]ÚÆ9òø·}¢®ðºªßtŸ9Tc¢|Û›¦ÊÙiEÖGwš§æõ𹋴 ½Ëöö”ð-«oææ¤ò5Œp¤¾s«¥#kH ) ,î5y{{_n¥+cÏ^ø4–úüM±”ýðkÊnO¢ˆËEð¿ÏL~›»ä^ü*<ÀGJGWûJÔ@ÕÒÿç*å$™÷ÉV‡ét¯s·gzï»18øœ [jêô÷•*܉AùÖËal¾çû(gþ>(¬ú‹õL*ȆrûHŒšåaÇLê•€‚¢hs$Ln´üHÁÈ2‘ê¢sh&u¥Öa‰HŒó(NNÁàÖ‚ÎöTts’ïúŸb8¦¶PîiÐÖMÛ½Öû7ýÒj•š$˜È+µØä‘%üÃ:Êä› œ•››Û'c(Y8¦«þ{cêa·–Û©K²!ˆž˜ñ9gK£äî"H^üý/è HÃÛËWÊ)BX.kƒW{mL®­qá[¯C“½…‘þ~z²Ú:˜UÞÓ¯Où|ùŸQ—LòwzÝ—ÏßGö ¥/¹IëOV:,ÊÚœDÚa¿þáRõç»@C8›Ž@ennîÆA7SÛÍ Ô^Tdûw:´™ü/½‘¥:ÕØÂýHp' | (y8Sd´Ò;Ú>Z%Œ÷õcÔ™C–O ¶´•°ÌLÌ1ÂÌíŸòÈ^U²<¨««ÞláÁQ·Ä¨§ƒàÑ+ή0Óåìj%—£S±¦¦æ“„+Xn 4ô _yò­g<Ô¬&¤¦¥©õS‡)AqYÌqÿÕ÷]fX;rä‹’SçWÙyya €šìÅݲ–Ó7«Ø.ƬTådÛÉX_æú6w&}q®ù°#”Æ)áÙPkUÎâäÈ"é„1µ„ã|!¤q´ådèI€¨ÿõ9ª¢5 œ6¶®/œ“ƒÎlÑÞÖ–BŽÎåÀò¹4û_"bŸ>Å)«_ÆçÑo£`m| °«A€RƒÚÅ[ÔY0á›à)Šóˆe¯–žô€y¢¯,™¡dä*c•Q…k¶±N™šÏ²BŠ Z³À Ú§b"å›UQ²á7p¨©'¸þ%åëo]Ü‚Óí/}—8üɆF@3 ­'y¿¾€Á˜ª7ïKbëøýýHrBh)ï¤ ?u½"»”Çn³ ‹Új£±Jä;9èf,ö`3#µÛíõš\÷¼Ç"ƒÑçG²[ƒÑíÉ’ÞÒ-íêëbsŒª©G»æY@bá·ÉÙ• Fc·cU)k›Ê€öfÛëò·låRz™Ê_†=B(àÝø¦AËŽös`C~^7›<•Èz©£s±611¡$ŒÇåÂøí£-òÁZz°ÜíÅÅ÷JaÄtd`ñ÷¿^wñûëi¨Å @…Õ/ÖRý&±OF~Ëì(^-À xmÎ}„ì#ƒ¤<ˆ³)n›µO!ܸ](»ƒÕúñCäÁϘ³=¹l½2Òo4Kcì‰ÏÏ÷Sƒr#WÃÅ+:YJØNMý$`e¿nNÍwBB&ñO2DZVštâûþÎô¸ˆ}8J Xà<2Ù \ÑFöë¦þvc˜Ôs!¬uXdTfŒoôK)¬›ì+ÓH,ê:k|„Ü¡=˜²ã‚ß%ÓˆáZ«Æ3’Ò#Ϧè1áQ +ðäñõºøžüá¡§tú“ ´ô¿ö—HùÓŒdÕÙNt° A2S WÀ@$ˆ45Á®÷§í··~;c((z>cÿx~Z×f߈’Ü„DਠùŒª˜¿˜ñm*pGt}{»ã^²^Ð+¯/žòkNTÆÈ…ù_Ä6-ȶ<Hƒ5ó¤Å…‰ ÚñU%ˆ–ÓßnÌu:ÃBa¬Ö)Ë¿5ŰÀ¨È+tE<“]ÚÛ¹ê?õó“銢a ¦¯’ag' Ÿ¨­­í”Çý Fïž ØSU0‹üªæa<ëóÌ×LJêÔÝD ‰%–»&¡2ðüý»æº½ ƒjõàûÍrÎJ ‹6«àöB •¾k|Š «™õn±è¥ª´¸ЮE<¿–â…T–4ÊÒ”G´Çr-i%»«EœwÖš¤¹Æoïì}¹¹D»@M®ìÇ3Ô¡žÒ1 ’fŽW¶iˆÊäb#sŒò,ãý=-¢\%SºÁm4_åix»lûk ‰B”x!äZóõizs­Ûì¦Þ푵»Ü…ø|÷áRAÀF—ŠšëoÂä,72YIIIÇ‹ÕdÓƒåο0¿Ç%á: òN•ŽjyŒÁFFjV`i ­ß~XÐk»VÝÔ6*¸öß{²¯\6)Y•,I‘Pý@]1ÄlTÛ,uj~ƒ7ù{ˆäÓ>økÓŸÔxõê=(¯N,í<§™‡¢Ô&ÆÆ¤GGFªàÛ4É ‡†b\4d„Gì$û–G'’âØwソ‡ªkþرÀˆQg[€§þ|{®\Ør°c¦Æf H£J…Â¥ä ~”‹ŒJ 4&€HJ^IiøÏ·-ù3>óȯrü6×›óe•†[ZmÄ¿>;>/¯ã óXø®›½ ½ôTü/±0 ÿ±i=‡›&§Ò²XŠœN“Ê«™ÙÙ€$ñØLV5—…%œ(—#iw4Ó×}3¨ã€ëÞöòb;|c¿[Eº–îB”é³û ziŠ¹Ý _º&¦,‡¶aÒéO: ˆN]î\0q(͵lC²î-µðÝw$¿bÉRÙl“¨M¦Ùißö\Ú˜+»/\%x×|Ð/þØ.ÛÒ›äó0ÿ£SDÙµ˜-õ“éf0 ÇéŽpò¬Ù*óÈO»É$dÜèºf¸ÄÍþÍî\§ÒëoŠ©l&?™èäe–IøûáTc4ØG¼k|ùƒß÷ûåÍ/êôâd È>QÝ:¡qՃˤñ>! ³-óiª} h¡i•ûöÙ¡w f›áo~“ZDTE*Ä€£]@]C#ð`¥›1ö,yºmvv&†ãîÿhttôéк•R6×3+hœó÷gèJÂåõø¢¯°}ãûñé)4\Ù¿—ÒtCŒÆÎ6¬G&S->â|묣!¸À4¬iV2 2£…¿Ü\•¢Jƒ[µ¥}`¦û×ì…ç¹…$Ì)™‹™šßUtçà÷`œÑ2^WouØ»×åɈƒœÕ„¬ñ?íF ÔlçÝOw…±•ËóHAÊÆG¼9"A²rÝñøZw{G°Å{æþY¢ùuõIÆGÌÿ¤Ä0«ýÓÖM7½áœ6g°ØŸ±)7þ„EÓôŠŽ#pOä¨T'½×ŒuVe¬¯Rn2arÿn%w6{ÄÓvtS¸¹j·:Mc`±oHf&ãññ±b9—¸0R£Á5튊·'±bI…¦æ«0‰ÙNÝÖÖÕ©ÕyX`üOÍXƒ‹ø¢3õbqSþ©“gZ:…úyIúlÎELÆýrµOXä·Äg8ÈìK#¨ä&Ñ”'€ü¨&þ8’‹ü=a–?A÷wPùʃNî‡ìû-”a“Ñ¿C4#ÐÊǧ^OD{ÄPªœráO‹Ðì7ÀQiŸª4W¼ x !±ùð@ Ä£>ÿÉÁƒ?'ä·¾u¤eh¯S{ÎÜû.°úí8wºÇ‚×Tƒ @(±Jfty‹enÝœ"”v¦Ûÿ b®Wê/þ¦aàuÚ1:>uÑj¯b„æ¢=t5ß':0}` õ!»æŒ£ÚÓK82ë\™D±Ô‚޶Ëû¿Û!à„H¢±Ö |4htÛ ~߇Ëܳw„¦,ˆbüÀ0õq{³¸dxz¯ã¾Êï€Ã5Ò©µã3èK~èB °1ÀH'nßQï´A© fBåh€§ã®Üå0˜3„.\¼&[²€šIFžYdz¸y°%J6ó÷À1@5an~¯+†!ÒJyDö ”ˆá² $i™yYÚàr ù6 'G„0DÜŽ|Õ}²¾; %¿­a9 Q¿I> §3†}éדlþÜ_œI<:A>» 8ÚÚÚ ÙÒt, ø«÷íÍOËÕ°I¸Æ”jóá3~ÞV+ƒR §âÄ„ï‰ÜBXe µ×¾¨Ôš‚Ï,hÚ•ÝØØx;‡š—¤ô'Š),,´²¶³»9½¾8ÚÁ@o³Q‚,)ø~g€õ!:±/7^×Ùgè\¾v©n#ý„§¨Q»Á¶2$Zc¤(yùõ‡xëA´Ñ²Æƒaèäɕꪪ`Ø$¥P‹RI 1)cj´,a¥2­ïêJÿ|KØÖžSó?½ºx¶§Ð}TÂJ¤ñ8?ÍþMój/Ëi™0öÑ˧¸,­  é%JîÚª_'³ÏÖÚµƒzç`9’?«{à³Â,ÆÆ!WŸ„µ#Ö^b1þRÛ.4Óh¨²3ÆžÀÔk†,Èå lžÕVß.kOóá­ó»|úî±Å±òbVçf+C¤>¡6âŸÓ´ Dv ØÏIt˜™É˜ý RîÛÓÄd{Ì»˜7Ü®Kà¸=4à2ñ€ùþ .S¨¨û3¤¨˜|÷!$áЂ‰#É# \÷6¢RÑþ.€H¶Ìmh ùÈ¡FÄÎñ¡mÕ|Þò©lÏœrA)¢•‡’¿²·Ë…»z¨Q·[Õ¼sŽ {éßRÌóŠísS]™PÓóï°ý‘'“nQŒ2´ÁØ„Ð%»g £ëÖÒÖ¾©üúugëÔøŸ”†ä€kE ®•'J)„–9Ï•èúü4t¯ò.6¤ºÇ×ö¥£|ËQé£ã¾ŸUj¨ƒï ÝùŽC@$˜K&UñÄñ6ñ;—nå¡A0þP…Z\gù™÷9e÷%o×l®¯sFàò¿ÛÔâ~'Œý…¯" Ždð>[üOµÙÙÙ=Ýj •h¿°(ùÑ­óä ’wÀD×Ù «3`£ÒçÌ^ õ{­WýAÆOS·nèbˆÙ™ŠO^‰ßÂÝójk)‰¥÷tº+Þ h=j”e2«¦ø¾“ª·×³—!ùõ×™ËÎ#±òFcjš>»‘ƈ½yEüšç¯›!¼0éÛQQQ9§¯»•@u2‡œ³Ïe1ãö`€P™sÎ/“€òJ÷;¶rp'`Ï$ê¿a(”ý„h$†ÆÞT´Ü~~ö±Â¼²?E˜ã“'>"ëdÇÀýæÕ—9Ë&÷ƒ‰¦È$ ££¸ýÒ^¬]â¸Û°f²6˜ˆ,}&ÜXТñr-¹¹05ãõÇ#J•î;o@F”üä íP ³t±kí}1(°_õ‡ug®»†{»|2çá{¡K‚ÈÓöŸè¢¯0nWG{/®Àh77·!Мˆøx8a3‡ÀÔAø3ý“δ bú¢”¼ÜgˆªJù@_Ž9ØB#a^õ7åá½n ®| SJâù~¸Ú§¡£C£,¥ÀÞqƒÛ$ëÏþTÒãÔÒ[&œšpmÛì‚ÂNº”müçg< -ǽ‘~ñ‡·›c.þE×0ÀüŒ)ÈQ„DŒÒaX”K1R»rô“Ñп(:Ç?Áxœ`Üo8†[é‡5©e}%^–D¿# Â&W Üç.ÓgtI¢j¶ ’HìÃvms9–iï“ÙjŒn˜`Ûvö'§+=!!aØ“¼LÆ;VÔOÌEh[ ÐI!µ×,lÏôÄ c7'„>ýBf%!Axiü•a'Zx­çŦbåɽ¸ÍyŠI®Þý™Ø&ލJüÆüöíÛRiõ >{&Y§x€Î¬otš]€—(¡¯¥ë„üÓîœo?ø*¦Ù™L?¿à›œ¼òÖÊηžô]&Ïšj¶e¿ºd­c‚¡:YÍôy0P²ã‚à[á¶õR9Cò¨Åb2 zŽtê:TÊð½³²³ÅbÙìuTáudÅ$' Òµr«å¨ i¥jî|lv]÷ž¨þœ´M¯ZGIØ™¦öTN×¶_„iOºÿŒcšwŒ¨»tÆÇÇgÓRSeÍ÷(õÈàÿöÙèsðÑáØm93èÏ’cò9ÛÅÊuZ*-‡¢[§¹ß1¿åáy~#]ŸÅ~Ä=¥¤¥LŸ]yP¦ `ÂùXõjß#’…h ¢1åXúêýgþF)­wâî7a2àR?_·,Äž³® Q*wÉxyy_Eêsc€âò'€o“ÚSýú}Öî®ýœc;!ZÍÅ)³ö¢Í2„)…Rîï¹)î·uó‘ZÒ•Óÿöj1yÞ;àŽ¿eO‹î~%Üæ¤éÎdÎSŒ€8£áÛÆ*1(h Ã_1Ö¼'Ñ <”GßøÄ#ÚmP¹Ìƒ(_XA̶síÈp›Jú/%;@Ý„MDqû{-ëöšÃb(3‡ÑÉC- ©ß oŒW¸TüÆAº”@€nz˜˜ÝLˆõ(TˆM!ÔPÖ:TËÕ‡ëHÒ¢VøøAW\l]ü·ÊN¢{F=7vw_žâC›(Ljï¼Ö×ß±1DäÅÊ6Zÿ3èËQw¿õAZ¸‡ÆBZ<û:çœXnHîV:_-+¦ Ó»—ç“+¶ÀÜÎO²ã?¯·wû?’Ûdkâë'i/gƒÌD‰³ÔÖ½Ðd´€zÛÎl²¸wnóÈ›"(êõ ŠÃ/ÿÄÁÿEQ‚/OB(òtÄ,Âv¸ŠJt¹ðõ^ΙE“Tj‹®ã3€ƒˆ9G°Ã/˜üQûïå–šÛ3¤ VHŽ¿£”P´ˆû?U6XŸË9ïôõáiÄØQ?%ýö°†×¦7Ds fþUêX{xŽspºL]7q{Mÿ>2u…ÿÑsÐ2-{%¬{ÔmjÂz§XÔš¿FþuÑ„LIÜBâÈÐe*›ƒ§îfI(Ê;#©VРÅÅ·¬lÇȪ§ôuui 8B˜‰¿µ±qº½93íùp/ìѹåø! DƒÖù¼ç°õ\ìŠljö RîpªóE»€îáá¡3PëcG®E€|òƒ˜õéb’g ÑF£ÿG®Üö `r®2™(„ú¿`¹K`M 3æ/¨Þê·«ú*l§…ª³íEÎÞ#ã³`ìÙ»ÁHS¹mÃ=9ë‘»"¢¢Æƒé¾wC·…o«®ÌwJlG´wæ’"† 0ÖOY_ò×-¸žW^THÃssQ+1R|Ÿ<‚µü9šñÍ-‰Ô-ØuôË¢ïX›êXy ¢0ëlvè I‘H¾¿7fR¡e[…ee]Ã9!ž³TðÑo^¦]QÖ‹ yúΡûŠ÷``N;ƒy´æ‘}­ít—fþÒ—d!4È¥Äâ±g‹g‰M^1y§Z”68›ß²ëadèUf;Î)É,§kyYU¶W\©;†•c¯ätl»áÁ‹ð@€ULžF­(÷ŽÇ/sCÄGlBÚãî¿-¿F°,æèšrÇ—ÇGãú¼ÑTI4†eÀÐÇ2“2ÓþŸJÛélÞã_ê< ãH?ïî†ÉV2µ £ª=Ïî/››ð¼þ½'pß`LB¹†p¦˜’ïÚ\ó‹kÑB»|p>ñ÷ïßÈN¾ÄÀzK|ô$ÄHà²\³«‡ÇŠ!jÕÐqTEœ%Ešè†,݃|,À"WwਸèþXiÚ½\ÙÍØ®­²4Ë£$ƒmí?MæØL» ƒöÆaŽì“UÛ\ýi­&<]dˆl,÷׳S•§X…ebÉçMh¬¢ÍCé3¼öa‚ K0XC^è†).ü 7åã«_‚^ÿo$UÃä»&¸Ì~Oßhà+’nX¦;a¿ÑÕu:ìáÀ!WStJ3>»?µÓm =–\q !3ƒPŒæk‡"&ý«fqàÛRp{Ò.û»ŸÔ7éÿƒ=³OЇ9ñyº'óë3ã)Ö°ÈÉ_„ý4u zB`d<Ñ’9£ÿ‡vYþ3<›£Èô¬· ûëAmì!§»˜€ž×jâë&wÞÍ­­àð‚Ç7+ü6%©ág’1ï4ÿ"^óÏj"U†ûÄΪ»sŠ“Ïô%³î_Dtp0Û5ÇE¬9G€™¢¥¥et¾ÿcGì ߟ¥'­Ï¿³qÒÉ™}AtIFïeHÜ^œÎ:` #Ôúqò0;È FëF_d`„?‚zÌ»QùŸVg±0Æâ¨mÄ•?…ôöjU_ÓÔÑx\m7HŸšRÖë¯Ìãóÿt«d÷Û‘3å÷Š’“jYмGmSHÍÑÇÅ¢LŽ}ø“ê‹" J~ƒ(°ng|í=›ñ%Ît‘|O˜³X4[à}ú7[7t´´þ7Þzþ«±_0ÈŠUíUsaìmÖn•¸¾'Õ¤ÅfÝÖvô>ûðVB¬Ù†|ë5“–¦«›“ãÏt€õ|rrpÕ?‚æ½15µ  &77÷åþ)–UX§ Hм¿…$ÕÊW ÕÐ%Œ©‚XÅCD Â"ø_¬ÛŸÀˆ‘æý„tO‹=÷i ö‹ÔüðÁO8Óãôè ÅßGF²¥m®ZtbOQõÁ « ÿñÓ¦ùÔÇå åÒ#‰Eÿ¹wõ-Újj±¦R•¥z˜î\Ÿè@´¥«uÆL[d7@öËêx½X‡è¤Á“ÆŒÕÇW^X£jÝ¡„týANL8²>8fz›£ÇF'b,@Ï{ã :i@?Æ ,}/ŒçfÑÎb®qÐîÉ¢õ¨Ü´Dñ*NnàÒ7åï=Ô$Ýñá¾uQmk¼=¼¼H¦žÏ×~̸Û& jµ¦ë1½½Ï' vk©]<.:PH¿0²‚R0EÜ:ŽŒ…i,ÿ?ÀV‡«8fo »ÑÍ|M¶ÃDíÝû’ùŸš›› $pæîS=™jUnÕf§Ýx†aÏjxonÇnþ‘oÙÉt\†ÖP9roﱓšŒLKÙdB5’/ñµi%5ø¬Øp»'¸B/1ú”³à¡«nZB[p&ÄàLA^$£2ô<Ý™Åy´‚œÿ·ýÛIÌþÿWRSÊ% ɳ—i³.n1ö]ˆ–¯o-4ÆêSHMŠ3vçÄ”çÇÕ7iþZÒÞ>ÂÉÀON@}ü"ä¾ÚU•¿ý»• çÞÖƒ"Öi ) ÙV‚ J ¼TàÝûe9_4ê•ÞpSò¾1“¥köæðÁðz.qóÅ•n¤>÷þÖVR"”Ü*5Zæb3~ÏÏOþÇ_ç[r‰ÔìÄ$c´ÒOy:Pe5Qc啪ÊúůÌ74ô;ÛH€9pÜ¿/È0!æþŸÃùL/Þ±rBòŲMÆU G=7RpnÁàÜš¯v›>‰ÚP2úîËW?2Úmƒ°Å‚¼tf 4yµw‰-4{M5{ wÅRUë<« c³>5dŸj¡Æ8uÚ.T†V4$Êdsi–Ó.f(ôo?uo}ßîÖÒ2ˆh)d®Pby©?égGôŸñ+üòżrʯ ±+ÌêÇ¡ìpXaL³uÝ \šûýÂCŸ°žúÑ~:ÂÈvµÖŽ”ÑSòŒ•6Úd§úµLumí;ÊÒæʘ‘t+=—‡gº~M8)Å[Þ­—eO$û ;Ó-üÖ#yvÅ«\úÐP)˜S}M¥½´§à†ñ„5~vfff×ÞÖ6jºéݱèí%³€‹¤èå’¾Þoÿ$åÁ‡º €¾Á£€ I §¿ÀÿL$ϽîPåv]Åp’Ù2 šEXå‚5û¢ÚfUûwé'’²gN3Öíù.œèŒx¶wŒ#EÁ§DCµÐYP‰ÿDyФÛfcâýWDdMýÔº ,Ÿ j¿ËlýZúzÅ//^7{ ¶&–gWW“‡½‚¬ùHlü0‚nJ¶çý¹·R°›>X%MÌxæ›õ÷aÀ‘ì ªÖ  ƒDn{öÀѱ+ÍË’Ëš^-ì‘)½A‚‡ÆOµeðØ" œJßç`lO¢àwÉ6äê¨bEU¤ÊsrrìŽþ, ë[CIÈ„@P R¦¼Þö|øGíUæ}ýAß ‘–ÉÐ5Böìùò´­P(.•As~ç_Ó<ô¼#Rø Ø[çq#Y0íå“ujÓl¼£Ü–\ëþ™îPø»áœ¸\96 €õ%.^÷÷ïžUð#ÃcÅEEø‰òš!©`~3€IŽ SnA°ŒL6ô§A7bSÓ2NwWòÏ™„Ä>! ¬q&üˆ%ÎeETÚ¼#8~HœSVJAlj!Ò=öCsVý$Õ½oNY~ô‰K™¹çÞu:·¶3”Ø*dCæ¼G‘7''¦À^$’¨‰F½ôêûGj!3\²pLàÌk§ÎR¼;£««k1o ûdÐÝ6 ‚8±0À|§Jwèúf=ºÖv;Ïs>……¼¨îˆvw œ ä0>Ì~ýÚys¶ :Ïã‚ÊËÌäÜñ{b£ü³LH^Md_i·l]TÃÇVÕôÏûë–"óDãl¼÷o¼s 1˜û—§•ÒœÅЌ߾}«®iÚZ^rÚ\‘H<"bçfc³•hRGƒq¢Âˆ?+ëݻØŽèð]&·utRFù]B~I8ž"7^AÞoþÏú0ˆü\þRÈQæ¦ßÔ­€“"7aœ,¦ë‹Mùäú³³4?lxàÚÎM±ÿ€R^û—i3 D[:Y÷«CNeGƱ<>;Yu»3NŠì´%˜1ÿïÄÞ 8:§X­ …àbëëë×£.·*­~±®7icɺHýƒÑÿW;½¡æ¿v:Ìh›U/qÙÁ¡„ìî2O£6û–RÒæ*SW›ûäücvz-•ýð¯K1›Îv]êŸ×‚Àð”¨È“ñç4ÆÄÞ6D{õ2Iöw&&&|vAX/¡Ü…DŸÁy €ørmxúø”Oä·ûûƒR{F¥:žë9ïûƒH?öŸ Nžâ§©)OÜŒ£"`Z¹•¡é'UgÕèPP{ê­c{ZÙa:îç™q’¬¿&’y^eÖ¬üØëöP<,«m«aÂ|ÿ¾G ƒ+½é¸Cû{â³£†ëÈ3_ef–À6½ŽøÓS÷î¶Ó‚ÌÍævW¯^¬Ð(ÚÎ¥tð£&æÛ×¾²½e;¯ÓäÑðoI:_¼,»þѼØêÀ¸…Vø]¹£µ•ç^ËYPÞ æà%7I .3-†§=áþq0Â8»ªŠ¬/‰÷Ÿ4‡ó` ÈíÏbr²wèø9=Y\XàÍ# W|ç.+Dbv¾³c* ùdòl"k;Õ7ƒ Eø= ÷ÂmXùEˆA²I80^G_Ü26KßâbÍy8yu”PöP-¥;4Çô:þ©ÉrÞÈdAÊY®˜Îõ·ž“K“Z<%úb±xEÌ«³½=qŸ¹* @Úm Ø€¾xõÎ5]v#á †Ãò¯ËªÐ{±bRÿ»¾~M¡›µÁÕ¤ €qªp^}ÞŸ!5Iqû~Ÿäuü_îÃ4›·6ò%"ëï7æB»?%{!|€gÊ»äè’Ô“¡{tð¨ò ‰þ¸µ½>é:ûW¥â—Q±¶¿m›Ò:‹·$777¥åX¤5¨åfÅìç8ecSÐÄ‹®ÿO¶P˜‚A?ßÕõDÏg§Æâ‰ÚŠ÷6ùp«G hÔÁH÷¿Ü°²¶þÞÑE¯,ý(‚s»…ƒ¤ü/FEYµa9Ùµ*ë"c°'𹘌Ëj“ã üC[˜×€l—ò—æãlüm½Ý‚×N ŽÛÜ|«¥­ Q¿-õÊ¡­­]ƒ¾ #âTõ}të|2ãß=͸8ap©+,‡ûÓĉÁ `‹£OFHñßpQ;È”6`M5‘Ž«‰¯LvfÐ;OÄìŒy°Ÿýѵ{ìÜlu jå%›êˆ!xF¿÷Äí'c-©ðÞ—ß«#wX`S_ÈJŒ?©á¢¯Û9”\ί›šñPÎŽŒŒéÒCû±™?/D÷“Z‘è ð¼XMvZðZËùò¥“‡úÌI󚘆.záÙ¦¢˜It— oÎmRÿu­-Ͳ““©5Ù]÷_öYdä—;«¹KÉbæ`[’O8NwD…áÌQ1YTò{¡äÂÛ¨¤?íÀYqÄ`“³Û-É(íéxÛÐ眒ªx·ª¸¡á‚[dz ’ÝaPp‘báÆ…è¿vXþo¦Ûó÷:û•ˆ#÷Û&åb*«†+×å¡;«ËU}|÷ýy:È…Œ÷’ ÌäûÜÆüI}ã#×_/õ&N®Pš*Ë=ñ–ús;ÇÁþ­·Ï3u[¯/ ¨áxÉMëñ˲£ô%bçýº-U”Ó“.5z2,½Ó˜ÙçÄŒí—#‹mr É_›ÃM÷¿“µ¿–ûÿmï_ÿáø52²|yLJÆ#d\NF¨js£ýÃàÞßÇšHÆHeßóŒÔ߯}Dq•Œ(®L)µÛ‚|Aüa+]N™Æ ýo_Æð¯ Ô*^ñO-ŽY¢bbVVP’Ú˜$ä¡WF„ìóÍWm`’»ü-óæÜO™ 4Õe@+.z÷ü{ €PâkÀ´™,ë)8ü½g—6â^j†Ååcã,;l•ÓnÍÒ=SäÐÆôŠÖÍj¨1g㓬0ào tl®ùÿàe$|{kÏ0ëÿÊ>TLå{ÍGªNúT*€Â!ÚÆ=s‚p¢‚׿=;Kuª÷gQ<ÔhÐMΛ_ÿ½ÿOã?::úu«ïîû÷Á9+Ô’fëúLGµ ¯Üì—t„½rÊ´C´¨ @n~Z¬ýÅñô.§P¡>yl°û]¶îºý›peëÓ0¯Æ¨®Â­¯*å©þYçGUÉ_8ŒžÙ/·%MÜBHðÐáÓèýŽ_¦Ü͆Ú'!süL¿Sê¥õje Ðùÿ60_ß¼ûg`(?WEó3¯»O÷ìWMZl“~S½ó®ÝºÌi™=„>Ph˜âëÆ P3Å—÷u“˜ùPsm ˜u|Ÿ>îø=Ö%ËÎÍÍm4·xû–HN¥«óüµÝÕß4¹‚ x*8£ïž›Ã¹RŠÛïUÿ7Ž.þ@”Œà'„»$V šáCýä×ÔTØ-jïV5‹õË;îFK0›ßºëO¼¬}Í-6NkvUc/|[e£Ý}ºU½HÀÌ«åç–õ¿gÆ3äüš{¸—÷no±ã”ﵜ%cøJc#BÛ™-œšíèkÆoeýö­ä=SP€†˜‚UÑòB]« Úë+Òü53ó–’ÞIhZ ÁbÉ• ͼTYô¾½‹>ËóžÉ$> ¥"Ù®™Ã†?©$¤¥~w!R Ž§Êhû±)¿d®¦]Æ”ØýÀrÆvÿcêÞÝQœÏü¢$àŒ¼‰)Š©wá5qgšº>žYr‰xòU¹¹&6..G":V½Ù ¾æ¢»Þæ>¡YÈhºÞ‰Íb0=|Ò0€a‘•åA ®¡mÔHÐùÒu´€c¿`·ÑJWô'1•Ó‹˜î\R#†ÙJßé¨ìTß%'ørh†…bBaXÒ¾¦(÷Tl-YG#¸øoLM5|Ô\gB ““MÉÏÅ.nmmnŽø‹›M ú­Õü²:ŽçÕ­õË{®Û9Ú²š?¡FOn Ô/hADÕºµ½ØÆÖÈ%žJ‡z0§ û¿ÍÎthvøüyîîýĬòë2`ÿk¾<×8¸PТÇþ÷×ÞÇç*Y"”:rÔ¶mt+gS¼í|»®Ü+ j¤o~¿Í‡æü=TJÚÎ ´¬ü8ÀŸ'ðE'VÆØÛÚ¢"ëV[jsd‚ô–’¹â'´ÎYZßÜüq2i‹Æ^±2 j4öæaÌèÜ&ºÍŸ!‚÷ŽŠðèÕ“Ëž3ƒb%¬†ñÒ¶Wñ{f$a«§§ªA†÷BB×L¯ü<Äâô?2ðM6~Á3噼è{„]àtƒSªônaúï¬Ã£¼_ß„â[«"À¯Eqñ€yw²,™èÝß2ltmJ€üÍП*JÐv5¿×¤Áá»&Up=üoaäUV’ÆãÞÂٸٵCO)ÅÑ}OLcܦ Øú+6µ|0>³5«.oýÕ\ЬÒóßi)àœÜºäP‡Uךּ¢‘#?»òuiÛÂ÷ìÈ'y¿ kjkýÙò4Oÿª?ý‰Îjc;7š¦Â—OE×êÁŸj&½ \ž | å Aù^ô¹üæq»ý§ÚF>?³zûö‡¥ìQÊr·BD(çiÆ)¤¢w® H/«,sÂ꨹8å÷i•Oû´MY—Iƒa ¿ÜÙEèæ³“’+Ø¡ ÄrVIêe»€º¾~´§ô­Ïç-ïÙJì¥îÅ¡õþ‹÷™Yÿ¶({3™ÿ´þlÁGÐcWo{¦†`˜õï›[.CñIUñ"&úT£?# `ÚC›ênFÛS–Ç)®&žÓ÷öC§±½ &F›~DÒ@ªlæb:©µ»‚¶%2c/Oâ´|Ò½:¾÷MÆÆ›ÅŒ+Œ€6} g§£þˆ5þ¥Å­½\Ì#ÖhpjƒYr‹MJ Î’€ÄÃŒ°FÃC¡”G¦¦l”|za™™ŒÌý×e ³$Íßn‘>Ã".-·{þgR028%”‹{¹´íãyáÊX—ÒŸß¿2ºØðªr”§5 UJ¾—B=X¿N/'¤8òS󥼡q€3,D%Úä:ýˆ5°··åBE¾Jg_oüØÔtå÷ †ßC3Øæ×˜¸ª÷``„˜|BÇsÿ÷{¦åÜH¾ÿµ"L r˜]™Ô lLÙm»X \PÕzùr9¹íúH£b^¬8üO£( xëÆ“³¶.–Íw*¶e¬§ëƒ±CÖ,08Î÷ª©ìªŽê´»Pžu?‡¨ý £3üãå8;SȽ—zK¯¸xSÎC"¢Òä fÓ}ô­®ƒØ(ìâûr^q0®Ø$ïDÐÐûû¡wb‚’þo©ZI…<{êØš`knIM-åÎ#f;…Pâoùv^§¾dN†‹ïšáÿ9ì4ï®:ŸßÜ6}}P¿ƒ‘­PJ•據34rO1VÇ?Ú™¡Y G»î÷¨X'æÔx(‚®dÆa‹§¶èó“ªmÿ¿´ëZ†GïDÓ/Lælôì¨ßý#cWÿm tÑ9ÿ]Ö€Üï$¶XlB¦êŠ×bªr7®è³`å áMdJ®¾äQk?³z &ë²²·,V[²9P¥óL0ôú3J*>SgIÝ®6ЖüÉx8“]–›¼d ¯Ä“(ItèßlÀýDCSóãË2!(küÏfr5i§q5ÿÃ!STé*€?- >:õà‡èÔ£¡Ý÷ýM`ˆ ÄÀé'DåÏYÙŸ'‹kü®ËÄš˜ƒnÏãèKèó$c““ &!“l‡ìk±Å\ÿÖÔú1Ž «q¶²ÅPÜE^šjVÊ\³Ûò âÛòÁÑ<ÛâÛ}™Ÿ„)(¥ Oþ*ù@}ÉÊÆš_"„ÁØ„Ïïkò¢O¼}T“õ?\í»>J|O.1‚^BÎ ôFå<|¿ÿ…ßT•Ãn …4Dý¯@m‡–ïÐr›ÿ®†CŽ¹Û¸ÅÇ£[ ;ðÔ˜s²£´» T >mÅ¥€Ž”v€¿ø ù•+Ù¹}Ñmf¶YKÎ[>é0 ¥Ø§GOhyF³ÛòÔráo/­ü\»ÑŠ(^^±÷`~ºˆõýàiøsä·4BŒž@º@:Á°/|Ç¢ÒCÔØL¦båÅ`¡÷Ö —q>nb½ÙÝ4Ü“ó>¶’>üɆÞç`"À“AßaÛ)­²µ¼êÔñõÉH>v•s+nÁÍÞÔ“']ÛB´U=dq–XÔ¡ñÓs—XmÛí˜Xµé]›cØï¤áôIüD)Àšß¶)“® 8… WErÌtBÈž.ÌóŠÙìs~!ô…È|å” ÿû†]'qþ~f Gî¢G-÷ˬ‚ ÷7 æå<­Á„‹±ñ ã5žêÞônÞ;Ϙ‘˜O Óm‘ÊEz^G”\™ž „l[ö:ã`hÓñ!PXTtðª,õ;„|¢üue®êH4öI¬5u€/^ún]« b«ÎMóš*Þg¯… }sµL¿ ¡8¦·ð× þÈwÛ‰ôüÿ8¾ôçƒRÅÇ—ÁŠ^ù†Z´†Wλ¼1upàª% 8˜RÊx £±‚ÐeG Ï u`Ôëýág> ˜caò¾igÍìë™+üú5‘ÖÿÃ*•)`¬0L,+¡ì&%Û‡Çå…¾ˆœ CˆîµøUäE› ¡/ÿþñn}cBVƒìßKmºÁùþlƈˆ‰™\®–&ìÔáËö{] nh ¦¤ ø,±ïè«jöNû÷bÉI)Õs-CgÇçŸêo êfÆgò{Íe™¹öÄg„µ+ôY¸Omf`Ú«‡è£¡/Y¡”RTT”Æâc?&à8óë)S†;üÜÿ^Úãĉƒx²ÖµÜ‰¾’kÔÃ`!ߌÞ¿ƒÌŽGgœøþO;¤ÜÐàd¸’¡ N%…å‹ÃB±‹êÞw{7û.xíp>O…ä"’2°¼¾ó*’êAÆåìáµTÇWSù…‚áW†Ñ~bý ãðV(±Œ~Ïml|c Åm+ç)ÕÜÆ$üüsYÌZ7K‘+D<çCw?ìAß.÷¬Õð¶Û›=‰ƒò ªK_x;‰ÿ¶0 7#¯ø1ôÕ>ô1U´ïûó|þãDv[åþRW'CÙñêÎÎĉª¡AöËS!Ó]Í¥>R9Áûpòeñ¨(›mÁâ§Cýõ¸%x ƒoé;ÏmvÄÏbÍ­årGxq4’ ˜$ƒ– ŠKér|¡Ä2rFÃÕÆ5¯×~<$– ¸™ Ø‘s°¶þÞ-{*xô'%¨ßI`ñ”|ì¿‹h_Vbx±uóìe¡ÅOmèâ3ÄìVzùìl›™Ýy¯ rÕÝ“2?OÆßÜÖ—»·‡“l7¬gVÛ~´ 6讑qÛäë­W¯Ø(•é_UþY;'çmô½8”»uÅd6Wñ\ÌÀc Ì¥CFúœD¹}Qmöû‰Deîo_ë=ÿf Ÿ Ëú¶Lè*Þ%ƒWѯÜ‘%‘Á’>Ik=Aý»û@,w-0yõ1]}`L*ÜTÎû#Ü‚¢ðQUz?Ц°h°öØö´†BÊIr€äúP6DŒìû^­CPŠN*€<<Ć~‡bêw8›.[—ª¶vâ+ò¥¨žrèY¾ÆdÆ€¡³æŠñúT!víéÎöö°Ó–°ÌÔ¨ 9’øëׯõ—›%ñÏÍ[®ÎöžúùµxNT#mÔ(ùâÊ0¡LÀÐWl€Þ¥_p ôGù*i/ë{ȭݳ†ã¯›ÂÉ5·ªj„û©w–N ¾˜zQœó‘zÖ+j¾ì#`Ô°“­/áÃÊ4[HÒ=¶†bgßj•zº[ š)´Ù8úÊþçø¯çuž[Ì*€œôÍñèù2U[Øî®½yZ†”‡ÉTEktdV=Îúƒ„+d‘Áòê¯äíd&¦Ákâë¡:„‡!ô§ãðòò¢Ïjíš’B×ôQævÏ5T[é3avÚk+î›ütÂí=ßû`ûci./z·MQ9=»ÚÓæ3m-ìýJgÅ‘œq8†€ ÂS:óeþOÌO§¿bý@: Ä p g‹•CÕ¯|ÑT“?¸,++kîzˆiÈ]Ù8L,/ÖÓ*©©)>f„Þ×DÖµŸnOOU[ÆÚÌŠü:þ•‚¤yÕG—ïøÐñ úþ´¸Íƒ)΀1üú÷œïÑ€WÆ—{˜$þ1N¯›¯žeÕÑá-{û‰òã»k„­dÕËçL©ºÛ3=¬y–«6» ¡nÌœx2$!Î4iybž¡{³ y8y•üt="óåÌ0oKòºçÍ$;é¶îg^¤Å½âûçg¼Äï€Q7«ØÙì–XÝí6ŽÑþ\RB€~§‡9þ‘‘¦’RßXEMUa‘›$r²çç1 FKqjòäð­ò¶˜aËå–³…#_77Q"I³Á}¿e2æéqŽS;ÃyœêÆXô‹Ÿ<æœp,Rµ™B ¢ŽU~k±2þ¤@åþ¬ ðôècuL}@ÑÙªÍN~bÐMRN5û Üï Äè¥Å±åÓ{çWC¾7íØðÅ }ñK¬VcjÅÀ;KЈêüÔE_M~òÄ_9¬‚a4V¨!:_a0l« ùfÅ+NÊèZÊ:??’Ô³ûS€PãR;»–úÊÊJ*g½ãP89"&xÆçÜ]~.רÚ^‚[ç Øuw§®_ݰO {m·²‡²ö”®1 À"‰í˜Ž²ôßÚHõ”޹¼ôFg{“à_^^޾ýmyýL>.ÜLnrÆió)ýÓk„¾ªð± “êAÄg-ɬNw¯2®§¥ÂýµÑV/¶>@`hU Ö§÷Èb^‹R¡N£qz›ü–X ¼8Z 8‡*ËÑ«¡É_³åÜ,,hWŽAß¶|Û¯¡1ç«@¯âÀq%õAâ[pën ñ·];¿œœÕ¤y£ ÒÈ{’““òsµþ+ïª-Fb9,Ê’ü…²™õ-eî~ÒÀqÏæuT2o’€º9ÎTw\ ¶}°mú³Ì-FN߯ê÷„r¸™k$”O–”Eky»Xkyjwt¢5 gm˜^è ZÀÅÎØÚ… MMÂB˜äF Ñâ ç%g‹·÷ÁbT€¡`ñ›¿žÇ¾E^¬ô×§ ÿs/¿íz•ÿÁ‰¦†F ¯nm‚²7/ ÷6«®èÃ=Ë—-q:<ë³±ñ¿]38Ïï¼’m8›èŠ“füõxö#æˆ2ÔŠ¦©"™ Ž¢³“OXãáwÉä-- òðŒ¨»’Áì>SKZ¥‹»¥òžŠõtuH\s|äyD€ìÖÙfyj–øøÌÍ&±•Q¿qÿÏǹ®ò‚ËÞWÃÓÓ)ïârX i»-ãxÛˆ4/سþœ‰Øq~LÙÔ¦^s4SÐmô¹Àý{ùÌ%—~óì%Ò8ï»lƒ ùµ.ÅÕÙÏVpËqФIWÐz$úDp6ä^Œ­¡Ô'}bb¢µyÕ!`8Ûè¶e7!ð¡,û·$Ù[´€zÞ£¯º/Å”m¡w,%ÔÉzoÜ›sîãõÚŠSX¹‹2šëù´í¬âfXTÒ‘½êcËÞ[>ÖôbëÖ¬{ŠQðÞt@ùŠªœë1€kð-é’ï HzZZÇüxq)ºõžŸŸÿîåÙ‡2? [fQ¾©À[X;R¼íB¥ôM ÷žßíåd[jÿ}ó™’bÎ>w¼,²Ïbº=$‹& ÜÏ,½¯üÐ¥˜â:å–c#hqÝG:[ÆéŽpMLŸ™|1hõúG ›fZát ‰ìD-&ñê–Õ4&º>‹•É4p ôÕß8—«º•Ÿ=Þ×·‹×ÅÑÖ‘¢4@á0:y: Žxõ´Ñ$ÿ¬oÓY”Uk2R‰â•ezþÎ¥ƒÔ~MÞ½ÚÙ¶©®cê{vÀT’ÏÏåáciƧ _}“òçæIä“<PÅù}—Lþ7.z\fŠèq×v›öº@Ÿ/ÙÕêwåx2þª@†W‘w·kþw1Zoäj¾·9•²XHÅe!dÀº¿Uøwê5¿öÓeX€wF¼ÆëMløpnM¦;W'7YdgœâÝÏmµ‹_y(› ŠŠ¬“D>ßO>›eCà?ljô=lDZûè:´ÔpšÊõ ׯÄHEQ²4¼P<Ø«Ñ/«>5¸ìû+;oˆ¡ö]Â`åñ¾nÁnÄʧÛ0»Ò£óHÕ×l¸ð¶+,$%Œwð–L ¦•S½ÝŒ>Û°÷ÿb "ˆSÇór-¿ø}MåÁaÄS&? C0²‘—RU ÿ=–©þ7ÌŠÚ!‘3ëÛìØj‰Šç¿Æõ)Ÿ,qô.ìcÞ(8|BS`­öbýjòÀ¡É]‚½]àòtL ã¹ ünéòhE?!Çò7wÿ…®ÜJcYŸ8,;^ñzˆ-VÚ™~,(S!+„½# (øú­¦æ÷fIù¡žÍúƲ•Æ­²vÐEHò±øïKÝßõh´Sôé_š4ùFýfŸê<Кœ2Mÿ’ѧû%ö>®› <éÿà”â3këjôž yI–˜´V^T4 Ú¨™ƒ}è0=sοöæó¸åE“씯‰h=ïäÏmj’Š;ðØ™yGg_8ýàsiEõÙa ìCæ+†ë®»÷_Ñ\’©@Ú†–eúlF/_|sj~2#T=#ÐÛÞîë»ñß–a™™yú²LïL¢ˆ§€ˆº C÷ rßF^_ýúõ‹ÔŠ^EEm\0¢IÄ››¥ô×Þé=jÕeò¿¬u?Nàyã÷ ü&* ûøP¦ìÖZ7åþß9Ë6V¶õmˆÑûêU9ûŸÊóŠÇiÛ“¨ó,Ãëe*í}þMkhü_Ô”ýÀAc—9˜!u€¾®ìsº'I ?ÜSÚŸsÂbÀf‰1ûX”KÖcï×£Œ]n^å”Á¨bµ×ýUU,FÓ/@Ê|Ï:£Á­5“Oòž@´[ì ¢>W‰r°6¹•f ºæææ· Û£ßÔ˜@)Ðv33ÙJ|ý* 3úeI ¤Æ·”«o¡èKòõ빑û§³8 Ïå@î>?Ln‹ Æ!ÆfÀg‰ùc*»xsÙ fj±Ã4ÕVsñIÛAüns*ýÍÚá“;‘œ±:ä‰Fp—:)¿³Õ/ZÊ=û¿¡ø‚äpch+øñ(›Þ®âPÖ¼@w^°‡è\ë&¤áUxìøîºdµË¡b³öü»¯’û82ˆ(˜dèË~yÞu„ÿÍç²òqúã™ò–XX OèOêöH®lO¸÷WQ¸f«A>6@ÂøëÍs¨TéßP*²ð<`éÖr¯å gYëíVf?Écu§N¿ïO£ƒ4H>îÄd$eÿõ©ãÞ'iZßa«¨ARÑ߉ç¤Á¿šßRˆÖDT…ÓAùp{Ï„oP¿FeÆÇ Š›,ó-›Ö®ŒwwÊ$ÝŠ-òׄÚ4 ЇšAq_.ïZ9$äßuÆÅˆç$·Dãd˜èWßœµžÉðèT}{xP9ï>û»[%X’Ü âwÆ ˜_¦·B\øŠ®o4LM‡Z³–ûIúa†©6|‹/{ö÷ÔŸ³-ô-–PâÉG¨gJø´>‘pŠäXm5¹›c‘GT'ô˜FD8uþ¢»{êò3¡ðêAI´$)z¿l’Ê#{i…îØ£_nVÖzùvûÛ¨êFÊöz¯ÖtÕr2¨F_F#³1 þ[ìÂê³ó|Ÿ„KâÚÕ›i,ƒ‡•Ïjp€ç¼oî?3z¥ÿš––VZ@Þ6”~ýÚrRTI‹q™÷S!‹‹N@ ÜQ¾ðþ9!ôó¨5ú*ñ'qƒ¢÷Pf©ÙÛ ]ãݹôáÚ’ÍS]ØGb“Æ2¾U¹RθÉõ¾Õ\¹ù'Z>*w±â`)àúOw1Û ·¿%žŠ>ãR§æSIpø9›´K_Ý$mÝW¯Ä×Ð+"¬äBç/»Žïý›Âó{‘à`På,Y†€Û«E%IìÌËâwÎJ{ÃDl©®+9¶Z–sÎûÙŸt€³ˆ@Yò³@}Ù•Ÿg5ÄJûøÝG-ÛXYyþA]í-Š}0%‚ <Á`šZÁç…Ÿ™‘5“‘ POÊwÙ·•­ãìÈGhX^»â7Š3Ühû»Ö›vZÝ[üeWÈ4(—ºuRàXÛ‡4Oé«os³òóÙÕHçÒ»;µ³ƒ-7§³iœTÜú°þd¬õ)„‰nèÚ7|©Ï²¼JiUã_oðÏ¡ÊI—ÙÉxâž_ï“: ¤×°ÿÕõ[ºgÖ3ÄÜ~”mŒl/U¾\>ÂË­¬$ ôC&ù–ýSþßE¿³–µT›²œoIÅíB¨ü.-rzÀè~.mgÛÃ8FÏ¥ÀÜű胸 › 3U׆*£½ d3n³§} ³ƒ°s+¨0…Æ\Èn¶:|kùk¢'ÔÂú‹o3<_gŒõ§Ö4ùV†©±AUhœšÿVø”ï5S¨‘WûçS0 LºíZ¸ã<(†^AÜýó•Ø•§r—ò{eÿžõÑ'þ9 û’‚#š'"7›3ÓPã=lÚ÷œÛE4^š{‚ÿÄnß›z c;7§óª;n¶7ñìC:ETDDE­gSò½¦…‡¤…£ ‹³,•k¾C€Ð"à2è܃³€y4${4(…~çâkÜ÷”ÃoV¤C§Â0y-Êçë}Â@ ¦Z¸[1±×_ƒZRŽÓo‰L:t›4I(pÅœ°ÚÖ¨§S[©ðq/¾GWHÈ8ÜFÉŠwQû{`þqæ6¯à_Ÿvi‘]~4îMo½‹bˆYü…=î^mQÄQn–’GÜ>øÆ¸È¹ä1ˆ¾Š„¾!ìááñ;ÿS~8h'~oWu=ãÈèÊÚø(Q½¾lÛè¢:ÞS½ëìG’›U(a§]tY¼Æ<©QG }ÿL`¸…ÇqY³ÝI ¤h.o2¦­x1=Ù){H[ÝU-&Éô¡ç.øãEøóȆˆ·Oüó/Umš\ŸC„ºÙ3TÙR”Ξž"¡Ã££÷íÂ3×6Óò[r–Ø44ƒSA`ÓõõŒ¨ ¿UÎŽý€MNæäçc×ÔÔ(Þ%Ëd÷dk[­LèÍ×ëÒ(®ÄŽW¼;<5C4¾˜ûpÉô=ìqˆ¦ßm³'T§º×N ºzÌ• )n‰¾Àþñ–ÄÍñ诉‰¤6áp»ºyÊÅ›]§×O3<øêB‹îþÀ÷˜§rI$ž§òªŒ!äØpÞâÃáÒº ó ™>V£gºsŽ+™ŸŒ ¥…´WÉ{bŒ 2ª·±®´222™O=<ÄÑ/qU>eM¡Øüðì®ÏÐÞº÷¥E^ÍVÍ9I®<—Z©ú±-}Ëë®Ø|Œ skÆòb•††'[–Ï8WÙ’¥pBë ð„SSiÇÆÇsj'ˆˆÀ%É++¼Ù‘ÝÜÒH.ò°üŠÚDm:°zñ½VÑÑÑë›Q¤ÿ{`ó…ßð_Ë\¯ÉÝzý+Òœí´ÿ"¬63ù' /ÔÅZM@B(!]¾Ýâø¸öðÁñ½Ëªsª‹ÉÔuy˜ªœþ)…û¯}M'Nd3QÚ3Ž ftíAO³¶ð•ƈ››áaû)ÛàŸ’K¢Íàͧ0fuY³Å±zóJV~ÇÁ"ïÊÁ*[õ®3Tu 4§]ú$Ot²üÁ…‚QëÏ#Ö¯7¾ý¹¿³%žQk¤c½8%MÌ,lJ¤Ïã²]Å~y §'ר. ^\#öí8{…k¯TÄê(1ü@íòЄ„_ÃÈÐPl1±ìÖÖÞÐëkj’7h0ÜIˆ˜Í§öëœà¼ûñÙYSyúׄß{u‹þW¸ü tcprDpIh³ßù¤ÐAŒ —•*ƒ€­Éòîóƒ•JçÕÞõh<ÏÚ,ã\R1\øtqGëºÒšÚª!öØùc¶Ùð•Ï!-½/kã·ÒSœd3ž9Mb<IO£ ŒÍ-ƾ۠f“ÙvG¹X8ãTÙŸ7)Èr$ì¸KtüKÏfÏZý&Y·˜£žÙìÚý¾­*Ň¾Ž!~œÚ­–²F`µµõv }C­ë‰”ú´íß¿•uØ6…ëìþ!ùðUó#Y ¯Êß¿_°{ŽSt…Ð)Öâx„t¾ï”S™“G ¤‰¯üù¨Ö5ëЖqÅü½údN (P\[UO´ÅÿÜñ6^ì óH}Í£*C˜¨[ì¾ðt_êTVžÐ³§5cÚ7Ëq$óý*…DÐ"9…b1ž{îþ™%“'¥óf9fÜ(ªÇ(Ìk8DkYæ:ºJfâݶ¯ƒs§•``-LöY§ZÙÚ>jó¿ž™‰øû×ÄØ†@(ö£‚êjrE‹™á´È"ÐÞß~L-’\Mõb=!‹ÄòeC5=yDY_ºûŒ5ú@  #˜›Êþ¯“xý ³è2ä#8ä¨$ó%™Åš.ì*$ PÒ¤8"21ú!îSºDµ#óc¶*Aâuj ÜÙâÞ§8yPíëÌp¡”ŽËÌð‚LoîÃ×è¼ÃWJ`†Ë £p'OØ"ƒn 1ý†S¦_&c1Gø>þNzÛöøfçT-õÈz|¹O.Fâ+ÙjöÝáªî] =¦c¯Vy%Ïvµ\O0Ì?¾ì ‰˜„ú:M@‹u=˜ÎUçÉoµ  LJ¢üV[Û¨ƒqsuöT___#wda¡ìŠ®Æd¾Ñí©r¦´Wžz—<Àî~>ËÝžç­ù³ ãtZ|§: ÒaAÉÏ3¾´†½Ÿ~gøäÞT°Åuð#Ym¾]ž²ÃÕ±¾êKn§eÛTΫ“ff³²ã7ÄrùG1_p9ÐIaÉ^µR'a)¶*·ÃßLõkØ®E‰§*~:É·þáhqóné³´XOZÎT``„ÆûñVIâÆÔËUáh!ïì.Ï÷Fµßü¾OLD;ÅaàdǹõÃã5*·B6Ár ÌÌÌ‚\3${5÷,llî_ží­ñq–”íT0u«Þ:ä\Ñ‘?aŒŸÖΣ„ã’ÌGvIí)Џ=|d‡*S±2…³ÿëëµ',Bôí=ôÁ½œË•iÿP.BFùðk‹ksÒŒ†Ç¯™¯`ø¬…U@‡Q û½ª¼™¢$hX¾$ÝUIßÏ7Rîªí'‰€t7TÕ’GÖÓ¿ï}éà‹6ø—‘å£u³r¤äÃIW×ÌVE€ {ç³×ñ{ Œ¹E(Ç|ç²£®®'Ç{‹C”VÖÖ,r6ËúúEÕ8¹T @»ú;³/@sdãXíi,ãONX5ðéõÆ Y?–åäñ ×èÑ€ø"ýÔ`ÊŽÜZºKE_ÓŸ&¡Æ?²S?>~Þ±ö±ŠNì±\¯8¥QCLÛÆ‡Ë|–Gvû•oÇbeÙþÖ9ÑjÇÜ2±Øà—ͶœAˆÓ)df#Î} '§QˆÛ„AÌa,O-FF‹ç&…« £É­dN¹ÆÍŒM"çþl‰åʼn³pÇšr¿º¼Ø§Iõüo.snQë‹mLo߾忦&I\X08(«JÒKPÌŒp9êˆ' ýo:5,à1›•öL½ºž}Š9lwlùÀÿÖnÒýNlRÎã`\ûwÖ3·"+é$~Þºbá=‚ &&^“‹Q.³9¨§øŽÐ[ßÝ}"”r÷VU'éäÏõҞˀè N Ì³Ïú2”KˆE0ä$5%Œ%/(_8§JºA½ð°´EfîÈþds|°ft}~ =;$`®8láolqÈE×+ë˜?q耟Ïýñ¦ÈµJxóÇ”ùþn§P±Œ(¥äþÒ¼M¿HÔ¶Ýñœ“ (Û0K*ăͿ÷6ãä[³f¨Î¦ã­Û„€¦5uèÇdüuEé¶Ë3jì‘PÞ?Ê€Û&öuÚÍ´XþÙ˜ s§ìÒM…Êí£Š5ìó‚Tà8¸Û³™ ä‡B”e2 _8<Æ6„0Vâ½'Í fC;guy- ;;ç×GC †ÝFÀå|LåS/ÏhÂÚÙ©6·¶Œu(A]´&g?V¨‘Œñé7…üMñ¡E ò`Åg£oŽØpcã&þØògÆ :T”(zN,™3¾îaÃf(-ý“-¯hòé+y.Ý<„Ã5‰ƒr‰Ñðð@æÊr…Äx8©WWVãZ½g¤œ½3%Âãïb²2¯ Øv¾=.^§œY0šuÊ&f, žc´êB>”瀔Μy™4¯»ð-`úé06B+£QP†ý}Å}ý#BÜ8%Å@5Ì;U„ ~>ABÆûÒr:ǽ]([@ð§e*;(dç ±:g‰’¸…™¹“̽İu’Dw?™ÆxM;'Á?Éôá?!Àðq"o—á¼8VWK¼Í.;w?7JVŒCØœ~U;lpØÊµ'V‘¸[¦»¼¦%1{zA*OlCuܬÑÏôä›í1Oø™lH·×Îߥ9òƯI™ì n4#‡èÏ€¢ì |Ñwömñqq¦J.žÔÐ#vŸ§N¿Âdru W(_ÆùºWSœù›ø# ž6;bUæ Rµ“Ѫ̫AèÀÀî¶·»Þ>}÷ØO¬µA ¢MÉÐv¡ù"œÝ÷¯+ÃR hJïzây÷²äì•))o; _L¿íÕ=Tqã´fT°2ôCÔÔ£½ÂîZ8Öž@5Xj8œ¼#  CAQ<í]0ïE-Ç]ÉdvŸ±Ï|̆‡ÔU ”U¾šv-ª‚±ñMDvSÈd‘²–Ò(Õý²íÓi–j;\lGdK:ÊRWwúÆoºû³(ج„°ìl—Ê•GäÝß÷KÜb§Žg#R€1g `®·žÅag­u5¿nN³`ö#Ò'—ˆl 뎘Œ5×±Ÿ ½Ð3ŒI˜î¬"€üÊq™ˆwén>Ü•"ÃÝÎT…1Fëåæý±Éñœ/_°x¿~-ä] ÔP!'$$üó(Å\g¶öÛ·þTë<—¿ý•$é»C}OŠÍFßú³ä ¯pÞíAI`‘·#KfP[ÿ[;‘½F¹Í·6N«cç–ŸðÙz£ÚLÙ’±¦‹Z—4í‚1Ý>õÚùŠŸÂ…/SÖ “ñ˜“Tïmhõjr8Y mŽ*A®ë(Žóo¤è`Å#¨ÎÊplÇî­ÈmÑÝs.ÝRÑêrÕ½äí/â.pÚP5˜’[¦»¼Ý˜\L(°1óÑ¶Ú Ÿ”Iá|S¹ð QÌÈX§¢þ.•!ãÎ>È­O45?ŠY=I\M¥‰#Wôw,[/ŠÆî™vÇÜæp²àcþŒüA2âU%a6¦æAÑä+„7¢¥é¥3£{t@YZ`¨j—£r­Ø®~%>ØY­A™´p"Óì—½"ð*6ŸîÃàüNühqgqbRËZ–¡» >еq —*Æö*ù€;°/Cü.Ľ‚'sšïŠ—~¢ñ[µ„ot?9™~iŽãYí=ÇV§úÍ% F’r jm0\Œ°°sõÍMîÕÛL+ê'¯^½š¬ëЦ;‹1eì2 6¾„5c"ŒM‚:6Ø¿Ç|AY¡ŸŒƒËstXæTóÙì yåëo'?_MîVÅóþMÊÎ5Ë$¥ú¨•Z+ÎÁgS—h{[1Š",âÙš¥‰LˆWÕù!sµ5½#g60SedÖ;W >×ÚÉj8ùû³IbC{~<ÄYÝeªí$~»ŒÒꌜžIOxÒ¯í)æå²Ä·ƒÊ5Û6Lð=!tÊ|W£¶ÿ˜ `’Õ%ÃÃÍ ýI‰ŠŠZÙÛ?1}lù@eLäV óDzÙ}WWWõ¬ÛPðK§Úb@ryÎehG¾^+À€‰ù„†C(oWÛñ¤ØŸË`†;?ª³Ûæié-}ò*©O¹yS/+_=ïÂ+ÌÝø1L[5ÜGÊÏÀ;:¤Ê–Ž|PÒï;ÂÕb(0$`Ȫþm›=˜#: ¦:”<¥˜fvä ùSë›L¶ä~8eIÜ,œ È«‹¿^J>£ÆÿmÙ-­·ú}ÕŒ@n}lž¸s6#*$÷‡9zRñ$K-¡ÕG™/Uë>Ìt÷|ÐXÍŽ„žÖº‹ˆˆdWV~oùbÔjƒ" E÷Çu’ÜÐ÷}E%ô.Ž$ˆò$º(J( å-¬]àݽdQw®ÙG:ŒÙoKȰÆ^¿²øÎYf°x1â43ûp<–ó±‡ì—õ¼úºAµ“.4Í·õ°9:ÛCì4ôõœ P#AÊ|é­Â1™@”žÉzvÚíѯŸb9ú7ú‘“B¸I(0ÕgÌð öl‚ Ÿp[ï,’ml-އ¿üUŸåаa½²È?·£-üúõ±©)Û[›·Ò¦÷O_€"ûGP7œ&Ò…Æïîì _Ô9u¡àôiPWñ$D€™¬¬Pãe–~ÚÛÂ+,L?câ4®¸>€›®7‹û'3£¦I7U2†ú–úÖu{Âtм®}ùQò ô?óú,üáÅ…g2àyb fã~æªÌŠZ¤—>Ãç5ÃÄå+ßnã˜Pý†½ä:u9J·©¡ÌºþWËÕþ³)÷ý¥êÙãá~~-k§È L ç/ÿÒhun½¼Ü*o{à´Ü1ðO ¦/Ý`šÌ¯¯…aí™Ì¿yðõñùW…9Ì3ï¸È‡£°¦UQj_˜›¬GRÂìÒM» ³‚õˆPëdI8êæxípî ÷É …™6‹ûÆÈŠ:ž>•«:˯ﶱšâ÷NFp w[L©¿}5RÃÂ)TÌó!–æ›í~Q>Ÿá£Ÿb1û5éðIŒ2ùZYxœÚ²I4jë{²ßSd—£ZË•+µàýÌŽU’RMãéë3¼µ±‘ÞézQVúhž÷ꑱÎDêæê–éeR‡KyÞL8@wG¹€ÿ#_Ç.[HèÆçÆAžPU~Ÿ@’ª›‡Ðµ•pžmq¾ TdÓF”žm–ʼnÃ>’'%Þ¹f_âªæ!Àíç!þÙÚ…×¾ŸH”>úAÈf};(1%Þ,W5$_u‚ëó˜1 ߟ»F ʫϴñÁ³9Ï üâÀ;¿)´¸È°üí¢/–ô8̉«ÎséB~C·ë›ٷšÏŸ¹I™Ù&•ÓõÌ•m:푾/Þž¬‚F¤Áˆzó€µK\M[fÝ bÜҌ󂹇[qmômŸ aô_0ßr¡I2TRÏá[×.<ŠS}!¤Ä jך:¸Ëý­Íð]MÕƒäŽ/Àáë‘m7–gÁ#E¼H}±¥$KÿG ˆëªµ)T톻:Dð+ª+M}³Ù“uRvsþÜ—?¬Òk3ÇûÅý½æ¡ f{åÎE¬§ëR§ÎÈQ ²Ÿ<„è¦i’€p¨?<:œ™É¸ü€&«L¿É}Æ2½ò'Ñ, „H‡ ¼¾/gSçSÏeYWª/“-•›/mkÖƒxñ ZE¨\‡é‚9þéÀ7DÙzêXBMç‘+wúæ*S,»ÛÔµçÊiQÛžÕÂßÖÞÞ#‹ñv%­Æ˜[Ã>ÐJíä`—)bFH)ñ'\ ã\£20f'#[RMØá¸Y!9bêFa¡¶É † DŠaùÖÚùaì@[Î燽÷Ž”Ðí%ÐCŠ4óÞý¾7@Ya¾áJ›ŸWQùñ•à 4nïbfæÍçQëE ÉœQÚs¿à#m‰ôa‡ò<¤æM‡d‡vʵ ({‘ˆ41ÕÚééZMÙýÀZuj«7~òt‡99|ã,îZ¢úÔ„iLYÖí pb_´KsÚ¬«^аŠþùSZûoú*%f±3!tøïjßi¬iòŒŸÄœ§Ó˜.t΄m§i†pÝîˆu9*ùÒ¾¥øøw­z|È&iddrê$Yñü4³ŽOŸÂÓ§8wl9>öäÅÈœN%ÿa7Ö_“æÌç^‚¡=øüEžã4Øb]›Uc"¸WËέúÊYêÁ'øë¦µvu´VÃÛQøhÊ—³oCª–ÝÉãn]ñÏ ûùó–BØß„BS°Nóî$pÊ…åV ãITä*¶r•^­‡åƽ_»)-AÄ»9Ö¿©ÌZZnÔ`-|üfN*wÂfÉ€;Ðy&cÌD@b+sgúl Ê”Ë$d”Ÿâ¡åýËݾí`L²:kK¿·D~{x¤X`œ’_À3x€6Æï£u’yJMMMÀu;J`{9’_5B¹œ‰Á¨ÙYÿAÃó÷oÅ Ì9f_ToOûq'frç]kTïV}}Þév(8³©™SzøUŸyBó.Y¨sðãEÏ48•+ª\ÂÁר¾Ö·Žƒ˜‚ö@E•\ÕM£Å²…CUË$±r;Çz[»ˆ´ÝÛm`ù Ñ#E·LûfSˆNºŒà*Ç£,Ïj޹JêC¥Í-)^}rÆ€¤Ë7ïZØõ¬÷¢Þ¸ØidQá'âèlG®Ú§È›á“è@,XVß³öÈ€÷ ™¹K†÷ùÅÂ^z’9CÅ-êÊ{É»èÙ'fÿR‚ç5o3&’ 2 ÔøÓH^ªuÞ6½«Â£µØ^fõp§Õqþ{ÃÁ!Mzù[Á½ª°váµÄÙ?÷°(—¦? Uñxô ¢8øyãºÍÍ-ÎsÎ~“Â`ŽÜKïu¨ä7"jÉj|ˆð]:¸³¤¦[ð€%õñ~^%Î:ߢº‘¥ƒ¢ùÌ*dSÊé_ê ”i?`A?ž©â3§&F8‡= 0áBøEþPÝtÐò%ËJW´î‚QÈ%'XŒ†`šŒ…s ž™®Ó˜è^ÃO<@ñfŸÂ ×ïÓq@ï8ÑngýÐ@éêòç÷¥MëÈ· #ügDdX0·¿°µ…"îÍòS·"á?öFÖZ™=Ðξçñ€oK aµä=¦?‡b>šÛÂØþ ]Ünv1òÜÙ9k¿òЧ¢³|ò㊦Rÿ²VµðãUÒŽ’?ôBÏïbŽÿúƦ~A&G§e¤òmH×(•}sssx~~‡«Ž§¤µµuúì#{tаeÌvº0„ú ŒÚÿÞ5ž0F!cÈňj¸uŠÔ°ÎVžO³æ‹¤0 c^ò¶–l[½,yçZ¶…Õ`ˆ¤ïÍ­­FÅÔ«DœYïwù©ë²mW–a85}y™ëbÏ™¾vÐÙóûÁxµ·lRcE¬"ö^±ûõÁâ†ÙP*)‹ï©Ã”®d¥Þý„ˆÁAÕEPæ¬ïìÈ\M™Æ¶¼úÅS¨IË¿Îx# ÿMU/íTmzýÅu§³>M \š¨šÁ ÎuÛ\÷-C+÷Îb¥ÇLŸ]&äGBx d2V“%:YÛº²Ü€héd…~cÞˆéOÚi–nË­&DW£k÷¸áižïž«Ô•Ñ…d@5?´ñ¥ÄGËK€Œ ˬ’¿òÞšhéæ;ôuÒ»ÓSwÃcj¹ó¥`¿ÕŒÍrÇþÜán´¦É ü°«ÙäׯÛZnòþn§i„=»·ªÀ68 *æE’Œ5Õª¬ÑfnNQÓœ.ÿüªàrp \†8Ñ<î*X=CUtcpŠ_}Ll]ì'³·ÜãJ}’±ÌÌ+mðh@èrÐã*ý ¿‡±àtYÍÑú˜à3Ã1×m+P¼²À™_ ;^íªây&)©$uEÕ¾oÀ´ðÒµaž/™_kS¬ÕÈ—ŸÐ”Ç\ l,ƒMeq ÏÎn”\ÂBß]FAæ:RÛ[erG†qØwhV2ôXðu¾À›Kglà_1rˆÆéR"ÞveÑ>ŽjÛŽeå$‡›s ¶J)èQ¾¸-¢Qš¯ ´Í¢¤'dÜÕõ¯\~v0iõ ø£U–v cCªí¿€4ÆPçÆ¼Í¶*¯Ž·Ü=á‚ÊÏà‹§ç5ú¿[Ö‚æN…t ß~%½\Õñ7”Ú[£3~Æîã§ÃèôïÿˆTf÷[ 5v­­«ÛóYç({)B¸‡øáFÔÐì1þxŠÐÆîd‹a|ÞÔ²9 ¶À0?(¯JÆîÐñ{@"o‡zjÎQ˜$XD•o¬:Nƒ6î¼»xRÇ$q4óÛâº=©©€w-ú©¾‘+KLö÷‚-í¼—uÄÊå&!±®54gkUÛ7)Øœl»—ñã­ñƒ½Ê¶‰ÝŲ~ƒ7­í˜µ¬¤¿¯¨jˆ¯ê#Í¿9ÜÚ0Ï¿cþ(öB÷U¤úEœZÕ·D O t*STLL …ôzÐø—!‹Ùw牒a?`ôŒPê6Ç ®Â~¨o ûu€Öt¸iÄílò“\âçkÉv« (1Œ¿ôPþjürG|é  t ‚èßëÞŸ¦Ì×kë2ôfJ?ãeV‚?hb䦃kìŌ뒛çËÍñÀ-àùj"cóü {qî ·A¦ÎÆÒ\3^s_©c¤Áì1™GÆ^F…t ÀDDEGò·foŽèëë¿¥ß%|ì25±vÏÿfKs.¶1ÅΉÁlÕe8š:_Åã&U@>Ńb^h\|˜=ßv9VÈhn†ûG¿{…›dî9²±óÌ#´\ÆhUäƒ+‹âšÓý±paê@êÉïjÈ:»Áâ©§Ÿzõ®Aàîý~ý¾Ü;LIx®”°Ș½¼(ìÀÞ(ôÃ×Ýí{«Ñ±Ýϵ|;»ó®ß³OVšºº8ÌáZ½müpŠŽ!R„-­}Šˆõçr-Âx \qh%¸â½ÿ³â^ê†!³©ü¡ðJyõÇî||ÆGÏ’“vŠt¼§‰Ýl©CË€!‚åíoeüBÕHY–™úši¡½Øô>R“9mKÜåËD51ø§ÓTòe¹ƒlÊBË?2Cß=èç<ÔeX®ÔÑ9ì)ÙÕ4í[&`hñS¶{ŠaKÏ]oŸ£^¨•­mG£Û–m]Ç¢p_U«Œ÷ñúSŠˆß @‚ü“ÝZÜ»Þ.Ñijå‡JÓE¿¥ÜSNªQZ)çÒn:·ÏÛfgÃåJáQÎÿ·8Î>;m²ê9t‘ñ˜q Ë?1÷¥=2d(Üý×-ŽÃ•!—ðÊôÅ,•¥ºƒLNËKíQÔá ØŽ¶•iû¢óLnÙ Ýš/zR‡·ÙâpûXñüsë»ß –¤ë sÅÄqã”(Ü…kF©c!…P@¾ú:kg F×þãÕ‹ÂGe<ÏͶú Ï3TŽæ†%ßh@ )FMärU$3B­SŸç?ãÍ Ÿ}Óê.>5AU›b˜ñÊËÊIÕ†Éj^îé¡Â]z˜™&ÏD¤Š–åYË—bA ¹ÏüÈlw&ø×ûçd¥ÿ÷,€ßwD©.0VcÑPž óÒ&[L JŽ•P9š‚«¥Ýä]qàù×Ôü–¯©LÆøC…é¨n'꡵DO¼à¿‰Ë¨+h½ã‘.k+Û#¨¦GMnËÜœ6ÝR0åM³“t¨±Ô^>_=XqxÅlYÉ?8†½wÊ$ G $—‘÷Æl0™Ì,©CM’_eϱ"Z½—/Ì“ˆÂDg¶éD”õ¨u@>¡ÜxÁC[˜ïÝhE®á1ÍX>ûG¼¥¹þç$Ì–U²?±<“ÚÔÚ!@þÐlé­þ%=²ÍmkÓíGÒ›j¼LÙB…ΆÚm|㆖³½å‰ç¾Ú¹Y‡«ƒ³8˜úé÷ 4äGPï˜r¶Ýü·Í°§…¹Iú¦êsácžÛ³_ŠÙ“È—í‹õèIŽ@zÆŸû·«óÂÔíÉQ®Áš˜Ì"ö¢¯Úö´NwJp)pÐ(l|óñ@T<ª‚‘h= Œ.ïþÓ¼Åo_Jqb Þ²]åMÜ–t|KÏ-WZ-HÂX·˜s»‚¨%fÆ×DNcåZη¥À/Ü›ö.,¹µ”ˆæNá ò€„å4Ó¯1DËh“ØÎâÞ¨ ;CáãÖ€VIef¤iAÅ=¥oßF&•Ú3 ŽÌ6+ušæ=ë¸0’óÁ|q<* õ†ìÁ"cj+++¸¥eAÓNeJàÀlÉL:ÄÚFüo=ÿs†—êxf8óÉ6Ú3Ÿj3x¶Ý¬QòÕ¨\9ca ú×€q›»8…kÏ-”Š¥¶¯Õ¥ß5C¯ƒ>•vÜ̃!–¬^lË:7%ÂëR£®“Y.5xþ:¹EêÛ¬â’oîeëc“8FoÉú;}E>Ý'ݤFènbB$%¥ /Xã³ULÜbj"@àó‚ãåÿò2CÝ.^¢ˆ§£@¼y²ôíKG«&S fÛ”ÚÔbñšŠ ¿aq•üž0óŽ9ÃO÷i!ï¹ñdr8;s¦²O1ÔôÙÛÁ3¯Ÿü­éó"‡¿IJ~Áb{ÍÁ(U<“–»w¶Ã•ÈÇ{ßî×ZCnéð+/L¡',ÞW#çšZÚÖR‰X.W £¢ø}ÖµÜJ:PÌО¤òÊgvÂç`~oÐ…)èò彘 îøöÐÞq~Þòü\ê§‚nâH9­\¢(sÞçì>LA•Qqöñ­8»ërZÑ•¬yœBfÄóí´|cVž;ðõÆR5}1Dc&5¹ÝöYžœÆì,ÔÚoÞw-0…'”Ó̤F¬¥œ æØqbØvtÎ$9–¿ô¥ù«gùh‰lll⟉Sfh Ñç#pp/9Ñé‰ù/=/)[E×Rý[ž/õB mùqðÿŒùrëËYÕ~»ãW¥’‡@¦q3Ëm”ÿ|üaPiÆl6 ß—“u@¼@×À™á€Î@¯J ¿nŒ ß4&݇ó ËS–©yñ劑| ÀÏЦõžFÆqå½}úføqñ´¿ZdrrB¨øeD±@óÁ5ÔâˆÈ~þ>Rɤ÷㲡²®¤çR‹Hƒ•¯]­•_kTõRƒªL¨ý‚u;LwÜÛƒtÖÌy\DãZý¼~ Shü¥ò¯WáÖÚ’­ÂªãÔEkÊ៸n3S¦!ÌÇ3·é}òçï-^.ª¨câ~–¼½D ÈCs‹ìÛÊmO‘o[Y©™ïÌ¡ÞL3©+ÑűÎõ®4åÚc²œÏ¿RýÈûðA­‚¥`!†üi(žˆˆXv^Ë<ƒÒßX‹bb0MµUÊ–³,ÑËÊMÅ=YEð^î^ɤM#ªÄ?¹µÝ!XXq]ÑÀgU1’_Ó•ö¦¨xlT8‰%ˆÑ»Eðèu2#Ö$ã7;œ97¥wH†'|–¾z0\<·T›ŠGeó2“C|‹PÅþŠ>pÙ%)±Üþy¾n}§Eçͮͷîï̼ö‹ÚÆ~¢ŠŸÝUõê}f&ãø°.‘€¬ò·ÿÊhT<çQéë²ç³TCÚ¹¯ ž3GR½]„Œ÷7Nhæ¿ÁgŽ5w¯ïô~»}xþǦ%´{Ñ·z1‡Å\‘Nb(Œ TÂZ²±lˆ¾qõJûêÑòë„ÄNÄžé¹í[6†Õêþ¹H+§5”B^èèã(F`KÄ=|Ü¢«I«œ—\³’ǧ§OEÏå0•ÇÑÄýojíë/ö3œu¦¤6Ž´¤Þî´¾æ»$&›ÒhÝÖ„@@)š0˜u¶\¿)4hÊvÒ8ím(Xq—B”¯<üŠ:šuKI7IAåë`¨ý3èfáédÛoýÚòŸd~Ýñt23°ú¬7´A;ò¦Ç‡Às3ñæ=9JµÈš}ÇvæÛ³”@Sª‚v °¨‹$ÿ‰D@¨a" sRû`ÃÛ|YÅ},H¡QP½»á–áxòÛ.ÃS®Á]œœ^Ùì¤'êå)ezt˜Ù‡%½úrp{aÔw·Ý­%е4BDœÄý­nt‹œbfOÛ15ÀÈ.Ô¯Óaü÷~;s‹­ k#Ìô®ä‹X§z+Ô–š–öka!ÆL(ÅIeñ{HP኎ð©8íÃ`+p;­µ°q΢ù ñ,fÄÛP™í™€ñ£—ÔÅÛE¦ãÔ«0‡öƒm V,ˆ3·G€â7ެ`yFåÆzÓÀ! 3ŽðÇTÇ7­|¸…1–5×kÌ¢ÉÊMÉÞ{œÌÞñ~Å/.1ð Ž×^^Úþe¾ÎxØ.€>ÇUÞ†zsAÃMF/]¨zW-ÂBï51{Á[p®© {Ê6S41ZÈc‚ðól5ù¦§;×°¸¥9^—oH„PçBÅ0éûÔÁp ¾6u„óQm ýMh.‘q¦ñ–( ÃözœÅÎïtA̙кŒÇµ òNµß…Ð''Jã`f$ ùø5N´Êö?ë^íD˜Øt×—‹_ŠŠðìììÙ?¶–~ùt†eTL.NÚÓQ‡*Pžh]J‰¶óÖ Ï2Þ--ry›îLc^ ËHò©9$\>fó[4îfÓ í6pîj¬o[M¾Ü‹}θí°ÜÎ!øé/]S¼§’Ú»-Z8èqÙHtЩ:¶x¸&üÜô÷Ø ÝÃ(á¬{¯_¿žo–”ãÀ>JËÍøÏ¨Eá'¯x‰ÕBqvhŒt’8îÔ¼4HæÍ6®{…ßk¼8Ñþi=®ìÅ'¬FµI•0åDk&›ŠÁ¿ ¬¿ìU5ýÂ!òµ0 lmz~–Ñë¶Ò–ï÷ÿ¡ê/ ªÚ¾7`øœCK7H ÒJ7JJwH·ÒÝq•iIéNéƒ4(! ÝÝÝq¾½ýÝÿû¾ŸcÜ1®Ø{íµæ|æóÌ5×\yï< hoe­Ü§“vyw/²;HÂØÿ¾‹Ã' À§@Ÿ¨—åÿ¡­z Å,%àóï‘eÂa )U<ÁãÝO(ìΙÁ—À)R†é|z®¼•¼£³5Z„O©Œ¾VG×ós¡»,÷-Ý‘üF®‚Ò¼–…îáÖÝ·Žãç¹…_kâJas¯i?¼¹¤Õ˜Ž¢Iû°äû.Pàƒy#¾Ýíó œP²©¶·2¼óØô;Éï%ã%Á¹!û77Ê\êOv¹Ç‹èáN”!ናŽ…8¨ýò“p˜Nyõx¢ü‘a½”Kƒê°Òš“kÌ I…lŒ—Ÿ~¯°ôª¾Ù‘©;IÅ`óåoxí}õÛWñWeâ…{Ù¦í‹_h?Å +¹}Þ7;á|@ªç64¤vIj©ƒ†ËáÝFnrK×P‘Uù/‚ªç,¼œóî—1$4f†Ûí5íj~/Ò*íÁo’‡÷—kq]ÐÈ„Íi!„c$1!²MyÑ\RÙ¥ZäúøGòpUÀÃÛ *à¯u¼H(M(Òí èš¿õX íWc¯2Äï2^^m™tðÌÝë”'Ì*ÊXZ~ËW­o EU&hÆ€hUR×KøKª+äÛºí;鉓÷MQºöÌK‘x«˜•ÓT_O–®^ŸíM˜~ki¡þLVYcƒÍ cbðjêëÁ¤tòÌ}ã0ß<%^Ͻ··÷úÍ×;;;± OOÏ×vv/÷w`7²¼<暺:°µ†ŠŠÊk'§î¿†ÎÑPt³Òz/Y¸ò-½ö UÁ[l‹Oïú]>]À>Ñÿ°¿û¶‹•Í=áxj;œ†²®“,Ü_)a¸Ö<¥º%5c”™·•#—úÐØø³ôŽ{0™Ûú+Û_+¾ñl±]¼ÿò<åÓLÞÖPÕÖ˜?ÿ×êêÑ;±Ô¼-t.iDú3Ú«ÔTGñcñá­›Fù3LÄÐ`p ã_œOÙê·øñÿ-1Õ)Ö/ï7d¿¤1-;_ àÐI›4ÇŠß3?zDw+PÐñi?îÕ/ЊîÕ£ã>|'Ãð|°·øÕªû¸Í;6m‹¶Ãçìlª»5Í0¸ Dü¬Ó‡‰Yq¤½³'Æ|OlM•õÄ9YÛ6ê(#YU€7:ü›°§<£çÅD¦Äãn3¶è‡š}aÖ,$ß (Y$–4š óù=ç‘ññ÷‰ìzký‰`ÛÕ »q6ðæuð†dÛ¬Àõ ß2mQÑJ›ßK ªåì“ó¸,JíþX‰™4£á±ê%Ø­›qšôœ0®œqj2?\lo]„‡;}“¶—b:·~@ŽŠùåH¯æ uiGêhNK}tÀ‹úÄö4?£ww0ÝpÊ]LÓsêJNÓäÜR}zª<Ü&Ø\ù¹´5Ź Ú±üþQü¼Ê¿-Õ<»ÉÚ.„3~i{6z¨à­%ŇBõ¿eÆQàR‰z&í9²Q`¤Çñ}šøÅC‹©)‚Ι†ºZZ¡-óT´>ôx"›ôÔ>‹!"ì «Êí¬"k˜ö¡³OwÛìŸ{þ³p Ìð/ÇtLs ùÈ4T+ÉWä" ”òÔ ðÂgTRNŒygÄw”Ùå3%ÁHÈÏð Æê¯y¯Óƒ»ÁûûN¥aá¨h˜Bpõ÷ Ub«³·ZEÚË€Óy°P»Ò¬Ö|{< _k§SÖ©p>°—»~•Ö~Ó¤ŽbÊ}HÜu1cù“4^ûáRG%òþ†1NrˆÕV‚YyðÞÛUfIS‘°íI^;çJAX]Ë Ï3}ž×x á=ù -Ù\™ȱë éÁ;–ûoÛJk=}˜´ßžßƒ'\ #;ÀÁ€P€àÉCÓÀ3R°Ù¦ØÉ/^ðîôÃ)Û¬D?e¼\Í'¦­Ô€Mô„âK`B@üF¹Ôf9YaÞÕ  ­<:Ô£ú^NŽ‚ÜÂî@EŸYƒœ••püV‡O*5ÃÈC±øFž„¬(°ˆuÏ#:¡ûÀH«æþbúu@PæÉð–¬–ÃÆ`f öcbàø¹ÜõÔy^ ì·¡ÿÃżë {h€pËûÛ«É` ˆaÊní„ x{…\ uD£<l™cÏ a½i( f¦ðæÑ{Ï­ëG2AÃèÁeQ‹©÷½O<ÿu'5¤œîƒwÜëV}Ö¯t+’Öup—×veˆ†îoØÁ,zÛQ‚w¾íÂÒÙ±`m 0Sæ½½×§…±dúÀÀÞîɦAÛž2!ª8¼«ÛÁŽ<8(7ûMÜ1bÇ Ô¾«qB·‡#mÁÁkÝp)uHø—óò&%)—é6 cÉé9ÈXP*lÓàÞìùÁøÎ V…ßÀàâ*õtÕÆc[{Ûæ*úc„¤¡ÔùKŒšg{¿+¼±² KKßoíâ#x‘Ê1à™IP6oíïw†&O닪&v„:==­(þ8ïW¶R2WןïJOÝוaQ»  Bë)–<6¿(p¨pøùïËóÞRa¦+ñü€ðÀ÷ÁmºÖýÙy¦@L¢}öù·“—””(¬ï¨Ïç¦c]J¾¬]Ü<ë3 ñÃÿ¸˜éàQ744Ä<ªF‚˜F xâBí¹?Š ^\ £ëþ€Kæ­ÂwÍý=ç†52ð2¤ÕÞ8 A'jðNS¯ÉöÚñïwä·ªTºF¸úÙsªÛ+Tÿ *èçsá¼r iÏ]-2¼Óð0¤‘,²lÃWŸHNç¡ -ÄV"êÇšàÁE5=¯P[TÍkœfõ·—xtÀ-çL¿í'bgcZøWé0‹_)OÁà ¯¤ä¦Ž=’Zü[€~9Ì Y‚À¯‹J']ä=ã@=¬eœ8}ÿõ–Σ±‘ÕgT’ÁPŠi‘_ –nšÇ÷í ki(“œ¢ŽçŒ£õâÿ†Av¶Ÿmpw¿XÂ+×™KŠ¢é 5Ê{!¼~Þ‡þÔ²{1AKµýiµt$}àt[ÜÈ_a”ÕXf©²Œ) ‡ oÔê2Xg®ÞOó¼xò݆oï ë逳Úa˜á(77¦“4•怕<Uç?¯~TÉMư/ <'?77÷–hT~ªÂ…Öoó‘Øé°ôkGÇ®ÉJ˧A·>`§€ —eœ“½¥ M¯‚¾ß Ã<œ~ä×<6s÷fG§,cý$ÁÊ<顳ñK«Ë™žGøx¸p¨Ý]Ûl·ËýU//ñ3s ˜0&@èq/âZÿ• ^î¨(Nýáèß³¢`ÿ0ÙÀ@qÐ"ˆY–h.­¥E iaÅž¥W:sPªW3tËêCOï¦+åBejhê_%µÃ>[¸ggã#þ‡Ž[ßÀ»ÁëîÉ8ôÕ·¿v¾0¦h © Ú´o'é5…6é»QrÈÍbg· ïÐ5|ï¯8õ®&•¸Ã{Pbâ()q ñAšæ]v•W\ƒ%Óú,BqhÅ(âYÔºWûâç“s¶Åè.Û¡²­"êŸjû¬i×kñûj…W."Ÿrú¥¤xŒåÆZßOcCÞB.íש£á¼¨…ñ¬||ñ,ðm¿~RGÂGÀ,To6|.—¦ÏÑhðA “<ÙêÁœ…ë™ÖŽI?ÁääDHÜ@nö±wë³›‚ê¹?L­ý¾>ó¢_¼»¨~BÊ·€×ÕiÆ–ý‘ma~fäýÝÍͶ'Ã|éȯýWótï+±ßìÔãO|pPØÃŽïøÒyÖÖÁ‹KÇóÉÿÍ›7çVœ?©œ›¿ž=ó;ÝDÍi3\µ&™òcµñÁÑE Î‡ë™ø~“îKM"[\ ‘ƃâ‰Ý·L˜å­ë±'¡Ü>­ðxRaõò¼Ò!µõë—Âòû\×Sm-üm­Ù¦#çRÏ®°Ø`¢ (Ëø[å˴ݽÈe‹#ñê ®|¼ûÒÓÚ`@À'LƒWð)Äý<ÆÚÂ/™Ÿ ¬Y‡- `·´‚³.Ò²wç(rѰ¡Ÿd77»’NÞ,¶\ÀPɸ~I8sõ.›ÇŠŸ#žh¹\oå[²›ßÉ;×5¢†À1Ï=D7–—Eró3µ@d4è8kê9¤FbP Êé@àù“Sú­·þ|¿ìâÛ%û±~åQ1ÛT_,øæ0"iGÂóZ½P¾ R7ˆ e=ì¦B pÏôŒ{l¼½¾öSNán¤»ÇlܨÁ‰÷î åÖ±/>ý‰½Ô‰7äh¸ª$¼Õq„nŒ‹ rˆŽeñRqy`ùÿy½% ®Àþ6®€paÐY7ìtnwù‰…¸5ßÚ¯ãE1 ¢Ô¯@ÜßMÙ~§Õ1Ÿ” ç¶¶ò>,@[BŽèµQ+û½ï‚)KîXê†Ø¡Û AqÞ·ùÓ‚‚õŸêÑ?>‚ –Ûðÿ?“Þ™éÚCóc-ÉÖ$Mü°ÇqÖ3NÃÃ,˜ËðóA®]eþÃy67dH[ì"=Ðû­â:ÕÂ%ú Ø‰rº÷¼ï$ðûœØ˜æñµîÁ$¿þZ&Zò &rpÞÂŽ›L ÞOI_¦ñ>gIýò«,¯¼åüË_­^ˆK„2êe›Ñÿ%4øv…îr¼<è= :ýX%¶wBVbP˜ÕêÞK_ÐÌ/à¡ ÅIrŸ…»}ËËC_é‰í›nšw|H|NOŸÞ2ô,¯²žrÆI¹ù¬qk8ŸÆ&gÇ>t®åLáÀa¨þ-\‹H0Æq>‡‚¿øfÆ$AÌ&×›Œ·§ù’]€Ð2ÝþêSPŒ#þ—ì.?FàmdyM¯” S“x#™Üúì‚@G®íhä`¿V¹œ‹à]¥õµÀÿtPÊ3ëµþD°kœëJ´ C†*yKð(jwL-ÚDŽ,¢æ”´ôHX;.îùŸø©j`æ¥ñ¡,VÜ/ŸúùùñøŸ;P{Mš_véè™Ï5z†„@è+òC¡ h¨8âä ñw]‡¬U“C:‡g+×ö 9s3NÙj¬G†dBP ¡×²ÑOzoPmc~º9¢ßìã:rS^X)xjØJísýÆÐå©rÃÈ$¦ò+nìËS­Åº¸4>çYÁ­‡—×rYÓþOó0š¦¦Þ4ŽÓ$vy’ÉAg»A>~%«Ž¥}hž ¨ív¬ÄÝõë~E$ J`å©ÿ'núÃq©Ìúž€­w‡§¦ ÆZUFÉ´•’ ÁWØ™²{™æn6ˆ¿sä„)FZYëÃIëdÍØ~%€ñ;5í à`R Òü_-uýœUcSªkyf7ûê7[ŒO­O395«õ'8EŸî¸fHúÍgÔ`Ó·C úI²yÿ7¢w䦄ß䢯«IŒÙÛÁ«‡Ðçý‡T çíËs¼†xЬCìË*/Š/7$÷²u…9 Á•ÀtˆP].ý4}œêw·”5A4”ª½\¸%L"k¹£¼º%P#Öˆèžÿ^Œ÷òA\–©þ‹ N‚®0óM­Û;Ÿ¿YOpþ3 ¢xÕü£¦…;¼…ûóú=ÜŽÈwæÛt(‡!úme·Õ¤Ñ&eòåc8±ZMè«b=^›„ þV¯½WFn}LBכߎʃïØ/ ‚Ôxè-¤¤öyc9BÔ·Ã/¥(žÒ ¼#~r§\È7Âm‹Á£Üúß÷+öŠîpî ˆàâš…Ú#×4Oa>k¤‹óþ!â笯êq´ˆÐqae?~º]M´ÁGU«yMû†¤ ®£Ð^Íh…Ç–&äsþ“»[è»^¢ñd&o³ì€ìwAæç°ð*|øhŒ¬$1Ëÿ}êÑvqùrŠeL;ï˜V„÷©ÏáóÅ÷ä𥎨¿œ hyXÔÞÔ‡‡ˆ"Dí,#ÙO[ôEP] p5ᘞ%¢¸ábú<'¦8ü~”Ìxzò3ð+þ”­ª£;-¤ãÝÛÿŒÞŠcàç¯TÞ§®Ë2A‘ݪn˜š§pœzfvle¢ÚÏŠÒvËtxÔsþ,„1†õ,®ÍöÞ¿#ŒÆ‹´:€Áûl»g,q[I!VFW ‰é{m[‚io`—¨­KމtW˜A WTS¶Cÿ{¥ UÃÁëq‹ŠËŽb£·j·Ü‹yø0òS‡6Nmí¹\6Ùdl_¼R›@“U~ì7î€Zþöfy>~ƒȵußχü)Õï!k”MŸÓöó+&Ûê"‹Ÿë–~¿Õ1(Í´%Á2V¨uÔÇ’Eò½-ÃýþRÞŸ‘/ïPŸìp-ùÜrNä¦òMüÝk{”:‡Jº4©:*A›™èp§¿üŠ_Dz˜?@=q|B QV>ôìzí D­šà½°ÿ·_ølÕ¶C݉z& .¶"óÒÚ{W»õL§¶–Ž-Ç‹J6¹—[£Ñq*P ¢»fGôp u ™É«ý€v2½‡Ýž×#¦k¿Ó(ê3èz4 l”ÿ‚!sn0’ótC”µ¹L:L°që;~ßÝ-W:„Á²RÉõËKâ!Ö¥¨Ðÿèàík{{ðb°È÷ ²ïm(xýFl¡ÝŠ=R@ßDWxÞù_¹™õ™u|ÐŒ-ááã‡Þì¢ì6qW,ÝßÌÔw²{ùE¤ËÝ"’ô;ÍÀðWi×QÁ¥´…[Õ=l‚Ã+½ÌΙrµ¿ý_Þ^¤éÁ£S¶6 b–×ÿxI¼(xËï èXÀåRXåE¢Âd½pÓúCU¬‰£­|Dš³ ]y‹ÍÐê…¬}ˆø*žðã œ‚rî³Þþdíþy—n³£å?ÑŒq ÿnÿ>Ý™MO.7JÂ95ÆÙ0Ít:ݺœtù7Þ,Ðm¥ƒ®s(èœÝóƒ¢(Õ¶(ò4¤þz¤²Þ‚?çÄàÓçÊZ´4KctØ &SCÇ(1tÔÙÖH¤KB»=ÉòB8.ýümÙ´Wס"8÷Ðßó4zÞ‰a ÁßFÜ},g5€ýß‹ª‡$Šï$Å™ÿ€ˆ‘Wn(°—7]Ìû;k\ß zƒqt|µkœÈO„ù+ÍV2Ó¯Þ5+"V&´Io¶«ã:¦Ñ¼Š ´òNr1¹ u>¨‰ÏrÒkÆ\{óÙ®VÔPhVðPÈA.jgÃTÖ¬NPÓyTý•=æSv HJÀâÿcŠ.bÅý3GFýMÃhíœênö+½u¼ß.©¡ûì Eo›ð̱n PC)B„Bçú{87 … -ÔÛÅ{¿™¢¢Í).÷½Û¢vÊšðµƒ]ë/àYýã¿…¦œI…D»\íΦã_#QÙÛ[lAp\YB¤VÞäÖ^àËÛ|M¯WHYr¨è>&uK.Çý@ÈÙNˆA5<^ •Y¶ß„?ÙÜ0ÆÈŽ ðTÄÍÁŒ’;:‡2Éz©õf¿CCžæ}²‰ß“áyžÝìKÖºf7òŽ‹‡kl÷îGæ‡âb©°Žÿ¥#úâð%.!=4ÞÔà­…“7vŽhûm ™Æ8ú´¯ø9 `F¾ß9¯cEñ.G³voSsKq/g༃º¹¿ƒ8)¼=­ïML¿• šdž´cx HUJVÛÿ-iïŒ ~xíq*€Ò›-…Céê Ê|Ot£æìÂ$ƒÝ÷·Ÿc¦Â¨µý”ó¿ÔŽ0÷¾˜`SJâˆh)GÁ¯ñ®–¼;lb.Ö…¶Ý×]•ÞK½¥QAJ‡çTÚŠJ&ÎnÊá7º©z£]ûšºiï>â‹%Õêðš£ÃÜÑ7à5o)<æ0@ø¬4Pf£ $’Ò«cÝ– !)Q1ð ¤à¬×œ•Cþ—d†‰‹‹§HŠ J"jjk»æžœžûïÞÉĘQ'x”&F9i‰ïÏX»6 $Ζ§^bŠ{€„…Ñ ïÖgÑŒmÙ×[κÊ/fúïŠj}¤Ð˜m%ç2 ×øÓ™á=Oé+ Âñ 3­@ó…‰}š¦xžÓ: 3¥U­q€^yâÝݯQâüÛàÃú§’WµXÒ]^hhÞ§¥íy §ªCòò&›Ø±ìÿNnˆ88Ó Úâ ÏnkÚíaÙ–¶IYD"íÜu–)/þËŽ ÏÌDÙ—·iå)·wGSYüâÝ3AÁ o)α0ðú‚|‡…hÇ@HÙ'å$?meáÃõ4Ä”íÌ€‘S ékg@5GJkÅ·H">3!~¸víLL5ŸΞÕo‰‹‡Ê¡…¹#[™iJ²·ÌÑFM¡~ÆRo~4DBô¿ÌüÇ·j’w$ùénîÃ$;[ŸhI£Þ,ÌüüñéoY¤¢ˆãB‹Ù¦ºèod’ã,<Åm­?„I1é©·x½Âi¨(ž³\1ã„ VƒÄJتã,Úuë{ò¿ˆ©§GŸu$3¬ÙF'e5”*wìŒapXœ)Ô eš‡t¼ü˜d›¨{3aó/å6ÌbFw³ï‰Ëˆ,ùR1înÝFæùõ þG`^âTQðÅÌ6Û å‰ñøé8ŸqŽ AÁ°XD„LÝì=}=L_SS“][KjèX›è?;9‰ÙÁsíÐáhª¥úåËÃ!dâÞÞÞæÖÖóg©2††T­÷×öàUTŽŽŽ`u@ëí±RÀÕZòånõP…ÓœøÿúõNÆO2ƒvq( F~O\ŽºÎ®C¢©B¶FC€X2¤þ¼âØf(3ÚØkª‹Së·‰^5¦Ž¸d†zòŒpÕUúô¥Úþ·ç•\•Áœ‹I¿ÉÇÚD÷ü¿TáúaKKKÊSKt§–³¿9S|}&Øs妻Ƥh0Ú‚Ëñr¶`dc£ÈnËÅü$`97Æ>’þ`ÖûéÑk¶ø9J?¿ ¿3»€Û£žÌ ÜT\¹9L׎IÿŠ*­G:&Ínhûö¯¼õr:‡‰Qú=¸ëè¹¥pƘİÔ5<.&râ=xP·±Ó7‘¿ÑÏõz fÕËåÿéð”ÖÎë³0]bv{Uy¡cˆmäMãÒE ¾û;çŪ6g[ïQ¾J à®…¼'-ð| ãæ MòåÛ/_¾hâs;ƒ»µÖI`D·<É8_½ëŠ"×›EŽ„bÌ„|wB#ŠÐŒeòóIsF¿¿i É̼¼).,lÛDbsý OðÑ‹0ÍQ|3ñ»B~W™&ñ³Z´Þx2Å¡:š´öÞ[4øõµŸ›22 ¦ÔÉ@ëÕÓ¯0ƒæ©¤ýèç­^óS™LÈ¿õE¬†6ÏhýKƱz>=’vé$”_–ÆïzFý6O³4©GLúYj'Øsv=Íyù·àB'À.ÞCgÔáÓ<˜uAá (”פž÷Å:h^Fû;(qãð+å)Ч§çª&DJܽ”¸QµÅ(‰;aˆ6ûFÚV¤åØñ ¨Ózç2â&þÿÀ‹2¤›Ä˜÷fŽ‚‡ˆ“§ d”[ìeŒíÄÝUß6Odw Þ¢aW€Û·?±}öj'ú¯‘G–±hNM¿[mjã•a¼6“þv$ŒTÿ~Ñôþ˜Ü¡v\wÚbns¯TI"%ˆ§SÔÎmzO³~Ðx¯ }Ìàãÿã}…6‘ÇHI¤e¹uÙQ‘ß©(·›òR„DÌ ¼.‹RÔ§#àNª"[qÀ“.R+:€aßÁÔŸï±,Œë9M‘h·ë‚ãž8¤Í(Ê©°æ;¯ÛÀ= þ§ðÚâyMY'K=*€®¾aAE™‘Sõ<Ëéƒ1K¯Î Óš‰Úo1:CÒ‚^vXðË[ab0¤l¢Â¼£føå†ã~öòÅÛ“!°ƒÖßTtÿõA¸¤…Ì®q× €¬øA’G6D;x\z…™-wF€÷ŒÑ!èÐTžÚ8€U5àî/xý @<£ö÷÷5ñû¬'ŒC ÑT%ö‘eõÏÇÈÛøÖûÁ¤ßN)˜^®èÀurJÞQN¡<}Q7mÀrø„®154I5º¥¬lp‚¶‚÷/dñlÂt¢`òßBÿŸ¹7ýçÞÛ—5 ÷Y=;¿¸*H•¼f&›"­þ´ Þ8YÒ%‘a;]Ži©u[@Ln“ÞÖ7Rb%ï…Ö3¢zè‚©ÜûNKY]€:µÑPð€c¶Í„JPé7 ÌÞêr1ç½òc%fÔé]þ—©¿Eb8ÏÓ šöÇk^ èX:õ×ZÑϽ•¤¦tgQàéË} Çøö”²ÚÄ`=AÐeÝ2˜ál)—]vqïÒ4«ðžï[¬Íy‡¸BçªÇ¡–K¦{þ5Ú)©®¸;ŸIöÂÙEîd]¿¹=+î’¼?Â?%±ŒküPZW51 –¦ûÇœä}4Õ¾³d„ LpÞ‡qPxƒZ­ÁiÝ”é³çÎ~(¦]1ñÌrƒÓ‰d‘2Óy¨&òÛ./}N#6äÿ˜ØÎÍGè *1¨f>o­[˜Ï<“¼ÞçtÞÄ¿þ̾œs°Û’Íkú K:fB+y+†$nœè•éMƒ®˜À]ÔY÷!ñ&'f•ªj(ÀT·x"ÒxC’MtÞÕîp÷ò´¤åý4ã‹DÎOø"•eÓÙÜ%C©hÏ ÔÁnÄÑ’GpØÕþ¿4ë8bwªúè$ ÙÌÊ/Oç…TÌJ¿_%^ô_@!ã`UAæ½±8ÝIp|Ȭš¬Õœw}©`õÑùîÔ“AQ°ø-Ù 'z1‹ò‘Jïó~Tެ×ðJ(þòžíöXá¥Tf6ši9N ÏÉÔìóç–Ã¥ãÉh̆9$ù%ÆŸaå·¶¶fÖ€1ÙĞĉŸ10hjå«v©_Nvµ™CôŒ ¿Òô®–‘Ka!(øÑ—tB.ôAW¦Ë€`ëU“Œ~Ï\yY®.4ˆ†Åº¥Àü̆Ü],´mZê×ã É,÷_è&¾_^ y½H°¼:|ÏtŸEŸ¨xå±AŸ¹ÓYfNg{±&Ð(ŽQðT£þpôJ+zî9λð¶Ðî|*g®rìŽwÿÖ•GY缆˜$ŸÓyËû4Gx]ý Q¥79•±1‚)yf±Ò½|ÞÒCë¿xц—¸¿´¯ ž|“Ÿ) axehøo¼(›»¯*RX°Ì pä ê§°ËÃŽOC¢ë3Z?ÌË»ƒ=ÃÇÝ]Àº¹.½'ÏÑ‹,*øOWµù{°»ÍΈ¤(!`[ßËØEê”åÆbiˆ„ê”L§0=§Y!0‚W^ð»=Tgb–ð7ÄRJð¥´ë ÍS TÚÀSýJX²‘°àÀó >R ÅŠŸS€A”wP%‚Aî—‰?.…ÄìàŸBœ¼Uñåfo:_@üÝÓÜ?·â»Lu™›ù]T›N^Œùû&¡jn[R™>úO¼L9»îˆçмOÿËó>œžžæqœæ¯C—}yÕvë¶Ø°§ñ ¯-žô]B[4\¨B¡ìZhâ[¬D$˜%fV>üðtüwm8XÁ®Wn:DÖý²ì@Õ÷îÀ•Ý*Ë¥öÍ¥9º\¼¼öÙ­ìw$® #Üì¼D'(Xï;®‡­)7ƒ¬3ЭÚËøÔIíÜe?@ÿÇÞµ±D¥UZBý•!*xÞz}±þ«RVæ;·ZÛž€ÙéëÅ(îÈÑ…Þ8F°~ˆC¿Œ‹U5_yê™U/Á¯tab@ˆµ'<ÑŠüLøIªg‚•î©{Û´žü%ÃÝÄKèä0²å–CpÞú¬þJï<>U= ÷ï¨ü6|öÛÕNÀô”ñ¯(? M¨gÐ}ôj+P'Ö±ŠòOl¥Dn€‰ÊÚ¨µäžù‰Ga“TŽ73•Þ¤ì--ˆ« rS£ôß#çS¶tàeL`Ýͯ”KQ+¶È–óil0·•#ÅS¦°óæþZo±àÛn4¬8õºÙ¹ƒìçDŽ´þ»OÁd®Bþhn¶–˦–¤â0–¿ñµ$Z¢9‰‚úU\lè9¡ØàÔ!yàõ%±A§Œ·€ ‘——/ Þ±3õÚt¬×oŠÌ8÷2[–YÜoZ9°GÀ¡ CºqLwëräݫ͇AíÉôYÆã6FOjSæRíÄî7°Ô€„ìjPê[¸Gï¬ýÝ Ðvøw›Ø¡É…ªï£sæ4ýkj¶¶ªàÄI½ßû;IXêÏ㲟º™ÁŸ<þŸdû|±L·ÒÝü.¿ii)âîbFÔ~b¼kÞ¸$àê;@0†‚»gÔTTpAlXŒî'©žQH£bðRJÎ3PÌuSøÔ ׿¹Þdôo @”Ž¿ Þ TBÇìA‚¨wˆ]œéæÄ[™e"IÕ9ƒ»Åoñ®æý>™?ÀwÍÚòàh9ü»%iw²R¿ÑãÍn ðÅßû!$ L&¯¥ot_rÎY’Q>¦ /®'¿¿ÕÖòϦuñ©¤ß_×gç©f<,VxU?ˆ÷QüÊÊÁ8·# …» g·VOìÞv0=ìżï;lãÛ@dØìTß¾qžCÕ¦ºxß N?®6ìó6?XÒöçÏÿ2í§[£G¦È3Ó×Îα-mO´à䦨瓌çew!ßbÑuË>–Ç–ÖÏ?¬¶ùýìÏ‚'Dß“"Ñ%0ãÚtÐJ •¶ÜÉ/ÅZ#Y r'ÇaÒQÐ_x4œðèùÛ9(ôf¿IíÉŽH—ÔŠ´«Â€È)Ø{LeuIí$85Ç¢„Ùé?§D¥ <%„mXÓ~#ûyë«WpäMð^tuÑRÝ)»ÞôrðÙöå5X‚Vg¹ ‡µ!žUºèd¹ôó=`grJŠ~~päÐ|`˜¼‡#¤M0QÛï€UÇ0.¥@"…iÒ¬HJ@g¡M ÂJ‰{¨ƒJòý==4Aj³…‘³ù+‘â ?¯6Éî×áS¿mRãxqÐèí“p—{\á¾þ+u¾%„ß>ÇYK1½Î í…ô8ÝŒÏ" /À+; )\7Þ®®Ooô¥ÌËù7¾2ìÇ' (5}.<(~!¬¥òवû³\„Ì{s<<Üa~ýw! É»x5ÅXòLÖØÀ%´­¯|®K°á¯(.wéGQäÜ1hØd`Ò¾À¨¡*^&ØÕÛ»gµ/Þõpñ9Ÿã´¶âÇŽlgÓ8T Ät­T–ÄvlFjjÄóPô%`Á!LÓ©ØK¹7OòÈÎ×w›©ü˲ÓP•9› ¿UWÿþV• ýcMlbˆŒŒUµ›Ò=>íGà?…Ø‹,$$ …¨ø#¿çÖçÉ«äÚKç…VqÕ,‰è¥Ž°,)+Àñ*$>R ª*v½T¹¼¡g–;ûêÓÔôÚMħâÚ’……å›i[‚²2ªÙü[á‹õ„Ž´F´ìlÛ“¤iC?œGÁ–OÝ‚3‘µWY¦#fªË! XÌðð^fã¶ š¥¥¥/ ·äìÌ"·Á7¥– ·(9…¯Y'nœt-¦kÞ„GG¯•I’þ2ƒHÜàøl1½y$&.bx‰a½j¿ tjJ y¨s,Âwt72éŠ ©´§»Œns¡MRSK Y{©»Ò1é¹?ÑRÖ¡_½{zð¶%»+èÞV™ó>êß§;¨§2„€0î÷T£'»ˆÇ&<ôáì€N}Ùf¤¤Sú©ú—†`:ÌŸÝë}Ùt*Ü7TÁ ÊÊʶ1èo’SX3š¯Ù¨9Äôõ)bhD?Ô9ÎIx9©Á¿ÉëÐM¯oz0Š˜¿½¶Ìr…³¨ò5ÁFyls“žð«5ÓÍû”¶Wˆt·û[SÞºç]Vù}.ó¿i²±²µµL¦óáÙŸkb7‘A­–\TÀÝýߟ !f£kRIòØü”ðžL8ܹj7tƒ›Â‡EÁ#_¡S¤Ý Üï º$ÀÄ"|#$’wyi¹-8Fçu¼VÓfêç Ýl Y7=¯$“/zÞ¦¸ëJ Ei~pf›RŸÔÍ1bWÈ%ùgIÄDÄÄ„´´1››¯7Ïü +ÅÄ»T'¶Ç¥Ž–5¥ßô›A>à@——'_.M¶Šö's—ß/Z!戬YVz¢O²é;ðù3Þ¦¥Q­eÅZ$µ (W:ÏÁ½Ðøz•¦ßMU‡Ä1ŽÓ ²±=hò>Úu—>(ÝzТ‘½¡œq!h«áX’“íóžs»)•©/cg º^‰ÓÆ`Æ&àdç Üâ‰ÕÂoÊi W%'Âè"mLìÜÜÝÁÝÀóšü¢wg#I¥2D,&#ŒÙ²fãlˆ_ÅscçËQÜŠ/uÐ?xèæ¦Mó—y˱‘…Š^(êäå%`te p2:9òúîÁ“»ÆÊ‰ÔѱrVÛ]ì&æaýgícSÁ–c gœXا‡)z†â¾¾¾öta÷á¶ààÙ=¿fZqx(FÈúïïaf×#D DóbcñÁ¤Hܳ:Xßý\£ˆJëmUAüP?, 0„F\¬º7e›Õ5ßâ¯Qïd¬Ó3ר“îà‚ÎÅ•óÔy¿ã¿1HƒC%ðëõw=ó5¤¯©íîĺ‘ðëÝZøQÆÝ,ÊÞ~ZqÁÜ}Ã%K-TJFF×õæÜñtÎ0þs0>¾Æ11JÇþta”ÓüýA«·5Ðð=ö¦uZž÷¹:L£Žc8,pyÝA+/M›t¦&á_øí¸¸ðJ ëu=gÜC˜”´iþØ44F"ÿfÓ{öÌÕ;Ó9]+)"ÎNoé‘;9£iPX9ê*% ë&ƯK¦á½šÿ"tÂ:ç.qݵþŒ©Ó-]ûeÅz!æcT},Yƒ¢ßIÏЙnêýë…vÚÜÖ$mïÜ·<,øx¿®1_™›;”cŽíPfQôÕZ2â ?8˜‡|Á$³³cTîpÃ#"ž6n Ö?¡7»’š¯<ŽMCžä)^DGÛî^·ßJ Ú¶›N£ÄiÞËÉÈüYMº½Ø"tšýD[.±8ü(ÛÑpëk‰S'æâ} g7›^uÐý•­v™‘A´ïþûwèJÊ£GRË+M÷ €:ÎÀÝÖj²²Þ»ÅCÚÛÛ‹¢…-Þý h7@E‡±øÿÊ}ïr±?#¿Išðé¦á6êf–.Ú˜®@fÞ'ÉèåkÕqhÜÿ,ÀŠgV˜999ŸRgX•‰2ðRÄ JdÙ´?=ìgæ0Á¹=ޱ$å6¡6¬w’Ý›®§ü´»0ß"µ7øù^JQ±½üè ŒöPð¯—Ûáá!¢H§x8G[§ûæDmCä$|ž‘»­dÞÇû`¾kƹÍ8÷Ù”´·ÛÛLók)Ô—~‹PEæ¢GÁ³'–N> ¦Â¼}«²? ­Îjó›HOW¸Ñ°Aõ b;>9é’D~dÑn¬rÙÒ<ºøÄ{uë.õ;êE·)¼Rî®nS±_`К.¦½Ú%ãááv÷>W le :‡Ðóÿ§"°g$áÇ‘ïÞ¡nUfÓ Q«W~™X¦ÃŸm)Ô3KQø6hfµC‡‘é÷@¿bqÁöî„MÇg_xñî¢6-íñZbG£çÎâÆF~¿£üCȹ\ë"ÁõwXÄŸ¾|±;߉æœ? žŸ]î¹I«Vü‹H¿‡å}y¸Þµý9ûY¨•o§yŒ\OCœïIuEjJO%˜£ÝjdTšßyÊÈÉñRL•ï:˜uãT´¹u¶x••å ¬á_N†‚'Àº#V:E‚D…ÁÜWü®_–Jâaaa…ÇÄìÔÊNY!¯~Æ`§<ì1Ê‹¡#ñâ ?¨…ÿäHD=·I`((•Aw~[•sp"¡ú4¨~œ¥TŽÁ¬¬n[²¸hö+SÜ0£½7(C„ÉëîÛ·®²`slÞ¾'6ÕT—kÉîWC§iÓíCMô‚,ZGîYܯÝbY®ò¿ !VOû1»n‰À•ø në°¨…—g£cÚ‹È{µ+¡h*Án@`$CÛè']ÜÊ)Ô’Žhˆ2ÄÇÏv2^à^ú€Š†f^ó /fR£‘Éd¥—ʨģ2û«S•´û…Ü£Åôõ¹†„õãæP1); Ðx}Ž‹ )(`ýHÉ›§0Ág`7Lo6ÁµÁq5d?°xîhmù£±q¹ yÇ  ÿx*ÉF(ôr›]ã8ø”õSºÃ}µHkÛT•ìcXzo]Pø+¶S—:*(Ñ…v¹Nå*›ýÐæ÷k7Ûy}é–·ý§Øöõ‡a32aW–$çÓo˰~F)¶±ïJÉà¼r¼ªQðã”4ûWˆƒPòJKJdjŒd?›¶/ÿ ðÓ~ †›¸O±ŽÃn*‹ I–ü×C7בŽüܾõÄ…þº|2I%ù€ÙV«¾LèMÎ÷Aó“õßräyHò³ZwÐãÜfvZ¿!*s$RÿQê?Óµö ^ÍWSŠÏÅrÙ$nk;U÷2ßÒ\Ó‹Ô)ÖÅ=h½)!f¸9\‰èê¡ù‰ÈíÆÆ JÀÿpAܵ{5qHHÈæDyVÎSôÅo±Ú_>e¤Šèœ¢ªwôÐã,fɺ›‹n­ &¼5qÞõko.çVtPjDòbIÙýÓ¬Ÿ–‡N‚úICäëazW›:U𭝻Ý䦬t+ø’ïê_•6ôÕÍ5cyl£âÐተ–ݰ³™ššýD¹ê“•—g¿Ÿ7hyuEH뿺ý•U>¨/KÛ`þƒÀŒÂã`÷Æ]*Q2³ýÔ»œŽ»ÂZX1?¿¥F r ÀFûJQ¯èæhå«úì7l€³‘MâwÏå¦#¹œûp€;çqØýúÁA,13ëÕck³Df+Ûí Œ¸Z¶%]QäÈwYƒ^ª?órÎ~†&Ö“§¶íC¨\}ç.]ŸílηˆêŒ;ðp#ÇzB}@»tuBbiŸP­”ÖÏkÚ>³òß_À0 ÐðhöVKe€«Ä°GT0š‚ߎD1‰£ðõǃ6½7ϼ63¼ÇF¬n¬p¿ã¥š¥Ô>òvp„ül7x¾Ü (û´;†–äƒèÍÿÄoº‘‘õÛÐP×ÍáG[•vdÑ÷ðiûËJMJw¯l3}Ñ~Ñ,ÿh¦Ê:j3¡Á&ú˜ƒž é¾¹=±Hhk“4 <Ó‘µ,1Å·²*à{$ªÕÚ,¢),,Ôop³ŽóÞ= æ:(?©ZE‡*]CH¬q¸n_¢ÿ{±¶ª*^ηo#ùjt€’‘÷k>tYD@³ßhŽ0ÝÖ?ð~ÁgדYºneIÚìÐ,ÛÛyq†^Üø*EBªŸÞ^ŸI©Æ€ïŽg‰`NxUï4×&aÛçä{/ÛTø E–†û`íG€ßäyDä­ *ÏËÿ!QïK tðäXàÍùxîª$‡²Ç•ó”¦kØ×‰¨ûIn®®íêú.8þ‘Õ÷È»r?–Èè1úb÷ƒZJe×*™‰?¡CØöÃâx#+ðÜ@»XW¥+îüÏhÈ„ ÊÛ·pÉ{ˆ¦Ö8͹~rR+nÓCätoFo„B‘( FÊœ Bÿè”E-Uý”÷²ácâ.•ëê]ÀsÑEòÙ É8"Pÿ>ú+ðßda»è›à•yjg‡e˜YïLÇŠõ¸=™_üu]„Ož™VHÝKqܳ¨¢úª;°Œ4y;ˉúòíõ²ý<×VfdQ‰n8o5ÜÞ–×óõ™)>'ÅÌ[ï Ö$^È$$f m‡ƒu@€Üûá{’wêcÜ‘… ‰³ˆ'thV oyD¦%Ä%ZYCym 4¢‘ÆÈ¾3K_èÞt„ÒTŸÀäZüÎ8‚$¸To¼t¹¸Ÿõ÷´Ý-H5QÔçfW2Â’8N£9ÇNzX·}JðèùŸì~N+žlDÉk;(ãåU7¦°äÕàQfÚ'ºv YŽ“ŠŠ+kå¦E|‰|¶ŸÐ‹¼Ú½ð =Øfëw×-#Á…¼ŒhT–Š*ºj–®ë3/ h­ã eIÆJÞ_®˜f zÊfþ[?‡òŒ›"f#ßÝ¢†uƒn*ìµK!âµ®’&ð2V§ŒºÂ—Wé~Üå®ñõ©S!°Š)?sƒÌU+á—Q3fnnoÔھÞÿ@Ô’Ìt½sùæÕJÏxjXK‘Êëy£+¡££#Y§EÛ-~8Zào}ËçJ¯IYaµ32¸Ñ+%q<œÀeoš«rºžœ¦4ômn˜ÛUVÿVé0¼måw«¢îè¯Ç0Sø•°:VEÜtKÙ¸?Ä¿™(£1"µ½ÐCŠäçÉ5}|Ÿ LZëü|Lé\4¬‘Ť †QŒOééÍ;>˜/wFôþú•ðP)ŸøB¸§FÊ®ˆ»¦ÀñÀC„ð’üy+¼ÚË[÷lOûÅŸhÂÑ÷ÇÇgh냤¶È—ü@ŒÍSá šŸb‡@¤Ì¹e!90Ääòdº D1ƒÂr01H¶=¢Ib†×~gñæd劥7ã€fG…uÔäí ¨šº&T½ÚF%Ã@³¥ïÓ5—)ú«:’©ê’8œO}=BFNÔ,ãFÏqEÙ!ðéZ(Z Ò†¼ÝŸm°ô€–OìD \W(Âsvì-Ÿ?)`ƒÎ2U VÜðñ‘ªéeíÆÆ[ %üµ.ãªÛ)f•/‚„šÉí€+¦ášÂÞãÞù3 @`]-Íî®*Óµ®Àtþ—³“n÷ýOÝ<8h´(<ÞÏí\Mô葾––©¼äüåäŸaüûÌÍ‘oòÂn§ç¾ìCNV"bh¤Öú5¥…kw&8ƒuû,Þ=VT€á)…ïeúÙP_V>Šb"ìo9Æììj»¦b¼“bëìL]ÿù®eW??¹íµæ¡èÐ&o5±Gâ$ÀY ”Z">u;t€Vzx¤òR­g<Úcl‡pk}|v}ƒ2SÅù“PÿvÁ‚ÊOyùò¥ÜÐm±®ó~)BkÿX²-Zgx(bìÁ‰np[{ðâÅ‹Š×# [•€ÆÆHâXºnÿ’©pö¿ØïJyjùÉB®9¶ëPâæ)ËIN~»¼UÈQ‘Ewx2”ƒóå¯ú«½e,4к¢ÞùÈ]mŒ¢Ÿ` ïqÆdݼmkˆ"ž%>äÏCÐq¬@N‡×ÝÏpz=üÉ&rpK®€ õ^XõíB£Ó슊 í\«Å“X?ñƆ†%5%Å!±’虾y›CŸÙÞ Œs%°BY÷â|æ[zÈÆÑ8û·@é^ˆX,üyï{ïKZ7)˜XBÿ¿í7zQQ*°J‘ñh±eë†G{(@ù+{Ußgþd=·ôôÔÃc{¬où`*¡„£sÛ£`oùíAdUÊé9:cˆyG¤Ò¶úqK~Íe‡Æ¦‡TßçþîÞ™#å©d<ȉ¨ŸÚ°v}‡ýýøR3Ñô—™¶ÅìÏ5-Rþ,Г°£ÿJcQ¼ Èýà®Ù•ÕÝÑ©kÎCqø›ä'€ê ‹K|#,Laɳ諧gäîÉîyrØÇBÖóØ3—­`e#®88 âMÞ÷ņ€ŠÙiÀAï°L„¡µp]¸w÷_œtë4¥ÒÇMÿC²@»åXöÄ€ûT§úgÛP <ÈJ÷K|YÙNTø]êSKô:Ç™¼×„)zŠrèçÛ¯ÍxQðñ7±ýâT1Ø1¦7"ãuž\Í[îij–B&›}y¹ŒO'7ÆôÒØ†nšËײv¡àdë~ÊȈȳŒœÜSm%Ô g:@%Ÿª[A™¢B€I¶b{à %[ç{b##/Ÿ6~ZÎZUU}¤PÞÆÅõz};’÷ _þæfX:jå©cÿš96¦mecsoÿ4“Yô¼é6ω°waD’›ë² 4̤A¶©á /••e†2Å ih£ß?—íCþ·?kmM’´ç¡pYéÆ=c–fÎõÆø^¢Ÿ¸­¢ŸˆêöÙkk³·aÏ ®6ùYptÜÜ®ï9 Aw]ClW™Þ|ÂÂÛ1¶võóŸ«‘u?z7nÜ5_˜/¨¸y½¿cêh{N[o;D ÖÕ;/$ÑûyVš¼ž{åǪY Éd=„<ê¡+ÐøöÍýÑÊçÏŸ ((X=²ÌxèùY0°çf+»ÐØMý°~K¿Èía:yò¢]V²,³›þÐ÷p–÷òŠRtÔy¢ôýAÖKf]@Þг°`TÛÉNÀop+/é‰u?ræfÓV÷Ê5ì{ñîW<°Nsws.ʼNN>UþÚ¾7Ž{š_÷ç[Š 0 Ĥú7€X0´VtµprÝGXd\¡j¦Þù›Z–DЍwÙéÿv¦ÚìH•î÷"ÒÒ`úÛ·W'Û*ðÙ±¦ ¹¾¨¶'Ÿ››[ÚÙ‰Š•¸Æ4¬w–0†/Bi]ãZ\¯¶H‘Ø@¥¿™Ð8÷%Bý#–WVžº­*Ì6z*ù•é„УÂ`¹a X’rÌõJº.¿kŒÿÚpò[ðˆ|Oî0 ’’’|oþ ‚ ±Ùtø"^ʺß^ºÊUäx(ài‚¥âØ ?ÇÂAGë°Zoìª.¦I…¼>FûëVç­ =ƒÒ«ˆêT… YVVvxv–ŠUÚOpqÝ;NÅTçñ1¤ÖÕ7YÙä Ž´ ßäñºãÉ,°byÞo‡ÓÊÚúeôÚ:ºr: r‘Bò2o5²hKKaÀì@ eÆÒãüôå ›xRy9÷C~»w€.%ê™,MYQyŸnjDe9ÎêwEL ›˜½È£’¶ wQÑÑ-nÎ÷þXê”áìNB•³ð~:»7å[idOìTú_8Æ« ¤$½1˜—žÎÁS\ÌÞÜÒòÔs[›Z"€BMìèݘO®‘[ µ°ÅÑ ÀÆ„(E½×"km¥V.“âÂИ€ìø2Û7ÿÌxÕ•žªç~z 8E/á[ Ò*âÓ§OðÝ]‡7®···ÃÙÏQ¨ÅýHœ[¯˜Rúª±]]]Š[séË ¹ÿJûB†l¹OFæÁ\[0]\\Ü—„Û¦FØA+vg7ÛÎCµº|;WIMeHítÍ›É÷üûyå‘-Ãóónpߘ±B-yEêÏÒ[c!·Òñe¨‚8Cé4Ž –ùåö°’é×á`â%ÑF–äê°› dŠû²‚aD1‘­Pô Kµ×Þ«_¢z¯F%éèèш[¬W.ww}ö½“¾AÀqÚê¨z~^ªã›j÷`% ®à_‚åð„ip4 jë’äöRüqéí@#¢_bRÞó…ß~,í#±ˆÿ9:>-‡õQVÓŽdÀ¥ µdPzT°¨çý­oºˆgÿòÆL TLL;ýM“'öå²4Mp Sƒð{n®ÙåáRxdäg“ãòQ¨el¦ JY©—0D·Ü¤tP&]]S“†‚÷ùsÎõ¤„„èËËËàÑ¥MMÅ´¡5É{ ;Ä~Gëý8IW”0îh¢¤íï±É ˆˆÞzîüTU#_…+#8 ؃_}ݳ}\²b£¢¤-,rüˆÝˆ€€ƒ‰‹+ ¼ =´Èòæò›÷>õAç²íÉÜ–Dv=6¿Ö@Ïõ%Lçºsœðtbãm^UZ ù¡éõWµ0Åb÷ù ~éCÿ¤oºšÞM|SêáÍA¨h€þü”n±,®Äüò;×þûxPm“žÅÀG™Ò¡ý‡ëжèÅÁÚÚû㵕¬àî宨¥½½ÒþV z÷mz܉Ì+$ÎjpêÈÁ©“ÏYµ··Óœ~ªÿ;-jçÓõim¤ƒÀ'†° È»,6wW+@Vmþ-¥ÒÔÒҡ¼>m×Qógwj«xð¦KÙ`]€½qƒ†¦¤„B²®®!丯·vf®¸NˆÇz˜ÞìÂi1‚€Xѯù<d€VÞVî†~ÿþý«ûÆ`Ñî­¿Ÿ_Žrê³ðˆˆvï…@ SSSR…ºÇüü:®š¥†‚ˆ¥ïXS ¤ìð›‹P ê ÚdnS9Ln‹'eÑUWXa-PüYñ;ƒE’j t—T¥~ }J³9SÏ]fÜô@YË«ËKzVVLPc™™e+ò>6¬Fÿøûüÿjj:Ûh8B‚^ÀG‰qø[ð_ôcÓ&÷ÎßRiuuÕ, NqÝxfÄWi)äýé86㇛s†ST‚N§~B‰ˆŒü9˜!JÊ ü‘‰ b”’¤YÇ\VƒªÜHൟ¿|‰ÈЬ¥váO*c7ñ]þd2ƒ NqóKMMõÙ)­ç¼|üKHê³×Ÿ6áFù1—é‘û¨~ÞÜn†ZQË(+ãHÜjÉÒ ï¨4œQ³á\“·ž«—UÔ¿Šæ¶ ã é°ª›à²‹ytû¡·½ `.Fuïúl"wua[¿F!á¶ZXˆ4O…*Û\ÚÚòö|ÆY¿É«T„¸ÊÝv0ý¹•UnWT°··w« p3Nð¨úŸïJÅbÒUüóè–§ Ì}#(¡_üEi6'¼)ä‚ùµž;º»“ñ϶=Cîn®ä>EÚ¬*¬Y*gŠQÛQeé}0/ ,J©Dkk+&N'€)ÃQÞ ÂÑõó~ØøtÚ|rúê UŠÀxxm ~-µ¶ÏeŠíëïÿ)zÐÚÛ«0;‘Mz”ý±Ô!õMXPß-¦l#akK£.í…T0këG£ꇤò|rnŽxÛåæ·Xp#-ÓP÷Gßßݹ&r@È“Æòºæ<ˆw…°¨BŠuÁõAw¨U×»£©ÂÃÃoѰ#›)X‹,ºà¾'2}m±±cê«ÙÍ-!G+‰±'÷7öfÿáÒIPó÷Äô]V]¦ï:e:Àÿ¬è›Àm±¯Òa/Ê]šµXè饾¿œjp]§Sƒsܪ7¢³»ûvY„Ÿê×ڣܜGŠË(~¤Åeu|–•šñHú}Oß|ÈP–$"l‚õôô.¯¯-Ó…'kíÉÙªƒf¶À6`bªÚ à7IÞBn¯‹Á9l×(,9>>0Iœ‡|˜ûsñ´ÜbÔB.RFgò¹ m’<6]ÏÊ|MŸjñœXCÆÍÅÙ™,ðJ—õ_”µ¿AQ¦2./}tZÕ`0øù^âPÏ< J<38s ­;Í7GÌ·ø¯|‹•Ð44 PS3» gFgÕxaÇêöŒ˜bÝÏJ·6#~,ßj¥Ì¤% “©-—Þ®®!õõ‚yª‘âþçÙvãEŸmê6ïïn|ŽºÈã22J}J(yµS>¡ø\K-qFÊä>gм«§‡QHˆ€Ú3+RO2õ—Ë`-fx'Ä‚l5c¹=££ZãÉ“'€õñ5í.ð‡K%ÐYiÙùúÙõÞ9:}‰.gÛ:]+§»X¨èlY±-3-†§íf~¯õ>m7;í%£ü_6»Åÿ¢A¹=ØØ(1´h™¾r~¬nŒò°³í't~S<³ —¾§qâ¡KÄ33“5Fn-®¬„œp¥7ޱÀ¸©N®ú±áéÕF–åÕñZd«7FúåŸè6qz'„kUã—%@¼ƒ°k 3ˆ `n-K©iT<Ž+¼8Õ‹ÆÔe\¼1ÖiØ–Œë­´\ÌkÙòP=˜èæ©ã½øÊX¹)]Í mm#ccþ/¦r~üRNáyžX)‹¾=¦aÍÚ$`G’ýâ)áKpßHø#˜½–Éթ¾N1¬í`Ž)5DdèàFÜ_°Ýa­ýDo .Ø“x}(Ëùx¶M5?XM°X˜˜E5;ó!©ÕD™QÃ[À³L‰ >¯…Ô/èškzíßÈn3T©Ì(Êx :qTMR¶Ü¤Ååd]eëèÅ 8£¼O¯Až)4(¨¿gd猂ï5A h^»hЭ Àã¾|±;圽À š,‹ºXÎjº‡O›í±y2$©Cé| š!‚Ö| :Fèí^{¨ƒ;óÁÈ@Á4€k(Þ :iç3ŠÆ1é H\JeTjjjPS<Ù*æÍ&mñ'7nôxÚx9ÐL€ëW˜w¸œïðÙÿU^¡üÌ©hÀÉ\·ÇžètïüÅÝ•Oüº««ùù5<%Ýa/• î ls"^»`ÉÇ›Qæ­ÊþDg›>É©ßàŽc”;@ˆ™À«DPìXÙÙ±-Œ$$º åµv:»³ Ä@ }Fjó²Ž H¡è¸?€¨MYî㪑ºò«ªJ¶º,k?ô.üAG}¥ŒUr—1èqKñøcYëŒO-ŠŽŠw+2rr³D|Æ—iëÇOŸ31òfËÇ;EHæ433C6™Á»ÊZ‰ýWŒCÀa祈wß®g»Y¨VZ醊zéÈ`…:i™˜Ï!„»å”<ÐTRÂQXidÔ9·SYù¯Ø†Ô Åo{¾2_` ©=®ú&ˆÿôéS$ÛÝÅññ‹÷HAzdffê–û°Å$0Ìåç6Ç_­!½ à{OÖ¡¦Aoö âþ«Ý˜ãïoRx©Â¢–Ùy¸ÔáºÖO Lv4‰ ­Ñ H½Òa0@œL¸Þ\­¼ž(£ñÚ y@ÊVÀ[€ h0RnŽ|ë‘8¤hx8f€F‡Åbo©_¨ªâssÐz£ZûÔ~œ(Qhp·é>aZÎÑy£"ï7´¥€ä´ò× ͼ+’{Ôêy: ð £ÛøÀËeìl•³nQ€ý¿}ûö_]gðaB2²óÉå6ýJ V½2ê¿å¦±À[b¢‚ý”ml˜Ñqæn//t \É#Lkí ~ágÀ*œ0ôg–Ñ&KÅÿt“ÐÄwô#(ÙÖÖ–¦%@q'+ûsRgÛÀŒæù¸.ægÁ-ºÆ¨N}„‰‰‰Èó•6‘›“•ŒŸOj(/ŽŽþmo€‰ÕÍáöÈjFÄôô€ù˜`UCEƒ[c÷}û“—õŽîâ{rH_òA*øþß  È‚,EÌ÷ÙùÞLXM ßåÕÕ#€>&s¿Ð×O©Í—ؘ>81qŒòÚ4‚ôý ©ñG{ýp¥biáÓh¾ký…¢´„”=PN%|üˆ£œ.DÞ‘®çíLùcyE–—…Á_Ð>é:¢xÁéÞ ¹VžrȼbX ^é«÷Üm·D”””à§‚éX ekjê¦âOÕ©¤ ,5ldjµØ*WDô'«M8*( ¡¹ß E"ˆ¤Fó¶c^ÊtƒLO`ài˜XXíUÖ¹=Çäyä¿ÓéC¢°ï.¤ªm¶cìy(ÀfaïÂÂVÀTžI8£| °f&R~~"€íýÓ) /F…?òPà€§‚~þüy¸ØŽ¢ÓÃ¥›l6x M¹½ZÞ ¶½ƒCQÒ _Xáþ³6ýj\PºLa«ò ?J 5á… ±ðÃààJußã—g=óæ(¯ê¢`P é,è=€o¿ã‚%Z`÷þgÖý¯‰Òv•åø³£ã©ã4ßx¹úÉ1‘¸ÅCA]Oý&3°$6g#dMJ„f¸˜\½µ¹q…(î ø~k++³?¹/)øíÆÚöO“ÌW4ޑĤ T®ŽÜmRö"ÉsÀ‡=íŽûX¶ñ3Õv ÈïÉÜ–À‡þY‰ qY„¼ªsˆ8Û™(–¨+.f tžÑ=ûêh¢I4\ÍrØŽáÖƒºý7‘Wàënð›.ø6äðЅàJÆÃÔTãáÝZò¶I²œU±Ý_’D“b¤0Åݱt± 5øÌ6Æåû¸Û²dûcñéîÏÎØ=7,vÆ;ûù~y¶©zªîõ‘~½êग़8šØEzzeD/ˆ¦l 7à2€K,ùXoÛßžªË|IlÖƒ—íñFxˆ Ïè1(Fe`’‘•}døÓúT$Cèâþx ßqôÔÏl]9[…Jê…*D½¥ñ‡œz~<¯a*¸¥ú†MT”Š×v°€x¾7̯ *œéÔË3ÁwðÒ }òô¸_ÿ ù…ÖÀ¸„„Ç,˜#¦`¶ŒË(ÿ+¦Á‰DÒù(78â¯úvÎéùH|nÏÒîÖŠÔ¡› t.ÞÉÀIc–óçW4• -mÌÄò³Ê)˜âÆà0€]^*àÊZ|@«sŒOF…ÀlÈyÏ”)þgÙÇ¢” C^ÅÖ°ˆR¥HÐlÎRþðÕ2I×ü.#›Y_ßL!cE ,œB SÁ3²¡øIÓp( e}‰5ÌòÕ›•s ²m$û9 ØÒ Üë¥úHý 0Ôí‰òXa÷uzvv¥WÔÁÁf£ÌGÎáÕ? ø–ý/ŒÏÊ/Še°èŸžÄ“‡†ÿmóe|JJ¸I‹xŸãpî*r€;„.ˆ€Q`6^ŒâÞÛö—ƒŸŸ̼ÙM”×( EáÔ>RPD óö ÿ°øšÙ†j¶K¡¹C¿š$ôwÀz£µš°Þp›9Q3<£èÿã®LqÿáwÛÝ…6S¿’íñÓ`4¹˜ Æ>Jàx2x}¾ûDò/ÀÁ(8²;ßb$UeL+… }fÐõ›ÝÉJi¿f¿3å“õ?ÒSïN=\ÅÊ‚ƒj‚6a=k“ !).ð¾\¶Ðv8`%8`co¦þ{ÏΊɿä8CØòZÉ+&‘ {Wš‰ÖÀ›á:GC`¥ãw$ûZÁ8SÞrþp{¼8ì  Ië—Ê¿Œ…KZß9VòDÂ|å—&ï°}а{Þ© ³“¢Ä@JùãäïÇ99î®P›_¿åûÑ×à6ûº£¢¡½ùC’à0P7ë~±£NâAgÚ?££ß{ƶà}ñµwîÎŽJIÒWPÕÞXo„N†¨|ÂÀ”Xn$ 1@uøgßz°ØNg±~¡“JˆÓ‹+‚Ú¸Þ ˆåbµ×ä¼dj’w|jVz˜ìÁâU›Ñhñóü•)NUXXø¥óì=‰›ËJOOåÅ«ñŽ06w8ZCn1V= ýâÖI2Bƒ€_hÊ”OXÎ7ûþ¿‡"€·ýw(BFõ»¹ôb/¡«€>;z(Ì›HIýÃLÀ~èEE ›°>­ÇP ¿× x$€%+à-ü~[LcìÎaŸîä(‹ÚÙÐ pôª† ­ÞÉiº“‘a$ädJŠŠ?!(Oíÿr¬®®*ü_>ܰçà ™ªË›¨®Ÿä¦áiü5—‡æ2rr9ÀÁ)ÝŸkÊßCUøË£¢½éZé(2N° áobqé0‘!ÒJt”Ã>–å¼Xv½ÕwoŒFèÏŸ• UŽ·L QÔ¢^8À:ýÍUrBF'ât+Àýyî{=¨ïrÑ5±WÇÖÍçÓöú• ×ç{Q““ú{,Ï‹~݉€mbÀ–€Z’52J_w?伪µKyfÉŒÔ%É•ÆX¼tuEŸ§Ü}¢x|oæ£ò%¼+¸Ámºó[ðáð“v)R9……);>àvl:ú=wkâsžA×. ç'!¤\ÚãTŒXY†‹x–ÆÆ³¨-×N˜H¯õ'Žä©Pqý èëëû›F .X  {ÀëØ´ àà%:À¿­é8;¬r ü.»$#u{þMu¼@ûé>îéî“~dDok… Æ“ŸßN„|ƒÝeþèOBKâDyú=Œ5=D+–Œ§ÿÆPâþçfƒM²^HK† «_ÞÜÚjª‚¡«íîœ lç‘’BÈïWþŠÎ2d0r‡;r¹€„“›’¼áÔ.ã C6éqµ¶1§¦@ès^p7’€pƥ̛¼r° ¾+\Bƒðò’Äæ„EÁ¯˜ k8úM>¶ÂmM48€³bâàÈøø5zíE*ÞbËD&$€‡•„(”ÏŸ?—ˆoKäÄþ•‰{»!9è.¾Ûè‰àFyuç `ÖãõŒ¥ky0ìR&~þü6‚˜Å0ã? s/.‡Ñv~~Á`HF¡yÌ÷•ŸåurøãåÕFÖщiX–ýxÑ{Õ ‘¯Zùª )//O´}݆E ¤2(n­ôöVœ'Ð~ðߨDëO¨+¸ôóÓ¼×õÀO€ 0SïŒùÑÔôÍ÷d óR.€jÕƒÁ¥êÓ³ ÌŽ &à&×Íùžt@@³1Ÿ^‰.®ÏxåÉ2r&‰*‹®©¹ÚãæJ(œ<ï£M Œ „ôMg@\ùœü<êÀ—TˆM4<¦£ÁõñQÀ——!BC…4y£Øÿ — iC:íQR&'&¾¿»¹°DÞß á4_ÍᘖÚ×ç¡è¦mŠ" ùÕ§§`qc0£ck4ßõtSÜä~™‡‰ÑíÕCQ²Ãã*`ÝâÓ9®8 óTš—»BLZdrÞ‡SãqòÃçˆô!÷Á—±køwµ¬tÌ =Ù£²Òûˆ·hˆ0:;w¦Ô‡Ÿãã‘\þCÅ]‘àë·ÿ–F=ä·Ëö;Û·‡ìÆ BŽ× ßÔ¡ù_>³u€[5¸¡é•›tuE‘»žï€þ›™ÓÕÜ c \ðÈt¿oDòÓøöùBÇ`‚Ù#7pKP^ïÚöˆŸ_ǯdý7ØVŸ%ómdx bކ‚B„ÀM›¶ ¹éê*e "bâJ þÀNdÓyˆO2#aíuèÚ@²üT•µF³+ àÚ'&È™àmm’bââKÉôµ±±øb÷lÁÏ(p~#ïL•””¤>¾¿Ð 8ècF&&4|Z1@!\7if[©"""‚‘)¾òK{¸)=œ×)0Û›zí¼ôBc/[vAVP`C‹©¶«= ;0xo @[.æ;¶[ú²ùyhç ½7Y8µi¥ÅrÊP…ùy&«Ñ\Æï”’¹ üÙðz¦ÈïñiÃÒÙk#ôò>ôVWæ1|îŒx•O an‚¼~]À,)9ÂêÐGÄu‘®âİxl­q7Z”Xk+SWÐÙi>úGÏv6>F!ïnBl~×Þ ¾áÐ vIÆñšCú»=Õ!`Iß{ì†!“õjéæ6Ö–yQâSC–—áNs“Æéï¦kC|OàÅz![£é’ôe#`>ÇÑp±ŸôêHL\v(&S|*<¹wêGÜ÷ëWçGJ^>Î+ä6»ÆàK™„bª#×í„KQ‹©gçʃ¿q1±‰¿ß··fà4zbSˆQ\®‘;.œ €ý¶ï*b Uœ%z7¢‰rSyÇù ný}#xÛ”’\ŽÔdºù0Î)]Nò„h‡ ã/®~U9ǨñqYôîìT9²²PÂÓœ÷†õèp––³zS+að\`±ÿf “žì`ã¡Cåx)û —€ÝcqBáp‹®Î#¸D ü›|ÈA+JЭÆîÇÏw'Ç0¿Só Q”²²¿™qgÖ¶(¼¶°ƒŒÍ³ã_”¥%© ‘cK `/ú«2ðÚ{QU] _7…ãƒ)0ðP[o‰Ïs¦Ö®¶Y¶Ü7¢— ÕoÔæ#TQ­;ÿUÀjd·Í"ý¾wwƒr¼fOA‚Ž9ßg6‰~(%ƒŠ¤#ˆC BâB••-Ãèr¸ø|«2’Åæ7¬;:xrú»¨ÉØú š€ÓJš Ê“'3iH;Çuø*w¦´øRЦ¦y«Ä‹õP¤Ã`±k˰{ #ŸÍäðûŸÀÓQ"£¢:ýšü¿j|&¤Ê€n¨ö÷Èï2\àçæ£4yG½CD’æC bóóõO½wÐOw6Òõ.RÅO%.Oµ—¯n¢+Ÿmƒø|Ó>¸opPÎÃo}(«üe_ðBkÎÝÀƒö®È› ‘ˆ~¸e cí¤>@gá%öCÃGãEgCÈÐE³lWû¡Þº ±'Ÿõl_—›ˆgû{ ,1å¼'›þþöDí#­øÃ&¯½Ï´sÆ|\_Ä ²ÏðÍÈ8„Œ³³gµÑâÏ@XáHE@Ž‘.j»G)òái'W°Y¶þáDÉ›=Ê©X ~é™@5µÖzÜ܉_¦þ-͸±AcxîÍaÐÑÅ‚ýµ’Ð9«‹uP‚®±|Ö)X™kÕìD ‹zÃÅýáÆM•!ßäe/<Ÿ•z9Žø5]lØè,/|M+*÷‘ ÞàõW7ÙÞÎÙ²ŽË„qw HÄPâ Ü_m¤ðÛ“¹¹¹ýÛ7 ã^¿k—±¢ëO"ÕËzejk %ç‚„á#O\7 >Å™Ïù¾ÒêŠDjkÔ¼~ä;X}^²;Óš3€ü®4Ýiÿusšôðp˜™–pJˆG»ÚššDr±´Ñ¦Áw:~‚‚ôl|6h¼ˆ˜nÖöñÄÎ.)Äô¸Äi„_Q“÷Þý¢¬ôqϵ )Ò ¹>ë’E_îù€+;ŽZØaF rϬ{Æ»Ðeòžgúqò2²àÓL·K‚7r¥=¬i+Ó”Mà‘¸H¤ÌvÝݬ¹ƒæg¼!É!Åz]-{¾ÁÍ^¸?g¼âm{äLÕd9k‘ÃuUm“Ã=ÚyU;Y¢SÌi¯‚«Êw²þDb&dÉ_úœœóEÌ×ù”-Ø®ŠòK‘¾FBO77àÂq*G‡sc;ã¼÷_$‘$à²P vÆöõ-¯Ì‹Ó3ÉÞŠ1ɦc %&1³á»yÄí¯¡]^‚,’ç‡Ô.¯#»‚Ü,ÚMëJ.]VDEŠ#¢ÑÐqÿì+öçg‘ý¦¸B¦‡s´·‰„ï¾3)ït`Ëe2®e‡;å!y*üØJ2Vä€$¥[M¯ªy3 7¨†´˜‰qsgËã¾|Âóó;.ÃÅÕõùKvê¿b¯ÇPâùœ*œÊÈÈl#QD< —Ri]ÁkýˆÃ%£[â87eÈ'ôÐöUŒÂÅ0¡êjYËoÝѲ…Œ„„qÕ¯štµ»öæKUšÿ–†$›ÚtÈÙþ¼˜x ŠE«ºä®†ŽöÐ&ïRq*†½Üü(»á˜ôO^‰ÑÑ™-JÑ?–9 w±zóÜù>1ƒÁ•-Ð?óRÀ¿+uñ¿RJÒ÷Fvœ!‰/vSRðatyO­ô‚½¢&ñD2‰ŸÑˆˆ¡ù›ø»RU½¥†Ëýß*x\É>‡‡÷rÀj°¨E™%“¢°‡[[~è &ô‚Äìû¡ê–ÂêFòba„X`ÒŽJýjøýw&ðqdŸãe±‚¬rôkÔ}f y$-“ʧú²?O*ˆ“!ḗJ L¦Q*1ðe -fêSÕ3q_}&á|Y.Wi¾>“MFö'ÖFتl B±ÉaõÎ`Z|0Bs¼]áÿj@‘û;S\*ž‘ð$§&y&‚% …"Úb7ÖÑ=¶`§;>¾}±¶*è¡?„—ò³àqì‡>ôú‚Y×¢þ~˜Í™(ËÍ…á¿i[¿:QÖÞìÖÇ‘¬ÀzöŸÌKªµ¶ ìÀ‹MdVÖ«¾Ø9y—¯A“@ÈØ)¬,”áÙŒ3ÆpA–á¸Hž`ÎäŸkDãЧW´Ñu $Eh†«Y÷J•[LÒOìg)&uš~€oÞ‘í V'p¹k¼õÉÌ”*7Y^°ÄÇ¿:*Ù[}9²Ëýä¥ÉG<pOõF LÌaú;U/j¹h"I»­m×îJgÓÅAGKbBBÒÕ¿œ€¡$ÜÚZ÷Åê~.ˆ´Sâ°Ý‘m@n9{ŠÐ€]÷¿+%ÿìé‘W%`ÀèP!þèŒTŸ»BÂ]減ÈÒè)«V§Öa†ОW²i>¥†Qì÷Љ€¯ûžHŠø\neäȆGF¾-..n–’Á –‡E'?æGc¹§½ã Êl‹—Ô‹ðw¨{ËD„„@\Í*ªI\ë99‚šhܦmàìŒQ Ê|F[û>¾ó=@­¿ÚO”¿%æ¿W`b*}JÜN¯¦«Ð^KÍR|ŠÿæèÀÀà&¡Wsœ´²+ŽYSqºÜ îÕ#înŽ-P10,5[ •ÓL/ƒ¦*_ÔÚYèµú;z³jj…<Ñ‚ë–Âåk¢”dd­Ïì² xÍ$®À®¶üPthPÐñŠ¡WÝñGÌró¾à.~óýõÎåùŒóÒÁ7 f\<¸ƒ89-ã.I%²MwKøiφŠY?ø”Yöo¨FoÞ€šë`ÞÍ;Ï”OF.2XÍ8}Ñø¼# ±Ü…Xê8¶Hà0 ZFŠ3«¦c’Û^ª0}þ¸ +sšr¼&û-§‚DZœµ¿Ÿ¨úæµ?ÆÅEH(œÇk+“•¦& P¿œÕ6?OÇeÃo…=tÇàñv°nfð½¯ïóðtÀŠO¹sÌyÿãÙaKmtà&-Çż8J¥¤ðkµþصuæ/Îÿs#l<:²¶ž'OŽ-£ f tK¿³© .ø³",¢²ÕèFúôÙÑQ*<ž W|ª)#c†E‘¡ ²+ºõ±î‡H‡EZ:¼š/°ä40@L×.ÿj+AourrlèçFV0·m_Á›ÞßÓÄô 3cZR¥¯¤Jf݃®˜˜#ÝÓæÔAÓ.+1¦´Švw3Ðò–«œY^f\+Îe«òò%BMZïÔ¥ÑèñÜw¿HÇC `-7÷ùb¹¬5ƒ"«Ù$ÀãWãóí»5ïüÍE—Îû!IütÉrc#`\ÆÞûáÆ—G+!¿”¯ŽØtIdüo$“8y(àsM`&W­÷™Ë¢x‘. ‚’Éß…CþeÐ\¼1D„UØÆ iCýÎ`ŠIcÌ™œBÞxᄤ*±›Ýj°÷o“äŽN«ÄáEÍ©:æ»yTLNf¾è¨ïx,`ŠÎd˜óJ ‚°Þw©¢Œ_05™¤X¡D /¾¢Ê¢ÉË©«o½õ(„þ黺«DÇ }18e[Z­6xãK›Õ@>ucLäV5á]~f ¹Oý¤lL8!‡Žë!šŸ_Ñçèú ©ouõøaÜ«ÂB 씢¾`T»„å{%¥.7d­ýšÊ=.: ˆ¢ž;¿¾ªµs{^ð¿§Yò@hD ¿¿Dˆ§.æsݬ¾\ÜÊïzö_‚À–—˜0n‡bâ¯Bâ¯sxB£¨—g„žáÍ‹÷·x4cë&¨) §{ìçQÀ÷í¼TFñBÅ£MȲæƒih *Ì÷ÇÕÖŸ›M=s+ãéýõK@ε÷ •)M_߈VÈ7¹BÓ¤¬8hî¯TÆsàY÷@Àáa{Ðà½ß;T¬){û12’ÈpjöùˈɢäÏ0ò> °Á¸5¬X”ŒB4" >Rq¬¿ù8Òñ,ulm}FÌ›k,Ü{)%#S7ÓF÷zV¿å•ŠÉ@’E_ð\£Ýñéâ_NÀäxö¥¼¿¿[I€g•(¢Ó¶°Ú#(£dI &~X@p<ßÈBƒV^¯øtxx¸ƒmmäø+@%öÄ ñ¦‰—¶‡ÜÜW¾~®ë'£jÇÏÀ|¸ãLÝWÛ¡Ìãá½Nßqã·‡Yv‡‡qãã{6tu!~¥Z¨mÍ·l»E„o.•A¯Ïˆ‹k##W7tʹŒÄÅWŸZ!ƒŽÖ‘9})‡$n8ê¦Þ^Ÿí `?bPñÁ¡O쳫ñÇÔ~N½¼ÄþUA)~&ð²†È99Àú]í „„…õþ‚Ÿ=zgO†`¢í3Ó6®¶€ã—‹“O=ddH]+õš]¶>ߊ™šVöB®V~HÄÐü+ëk缄¤þ>°3˜-+Ž2bÔé‹è Û7ª%öãý‡HæId —ÿ…“«ÕbçöÙ8ÑÁH÷íî’‘çõ§ÆQ½‡¨™þƒw›MZ”³_lX»¸ð€…ç{3àþ›¼Rq³]}€Wº:U³^žðÄ¢pûþ´¶Ï¸Tp¯½1åûh9z6E¾$Ïú>d#@ÜXqqq½ýýË«Y½] ‡4Ú>ƒ7Á¸Ûp æí|áBe.ý$ÙÙRŽ„qÅýCÌʸºÎ³Ÿ²ôžñ¸å²B fEÖ¾—Rñ9á>±þ*]é4'¢m›oÄ܃6|̦7ûEAÏ,ç@¨þ=5E˜8“ ZÆ\„qì×û¢‹•=ð÷ñU~g.ÝÈñâ|f5îãcøx±,TJ÷ä•©©)¸uàÜrFƱïÄ Ö >”$º9 õ9Ó9ÎÿAlÁþóp QkoWnôÜ‚€Zä±ä€:2ƒiÏ“²òYȹ#™,ª½¯‡³¡ —Ý]÷3¸"Wòê~óá[}“íbÀÑtËH~c :¨'+ÉäÚ :G­4<íÍT‘ À$FÜò™Ãß‚ˆ?ß—W4zÄüú¥\ózäh€hØ™Õ?/¤»ìàÿÀ°™5ÿéS@ˆ€#<]à9ß ñÜ[}ÿ>"“‡ß¾¨o4ê¦kóBžÊ²¾,%€ù±t±¤ìºÙnkýæ÷þãÆ'ó²tL§¨à·ªy týWœ÷ú3Â8ZƒÒåêr{½ÅÕ—W¾™™Ë>m÷wP€Úûú¹mÄèÖÙÆ6ãsT¡‚72”S% gc ò&Öx?’‹ÅÔìC¡sµëvÂÌãš³)q×NúÚ±õbªm§mVIýÈ6™óÝLM\ÖwAÛA€ÈÀòUû^ÿÉÅú3: ž?âH.6à2ï-*Ãå¹[ÓRè\Ÿj¹ÎŸnIiÄM$JÇk2]‡VU5¶*+NlC_Ý껿CD’"J Ÿ°VRÂöÀfq ˜EíGhQ R±´9Z5lhhR/Þn¾K'€ñY±?!DÌÏBç2ú”µ±‚D®ÓýÒsw#|EE8§!` ûÆÂ”ÌñXà7“qèCèèè„aŠ:»*Êìw¾&™¾ª#Á×x–¬vÿWp’!Á5~Њ}yU8ÀÌàVÃk „ò„V¼^>y~kyíl3V‰)~º( 7#==¬þ¯wš[}OÇåŠ!Ôñ”ááRŽkBuŽ’R9™ãŽ3c k*Fê—[;ó„3!¿É5l¬´¹kÀBÝÒWxyã・@ûF }NMCJÇ­‹Zà±Mè9z—µHpýII ÄÌáƒ7φÒÛz†ÔÒ×ÿ4 š=ë%.&l"WP&¡AZGDEu$qª×;ƒ cb™áÑ9ñÑóP¸b☠ÊׯËÐØp…¡ KhøGÔõAø‰Oy¼J.M½µ´Q&é¿°õ‹¨þíè@áµù…˜mp_Z[cbyn­; õvðpÌJ©ÄäBF¸D`gæ+†–ÿo¬dÔÃó2yh'¥$HþÀX{ V¦›h«Ü€C ïu¢ý÷æ÷å4 aÿéœÚù.ôo a ™¥ˆëçøxB’ÇÜÀÇâ+á Ó€ø\Yg{9ÖNʡƞ%úþ=àͽ-¥ˆta©AÄÑÊñ Y¶÷HTM}9lç/t¦>JÒŸì^jÿ—£ùì¯a…>èÐÖ Üzd=ä‡?µìD) kœ]¶¨¤Éö´§g‘°±¡œ]žBa¶,3®Z·=BnJòmnä»"Œ.=ªj¬ÌܱïÅ8Sœ’%¾)øQî.â”~3ÖUgª{<Ûø] -|V^o¸ŽóSÜWfnå’Š" i•Ìù€N@?¹ì}iþÈ’ðïP6v<ù ®X4CNXÁ+R °Ëàá‘F²}-,Š ¬êxòð¾‚å&r°†eEÈ[5(ó¿Ï„lJû£Y9¼"ç[ÌñuvÊhjʪbêPØØâÃÃ^HË~Cì:ð÷X̹ߋκç@Žîo 7B„qd¶C‘\Ȭ€ær/ǧWå¯t€¡®®A© €V8<9é(1¨ÎW£V[û« àvÂ@°Ô—þId/þ­ªŠgÄ@å[xÅL•,Ç•ÿUl8D.Ök¡yu²ÌkpWor jj«Yá?I!¹g„ÕqòwþU¸H±Œò7Z‹ãz!sM²÷4ùÂ[!/_.­2àåoY~€"yO˜"¨¦™ ÷9782Ø*ãEý3*ë®góí˜î¿¼¹9™Ê†-O$X-?€°ÅÛqžÐ1x[U†ßU“‹(û˶7Ï9¿ü;ýÉù1¡ø¯‘oRùª€§Ù1#q©`–=«m¹c#n1´R¹Wa&74Á®© ¦ª˜[´YC/±ÉÀcôÚõe>“{#(<ìFj‰YøÊ©0]Ì€³ÄF#7š¾>„e,Ô4˜Srà5jN|©êð_º@ÔÝnîovãEú nL÷Á÷rŒtK½·§ô V°F/ÒÃñÂo7è‘—óOÔÅAšÚ)™\µ««e^óE©Åu•+ßDvFùH¼^R-V5‹Ì°z031ìÞWjX¿Á’ù 0)§4°EæX÷G¨…Eg¥^QBBøZ‹¹9"†0(…`@ö;ßm€0ÔÜ ¦SžùEL|ºNAÕi!)ùhÖ}ìªU°1<,³ÊÃvM o‡xlÒA­{ýUঋ^äG{‹Ÿ@W„M-rRnéþ`âýÇ仺,ʃ_}iâ°©¦ÍSéhö=YÜ+Ÿéòï™)m’‡·'84‡±ŽM—½Âi¸(1‡@£Ëû$ï²™òé‹tQnÃZ;D7ìýÞžæ7ë#Ù3M(-`™àuÆÉàG€_üòÿ˘Qž>u»È%Šs¼b.£©jùG·rmTø}ý* |TDsK—LÀª=º£—_£>.-žú«"À½W+_u]xN”! µŽOÄÄC62Q®/0ÄÄV7¶âÆìN¡xð|h4øP´‡|¿«€u–·)üG;‰ø’L Â\¦è~d Uƒ_ÚLK_-—§ _\T¡^R5ÙjL³:<=íKûSymZTöb=b£ƒL¿>³—Íu9k§üÏÿÿÍG‘•óéÿH€Ä½¾Š‰Ì;¡9™³m&ñ†꣋»‹ãgàÖòï4Á•÷ä& Ùœ:ƒ‹òD·:ïuÎxqòôZ H`Õß&E•eʾæÊd=üáò<(3ŸÇ§BÿÍ¿`XLIâJô¯RÌWÍø”™ó·Ô¤ËøàðTÍø"¹¦-{`Ñ ߟ‚û´‰z«™Æ*2Óœu‡l­¹:7iVÛ€ß[C2Y‡«ß¤ËLn7ã1»½<Ò¯w¢)Ò)fâá&8nÐqÓðæIG¹¹ÓÑÿá ‡P(óMhúþrS¨ÿwº±¶q­SÆ*M%­óoÆdòJøpIê»âñÉ)7¾~­â~VCy97Xùf4¯}uP‰#¼÷É¿Çç¹o🲶c æ[v”³ ‡ ™Øßú¸zd+JÞ³Ö1âýö¶à~oaf?QéÈ~™|W\Þ.`­UQ<[ÿ‰¦A!î«i"×ñ·Òz€ ìUa ÊÙKËÌÞ3 šÃÇúê+ë÷ü‰{Ûooဠ{:Ö¢¤ŠþE¿MfULò–þËÁïŒbærWË‘”š @Àv=é+(]V>4¤÷3Ûù[úz¾¹¡™€!GÞ ï}OA}iå¶«°Âú”ÄìË8Åò5<–<úÜx¿Ö>‡Á;Ø#“«k‘óúÏÕoÁãjeæ£îàMu=&&)æOŸô»üoî’A]¿ßÜö6Ü£}wJ qEyrLí'  6SÜÍq¥»cw?!nî‘Q>’É*´n²Æ^6ÌÃUL‡’(È›¶ý9´t…÷³F#>οòûêA\]¥2DUÉ&H®ßF+ä¯k"—ȦsxsÖ§%¦h…R,ÓÃ/¤µ¿œ•¨]j‰UüjüÎ:;aµ'#ÆŸò mó/®P€¾1W\ÓÕ6{¶4†g<2‰³Ë6²Ií~(Ð0ÓJõÞÐý4º«É4þ„AâØã´!?6Æž,và‡¤SWr|>mw Cƒ'›¢ÛMè¦Ýu‘ç`_%<™e{±ª Ë8ýðwl—Û·bQk’¸’-Í€—OÝßå,ržPŒÙf’¥ :Ëz;—z®x:v¥ŸŸâ+ðD| ˆjú'Zy Ÿ{_WÕzÅ)©b]D™1àl9YÁèðâ†+ßñbîT¹þ¡?ÕŸ‰ÌNlFnÖANýtÞ^,­¬0> €r)[†qz‰Ñ“˜|ÿë7ˆ =>qø8ÛÃPkkèÕÕ eÇÑŠÔžÃÑùÌ~ ®P\‹×QôÅ`–^<9úé».äGõΠŒàQäkÖÚå&4Øä\2¹Mz¯Â&¡Ûû¾y¤ž[RPÆs²øÜl^ÌìÀ$»FÛœçŽX¶V#B¯¿ÿ¿îþ:¨«7|E)ÒHIH)!-J· Hw7H—t—‚€‚€4 Hw7‚t7ÒÝÝÍ~~{Ÿ÷3³÷Ì;gÎ9̨€Ÿµžºïë¾®û©ÅŠlÕÍ8›iò±’öJcjZ×D€>ýý ¬êéýì׿¹Ž¿¤f*C1QbñîðÐIîúÓ«“[?£íŽ5äñ{]“­×ùc ÿ‰[¡•ª-¥™ÓKÉzj/®_ý!0„°ó{o‚ã±yàáVz’}ò½{‹,‚õú[ãó¯zÕrÍÖbþÞv–Ä–æfjZZçÉÚb¼Jd²u^I¾Bƒ’ýx!$…3/×ëÄצEÔñèw°ÛìTÒT=ª¾¿fÖzT+AûUz¼FóÙÀå¡2§;^Ãj¿Èp0TÂñ¶ÅÞÕ5ÃV·[EÍzÈÝ*=Í^Ð8Ô¬ü~~dX»CÂä—Ð…:›nŽ™–ÏÍ]ìo!é((V»øµ¿>©ô$‚n¶Ö>ÉM”/Èûžã»lO®!‰Û²øöåìv=‰d”2rÞhÁš f#÷ìÕ*µüaÜŠv÷®¨‚îå奂ŠÊû‰r»…Åöø°áß‚5ޖ?ŸæYÖç›’|ÕÓ­c>×ðº,Œ­Ñ*õ«à¡¢’lk†-ôU¤û¤50®]ð0#S(>/àW¬më;aó_p5Jjäʵë}¼áµ¯@^—•õ$ ïTˆFÍ­*KïÑu¿Vº—Í_íòIîL‹$ä%<ÌT¬¨ͪ A®Û“¿ót«¿|û–ºi¥Õ+„/O/jÚ5'7´5áoØ$ÞêNHC#¾ ãze]£/ùéûiçf„GÌî¸U>µª«°ò×@F[*Åæ%ì¢N¶3'§gð.н…Ö¦ÔÕOÅñkÌ¿zn£Ô»ãó8½ºðäï]þŸµÞ ï>í5zZ¹²Zåâüü§ÝLF©%!|<„ÛFr‚›ývGº¾ïÆXŸ§Þ¡¥m8\éMQGH¨aö·ÈÎtü%Ò¼£Ã™CeÄŸÏÈ© ÐIDuè ]Øú³¹Ô}‚RK–`‚\¢Îü:¡ééiø¤l83ß¿‘_?"ÔæPá$I¾@@DGQ4e²´D¬o®ÝaùŒô‰Ç¡9&…ÀØ6êË<{{{xÛ´ÛVü÷/.¼ø¶™«ê°gwv6ñ¾VóykÉ´ßèÈê½C5ª÷M“ae»•²ù8™ßuѤÄr=˜˜íåT•óYÍóªÆú°Gøê£2æÕrŸéÚÕÚ¡4\=+t?0…·¨Ø»áI¼y³*|‚Ž^RÛ¿¿»Û0s}Ì ”Çõƒ,xíñÙÁÊC%ú•àȨ Hj›ñŒ ;Y§zÙ8ñh_Âß¼À {W(˜ÈO³‰&1€ò»©!™.µ"626Þê-Pô©ã¹·“æ—ä«F”=9×tLùɼPc×÷æÄôG±XëâÒÒøÊyìú|"ák´ÃuÚ­ü6_ÊWÂèè~wñýÆ4’UËøÉøIÊOqê†)BB8ù ©¹/wgowWäùsÄå®$666^jqq¾JnqÖŽõµOÕ¢¢.úv ­Ù‘ëÃÙðý-¯ää^FÐÉnö ¯ Îg¤wÉ\Ðwx¸ì&_ÊÅóàÍÍÍ…’uy3a\ïG×'èߣ§G¢¦6R…¾2Ïø²ýãØlïóeèë—Ó­EgÖ¤AO-ÊÑćïxjúPlšc˜b“ØM\h ~ÀXº®Màs>_J…äåå«ŸÚØŸä™£– ¼ÙüþŠ6OŸØLs"Å÷æzu0=ÌøÎ!Ybb"¼“ïÒ¹ììúÜ(!qÇ’ÁôAÒ,ó{øþ»ofãìÍbºL:1Ø*ä{#$x=TÈQ<Ίj>·RxbÆÄĬ«‡+B S`Âß_¢ÍNŽZ6F ˜™OvÊ5˜ÃÂZCðu)?–`• hÞp¶ê£~¼ñá¿.ÙzµnK‘êäüß2ôjùèäâ3uªijŠtFÍÿbVü#<Ûº C®_~þR=s™È¨ /!n{凵Òìs#èéÇiõçCÞh{´1šâq´ã¥2ŒFÎﲆ-ÕàÕÓðæsx^pvÖÀƸàwJÃåÙ¼¡âÈ´a(eùNÕ'|zÆ©üñZOWã1ãŽ}ë¯Ñwdbh¦Ç:(>3–å×!Ž—GÈY~Ãç<´¸¦kH]`û 0±–|Гð)²ìŽË2ßK»¨i²D`V©øK:úÙLÓBBu~Hhh |3pÖï4tUQ³ ö$ªÞ[Søð¡A^ø¯n¹íT_·g+Î*ÞüÂB¤·ÍÖÞÑè¼ìú·Ç3JÍF¥ˆŽËnÄ(WW¢ñ'ü :ŽÇgÕEºÄ=»ãNRj5úRJ ›œí}`J!$²øSû;‚ºÇ¬lþ “jÖ{’§¦T‚‚ c[•õˆÙ¥£?ž·)Èæqî¨3Ùh Àq½4è€{-0(¨èŒ/R:.8¸ÙÅo$×_·zh)ÜêüÌ,ÙNß`^œëå»·~Ñz÷>0Þ«»Róòѯ¦c{ÈȈNé{ùd¼Äâ!\‰ÿ*q\#uÕ9×´+'=è•X×C¬§f=*#=–„S‡Â§"ÚêÞ‘›×Ä¡¿dãø|Ø—1ØÆ¼B†ÑŸY3²›ðø¯NëÆ§±:‰æY²&ÛhÞÇénhh´Ÿ?W…žV¢’3;^¡¨·×lÀNb|ê=t‹ïqñ*y`ùöWÔj–©ö"O¬*„Läj×—ÖÖ9H/Õ„Êí‚#!JodÊŸÌ#¬\ä5»Áß¿ßoÅùƒ ¯Æõ*°{Ôy‹1Jàâ\êþ˜FnCG$QFá¢ÈÐ?àwzöæºæR€mϵÞ×·ð2éT®j¶8±&»»s”ð=WUÓUââ‹Ö0ócÈ è =b·§Ç¥­‚Ϩq\îú `¯¯ÂÞ8`êDÑçR‘œ¤Â»Úmv”,[ÕZ·àCR%sK…Yo"—¾ãÜ[sãõl¿uårVxÁö÷û³“¼¥SÙ„¯Î}ù’¼<8^ÚlùãÇ~±NóÙÁO»Îöˆ}øx0í²Ù³Ä¯@骈@"±¹#7Ôî]Çe¾Pý‹`r—|Ï*§µ·aÂ×÷#èå?4íÜP¹îqËPzø–{kÚNBû6ÕË…­ÊÇfêQ¬ºUc^ÝµÃØÓÓF4B¯yeÓ I úiÜu[$ë¹ìˆ¤¯MêœëôÅ‘Ù=ž)”fÅ ¨¿Ù¥*ðª<½Œ åã#%!!1ɉØÒ|ê%Ë[Ð[ÌØùÍQ ÈÍëŒV@ø¢Ë𤺵³T ö¬¾\mÃ<]üNÙˆð?¼3o޲¶FW—î×Á›|®Î¹t&n¦Éúï-4@)I@qÉ óþdŽO/ÀýÎ.Êü[½§q”ø>ÁêÙl‡ãÛdìDqPðÒëï2tðÁ5ÒѬª#ž3hngÌ– ½þG)ß›ê’ÑTøàXN«‚7sÏუ¥ZÞ‘ 2ª!mNe¯ ¤ãþØýA¢Ð™™Ûîúz”™(Y§ÿ> Ϙ(Sº¼0Êx)¾çoU'_úq§É$~õÛþt²‹f•A“:ý&7>î$ªÙj/ŒŒhèä1S:‚hðQäeiˆ_ ¹tÍò¸á&^ó^ÖlL”³Á„§?E‚ÉÓœ‰**òkN¨¦¼ÅŸ/:½¸H1íŽu@5 ãêy³@)Ôªç¥H€Ôez³çãÚGÐÜ\ƒðM&kôЫÓ<ä_þÏ%¾ÐMëÚ QgÈ;!!ssïÛ@ÜÎj€P”HÒ*¦Öeû›ÃÌ…jž <³ÔBï‚\s?Ñ©€@x‹J#"b ¾ú‹â÷2„ô·{É盫#¾ÅíÊþ´f sìÆÙùõ$4sìM”›F,LUÑÒÍÁuæ¡–‡ù™”â;'r®ººx÷ry4ĺW²²/j=Ž`¤ 'z+©‚Sßí::¤Nžˆ665}Œüðþ=òéÙÙãö­f±u ’—U—–þ_SâzCÖª‰¿þÍï)&§§?@*V–ü¤AGA„ʳ‹‹©´©s/]&G+.ÿFáb½­.§{^r…Ææ‘¼t„ëÀÛ¿Ö-%ƒìvÓnžžw©iðoëÑùCÌaûâê„]·êÑÒ4ŽWÜÓ®û‹‹‹É€_v8ØMÝÃÉaRƒÔó2ÚKŽÌŸGÖÞ뀧MÉF7¢ËÏ¢SÑÙçס—X[´Î>ãq¿çvna0+âìKüŠ?›ðûS‰œÅ/×]»L“ÕÙfÏVšÛ‰éTÓ©©µ3g ¢¢Ò<~|woo–“hp°lqÚ£‘¾a^YVËP…N`¦AÌúg©S1]îIeº¥Úââ˜hydnB··÷æ¹—)ýËÜve×ÜÁŸN“EEÒ¤Êt³UŠx8ØŸ(Ú°þÝ^–}‚—Ä£Øí’h9,¾ÐÑöêL3oqìI¿ö Ónr `‚Ón8o\èu‘;tá¹5Írtmò „M ØÝ÷_k0ÑÆ47ÿ„ üÝȘŸ¶%2Ž6EGäœæÁí'rÿ"¯|;J÷™º†˜§–Å™^ÇÛ„é¼è³Û10ô|H ŒïÈ|0)Eô<4Vë,înÕûˆùíÿfþÚ°`°1xD Ÿ‰_oìr€q3Þ_l‡S€ÊD.éÕ2N_ÓÑ#¹nó\_—QHþjMÉ•á¢pÈ[ºÏ/ý3bØCUKûŒYHh¸,³BI)ÙXK{&̪¶Ý¶¼v÷O âÕÅþÎ À!|aaL$((¸ß[ 8fúoqñmq_ùïâ*tÜ3¯jë÷Z°ÜÖg?— oI‚Ïàñ+šl ðw?ø÷RBhvüœ\{õs :õL˨w¨›K¾>¥Ûa¿ýTËù;:×mHù4U…/‹öÙ -¼ñ™¿Pû©Æ²çšçlLaáÌÍÅÎ’ÉP–*œìÁ`«¡‚»¥û¶[^CPÃÆBXšÙ·€ß"::äBg‹ø ˆŠÿ-tCAQ‹›ñ¸®1Þ¶Øx=6Ò^†Ž‚‚Âuå#Q[S¬!Ž0›í7^úÀ±wÿüÒÄnEÌ>CÙ_uº—gv¿èØhï?}/'zc¿Š[`ŽG•}… ‰¿|i´1’ûߥ8ì;÷Ó¤Ù8låg’ž>—ã‡o"øˆEÖ—£ùÔ¤r¥7˜[/&fœÞ—‹«¯•0¡4µ·»û…¢âWÙQ#ÛîX#‡‘ìèq“¿ÍÍFü"­¡F&híêJˆ2I؇›wuj„{[ïܸ¿:¥½%…_ËÄBøâ;DVÕÙmÀ_- ŸŽ¶-' .PJæÐ¼ 𥝹¡šV§cff>r<<›‰2jjjQÍèË%ƒ!øzªÎKK&;õ9É}Æž-SÂ~ô3T†‘Ýyf»yz½ÔGm¿9É”˜òH2t0½Yïæ=2§à}ø ´$‚"Ýçz–‘æ§ôÁðŒ³†Ó1¯.†¯ü ¼¿áÄïÏͨr¹2„Ë(€>ðáÊ !é‰RšÛ¹Ú"RA«^Þ ·F'§ºlÓÂ%g¶`›]{ÌWFÁrÝ¥:^«½©ŸÄ;X¶E½ÍÀM|ÿÙ+æ¦ÞΈ$âû r_?«h“; ˜õ2 _=bK1éŒ:=]ƒ÷q¢Z…vo4–Õ­×|®Ø'L½Ã€Ê³²bó»n‹[[3c%øç0ϵ‡³‹›ÔŸ”ÓºzÞoºÚGðY>xsÓ:.ß^ a6±ÊÙð& Ak¶óŠ.Ó©ÐîÉõ™|²·§Á–Ö­xøð±øFn½ÿúj¾ûfkbŸ#ÑûXôÂO Ná™1 “<"únºšrk{©<µálõÖx^Gøæ T;½IOwÅ £ËWL'ž"´wu9u5l:-u^$Ý”œñ Ê”ÉÐ%[©Ï.EûùhJÉC5Í%ƒH@Ñ=Ât±½dåâ¿$™BOžü~p) ®¤„h=™šÖ® ó0l57×»s‰44S·Ìó~PÁÙÜôמ^ÏU¨88þ'ß&`B.s–^[‚Até!_!ÑúE§Ú¥Ûþ]q?¨µ‚’’Ñ §Ïñ‘ÀZ†WÌ7¡Ÿð´‘U?Æ›@Ð*EtÙV‰Î–¾Á<\C’‰?½hüŽ)*Ú Í†€®ý¶âó¿åœÕðeG–ÀÖá¼/M5P‹ˆÌØ¿“ç3Ï£À”' p~͇GI–ÀïJÃÈ`èh£a}XD)ÜmÕvrìØ“€˜ØxªÊ9”R‡wqyÙ¨øAÕÖÙηn܈ßêú(±ÜêqÞóïǂؽxfÿh…nN>ŽšËÖêºGDGw#*j¹¯Ó¾·ÐÐøaþ¾´&ÐWï>ÆtZx¡‡†‡÷žî&žýŒêwâ9Q¤gïàd€Á«¡0 BYDŠ;¥"‹Aºx~מ=$Ï÷¤zRB¹Ýüèda¶ˆ^^½ >j[_ß¹òvq.)ºõX2ëhŒ””ßÚ ÿªùl#Ê™»žÞüÆx}½Æµüá-Å0zíSW?6¦a=^r×Ye§’šæ§œµAq3ÀÎËðö”õ43å³Ay‹Ùßß?VéHÿ2Œ+¢=õQqÅý±º«þV¡Óq£®8îÞ½wŒM€Â6‡^ã "õe|}À«až¡•ìñé´9Ø(œ)^0›K;-Éç^+ Ý#(-mÿ`}/äú¹Ø’Yelãs*^M¯ë¶s-77·YøœE`³ÿVw’¿…û)92`Ÿ]Ö¿þùxÆmµÆe³Ï §vÀÆg’§_¾~õ/³™`ì,MšÕódû…‡G•ñÜ/^œ^ÌÜØôûB ù‰ãÜZnž€¶}ÿÎ90øÂÎ×qH拪”,a+õöß”ÛHω®à¶ŸÞYáA¨Q„|ºÍïNòû÷oø²Iø¨c6¸J/çæ^©à ®vŒ7Ü^—YémJ5¼²–\ha°ž¡hfÑjØ¿:q™iõlB]]ãn>YñD«ÄœšÓl{²òt¯•r«ªL–¬5ôÅT¬?_ý«]‘’|ólŸûü2*·Oá Ðu¶C”¸]Lõ_]61?_c;……¾ÇiíK8Í AP` ¼Hu8Ku¡×“æÎü ~ûBHœoÅ¢Ïú„éò„t¥ÆçêÙT«ÕŠÜ}&ó;OSú©Å>œlO†„8¿¡È*(Àµ«ÙCzù‹ñRG¤Kþ3ö8]×»eÍ4¤Gµ‡áç1…¯ÌGå6£]‡¸$B¡¾Ì¸KnKäÏd­í7ï¾E!òò6Œ—:ÐßÀ,v¼ÔJ1 @ÒÛU-kñ­×W±ylëcxЗ›á@¬qâ&zÙACV4À#[àTƒxúÓ`&õ<ƒÆ÷w+¨~d¯g:­)UçÛõ?fähòû÷O´¾”ó %ªã΀$}ŸLÖQ¼{øþ¡ü‘î,š‘„ˆ¨°[ç± ÷aa“xHzÓ>»±Œ#t Áçu1ÖK¶Q0àíFñó͇2µ‰_žT]XOf¬y¨÷W:š½655H•ÜÝÝ}süÆge¾9ø>¿ óõQ¾/ï¢OssóíÕ‡n{F²'Ÿß´½‰ï1G®rA™_ðÿˆ5lê{âqÝÁäêšA¶S÷ð÷ð}.•",f”Rf)n¬rÃ ç,ýëKllпÝââ3më|ðq[6-’)å´NìïA¢§Ü ›@Ý5éòB+çT“ª›»»!c…Æw@Ç-oÎ]öƒÛ»¹ž¹i¡U!Õpê´Ð¸^2ß…JÆE0Æîœ¾)ìœÐÖµµÈ\½Û÷ «À&®JGûrCùƒjöÐb©9uóFV»#猳.ºN=+ÛBfzâs¾Øjbt Z‡u'ç¡Â,SVl w^®_ºšÃ)° š §}1x”÷Kôê+)©Æ·(Nå£GÛSÕ0ÚÁûq(œ¾Oò9¿ ³eÐøôˆnc•,NíPc£ßÞ‚˰i `˜äh:•?¹. sÔìDWz ÷þGRê¼°Èä™¶¤³ÊÀD}‡$¥F/£z3Œ)ßæhø•=<t¸Ù¨÷9²òO‘hâçŸØöœÎU¾C,t±©þÅõk\\°ëŒ71“ZNÁF À_FÕ¬÷¶SUÔ@5 !å4àˆù7U”©œ¾{u2³!/ô{®)@q=Ùåäh#8íïölÕC¤¶nÕ82äš«2¯³ÌêyùÅ?kùp‰ï eü ëž¬D²£BQtzvf8’£¹ªŠ ïG=P,a#|¹òTüdk"ÚQÀƒÁÅŽzàIîÅÍNô¦¾fLCü[¼{¹/Mðò¥%I¬t–Jæ=ð…KLj5?ûû]Å@>ˆk4"‘Ô_Ɔ…á)ü4¤•ÔÄDÝ‹×}ÿ>ðmkžîOͤ¬ˆXV}"Ï­Ñ\$"fh}X9³w{ªá uC¥ãíä¤7ô l¶ïÃS3¿Å×ý¢Qt²±ý?_˜—dÂlW©çJo¯=›B+¶&¦›ãbŠX\"EeCÎÕõ”=W»ü¥¥%ã/ù$lá„ršÞÎή³;ÄsÕX,ÊGiÙØ’]í _‰å}ÉÕnö9yŠ@¬ %ýBídÛ’î&1QÄ:gµº ÐÖ  ¬®û”øøpÔ•»þÈHE:ux­|&åã#,5GÈÎßÙñ™ZŸó÷ y_;8høÅ½¡ƒ=®¾ÈÕÁÁ—ŒlcsŽçC~>k¯îp>ÎçLU7žéîÝnjhXC‚×W:InÖ'q¼-ü¡ÆÒ¿š+Y3R‘ÇŠP^IGœ±ÇÈÀ³f˽I8ÿÖ|‹/ªÀ0ø­•{Ƽª.ø5ບŸT‰}º+_·úÙTÊOø ø€&ø gF-²K‰ÕÁ³Â¸îŸ¼nkܲXø†@°LÆÏMëÂ*±&[ê8qqȸ%0‚xõÄv9Š8­í..|î <÷˜XüJ\ňæTe Ò“hbAƒ›¶VrÚR‹ªúêÔ]†©j×V8¹a1*Áµ“‰ÖØ8äÚ£ ™ãz.æêV¨û<í`^c‰ŠMÐz'ŠV˜ò;»(“ ój¦Žf|".!-:¡çíŠ÷6›]bSÙýz ã–Ïpn]¼êe½8ߢý¬ß¯àñ2–ÑNÏcMYÞDÏ“F§¹·¿cæ÷g”›u×¶oØ·QQ"/NVŽvì\‰ ìo—Æ<®Î?ýÏZ€'²'o¸9­FþÀgXYÿåÐu¶ío×ý!T5?Q}&%À?OJb·U1Ž+³ß×^I²Ī‹HÄŠüÌkQXik¼>ÖN²À åv+„Sˬèý à­ºº[Úwþâ«…HÔþÅìcýO˜GnžŒ£q‚,ðžìâØ–>v„¤õØ[ûþ¦Ø3ËË÷¿/ðõmhjú›ÒŸoWÅŠ’§GHø!'‡¹Äbðåm‘ÿŠÌΦ«ÿzá]âðÙ™¼pîãA@"¦Ç‡Ñ{&&È"èå_¾|‰Êç²¹:Tø]Fäâ¸Á÷ЏïR´u6î}†¨…“mÝ'A,¿Ïç ¯Äá¨k1F]ØM2„^Düþ7÷Fé}ˆ‚! LtîÁ½½Y ´ÆkNÄèítÂqýùÖGŦÝÏEDüö/ᥕõúÂ¥f£ %ââ‘â8Í7‰ñ¨Ï_ £òy>:Œ¾“£EKzÝ>¿²ðƒØh}(Àÿþ[@0iaÔ¥Wc8Þ)¿ñˆ¸Û¼5þ×Kó÷B€ÊÕ3Yª±yô{#¬¬¬ØÕ®;-_¨Å Nѯ»H ¹u–÷ŒUÊ:"ý¿ójO¡±Sús¥«]© –N÷ÙÁü«–ú%“g–ChÚeÖ¿Ÿö À3œ:¤pãŒÎ®=ïçë|™_îV\_1»ø`útÿü¸”ŸªyúÔ×A|PðU†Rú´×ì#zú‹Á_½ñxXíO—XdI``J V5>Ùr^4FK¼çÍQ§CÞÉ íäôl`p0ÒÇ Ú†!pf‰šgy,CìÆ}¤”´âY7wéÔ;Zĉ2›¦ÃµÁ¹s]‹Çv”»× ®3?¥Þ© ´_|uÅš oAÌRs>~u˜ Ïq!))AXµº¯9b@Lz﻾¾v€3 pyœDPPcÓV}™·ç·¡ìôÇ3V.nééVUw®bÿ¯T#}’—’¦ííz¤/ßäÒFæŠ"Ù¿6ÍóS¤.¼ºô3lúîkûÄ·bRg6% b©®¢H³Îz%#óg±=Âp¨S™Î못böON¶žc¡@÷1Û<çPdÏ …££QC>W¹ïÕQø¤Î?Ä™µË0K-‡•¢<Ø}…¾D MÖf3GmߢÆö9zý!ÎPÆW†WÏl7'íW§Öêoþïs<û ´m+¥¯ìª<0ix¿B¬ßp»œ‹lÞvk<¶åÙ¬H·nÍçÑ<ê7“<÷Ñ18§(˜ùøà#‡ž{yÕaÏÜÎO˜ãíÊKѬ!XŽèW»ªÏX÷¾Fô8&°»Þ²x:/w¼s@çDù’ÉáÎ åãÇ3´Ëó`ê–õÖFwAx”%vÚÊrÇtµ©CŠŠñôºâDl Á'3hŸóòòbw^Wyýúu²÷Åq‡›.b+áE çPÖ+¤ˆ»«#²ä$c_c»UÅÙÞÊ%üùúáР¹yÞó!‹ì´%IñßÏ€—¼{|…b!l¿ Zèù6Ϧ~hs`.TØcW†¹ºp!^_Ô~> ÂâúÛ78\«ºñß®ú©Y+ÑŠlðFDü3qz}…sE­]F }}ö³Òz4A:*pKóÍýD‡÷=Øåyý’ŽÞ¬÷oß(—@Îõs÷ ÀÞ{±í¥ˆ¨ _V8¶RŸ¤Ì<% n }À˜"Æ»Ÿê%ggó²+”ÑlLŸRgØïû°’6ô·îÆÈˆäë54øûEGïèö“ó£2ë1«µµÝ£ …÷\;®ôÀ½6˜ iñ¯—Ú0ª’?#¥:ñ½n5<Ù?_ÄGnþÓà5ÿ¾i[²^ý¿cRá³L#èd¿-% ayR‰¹K@ø88íâô  z‡ŠÉÈ»œ&ˆ*þ’oY0^üP®£­7:úéë6ÜírlQQÑÛ²mà$™5-í®¤ì°Sðe¢àƒg÷dèò/íì\h†>S˜©Ûý[Ònx’zgc(>F ¸›‡c{'ñX9ŽFH í Ú]¼lš’aWê?™ Z_Ûΰڑ}NO§Ÿv_yPs¶÷oëY`Û\ìk½$ôÁ^a«*‰ëAy~óg7ö l¾¢™H'‘dv3/ÞßEóÚ{ñ=OÇ~Ì{í¤Ëôéü³ØsÉ[äKöW|¥n=~iT…E÷Usã§o (]Ïåéà]\Õßèé½ÌÕ*-°_x)psyð¯³÷$¾FœY%¯ÏÓÉ*ÐÌ)l4ˆLº-`ÌŒ^,„).|¢Ÿ-wz,÷KÎÿäçX´?ÎΘTþ›'XêOKë0Zâ´²¬Nœº¦Ü죶'ÿÕk_𜷠€ý6ïQ§jiºãvGÆ®êR½²|²Š)¢'ó¹iǪ«ûEäÚ âÂZú\BB·Ú~ø ãÖÐ0í“¡‹ïúIS(àÑO3»©IûÕ‰2wFIa×*-m~çà#Ö¾‡î}LTøŒ1«‘Q5·ärb!̆~_Væýd‘AÁýóCû>sŠÍó » %eÞÎBc4rARÑ«óßLôR¨w¤¾zõJDK‹t¼Ì&›ùdþ…Á𒽇^b‘Fyºóà%7_oÛZIÛüù“»wï½tÞ¶öÒ1-Œ¼ÿXý’¸òt5e`ð›)2‰ÝVœ¬á z.–V'Z~~:»@I³Šãë·wló˜„âvòx!:Vsn´ÞsŸzŸ‚}j xû)''¡Õh^3¼Xo2ê³6i˜±GBØ10u¼dîžãߟG»u* í;“Ôl)†M5JÌñž?~ú4"Ú=‹Y4 Ij“ôÍÄÜ‘³Îy÷R¹lþ—¬½Iû= Z×ȯûþøô4ÒÄ*±üÄtìlúÍÿ]ü5"âÝJ¢§œæöÖ„mC¡Ã‰¾:ÄÓøû]C‘‰ý H Ÿ@Yð>ÞT€ðü§ø©È×ÁDÕí‹})çiŽf:Þ7Þ"¿)?`d\öðg’|²Ì¯AÌOà74h À@Go„¯ÜsÙÒzÕ÷jßÐçO£Ba3s9Z;*З¼û%æqjs³¼w1„, M:úç½^G44`ƒBL:túÞßïöÖvê 7C›èCÆ$à¹öGµ'C,½lý]Mé²ÂÈ?imM<œ ó}?JŸôfdÕ¾•ÃÔ”¦n888´1®;A‚Ô^¹pÞ£Ü7(~ÞŽÍè‘Þ‹&pÚao¾°Ÿ·ÏïÈŠ‹Ë5% ˆgiæf”¼ù±<1ÙïÑWž°~Bõ‘ å3´R>ñ«üßô‚^ÆÄ9O‰7}ÄúúíÛ{ "*vvÍíþ#ΆéÚñ=0²c–ð™ú¦ò]—s8c%ø tÓÃjor€ÄÁ›æÏ3Šr=Ÿ¿kºûüN Í9Ì¥V+Cößóô>ìÄr¢}“Ø*³QL‘§T¹nž-5ÃÁ,âÚ­òò>‡S«÷9-¿™tÀsÑDð®ºíøð6ô`&¨#0Y”E:ޏîÛnÛ£4ì!Æq#‘zDµ75!ù^mè?yÅ6ñ30ãùü¯…¢¨Õ¥øùBô÷Œ5ìæ·Úlµ‹Éým‘7]O+*¬ˆmåb‘³1êžêÕ¢LQIàÂú­¨˜Aˆçï'1Ž˜òvi'¾–Î0ÿ“|?á¹ ¶v"fH.^áÞZQâìhž¡7ík¹ëwïÞ}ïjÆÃ[ÓB¹À“O•£p·ód„x½zŸ 2òÍd¼v³£ýçÛ©’žÜ¶8$ó‡Ê%ìºÐL!¢e©U€%[=fÒgÌra“XüÑÉ>wqáâsÝÎa>YW5X’¢â%©p”ÐÌ‘žC÷»áqgÞ;èÝç ¡¡ç…\ä„?7V„¦Á®½û¤ocúF¢’ŒüóÆÍéÖíé~¤;U—ã6b†Ô5ÅE¸<¶äoùŸ/iT9µÿmrÈzBjØË Ÿ€ cä…fWÜÍ©ì«×M„ÐO´ð¤]¦ÐïßLvgÃ׊dŠ¢9뇾û0ñÕÌçÑü&~&` A Ce¹ï^.’Ó:oÌ'hLOš fk\_YÙ¤¶0­ò"‰róMºÚé¥aCó_1Òw¿ýÆÆ4 †2ÙcE‰ MÍy¬³)Ý·ÕùP['’Z> ¤ÙL­¯¯_ôu;³Áª7BÅ <ÇÿZhm-6:h†BhR4ž.|¼Ô~¡×·åÌûâñºÊ·¡Ü ¸|†Çþ¼Ñ|æïž²i"ŠI~*X|ö_¾ÐÇ´;öq§ ¯Þæ^OA÷ôd>Tá¦Hðþõñ'ø øÒ)|ü[õù ‘øO~‘Ô‹ÛvÈÉtÛÆh¯hJ˜’¯ï$)76±Ð0=-u¾µh—+˜´`mö#éÝ$Õ^`çguÞøî„)ßýòÅ/h6‘‚P-ÊÀ$TŸ6 Ï,Þß¾'¯ÀÐŒ9 ÷EÐ+‘çœßxÞa¯ã6jH qR×ní_Ñí§û b¿‹М{!ÿ–4e~=›00øiF û¢S–G´•ôDìC×ZCíIÖqÉ +*MûÕV¹TýªsÍ™i¥ïå“¡­÷Ÿ'¶ÔääBA/çÏ5h«•çÈh‰ÇrËó½i(*2l¶e‚.},¶´s—_Û♾á!'åwÉ’64¤âAEh„aoðÑc¯ ªÿÐJ¿õ¤Ývʺ¬ÚølÅÐuÆÁ¡â2(;^ë”éRwS‡-“˜+äMÃ…¹›£™ÒuУ\-±X°·…T\TtxyÐ ¨¤æú@Z°‰s¹MÄ/ùüzìÉ•âk‚At¿  óêçÖ“æz!©©jw1ª6òª™'fý¼÷ÎIMçËïD‰ˆÜ­¬ÅRä4WPÑy8CTד ‘"XYÉx¹"¬ÊaøÖÒóÛY[¢KQ=}ñoq$çëÀ{Q,ÅG.GbØÃçGœ>—n\²ÙÙÙ8`cçÛüÒRQªs Ó=‰µ³•î+_ÏIûV‹¿E&U«?ƒ»˜!¿4‹ê¸îó\vØg®Kªê$C²¯(?KÙUËV«ç*Í _ÿ˜¬¬ C$ÒÕ¶EV7üÁw¹ÖQ±/Õìuíl$¬5eo¡Õêl‰ïêp%»Ú·þ™™ÜU!aT$ ?¨ÀjÊùMº‰Éòð}^‡Tø’Õ™ËeîeB¨á92ä'yïíÔ%í U±÷‡dw)ê!–ë· i²ñ]½ê—ü;﫾XŒæ%Pøœ²èT(´RúÖ˜8û^*zÌ¡X 3f–E¡ ñôx±ç±÷¢ûÀòp{J»3šmÔ 6´Dzåþì„õ.6 +ža¼¿|N<‘›£¿þÈú!¦Êé´úÃx›ÒGas$7hªJõI’OÖX®ö3 –a´R÷ ÃUÕ† +l™ØGúérÔ[ô*=2¹šÅ/Ùjýö%‡‡†¾ë ®DŠœïK¯ý NÕ«•a³ød®…€‹6t#ìq±5[Ÿ¿üÚÌlc.€RÍË«F´'ˆPr"’_Çææ®+º[µKd¹•ºjè}ûÕï”åîÅóÓÞê{;õlÑ1vO¸ž94dæûªþ=•fUuŽF[>‘ :ßòtw.–Çþ':::s¦¶cíÞÇ¡”§½f¥Ô™eA-5hhDÊ®–6¦ÒÎÔÚ:g»îÂviqñ»:0]vQºÏlzáRYS·…ÄCžUqéÐt.Ú‰ý‘PXßeîzîNsíEÞ½imû›Ór"½”f6õêöˆÈó¯A”¯JÓ-5·Þ ”Z©×ž¯gkÁ++W(¶&+ë&ʆg”¶7‹Ó{>MbÒ‘ªA›3l,:æÛBX111±OŒ?¦¹¦BÕ·ÆYàȺo½Oê#–¶Fº“mûˆ¦ótUŸx”×í¹ø\íTË;Í 2ô¯íwnì)(Yl½ápZUXZY±êúþÄAóY~v:úz>÷M¯/óc‹ŠWú6q‡ÒËr×Ç[Ù„Ljìgw 1t€â§——É=ù|7^ïøüñ.·Æ3/?’•XMñmyΡ¸‡ñu4ÎûÐv'dÀidkë4SžGÒÞÞËaŦŸ§Ì¢ƒWèYâDÉëO*šššbâëè~""ãбÂúYy\ù=«ý)¥oæž§¥§ÇÝö¸8èñ¶J»¤y¡³GOРÆoM?² ›J6\ ö_£ÜÃgaÚ/—ßj QnQUl:ÁÕ¹þ1nºÖÓª=œÖãt. 2>ÞZsŠE;Õ,ñ«Ð9ƒÇ÷W: ÊÊõ‹¾[Z×ü­ÍÍkŸèûšp„™Ë㲩 c1¸ÐbC±«²y›Å΂ž¤cxŸ‰?)jÊ…¢æ]5¿|«x1‹äLÊ%“&ÄcöñIú`&|—rr²Èß¿£†s³Â÷÷SÕõ¾o—æXǽG÷Ó­N]IŠ®;ï¨!Õ­rêŸov^ŠT½mª(•a{Êõ_ýúå˜ï‹VóhZð±ðIüqÍÞÇuæ×ø”<¹Ç½BÙ9þHKš•EUst‚‚º¾73¥¿¸NÚG _ÍœZÏR=â È6@‚˜nHÆ«Tc9¥Y¹ò[’Eß•X3^—×sæ£AžˆÐ “”¨Î×s'Ù¯3xd¶´*•^ þjŸùñÎÄY÷Çu·ÜuÓÏ“ÔU6†<«3õõðýã 0qq„Ç é_y¯™u}¹¾²“–¢(|Uܰ“¯¿]ïVènÔ4×H1§ç±u©ÕhO< ‰ãw¦Êk|^é{žÙ½r羪ãr ª r'OBÖ}N©((ŒdO[<[ÝGr•—gK%pɆVñq¨¨à ¡Ö³Í®\I´Òœš7²ØÖ±˜x-D„ØE`“ætÏ_›ˆž¸yÁ»ó¤Õ|§“Íj'GsŸÂù›‰óÂõ› e^I{ÄRNFAŽ-}õTG{{? V‘ 6šSûûç®5+]_·ŠsrRw5v›p–õ‰ú³ÕÙ–––4«AÐW@,ÙE ÈòUO¶¬èÑ\©É`ÖO3neœ-3Ç‹͆ɯS†€Õˆ†òSLçõ!ÉÁ_²ƒ›‹û%´ÕNªw`DݨMM®y~=\Ï> Ôd­Þä¡u~ƒù½z ˆê¸¸÷-_ý/}áw|¢Ð=Zmx—±«W½ôCœp•ë¶Ê9K9ƒw×ýÊ›J·Ú/%å¶7b©:ø8ªM œè²fб„îWUu‰ãîÞK<©! šËnø6Ñcý±»̘q? A}9"T}›wÖ›}ŽTãz±Ñe•¹Ú!U‹¦îºìä :®XÞ,„uÞ„àÆ(ÓÆåA$‡w¹éVÑòüÂÌQáðÄŒi”:ªAÄÂq’°g !ãC„’lõ:õwÞjò9­&W‚—mŽšèÇÞ²áˆüÄýpàçɶ•jŽë™áªÒ¿ñ|ȱUuÜÓ\òôó÷­ò ­ÙÐ$T#ÇÏ38ت^íÅqi*=%wÞ™Öu\éŽÊÄ&úÈžäË ‹^nK´å#}ítÛVÀGJ<]'¬ÊSå“„´j=J{ø6˜àF7£A~TÍ>g& +ÛÂÚgò‚(ÜÅ«‰ÙÔt{£†CÎNê#í»9×Ù}jtÔvTˆéȱ€NÃ"ã2‡Cj¬=eÍKuélõQùX×Mvk&uq %d Æ}yúüÍáj¿V?Ç-éúö‚Þ{{*¬àC³o8Ó“ò—:U,Â/%%ÿOou?GsY·âÁ²’²2§ûþëÚ½2¾ßtDDROͤ²Õ$99[>[ £ûÅÆžk_æêZMëÊ,ÌÏŽ‡Y¬e}úô$ > 1ÈíWS®¢ úßÇIÛȥŌ7Wªn|f™¿d—i£Žo.n˜³ÉlÏ "×r URJF¦$õ× ›÷®è• ÂKa»ft?ï‹õü<•b8ñð"˜h-+;.\Ïo‹Ú*·âÆ%Ë®2ãÌ#'äp\Ø&ö¸'‘%ÿC9oðÕæSS3¦­iO@&KÿWäô:}Ó¹9¼“,l—¨¢3ylߥ‡°û×l ˜MÊó¤¬VNæ˜,úu:éñA0[, A„¨^=Ív]¶:PÑÙݲÿg-€Ÿ¹âðìoFj5Ú…–Çý6‹Ý{È…VâÏ;»Æ2Y_›šZ¶|&‰åuüUå´f¤9e3±nG¢¡ à‹ñû¡É:T_ïSyg'UZj“ßOÐôôêѨ~¹“1ðÑMOÑÞ¦Tiå zŽ{Õ•ksoy†ñ§5ûõ¥ÛÐÃDÛ~ÛoD,”e(»” _t0nºÚ÷C«Ü6¡%„Ìì¯óª³óBÃg’¯¬Ï8ŒQDLÒž¹Ú^}ô5•”‘:\„‡¿ò®ÄNŽá•f¨_²½y¿Ê/çIÄÜ7ót©³D®Iú$ÇÅWÎ÷……2&ô^rü“o°>OOò©2q>Ù‰Öó.½ªu$Áøݯ±ñœöFTgo¾†Ïp¨*‡à¨â× ”è›;îMVMAÛüe¹ª@XwUÖ‘_½Ý¶31¢æSÏÑqØ}U¶;Én¢Ñãx3³9˜x£>IpI M¤¯èüã¸JãùI+ @a^kð/ ûN-öшըioâìíìxåÓŒï~2PV[RøÏŸw(úò€kx®gF ;f^½¿ÛAΫdOé Þ›ù7<Ï,‡lÆ DS$¢^m'¿Ïb´8²q2³ò²?Ò³»Ê½ÍœYOþ;@̸5t¸“­>@ñüÄ`ç¯x«ƒ0ÛÙõ,LÓfgz¼Ô­0(]æ«0ïߢªÂ$ï_r)/á’ˆ5Õ¸ãK¬Få”Óå†Éìj~Pzh¨´R¦ëe$%]žŸ BbŒ,‘Ë]™õœ?4ÃÃÃçƒÙ,ÁóZ¥A(·ÀÍŠûÞ ÿñ–÷ÏøÎ´"2[…¹XYm=¶Sµ“ŸgO˜,®½œ)že\Û"%q:7ÉÔû\Á$N6ö™ä§OŸ¢†/6èWÓ¥õ½ö:WÞV"'—•]{ÜÜ\ÒW\Ç›Éçj•Jë¼ñ‡Ý£!ƨo%W¯Ëµ¯]¶>[¡~Y”–½¶,1ÛÖq¯v-ÏÉ+NÊp0 MxÒN5ŒEo[®ÍËË{ •ü;À'£¤ìj¨»ãN|G×î#œØfÖL~Ÿ&u\K‹fäæVo-¸ƒAQ0¸Í¢Ó@»é¿´NXY¬Ó= Âå•l·G(÷îx©vÎæÓõ©äûLÉ6Zç —ÔJîø¾çº;žW9erÅx¢ì|BAù ¡-O.WLÙÊ~g•¾*¹Ç|ÉHÝ5ì€Úýô›È-Š''ÌÓË]}ÇÌL®`d›W„Š£¶Ï[VËlð?nú€)ºÓD²„@ˆj²ì5|&‚žçgÈ~®¡\2°B†DpãEs"ŽŠ8™ç·ÆU=—»úëHž2O¹ îRâ¹£º‚€ôí|HÙakÜHº¯_¾$ßŧ3o"änäç|¯¼ì°ßN»ÚÕÅ Ž3QÜV÷¤eßSÕ±$Çáô !ˆfEq¶á“¶ëp _Ï’¾¹–ª_£sÉÃZ7£¿w´ùWY:йŽi%%% åÆ1››ÖµgËqëiÒÚÀc`‡¹7ôˆŽk¤â¥ŸÚ>=]–Û¼ø–Vˆ'¶6öIò‰—^i3n)U‡k)Çøt >ƒ¿f]r‚©€¤¼ Qòñ©+*.^ œ126>j{f>^b†ãÌA³f 7Ø-­&¼,©èZ^ú=Tž(NwaÓ˹’ Öo u¥àIN=;ˆ´?^wXŽ‘Š{&¹·SKï^ubTzxè$Ç% ²j¹íÔó©Ð98RpÏx)ê8ÊÞÖëÖ*‘ŸhRC"m¼@XÏ£dXwÝ—fÃà‰·:±¥­ßâÈ«U“8ZKÁvüñžÓj1# ]RX„ÝÀo$O7ô>++ëÐÖýùÏO{ôôåx—¾)”#B)ôšHþ„}‘|xy¡*à^„>ã£=¼? ßÜ,åu ë\³DôÀ¹ã±To»"ˆÖ[Sdu]ó.Õœ.›°fžmðÿaKÏðe¤Æý`è 2“‰lÀ•GCÞËK˜â;ÍæßæÙrßâܺl©³ Í™ßah¨­Ø6a|Æ9º*Þþ#G^åËöb³ÎZG³ í§:£yºGëÙùë€ÈªyxxdLðÒܽ{Î[q:¯«TŠ•!CP 6°÷"¸dgx3ïmêÐv,¹(ÎNJ‡ÎI(i~ÆWß"‚>ÛñæFÅǃéLËqvϧb~º£Ã"¼¬±s Ý™Ÿ…è™Ò×í÷BÈy9`{÷S£„Ûå|¹mWÏY€ß qúˆpÆ1Ì%W+m½¸É«(ŠY¾2ýñ“'{=!!!é’ÏlÆŸ5·¶Æ QW UÏ q«^޵¢ã>ñZ!rNμ^–á—é47ùžLq%í0³ªuû^E¯‡ ŽTüòcŸ——SëÎLÏò:4WÅ&£tÝ!*º³ÔÕ.CûEݾð^4³âÖ^k6«xùFð˜ÌôÄ,¦¼Šç/^¼8ßïdÓ úT¹Ø¬wdw®‰eê‹b]¯t4+îeÓ(0úzEUU‹tw—²EtVy+n›Ø?-,þUør í[åÙìlòüÓžò”¯€¢f˜u ¨â” /Α!ážÉ)‘ ø´É›Àç<ʧf\Õñõðù ƒé ¦†®€ðýtÊñTÕ»…D4ïb-}?GßNABäõ®©I&hÚV ¯²°÷á×c¹¤¼ Më³°7gUs>ÓÄT -dKÌïÚ°‰’r¼„‹=P ttËĽ!‚Z+½ê¥« H N´( Yªô§ _<"íÃÂu¿ÌÌ̪95ÚòÜ—¼*q/>®;ýÉø2$\˜“óµ ;—µÂ²IôcÓ‰²/GïOOÝBȸåìê¯Êz„.¬›››×öZ)GÅp¹~Ï© hy¡¥Î|„ù8݈ér»ÓÞüìì§%Io–3òF¯.:5U†x^DÐe‚Xù® ‘&©iCuòb‡É°›”¶æªLÇóXcZŒê‰â…¯NdÓGM½ s‘j—-%5558ö>û9g™ûÞ«Åyqi­ÛBŽ#k„|ñªéð9©Nnµã£sqLÒ‡‡ûѶ<«—WâŽ@rÒ´¯~õJ·ò™ªz{R¸‘&NhzÚŒKܸà~ Á\\96Ý `=€˜%mä)'*£íP*­¿°}LJøósgÚúõUéM¿Ä¾ÛŠj¢oÝëfŽc‘̧¦ é%Àg6¦ßÿ €å ÛC1Âh}ŠCž»võ¹Ò¤±VÑõüÇ4TõÜ~׆ûŒW(Þi ‹î}ëZ&¸S£\ÏÖà:£‡Hï+dÈï·”mýÔ—‰˜Ò$ÅmJöä‡TçgÀ@öW„7ÒCÈJOÒ¢UŒ÷Y¶Œê®Ôb¢õ{…o,,€!x".ƒ¿Hò_þ} ï’Žü*ÆUûx©›Ê¥Œ\Îd¦:V¸ò.KË–'5îYÛ33%J ò&“oÞ)™vsä¢B >nÞXO„¢c¨½rA™ŸKAﲡ*Óï ]dnÏÀ}9˜Èë¸(/ý4=°7½äb[9 þJ›lê ·8< 2Ãy}}òñsdÉ›Jz>¿BüY¤< ˜Ô³Ž¿)Ëd=l!머öàº2 'Ù>V¸ï²fÔ¦a¡œÎ8·UŽE‚QðÐN-Ê…Eà.Aö“I()퉼pŒ0kªûð<"EXÐNeë÷ß^BÎ5W.Ív㯻Üü°P(¶™{q2m5nƒd\f§¾¼ÍäÒI¤ÜrÀ *ÌÂ; ›TÜ£|ü¼”‘©x.Ëý8ô î7Ñ|®œÏøœØM¼F§k;j޵hWâ8„jÃ]Ãä±JÝÄEåÍd|hOŒ v]˜QPYº-ŒÙŒ•óÜrƳ£QYJJf~qÆç¢Òï}B•Xüó9ɨ>[/ÿÎ}.:‰ºæ-½’WKêú6JIã€Ð„¯t=1óŒç¡8i$-¾Š #5s ÍbL›qЏ§–÷ÌZ¦!±°pü¦íáøMŸúŸ?ߨ’»qa^hE… x"óEÐv½¾³ Ç}®Ä”<¹5ßóˆði¯Á‚'ÕŒ”‚ZÕÄÌ_اN#!”Ößø¤áê‡ "0ó½W¯ú¦× AÀ´UÈWp}®ž&›ÀxæÕ‚1¦Ð½–n5Zd’%¸öháò7—o)÷3“ÛbaÕðܹ•2ß{𗤜±ï¡’ž›(‰qK›¦–åj…ß”[qQ‰Õž‘ªŽOåã…tÁ]?¥$ï‘o…Àƒ´žƒÖæì7b8φòcRŽ„ù2ul• Ó¤b•»Hô*º^šc÷ºt Îû­Çá¥*Ø-µ‚Ä P¤\^“ßíêU‚µ»äÎ#•Í¿ÉX<ž(=9[!ÜuäÚú}'ò²ƒécp»>r@øȱ·|U\çÄø¥¥#íe×O£ëÛUMNOýT€÷¿éˆŽ49ÛJ—QÜŸ¬ü÷4xZàÍqÏ÷±>W2$ÂO¸Õ5£u~Žå×q˜x5°Zz«Ì…Ófm wŽùƒ~Ž-y°LÂÏ ì Hy\ô?­V½Òl™°c›^¸˜è¹ìp Šî›˜Zž¼Eɘk|yÈp^œ¶î(ªpŒÒ³·ð”£¯e–Kýu•ùð°¥o¯`GÅ™iePL&˜¿0í Ï2[°72¸2.I·=oèg7:2b·OÃ}À¡·{U]I´ÒÂ’‹µF!ÑuúI.*îÜ.áë °üÆwŽ=†÷ä}•žûÔÁ5ø‰ß‹‡ /ƒ |-WÀvŒZS©k>‡m…èƒíº8,Dÿ2•Ã$Æê9Tã€#ð|ÙÄâÙŠ0Öb ×¨Àß‘ŒJNþš©ú4ÒÝe°˜®9ÇB¬?m¬áyæÈ£òÌ"¼£åó—±*>çš#µfÛ)`Bíî>å£Ã Yä´[J¦ ¶-îwÇ_žÌeÆXu¢×$™½øWf{§î©0HΛÀ˜È£xAé«@y°ƒÇÒ*Òåæjýðæ:I§Ú5NíN –pôòŽ  óÃkU‹ãÅ­}ö€cÕß7̹ b*ñüxÆÁ!“‹Óë›uð‚ø1ˆbÊbûœÂÞŸOŒíOœ4J=†ctFÎ3¸h} N¿gón=#\^Ê\#»ÍùŽoþ¡ð¥hOø=e+„þ óyñH]ׄÆ-¶SYðìŸaÂ}5†Ú‹à•ÀgqÒø!«âPiЊ6GãGÎ\a½EÄZ©_°ðÕº Ÿ£áØ D·(Ýúž€j ‚jãÑào”L»ÂLõk5¶d9 }°þÌ£d€Ch,)([±y®ï:SYõk‚Íj}LgÃêXðAÑpÞ°C"Lmn)kkjbò¹O½’iÊH31Zݹ(âøéÊž2„Ñ:F«[;Õa‘¼Ÿò¸ýv]º9Gel·Ïzø¹=ëfv¸‹\vEGýÚgÊûHÀe+eœ™°ºâ×ði71€oª'é~“¸æ_›~t`°*Àsö..Æ-‡K ]„%:’¾½îúù,XÏ•Ž€÷ÆyûÌ5~Pþ¼y§ÿƒú¾È{ô?-Y§=ü¥žË20Œ—F5­(¯ô21tsÿAüù±3  SæzÍÁg2|3LÑËF¸¥ÑN¯´ŒÌBÅ~V«6™ž”uˆ'áÛöçyïáZÖÚ`kÁ“¡+•-zYk0Ä”`ˆ vÓÒ­N6ÿFYã®fä©]Ü¡PX‘fUÜÉ…KmXèßÖ,V™ÈŽ64¦cÓÉøcÒ‰IÕèdrìH]Ï\VݬñDAY6â‹f⎎µñ…°brsa^Íj³îð“Õ,²â¦?ŸvÆ ÇÜ@GŸƒ!Vü•'Cˆ³‹"ÇV¶â­ÑK¤±§éc{±}Jf©ß«@á«Íz£êuùÅZ£¢½'yÚ78_ƒºã^ b  QíŸrµ:±Êoޱð¨ý¾S§œ(QKnyÇÕ ü¯Q$Õ)ûV‹ÞÏ$ ÞÜçЛ\î¶ä6þHm mˆBñ¬âÞ‘Ðò®KŸEYIâ—º@[„ И™¤Ñrú¿Rö^Ž?ùƒÿ1·OÒ{™¤ùòbæãgH?É@,]¶·_ )Ÿ´=ܧ§‹ÕëUÔÍZIR_v d›·x§‡ø ˜ÀzåµA›F(@…ŠŠÇ¸ì·¨Q6Ž¡~qK§VkØ,ÑBR¶s·Öës¤t*ÃÛïö5øï-¨òºP7ûîúÃÁHädë?žCŠãGçŒu¶(FÆ,™$;¾LW8¾ #ªê}é¤-ñ~¯ ÕÕßè:OU‘pè\d*/1²r½fÅ'€â«íùTº»:•mv¦£"C&j4cFõ²s6­‰p´€’Ï¥ŽkvßRG¯ðG6~HœLµìðñêFZi•ýVaÆYM5îíùoö,ëý/¤<dy××™³±Þ§T-„©÷_q¨u€q*5 û×ûbÀŠ4¨è^6»NþÐ &ÎÎót•¶jµžÉ ½9æËòõM„w’ßUK‹~)Z?o¿“Ã\¹T)]ž;Ä|ÜЀ €M%ðÂñIìÅ’ã$”Ñ:o)ïk÷ÎÛ•{/ݧ½£± ¥_à™·ù@í+WI7÷û€ r.÷HÒÿÔpÆ=Ý¥7æáŽ¢„æŒ_oúû£áµúí„,åŽx^BBÍ™;¸4×ï‘·<û“Åx$tÂõ=»“óÀH<.¸‹¡Š„j.áãse aœ òèlŽêg_-¶óUé ;ŸïܨkˆŒ¤^C)P’MbÂ1¹UR«H;Õÿ^ÂtG‰`y9«Ì¬·sþ ý`»6¾,;}çËNýE÷•\Øâ*LurÏß’6•Ú%   ´<íø (¢Ýðåq9£N™L³ïE"…ü+O{55F‹ö{ÎUs¨¦ÒÃZÃÔç³T 8 Å8ùs5W¤¤ÍÏö¿ZôåøM䆗Oñ©bRR¬»<’¤›¸êá„íà“ô„_Ÿãl•ÈìÚJíô3´‘0Ÿ‰÷eÛ lŒvºÏú‰>1üLQýM… (¹ÞJÒ­ÖóÕ¼î}U‚9'§”F¹Ü &$zöòQBŸ¨0)A))¤Ÿ14Þ²6äÏ¿f‰0š}z2ÃA Týìï[Q†UNvò0©ÁÁçLYYlª‡ ^;• ¯á`Êë{â}ΰ¥=´™þ­À%ØÐÇ*±äaÆLÅ-IzÎ ´Bä-ÖQ!qªrí4^^ÆúsKÚúãXÀìÔz‚‚\˜zî|û’”ÿþòR¬øyÿòp¼S¸¥¼&'}BjÕB(Æß8~Ëßt½Kù¼Ž5ãzî•‘ª-ü hÜ>¾ªÃF.cý&G©çúcZ­GßÙª]£"Û˜6ÛL{­j4,(n}¢‡§‡×ÓÆõjU\/÷öé½/PɪX¼Wê»+Ê›•=áäÓu¼¥DEÅKŽê (+ èãd ³J}×U"§½ŠÇ¯®v^püÌ«wUQ} <‘à¤>àS°×,APõ£UEJÜÃUj»“môгtü‘ÝôÔ àe´9ú3¿"#¶þ>ÔO—ûïýùF÷—Üò>· œ±PÒ÷R” &îTTÆ_/§ÃýrÑJ¹t½'±V †øäIÿv…ØÝ0Š£ß Š{¬L2ŠŽã6ØÐ£vM¥çp?Çî_n¥¾Úôà>·ÜãbÓÇ@p,13a8k|34üø8;ŸàbX]J§l³ÏÞ×ÈÈûþ›7Í"aYü{â 0¢–¢N§„a¯_šŸýŠê7R}ª `I´åS¿R¹gTö­ò/Wï<ŸŠzOHX_÷Y$<ßÛs8Áí§e˜°ž3}üª]zÚÊ⤺ºo@`@è¼HfE^NmíûÆÚ9Tw.[øeÃl¡ÉÞˆãª*F=w_מøØON¤I_Iù' âØiŒ–2Eãͪ ÜœJ(¬às¡yÞ§Ñ:§0Ì»’±ï¸8](Öž_Ÿ—úc‰‘ÝÙ,ÊqgŒ@ý¾õØ›ÕïÂO …pOÏäKk=³·ßãÌ>ЙÒ*yõÉÝ]4ä· Ã?î QÏm ¼€=û3%[ïG,)­*•Ä£‡®ƒ"H-MJ£TJR:šñº ‡¶^xhëC< >›ÑúŒÇliÍÁ8| €XUûp6û!dñ^9Ð#6Áðyî„Éý7bšàñ÷xÀþulòõPŸÁ±”S0'/©8Zöåzö+³Š‘^â=µ\¥É(ÑZ RçK@•ᕑ瓎èeTé׋ùÃõc×÷d-ÝRØþç¼ÐÕPÁ“l@s¬ávºù=-ÜR¶•/hË'iFót¥ÚzÕ'ì˜@ðã­™V('V#ŒÜ' hSV ’Üw^OÍB@R±!‹ïDçl¢Ãæy”g+6¨µÆ• mf•«*6™é$ÌSæÉ¢yÖuÉÀ·#¯ZÐ^à/l@tq;„¼¬pÙQ˜o–ÒªÑp¨Tq\ÏÌØPÅ"ý¾Ë>Ï̤¼îØûØäØZù¸.ƒïÂúl`‹°cqVD™¶¡ÈZ£+)6k¿“Mýl)ZZ/^øú´¯z¦P߇dý¸1¬7½¢;ްܽxpUP UlÒÔ,Ñw*Þ=¼0DT‰MØ 1¸O ¤ |Öinþ5Ì»»"ÇÅ5ÔÔ}ŒAƒK*×¾:ÏaˆðfËÎakœ¶·%$h¢Jµ0É7ï;[ý·â"Ž!Ý„pÏ鈴c1à§Ã¥<ñªÈúˆM‹É“òë%ü{çÌJ—®RµáÙßY@([þÙ&© <† Ux-De g8b¬Ÿk …i»¸Û&–¸Ü9[ÇóäcAçî\F¦bc,Å¿„0y.¬Uõ¼ Ùj®ÿüãÅIîì Ó‡4¡«’Éj—½Þ¤/É??áËæ§äþíÀÀ=Ú(vê¡’}lŠœ ßïp8õ «oë3l³\œ­8Ü*£Uc JȆÜÉWo!@« ©:ÝB}_3II4~,, ÕÈ{ê9 óA„û&¯36;˜T]ކ÷)œU2´ƒÑ¶ðãð, 'fýVü³q`œ–—÷èÂú§Ž¡GgÊJ* Hg]ž5Ûƒ š*Û"þ! ÿ׿8E¨ŽçqÆÔáL`{ÕMR$²÷kE3 å~H¨V[ç•Ò¨TÂNêÝ?7ÕIÑ]¿sŒˆ›P÷®‰iãSe œ=ÇD“Œ|. …0OÏ7Îýà‹a®ç¾È\2þ‘,reßÔ4 ¸ª*—å·-u˜ú•¼þ*®²y¼õâqN¡½›;{ÕÎ7‚<´ï¼1Ÿ /grrÒ”í9¼†=Np†87‚:/t\«ÙzæÚ— ¥îZ«p¢¼³ÖX"Cû©ìTakÖùf±*¯_V :BýKLïN´Ù -P·‘¹XšLþ€t%ð©ý1çäW¨Ã’St±šë-ÄÏÇKû–WT\j0|–¹îè“Ã!Öåâø\dv¶•X¿MSè§\þÁÕIÐÙµ'mýu"°l•¥Ä™ã¶L«¯õo”æ×‡¥Ïô|>õ5«GHû"]FQ÷dû‡-1q4€Àì1@Ó ´Žzbâzsš2_w©T(<ó‰ê8˜¹R6^“\U5€® !L"R, Ëkñ•*y†ˆŒLÆ¿QhUÕ¹äM–*°û—yÞϧÂSÏ;•Žg¼Ë_~Fƒg²©qqt ã}9mªØü˜‚o™‘õúîÉRtÐÙ±öãFÖt{àŸ°Éƒà°_n•dؤâÓN›µ=¡îÀ'6¥·à%Ôì}#°SŸ˜“úår·ƒŠê‡ªl1DÖh)» Ñ;-!ÂOž mAÿÖOB†€¸*Hmø¯%ßrFŒÉûÖ“ 0P\l>mßÁ1Œ–hÌ.|¥W}ÿò ¶ëù·*¼Öß³.ŽUüÔ»ÃíŒå\šCèBfïæ\}L/J‘óMrÐvvi+%åºh²ñ;´gÁ²ÿî3kÔJí 6 âתödá'ŠÃf iY×Wª3YÇð ÙÍg @±ã_¼pØ™fMt &ê(uÍTŽb<£_Q׿ËÓáD·ŸAÛUÒª+ñøpD†ø"ß?‚¸`xia‘Uqj¤ªãUø&ëM~®Ó_W®Nš,ÿz8Z ¥Q­v×jt„òM墬|4› îõ7”ùÂÀ`þãëÔGíkߊKûžw&/-uPSëÐT£3³ÈŒ71Á;˜I~\'— r]Ÿa=”±[û˜†89ø+ð PY™yÚÜ‘z® €åÍ”H¾d=–üÒÓÙ3wå ½ÖJ]Üîý}f_­X)Û*IÚQ}»1K€Õ0kèËIþ ,á}ŒˆN<ó*à þ©’AgÛü´ÖcT èÝÌ"ݶÀ—§ƒ* !Œµ×\§Hгàóv@ÔVÙN© äÆI98,2?Vl¬rÜP)Ñ÷ò;æéD©òÚÑhö#z‰ëÅE…r€ª?ÉÁScï…9U—þþeìí‰Ê®Ð¸›­Îdߌî.tJ5oûôþZML LŠ"C(tëËÁÇýP@•>zYX0VkÁy‹¦½Üòo¾uFugtC¹/JaBë0(›uÿ S¹àWeÍÙ8P¯~6cw»¢…\è<0 É˜,ÚÃ+dõR3„®œ`)`:Š|2á.è ¸I³_b#䔺ßád²ù*ü|!¥Y ²ýª*Bäþ^Zz¶×C¤®säz¨ lØp#ȧ{ôÇ;)ÛZU˜[–Ò+y•è:yÐà¯PN4 O-xæuäÕi©¾»SÜE "Ô‹ Øe§¬õIGU@ÂgòÇòë ¹äF¬4áüØ5+ôÈ€ÓÛ!¤´·3ë ræà¯dçx9ÀáUë¿êÊÉ]% ïD~¦ïý%[†déy¤Ô\`˜uŸKÆyª: êè>"À- qØ÷вó”þªªÃÊŽE&AE´C¹1MKJÝ’ô™ûôWºÕ« v˜L£Å²=K3nÉpêºß|¹ûîÞŒ‡ô'&uF—‰2…òìKyÑ[§*îQ:"1kKŠ'_σ ü þ2ȨÊÓuž•÷ð¾’|2ã“ýg8;²À4d^èFgÿ€H<Ù&¸'»ìãG1f@WgLÀˆ ZÛð 4d£Á¦| üiWÕÉ9=k¶ð²Ùn:çûN=Ž$Õ¬ÕŒà,þ5peJé3ªðå¾p3uîë:äÀÐSðžE–ðáË £?h’áÅEJ…úÞiclu·â‚‘1¼8ãUÞÕÅãc^§Ä”™PTQц%%ªÇk}+ÀEÏ""6„•”°¯Ö¤e#A€ÒÜùÃó•éÍ=ûªÙוêÑåÝ»YB[ÏT“\´n—Å ˜eA·_ËÿýÛ€Šöï›ÄßXûýû"£úð‘ɶÐW\4ä#ð³ßMÓ†Ù-&Á_c¿o¸Dþýë¯Ï¿ ÿç#®"ÅcàA¦¬’`×@øûÑÿoûŸÌb;#Zû‹P ±À?+¾eÇgúßÒâÿ}îÚ9еï«Pà_/ñ¾ýþ?'„Ф¤ï>ºK ~êó¨ñùó¿§çþ¿é#ÿ7GQêcŽ¢‚š{‡„ÿ=ãü¿Z6Ô@šóÿàáÿûÜVÃVû±¤Ðå:x8DÆì%Ñ//4]#£ATk7tXô7·Ã#òšWâ@æ¹t#@ðóæÚÿ“tû–@f9NÁ=œg˜\Ï!tçwá_ûµ¹¼Añ;ܸ+l¯ýSޏA¾­ D“4¤…Ž„†hý¢ª*u™ï½5o*¾gÎw¾úP¡ãAâé-t‡=M‰VëöÊ¢ÿÞ×7†î×DtMD,þÑou` úüý…Ü•GøÎÛÌ™*„‹¶k—a@€¤§O©ƒÐ÷æ¬þf¥ûÊÃaÇnQà­ƒ8„+ˆ´XN€H¾–vÛ1e&ˆ\–ÜÊbß—‡ 9úºójzÍNúÖD©Jå|š>yëï¨ÌA4"¯­¶R…¾ßö£È¢ùcÈÜbÞ÷Ô±µ‡9P<ŸÍ‰ö÷]" .oèáo߇+\ñ»üd¼/ÑpýÑ eéˆsƒ&è¶K¨88¹~Ûm?¸zÿïøßѯ֋£J"}“iHÿõÙ§ó9‘&ÚkÙ]²:j·Ó™ë‡¸"‹ë|Wï"‡¾ž¹mÎ×…Y«³îœ5•w}šz‘°„\É]ÈñÞBTE%.”]£\˜·À"ú..N«hfìQ]áJè¡\+㈓&Êr“™ÉQ¸j˜²²ãd>Ó#ìÉsÆâ¸y{¡²W_¸¼&cW´ð)n €<×;dfœW̸—óø>ž(‡| ÇÐÊç ٩ϘCµLnx=¤¿îz@ƒjlÞ£æ¨ï˜*œŠŒpÛƒ[§#=8o¨>Üq²pË•³J²:õÝo§—`ƒA¾VzÖí-8z&§WþdÛº{”ó¸¢2ßbÜgì¶œI«‹².B-å0w±÷TP ŽMÌŸr'¹äO+ÿZ¼¬7AÆé*‚<ϯÍq7 »vï÷ étøÂn¾ò»V¬$«m+¸FïëEÞ…}l%½ˆB|÷јûØ9Ê–.{ÕÀy„49€ã+Ý{†ä/Ré>ƒ ¿8åòr|*v! ˆåŽ£þEv»q+Ó ç L¡ Üœ$ýêòóR|J˹ƒ½Ôoq!ñÄ2¹]²‹ß'Ü<Ëvn9Éɳ…"T FÍܨàdDIQÑ߯–Ë¥Þ“(-xúTDüÐæÐ‘Ð´š´8]6êòñ\V²h—ÐÓÓ×OU:®È”O$,½á1š˜f„+øðìê:¨££kc$÷b)¿f?×G°2š8ÂÑØ\ÒÃFòvï9<ò,ýæ9óÝþ¡'œ{:Ê+%Çb,äÊ}Áhï^ÌïÐÁv¨é±(ò0,®º¥.—ÉOû@ÎW[ QœŠNó+ÛwI_múkËfGËåï¤î“c'0rˆ3¦ ú5…‘à¡=+_¬/5Ú7òéê«Ìu\Öàn©{j˜¶ã_Ä eØÂÏÈxGÞìO¾ù9³«¡<:y‡ µd¹êæW*Þg€äíôÏÐ8ÝêJ ý´Ürˆ(¸¼o ?+-m?DöÇwrìÏõnk®æƒY»]ç€ú&ßӃܻˆ¸€Éÿ”·¢¿ÉY-/AaºìýFvQ3wrkY#zˆ}»Q¬wÍ-çgÆ G‘rï"àÒ~ý"ÿam^=KÄu ÝE7Ë™ÝæŽ¶rëi5:¿W#C‹••Ʋº÷úTp­ï7ü™1ÔÐ_å^éXòBæ§ôÃoKøÙ=Y~èŒEy*9äÅ÷%37¡|Y;83àp3¢s030ËâU#ÈËÒ›]{mV óSw«FHœ—Nóxh„ ´ÝîýÊy|6w‹ñ¸kZèPìøä´+ˆôúo•Ÿd½ì“ö"îìèËrè¿7þBô‹:F)X‡Æp#˜É{2\¯ãâË—wâ³9»nf¦¤²£!)BÎýIc¶ï†¨%%bCwrß#ÛSû ËÑ@ÌÛŸ¬äà'×ö¬#Ï.SÔû@Q¬Øý£×vZ7a ¤ ªñ`,‘h#ü¼p4~~ÿ¡é;ßÃÄ¿ |‘µ!¡nDªG¯¿R/,ÞDõîÇ8vgùøúuWëõ}ÍoAÀ.‹G¹\Q!—mF/¦¥Á§p·ÿcÿú•œÌmy—ýj†ì1ü£ä 9ñ¼çoÿPK•nYT=`ªæ­pos.iconset/icon_256x256@2x.pngUT Z(bZ(bux èè<½TU]×6¼Ý!ÝHJwá¥))iéî8 Ò)H—¢€‚twwJwwwÿÏý|ïÏ †{­=לW¬"LUYƒl…×2¡€_Î=ÆoÁ/è¯uœ@þ ¨úþü!™‹¬¶‹º½¹‹ûG'3ÀÝÝý“µ³ÉG3v{'‹´CQr d$5<Ò÷3<Ó dg»ýzR">RšEá¹#â ¿Á!Ám!RÓr8ÑV»Ò'’$QÓkPSÓj}/zLN4þí¹ 9ž,ᆪ® ~"ÅæÀèÃãèÎϺw¾f_ß~ý}Ô|XW÷ìô~÷wÞdAJe'úiA–~)þ×9g‘}N‚/¿|ó§¤Ä ÓÐæ{ô¢k)Œ¨ÒÂv@ð%: @‰Ã”RÊ=+ðÆ$£`›Ì™çy‹$=!À ‰Ðv<úà;%=Ü2GÑÞa°Ìü6ÓœºxA7@xj¥²³\¢Y»3w”_µ®!Òd)kÿ©[ÖðÕüV–ÿãl†û¢NN®úÑ9×^z»‚n }½¯ò p•LߌNäE‰õ_S #Mµ®Ieh¬±_jÊ늡iFÕCrø‡6)~³Nð“Ô®€0)ði=*²YM„F‹–zn¤kK‹ç± ¶æ·½[P,þƒ_Þ-ä0ó‘iÍá+"ø_k€eðpTÓ•™ZzzÄ™™™ž¾¾@ÖþXô¯ ­GW`›Hkñë?Fð¥úŸ@6r -Ú݃ßÓƒõT‘>§õ$+Í€žƒ & @Xlæ ¦+[t„ÂÚ?E£:‰|G]toÙ.WŠEðb¾X"ÃËqñºþˆh!í5³/«…Ϩ¸«Ç+íùÅÅÊø=e÷&´x5¾Ë-GcúSB›_qJ‹Äî;¬ ¯È›ÞOàó²!’ú7:yÉ!®;Òâ¡56pXY[«©«†ÒâíâîÉVí\zŒüyÏ’>]ÅF‰#ÏsÉ$’1Ô¹7Uü”ÝÐÐÀ3úÞkáéd™MHn‰’!‹¬uY(“³ókt) FVøªª¥r{ë¥D%Æ›ñíKCƒ¨Ç¼! INI‰*½U(¿œ§h¦-ø¼f‹ÃùZ»JÝÓ{ù øHËŠƒÍGÓŽüs^ˆØQQµ‡ñ{ GŒÇŽ_3Meeå÷—HuJ§‚±ß¾}x»¾¾¾œ ®,éç'^ð”H;°?–7¼‰MÁõ.-§¾ÐQ0ýEà“Ú».@Ìûr|]€——¡B‚R¹Œ¶Ÿ[F ‹ª<ˆÜÝ̦ïûýú+¡°æÂ•©0Ùr^f¼:ÂWéDÆnÚþg 3sò‰IcÙ©k ­'É+J kô¾úQU•XMÜ펦ºkŽ£—§FZâŠïpÀBÚKe*Æ>j.œê¥Ušr¤çMFèÕqôs_IÅS¸PCiÂÎX‹lß»KË©"*0ÞAùøHûÙª‹?TÛ±N;>Ë ð̬ʖ?ó2‹4"³ÍÉ÷ç.±‘ ˆÃÇ­"-äXi @<¾{Àßè€1({ˆnÏ×–›ëÂð¿(çý‘x¼þüE‹ø3B Þ2ïK°üÓóCea…£ç–…·Óñ ‚Ç´åED\`lt«í¢†2DÚ×N‚Ä È’ÓÒîÌÌÌ6ˆF®Pž·|zö_KŒóu¼ŽUòÛX«ð-Út2E$÷ô†)`PLF¤œ÷Ôb£ ²n©nÕ²V#4Ôiö{ðG³²ˆ—y…à¡T/$w®ï¿ß¯¢ÒÑÔ¤PëË÷¥em Eà ¼|ËîÕê§qÓ n 'UÍC.+/ý­Îä!J­iÓÒ3??O¤'̶¤)ÞÁ×k«Áå`Ê[uÐe‡µ+Èj§Ç²ûLùeøä¶’ÓÿÛv›*í/¥Q'23ŠJvCÚ ,¶À›¸*qRÛÙŠ0Ë,WšóÓ‰á™*ÛãSSkÕK~9ÅñLhmÎ4þ÷'±9ò1‹¤z/K-´q¡’T˜”½·*ˆ{'7>`!ÆìñY®Q§!oŒ¢¨ÃÈm Üm'E¸%|Þ&%I×£Èñ`C·ú˰ªç¢”3„Ÿ³°Dh§2ÿî6ùPaYú·¬Ì)A7£Îvž %Lœ—C­ŸQ¹œÎi/øâù¬·LÐû{Ê4GŒ¡*”%Oçrs¥"“Öo ‘d&ÅœÖCsõ*Œaûþ?>—Úêð¦Ä[4c>öë×/Ðt„e:|üÞ%ÌUçÝ Op„¨œpå*eQW[zä8³zÎ D6ez}‹àt'r̓Žñ“úN°Ð÷s뱓»îå7XŽiªC Ì«jhT˜-Ô¹>Œ¿èÝlý0);@Œ²ž-3°°h¶,o/i–%áÅzBmøœ·ò…İ­ùñÂF¯H>zW'x2𩥝'ÃÎ0m­ØàR–x¿jü £&Òö#9­Â3 LLÇÕ0&«CÙãê †v5›˜—깂-yH‚è0L˜àÙú㵇™Ð ¡NâÉô|·ãM‹ê”+Ö½oðƒ€Yý1 zµ¨þ¨ •ÆïÌz—Ì+‘“Ÿçž•ë»À‘ MˆÚžÚ„0÷_°GE€[ÿ ¦º• ËÁ$r~º`' ì² TÏQ¢ I¤©ãéhúºÊ£öQü/˜¡ôs¸Ès]ÂeÔâaÞ¸‚QyUUÄE5ÏpEOIÚÍ ƒŸl#¬H·oÛøâ_˜¬uEqÕê‰Dxæ\# I¢‰EÐz\‘½k¹·ãùJÛ³õÙ÷œµîùñˆ_¤Œßv6;;Æèv[³pÈñêÕ«.y—Htc4ÀÑøî;ðx"+FŽÐ’û™2C$8vQ¼>ºûðþý—¯ÏÛU/g4=ä%BW ’û¼kš€7]Ñí¸÷xñÖåzW.´4Ö)4¶Q "æÎŽ×Þ¿¦/Îýô%àé¶x)–›­­ítT¿ Ì.g77~xDBÚ%»QÖÃ~\ËÉÊvò7œ*¾¸N˜p x¨ dv!$Ø+¨ÉÇêÅÕ1ˆã?rm }Â>eÃö‚È7 };Ø5Ÿè»¢ËÍ£®“'&y«@Â,ŒÏ“#JüŸå ³x[~BøÎ€ [“²W0i{Eèà”¤b*wîcÔõ§¼K† 8t>¾ µá«l9~E««Æë²ˆ2j `‹惩Ôð´7G ñ0p¸#Bypðà‘•¥‚Úð‡ÝÝO3æi¢ßÃ!Bà@¦¥í &—Ó¸%呃øýç<Y ±úq–»׿×Òü‚k šóù[Sòç3¹).ݳâ)výLQ‹Êvyð§ €ï¢0r7‡ñ+ÃsYYYòD÷ y¦¦>ïÔÔy¦!zh?Áäíc[XŒ£ƒÝI\˜x–ë«#Ý÷p®Ž6íÉz¡Ï&ž…«nß„ìß¼¦Œ„2õ{Š(•Ñ:7TÙõ{éÁ ðϯCÐÈ‘‰1ˆÒ»5g÷/£*‹ŽC…Ù”ÒÁfHVõSPŒŽ´ðö’ Æpºðˆ>H`k’|j4$:÷ZÆåyº®³î©¦÷bé(fÝ™ÕÁ€U\‚v%_Àfùr¼ïú$9èl6/íDBË,Ã_:è„fq(¥¬kéèj­j=fPÖ¨E#{Í;í.(ö¹ß ešAçZŒX ÙØQP{Ü´ÿ\ŽS£’Oï?Ä–pÄl1¤¨”w±:GV͖ņ  ½˜?ºÊqÝ›Ä?!Ô¼}Ám®Î áøÆÇtæ­${ófªuÇîî.†.81@I™¥&Ô8ÿV¥E¢ù”ÿƒ T˜ü t.ÆÛ˜'»sG­ÆÄ#;éÛä§­•·j뇬íwGl­Z†Tc~üÄE^ì¹v–ÃÞÿÌgV0âÙ´[B@ÊŽoõ³Ÿ×]ï¶'ʼ±ÿ!B§A4afe•‘““ëx'™Ô_ùìIÀuz2ôÙè¼,´ŽÌ_'‘Ëýp-™÷F×c8o~ž)ÕÓ‹¬mòj™ÙŸÐ]©ÓðZ€›'‹Ü†a”Ô¢<ä¶CQ´êcezt^ö÷&q»œ[mo\)Ð$Yÿ6ÂÔI\úŸïa4Y¨CG' ýó@°ÆûŒø¹ù áßàõÔøørº–ÑPN ªÀ¾¾t“—à”hôþ{ç×ΣU{ÿz¾*ªÊÐEæ¥pÚl샚›¡?.J–¬Ô£Ñ:iØØø¾¯ÇóÅSùÁF55‰YØ¡xH+Ñ å`gc”ý9ªRéo•."³ó2à+>eùÝ¢oá²¶Î7ÛÎoŠw_¶VîÛ¹ †c#"å4‚ÚˆXáçÔzç ùj2H諈å!Þ*uã<í?*)|% /³WküƯmiËOÌ®¬¯^é_aZ.:@bò’àÇÚu=­ÅHÈ=I2^ËöÉ·÷ÜÁæ ~XçﲘÞ[_‰aY÷–š$¨ EB¼Š¼ÄrŠÈý»[Âë³Ì®#‡(>g$î® bãEðŸ÷å;B”ó≵àªÝñ`¶±e !•Ì ®vx›Ïÿ½©9Ž1qhö¿F™Ç\P«¤¿¯ÆŠ. 9ñ¯¾'*njÀÓÑÑá:üí»¿¿fÏÿZmFH­ßѱýÐùZm\$%m 8!Ÿw¦Rø wäšzPkÐRƒ:Ûß|š$v|³õŸh¯™ÖŽ.¼Û ŸÂ›—™í¿Ìß…oó_¡_/Þ“ˆ¦¶ÿÐ2lÜ3ž"f)òÉá6%ÿÔ¡ °èªsøä±D ‰÷Ùß?p3ã°Ücð‡eÿç" k€$æp Q.³>BÔëh9ˆu„´ 2Pa²ÿŠxý‹Éñá?§kù%\a‘º`+œ¶Fcâpr¿®:¾.'Sx0âOQôÆÃøê˜æ²óдü´bL¬ï'¬CSÅ4p¡e P²•&”i­„_7UØqµãÉçz%Ä32-Nñ‰UˆxVö58„Ê]þ D ^5œ•þÚe&—BÑu -úÞ(²|ë |ëv‹a™úþ&‰½ôÀ’þyT . Ã¡‹ °L7íe¹íp<ßYž¨ÊDÊñ*°13Õé‚ Jˆ$^pµÍÌW‰·ù)`^bÄíÒÑfD>­vF¨q{ áT좕ÈÙ–ç`­†ß9´¯”^gT‚0=íÆ‹2}Ä–ˆ…ÎuJ³¡qÁ£ÒW]Ò—­[g\c;â/rH¾©]a:Ôêá· ‰ –µ ÈÄoøß½Gúq’dFæ¼) ³ÎÓC=š™¢Å;؇ÐPÒ ‡ÜEhœ¶‘8.5^IÆßeÑ÷{ƒW{µ»XÍ©ï_ÇÊ)”?ñ/!_ô~¾÷×b}_'ªùòN¡#!ôôöJjj&n޶º?jŒSù´Þ¹K‹)ó/£DüzGÒÎ0–éÓî®UäÓÒ€ï­Rð P— 3¥zð±Fs>‚bÉä`×éþ$Æ?ÒV~ °öËr-Ê…x{§èÙ› ÓúùÈ“ñÐøÎX\lħڑ2³7^Àº“ %&¨Š¼cf‘l­Ý£ã Á„ýñ3í5ÉÚÓ˜ŠÄ÷§–g…s ˆM˜4À¬[DÑwD‘7!ñ¿lâ:† xvUå8šCÖBÉ<± =,¥‰/N%"ŽÌ¯}ÅÛÅ;þ‰-."ªŽÖ¹Z©ƒÉHj„Eª;=Ï6Í8í´þÜlr‚2î‹‚~,{—?Á£{ȵ,»*ÿUo˜“sÍ«m~‚¤(²°+’æÒáM¶õYf ¤"”ðˆAQqw•ð;þÒâÑ-BL8`^ÜáFî2Öœìl¨sÖ祭 ‹LÏMTŸ»åsPË2éÈÂCúÓ°í—I÷÷Ëñ•cìƺAߟ¥aCt$öÙÉy¼ÊòoO•¶—®¦rÇ@^/uÀ«Q;XÍ~Ü>O¢´=S†…4^ñõgέeRlVVLd$5”Òšá)ýº ±5¹_}Ÿp $À oUÚX:ZªHiiD»š¹yþÐ),`Ü:†î ­ê™áÒúç][n`ÀåÕ¦¯’Ü¡_ÖûÖ7ÈbôæK)®øxüûŠõüTO.´ÙÑíÝ7°³ªŸyxxøÒPÂ~L‹ ¸K{zÞµj¡ýÕ¦ƒˆ‘zO­vgÆ~± 4@^>˜Ö§á{p¾.¤4^-ƒ¥ãÃwŸó„î ]º~ùvËÅ~­µûÛÞqˆÄý÷^‰&†ë¡±÷W4^~k !Ð.D4waØEœ¢qÄoÍæT?q#Ôå65 mFUýó”ð¢Ô¦cþ¨²dddÖ ‘ QsßdÒ~âÿ,BK.ï$qW¾ "ËòvòuÏm3W…í{wÑ=ióýãú´àr”¯Â‘’æ1éÁQP“õAe;Ìæw䢥þ°e)ÿ§õŠ®s[öUª}÷úºî|‰^á?Õ³(:(€; ¨®-?&±ôŸÞYO5Jý•ÒD%Ax ŽÉ'9õ0˜ çãQÓ; .Y8âMë ¯¨šMý< ì¡>‹ãëÜ5xl8u6•+…f~ÌÃFïŸ.Ðv]‰ß(¬`«°Þч0¬dt€¶Vþb4A­ÿ·dAšè¹Oë\÷ì¦æù¤Î4®ò²¯ü<ŒòÛîÞL§+•º%aÏv•nM{‘ñlaS¼I¸fR4¸á¶vÕ¹´žëÄûÒ# cþ6ž}¹Ì ®ï] %Ã;Ö=%/^­×mj¾S êý«[ùC H‹† ÷eaŽk]¥r½ÃÍ:íÈÐÔ¯Ìø±»]† ó['y[ôœûìËÌ úÿV¾^=¹E•Ù<”?êãTÁRÍhsgÀS bÂLi&äç‚ë¤@e ,è°;þ[d(•¯á ;ð/Ù#¦!ð(â~Øqƒø¦ä°ÿ©Í}…2Û6!ít127Ïd¼E\[½ ¤^PÁ©c±gð‰m$æq`°¢ hcaÑæA"úÝ_- ÙCB€¬ol´®8X"Bô„–[¦ˆÙõ¶ ŸÇ>Ai³ã ÒϺÃF/¾!N´÷RÏÔì饧o©)7bŒ»¨ª×:ý%pcº Κ^`ºÍjöí~SÃÆ#Ó‚&š‘qxsR6 &VNU‰ g_²¤ÀG+ŽnzzFB¸~<œ÷Ôqh§½p tP@¨,Q:tÿk¶æ˜1’Â?¥¬v––37ß­…»•ZÛóxôŽÕïŠêþÀ¾º«)ç%–X Û‰zL¯Ùìtl?ÚνvD¦ ‘³üùLƒùBk£àËs¹Íí’_¾|1‹ á`WM£Kã«·HïhE†ò<פ£ý‰¢úG”yq_„ÏÄpÉÕö?ÉÃ2ù±á:².ksÛ»×Éqc9ÈwÝö²šó’ØdÊ^ü<õÅ&j÷ïÏ>¸Ì3ÕñŒí^û. - äcÑ*bÕL£M+÷Är Ä0¼Öâ]~”Â~Zlôæ:Ä÷8ÊqËÁK~JuB«çz ëÈ›xò/»tw4•ÉÜ(Cð"¨rkýÄ´šFѾÙELˆ¯íZ=ßKÿîPÆÚ¿Òüqâ o ’”=û üÅmÛ7œ¾¸ak|FdTØÝ=ñxÕ××§üq¾Éô±Ö’ß22ª‰ô³ìd©Î•åT™ÑÒÜärƒ]9’ŸLÿ§É–Bµ ¼ðÿÓdŸœr,J>IZ$쨉²áh£dRÉQÃz®ŒÄ§âšØkYUkýT9%¾ù~õÕ°ÏîÄ3”×××G–>äEFFVhþ}G“Õ+ }{GÚk³µâ™y‹cÞ– Ûæ8.Ë3÷äÄ·¹*YC÷ÏmpJª.øÈSâéýg_]LÄш²QjS#ß©–AµØd.ùþüšãÍýƒ™N@@ëS»=§Ú>­BmÇàY™Âßµ\v õ¥&(ìÉŸ ´°”«68¯o \ýB» ×a¶ºF¶ÖJ2éÅa ¼ûPÎLg•vî»PèåÜû3oÖê ˜{ iDüerΠ€]«#q`'‹iF¢d\ #àæáÑ" …™>¼T°3¹+9 ¦?Àû¸»)>Üxý þ¢LA¨/ííÞr±â’>õ—~R«P6‰]ßxn”ð ѹ|®ŽãÅØAÜ‘ ù¬’ÙçܼG\K*Cgå(·»eÍ¡ Àí¿ÂhWb:PÖ"ú~niKc¹H`/Àls“4 Öì›êÕõÔMã/Ó ù¬Z{ê!¿€K˜I¬/-ÒG[Tƒ;¥RG~”ÐDD>Êë®­@Îe™åëô?¼6i#(¸èá>¯¤Û-ØâW·l2”§ê˜½ÛúÍù§ÚÝROvÌø%¹………yº”>ŠÙ½Ë°ŸñL¦^»{CÏ ",jnÂú‡ÚãètìuÂd­ ÞÖ~bM#Yù–D¼Úäm!Ix#A@Ô8*˜"”¸—É·k‘Q^daÖ׺LÍbû{ ›:ÎÍPs’ª`|Qòm_OY$èoƒšš— ¾íèé,FØ(o%È_sP Bµ‘*Ÿæ(R×»žNºiº–"A€nÓi䨓³Âm¯\5H×®'€ðùöhéij ¹o|‘"j‹­D?½‘ÅŒáOÚì<Ò©†;9t ›6QãÊÚiô*"¬ý=ƒƒ¡ð—§ƒ!•˜|nuϽ{¿ßÐŽÍ}ïè•à`â¹%à°ä{Äç®_:e< ú{4c½Þ¢\“´å¬ÌÒÖMd}R¿ôÀŽ#¦ÄqŽÅ+¶jQûø·¢ó•=^ÅEàV¢8ú-jÒ>âx‚òk6ÑNòƒùÑÆîDA¯’P ÚkZ=ÀÊyˆñ˜‘{<S¬)eÕ¯#XpQï!½~ðëñãè`{£o~Æh–}ˆæ`IRâÍs¼`µÜïÃ~ ö¤w`}@}tÚ0ó°?ù¾•éù]þ¤pY"1ŽSW*ßb|¯Œ_ž†úˆ…þv¤f‰VPÕÖ°V®ú'z÷  Â|ÅÁÄr‰TA(ë8#OãëB¬£Ž„Éõà¯üÂÂñû¯ç»oâ ³F&®i.­Æœ¹‘4î*$ 1dyɌǞv ?Tã$黑‘““Ó†ÏVv?Zq¤Ï°=OT|‹ö¶ºØÓÏõÛC¨°×ŠüA€9Ú¤/r¾?CЂ«r.ÿZACú5…O¢egÅÕÿí8((`´/Â󥓦ì¤ó×<…j^dLÿb×Є¯C,×A[pýi—x°á£¥-ÌF÷£E*Ô–DÄBoû™‡ý û:þ`CoD~áøfµÙÚd«åÈù*-g˜(G:𻢠*EdÂg”ÂX”–‹8¦õ «¯n èÎUשzH>7[5«á,É]4À¥ÆA2‰ìë×g„DDßKJð:;;™™™aýŠöc˜ÿÄìyw§ ä'XLxäõ—Èe(JÒÁ8•#'ÇgÕ+È1ñ|ÜL¿iCÐÌ•;Gú¦#bn;ݨl2kF633“_Tô¢¹}Dëþ$VîåÕŽG[”í*ÔÎÆHY–]¤dOÍ™‡XÈ(UÓ& ª+ý šTÂOÔÊÊ «ÿ–x½qˆã¾‘ëº}÷Æ0÷«º'»ÄqÞÁwÐçÏÕ+õOöÕXJnnüðÅ-eRhÖáB}³¸ë®Æ;GG|<0Rr2Ö÷ïS‘ÆÁДõ³·WÙÎý°[+ö`ùóçñ4 —qDhW^ÿo´@¼Ô%¦þ8Û’]ò¨íÞºŸaSšè½e” Öá8\Ïë¥rOó•)xÿ Ñ>Éé{íüâPNáþÙ°NG ·–…'Z hÇ7>5» Žwò²øÿdÐËGõ%¼DCBàÚ%c"Þ&{5ÉŲšav%æ~Þ÷åø…ÄJ®Zv’)ƒåy±žð…ÜÅh(N²r´¹04qÝÿv,+IàÒ1f-ŒlVü!¥ÅkqÒ)++K®p_nìO—Ò¿°u$ŒŒdÏÈ},»ñÊñѬË|N—·ÏkF׉óŤân fІ­§O_Í4²¶÷b3aF³Øî_;]¢…øWhÃ*O´ÂªÑÀJ¨^p£HdÕù—ï6o'À^·MǪS†D!`'Sm·@>A-1šŸ®œ³f9çbD£3ôšT&’óøîŒêž„ ¤û‘„œ[à Oø´á«û1â·ÛeÉC\Ý( £à:á~|uB¹Zp§1ƒ™¿—åsÚ[³•é]â{çÆªWƒ‡ˆŠÃë"áô ‘¯lŒ q»›`䯅RÊ£bxQJð¼¨ñn¨zæ{f‰ø°K€ùáõZã¿¥Œš ˜°XK=ö©@"Íô<÷—B( Ï혻.èFÈ’ Q= :ðbObá]ªøD`×x¡IH(sòÚ(Úv;N %—º`û€TžÂ%8Ð&ž±Ð$#:Þ¾î €,iY¦ôó£ÍßmZ|Y¸ª¤ yÔ1Ýå¦7§yÉ£_þç™À7,%„Ø7ݼe˜ÝÞí®åÓ^qófÎR».{…ÃEðéº×½L¬Œõ€ÌˆjÌvwcÏB¸&“‹áP¿€Ÿõ2î'œºÈˆqB©c˜\Øû¬cºÏü>}ú}ÛÁ.N4‚v]ü‹”¡ð'zÄ»9y“ÄÞ ú¶ƒæe§ZN§õ×z¾¤œF€ÀµÒ^SZÔq¯³ð /ZëÅ2yÎß«jIrŸD’¶&Úi\5ÐÇ„{àÅS˜ÅSÁÁ(ÿÛdäÑ(ÎË;ŽÓø¿Éøã»ø7^`Žˆg©ì0H©R‹8×ê}^sª%”D€°k¡˜?²‘êôØkôØMMk–Ìà›š”óÔ=‡{`ÝÑ¡FîìöF Þ—Öàì‰ôõôÀXû---UŸøëÒÚÐí•R¸ÍÖ‘1·ÍÄ®yYÛýù^¾zõŠ×_´Ñûjr鬪LÉì^G Ÿàô7’•E)¾s ù¯"NFÀ¤ÜÑFPë-¡»qlâÔ;Z»ˆöž­;0]1{oÏ“h\¸0ù]àâr„Ï+Ú^è… ZËÑUˆU“Õ|¯ËůI­9œ×ï¶_9L¿){«ûÔ3LpŸEk)‹ð-û%ç.‹=7%jwùò‰GlF|Ó‡hæH}÷Zh“’¹ ï,«#'øµÇ§¦Ú´2·ÉCq“ò¥ÊèHâÝ{d(7©?Q=ÝrGSK2—‰ Ía»üÝï€Ñ+)rs±ÙWkÅ$ZЭrMÒüО”% ½±f–w~Š­BœTË‘5 %:€þU M!µWÛïZ­C15÷HтŀkwÊï¤JÁN°˜+TÉ´>"Ò7¨ÍË|‹ëää›ñíWƒÅ-EJJŠÊy~AæÁþ½A1óË—žñ÷‘&Ñ8÷I tD`WÉü‰ èŒ@+EÊgEˆC%L8ŠBsG-gç'Ö^Lþ©‘Ws]ºb8UY[ì%Úk6²-Æû5i#Ö—â@€HøøI0Ó !-ã"ц4 >ƒo®EÑÊ=ýYÑÿü5×c&Vò\«3°Šì Ñˆ!$ˉygN)îx{{%íìpt+,ÒÓÓ깞!r{åÓÑ R©î]Ý Óˆzk-#´ðëª?S×rkÅÆ/¯æ¨±hÄ)›o­™cb.ÕIœš2ˆ å“ÌÈüè9`°8´ì(ôÒ)K†ßäÖÿ¾sdm\j5e¬’_Í^·šüUC¬v2-šu›Í–÷xšø@<ú"GFùr„ém%[«išü“9¼§W­jgÇv?5/ïÈÛ¤ÀÔITÓÒ"¹½ÃGZ Ù§¼Ô39Ët-Ä÷S߉F¯‹ëLñÀu¥¦9ùÓÇÎè¯äŒÂaECÒÚ¾ÝÉ#í¾ã£Aè`e0ñÊj qµôˆBÏž£ÅFh „3ÛÎÿŠs¿DÖ2HbPß¡“øÓf×<ìŒ6ë|’NÁñ¢L°þt›ï"÷P²bÒvŒ)Üm…ˆÏ…pî;²÷'Ç7¥°ýcdÇ´I®Bò¦‰»¼,–„ xª> …ˆR‹T¢ÙøääW…'ÏÍ v?Pí0ÖåÛѧÿ,ÁWýƒÓà||B#3ô(ÍÓ¬­|œ5™ö;ú•_p‹“#Ý’õtoq~´”s9ˆg=LñܳöŒJP öK~e÷¿Höc’,c Ù¼ùj-<þYÁõ$a@ÏFF;‘˜$„™ è/y€®à¬Ì=-õõ Áø_ô¦œ‘ù"ºÃJ×h—ìG¥NpjôŠä b°Í+íĨØäç„k]øÙˆO¿´«íôÿ©@~~=ÑRƒHеÇp @·âOî—Še¶ª|*²ŠFT†xN±¶£ÿ²®åŒíÔ™´d$Ðæ±¸ûԨ¿Pèߨ!À÷—ÀÄ1ËT¼dýCï¨ÄK„ý[dœ"Z‡ØýÎRHùW¹ßÝø :3SvÇг°`‚¬›êmg6FKß:µÜSæã¤¦6ÚØ! \ç‚LO÷³îD«×qþdÜg„çþ¼Gyø¸üTç M€aLç ÿŒWÓ*UšP:8Í™šÈúKáÙ2¬n\ÅœÔï4ùcþËœ¿kiGS½9§f´Æ½†=÷o¸5RÚqty¹Ûö]þQd‹«*vªzùJ#’7Ôè³×ˆQ Rál.½Ù~%<¥%†ÙÑÛ›ͳËrKÀ›ßCŸ&Uj€×èÿ:¯SqGcûƒ¾ÿëq®ËTó–ëþ—ôùÑ}⸿ŒÒUFíw;EÂwQYBÙÁwR=Ü2mÇ,Yï…&)Nƺ+ ²ÜîBR ÄVhçMs¥½cßÁŠÐè¿J/…ƒWrþÅ?^ýD€ŒOŽ·­8´8²FÔ%êåÓ2[¯Oœ˜x z–{IÚ¶år¢÷^Œm˨òO+:žÆ·0Z¹G9]¾Cr{(§JƉ¬<³ÊW³ë{?A.cư™Jnnn)É´@ZølÉãìrëç~¼—5Ì  €)ð˜®Ñõ'-s zžh–£=*‡PRþË•ßÀ…v©˜± Màû¶ SžÛjnäìŒ;ÜÜgÝ?¿[ #U ÆaýÓþ@ŒÐêGúÒu+Œ’‰o¤ŒŽ´äúœ®#ƒÖ* ç•:"ùÊ Mx‘&WA‰Šf÷ŒA2ú†£áX*¦7ž©œš÷ß¾,¼3hð΄l<¢V è?3¡l»—¹ˆÈIús AË٠y(_Ï÷ŠcUšwçÅç¸øÝ^Á†&-/§Ä]äžÎk'{> ¬¿KÆBA¢íÿñ"€ØÔ Íx})(ÿf±h¥£v&$¾xU˜xá!š_\ÂÚŸ!ì~è#Û1B…ð[ã· C¿¶FI0éŒZü4ÐÖú&Fd1¢ho¹èü[.0k3@’²ìéØ^ZÁK6<Ó }zyøÐsê-51š63`Œ ¹x€Épmˆ‡} 9ň[zî¸Dïõó@ûþ:qb»€uÜ'Ô¡+¨Âd+.ÁJiÌáÕì†M÷øôr>Åê 3á;ðÍî^h'xf{Ñò\™Â/ç7 )b%þF£äv ²-Μ3Ö3øI* ù3Â7aX&†—ã>ÃÝî€ûpÑż×ÜÁÐVx/¾~礎yòåô^DVB}p;i #ïéÿ…iDj´PAZNnàöçP<„"2)(öz‚Ù̆[ý@Jr({Æ{Í ßÚ1íüŠEíÁ”ÜúUËÀqüÔèõ½R$©w¹¨ £blì„I¯PÐÜŤ‘˜]Ù~†ðЋ!ZŽSîýê-à ié¡?UP£í'…¨ýöcuì/Hå&T]’ @BBðkß«²™y†ŠKUE¯Wf5ñçQ:ç/ç¶q92Ø ¼dõoîÏ7Ý£°„ ”è!’(¸ÿrü*õ "&Œ6Ó“f[ð#gSHѽC¢µœwÅòde~"Èw¦Ýg‰|”žYg6¼Àˆ ú.BV—t£uHÖ.Ü[ІÖz-I¯ä¿]WÁ‚ÒÆˆlZà SÎ"$#³añps?¢/ûüønnqü têðúæe*$µ#–S{pùP ÓÛ”§ðÕô1f7|º%§B€ô´’¿¨H©Y”;eг埛Ž}Þ@š€Å_½»“ˆmöôò8ðWeÊe4µ|È'uY¹“O³ôêùþ.l'àuN š$茞£!øˆg}g »ö qtœY=XAÈF_éÊÓ+ÙE6ÚØëD(1F7yæ•B«oðe~&¦)x’ž6HoíO+Êz¬¶è§š—A®×í*à ˜³€Æs|Ýèä=‹¨óï'Ïðò¬è[kÝRÞbP7"‘›á£hÛ6šýR7é_Ž/ðã[.„¿f‰Õ;STJ)çø^/¿¸ÕŽuéè•ÊN‹º¿øqчX†Íöi¢…k€:SZ©'>G•ÿå…bð‰-æšÜO-¦ %ÅùàÚ÷ŠüPúÏ2Où]ed*¡8ú ´@·EC…I/ÕóÔô±ìS#`YAÎþ·@ûsv6t"lk.Ð'_Uyã¬ïI‡Mt&ï€ wŒk!úOí‹vîË -÷G“ uúHÀBväq²½›v•Èm¾`jáïFçdR_¯ ê]ÌX¾»(²ö7Åå1رïܿҢ}…Àkž¹‚k¦3E ŸîQRZ7 öþ$9Rˆ„@¼ñ‡F¡5OöÕìaÒŒ]/]‹˜©Ç™ŸMuJ,‘ûTXëQnâ4T•ž{ø¾÷§kÎòÜþpW Û_›6ôGöË<|d¯-Öç-¼·ºŸU¥ƒJ™èìs63­:S©Éñå6d#¯&¤SªúWâv?oƒ4é–óýûsòœ%›Ú€d2ñÓ­Ÿ"¼³‚ÌîQz^ûÌ@½ñ4´Y€íˆ0t„yÊÅ# l \™J{fT÷°ãLûMõÓ¬SêgO:¡ |\³WŸ—Õ¡¥±:Áé‚fÈ`çO‘àÕMáQ;Ôê@–꜊¼ r˜XF •„Ÿ«±”Ÿñr~xÅzÕŒÁÆ`ùшÿ6ïNzòùÜ»»ÞWÅ{èªäåF×n¡¿$P V á1€õ9^\.Ã'$µWRxÌÁÉ5!+"­¼×…G__b%/ 4æ‹ Þ³#+ù[fÒbXŽþ@-œé4M¦ÀW¹–»²ÚG¥Pv:QIeÊOã\w¬ã\·]4Ó¬RG×¾H»âñ¤·3¿¾гóûÁʳô³AQ Ï Wp<£Î½Þø=Œ•É2I*]¶ŠKTãTvÐE&4 °ÐFcj¼ÅÚöUöL;24}ÞžqE!.'ÿòn­ðí`Å\&Ö-}ÒÙŽþg¢èUŠ”ânK‚exUÈhtC…ÂçrÛpwþÕs—§ÐÕ·j´»>ò¦)#Œíö+ï‘ÑP_ýûò¹î‡¬;Ž×o=o^Š׫…ºHÄ)¿?ËW9)’€ä0H &Ш&üI´×y24³Ðžw5ïN¦˜™s—‚ ¡gàŒ¦—@µRYçZxT{‹È¬€’ã¶)[7Zœ¬jH)áÖ?¤$ýûƒ"‹ˆ–ÊNËÃC€ÒîSØ‘a »b˜Ø¡ƒâÑ„Zs J"DÝÐ0f¡ÞÝäh±~&&šZ,¼=wíx¥ýû½|tv]Ýl[õ\TCƒè‚V¿íÈwiÔtÕ0AÊ:j” Ò‘.ÂXœžS/º–{Òlù'|OÅÀÞÚhNÕprßM Ø& ƒœãO7šËŒW¬O{º •üw@ó­ØpO-¢~߆RÄuuѹ‚'?Ow³dat©%n#Âê\-‘§ó\á™ßíÓþt)â’ÿ“ØãÝÒÓêÝQ³üû÷D— ‡;~455Í®©!=˜«–¿»<{è²;Žž!ì*5U¤ú¨õrT.óˆæücœYåVë©•ï†F÷v²Ôö€Í9ʡۘÕV§/rÚ–`³}Ÿ1ÖÆã ¤ýA€ÅÑr²Öý· 2ò%õË X ‡5²Ë‡<<ªUòmù—û¾%‚é.FW‡ ×çc*'Z†ûÙ¦ë\YœsÛ¶Î>‚}˜®´Ö’ɤEÛž.¥¯s?ж[¨ûn=U? 'ì²md9b@™Ø[ „œÃOc–œ¹ˆMd¡tÂÕê%¿öT>ë¿/›éH½û‘Ý.»lkÿsÇ㕚àÎNN]dÙ*YâÛsÕCB[”¦{(è©ußâ–=GÞíe²ä%~n¿ZàˆÕ‰3ã53A¢'†1bßý8|ìN}†„v¤Ãº×žÿ9ûN‚é§Å ‹‚›þ½…úêÍMMâßV¾"+|-q\“+Ô­Ä033»¾Ý+N«{ƒÞ½âí}u(x5ï,˜íº7IþY¥›$V{Hý™Ëp{ž ™mê'á;˜¾rs¨rp€'>.ý‘| P€Å¨ftA`kÝ1&[Cäk†ïÞµyÑâe!,ƒÉH®ðõxÆ"k¥ñj±•Ææ{wÉçš”š¥…±}¨2ÇÄã°v‹ AYâÁ‹J˜T²`Ò¯8Ò! ä"µyÂ>âe状œ¢Å~’ùÚTŸ%DÈë“û7]ÊPZ'­ŠˆD/@Ž™½‰(à ™@Nê73[_²‰Ãd)•‘šïO1 ü\Nº(òÿü±Ú=d`+c]K³ojXòùÌ”åóìï‡ê.P­sÙLs&$$ÉýœÌCþ1ñŸvIAã‰ÿ9^í)£â™µÉn«ØoFqÇKøc`kÓÔ2HÎñ/x ÙÃÌ–š0øQSD(Ùû‡*,Lv3³_æ˜zÑ|8Ô¢¡ÿþ½Ý==¢ïíykO½ã¨,É÷ìì––žHª³”3î%ÐußÌŸñEíßæ¶áˆæG£aÚ’EºÏOöÆA!P èxñ‹rÞoOkÍ®LäH¶v¹yÔfÌê~ùðäú) \§¦¯5eà}¶5Ü=,ñ”>b-B ýø<6 ·ÂªÓO€¢‡J‹R¨ÍJ·5¼-]™ ‡2´Ô¤Ûx½'.àËÑ6(CÓ÷,Ïägyꊪ6#õ»î;^ œ%ðË ¸> 0úÎNBBBß]Ô;I - ¸/š:a‡e‡Ô—òÑ”­åÃâȘÄËÓ¥&ŽõÑí—C,—Œt?á‘_N‹¥ô#Eµö¬||-Eú³SÃ,GK¾¨”bäK{ˆ°¥#y²¾¾¾ØŒŒ(µ¹•o8dŸÁ fæW°83PF~~yì>Çê/hŒHÇ1¥H×®Lœ”OUTdpSÇ2û¤ÿ$g‹¹ùT{‚Û† „Œ :­£ez dIH°?«4ùdŠ}›:òÇ55ë¼çNìB©sU7`õ»EŸ®{ïi;ó£Áíi•ñº:Aê ˱\ìo“aEuã¢Mß²%Ú˜Ékî{]èȼiÓÛEaU¦¼ "ŒØ~Zƒ´Ñ?ô,C^¢¹ H>°@ˆÃ?¢â©HŒø-s4¥Ð³r77$ö€”êIDÔY¸ó"§N)Ë¡ðªÏ=TÔŒS0C>=ÿBIªÙïîT§È§àÓw ý“ŠË…TªÈ.ÝÙhT4ÏÇ ý§s‹¾¡!t3!J›Ù …xxQÎÆþÒ!÷‡aÂÐj€åŸôýIÝ)<¥Î[CrÕŒáÐf¿–/$ôò¯Š\ä¿ÂŠ›Q^½‚õ)nÏ[¹¥¦Öj:4º¾ŠAY²tØ~ëÒŸ+ø^·2„ÿHAÍÖ¡øÿßñ+ÃÇѲÉBι¿˜vwWÃZ®OZ*§,ÒñÛqrÉÀœÛ§õxò¥M¼c¬Õc$ãA©^ðvÝÏï¿]ÚÝ–Àçç½à{`Ͳì`ÀocL¤6ž Ö¡`+ÿ)wÞRÖó¸˜nðt·M÷å?öBÕsR¸Ï9‹‚BOÐ.OÃßïÃú7Ú®OÖÏrè‘€ÆZ'_.<Å(·sûî nþ‡RÝQK‰+Ž7D@  †§›Ex "ÇaŠò8¨œâ´ÉÎl¦Hô’GQ¹K<^: &õø?¼ #ð83š„ißÒ“D³I-5ù:Ž) ¬äeùý[Ç Äó),‚þ"ðL¸!Ê¿wðmLq[eœöÀ¿˜Frócæ¢3d¸ÃþA½ÖtŒŠ /•xJ1/Âx&•.¶êyã;ü†?+K dÚeH‚G ‚®ed«N“^ºƒÿÛ ÐüúÕ²ØØ‚É ¢ÊM[~¸~ðkx¸œ|º?s¼ZpGÕr ¢Ðˆ,GæÊ6ÙÖù¥ý+´„¯¡`¶Ž¥𝒔ó&ßúS‚EàÖ~û§à‡*IôEÿ'ß9×7Š0Ž&U¬§#š!G©õ Hü ˆõ$3$¨zþÇOÙˆá­ö³a‰q(†Åï8®}šÐ>[0£àmlK so'|Ì…ØhUÌ#4g£MTÿ;Z½è…™#UÖøåèwÞ«œ§N˸þ¡ê[‚uénäÇáZËI<ÑMsäcŒ' u·ÒUuu1Ã=î¼RñÛ”¿LÙ\€°¡DŒ R³>¡(Zl<††–Öš½ÿ|yÔ¸ s{Þ•„Ó6u5SÙÊ:ÀÐOîÀÚ: ecz9šFkr{kã¥ó›. Ì›†ijŽÐÙEaÆô5c9Åæ¾ô=ç—ûÑ¢ÇõJÈhÔì­*Çk΄âÃ1ÉÁ•=Bcò;øiØí,J^K¼jO$#¦N8½s}úÇp½Sµ{q„˪½ß™õöõײ‹ÃD¶>s‘z7ˆ÷%ðþ}Kqó+Ü‹OX33М¾EäÎNèÝ%ôê°¯¬‹]Ÿ°5ëü¨¸Áï’̃ª _¾Þ¯.ÿ4ö‹‚ ^Ÿvõü5 vÀ©Ü䩤ä„íŒã•1]þ“»½`n8Êám5jóÂyÄsøæ"‘£†±É¥ïsآǀÃÞß(Lñ¢%¿›âzÏò²…Ã˃¾Ð¦—õß,η¿×¬ b©.v2$S.Tbz\\î$!*–çM÷9íMqg«æˆ¬uj 2iÅlá¾LIIIu>„p/a…Ohý… )ÈûúŠåªdEkúNh6Ž© ø7~B¼¿ÜW»üÇÁ‚¨Y¨:ÓûÖŽÝaH¨%öyß^ayª¦àÑË|m‹ºÊKuZ7|$ÈZWTûþLy\Vn‹0ŒÁ¯¶ÊÄãÑAi™ÅHëÖ~OÅ’ïÕ ¥Ô *·é?î•- ž}z?nn­{J*4ÂÌØQWšö~ }€¤¶…î†!rgùXürn·§ñëföÀò^z>=\9îý­^9qÏÔü•óCéðÏHX–Ÿ°cÜÝ_ÝJ)GG®ÙŠOˆ1ÝŸ YMÍ̓£©pP£i$p@úNM%çååÍ®ª"¾»:êÎó†:ç¡G¼>ËúæyëvðÌ©¯ùåmÆŸýçFIaL«ßC¨1ØHlµåÒ±´MÑDénh¢5¢B3¡àŠÐ¼#ä¼i´ØàYµ›áõêør.jNacb¢oÈ5FlòÚõ†äÃÑyÜtÏÍ”íÅFøixøÆP_¯05È*€™~¹?óÙÐÿ®€«ì—¢A™k?Òøæí–GåÒìÂMºŸ ¢ã¤f€ß=þp¡Þd<_ùåKIPS‘‹ý‰!)”BÀ®cw¢ ÔçÆ ®cªäêYÁÄK–0ô<~G§Ó¨†9SÞí•Úï†óo¶—š›?é8el#oYé”±¿Á‹•Ëp-ü¡l’oë1ÂÇT@"§Õ€¥£îùZç“i“É2®·{#=63݆üDj¯×3b±ºlæC"&÷×'ð=B#•ÖSÓ®œû‹$]söÍQØü¼ŠX‘yêτؖaÏ’J\~_+ç8o´®÷Æóí°®)µqßÞzmyIúT”ŒÔ7±ö§¾¾Ò¹!¬#@1ÿ—n«ƒ`ê‚Ѹg4v1îJæ ïo~_ èŠÕ”héÿÚ—§ÁöôôLæýô Že`¸º«œ•Àîœös˜´"O×»ÛkØV|Êa¥º_£1™B4Õ™é6êÂò´‹'™ßV·Û ¶à¶£€\\8ó¸é{9£]çòò òP\¡~é6Å꘱§§¢(,ø'OãKú|\€3È–ßfÕ’°Ý~/™Ý¤M ”ÓJEÿw)Š£i{06© íd‘¾umtû÷š{‰Û×)<Ñ$i,ÃYÕå†þõnÇ ¾XëçhîøBb@Ú<ô‹ôáö¢½Îu¯¬œïKf‘—EÚøÝCj‚”}ñÈ[ÃZ¹I…Çãê*+  ]ˆÆr2UŽ^¿ {ØIz…ÖSæ%6iDÅ0oKˆâ0‘›êt5xž9ô2&’6qˆ¡?©{jøö­¯Œ· ?¾s®so6’Bü:„tÙk–|.&´<Ž[QÙŽ µ> yÌ^´ñ&¾T‡=Ý£Z޶éÞäeza€B±ð…ÒpeñV´™;‹$ÌTgöΈ0´Ç8jå)\(ÔùxYRÏmÆ,YÌ›!¶áÅÈØ2ù·/”3³Ð;’ò· ©Éu1¢d q]íJâÁäÈH¬·iüØsÕöÝÙ’ŸY'N¼Ð ò¿b²“…Ýê*M¿ÍfÄl¾9ŽwHùmq™ÃSg¬%ÿ.ŒmÞÿ—éÙæ ©° 3(:Mj£i™c’£ªûiT#ŸBñû&›4kNº(JmçøûƒYn.´–ÓìY‰Ä6ÔU55ƒýϲ)s7!f§ýQ?ņ„1™9ª«$$iñZ~*Ä+S'GÝï¸ÏZ–ÿ¸ÒYDLŒËË#¬9©Æ…³0V¬HÀ-Û£9¶†ªëÑëln •¦R‘IÝŸþææ/ 鹿jHd‹Ò¨Ÿxùß›µi¡p"ØV–‡(ï µKåoûƽ®4fOÖú{œ·º =óÆÂH }ðýoú ßö'~ƒ ‹‘”¿ù`¾­jV-Å–úøouúUÈ9ÿãÇdèj@'DtÓî©«Ì“϶sU{bŸ_·ãÚN¤qËžÐ¹ï“æEs :É 3óÜÙîO(¾y—Ò2ÉDß I2Ä™w¾@ó¿þÌM}Ò„úƒyDðvÆ$=cÝ˪9ØQSÄΛc;vËøïÍ JAØÎXÞÞæòA©Ü¹¹7$öB( ~y\7Gó=·\$i@–ßm¯SFƒèò‚û7ý)½"A·èÖ(„÷ï»Ì”…wà'fffÂv4ÊN½56ÓìƒéU„„bâµdenw ïö˱û'&¦ôrX ÞòÆHر½¾Xp_êìûÆ‚UÑHóÐÅny†¢)ð}•®•>—I`ee×ßkUsvå„…N“:-$†1Š'WÞ)tm: šþD6é„jŸ¤õ3V3k/uÍH^|#PAÊôy&xPQc ΂Iãs v?´Ñ¶kGYžÐZ›%zƒzNéÂæm)›fðy5—Œ ššß!ð<>Ø//·:xiO5#äÈ3ý¤°­h…ë#ÛÊÍ!üç=ÃZ2°ñÿ”*H^:›= Ì©†Ú±ü×…¨¤JT¸0“Ì Þ<*O¥Ù7…µ~F]ŸSyõ5>§Ò{ƒ¨3šùMÒ«<~ãÕŽ0R;=cá›ñ)Äx&Dÿ[‚Û4þ×R„ì‡M"ßõwgÊ™r•Ò̵7·²šß—(>=¶°U''¥nòòh wâº,‰¹vÂó6ÇД ˆeÓÉ2¡‚Exp0ʼë”~²°ë«ÝÝ]Ö)‘—åx•Á²\©Äÿûöš·jjø™ 9ípažÉ/ÔØ¼5ôBtaæ~j8ƒ}Á$Xdà{˜G@éÔÎýtŸ÷Œ`„p ÓöpTØï^ðñ¢ØŸìp¡˜z eÉæ@¼:¾]›.À ~½a+®Ä=ìc{ðŠ'‹õZQ­œŽõR£78q`r4ó²Ÿu¨ÐJHHpQ)ûˆ/_Î}«|ÈòÇyýÎ4Ån!!tPFÞÅQ8¿+~³z‰ðà¡©DEÂÖàpééQ¾U“Ë u€æQú‡EGT"Æ?3Á.ôã¹|§‚=1‡A$ØôŒÓ…ÙKÄ.Cá$‰°™Ï¦^çÛojñ%¹o¶ú¨c$Šš+ KO3¤ŒïäF ´8ô\FeƒÍRéHU71´5´´¬‘x­×í×gµF1)yŸy©cÝ_¥c“éæ1S{Tîó{ÅÍÔš4ñ¨Ëî͈üvüaoP¢©Ô3ì:>ãŠ[z’½ï[»Bôª/Ë;$1Ü.αžPLàÒ‰Nb6δ½>oQ‘@vÛmÂLíÙáó!HËÀÙ¯YÂÅîüµ÷RxÓÇÁ§³Ñf×Ô^HH{îŸ?þ ˆ=ùªÔ¼Ë˜Ä,Ñ¡tpÊäyg»v³"î{kÔŠ¶§ª^æÊÂi+ËÈUß›·“mÕw×o«3—«¶[x‹ÈK¦¨jAêrd×”¶7…V¯Ìil×{Mr~Cœ‚Š»°bG›|A~áýÈ®€ˆj ò|➇hKùð+õNOOÇ}=Âd²/½ñLL¹ôJa /­iå£5ˆ‡ rT_ ¢"Ĉ%ÆͬÌZó Ø+B憔ÙâæÇºCËt"4Ë«ãêÝC¦~^Š#ÍÈe÷ˆ±ý㻸‚ x“îh¢©Rú7Û·™èÎää Dh^¢Ô‘T"üŽTVMOÔ¤¼hÇ’ËS†ƒýW»¿˜k\ÈpÉyÑ檧Ÿn,Œ¶†ÜBÈãš}ÊÆ733ô»¯9|'qš!ŽR±÷¨c€HëD\!LÆ”ËW§ ý;A1×|3·¤K™Úa0kfX@Ð!”Õsì$ 6ã·{«já™Æ÷ÉÒ òà}vª‰]«cDƒ Ç'åòÞƒF®¬kÖ)Gáo¯ŒŠ…ÚeÆæX…¢ŸÅov˜Œzð–ïþFÝBÌÒ–<Ï`ê*QöKäa3î“ãË_ß ÐÄ—x]X·#ž^riD Å$ˆÐªA8+Ï !÷ÐÇ,÷±w|¼ä ¶\2 SUNKL00Æ6ï‚¯Ý…í¼¦óCr ˜ÃNîL°›.yîbCŒKÛÏÍ`ì¢KšLæ#¾ ×_éæG‹5׫'`ƒ–~z¤bä×»,f7¯Œ»“³²bÔ•…3šrY岸¤Oí΀½Iûw‚©¹ùj$ÏÐÈàÓ.Ë¥Ÿ\XǾ#:ü$óâò"¦ÜÜ㟑Ö;‰&¸Gþ0Ylz¯eu iÆ<‚š-ê凫o!Ù?ʰîO#üüŠ ÿ™»0Hœ Ó”8ýzsLsH[²äòÒpF,±7Di7jθ—|Δ¶µí™ “^]‹˜—¥þc®O!»§4"n¬(é?jHµËåmïë´Ñ¿%¥?Žß…*g“mj½gÌ¥ñª°/nˆœ.5A]Kâ‰9úûF"Àųnпñ„á‹ß¦ ¥3ˆÚ1'kÝsn7¸¹27W{$ÝCaôò‘gsU¶iÉÑq4~×÷ä¶œ>´0Ç›AóÓëy<*‘WÞ ÕvTKÊ]ò£ÃíQ$×X‘~ÔYóÓ£÷B”/°fé×H 4¾DŠƒ¯-€æÛª €wXSŽ‚°»CÄDûSÛ圮ý€/3 uワºchºÁþž¬ÅH 84Ñî8TRK‰l'_gD• 4ÃßäY _»óâ$ûº+]˜B¿²ëGž]-Ñ8 ~ÌQÊM‰šü[sW‹WO†ùD3Vín1Å)â0¥ƒj<×1K‘ÝŸ¼‘íð}úËÍËq èkÝ1݉lèN››iÔ)È9Þ³ìŸyбÔ/ô™Ço|ÄV‹ý¸ºQR¶!Ùði¬K0«ò4x£N+¦W ö9§ywmÓ®æ§_à9žBœ¢9œUÌEOÝüCÅÕu2ìèµ+ÁRÖ½:SãË9í!£$¸[[ô¦8HRaBóÑ sƒñT¬‚q|ÄtN0ù°|q+Ÿ* –˜Ía"ð0²ú^ãP‘ÏÚ`ó><Ç£òPò·QˆœþX¥¸_Ãnζr** Ч*öÝï®Ö2SÉÏí'0Dœœlý–¼Xn8WB`òÜ¢³Ë­_ØÓÑ>æzéæµNWæûDïwS¤LçªçCBa` á§z®–ü›ÿªùKœ²º–o¥ä‘ùž1v7v?±‹ã© cfÆxØüä§ŽøúÝÒì›TMÆ‘éO}ÓkDE¡ðM!¹9åN ?YIÒ§Mž@1¼¤úèm‹ ¿ƒ¸s4GÞ±Ÿ­Úèæt£j÷â³á&÷æë/Ž5µŽÁLJý{§…K©¬š.)Šê…Õ×äã¿}ûZ¸Æ<ˆX¯ï(ó½sk¿w;xÆÏÆ’WùkkøðöÉ¿àëÔº ]oŠuâ3» ;™Ÿyß]äÿþ­ gAò&(ní›&5£©DVëättÈÂÇ:®[ä>‹eÎU!;9L“Q]îÚ¥vøñD6ÅãÕãñ|µéJë¤ á¿º/qO@k1zsQѲýò‹_óÒ$blêWøfù°x¹Þâ[ŽÿÓ£6X4¹*YÔÝ™Œ™†~7O3õG×äÃW¸ËYG«Ø@»Ö‰qª†Ë6–M‡PnlßðÝÑÔÎŽ]üéÞ9¾S=‘^>zLYs²Á}Ægèäü6¡ÛÛ–…zµÏ0>p,«öýpxzô͘z›ióÃÈE»ê­÷†‚±3„ÖŸ‚"âp¡~Íõ–N^ÞhC‘Ã~ƒíPö¬åÖ¯@ó¯Ô”*û¼Ÿ?N×{Í.™ŽÏÎÚ*Ä;Üžª°›ÄM™Ý=§ÅeÆÔùb²·Ñõ&ÅY4òó3Àø¬¬l2Ÿ51\îïÛ´®YMDÀNšu½Ï³ ÒÁGŽ þÒô;Ù,ñæÛk4 Œ60è'ýÍ-M?2VTõô"KMºwmXãC¿OmÙh¸¨}É Ï5CÁF¸q©E¡O¥ ¸*rDD˜TÊrüd$hh4±’ßfOðBTtÌü|}|8}®(%ü(ê\y>‰&®©Ht‚UîbÀãÂ<ò3, áÝKtíê¡.¼µïHÙ $ÞïÔYÖf½ê\v~\)Ê^^¶üûuá]^ynìÀ¿ØÛ/LÙÌ”Éó˜ ãâʯ¾‘P¯´žêÚ(À'#CßÂhÈ-÷{ð©ºÅ‡ñåFâ!/a­ë“½ˆmØöƒž˜­ù ŠŒÄ¬Ú0EÏÕÞZZ?·T|Zí4ï›ñC÷…x¡a³Á¸v•í\0øtqŽýõ••¸ÄHáÙË‹É/¶ÝÏn)Ä¿Øiò½aü€Â“´jlÔ…–ÊË‚£þCAA¡A<^p_B·;F(‰RÞÒ‘ûëlÍoxMþ2•F• [9Ý迾^‹‰KMÅÀR{> Öc~>s¶ÔKž:¯‹W·WG1mmRS•¶˜÷[/0#¾&ÎvT*Sêÿäçr0û­ ² ƒêøáªe(cŸ€õe³Yÿt/ –>1qðB½;ÅEeyYYfÒÍÅñ1¦Ž×DZH9[ò‹M¢Ø ›"GFTÉ©ÿo/€©©évÃÐ Ùõ…VK:_,1+pNø‚A3ü ¦Xü|4é°øëË'µ9Çîâw_|Û’¹>¸½èZYê"o³dd%%…ø=Ü~yMÎSÿ›â—LJ»µÕΈü÷ÄÄìz¡55‚ïÌCÀÊý¡_ïöDÎ~”î,±Æ ŒÅ©DLíbL¨]€—£ ¤Ôû\º&ïÞûÒT¬“eyÔ>~{‘êzõaŠˆ˜Øxºäã|oßéäû•ñßêhØØ ÒžtQØ'Ü ÙJÓÕ¹±[J x¥\MïíN´üThãðô £ÁåóAí¿4­wï“)&®ÆÑ¬®(~“ÁŠ^n¼š.õ ~ȃµu\MÛ XKÛØ°Âßc}ÝÔcO$ZbÉK—%¾w—D§Â¬‘l!)ý1eiͱ¢Mº|·7•š @¬“ZÁÄõJ §ÇñòEcpy€h><)!¦i²"õÀöù ˜yÔ³•í"î5k lL×»s°ë×…iT¢s˜\–#´A!!ÒŒÙÞÊg›-‰l›:WZ¯f‚Û¯ {ý§9u«Ê5Ï'ß`%&&ÇÑ˯‚ EtÞ¥ùÃZ‹c©4'´5Î?N1›vyðEßÿr_ •^XX÷ØZäW0k/.ø8çœÖ{ðy?ýCâââ ,*ÖŠ MÉamkô††à´YPSRÂVÚ—’CI£Apˆ•x¼Fó:_W‚-[ïŽèç·Ú)Wáìf>1ïuIèæ««KŽ‚MzðmÛwÒq))aW‹Þ¸T"n„¢ÿ ɶñ–8œ̦K?7>ž¬µU—›È¿}9\Ovò(‰‡s‚+ìÖ©¤…ë­Až£¸mâ¥Ó­ŠýD441ÙÙ´¬ ÉÖŸ-d IHBÀÂ7L>VÚãî/ ÷ ¦½“„pº¾* {~>­7d÷8ñ'Œ‚Ÿ†)±Îü¸?]z½[Pœ­ñ 9Æz‰ZЛ8¿å×"[´DFîô€{x` ãî¨9†˜M7ùoZ6£ˆß½ ˆTM¾wNŒÝ^¥ëÓ úË}¯ðž!°²ûDfP¥]«I7ԄŠTë°‚ßÈÈÀÄ„IMW’±uw ùÆAJÉú¶«ùéó ZÐ-h7ðÀšu¢ ·«È–Œðúü.òÃv®J°E½x}ˤgrw6޶l´Ü†¼bÈ^©|ÉÄàƒ„AÇÊŠuu¸@ Ú5GHÌažEº‘*šr¡Ÿÿî‹ý<(G*­µ‚‚ƒéøù«Úذ)E=ð>£âÊåÈE•¸îiµñPSïwÙïfÅìÛ3OŽ3 h] jiÝ{Læ|žÆ‹GSHHÈcïo5|‹è÷šíãb6˜zÞ´Ž¹1•nµ9OûM½ý’øùÞn¥ÕDÛýÍY\b¢ù=À&óñãs::º‘Ÿ .‡ód o)û€Ú^Dá„?‰-†Ëèƒãâ|Ö |¿1†U8N]ª"¨b|ûjÊnÐj·P÷qk(Coí… J4µ™=yGÆ$†e§åÁç;µ¾wümííj•Vï#©ÅȽ(´AzÈAõ’ Àïº8Ûv–ˆÉ â´&vX ú”7ÊGÎ?6’‹}¼•ÕÖ­ð š§Ü2]jƒÒB>zWkçäŒj´ójU@ICƒPüñÚ¤HÑÁÎÎF,ÅÂB¨T”›Œa¬YbŽÊ®Ç ¹¡AÔf¾ŸBÀ¬TTeC>¶ï”,©®ð¡Sý­!èuÎ ê•Û9þ":-3tô4’’rªÙy*3ã¾>¢K‚îîF#´{i§Å¡GS’è€'»€ h€Ÿk­–³„¡á?%«~êòÑ>‡L7y<ù¶ŒÜ-B¶ÄnA~ULtt4|¯#»ÒªˆôEV›±ãŽî¶/…Rzž‡a777ÓÕö4—s¨€ƒ««ìë×hä|VArQäÏ™™Ñ°Éyñ|¡¿5VÁÀ€Z³í¬8žI…Üõ(°QŒÓ ƒÓ9w'b#_£EËbè?èÇ‘ ‡ŒðW7Œ„¢”„YÙ碢zªñ_Ÿ±³·„Ò¢•Úµle•«”žmB$H§™¶gffàÐyy¸pw´î$d5ñç (è99ñÞÿÑüöê=àïï/(""ý]µeb‚È©–’šš:ö5CÏÀ@â¯60– ÄedDUTðþüùst~mí!¸' û\cWãvjéM°îTÕþx6<Èã›™Ú÷Õ)z¬˜~Œiý<¨þ%6— ÒS½év—¥P·2ÜZ¯Ñ«eò/ô3 ²ë×j#§¯ðñAuKqs¢½\6«â¯g $íœ(Њºë cùAC3þÛ$“ôküÌ`–{m®£ »:fà4Š0²ª$¨°0ż/×›nbÈÚ£9G›W1°L™©Eú%°)REèÎÐÑŒØþ>ÝF0ÊlÖÜ”¥Šy/Ü êÕÝh½åElé%vKyñâ…ñíùŽ^Z:%åã¾2ZKbÀ ó%﫲¯eõn¥·§Uo_˜P±1©˜§m ÔÆœêWa¹¯"-ÕÀþ£6Eí'©îcVðµ_«©ÅIª?ºî–è?F‘‡’–Z=Cß;ùK›Ô­Œ+#x_²²›ÑC‚?ßi²~êÁ3šæì×fYªŠb4Î<‰ÂDÿø¤Iì|NÆ÷ÅÔÀs?Zìíˆãɪl‘#½|Ù'iŒöØðîÞ°†,7·ví\‡Œ¦ÕõŽº³|w÷ÑöH€Ò_\òq¾ózË î3_q™˜4—¾»Ù:®ÒM†<ƒaÀOx5^Ŧ¤¼ôˆSÐ_œC:ô¹¨˜~êÉÚL–ý’ùdFC2²Í¨b^yùlžl}7Ê"iÔþÍN_¡zuE^®U‹G›/µ;ÕŒÚA‘¹9œ“åwfýðW—äÞ²_ ÷bäÉaWÙ‰{rß9+b8lbÕÿÖoðó? 7 Ï”‚@lè­n Åý>£Øðä0’¼Š 5ªDTÞ“¢ƒÌV!×¹pù>§3¾a†”¨r¼ À‹êËÓš{ÇLJ3qÆú^ìœ /ml@®K×—[—šgŽŽ–,bÌÌJWù‡3K ß¼¨ÔÓŸI­ª™û¹µÒÊ_¤Y4`°öMkºøýŸ’¥cL+‘XF«2°r(ÓüütÞãî„,zÄ4 ØÄÊå´Â·‚ƒN÷°´;ºT…|“Y_14ž €G­8³–¾ ü¡¯ eF ¤ÄõññaæIEªâ{µ‡XaiZ‚ ]@[Kg:åòÓ#.ŽùÁGôç¹ZÿZ‹Õ™šÒšßvuE’~œM“PéýÈ¥³vW)¤â½/"HkR++0lÆ+Q?¬óÝÎTN"LxßõÜv;&•$ÿšSÛ/òîü¸r^¸.Iy< ”† “*B.e³”)V¸(÷îÙRM6m•d‰"‘ãê«7Ô%ÖCw âIIà¼Y pyP½Èíwà.…–­QæÔ$æ}úí¬²ü.O9ॠ§¨Z¡^o´Û³=Yt(2CÜq5ó„¥öUsë;=TÅÝ¿­„Îþk7á–ñïá DÍbbƒîÖövésâáÎ@ú ýŽ—†¼Ïç|EúòSŽ ÛÛ<ãšdÒl‚Gƪ®(1d x{½ž¢©lº¤BAýŸª`×P§c#ÙkZ¸:“ð28ƒ :Æâ‹ºf¡Q9bÞ †ö·ÁÄ›Wt³så/ÄQJvüÕ{‡Ì…xNÞ¡b‘Â@ñ­Q ©ÔÐòº¤ÔVOoĵ®R•ó†r09R‚”3`{S²è1xiÎäiUO'òMŽßXí›mo/ûý:Ÿ$úEŸ#©ÿ¤—)Ëh¦ÌÌÁÅ…P@ð;ί )wEŽH5aÇÝÞ]Ú4™¼ ÒàÅLJF·Üœù¬IIÁÐ ´ý‘Õ…Q´«£´•ƒƒ(¥4þ• ÷E|NcBP(oééëäÄáÓOy®o•+½mmmù­¾Ú!ZÙ7„"c^n[[ÛÖ-$Rî(æ]f&¢®ö* C$ FpEÖÎ4 šÏmÅ*Š|dð3à”D w-ƒig1bþÔ–cÁíOFñ †Ò?ê£Ø­S\íØô5›+9®þ{Áÿ÷êLJÌ‹wumM­ÖÉì^NxÿqŽä¸‹Â& Àýõõ¯=¿U‡6Á;üo g¶cÁÅï25ú.'"©ú%´ ÜÊ.ü¾3ùb 7ÝŠÀ§~Ýrç¿½Ž L…ì¨Õù˜Ê²0é4 ß:mãY¿msV¾¹´Ôw8·4Z‘z” ij¾8ù&“àÙuWm}¹IÕû‚ðg‰šäØ"á5þÍÇY'0ŸyLå+O¾’}Ö®;‚ŒöEO`%‹¦Tjl|ö¦ÊýöðñáQcòˆÍ8Øj¼™*èþj«¾t‰ð÷ÃŒMÆHšæßØ„„ óÁÔ0 J|"°8ýý5= åqaÕ3FV»ÝØ_¨™è:Ró5öÞZ2Ʊ֦?¼Å¦@I¾×Ó%/Øíò9ß…oôññéÀŒLFbƒà±¿{)Ò®WÏÏ‚ÒñST<“Šâþô ‚Ïð)HùÂ}íÏò5ˆ.O®H˜Øõ‹ -¾¡abéíïG—©á^ ÌîóË•1„]ý˜¤<ÁïÖD2¿uêf¸m·cã›Ì$H 6ÿL/þmÿHŽ]°]íY~œæ±;OAaí*àï%1šΰ Æ0¥Œ>¿ ×sf jB"2 q© ížèúË£áÜ_ʪ-a¨XˆŠ,Å÷>n”ŽG+Œ õná`:}Ï|þ¾-T6 –éÍC!ôõÀxSMk kØ ']ð¹²OéÜBý~þbŒÄéE–éF9ß3îj1cùû j…„× Éü¶ä ¶Gu_¤±1&²Ä¸Rg+gp6QaKþ[Þ& .è–s‰¶Ü÷‡"cYþ/dòÿ~Pˆ×n¥¤~þ|_»ð%Ëí·8¶÷hl»»á$ ‰¦^E‘7ͬ`IÙ¯µîr¿ Ñq«Kô_b“N xo¾f çÞ‡àlÔ߈•Îp©'!?~Z©÷­fQ\l,Tà ö   ÿóþi‡°ç.÷jòá|1àT&ámÅé†{¤ŒÑµù«”n¥uijDåÚÚBTÌ%Ðç?a‰OIß?9L ^'¡7(Ìÿh¬Ð4»²ì½)1þ2*M/SŠævÖì¢pLÒSWFœªùòåþÖæÕÇ©~Ó²-6Ÿ ˜ ¼Yt?#‹æx3­ ï¨h+‹?~¤œÉá(Sðÿ]âÀ[Ít‹yAZ•kAþ\u¦³ñZAç`¢+üº·+_zz^Ãwo= “™_•ýŽK’is»UɰÒv/ÿÉíçëf µô~'…uqwË…j.Õ»N'øWZ­vüŠx×Ë{RqŒÑÊÜ‘&_oÇÏôÄað™6jêB¡‘Øç…SB1 ¢š<´‚¤‚Þšéׯ;5AÓYÛæ¶ž‘c`Ñ ’ö“–•icffE´~F…­óØø¦Ö‡6¯0Êë’ˆÙ ¾ k*õ¿oÖð=†4.Ó*†þ ô¼OVZ`b<‰:;6ÚðÁžÙ2Ær?B˜«‚ µi1ÂEr9®Ê¨­Ñ%Æ€?#(\æ É‘+P£Vdü€ƒ†aÌöýeŒï¶ábšÿíMß’žÀÅ´²ÿwPöúÛ,5eØ="Œ@Âøä·i]¹úžJ ½¹ÝÑÈÿÆ:Ãb¦Ù}¤s=ÂõaöIÏ Ú[pÉ÷4ÏŸ~I–yñ‹ÇÀÈøÝólÛBðQtÓ3¥7?@‡µ¤ì‹a5K$ú\&´ùAØ isà#²sÐé…ÙR\Ò§±ïì´üy_È  ¦±è¬||};ÁQÁç•Aݺ“–Ö¡‚PãÒ”UN‹ûj{kJU„E›«?vGŸDYÏ'/ܺÒ4:~Î8ò¿×ž¾¸¼¼Ô®qxÞôpùazfD´Rá ô’„lô)¤Yo»w§,ÔÓEëK!´â™ï%Ò$²uÆFÍßýÈ®¯MÃýpp G‹6‰½”¼ä“bÎKâ+bü¯´Š"ACýÃq­‹hÓ7b±ø„ÛRmÛfšI©oÝå…0Õîè–Jko û+­÷ÏÑ@Lr2»l4-Jóÿø¼Ä Ós‰]¿ŽVHˆ, {gLéüY^Òž‰*à/ù!¦ò™P4†‡GRS—>ûc~ÁüŒ ¨¨€ì´µ£n´¡¸¢ÀZyÌ( jÍÖ‰oß̨¸›«¼üÄ綉(±Ò…•}:¸A­g’ Òú¦ H“ï7·—µVÿ1V->ÿ.ÙÓ×Ó+1îÄHåÃ|ç`ÝnCÎV¢ÐŒ¾N³HHWÎ?%r.6ô ÉaOFý›xŸ^s®V c‹™ÉîWÜxI®ùW÷Ë즥ÈëBâ_a»‚‚%¾µnÄo¯N¢Þ¿š!wÈ‘c £­Êû™n?Wå#ðôÇϤ+ùh3+­?‘ÅÃîñãǯ߾ý™&±"‡‹úº|4n “yKùúÏ{“´ra×Õ¬ÜFç"2akB–R•¬²õ㇫›KŸšúò 22È=ë ÍY-´”·Á:åæ+I†~˜JøˆªF9?…q0¬yml§Ø«Ú§SgfJâ§íl >T—-,àãËáF%O î§ûI!,Õx]€•ã|Ù!äO­]Ÿx ƒ×66F°7UœGÜôS®À¿"dÄL´ôÆ·¨H@´ŠS™™ñoîí›zûÊ_ú˜¨«Ï¼(-áÔ¤ŠÖ&ùžqº=‰ýZ_\™Ýb‰£=¸´‰p”—º$\\PÇÒ.IIÉ׊ŠRÝÑTØÑÓ¢ŠÀ«šBV·.Aîg==œî¼ôßÊN ÕsK¢ôžèœ|¿9»QlvVëO³=Ÿ’qЧK@cä-? 3Db$ám=ujkN%è@kll¬Ú©·ªô©E®Wˆ¤Ó~Hd3ÙÚô\|Í—ÇT@eÔ“W7¯G+Ji¹D]ãÔy]Š¿6SK`9›à;|j9Oš,Jv|FÀÄþüpÑlïAêæÜÌÌJóÓG"«‚¼³’^š48d³””‘\€‡&jD„ÎïQ³~Ø\ugø[½ÎNûöÉ¿û÷Íߣ©L*WÛÛÿúgý}ÉŠ´èC5ñæ øÐ"5)ohÔšþ îܯÄMR{Ï4þh §ñÛ¶Õ8®u`Gj&ÓÌÅÄlx# `ÁëÓ'u½·X†'„Îýý&ïÇ”3y‡Î@±¿#fƒ0Ež¥ÿô±›t«Íå…<ûPQÊè%%W;scÞ¡ïO·Nµ  ’öööZ.ÔUÖ€Ž vŠ÷óùø@6ì Ø„,Û~ð{-qyY£ã¥µjl4öbEÿŸhó0Ð/ˆc3lï·˜ÚddJ~eH<.SƒH`í›~¥¾ù÷C¡ôÂt©M3ÂMÈ»^áëÆGáãí¸cG77h–ø&Xâ$ì€õ$šý••l ~ø׊UÜù›”LãK2Ëy³PïUì˜% ²%¡eèKw &­ÚïwŒESÍîGY³YY=id1wÝÉ¿(Øä¤÷  ‡š¨³€O)¨¤ƒö±}1Rb›Öúq&Áû †C¥*‘YÑÔ´ï\ç ™^/—Šcƈۋ=z.®80îRè0êɆß2¯ŒÜW(/'¼õÿßâÛd΀½±ÅN77áW?È>¿ûÝxä]lÐØw1ÏÎÎn {J̯¼r UKæ9Ÿ®µQz£¼Ë÷–¨‚©…¯©$†àñ¿|ZœïX^®óþ-(*îàj9_·òG>0ùàg‹rgJËÁxQ fÝÐà ¶¡ß #hÐG·ýQ‚úzŒ(~ÑÑÏö °:ï!ÙŸÆr7¼ ÖÏ+x5-sõEŒv5–'´n²DÄ©-§c<¶nέ00¦»z$?©¤ Â>#¾IGÁ2{Ú<Ÿ2ôÉÓ_w]ñ—_o’ÞaÇÁÀ)¶:/ÄÌ®‡wßEÎ'ecú9‚HBBR”l7oô )†’ë%ßö,+-ô?lN÷öàPŽßÖ1Ò¼jh˜ž}„A€#ooós'‹¥ôºBŸ+´ŠË‚E%{ЉªF‹)Y„åœ7±Jì2ŽÍU§kés•3^Ù% 2üow¾.[aElxÍž´6(°Ä›ïUÃÿ ­_ÚV²ã`‹‹‰ÁeÄÝ\[Sß\*˜à¸’Œ}==~>þúp{_켎–†“%6wíÍÀ*+ƒTÕgˆ`„Þ~}ËËtDÿ¥ â~Zyl;žÿìÙ³‘*Û ú™=e¨¸´Dº„°Æ€­‰ûûû õ뉋N1¦¦åc`ï ®­Q-­ W‡.ngED¬Ú45Ó‹Š@çŠõ"T‘± ’^?¸#Vªêè,Õ8úç³êxÅžöÝë:}ñ“˜5›¸©ã\1î{ˆW09“cV(º¼|÷V%¢Gž„³ÓôÛ–:×Û´|Ë‚‰øoß:/Rg×·¶r^÷§74 KâàìíQØéy/¾k–§)çȵdŠù˜°I‚lXe{3Ë“ärLÁƒ²<ÿÎØ%õ©ò8*Ï —‹–€6 ŧ‡ƒ }R6á!¹œÙµØG‭Õx~À`š€ÉèÙãËËMrï+öã³a›XUÆã,ÿ¯o¯lm˜m‡AHÑ€7ñ§Tå,CøDÅl©¶c‹ªO¸_ç3“ l±qfS.ó‹šÚæo3(˜ϧ£ÿ~˜¹ÊÁþóüùsP‚óöíûTüûËú{Ný؉›89Äú³­Ú!JA]^ªÏð —ÚÆáF/?]Ö2˜öä§7—w‰%ºú’%¯ÓŒ {›ŠêÆî›Û~¿'·j-·?%(µ©ŽññïM”vZ š /¹âìõ½XVç…éÂ+x'ûWûˆVLä¢È¿°}¨²\àU ýòJïÑ|À8lÇAáãsÊ(^LÕ¶…*8TÙ-ô-\3ˆQM—LàxœHtFù’sô×:oõá³9Kö?¢ãâ¶gÇðýÝýÜìs½¾vòái÷¦ê»¡ê_RúÞýkµŸæ|¤O0®qüqkCr‘ë4`¼¦Ë-páåoaaQT ƒP~NJA®ï’|싸™±¶ÜúÙL\3SÊîÝË=]3Œ–K|àÎE¿˜šÓ¿éxÍÒ¸î"Þh9¬»;äý¹õ„bÃtÐ+£­O+½\Á ð½=ÇÙ[X¦=çþèwÒ!ÚIPü„qø~8÷ÞÅ@Ú—a¾ï¼aK“6ækkX²‘Êø½/÷%‹ »ò×wwzùë±ÉÚ–šÅ9pÑpQg«Q+ ß%w eØôeåQ²«§œW㲆_©.°Ük($±ëÇÆÆÂê\÷Â)(Ÿ¿Éûݶ$ÛÍuâ6ùg itCDm:ÜNÞßîçÔ >?/ Ê¶­ÓÌ5Ziû‚b{ÝÛ××6[i])n7ð„þsÅYŒ˜_:®-gÜ4¦ŽÐñºŽbv®üYKâH+®Ñ“f!³·¿‚Ž¢îu‘~ý¤eå ´R¤D$¿ù/ÁsNx££{R8%·üËM\*Œ±±±;Q9}o]Š*5¢‚©xƪžÃApï³/ħ]fŠÎ]Aø§X3Šè7× 7uJ>ŒåÆbB¸‡È¦…ö‡QÓoÊ=ð¿+Æ‘6¢Û&!d0°e70M{º¤wptlíûÆÂå¼ùö5óò'Ÿ1’%’Q8@™¸?Š2}$âûØÐúÙU<ä¡7>6-ßL_á„Ä»µögoËûdµSÐë<yK·Ö‰ñk||¥øâdS« „\%¥`¹Ž§¦‘_˜õ½ä¿±ÚšÎ6 É@§!w$1 S𫯴_ùPn®ÔÑÕµz1eWìAðNø_uG¤ „”y¹îܾÎ ­"SMƒ“ú‹(˜$ìAyø-¯àpC»Þm\Çukss5;IÒÔôç¤uzÆ Š(×KÂÂÁãë›Jܨ`¥OSݳäoÜøçŠ9í( ]¥,,ø >¢oø@4G,@?!† f©¤”‚ÕÄF£ d2¬äw†º1Ÿ®^Šø·SB¶KvÉA^¥n-ùj9} Óò¿Þ}<˜­„O?bá» T &j@ˆƒïkç2éÚ¾_ÇØ>”åXç÷±´ÌÙ—›Â®øÔßMëzg‰ûtŸö9]²Ž4‰÷®MhéÜ':-½UøØ×Ò•Ûkš,äü~É™àÉá?†Ž¾äÚËݘÿOÆB‚‚׿º+¿…VB”Ò¤rÿú¤Ë&8oe_žî÷ !¡î‰¶«³& ¯¬èâûBÀ¤ d×gÃQ—éŒ{5RžÞå9Þ›‚‡×\xÖÚÝ2¸¸UòFÿšVeɱ?l=]›4a¿{9òñnU¿ ¯?…gÿúçˆI¸üpïlµ=‡‘ oø»ú·*ßn¡ãõîöu[-R~a\=GKS~g¨Ù>|ùOÕ´§'’™^Ê"n¤|âu+Û2ż9½/mr|É×H ‰Í3Ó$€ëÛ2¾sqßie/êáÌõðë.ì&ÿþÁü´… 3ÓšëEö|G~Ç›ÍßSLüß§8^ ÷ _Œ!EÚçO¬ï‹Eí—¡S"Ó/ÿð0V"‚:ú[)¾Éíl³P:CH5Ú}‘ˆ¦m¥} © AŠI¹$Ê/=„Iµš=íT`¿÷´§Ï˜ÍçÂæ‹go¶äg<**%6…/Ò ~¨m+ኌÀ˜·TΚM+Ñew4cÕéÝÊWðA糞¤åäT=Ÿ*Pñ½­&µƒËaìóûnü³3AØæ NÁ"ɧǩÖbiÔÉÿ¯³¯Œ‹"ú÷ºa é. •n¤CiiéîÞ–I) ¥»Aº¤»‘–îgöï›ûæy>÷ÙW»;3gfÎùý¾1{~g#”ØT8Aõ|yxRwüUÜO€”K#Ç(³‚T,)—Vžûwëð»ÃE—Èì^†¿&K ÷›ÈˆY_Ã^çqmýù‰‚aðËÝÓ¨Y`˜8€ÞsªäÝ‹¬Czþ¤Åîe¨ÉÕ˜¬F8S(þÚs/Œ6"«áòõHi5ΫÛ[„á÷>ìÁ‹‚àX9¹l}¨ ež´ÙµF*Ö`S7”ÇÒjš<_}Î29<ŽúýçÏ·­A0a‚ÇæËœ†cÊAÒ9·‰î‹?@üÖ‘Dº•£]ù&ðM€G…ìwqí4÷œœúÔ1©7- jeD­À‹„CiüÄ‚Bfžº·ŽŒà]c6q¾¥ÿsrRPo,nÝ_ÿóIµ†N¾²~¯’«ëJŸ_ÊóxÐ V÷ÿ"èDkè‘(HÚ9„G.ž¶¨Çu½õømÚØü)‰~ÝVVI½ñh…É™É>b®@ÐÃ=WnO{?a™~Ï4–ý#¥üþ#±OËÃc†aÌ]à½{ŒÇ»ºáÑrÙ§IÊ/@ G-⎂Ž÷rGÄ•è6Ë7LVÈØhÇ7{ûÕ0½7žÈÈ3òÑÝ>2 õS·¡µÇ5uu½ˆ:9ŸÓ- é‡p×rxØ&Ç :Ë/ak“ì-haƒC ÿÿDÊÕ ö‚z©jfú€HWOwù²AnÒlE­xÔ-V‹[²¡·Õ‘ð€Œ¹Î2ÜL""”2a¸B-Æej¥JÂ@˜ž£KQT''úv¾úM>º,V¢²¾øz ¼ÏŸ?ƒœr}‚6¶}çcº«éÉqé`Š•;’…±¶šÂzqvÖý™E%Óé¢:/KÍÌ÷ìh¤9pãcŽáÛR¸l¯hþM’jÇ¡ûæë_‡³ÒS“È”Õó1L\¬ ÞýÙrI·_k#ã××׈åf"Âxµ9¡à?æ||Ѭ-ntíS¶$û®¯£ŽÓ¡ @èèFÆC `Èäçíî:ÏV+móƒ¡IÕœËY¦F—Çõo›ÁÙFÝpº8膄i?NkÅ»]†’ñ¥›r5ºw€™[JSne'o¾z³t5Xƒ—„Vl4 `ˆÍoÚ€àöÔEœÆPÀ!X¶WA-Ú0fßÕSd§k}Çší§¯uó~J}©ÒrGˆFƒ“vš!7!aÜr£Ni}÷ÊÊ ¢˜Ü|$SÜzº”fzæÎ*Êò@_ª7ðuUU7 aÐG®}ߨT^+3PÔ9W'JtÃõØçPL£Á„pZ(<ýÜŒ„’ýðaGg2‹ö`mDM2”·WßÇfü‘ÿ ‡Í³‹ÏÊñâ"ÇŒÕÖׂÏä>ÅM—щ=ܚ̵n'nm´?œÙÌdIÜßi·¶²ÙÏ“¢9Ìeg»Yú Ü‹„Å)2#3JËÈœtHš.6z¨ãˆjVíS ÂŒ[‘xKv^@™e~Çë0ãø—~uûˆä#® o€dÏïh{KVÐU4ñj½SýªþLÚ®)xøë ;Öîr N&Þê‡Xº*ÛºÀˆö8ˆ6¥$mŒ’RÜ›GXS“(ˆ2!%ußJ3±ò?X”£ËÄÇKY~WDr­„SÀÎÜuÇS¶·$]7íg+Càä ìÔ•¸\vÕ¢aóä9îwœ¨¿-­ppµÜ'õɼBe¹š`çh§‰Q •TùbXöo…„„Äù¢W:‡¤ó¥Íòsƒðp—°x§¥jää䋆CŠXÑ©œX ÂHžå;«üv´ú»JlTÝN‚hé æ ”xJªO“_EãE½ŸO2>yŸÿ½ÓîÆý è ÅùÖ&áÚ@ ªÄìˆAÒ'ŸkÅÒ»MKÿQññö]y   DUM«ª:¢ œYóñ¤¦·F{ ›ÿúâ/ê¥1ñ]ñq#ïî#³T¿'É%P“TÚåâÙÝÍEè´Ý+ŽjÞ¨øëÛÛõí,è¯4~;õT·„Í\…­Ó X§´®|jA¨¨ZÁ¤4ªL…¨øµÕºƒKØÓà&;j³áºOmÝ¡ÜÒ*j§ø‹õXoç‹g™Å&±ûJ ê†1'Ʋ%a§[C˜;3„¥?uS RÖÖlˆBN0sÜÞ¨Ùñ{¶W~Ø«õò·}¢ñc¯í7ÑGTD¥ã¯hª†&A"é+ dS¹Œµ5w ãÑ ¦IÒ¿Š\œ¥^õÆx_ÌZy'fD%.Cn.—™¬6IøíûŒL ùl<ÄZºVß3É õŽN¨)øû‹¥ : ó < B-6âlrðIuE_¹ñð=YÇ;û a7zžíKtYò¥*Ƙ߿EèFx×  Ú}4/Qd€YN®¼É÷I$Y¶þÅSU©ÀG‰ËÓ¹Åf¬¬±Üøå\Œ—–#aÏGgrötÊŒÅAàA¨ D]äøÄZl‹™^+µõ"åÎäÇŸ7/µÂ?àÈûÝœë fñÔØMsC8¤Ã½]yløz±IŸîmS=}›àš¶*e(²\4“Õ yôQœ–V<2\!vmv0•-ð€ÿpÛíµ²´Ôt©³QEç³á*¶ˆyÜL 1pøºãÍ ª­ÊíCék=l¸RÆ´¢7}n§Gs5œ 'îl©EP€ÉB}æó33¶Öt¼›ë¿ùÄB-5Xe÷‡ÎKKCÃñÕÝUxh‹¶i_¢˜˜Øs§%1ûÅÆ¤ÛïÉ™øö3ížV($^X´ wp]ŸdEæ//?`ë–ã v™|˜=WŠáë÷ R,ÿ¦ö(½áu£p{Ápº›ãâºFiçuÎágV€öò¥l¤zBÚþWe^XUïô •àŒ}ûGâ_%4ôS¸í¡8íiüÅWñZZÚˆˆˆöÁT^†8m7\[ýl 7õޝ¬ mnVhŒ`'¾›ø¾ºš#³ïŽ2¢ ö•tg©ÔnêK>¶èΓÆTR¸ Íq°ayÌE7(ëÝæû@MÍѧҥκÀû›ˆØXâÉôðy,Øõ Q ¥÷9S½8é¡spÂÔäþ‚ÝO¤«'µl¶3qvÅ|¼Ä´ .ðêƒäž=.ûç‡N…ç~ˆ-†˜ŸçDoOïùæûA ؾýÊ´ÉõÔííù^øÎ޵v‰¾Î½t„5¨‘/ÚKOO:uK^“|ôy‚ŽÁÄ/AKqºõê`³‡êa’ýê|+¶ÁÍ£VƒT ‘óáìZߥX°h ÆÊ‡}TR’Ë>£gt«ªB%ìÊÌÈÄTÊàFà<˜PÓÙ\7ÿ¦X¬å2”æÝü'“ÛýÉ6^ÿáÇ>z1=ÏS ¢ FX˜ä§í4Ùº(OÕZ E¥– ®'µüèÝѺAAÔ"m UáòǪF\Q©å‰&»6-íwœ_‘›¡¡««A(}´’´+õñȰõÖ̹'‡8dÒšÚÌšð¹†ÆF³‹ýÙˆOŸdXßÔÿJžÄˆ²X¼q¿¾÷Ò Ö‹@Ô)€,Òâw¹1FŒ€&MËæŸÌÌ5¸º¶‚‚ƒ™Ñ óu¹…¯PJ+>7‹Õóè£>·¬P£(¶*jØNg¿Béîî6=\hp^»ñYGwÞ‰;´ƒÓ&€ßðš™›k¤T= 3tW‚°Ê,²åð'&†5ªÛ“„ß!RÁÅ¥ïj çÛú€ut¹¬°Iʵr¾^üº 'J1_3ŠZ˜QA"5Ì+se­5Þé5”Æïìåųœ@(=Ch¾ømÑ—ù‰€€ZꆴPrœ',ìü12x9ŽÓ~™õCŸƒþ-}@ûw~ÞƒÈÇE‘¾i7·.ÄàÒÒª"º—ð,Á~×}ñKaõ‡†"ÿ€øZkBÍÜoêÚe™¯FÚ tŽœo;ú ÚøøaÓ½t].Šð‹>®pÕ¯" à0µÞ–Z‡zý, ©¯r?˜ÓIÜ~ ÿ‚Á$«* Ó?i4ÿ´£3SÉBÛÓËBZáân í;}JC§°‘«“Â…bŠfÉ+©3‹öޤÇë(b–ˆ¯Tç ·g»!4¢žÙ “0–ޏF¤ä¤È\òĸ©×^2Vn…‹«på²7 ­ìáhÎÂr¾RUåJ³• zš`¸×ïL¤xÄzR3åïQ@ºCwr:rOyÍ*ãí-„Hò0D‹Ø!!‡Îg…‹„´—– Ê¢±1\FÙFØA/zúx‹ê¾‡ž©h\¬ÒV‡äO©Cžµ‰w` >=+!ñ™™1?ß–µžÕKç´?ÍòyŒcW¥X—¥,Q“¥Y:½‰'z"i ‡`ìù/x¬ËWÕ”—Dð¹ ÿkôèJÈW9¹¤ƒÒ{t¡[ÄÒ$eeuŒ°ÿÉ÷Z½,~1::2B ywŒŠ¡û;­Ö¶6ÉZûÙ`,bÖˆipÈ€œ¨¿òl…y¯Ê©lG¾Àê“ô{/›ñâgÚXXc ºâ®Ìã·&Äòrr%a÷»Ϊ¯á¥Fqùß)Ïø@£¶²;ž¯îãC!ÜÝØÜ|sŽ0k'L¹î\QZª-gÛ Õ˜?BãC1E›ttìÃÙð‰¶Ó&!!ãþÂÆ¨ÉZD Š­€ û»€;!0»âÄ©µ3þQƒc =ZR7l}¦™ KH ^òÝãj¼&Ö “¥’Uur±GµH6ÿr)DÖd@ÐŒR“[¿Vö&CØÛy 5“û]0H­¨)yíÐ>ˆÐÁ,“Y<.2ŠöÌ4½}|ŠÛüž^‡í{§#oH •Í­Â$Ž­çò—žÕç0óH8µáÕ™ KKÛ‡ä7›à€Z²¯Š@&¯¦#â0¿ÒjŸú‘‘±[¿¦3÷ ù.«=Lo¤Ámõ~Lu—K ³HDQFII‹ÖûÚ¥=1Òg07÷j,FưQ6ÅtIº]“@¬èvs/n c^ôq«Ù˜ˆ¦ˆ^¨Ê½ŸøÞÈ3n­¾ÛE°ZÐd̈þ›V”´(]àÕæçŽo8ñÓIçìŽL† 9¨¨Õȸ‚õÕt µF +”„ïÓê#^}òœ[ªy)éYçÔå´¡ø54“A¼«¸J}þ¼‘¯?Û ¾Ê£”H†OgÃ{>(^ÝÝÅ5úðºÞ^Uq±Rn ©§Æî˜Jœr|ßžXV>â¼¼ñÒ8µT1_1]4% ‡TÑeÙ÷2LÅ"/"(þ[©JQ|¼:VátY½+¨ŸÊhj[÷a2Ôˆ†xúõ µx'Z¾|3šÏ)GïªVxmˆ,øBíã#í¦,)±…©%ñï0Ô¾P0tÏQnîF@vWT×r}‰l ¥‰¹½øHNñBÛ¥DY[ÊÏt{FÏ{ø«]p!&ÃÈzTÚäÔQá?²YO«“Ï&<=8}ã.“–ÎiæÞ éñø»âbÁ<‰ü¨Kâ\­´IÀú‚2ï=F çð•âYÍö§SÇæMÓ6Ø=e†X±G­ësçe -»ð#AÅ@T Ã×þê\ÅRÕ=…ýZ¢%¨s"[ð‰ƒÐóü1X?Ûà¹÷i‡!¹ø! 3/‹HRZB@Î(Õ9~~}{L'Am\e%“–Àdƒ¿Eµ¢Q 6%Æ×i%lœU^ʯ¸ôpkD‰“:Ï!à "æ“Àá¨-'aÙnPCé¸7•ãšÂíœ3Lš_îã&ö®‘„2õõ¶‡çåaÎx@e„'Á°¥×W`g<­íëO8QX9üþ¡&I\潇Kâ„LÌbÿ=ånÈLvZ†mŽŒë—ìƒ#À> eåá#aWRê;ZHµËXwjc(÷óò8ų  `”S𶈥è²ô8;ÎŒíG#–~ [qs=dòÏÏx/îIUÕà^¥ÈÈ•ZÛ'^;@,]`¶l;²Å`Zh'ëwc¦¡þo¹Að8hjö·ÏŠqâþBšžÒ¯ŠðoÝ\W*,°~T;à”ÍV½÷ÚŽQ|EÀçéé]éΑ2·Ñ¡`f°FFBÌðØ Wu~®%sõ}Ö:þ7Î|}mŸk:]Š˜õ¡Úä%£iøL3O–êÃf¿÷Í¢W#fx‚6È` )˜¢ÜB>/i÷—¢ïT¿^õÚñ9‹¹¢¶:µE¿•–^¹Ÿµr HSOS7NáîÛ]6Ùæ›œ¨ÄcØVúÜúèÄßì•yWÚSh?< ‹‡ó1¡”R À·™ˆ(XyuÕYY5ŒYr¹oìóøK‰kÙíL|%—^‡|ïeáÄcÃI ¢¾ƒYb‚‹C¹)8–ïHÚ£ß ·Am»×? m‡)Ü@§V¬i<ªìzïøÆ©R:ED•½Ñ ŸtU˜³F†ANs/Ý Ÿ™±ñ¤ ¦p„ÛéäâÛ‡i¼ý/i2¼^Ú¾¢ˆ6ŒYKã×Ðn“ˆ¤ä3m›ú‰QÓÔ4fœËøYÒÆA#bm¨q}µòpÔ–.Ä!ý:×}忨,c¤2×û”¸Èâ«?oøçsÂ(–Ì2‘).ÿn>…-Iݰ Ävœ$ô¤‡¶R#*9½oõª4 ˆ^ӯɮ¨ã¹´ÓEíïOÒÐ.£%IáI¹®ßÿM¬øï4ÇÅÏÅì ,€0 36…'„Ûâù…á¯q$$ä÷±´¯v© è¶y>¼$y[ó­ÑÑPäÞÅFuttÊûs‡ —ÏÕí€(B3æÌxÀŸ7”uì\︈=MÅ@Ö$[®ŒÖdPjFÒ b¢ÌÇš¹Å¯,h{•yÙ$~ôdŒ%÷ÑŠß§òÎñÄ)fÇOÑIc²ÝR¶ªiðAÁexW‘èÅ‚NAi`ù!õº%+µj&¼ëwÂã]þë°5Û?êˆ+¤”lòdûaðÖ›˜Ù._·ëí§7·ðηqj ’Ó;XóTÇyþyš$px6=3*‚{»ÂWë½x2.ŽÕî}’°¼uxá ô”¹Ö?MvM#R^æyp¦;T%pa5Ün7L=cÒ\x9w'àðBÈÐM©Ž,%Ÿ«N¦²ONŽ¢ÖÏ÷ÐÆŒ‹ÃPЩ¶ØÖÖƒú©ëü@½ýbòC»¼É+–åwâ¼M«§“¶¶:m.…–îïºeT—[ûƺ u@©ŽÙõ±\N‰±ä޼½›³S¼Ý îj%’æ@¥’¤*sçm ¥·Õ÷Ã÷&ºŸGá ÑŠ¢#BôlÞ)NÜ×âlz´o“ _>pº´Ïi™VŽßvgQŠí÷Hø3qšÊ§jô}°Åƒù‘!0w‘寖4›Vgïé*ńʫ^‹éYä¢$rDʵÆòGî­BñÿÌBùs¶vã¡›µ2Ê ”!ᨠ'Ê'Šéí:¹rlÌáä”]œ^ª‰õN>¬+žßÓ³B„„b¢@fs“en"mmþ(·æ¼–v~äßÉW[yJq›'ÝX FFÙÞ°Pä}õòsg§«Ú<•ôú|µ+^Ø…1ñá ýŒ¢% ±€U‘:ŸªjßÞ8šQ#ýÁ^Ù*(à ‰ˆV2âèÿ>u7×jjb²Û×é][@w6bF™Äa«0¥0µ™+lxíGT«I†ª¼Æ5dbʹ:Us ÿ®ãrþ·V‚z–IAú`ÍìГA”ëÒí#¢©Â‹]ÖWœoøæ¯¡;}Ç%>/kuQa†2?/ šÈà8ȼ“½,æ ,ÇØó³åpHª­ƒÎÔ$‚î:P„ŽæÐRfôظ^¾Ãµ}ûvÃã0jÌÁå &c&89 ßÉ.6¤H%~Êè¶&;³Øˆ¶½Ø´Z •³v»÷ç§þ b¹W¯Ø¬ÿ`_—èçà·à·vÒ¹d’ÐÆûJmåW#µHqZé§O*¸Ï¦óðž ·“£Ö"š9¿½*YƒFN7Æ]|î(FZážš¾X6"¯‚Rª÷­<Ç)eÚ¸Œ0û o.†gþQÔE¡Ðg©ÜÞ¿3"_NQ—âU±?Rv¡;Ó®:Œý߉÷ÂéI/æñ¥TýlÛóv-ðÂ=±á_gšqÞô ­X.]T <Öþ•í_£‹[7\f§cºV«Ÿ ø› •Ïx»VÙÃîöÚ8dxºÊX Ae-âIR•±Zwe±¹â¦"/ÌmSÜŒqÝ2]?¼’\oy´òzlòlÿ¢{¡#Üæ)¿7ënìáE‡yBwN؃ª+ïÇ‚6»å)Ÿ»“"¨AnwRšEá¹#â ¿Á!Ám!RÓr8ÑV»Ò'’$QÓkPSÓj}/zLN4þí¹ 9ž,ᆪ® ~"ÅæÀèÃãèÎϺw¾f_ß~ý}Ô|XW÷ìô~÷wÞdAJe'úiA–~)þ×9g‘}N‚/¿|ó§¤Ä ÓÐæ{ô¢k)Œ¨ÒÂv@ð%: @‰Ã”RÊ=+ðÆ$£`›Ì™çy‹$=!À ‰Ðv<úà;%=Ü2GÑÞa°Ìü6ÓœºxA7@xj¥²³\¢Y»3w”_µ®!Òd)kÿ©[ÖðÕüV–ÿãl†û¢NN®úÑ9×^z»‚n }½¯ò p•LߌNäE‰õ_S #Mµ®Ieh¬±_jÊ늡iFÕCrø‡6)~³Nð“Ô®€0)ði=*²YM„F‹–zn¤kK‹ç± ¶æ·½[P,þƒ_Þ-ä0ó‘iÍá+"ø_k€eðpTÓ•™ZzzÄ™™™ž¾¾@ÖþXô¯ ­GW`›Hkñë?Fð¥úŸ@6r -Ú݃ßÓƒõT‘>§õ$+Í€žƒ & @Xlæ ¦+[t„ÂÚ?E£:‰|G]toÙ.WŠEðb¾X"ÃËqñºþˆh!í5³/«…Ϩ¸«Ç+íùÅÅÊø=e÷&´x5¾Ë-GcúSB›_qJ‹Äî;¬ ¯È›ÞOàó²!’ú7:yÉ!®;Òâ¡56pXY[«©«†ÒâíâîÉVí\zŒüyÏ’>]ÅF‰#ÏsÉ$’1Ô¹7Uü”ÝÐÐÀ3úÞkáéd™MHn‰’!‹¬uY(“³ókt) FVøªª¥r{ë¥D%Æ›ñíKCƒ¨Ç¼! INI‰*½U(¿œ§h¦-ø¼f‹ÃùZ»JÝÓ{ù øHËŠƒÍGÓŽüs^ˆØQQµ‡ñ{ GŒÇŽ_3Meeå÷—HuJ§‚±ß¾}x»¾¾¾œ ®,éç'^ð”H;°?–7¼‰MÁõ.-§¾ÐQ0ýEà“Ú».@Ìûr|]€——¡B‚R¹Œ¶Ÿ[F ‹ª<ˆÜÝ̦ïûýú+¡°æÂ•©0Ùr^f¼:ÂWéDÆnÚþg 3sò‰IcÙ©k ­'É+J kô¾úQU•XMÜ펦ºkŽ£—§FZâŠïpÀBÚKe*Æ>j.œê¥Ušr¤çMFèÕqôs_IÅS¸PCiÂÎX‹lß»KË©"*0ÞAùøHûÙª‹?TÛ±N;>Ë ð̬ʖ?ó2‹4"³ÍÉ÷ç.±‘ ˆÃÇ­"-äXi @<¾{Àßè€1({ˆnÏ×–›ëÂð¿(çý‘x¼þüE‹ø3B Þ2ïK°üÓóCea…£ç–…·Óñ ‚Ç´åED\`lt«í¢†2DÚ×N‚Ä È’ÓÒîÌÌÌ6ˆF®Pž·|zö_KŒóu¼ŽUòÛX«ð-Út2E$÷ô†)`PLF¤œ÷Ôb£ ²n©nÕ²V#4Ôiö{ðG³²ˆ—y…à¡T/$w®ï¿ß¯¢ÒÑÔ¤PëË÷¥em Eà ¼|ËîÕê§qÓ n 'UÍC.+/ý­Îä!J­iÓÒ3??O¤'̶¤)ÞÁ×k«Áå`Ê[uÐe‡µ+Èj§Ç²ûLùeøä¶’ÓÿÛv›*í/¥Q'23ŠJvCÚ ,¶À›¸*qRÛÙŠ0Ë,WšóÓ‰á™*ÛãSSkÕK~9ÅñLhmÎ4þ÷'±9ò1‹¤z/K-´q¡’T˜”½·*ˆ{'7>`!ÆìñY®Q§!oŒ¢¨ÃÈm Üm'E¸%|Þ&%I×£Èñ`C·ú˰ªç¢”3„Ÿ³°Dh§2ÿî6ùPaYú·¬Ì)A7£Îvž %Lœ—C­ŸQ¹œÎi/øâù¬·LÐû{Ê4GŒ¡*”%Oçrs¥"“Öo ‘d&ÅœÖCsõ*Œaûþ?>—Úêð¦Ä[4c>öë×/Ðt„e:|üÞ%ÌUçÝ Op„¨œpå*eQW[zä8³zÎ D6ez}‹àt'r̓Žñ“úN°Ð÷s뱓»îå7XŽiªC Ì«jhT˜-Ô¹>Œ¿èÝlý0);@Œ²ž-3°°h¶,o/i–%áÅzBmøœ·ò…İ­ùñÂF¯H>zW'x2𩥝'ÃÎ0m­ØàR–x¿jü £&Òö#9­Â3 LLÇÕ0&«CÙãê †v5›˜—깂-yH‚è0L˜àÙú㵇™Ð ¡NâÉô|·ãM‹ê”+Ö½oðƒ€Yý1 zµ¨þ¨ •ÆïÌz—Ì+‘“Ÿçž•ë»À‘ MˆÚžÚ„0÷_°GE€[ÿ ¦º• ËÁ$r~º`' ì² TÏQ¢ I¤©ãéhúºÊ£öQü/˜¡ôs¸Ès]ÂeÔâaÞ¸‚QyUUÄE5ÏpEOIÚÍ ƒŸl#¬H·oÛøâ_˜¬uEqÕê‰Dxæ\# I¢‰EÐz\‘½k¹·ãùJÛ³õÙ÷œµîùñˆ_¤Œßv6;;Æèv[³pÈñêÕ«.y—Htc4ÀÑøî;ðx"+FŽÐ’û™2C$8vQ¼>ºûðþý—¯ÏÛU/g4=ä%BW ’û¼kš€7]Ñí¸÷xñÖåzW.´4Ö)4¶Q "æÎŽ×Þ¿¦/Îýô%àé¶x)–›­­ítT¿ Ì.g77~xDBÚ%»QÖÃ~\ËÉÊvò7œ*¾¸N˜p x¨ dv!$Ø+¨ÉÇêÅÕ1ˆã?rm }Â>eÃö‚È7 };Ø5Ÿè»¢ËÍ£®“'&y«@Â,ŒÏ“#JüŸå ³x[~BøÎ€ [“²W0i{Eèà”¤b*wîcÔõ§¼K† 8t>¾ µá«l9~E««Æë²ˆ2j `‹惩Ôð´7G ñ0p¸#Bypðà‘•¥‚Úð‡ÝÝO3æi¢ßÃ!Bà@¦¥í &—Ó¸%呃øýç<Y ±úq–»׿×Òü‚k šóù[Sòç3¹).ݳâ)výLQ‹Êvyð§ €ï¢0r7‡ñ+ÃsYYYòD÷ y¦¦>ïÔÔy¦!zh?Áäíc[XŒ£ƒÝI\˜x–ë«#Ý÷p®Ž6íÉz¡Ï&ž…«nß„ìß¼¦Œ„2õ{Š(•Ñ:7TÙõ{éÁ ðϯCÐÈ‘‰1ˆÒ»5g÷/£*‹ŽC…Ù”ÒÁfHVõSPŒŽ´ðö’ Æpºðˆ>H`k’|j4$:÷ZÆåyº®³î©¦÷bé(fÝ™ÕÁ€U\‚v%_Àfùr¼ïú$9èl6/íDBË,Ã_:è„fq(¥¬kéèj­j=fPÖ¨E#{Í;í.(ö¹ß ešAçZŒX ÙØQP{Ü´ÿ\ŽS£’Oï?Ä–pÄl1¤¨”w±:GV͖ņ  ½˜?ºÊqÝ›Ä?!Ô¼}Ám®Î áøÆÇtæ­${ófªuÇîî.†.81@I™¥&Ô8ÿV¥E¢ù”ÿƒ T˜ü t.ÆÛ˜'»sG­ÆÄ#;éÛä§­•·j뇬íwGl­Z†Tc~üÄE^ì¹v–ÃÞÿÌgV0âÙ´[B@ÊŽoõ³Ÿ×]ï¶'ʼ±ÿ!B§A4afe•‘““ëx'™Ô_ùìIÀuz2ôÙè¼,´ŽÌ_'‘Ëýp-™÷F×c8o~ž)ÕÓ‹¬mòj™ÙŸÐ]©ÓðZ€›'‹Ü†a”Ô¢<ä¶CQ´êcezt^ö÷&q»œ[mo\)Ð$Yÿ6ÂÔI\úŸïa4Y¨CG' ýó@°ÆûŒø¹ù áßàõÔøørº–ÑPN ªÀ¾¾t“—à”hôþ{ç×ΣU{ÿz¾*ªÊÐEæ¥pÚl샚›¡?.J–¬Ô£Ñ:iØØø¾¯ÇóÅSùÁF55‰YØ¡xH+Ñ å`gc”ý9ªRéo•."³ó2à+>eùÝ¢oá²¶Î7ÛÎoŠw_¶VîÛ¹ †c#"å4‚ÚˆXáçÔzç ùj2H諈å!Þ*uã<í?*)|% /³WküƯmiËOÌ®¬¯^é_aZ.:@bò’àÇÚu=­ÅHÈ=I2^ËöÉ·÷ÜÁæ ~XçﲘÞ[_‰aY÷–š$¨ EB¼Š¼ÄrŠÈý»[Âë³Ì®#‡(>g$î® bãEðŸ÷å;B”ó≵àªÝñ`¶±e !•Ì ®vx›Ïÿ½©9Ž1qhö¿F™Ç\P«¤¿¯ÆŠ. 9ñ¯¾'*njÀÓÑÑá:üí»¿¿fÏÿZmFH­ßѱýÐùZm\$%m 8!Ÿw¦Rø wäšzPkÐRƒ:Ûß|š$v|³õŸh¯™ÖŽ.¼Û ŸÂ›—™í¿Ìß…oó_¡_/Þ“ˆ¦¶ÿÐ2lÜ3ž"f)òÉá6%ÿÔ¡ °èªsøä±D ‰÷Ùß?p3ã°Ücð‡eÿç" k€$æp Q.³>BÔëh9ˆu„´ 2Pa²ÿŠxý‹Éñá?§kù%\a‘º`+œ¶Fcâpr¿®:¾.'Sx0âOQôÆÃøê˜æ²óдü´bL¬ï'¬CSÅ4p¡e P²•&”i­„_7UØqµãÉçz%Ä32-Nñ‰UˆxVö58„Ê]þ D ^5œ•þÚe&—BÑu -úÞ(²|ë |ëv‹a™úþ&‰½ôÀ’þyT . Ã¡‹ °L7íe¹íp<ßYž¨ÊDÊñ*°13Õé‚ Jˆ$^pµÍÌW‰·ù)`^bÄíÒÑfD>­vF¨q{ áT좕ÈÙ–ç`­†ß9´¯”^gT‚0=íÆ‹2}Ä–ˆ…ÎuJ³¡qÁ£ÒW]Ò—­[g\c;â/rH¾©]a:Ôêá· ‰ –µ ÈÄoøß½Gúq’dFæ¼) ³ÎÓC=š™¢Å;؇ÐPÒ ‡ÜEhœ¶‘8.5^IÆßeÑ÷{ƒW{µ»XÍ©ï_ÇÊ)”?ñ/!_ô~¾÷×b}_'ªùòN¡#!ôôöJjj&n޶º?jŒSù´Þ¹K‹)ó/£DüzGÒÎ0–éÓî®UäÓÒ€ï­Rð P— 3¥zð±Fs>‚bÉä`×éþ$Æ?ÒV~ °öËr-Ê…x{§èÙ› ÓúùÈ“ñÐøÎX\lħڑ2³7^Àº“ %&¨Š¼cf‘l­Ý£ã Á„ýñ3í5ÉÚÓ˜ŠÄ÷§–g…s ˆM˜4À¬[DÑwD‘7!ñ¿lâ:† xvUå8šCÖBÉ<± =,¥‰/N%"ŽÌ¯}ÅÛÅ;þ‰-."ªŽÖ¹Z©ƒÉHj„Eª;=Ï6Í8í´þÜlr‚2î‹‚~,{—?Á£{ȵ,»*ÿUo˜“sÍ«m~‚¤(²°+’æÒáM¶õYf ¤"”ðˆAQqw•ð;þÒâÑ-BL8`^ÜáFî2Öœìl¨sÖ祭 ‹LÏMTŸ»åsPË2éÈÂCúÓ°í—I÷÷Ëñ•cìƺAߟ¥aCt$öÙÉy¼ÊòoO•¶—®¦rÇ@^/uÀ«Q;XÍ~Ü>O¢´=S†…4^ñõgέeRlVVLd$5”Òšá)ýº ±5¹_}Ÿp $À oUÚX:ZªHiiD»š¹yþÐ),`Ü:†î ­ê™áÒúç][n`ÀåÕ¦¯’Ü¡_ÖûÖ7ÈbôæK)®øxüûŠõüTO.´ÙÑíÝ7°³ªŸyxxøÒPÂ~L‹ ¸K{zÞµj¡ýÕ¦ƒˆ‘zO­vgÆ~± 4@^>˜Ö§á{p¾.¤4^-ƒ¥ãÃwŸó„î ]º~ùvËÅ~­µûÛÞqˆÄý÷^‰&†ë¡±÷W4^~k !Ð.D4waØEœ¢qÄoÍæT?q#Ôå65 mFUýó”ð¢Ô¦cþ¨²dddÖ ‘ QsßdÒ~âÿ,BK.ï$qW¾ "ËòvòuÏm3W…í{wÑ=ióýãú´àr”¯Â‘’æ1éÁQP“õAe;Ìæw䢥þ°e)ÿ§õŠ®s[öUª}÷úºî|‰^á?Õ³(:(€; ¨®-?&±ôŸÞYO5Jý•ÒD%Ax ŽÉ'9õ0˜ çãQÓ; .Y8âMë ¯¨šMý< ì¡>‹ãëÜ5xl8u6•+…f~ÌÃFïŸ.Ðv]‰ß(¬`«°Þч0¬dt€¶Vþb4A­ÿ·dAšè¹Oë\÷ì¦æù¤Î4®ò²¯ü<ŒòÛîÞL§+•º%aÏv•nM{‘ñlaS¼I¸fR4¸á¶vÕ¹´žëÄûÒ# cþ6ž}¹Ì ®ï] %Ã;Ö=%/^­×mj¾S êý«[ùC H‹† ÷eaŽk]¥r½ÃÍ:íÈÐÔ¯Ìø±»]† ó['y[ôœûìËÌ úÿV¾^=¹E•Ù<”?êãTÁRÍhsgÀS bÂLi&äç‚ë¤@e ,è°;þ[d(•¯á ;ð/Ù#¦!ð(â~Øqƒø¦ä°ÿ©Í}…2Û6!ít127Ïd¼E\[½ ¤^PÁ©c±gð‰m$æq`°¢ hcaÑæA"úÝ_- ÙCB€¬ol´®8X"Bô„–[¦ˆÙõ¶ ŸÇ>Ai³ã ÒϺÃF/¾!N´÷RÏÔì饧o©)7bŒ»¨ª×:ý%pcº Κ^`ºÍjöí~SÃÆ#Ó‚&š‘qxsR6 &VNU‰ g_²¤ÀG+ŽnzzFB¸~<œ÷Ôqh§½p tP@¨,Q:tÿk¶æ˜1’Â?¥¬v––37ß­…»•ZÛóxôŽÕïŠêþÀ¾º«)ç%–X Û‰zL¯Ùìtl?ÚνvD¦ ‘³üùLƒùBk£àËs¹Íí’_¾|1‹ á`WM£Kã«·HïhE†ò<פ£ý‰¢úG”yq_„ÏÄpÉÕö?ÉÃ2ù±á:².ksÛ»×Éqc9ÈwÝö²šó’ØdÊ^ü<õÅ&j÷ïÏ>¸Ì3ÕñŒí^û. - äcÑ*bÕL£M+÷Är Ä0¼Öâ]~”Â~Zlôæ:Ä÷8ÊqËÁK~JuB«çz ëÈ›xò/»tw4•ÉÜ(Cð"¨rkýÄ´šFѾÙELˆ¯íZ=ßKÿîPÆÚ¿Òüqâ o ’”=û üÅmÛ7œ¾¸ak|FdTØÝ=ñxÕ××§üq¾Éô±Ö’ß22ª‰ô³ìd©Î•åT™ÑÒÜärƒ]9’ŸLÿ§É–Bµ ¼ðÿÓdŸœr,J>IZ$쨉²áh£dRÉQÃz®ŒÄ§âšØkYUkýT9%¾ù~õÕ°ÏîÄ3”×××G–>äEFFVhþ}G“Õ+ }{GÚk³µâ™y‹cÞ– Ûæ8.Ë3÷äÄ·¹*YC÷ÏmpJª.øÈSâéýg_]LÄш²QjS#ß©–AµØd.ùþüšãÍýƒ™N@@ëS»=§Ú>­BmÇàY™Âßµ\v õ¥&(ìÉŸ ´°”«68¯o \ýB» ×a¶ºF¶ÖJ2éÅa ¼ûPÎLg•vî»PèåÜû3oÖê ˜{ iDüerΠ€]«#q`'‹iF¢d\ #àæáÑ" …™>¼T°3¹+9 ¦?Àû¸»)>Üxý þ¢LA¨/ííÞr±â’>õ—~R«P6‰]ßxn”ð ѹ|®ŽãÅØAÜ‘ ù¬’ÙçܼG\K*Cgå(·»eÍ¡ Àí¿ÂhWb:PÖ"ú~niKc¹H`/Àls“4 Öì›êÕõÔMã/Ó ù¬Z{ê!¿€K˜I¬/-ÒG[Tƒ;¥RG~”ÐDD>Êë®­@Îe™åëô?¼6i#(¸èá>¯¤Û-ØâW·l2”§ê˜½ÛúÍù§ÚÝROvÌø%¹………yº”>ŠÙ½Ë°ŸñL¦^»{CÏ ",jnÂú‡ÚãètìuÂd­ ÞÖ~bM#Yù–D¼Úäm!Ix#A@Ô8*˜"”¸—É·k‘Q^daÖ׺LÍbû{ ›:ÎÍPs’ª`|Qòm_OY$èoƒšš— ¾íèé,FØ(o%È_sP Bµ‘*Ÿæ(R×»žNºiº–"A€nÓi䨓³Âm¯\5H×®'€ðùöhéij ¹o|‘"j‹­D?½‘ÅŒáOÚì<Ò©†;9t ›6QãÊÚiô*"¬ý=ƒƒ¡ð—§ƒ!•˜|nuϽ{¿ßÐŽÍ}ïè•à`â¹%à°ä{Äç®_:e< ú{4c½Þ¢\“´å¬ÌÒÖMd}R¿ôÀŽ#¦ÄqŽÅ+¶jQûø·¢ó•=^ÅEàV¢8ú-jÒ>âx‚òk6ÑNòƒùÑÆîDA¯’P ÚkZ=ÀÊyˆñ˜‘{<S¬)eÕ¯#XpQï!½~ðëñãè`{£o~Æh–}ˆæ`IRâÍs¼`µÜïÃ~ ö¤w`}@}tÚ0ó°?ù¾•éù]þ¤pY"1ŽSW*ßb|¯Œ_ž†úˆ…þv¤f‰VPÕÖ°V®ú'z÷  Â|ÅÁÄr‰TA(ë8#OãëB¬£Ž„Éõà¯üÂÂñû¯ç»oâ ³F&®i.­Æœ¹‘4î*$ 1dyɌǞv ?Tã$黑‘““Ó†ÏVv?Zq¤Ï°=OT|‹ö¶ºØÓÏõÛC¨°×ŠüA€9Ú¤/r¾?CЂ«r.ÿZACú5…O¢egÅÕÿí8((`´/Â󥓦ì¤ó×<…j^dLÿb×Є¯C,×A[pýi—x°á£¥-ÌF÷£E*Ô–DÄBoû™‡ý û:þ`CoD~áøfµÙÚd«åÈù*-g˜(G:𻢠*EdÂg”ÂX”–‹8¦õ «¯n èÎUשzH>7[5«á,É]4À¥ÆA2‰ìë×g„DDßKJð:;;™™™aýŠöc˜ÿÄìyw§ ä'XLxäõ—Èe(JÒÁ8•#'ÇgÕ+È1ñ|ÜL¿iCÐÌ•;Gú¦#bn;ݨl2kF633“_Tô¢¹}Dëþ$VîåÕŽG[”í*ÔÎÆHY–]¤dOÍ™‡XÈ(UÓ& ª+ý šTÂOÔÊÊ «ÿ–x½qˆã¾‘ëº}÷Æ0÷«º'»ÄqÞÁwÐçÏÕ+õOöÕXJnnüðÅ-eRhÖáB}³¸ë®Æ;GG|<0Rr2Ö÷ïS‘ÆÁДõ³·WÙÎý°[+ö`ùóçñ4 —qDhW^ÿo´@¼Ô%¦þ8Û’]ò¨íÞºŸaSšè½e” Öá8\Ïë¥rOó•)xÿ Ñ>Éé{íüâPNáþÙ°NG ·–…'Z hÇ7>5» Žwò²øÿdÐËGõ%¼DCBàÚ%c"Þ&{5ÉŲšav%æ~Þ÷åø…ÄJ®Zv’)ƒåy±žð…ÜÅh(N²r´¹04qÝÿv,+IàÒ1f-ŒlVü!¥ÅkqÒ)++K®p_nìO—Ò¿°u$ŒŒdÏÈ},»ñÊñѬË|N—·ÏkF׉óŤân fІ­§O_Í4²¶÷b3aF³Øî_;]¢…øWhÃ*O´ÂªÑÀJ¨^p£HdÕù—ï6o'À^·MǪS†D!`'Sm·@>A-1šŸ®œ³f9çbD£3ôšT&’óøîŒêž„ ¤û‘„œ[à Oø´á«û1â·ÛeÉC\Ý( £à:á~|uB¹Zp§1ƒ™¿—åsÚ[³•é]â{çÆªWƒ‡ˆŠÃë"áô ‘¯lŒ q»›`䯅RÊ£bxQJð¼¨ñn¨zæ{f‰ø°K€ùáõZã¿¥Œš ˜°XK=ö©@"Íô<÷—B( Ï혻.èFÈ’ Q= :ðbObá]ªøD`×x¡IH(sòÚ(Úv;N %—º`û€TžÂ%8Ð&ž±Ð$#:Þ¾î €,iY¦ôó£ÍßmZ|Y¸ª¤ yÔ1Ýå¦7§yÉ£_þç™À7,%„Ø7ݼe˜ÝÞí®åÓ^qófÎR».{…ÃEðéº×½L¬Œõ€ÌˆjÌvwcÏB¸&“‹áP¿€Ÿõ2î'œºÈˆqB©c˜\Øû¬cºÏü>}ú}ÛÁ.N4‚v]ü‹”¡ð'zÄ»9y“ÄÞ ú¶ƒæe§ZN§õ×z¾¤œF€ÀµÒ^SZÔq¯³ð /ZëÅ2yÎß«jIrŸD’¶&Úi\5ÐÇ„{àÅS˜ÅSÁÁ(ÿÛdäÑ(ÎË;ŽÓø¿Éøã»ø7^`Žˆg©ì0H©R‹8×ê}^sª%”D€°k¡˜?²‘êôØkôØMMk–Ìà›š”óÔ=‡{`ÝÑ¡FîìöF Þ—Öàì‰ôõôÀXû---UŸøëÒÚÐí•R¸ÍÖ‘1·ÍÄ®yYÛýù^¾zõŠ×_´Ñûjr鬪LÉì^G Ÿàô7’•E)¾s ù¯"NFÀ¤ÜÑFPë-¡»qlâÔ;Z»ˆöž­;0]1{oÏ“h\¸0ù]àâr„Ï+Ú^è… ZËÑUˆU“Õ|¯ËůI­9œ×ï¶_9L¿){«ûÔ3LpŸEk)‹ð-û%ç.‹=7%jwùò‰GlF|Ó‡hæH}÷Zh“’¹ ï,«#'øµÇ§¦Ú´2·ÉCq“ò¥ÊèHâÝ{d(7©?Q=ÝrGSK2—‰ Ía»üÝï€Ñ+)rs±ÙWkÅ$ZЭrMÒüО”% ½±f–w~Š­BœTË‘5 %:€þU M!µWÛïZ­C15÷HтŀkwÊï¤JÁN°˜+TÉ´>"Ò7¨ÍË|‹ëää›ñíWƒÅ-EJJŠÊy~AæÁþ½A1óË—žñ÷‘&Ñ8÷I tD`WÉü‰ èŒ@+EÊgEˆC%L8ŠBsG-gç'Ö^Lþ©‘Ws]ºb8UY[ì%Úk6²-Æû5i#Ö—â@€HøøI0Ó !-ã"ц4 >ƒo®EÑÊ=ýYÑÿü5×c&Vò\«3°Šì Ñˆ!$ˉygN)îx{{%íìpt+,ÒÓÓ깞!r{åÓÑ R©î]Ý Óˆzk-#´ðëª?S×rkÅÆ/¯æ¨±hÄ)›o­™cb.ÕIœš2ˆ å“ÌÈüè9`°8´ì(ôÒ)K†ßäÖÿ¾sdm\j5e¬’_Í^·šüUC¬v2-šu›Í–÷xšø@<ú"GFùr„ém%[«išü“9¼§W­jgÇv?5/ïÈÛ¤ÀÔITÓÒ"¹½ÃGZ Ù§¼Ô39Ët-Ä÷S߉F¯‹ëLñÀu¥¦9ùÓÇÎè¯äŒÂaECÒÚ¾ÝÉ#í¾ã£Aè`e0ñÊj qµôˆBÏž£ÅFh „3ÛÎÿŠs¿DÖ2HbPß¡“øÓf×<ìŒ6ë|’NÁñ¢L°þt›ï"÷P²bÒvŒ)Üm…ˆÏ…pî;²÷'Ç7¥°ýcdÇ´I®Bò¦‰»¼,–„ xª> …ˆR‹T¢ÙøääW…'ÏÍ v?Pí0ÖåÛѧÿ,ÁWýƒÓà||B#3ô(ÍÓ¬­|œ5™ö;ú•_p‹“#Ý’õtoq~´”s9ˆg=LñܳöŒJP öK~e÷¿Höc’,c Ù¼ùj-<þYÁõ$a@ÏFF;‘˜$„™ è/y€®à¬Ì=-õõ Áø_ô¦œ‘ù"ºÃJ×h—ìG¥NpjôŠä b°Í+íĨØäç„k]øÙˆO¿´«íôÿ©@~~=ÑRƒHеÇp @·âOî—Še¶ª|*²ŠFT†xN±¶£ÿ²®åŒíÔ™´d$Ðæ±¸ûԨ¿Pèߨ!À÷—ÀÄ1ËT¼dýCï¨ÄK„ý[dœ"Z‡ØýÎRHùW¹ßÝø :3SvÇг°`‚¬›êmg6FKß:µÜSæã¤¦6ÚØ! \ç‚LO÷³îD«×qþdÜg„çþ¼Gyø¸üTç M€aLç ÿŒWÓ*UšP:8Í™šÈúKáÙ2¬n\ÅœÔï4ùcþËœ¿kiGS½9§f´Æ½†=÷o¸5RÚqty¹Ûö]þQd‹«*vªzùJ#’7Ôè³×ˆQ Rál.½Ù~%<¥%†ÙÑÛ›ͳËrKÀ›ßCŸ&Uj€×èÿ:¯SqGcûƒ¾ÿëq®ËTó–ëþ—ôùÑ}⸿ŒÒUFíw;EÂwQYBÙÁwR=Ü2mÇ,Yï…&)Nƺ+ ²ÜîBR ÄVhçMs¥½cßÁŠÐè¿J/…ƒWrþÅ?^ýD€ŒOŽ·­8´8²FÔ%êåÓ2[¯Oœ˜x z–{IÚ¶år¢÷^Œm˨òO+:žÆ·0Z¹G9]¾Cr{(§JƉ¬<³ÊW³ë{?A.cư™Jnnn)É´@ZølÉãìrëç~¼—5Ì  €)ð˜®Ñõ'-s zžh–£=*‡PRþË•ßÀ…v©˜± Màû¶ SžÛjnäìŒ;ÜÜgÝ?¿[ #U ÆaýÓþ@ŒÐêGúÒu+Œ’‰o¤ŒŽ´äúœ®#ƒÖ* ç•:"ùÊ Mx‘&WA‰Šf÷ŒA2ú†£áX*¦7ž©œš÷ß¾,¼3hð΄l<¢V è?3¡l»—¹ˆÈIús AË٠y(_Ï÷ŠcUšwçÅç¸øÝ^Á†&-/§Ä]äžÎk'{> ¬¿KÆBA¢íÿñ"€ØÔ Íx})(ÿf±h¥£v&$¾xU˜xá!š_\ÂÚŸ!ì~è#Û1B…ð[ã· C¿¶FI0éŒZü4ÐÖú&Fd1¢ho¹èü[.0k3@’²ìéØ^ZÁK6<Ó }zyøÐsê-51š63`Œ ¹x€Épmˆ‡} 9ň[zî¸Dïõó@ûþ:qb»€uÜ'Ô¡+¨Âd+.ÁJiÌáÕì†M÷øôr>Åê 3á;ðÍî^h'xf{Ñò\™Â/ç7 )b%þF£äv ²-Μ3Ö3øI* ù3Â7aX&†—ã>ÃÝî€ûpÑż×ÜÁÐVx/¾~礎yòåô^DVB}p;i #ïéÿ…iDj´PAZNnàöçP<„"2)(öz‚Ù̆[ý@Jr({Æ{Í ßÚ1íüŠEíÁ”ÜúUËÀqüÔèõ½R$©w¹¨ £blì„I¯PÐÜŤ‘˜]Ù~†ðЋ!ZŽSîýê-à ié¡?UP£í'…¨ýöcuì/Hå&T]’ @BBðkß«²™y†ŠKUE¯Wf5ñçQ:ç/ç¶q92Ø ¼dõoîÏ7Ý£°„ ”è!’(¸ÿrü*õ "&Œ6Ó“f[ð#gSHѽC¢µœwÅòde~"Èw¦Ýg‰|”žYg6¼Àˆ ú.BV—t£uHÖ.Ü[ІÖz-I¯ä¿]WÁ‚ÒÆˆlZà SÎ"$#³añps?¢/ûüønnqü têðúæe*$µ#–S{pùP ÓÛ”§ðÕô1f7|º%§B€ô´’¿¨H©Y”;eг埛Ž}Þ@š€Å_½»“ˆmöôò8ðWeÊe4µ|È'uY¹“O³ôêùþ.l'àuN š$茞£!øˆg}g »ö qtœY=XAÈF_éÊÓ+ÙE6ÚØëD(1F7yæ•B«oðe~&¦)x’ž6HoíO+Êz¬¶è§š—A®×í*à ˜³€Æs|Ýèä=‹¨óï'Ïðò¬è[kÝRÞbP7"‘›á£hÛ6šýR7é_Ž/ðã[.„¿f‰Õ;STJ)çø^/¿¸ÕŽuéè•ÊN‹º¿øqчX†Íöi¢…k€:SZ©'>G•ÿå…bð‰-æšÜO-¦ %ÅùàÚ÷ŠüPúÏ2Où]ed*¡8ú ´@·EC…I/ÕóÔô±ìS#`YAÎþ·@ûsv6t"lk.Ð'_Uyã¬ïI‡Mt&ï€ wŒk!úOí‹vîË -÷G“ uúHÀBväq²½›v•Èm¾`jáïFçdR_¯ ê]ÌX¾»(²ö7Åå1رïܿҢ}…Àkž¹‚k¦3E ŸîQRZ7 öþ$9Rˆ„@¼ñ‡F¡5OöÕìaÒŒ]/]‹˜©Ç™ŸMuJ,‘ûTXëQnâ4T•ž{ø¾÷§kÎòÜþpW Û_›6ôGöË<|d¯-Öç-¼·ºŸU¥ƒJ™èìs63­:S©Éñå6d#¯&¤SªúWâv?oƒ4é–óýûsòœ%›Ú€d2ñÓ­Ÿ"¼³‚ÌîQz^ûÌ@½ñ4´Y€íˆ0t„yÊÅ# l \™J{fT÷°ãLûMõÓ¬SêgO:¡ |\³WŸ—Õ¡¥±:Áé‚fÈ`çO‘àÕMáQ;Ôê@–꜊¼ r˜XF •„Ÿ«±”Ÿñr~xÅzÕŒÁÆ`ùшÿ6ïNzòùÜ»»ÞWÅ{èªäåF×n¡¿$P V á1€õ9^\.Ã'$µWRxÌÁÉ5!+"­¼×…G__b%/ 4æ‹ Þ³#+ù[fÒbXŽþ@-œé4M¦ÀW¹–»²ÚG¥Pv:QIeÊOã\w¬ã\·]4Ó¬RG×¾H»âñ¤·3¿¾гóûÁʳô³AQ Ï Wp<£Î½Þø=Œ•É2I*]¶ŠKTãTvÐE&4 °ÐFcj¼ÅÚöUöL;24}ÞžqE!.'ÿòn­ðí`Å\&Ö-}ÒÙŽþg¢èUŠ”ânK‚exUÈhtC…ÂçrÛpwþÕs—§ÐÕ·j´»>ò¦)#Œíö+ï‘ÑP_ýûò¹î‡¬;Ž×o=o^Š׫…ºHÄ)¿?ËW9)’€ä0H &Ш&üI´×y24³Ðžw5ïN¦˜™s—‚ ¡gàŒ¦—@µRYçZxT{‹È¬€’ã¶)[7Zœ¬jH)áÖ?¤$ýûƒ"‹ˆ–ÊNËÃC€ÒîSØ‘a »b˜Ø¡ƒâÑ„Zs J"DÝÐ0f¡ÞÝäh±~&&šZ,¼=wíx¥ýû½|tv]Ýl[õ\TCƒè‚V¿íÈwiÔtÕ0AÊ:j” Ò‘.ÂXœžS/º–{Òlù'|OÅÀÞÚhNÕprßM Ø& ƒœãO7šËŒW¬O{º •üw@ó­ØpO-¢~߆RÄuuѹ‚'?Ow³dat©%n#Âê\-‘§ó\á™ßíÓþt)â’ÿ“ØãÝÒÓêÝQ³üû÷D— ‡;~455Í®©!=˜«–¿»<{è²;Žž!ì*5U¤ú¨õrT.óˆæücœYåVë©•ï†F÷v²Ôö€Í9ʡۘÕV§/rÚ–`³}Ÿ1ÖÆã ¤ýA€ÅÑr²Öý· 2ò%õË X ‡5²Ë‡<<ªUòmù—û¾%‚é.FW‡ ×çc*'Z†ûÙ¦ë\YœsÛ¶Î>‚}˜®´Ö’ɤEÛž.¥¯s?ж[¨ûn=U? 'ì²md9b@™Ø[ „œÃOc–œ¹ˆMd¡tÂÕê%¿öT>ë¿/›éH½û‘Ý.»lkÿsÇ㕚àÎNN]dÙ*YâÛsÕCB[”¦{(è©ußâ–=GÞíe²ä%~n¿ZàˆÕ‰3ã53A¢'†1bßý8|ìN}†„v¤Ãº×žÿ9ûN‚é§Å ‹‚›þ½…úêÍMMâßV¾"+|-q\“+Ô­Ä033»¾Ý+N«{ƒÞ½âí}u(x5ï,˜íº7IþY¥›$V{Hý™Ëp{ž ™mê'á;˜¾rs¨rp€'>.ý‘| P€Å¨ftA`kÝ1&[Cäk†ïÞµyÑâe!,ƒÉH®ðõxÆ"k¥ñj±•Ææ{wÉçš”š¥…±}¨2ÇÄã°v‹ AYâÁ‹J˜T²`Ò¯8Ò! ä"µyÂ>âe状œ¢Å~’ùÚTŸ%DÈë“û7]ÊPZ'­ŠˆD/@Ž™½‰(à ™@Nê73[_²‰Ãd)•‘šïO1 ü\Nº(òÿü±Ú=d`+c]K³ojXòùÌ”åóìï‡ê.P­sÙLs&$$ÉýœÌCþ1ñŸvIAã‰ÿ9^í)£â™µÉn«ØoFqÇKøc`kÓÔ2HÎñ/x ÙÃÌ–š0øQSD(Ùû‡*,Lv3³_æ˜zÑ|8Ô¢¡ÿþ½Ý==¢ïíykO½ã¨,É÷ìì––žHª³”3î%ÐußÌŸñEíßæ¶áˆæG£aÚ’EºÏOöÆA!P èxñ‹rÞoOkÍ®LäH¶v¹yÔfÌê~ùðäú) \§¦¯5eà}¶5Ü=,ñ”>b-B ýø<6 ·ÂªÓO€¢‡J‹R¨ÍJ·5¼-]™ ‡2´Ô¤Ûx½'.àËÑ6(CÓ÷,Ïägyꊪ6#õ»î;^ œ%ðË ¸> 0úÎNBBBß]Ô;I - ¸/š:a‡e‡Ô—òÑ”­åÃâȘÄËÓ¥&ŽõÑí—C,—Œt?á‘_N‹¥ô#Eµö¬||-Eú³SÃ,GK¾¨”bäK{ˆ°¥#y²¾¾¾ØŒŒ(µ¹•o8dŸÁ fæW°83PF~~yì>Çê/hŒHÇ1¥H×®Lœ”OUTdpSÇ2û¤ÿ$g‹¹ùT{‚Û† „Œ :­£ez dIH°?«4ùdŠ}›:òÇ55ë¼çNìB©sU7`õ»EŸ®{ïi;ó£Áíi•ñº:Aê ˱\ìo“aEuã¢Mß²%Ú˜Ékî{]èȼiÓÛEaU¦¼ "ŒØ~Zƒ´Ñ?ô,C^¢¹ H>°@ˆÃ?¢â©HŒø-s4¥Ð³r77$ö€”êIDÔY¸ó"§N)Ë¡ðªÏ=TÔŒS0C>=ÿBIªÙïîT§È§àÓw ý“ŠË…TªÈ.ÝÙhT4ÏÇ ý§s‹¾¡!t3!J›Ù …xxQÎÆþÒ!÷‡aÂÐj€åŸôýIÝ)<¥Î[CrÕŒáÐf¿–/$ôò¯Š\ä¿ÂŠ›Q^½‚õ)nÏ[¹¥¦Öj:4º¾ŠAY²tØ~ëÒŸ+ø^·2„ÿHAÍÖ¡øÿßñ+ÃÇѲÉBι¿˜vwWÃZ®OZ*§,ÒñÛqrÉÀœÛ§õxò¥M¼c¬Õc$ãA©^ðvÝÏï¿]ÚÝ–Àçç½à{`Ͳì`ÀocL¤6ž Ö¡`+ÿ)wÞRÖó¸˜nðt·M÷å?öBÕsR¸Ï9‹‚BOÐ.OÃßïÃú7Ú®OÖÏrè‘€ÆZ'_.<Å(·sûî nþ‡RÝQK‰+Ž7D@  †§›Ex "ÇaŠò8¨œâ´ÉÎl¦Hô’GQ¹K<^: &õø?¼ #ð83š„ißÒ“D³I-5ù:Ž) ¬äeùý[Ç Äó),‚þ"ðL¸!Ê¿wðmLq[eœöÀ¿˜Frócæ¢3d¸ÃþA½ÖtŒŠ /•xJ1/Âx&•.¶êyã;ü†?+K dÚeH‚G ‚®ed«N“^ºƒÿÛ ÐüúÕ²ØØ‚É ¢ÊM[~¸~ðkx¸œ|º?s¼ZpGÕr ¢Ðˆ,GæÊ6ÙÖù¥ý+´„¯¡`¶Ž¥𝒔ó&ßúS‚EàÖ~û§à‡*IôEÿ'ß9×7Š0Ž&U¬§#š!G©õ Hü ˆõ$3$¨zþÇOÙˆá­ö³a‰q(†Åï8®}šÐ>[0£àmlK so'|Ì…ØhUÌ#4g£MTÿ;Z½è…™#UÖøåèwÞ«œ§N˸þ¡ê[‚uénäÇáZËI<ÑMsäcŒ' u·ÒUuu1Ã=î¼RñÛ”¿LÙ\€°¡DŒ R³>¡(Zl<††–Öš½ÿ|yÔ¸ s{Þ•„Ó6u5SÙÊ:ÀÐOîÀÚ: ecz9šFkr{kã¥ó›. Ì›†ijŽÐÙEaÆô5c9Åæ¾ô=ç—ûÑ¢ÇõJÈhÔì­*Çk΄âÃ1ÉÁ•=Bcò;øiØí,J^K¼jO$#¦N8½s}úÇp½Sµ{q„˪½ß™õöõײ‹ÃD¶>s‘z7ˆ÷%ðþ}Kqó+Ü‹OX33М¾EäÎNèÝ%ôê°¯¬‹]Ÿ°5ëü¨¸Áï’̃ª _¾Þ¯.ÿ4ö‹‚ ^Ÿvõü5 vÀ©Ü䩤ä„íŒã•1]þ“»½`n8Êám5jóÂyÄsøæ"‘£†±É¥ïsآǀÃÞß(Lñ¢%¿›âzÏò²…Ã˃¾Ð¦—õß,η¿×¬ b©.v2$S.Tbz\\î$!*–çM÷9íMqg«æˆ¬uj 2iÅlá¾LIIIu>„p/a…Ohý… )ÈûúŠåªdEkúNh6Ž© ø7~B¼¿ÜW»üÇÁ‚¨Y¨:ÓûÖŽÝaH¨%öyß^ayª¦àÑË|m‹ºÊKuZ7|$ÈZWTûþLy\Vn‹0ŒÁ¯¶ÊÄãÑAi™ÅHëÖ~OÅ’ïÕ ¥Ô *·é?î•- ž}z?nn­{J*4ÂÌØQWšö~ }€¤¶…î†!rgùXürn·§ñëföÀò^z>=\9îý­^9qÏÔü•óCéðÏHX–Ÿ°cÜÝ_ÝJ)GG®ÙŠOˆ1ÝŸ YMÍ̓£©pP£i$p@úNM%çååÍ®ª"¾»:êÎó†:ç¡G¼>ËúæyëvðÌ©¯ùåmÆŸýçFIaL«ßC¨1ØHlµåÒ±´MÑDénh¢5¢B3¡àŠÐ¼#ä¼i´ØàYµ›áõêør.jNacb¢oÈ5FlòÚõ†äÃÑyÜtÏÍ”íÅFøixøÆP_¯05È*€™~¹?óÙÐÿ®€«ì—¢A™k?Òøæí–GåÒìÂMºŸ ¢ã¤f€ß=þp¡Þd<_ùåKIPS‘‹ý‰!)”BÀ®cw¢ ÔçÆ ®cªäêYÁÄK–0ô<~G§Ó¨†9SÞí•Úï†óo¶—š›?é8el#oYé”±¿Á‹•Ëp-ü¡l’oë1ÂÇT@"§Õ€¥£îùZç“i“É2®·{#=63݆üDj¯×3b±ºlæC"&÷×'ð=B#•ÖSÓ®œû‹$]söÍQØü¼ŠX‘yêτؖaÏ’J\~_+ç8o´®÷Æóí°®)µqßÞzmyIúT”ŒÔ7±ö§¾¾Ò¹!¬#@1ÿ—n«ƒ`ê‚Ѹg4v1îJæ ïo~_ èŠÕ”héÿÚ—§ÁöôôLæýô Že`¸º«œ•Àîœös˜´"O×»ÛkØV|Êa¥º_£1™B4Õ™é6êÂò´‹'™ßV·Û ¶à¶£€\\8ó¸é{9£]çòò òP\¡~é6Å꘱§§¢(,ø'OãKú|\€3È–ßfÕ’°Ý~/™Ý¤M ”ÓJEÿw)Š£i{06© íd‘¾umtû÷š{‰Û×)<Ñ$i,ÃYÕå†þõnÇ ¾XëçhîøBb@Ú<ô‹ôáö¢½Îu¯¬œïKf‘—EÚøÝCj‚”}ñÈ[ÃZ¹I…Çãê*+  ]ˆÆr2UŽ^¿ {ØIz…ÖSæ%6iDÅ0oKˆâ0‘›êt5xž9ô2&’6qˆ¡?©{jøö­¯Œ· ?¾s®so6’Bü:„tÙk–|.&´<Ž[QÙŽ µ> yÌ^´ñ&¾T‡=Ý£Z޶éÞäeza€B±ð…ÒpeñV´™;‹$ÌTgöΈ0´Ç8jå)\(ÔùxYRÏmÆ,YÌ›!¶áÅÈØ2ù·/”3³Ð;’ò· ©Éu1¢d q]íJâÁäÈH¬·iüØsÕöÝÙ’ŸY'N¼Ð ò¿b²“…Ýê*M¿ÍfÄl¾9ŽwHùmq™ÃSg¬%ÿ.ŒmÞÿ—éÙæ ©° 3(:Mj£i™c’£ªûiT#ŸBñû&›4kNº(JmçøûƒYn.´–ÓìY‰Ä6ÔU55ƒýϲ)s7!f§ýQ?ņ„1™9ª«$$iñZ~*Ä+S'GÝï¸ÏZ–ÿ¸ÒYDLŒËË#¬9©Æ…³0V¬HÀ-Û£9¶†ªëÑëln •¦R‘IÝŸþææ/ 鹿jHd‹Ò¨Ÿxùß›µi¡p"ØV–‡(ï µKåoûƽ®4fOÖú{œ·º =óÆÂH }ðýoú ßö'~ƒ ‹‘”¿ù`¾­jV-Å–úøouúUÈ9ÿãÇdèj@'DtÓî©«Ì“϶sU{bŸ_·ãÚN¤qËžÐ¹ï“æEs :É 3óÜÙîO(¾y—Ò2ÉDß I2Ä™w¾@ó¿þÌM}Ò„úƒyDðvÆ$=cÝ˪9ØQSÄΛc;vËøïÍ JAØÎXÞÞæòA©Ü¹¹7$öB( ~y\7Gó=·\$i@–ßm¯SFƒèò‚û7ý)½"A·èÖ(„÷ï»Ì”…wà'fffÂv4ÊN½56ÓìƒéU„„bâµdenw ïö˱û'&¦ôrX ÞòÆHر½¾Xp_êìûÆ‚UÑHóÐÅny†¢)ð}•®•>—I`ee×ßkUsvå„…N“:-$†1Š'WÞ)tm: šþD6é„jŸ¤õ3V3k/uÍH^|#PAÊôy&xPQc ΂Iãs v?´Ñ¶kGYžÐZ›%zƒzNéÂæm)›fðy5—Œ ššß!ð<>Ø//·:xiO5#äÈ3ý¤°­h…ë#ÛÊÍ!üç=ÃZ2°ñÿ”*H^:›= Ì©†Ú±ü×…¨¤JT¸0“Ì Þ<*O¥Ù7…µ~F]ŸSyõ5>§Ò{ƒ¨3šùMÒ«<~ãÕŽ0R;=cá›ñ)Äx&Dÿ[‚Û4þ×R„ì‡M"ßõwgÊ™r•Ò̵7·²šß—(>=¶°U''¥nòòh wâº,‰¹vÂó6ÇД ˆeÓÉ2¡‚Exp0ʼë”~²°ë«ÝÝ]Ö)‘—åx•Á²\©Äÿûöš·jjø™ 9ípažÉ/ÔØ¼5ôBtaæ~j8ƒ}Á$Xdà{˜G@éÔÎýtŸ÷Œ`„p ÓöpTØï^ðñ¢ØŸìp¡˜z eÉæ@¼:¾]›.À ~½a+®Ä=ìc{ðŠ'‹õZQ­œŽõR£78q`r4ó²Ÿu¨ÐJHHpQ)ûˆ/_Î}«|ÈòÇyýÎ4Ån!!tPFÞÅQ8¿+~³z‰ðà¡©DEÂÖàpééQ¾U“Ë u€æQú‡EGT"Æ?3Á.ôã¹|§‚=1‡A$ØôŒÓ…ÙKÄ.Cá$‰°™Ï¦^çÛojñ%¹o¶ú¨c$Šš+ KO3¤ŒïäF ´8ô\FeƒÍRéHU71´5´´¬‘x­×í×gµF1)yŸy©cÝ_¥c“éæ1S{Tîó{ÅÍÔš4ñ¨Ëî͈üvüaoP¢©Ô3ì:>ãŠ[z’½ï[»Bôª/Ë;$1Ü.αžPLàÒ‰Nb6δ½>oQ‘@vÛmÂLíÙáó!HËÀÙ¯YÂÅîüµ÷RxÓÇÁ§³Ñf×Ô^HH{îŸ?þ ˆ=ùªÔ¼Ë˜Ä,Ñ¡tpÊäyg»v³"î{kÔŠ¶§ª^æÊÂi+ËÈUß›·“mÕw×o«3—«¶[x‹ÈK¦¨jAêrd×”¶7…V¯Ìil×{Mr~Cœ‚Š»°bG›|A~áýÈ®€ˆj ò|➇hKùð+õNOOÇ}=Âd²/½ñLL¹ôJa /­iå£5ˆ‡ rT_ ¢"Ĉ%ÆͬÌZó Ø+B憔ÙâæÇºCËt"4Ë«ãêÝC¦~^Š#ÍÈe÷ˆ±ý㻸‚ x“îh¢©Rú7Û·™èÎää Dh^¢Ô‘T"üŽTVMOÔ¤¼hÇ’ËS†ƒýW»¿˜k\ÈpÉyÑ檧Ÿn,Œ¶†ÜBÈãš}ÊÆ733ô»¯9|'qš!ŽR±÷¨c€HëD\!LÆ”ËW§ ý;A1×|3·¤K™Úa0kfX@Ð!”Õsì$ 6ã·{«já™Æ÷ÉÒ òà}vª‰]«cDƒ Ç'åòÞƒF®¬kÖ)Gáo¯ŒŠ…ÚeÆæX…¢ŸÅov˜Œzð–ïþFÝBÌÒ–<Ï`ê*QöKäa3î“ãË_ß ÐÄ—x]X·#ž^riD Å$ˆÐªA8+Ï !÷ÐÇ,÷±w|¼ä ¶\2 SUNKL00Æ6ï‚¯Ý…í¼¦óCr ˜ÃNîL°›.yîbCŒKÛÏÍ`ì¢KšLæ#¾ ×_éæG‹5׫'`ƒ–~z¤bä×»,f7¯Œ»“³²bÔ•…3šrY岸¤Oí΀½Iûw‚©¹ùj$ÏÐÈàÓ.Ë¥Ÿ\XǾ#:ü$óâò"¦ÜÜ㟑Ö;‰&¸Gþ0Ylz¯eu iÆ<‚š-ê凫o!Ù?ʰîO#üüŠ ÿ™»0Hœ Ó”8ýzsLsH[²äòÒpF,±7Di7jθ—|Δ¶µí™ “^]‹˜—¥þc®O!»§4"n¬(é?jHµËåmïë´Ñ¿%¥?Žß…*g“mj½gÌ¥ñª°/nˆœ.5A]Kâ‰9úûF"Àųnпñ„á‹ß¦ ¥3ˆÚ1'kÝsn7¸¹27W{$ÝCaôò‘gsU¶iÉÑq4~×÷ä¶œ>´0Ç›AóÓëy<*‘WÞ ÕvTKÊ]ò£ÃíQ$×X‘~ÔYóÓ£÷B”/°fé×H 4¾DŠƒ¯-€æÛª €wXSŽ‚°»CÄDûSÛ圮ý€/3 uワºchºÁþž¬ÅH 84Ñî8TRK‰l'_gD• 4ÃßäY _»óâ$ûº+]˜B¿²ëGž]-Ñ8 ~ÌQÊM‰šü[sW‹WO†ùD3Vín1Å)â0¥ƒj<×1K‘ÝŸ¼‘íð}úËÍËq èkÝ1݉lèN››iÔ)È9Þ³ìŸyбÔ/ô™Ço|ÄV‹ý¸ºQR¶!Ùði¬K0«ò4x£N+¦W ö9§ywmÓ®æ§_à9žBœ¢9œUÌEOÝüCÅÕu2ìèµ+ÁRÖ½:SãË9í!£$¸[[ô¦8HRaBóÑ sƒñT¬‚q|ÄtN0ù°|q+Ÿ* –˜Ía"ð0²ú^ãP‘ÏÚ`ó><Ç£òPò·QˆœþX¥¸_Ãnζr** Ч*öÝï®Ö2SÉÏí'0Dœœlý–¼Xn8WB`òÜ¢³Ë­_ØÓÑ>æzéæµNWæûDïwS¤LçªçCBa` á§z®–ü›ÿªùKœ²º–o¥ä‘ùž1v7v?±‹ã© cfÆxØüä§ŽøúÝÒì›TMÆ‘éO}ÓkDE¡ðM!¹9åN ?YIÒ§Mž@1¼¤úèm‹ ¿ƒ¸s4GÞ±Ÿ­Úèæt£j÷â³á&÷æë/Ž5µŽÁLJý{§…K©¬š.)Šê…Õ×äã¿}ûZ¸Æ<ˆX¯ï(ó½sk¿w;xÆÏÆ’WùkkøðöÉ¿àëÔº ]oŠuâ3» ;™Ÿyß]äÿþ­ gAò&(ní›&5£©DVëättÈÂÇ:®[ä>‹eÎU!;9L“Q]îÚ¥vøñD6ÅãÕãñ|µéJë¤ á¿º/qO@k1zsQѲýò‹_óÒ$blêWøfù°x¹Þâ[ŽÿÓ£6X4¹*YÔÝ™Œ™†~7O3õG×äÃW¸ËYG«Ø@»Ö‰qª†Ë6–M‡PnlßðÝÑÔÎŽ]üéÞ9¾S=‘^>zLYs²Á}Ægèäü6¡ÛÛ–…zµÏ0>p,«öýpxzô͘z›ióÃÈE»ê­÷†‚±3„ÖŸ‚"âp¡~Íõ–N^ÞhC‘Ã~ƒíPö¬åÖ¯@ó¯Ô”*û¼Ÿ?N×{Í.™ŽÏÎÚ*Ä;Üžª°›ÄM™Ý=§ÅeÆÔùb²·Ñõ&ÅY4òó3Àø¬¬l2Ÿ51\îïÛ´®YMDÀNšu½Ï³ ÒÁGŽ þÒô;Ù,ñæÛk4 Œ60è'ýÍ-M?2VTõô"KMºwmXãC¿OmÙh¸¨}É Ï5CÁF¸q©E¡O¥ ¸*rDD˜TÊrüd$hh4±’ßfOðBTtÌü|}|8}®(%ü(ê\y>‰&®©Ht‚UîbÀãÂ<ò3, áÝKtíê¡.¼µïHÙ $ÞïÔYÖf½ê\v~\)Ê^^¶üûuá]^ynìÀ¿ØÛ/LÙÌ”Éó˜ ãâʯ¾‘P¯´žêÚ(À'#CßÂhÈ-÷{ð©ºÅ‡ñåFâ!/a­ë“½ˆmØöƒž˜­ù ŠŒÄ¬Ú0EÏÕÞZZ?·T|Zí4ï›ñC÷…x¡a³Á¸v•í\0øtqŽýõ••¸ÄHáÙË‹É/¶ÝÏn)Ä¿Øiò½aü€Â“´jlÔ…–ÊË‚£þCAA¡A<^p_B·;F(‰RÞÒ‘ûëlÍoxMþ2•F• [9Ý迾^‹‰KMÅÀR{> Öc~>s¶ÔKž:¯‹W·WG1mmRS•¶˜÷[/0#¾&ÎvT*Sêÿäçr0û­ ² ƒêøáªe(cŸ€õe³Yÿt/ –>1qðB½;ÅEeyYYfÒÍÅñ1¦Ž×DZH9[ò‹M¢Ø ›"GFTÉ©ÿo/€©©évÃÐ Ùõ…VK:_,1+pNø‚A3ü ¦Xü|4é°øëË'µ9Çîâw_|Û’¹>¸½èZYê"o³dd%%…ø=Ü~yMÎSÿ›â—LJ»µÕΈü÷ÄÄìz¡55‚ïÌCÀÊý¡_ïöDÎ~”î,±Æ ŒÅ©DLíbL¨]€—£ ¤Ôû\º&ïÞûÒT¬“eyÔ>~{‘êzõaŠˆ˜Øxºäã|oßéäû•ñßêhØØ ÒžtQØ'Ü ÙJÓÕ¹±[J x¥\MïíN´üThãðô £ÁåóAí¿4­wï“)&®ÆÑ¬®(~“ÁŠ^n¼š.õ ~ȃµu\MÛ XKÛØ°Âßc}ÝÔcO$ZbÉK—%¾w—D§Â¬‘l!)ý1eiͱ¢Mº|·7•š @¬“ZÁÄõJ §ÇñòEcpy€h><)!¦i²"õÀöù ˜yÔ³•í"î5k lL×»s°ë×…iT¢s˜\–#´A!!ÒŒÙÞÊg›-‰l›:WZ¯f‚Û¯ {ý§9u«Ê5Ï'ß`%&&ÇÑ˯‚ EtÞ¥ùÃZ‹c©4'´5Î?N1›vyðEßÿr_ •^XX÷ØZäW0k/.ø8çœÖ{ðy?ýCâââ ,*ÖŠ MÉamkô††à´YPSRÂVÚ—’CI£Apˆ•x¼Fó:_W‚-[ïŽèç·Ú)Wáìf>1ïuIèæ««KŽ‚MzðmÛwÒq))aW‹Þ¸T"n„¢ÿ ɶñ–8œ̦K?7>ž¬µU—›È¿}9\Ovò(‰‡s‚+ìÖ©¤…ë­Až£¸mâ¥Ó­ŠýD441ÙÙ´¬ ÉÖŸ-d IHBÀÂ7L>VÚãî/ ÷ ¦½“„pº¾* {~>­7d÷8ñ'Œ‚Ÿ†)±Îü¸?]z½[Pœ­ñ 9Æz‰ZЛ8¿å×"[´DFîô€{x` ãî¨9†˜M7ùoZ6£ˆß½ ˆTM¾wNŒÝ^¥ëÓ úË}¯ðž!°²ûDfP¥]«I7ԄŠTë°‚ßÈÈÀÄ„IMW’±uw ùÆAJÉú¶«ùéó ZÐ-h7ðÀšu¢ ·«È–Œðúü.òÃv®J°E½x}ˤgrw6޶l´Ü†¼bÈ^©|ÉÄàƒ„AÇÊŠuu¸@ Ú5GHÌažEº‘*šr¡Ÿÿî‹ý<(G*­µ‚‚ƒéøù«Úذ)E=ð>£âÊåÈE•¸îiµñPSïwÙïfÅìÛ3OŽ3 h] jiÝ{Læ|žÆ‹GSHHÈcïo5|‹è÷šíãb6˜zÞ´Ž¹1•nµ9OûM½ý’øùÞn¥ÕDÛýÍY\b¢ù=À&óñãs::º‘Ÿ .‡ód o)û€Ú^Dá„?‰-†Ëèƒãâ|Ö |¿1†U8N]ª"¨b|ûjÊnÐj·P÷qk(Coí… J4µ™=yGÆ$†e§åÁç;µ¾wümííj•Vï#©ÅȽ(´AzÈAõ’ Àïº8Ûv–ˆÉ â´&vX ú”7ÊGÎ?6’‹}¼•ÕÖ­ð š§Ü2]jƒÒB>zWkçäŒj´ójU@ICƒPüñÚ¤HÑÁÎÎF,ÅÂB¨T”›Œa¬YbŽÊ®Ç ¹¡AÔf¾ŸBÀ¬TTeC>¶ï”,©®ð¡Sý­!èuÎ ê•Û9þ":-3tô4’’rªÙy*3ã¾>¢K‚îîF#´{i§Å¡GS’è€'»€ h€Ÿk­–³„¡á?%«~êòÑ>‡L7y<ù¶ŒÜ-B¶ÄnA~ULtt4|¯#»ÒªˆôEV›±ãŽî¶/…Rzž‡a777ÓÕö4—s¨€ƒ««ìë×hä|VArQäÏ™™Ñ°Éyñ|¡¿5VÁÀ€Z³í¬8žI…Üõ(°QŒÓ ƒÓ9w'b#_£EËbè?èÇ‘ ‡ŒðW7Œ„¢”„YÙ碢zªñ_Ÿ±³·„Ò¢•Úµle•«”žmB$H§™¶gffàÐyy¸pw´î$d5ñç (è99ñÞÿÑüöê=àïï/(""ý]µeb‚È©–’šš:ö5CÏÀ@â¯60– ÄedDUTðþüùst~mí!¸' û\cWãvjéM°îTÕþx6<Èã›™Ú÷Õ)z¬˜~Œiý<¨þ%6— ÒS½év—¥P·2ÜZ¯Ñ«eò/ô3 ²ë×j#§¯ðñAuKqs¢½\6«â¯g $íœ(Њºë cùAC3þÛ$“ôküÌ`–{m®£ »:fà4Š0²ª$¨°0ż/×›nbÈÚ£9G›W1°L™©Eú%°)REèÎÐÑŒØþ>ÝF0ÊlÖÜ”¥Šy/Ü êÕÝh½åElé%vKyñâ…ñíùŽ^Z:%åã¾2ZKbÀ ó%﫲¯eõn¥·§Uo_˜P±1©˜§m ÔÆœêWa¹¯"-ÕÀþ£6Eí'©îcVðµ_«©ÅIª?ºî–è?F‘‡’–Z=Cß;ùK›Ô­Œ+#x_²²›ÑC‚?ßi²~êÁ3šæì×fYªŠb4Î<‰ÂDÿø¤Iì|NÆ÷ÅÔÀs?Zìíˆãɪl‘#½|Ù'iŒöØðîÞ°†,7·ví\‡Œ¦ÕõŽº³|w÷ÑöH€Ò_\òq¾ózË î3_q™˜4—¾»Ù:®ÒM†<ƒaÀOx5^Ŧ¤¼ôˆSÐ_œC:ô¹¨˜~êÉÚL–ý’ùdFC2²Í¨b^yùlžl}7Ê"iÔþÍN_¡zuE^®U‹G›/µ;ÕŒÚA‘¹9œ“åwfýðW—äÞ²_ ÷bäÉaWÙ‰{rß9+b8lbÕÿÖoðó? 7 Ï”‚@lè­n Åý>£Øðä0’¼Š 5ªDTÞ“¢ƒÌV!×¹pù>§3¾a†”¨r¼ À‹êËÓš{ÇLJ3qÆú^ìœ /ml@®K×—[—šgŽŽ–,bÌÌJWù‡3K ß¼¨ÔÓŸI­ª™û¹µÒÊ_¤Y4`°öMkºøýŸ’¥cL+‘XF«2°r(ÓüütÞãî„,zÄ4 ØÄÊå´Â·‚ƒN÷°´;ºT…|“Y_14ž €G­8³–¾ ü¡¯ eF ¤ÄõññaæIEªâ{µ‡XaiZ‚ ]@[Kg:åòÓ#.ŽùÁGôç¹ZÿZ‹Õ™šÒšßvuE’~œM“PéýÈ¥³vW)¤â½/"HkR++0lÆ+Q?¬óÝÎTN"LxßõÜv;&•$ÿšSÛ/òîü¸r^¸.Iy< ”† “*B.e³”)V¸(÷îÙRM6m•d‰"‘ãê«7Ô%ÖCw âIIà¼Y pyP½Èíwà.…–­QæÔ$æ}úí¬²ü.O9ॠ§¨Z¡^o´Û³=Yt(2CÜq5ó„¥öUsë;=TÅÝ¿­„Îþk7á–ñïá DÍbbƒîÖövésâáÎ@ú ýŽ—†¼Ïç|EúòSŽ ÛÛ<ãšdÒl‚Gƪ®(1d x{½ž¢©lº¤BAýŸª`×P§c#ÙkZ¸:“ð28ƒ :Æâ‹ºf¡Q9bÞ †ö·ÁÄ›Wt³så/ÄQJvüÕ{‡Ì…xNÞ¡b‘Â@ñ­Q ©ÔÐòº¤ÔVOoĵ®R•ó†r09R‚”3`{S²è1xiÎäiUO'òMŽßXí›mo/ûý:Ÿ$úEŸ#©ÿ¤—)Ëh¦ÌÌÁÅ…P@ð;ί )wEŽH5aÇÝÞ]Ú4™¼ ÒàÅLJF·Üœù¬IIÁÐ ´ý‘Õ…Q´«£´•ƒƒ(¥4þ• ÷E|NcBP(oééëäÄáÓOy®o•+½mmmù­¾Ú!ZÙ7„"c^n[[ÛÖ-$Rî(æ]f&¢®ö* C$ FpEÖÎ4 šÏmÅ*Š|dð3à”D w-ƒig1bþÔ–cÁíOFñ †Ò?ê£Ø­S\íØô5›+9®þ{Áÿ÷êLJÌ‹wumM­ÖÉì^NxÿqŽä¸‹Â& Àýõõ¯=¿U‡6Á;üo g¶cÁÅï25ú.'"©ú%´ ÜÊ.ü¾3ùb 7ÝŠÀ§~Ýrç¿½Ž L…ì¨Õù˜Ê²0é4 ß:mãY¿msV¾¹´Ôw8·4Z‘z” ij¾8ù&“àÙuWm}¹IÕû‚ðg‰šäØ"á5þÍÇY'0ŸyLå+O¾’}Ö®;‚ŒöEO`%‹¦Tjl|ö¦ÊýöðñáQcòˆÍ8Øj¼™*èþj«¾t‰ð÷ÃŒMÆHšæßØ„„ óÁÔ0 J|"°8ýý5= åqaÕ3FV»ÝØ_¨™è:Ró5öÞZ2Ʊ֦?¼Å¦@I¾×Ó%/Øíò9ß…oôññéÀŒLFbƒà±¿{)Ò®WÏÏ‚ÒñST<“Šâþô ‚Ïð)HùÂ}íÏò5ˆ.O®H˜Øõ‹ -¾¡abéíïG—©á^ ÌîóË•1„]ý˜¤<ÁïÖD2¿uêf¸m·cã›Ì$H 6ÿL/þmÿHŽ]°]íY~œæ±;OAaí*àï%1šΰ Æ0¥Œ>¿ ×sf jB"2 q© ížèúË£áÜ_ʪ-a¨XˆŠ,Å÷>n”ŽG+Œ õná`:}Ï|þ¾-T6 –éÍC!ôõÀxSMk kØ ']ð¹²OéÜBý~þbŒÄéE–éF9ß3îj1cùû j…„× Éü¶ä ¶Gu_¤±1&²Ä¸Rg+gp6QaKþ[Þ& .è–s‰¶Ü÷‡"cYþ/dòÿ~Pˆ×n¥¤~þ|_»ð%Ëí·8¶÷hl»»á$ ‰¦^E‘7ͬ`IÙ¯µîr¿ Ñq«Kô_b“N xo¾f çÞ‡àlÔ߈•Îp©'!?~Z©÷­fQ\l,Tà ö   ÿóþi‡°ç.÷jòá|1àT&ámÅé†{¤ŒÑµù«”n¥uijDåÚÚBTÌ%Ðç?a‰OIß?9L ^'¡7(Ìÿh¬Ð4»²ì½)1þ2*M/SŠævÖì¢pLÒSWFœªùòåþÖæÕÇ©~Ó²-6Ÿ ˜ ¼Yt?#‹æx3­ ï¨h+‹?~¤œÉá(Sðÿ]âÀ[Ít‹yAZ•kAþ\u¦³ñZAç`¢+üº·+_zz^Ãwo= “™_•ýŽK’is»UɰÒv/ÿÉíçëf µô~'…uqwË…j.Õ»N'øWZ­vüŠx×Ë{RqŒÑÊÜ‘&_oÇÏôÄað™6jêB¡‘Øç…SB1 ¢š<´‚¤‚Þšéׯ;5AÓYÛæ¶ž‘c`Ñ ’ö“–•icffE´~F…­óØø¦Ö‡6¯0Êë’ˆÙ ¾ k*õ¿oÖð=†4.Ó*†þ ô¼OVZ`b<‰:;6ÚðÁžÙ2Ær?B˜«‚ µi1ÂEr9®Ê¨­Ñ%Æ€?#(\æ É‘+P£Vdü€ƒ†aÌöýeŒï¶ábšÿíMß’žÀÅ´²ÿwPöúÛ,5eØ="Œ@Âøä·i]¹úžJ ½¹ÝÑÈÿÆ:Ãb¦Ù}¤s=ÂõaöIÏ Ú[pÉ÷4ÏŸ~I–yñ‹ÇÀÈøÝólÛBðQtÓ3¥7?@‡µ¤ì‹a5K$ú\&´ùAØ isà#²sÐé…ÙR\Ò§±ïì´üy_È  ¦±è¬||};ÁQÁç•Aݺ“–Ö¡‚PãÒ”UN‹ûj{kJU„E›«?vGŸDYÏ'/ܺÒ4:~Î8ò¿×ž¾¸¼¼Ô®qxÞôpùazfD´Rá ô’„lô)¤Yo»w§,ÔÓEëK!´â™ï%Ò$²uÆFÍßýÈ®¯MÃýpp G‹6‰½”¼ä“bÎKâ+bü¯´Š"ACýÃq­‹hÓ7b±ø„ÛRmÛfšI©oÝå…0Õîè–Jko û+­÷ÏÑ@Lr2»l4-Jóÿø¼Ä Ós‰]¿ŽVHˆ, {gLéüY^Òž‰*à/ù!¦ò™P4†‡GRS—>ûc~ÁüŒ ¨¨€ì´µ£n´¡¸¢ÀZyÌ( jÍÖ‰oß̨¸›«¼üÄ綉(±Ò…•}:¸A­g’ Òú¦ H“ï7·—µVÿ1V->ÿ.ÙÓ×Ó+1îÄHåÃ|ç`ÝnCÎV¢ÐŒ¾N³HHWÎ?%r.6ô ÉaOFý›xŸ^s®V c‹™ÉîWÜxI®ùW÷Ë즥ÈëBâ_a»‚‚%¾µnÄo¯N¢Þ¿š!wÈ‘c £­Êû™n?Wå#ðôÇϤ+ùh3+­?‘ÅÃîñãǯ߾ý™&±"‡‹úº|4n “yKùúÏ{“´ra×Õ¬ÜFç"2akB–R•¬²õ㇫›KŸšúò 22È=ë ÍY-´”·Á:åæ+I†~˜JøˆªF9?…q0¬yml§Ø«Ú§SgfJâ§íl >T—-,àãËáF%O î§ûI!,Õx]€•ã|Ù!äO­]Ÿx ƒ×66F°7UœGÜôS®À¿"dÄL´ôÆ·¨H@´ŠS™™ñoîí›zûÊ_ú˜¨«Ï¼(-áÔ¤ŠÖ&ùžqº=‰ýZ_\™Ýb‰£=¸´‰p”—º$\\PÇÒ.IIÉ׊ŠRÝÑTØÑÓ¢ŠÀ«šBV·.Aîg==œî¼ôßÊN ÕsK¢ôžèœ|¿9»QlvVëO³=Ÿ’qЧK@cä-? 3Db$ám=ujkN%è@kll¬Ú©·ªô©E®Wˆ¤Ó~Hd3ÙÚô\|Í—ÇT@eÔ“W7¯G+Ji¹D]ãÔy]Š¿6SK`9›à;|j9Oš,Jv|FÀÄþüpÑlïAêæÜÌÌJóÓG"«‚¼³’^š48d³””‘\€‡&jD„ÎïQ³~Ø\ugø[½ÎNûöÉ¿û÷Íߣ©L*WÛÛÿúgý}ÉŠ´èC5ñæ øÐ"5)ohÔšþ îܯÄMR{Ï4þh §ñÛ¶Õ8®u`Gj&ÓÌÅÄlx# `ÁëÓ'u½·X†'„Îýý&ïÇ”3y‡Î@±¿#fƒ0Ež¥ÿô±›t«Íå…<ûPQÊè%%W;scÞ¡ïO·Nµ  ’öööZ.ÔUÖ€Ž vŠ÷óùø@6ì Ø„,Û~ð{-qyY£ã¥µjl4öbEÿŸhó0Ð/ˆc3lï·˜ÚddJ~eH<.SƒH`í›~¥¾ù÷C¡ôÂt©M3ÂMÈ»^áëÆGáãí¸cG77h–ø&Xâ$ì€õ$šý••l ~ø׊UÜù›”LãK2Ëy³PïUì˜% ²%¡eèKw &­ÚïwŒESÍîGY³YY=id1wÝÉ¿(Øä¤÷  ‡š¨³€O)¨¤ƒö±}1Rb›Öúq&Áû †C¥*‘YÑÔ´ï\ç ™^/—Šcƈۋ=z.®80îRè0êɆß2¯ŒÜW(/'¼õÿßâÛd΀½±ÅN77áW?È>¿ûÝxä]lÐØw1ÏÎÎn {J̯¼r UKæ9Ÿ®µQz£¼Ë÷–¨‚©…¯©$†àñ¿|ZœïX^®óþ-(*îàj9_·òG>0ùàg‹rgJËÁxQ fÝÐà ¶¡ß #hÐG·ýQ‚úzŒ(~ÑÑÏö °:ï!ÙŸÆr7¼ ÖÏ+x5-sõEŒv5–'´n²DÄ©-§c<¶nέ00¦»z$?©¤ Â>#¾IGÁ2{Ú<Ÿ2ôÉÓ_w]ñ—_o’ÞaÇÁÀ)¶:/ÄÌ®‡wßEÎ'ecú9‚HBBR”l7oô )†’ë%ßö,+-ô?lN÷öàPŽßÖ1Ò¼jh˜ž}„A€#ooós'‹¥ôºBŸ+´ŠË‚E%{ЉªF‹)Y„åœ7±Jì2ŽÍU§kés•3^Ù% 2üow¾.[aElxÍž´6(°Ä›ïUÃÿ ­_ÚV²ã`‹‹‰ÁeÄÝ\[Sß\*˜à¸’Œ}==~>þúp{_켎–†“%6wíÍÀ*+ƒTÕgˆ`„Þ~}ËËtDÿ¥ â~Zyl;žÿìÙ³‘*Û ú™=e¨¸´Dº„°Æ€­‰ûûû õ뉋N1¦¦åc`ï ®­Q-­ W‡.ngED¬Ú45Ó‹Š@çŠõ"T‘± ’^?¸#Vªêè,Õ8úç³êxÅžöÝë:}ñ“˜5›¸©ã\1î{ˆW09“cV(º¼|÷V%¢Gž„³ÓôÛ–:×Û´|Ë‚‰øoß:/Rg×·¶r^÷§74 KâàìíQØéy/¾k–§)çȵdŠù˜°I‚lXe{3Ë“ärLÁƒ²<ÿÎØ%õ©ò8*Ï —‹–€6 ŧ‡ƒ }R6á!¹œÙµØG‭Õx~À`š€ÉèÙãËËMrï+öã³a›XUÆã,ÿ¯o¯lm˜m‡AHÑ€7ñ§Tå,CøDÅl©¶c‹ªO¸_ç3“ l±qfS.ó‹šÚæo3(˜ϧ£ÿ~˜¹ÊÁþóüùsP‚óöíûTüûËú{Ný؉›89Äú³­Ú!JA]^ªÏð —ÚÆáF/?]Ö2˜öä§7—w‰%ºú’%¯ÓŒ {›ŠêÆî›Û~¿'·j-·?%(µ©ŽññïM”vZ š /¹âìõ½XVç…éÂ+x'ûWûˆVLä¢È¿°}¨²\àU ýòJïÑ|À8lÇAáãsÊ(^LÕ¶…*8TÙ-ô-\3ˆQM—LàxœHtFù’sô×:oõá³9Kö?¢ãâ¶gÇðýÝýÜìs½¾vòái÷¦ê»¡ê_RúÞýkµŸæ|¤O0®qüqkCr‘ë4`¼¦Ë-páåoaaQT ƒP~NJA®ï’|싸™±¶ÜúÙL\3SÊîÝË=]3Œ–K|àÎE¿˜šÓ¿éxÍÒ¸î"Þh9¬»;äý¹õ„bÃtÐ+£­O+½\Á ð½=ÇÙ[X¦=çþèwÒ!ÚIPü„qø~8÷ÞÅ@Ú—a¾ï¼aK“6ækkX²‘Êø½/÷%‹ »ò×wwzùë±ÉÚ–šÅ9pÑpQg«Q+ ß%w eØôeåQ²«§œW㲆_©.°Ük($±ëÇÆÆÂê\÷Â)(Ÿ¿Éûݶ$ÛÍuâ6ùg itCDm:ÜNÞßîçÔ >?/ Ê¶­ÓÌ5Ziû‚b{ÝÛ××6[i])n7ð„þsÅYŒ˜_:®-gÜ4¦ŽÐñºŽbv®üYKâH+®Ñ“f!³·¿‚Ž¢îu‘~ý¤eå ´R¤D$¿ù/ÁsNx££{R8%·üËM\*Œ±±±;Q9}o]Š*5¢‚©xƪžÃApï³/ħ]fŠÎ]Aø§X3Šè7× 7uJ>ŒåÆbB¸‡È¦…ö‡QÓoÊ=ð¿+Æ‘6¢Û&!d0°e70M{º¤wptlíûÆÂå¼ùö5óò'Ÿ1’%’Q8@™¸?Š2}$âûØÐúÙU<ä¡7>6-ßL_á„Ä»µögoËûdµSÐë<yK·Ö‰ñk||¥øâdS« „\%¥`¹Ž§¦‘_˜õ½ä¿±ÚšÎ6 É@§!w$1 S𫯴_ùPn®ÔÑÕµz1eWìAðNø_uG¤ „”y¹îܾÎ ­"SMƒ“ú‹(˜$ìAyø-¯àpC»Þm\Çukss5;IÒÔôç¤uzÆ Š(×KÂÂÁãë›Jܨ`¥OSݳäoÜøçŠ9í( ]¥,,ø >¢oø@4G,@?!† f©¤”‚ÕÄF£ d2¬äw†º1Ÿ®^Šø·SB¶KvÉA^¥n-ùj9} Óò¿Þ}<˜­„O?bá» T &j@ˆƒïkç2éÚ¾_ÇØ>”åXç÷±´ÌÙ—›Â®øÔßMëzg‰ûtŸö9]²Ž4‰÷®MhéÜ':-½UøØ×Ò•Ûkš,äü~É™àÉá?†Ž¾äÚËݘÿOÆB‚‚׿º+¿…VB”Ò¤rÿú¤Ë&8oe_žî÷ !¡î‰¶«³& ¯¬èâûBÀ¤ d×gÃQ—éŒ{5RžÞå9Þ›‚‡×\xÖÚÝ2¸¸UòFÿšVeɱ?l=]›4a¿{9òñnU¿ ¯?…gÿúçˆI¸üpïlµ=‡‘ oø»ú·*ßn¡ãõîöu[-R~a\=GKS~g¨Ù>|ùOÕ´§'’™^Ê"n¤|âu+Û2ż9½/mr|É×H ‰Í3Ó$€ëÛ2¾sqßie/êáÌõðë.ì&ÿþÁü´… 3ÓšëEö|G~Ç›ÍßSLüß§8^ ÷ _Œ!EÚçO¬ï‹Eí—¡S"Ó/ÿð0V"‚:ú[)¾Éíl³P:CH5Ú}‘ˆ¦m¥} © AŠI¹$Ê/=„Iµš=íT`¿÷´§Ï˜ÍçÂæ‹go¶äg<**%6…/Ò ~¨m+ኌÀ˜·TΚM+Ñew4cÕéÝÊWðA糞¤åäT=Ÿ*Pñ½­&µƒËaìóûnü³3AØæ NÁ"ɧǩÖbiÔÉÿ¯³¯Œ‹"ú÷ºa é. •n¤CiiéîÞ–I) ¥»Aº¤»‘–îgöï›ûæy>÷ÙW»;3gfÎùý¾1{~g#”ØT8Aõ|yxRwüUÜO€”K#Ç(³‚T,)—Vžûwëð»ÃE—Èì^†¿&K ÷›ÈˆY_Ã^çqmýù‰‚aðËÝÓ¨Y`˜8€ÞsªäÝ‹¬Czþ¤Åîe¨ÉÕ˜¬F8S(þÚs/Œ6"«áòõHi5ΫÛ[„á÷>ìÁ‹‚àX9¹l}¨ ež´ÙµF*Ö`S7”ÇÒjš<_}Î29<ŽúýçÏ·­A0a‚ÇæËœ†cÊAÒ9·‰î‹?@üÖ‘Dº•£]ù&ðM€G…ìwqí4÷œœúÔ1©7- jeD­À‹„CiüÄ‚Bfžº·ŽŒà]c6q¾¥ÿsrRPo,nÝ_ÿóIµ†N¾²~¯’«ëJŸ_ÊóxÐ V÷ÿ"èDkè‘(HÚ9„G.ž¶¨Çu½õømÚØü)‰~ÝVVI½ñh…É™É>b®@ÐÃ=WnO{?a™~Ï4–ý#¥üþ#±OËÃc†aÌ]à½{ŒÇ»ºáÑrÙ§IÊ/@ G-⎂Ž÷rGÄ•è6Ë7LVÈØhÇ7{ûÕ0½7žÈÈ3òÑÝ>2 õS·¡µÇ5uu½ˆ:9ŸÓ- é‡p×rxØ&Ç :Ë/ak“ì-haƒC ÿÿDÊÕ ö‚z©jfú€HWOwù²AnÒlE­xÔ-V‹[²¡·Õ‘ð€Œ¹Î2ÜL""”2a¸B-Æej¥JÂ@˜ž£KQT''úv¾úM>º,V¢²¾øz ¼ÏŸ?ƒœr}‚6¶}çcº«éÉqé`Š•;’…±¶šÂzqvÖý™E%Óé¢:/KÍÌ÷ìh¤9pãcŽáÛR¸l¯hþM’jÇ¡ûæë_‡³ÒS“È”Õó1L\¬ ÞýÙrI·_k#ã××׈åf"Âxµ9¡à?æ||Ѭ-ntíS¶$û®¯£ŽÓ¡ @èèFÆC `Èäçíî:ÏV+móƒ¡IÕœËY¦F—Çõo›ÁÙFÝpº8膄i?NkÅ»]†’ñ¥›r5ºw€™[JSne'o¾z³t5Xƒ—„Vl4 `ˆÍoÚ€àöÔEœÆPÀ!X¶WA-Ú0fßÕSd§k}Çší§¯uó~J}©ÒrGˆFƒ“vš!7!aÜr£Ni}÷ÊÊ ¢˜Ü|$SÜzº”fzæÎ*Êò@_ª7ðuUU7 aÐG®}ߨT^+3PÔ9W'JtÃõØçPL£Á„pZ(<ýÜŒ„’ýðaGg2‹ö`mDM2”·WßÇfü‘ÿ ‡Í³‹ÏÊñâ"ÇŒÕÖׂÏä>ÅM—щ=ܚ̵n'nm´?œÙÌdIÜßi·¶²ÙÏ“¢9Ìeg»Yú Ü‹„Å)2#3JËÈœtHš.6z¨ãˆjVíS ÂŒ[‘xKv^@™e~Çë0ãø—~uûˆä#® o€dÏïh{KVÐU4ñj½SýªþLÚ®)xøë ;Öîr N&Þê‡Xº*ÛºÀˆö8ˆ6¥$mŒ’RÜ›GXS“(ˆ2!%ußJ3±ò?X”£ËÄÇKY~WDr­„SÀÎÜuÇS¶·$]7íg+Càä ìÔ•¸\vÕ¢aóä9îwœ¨¿-­ppµÜ'õɼBe¹š`çh§‰Q •TùbXöo…„„Äù¢W:‡¤ó¥Íòsƒðp—°x§¥jää䋆CŠXÑ©œX ÂHžå;«üv´ú»JlTÝN‚hé æ ”xJªO“_EãE½ŸO2>yŸÿ½ÓîÆý è ÅùÖ&áÚ@ ªÄìˆAÒ'ŸkÅÒ»MKÿQññö]y   DUM«ª:¢ œYóñ¤¦·F{ ›ÿúâ/ê¥1ñ]ñq#ïî#³T¿'É%P“TÚåâÙÝÍEè´Ý+ŽjÞ¨øëÛÛõí,è¯4~;õT·„Í\…­Ó X§´®|jA¨¨ZÁ¤4ªL…¨øµÕºƒKØÓà&;j³áºOmÝ¡ÜÒ*j§ø‹õXoç‹g™Å&±ûJ ê†1'Ʋ%a§[C˜;3„¥?uS RÖÖlˆBN0sÜÞ¨Ùñ{¶W~Ø«õò·}¢ñc¯í7ÑGTD¥ã¯hª†&A"é+ dS¹Œµ5w ãÑ ¦IÒ¿Š\œ¥^õÆx_ÌZy'fD%.Cn.—™¬6IøíûŒL ùl<ÄZºVß3É õŽN¨)øû‹¥ : ó < B-6âlrðIuE_¹ñð=YÇ;û a7zžíKtYò¥*Ƙ߿EèFx×  Ú}4/Qd€YN®¼É÷I$Y¶þÅSU©ÀG‰ËÓ¹Åf¬¬±Üøå\Œ—–#aÏGgrötÊŒÅAàA¨ D]äøÄZl‹™^+µõ"åÎäÇŸ7/µÂ?àÈûÝœë fñÔØMsC8¤Ã½]yløz±IŸîmS=}›àš¶*e(²\4“Õ yôQœ–V<2\!vmv0•-ð€ÿpÛíµ²´Ôt©³QEç³á*¶ˆyÜL 1pøºãÍ ª­ÊíCék=l¸RÆ´¢7}n§Gs5œ 'îl©EP€ÉB}æó33¶Öt¼›ë¿ùÄB-5Xe÷‡ÎKKCÃñÕÝUxh‹¶i_¢˜˜Øs§%1ûÅÆ¤ÛïÉ™øö3ížV($^X´ wp]ŸdEæ//?`ë–ã v™|˜=WŠáë÷ R,ÿ¦ö(½áu£p{Ápº›ãâºFiçuÎágV€öò¥l¤zBÚþWe^XUïô •àŒ}ûGâ_%4ôS¸í¡8íiüÅWñZZÚˆˆˆöÁT^†8m7\[ýl 7õޝ¬ mnVhŒ`'¾›ø¾ºš#³ïŽ2¢ ö•tg©ÔnêK>¶èΓÆTR¸ Íq°ayÌE7(ëÝæû@MÍѧҥκÀû›ˆØXâÉôðy,Øõ Q ¥÷9S½8é¡spÂÔäþ‚ÝO¤«'µl¶3qvÅ|¼Ä´ .ðêƒäž=.ûç‡N…ç~ˆ-†˜ŸçDoOïùæûA ؾýÊ´ÉõÔííù^øÎ޵v‰¾Î½t„5¨‘/ÚKOO:uK^“|ôy‚ŽÁÄ/AKqºõê`³‡êa’ýê|+¶ÁÍ£VƒT ‘óáìZߥX°h ÆÊ‡}TR’Ë>£gt«ªB%ìÊÌÈÄTÊàFà<˜PÓÙ\7ÿ¦X¬å2”æÝü'“ÛýÉ6^ÿáÇ>z1=ÏS ¢ FX˜ä§í4Ùº(OÕZ E¥– ®'µüèÝѺAAÔ"m UáòǪF\Q©å‰&»6-íwœ_‘›¡¡««A(}´’´+õñȰõÖ̹'‡8dÒšÚÌšð¹†ÆF³‹ýÙˆOŸdXßÔÿJžÄˆ²X¼q¿¾÷Ò Ö‹@Ô)€,Òâw¹1FŒ€&MËæŸÌÌ5¸º¶‚‚ƒ™Ñ óu¹…¯PJ+>7‹Õóè£>·¬P£(¶*jØNg¿Béîî6=\hp^»ñYGwÞ‰;´ƒÓ&€ßðš™›k¤T= 3tW‚°Ê,²åð'&†5ªÛ“„ß!RÁÅ¥ïj çÛú€ut¹¬°Iʵr¾^üº 'J1_3ŠZ˜QA"5Ì+se­5Þé5”Æïìåųœ@(=Ch¾ømÑ—ù‰€€ZꆴPrœ',ìü12x9ŽÓ~™õCŸƒþ-}@ûw~ÞƒÈÇE‘¾i7·.ÄàÒÒª"º—ð,Á~×}ñKaõ‡†"ÿ€øZkBÍÜoêÚe™¯FÚ tŽœo;ú ÚøøaÓ½t].Šð‹>®pÕ¯" à0µÞ–Z‡zý, ©¯r?˜ÓIÜ~ ÿ‚Á$«* Ó?i4ÿ´£3SÉBÛÓËBZáân í;}JC§°‘«“Â…bŠfÉ+©3‹öޤÇë(b–ˆ¯Tç ·g»!4¢žÙ “0–ޏF¤ä¤È\òĸ©×^2Vn…‹«på²7 ­ìáhÎÂr¾RUåJ³• zš`¸×ïL¤xÄzR3åïQ@ºCwr:rOyÍ*ãí-„Hò0D‹Ø!!‡Îg…‹„´—– Ê¢±1\FÙFØA/zúx‹ê¾‡ž©h\¬ÒV‡äO©Cžµ‰w` >=+!ñ™™1?ß–µžÕKç´?ÍòyŒcW¥X—¥,Q“¥Y:½‰'z"i ‡`ìù/x¬ËWÕ”—Dð¹ ÿkôèJÈW9¹¤ƒÒ{t¡[ÄÒ$eeuŒ°ÿÉ÷Z½,~1::2B ywŒŠ¡û;­Ö¶6ÉZûÙ`,bÖˆipÈ€œ¨¿òl…y¯Ê©lG¾Àê“ô{/›ñâgÚXXc ºâ®Ìã·&Äòrr%a÷»Ϊ¯á¥Fqùß)Ïø@£¶²;ž¯îãC!ÜÝØÜ|sŽ0k'L¹î\QZª-gÛ Õ˜?BãC1E›ttìÃÙð‰¶Ó&!!ãþÂÆ¨ÉZD Š­€ û»€;!0»âÄ©µ3þQƒc =ZR7l}¦™ KH ^òÝãj¼&Ö “¥’Uur±GµH6ÿr)DÖd@ÐŒR“[¿Vö&CØÛy 5“û]0H­¨)yíÐ>ˆÐÁ,“Y<.2ŠöÌ4½}|ŠÛüž^‡í{§#oH •Í­Â$Ž­çò—žÕç0óH8µáÕ™ KKÛ‡ä7›à€Z²¯Š@&¯¦#â0¿ÒjŸú‘‘±[¿¦3÷ ù.«=Lo¤Ámõ~Lu—K ³HDQFII‹ÖûÚ¥=1Òg07÷j,FưQ6ÅtIº]“@¬èvs/n c^ôq«Ù˜ˆ¦ˆ^¨Ê½ŸøÞÈ3n­¾ÛE°ZÐd̈þ›V”´(]àÕæçŽo8ñÓIçìŽL† 9¨¨Õȸ‚õÕt µF +”„ïÓê#^}òœ[ªy)éYçÔå´¡ø54“A¼«¸J}þ¼‘¯?Û ¾Ê£”H†OgÃ{>(^ÝÝÅ5úðºÞ^Uq±Rn ©§Æî˜Jœr|ßžXV>â¼¼ñÒ8µT1_1]4% ‡TÑeÙ÷2LÅ"/"(þ[©JQ|¼:VátY½+¨ŸÊhj[÷a2Ôˆ†xúõ µx'Z¾|3šÏ)GïªVxmˆ,øBíã#í¦,)±…©%ñï0Ô¾P0tÏQnîF@vWT×r}‰l ¥‰¹½øHNñBÛ¥DY[ÊÏt{FÏ{ø«]p!&ÃÈzTÚäÔQá?²YO«“Ï&<=8}ã.“–ÎiæÞ éñø»âbÁ<‰ü¨Kâ\­´IÀú‚2ï=F çð•âYÍö§SÇæMÓ6Ø=e†X±G­ësçe -»ð#AÅ@T Ã×þê\ÅRÕ=…ýZ¢%¨s"[ð‰ƒÐóü1X?Ûà¹÷i‡!¹ø! 3/‹HRZB@Î(Õ9~~}{L'Am\e%“–Àdƒ¿Eµ¢Q 6%Æ×i%lœU^ʯ¸ôpkD‰“:Ï!à "æ“Àá¨-'aÙnPCé¸7•ãšÂíœ3Lš_îã&ö®‘„2õõ¶‡çåaÎx@e„'Á°¥×W`g<­íëO8QX9üþ¡&I\潇Kâ„LÌbÿ=ånÈLvZ†mŽŒë—ìƒ#À> eåá#aWRê;ZHµËXwjc(÷óò8ų  `”S𶈥è²ô8;ÎŒíG#–~ [qs=dòÏÏx/îIUÕà^¥ÈÈ•ZÛ'^;@,]`¶l;²Å`Zh'ëwc¦¡þo¹Að8hjö·ÏŠqâþBšžÒ¯ŠðoÝ\W*,°~T;à”ÍV½÷ÚŽQ|EÀçéé]éΑ2·Ñ¡`f°FFBÌðØ Wu~®%sõ}Ö:þ7Î|}mŸk:]Š˜õ¡Úä%£iøL3O–êÃf¿÷Í¢W#fx‚6È` )˜¢ÜB>/i÷—¢ïT¿^õÚñ9‹¹¢¶:µE¿•–^¹Ÿµr HSOS7NáîÛ]6Ùæ›œ¨ÄcØVúÜúèÄßì•yWÚSh?< ‹‡ó1¡”R À·™ˆ(XyuÕYY5ŒYr¹oìóøK‰kÙíL|%—^‡|ïeáÄcÃI ¢¾ƒYb‚‹C¹)8–ïHÚ£ß ·Am»×? m‡)Ü@§V¬i<ªìzïøÆ©R:ED•½Ñ ŸtU˜³F†ANs/Ý Ÿ™±ñ¤ ¦p„ÛéäâÛ‡i¼ý/i2¼^Ú¾¢ˆ6ŒYKã×Ðn“ˆ¤ä3m›ú‰QÓÔ4fœËøYÒÆA#bm¨q}µòpÔ–.Ä!ý:×}忨,c¤2×û”¸Èâ«?oøçsÂ(–Ì2‘).ÿn>…-Iݰ Ävœ$ô¤‡¶R#*9½oõª4 ˆ^ӯɮ¨ã¹´ÓEíïOÒÐ.£%IáI¹®ßÿM¬øï4ÇÅÏÅì ,€0 36…'„Ûâù…á¯q$$ä÷±´¯v© è¶y>¼$y[ó­ÑÑPäÞÅFuttÊûs‡ —ÏÕí€(B3æÌxÀŸ7”uì\︈=MÅ@Ö$[®ŒÖdPjFÒ b¢ÌÇš¹Å¯,h{•yÙ$~ôdŒ%÷ÑŠß§òÎñÄ)fÇOÑIc²ÝR¶ªiðAÁexW‘èÅ‚NAi`ù!õº%+µj&¼ëwÂã]þë°5Û?êˆ+¤”lòdûaðÖ›˜Ù._·ëí§7·ðηqj ’Ó;XóTÇyþyš$px6=3*‚{»ÂWë½x2.ŽÕî}’°¼uxá ô”¹Ö?MvM#R^æyp¦;T%pa5Ün7L=cÒ\x9w'àðBÈÐM©Ž,%Ÿ«N¦²ONŽ¢ÖÏ÷ÐÆŒ‹ÃPЩ¶ØÖÖƒú©ëü@½ýbòC»¼É+–åwâ¼M«§“¶¶:m.…–îïºeT—[ûƺ u@©ŽÙõ±\N‰±ä޼½›³S¼Ý îj%’æ@¥’¤*sçm ¥·Õ÷Ã÷&ºŸGá ÑŠ¢#BôlÞ)NÜ×âlz´o“ _>pº´Ïi™VŽßvgQŠí÷Hø3qšÊ§jô}°Åƒù‘!0w‘寖4›Vgïé*ńʫ^‹éYä¢$rDʵÆòGî­BñÿÌBùs¶vã¡›µ2Ê ”!ᨠ'Ê'Šéí:¹rlÌáä”]œ^ª‰õN>¬+žßÓ³B„„b¢@fs“en"mmþ(·æ¼–v~äßÉW[yJq›'ÝX FFÙÞ°Pä}õòsg§«Ú<•ôú|µ+^Ø…1ñá ýŒ¢% ±€U‘:ŸªjßÞ8šQ#ýÁ^Ù*(à ‰ˆV2âèÿ>u7×jjb²Û×é][@w6bF™Äa«0¥0µ™+lxíGT«I†ª¼Æ5dbʹ:Us ÿ®ãrþ·V‚z–IAú`ÍìГA”ëÒí#¢©Â‹]ÖWœoøæ¯¡;}Ç%>/kuQa†2?/ šÈà8ȼ“½,æ ,ÇØó³åpHª­ƒÎÔ$‚î:P„ŽæÐRfôظ^¾Ãµ}ûvÃã0jÌÁå &c&89 ßÉ.6¤H%~Êè¶&;³Øˆ¶½Ø´Z •³v»÷ç§þ b¹W¯Ø¬ÿ`_—èçà·à·vÒ¹d’ÐÆûJmåW#µHqZé§O*¸Ï¦óðž ·“£Ö"š9¿½*YƒFN7Æ]|î(FZážš¾X6"¯‚Rª÷­<Ç)eÚ¸Œ0û o.†gþQÔE¡Ðg©ÜÞ¿3"_NQ—âU±?Rv¡;Ó®:Œý߉÷ÂéI/æñ¥TýlÛóv-ðÂ=±á_gšqÞô ­X.]T <Öþ•í_£‹[7\f§cºV«Ÿ ø› •Ïx»VÙÃîöÚ8dxºÊX Ae-âIR•±Zwe±¹â¦"/ÌmSÜŒqÝ2]?¼’\oy´òzlòlÿ¢{¡#Üæ)¿7ënìáE‡yBwN؃ª+ïÇ‚6»å)Ÿ»“"¨Anw¿ ±[§_À’:Ki:´3uv3tü¸¹¹±[ØZ9Úa·s4K?"@NRLÍ=ã0ÓÍÿòé—~J¦³ªº…˜¨ä—?êj®b*&vH¤˜„ö4ÌÐ=%±vî>nô˜ø—Aæüœš$¦8Ze\ô%‹´Í£ë_E)Ëòé™VNJÔ\ƒK[Gªg¾>ËÙ×Û~0ì†H~ý³%9ÆÇ›8O¬ðtaIüreØöÑú ÕÑLÞüÞèt9«(Å 8h˜(س8«%+¡nœ˜!†îÇiD‡Æ$ÈR¾¾Rþy0NL§Œï»H%%%,EŠ™–þN±¢]2rÀW¿UUì™Æ9³é1¦ˆ½ÊPù€%ÛPðwØTBLÌßXä°/ÌÉ18+Êömö<^nã!À;!¯Á‡÷G“Kª&97dj›Ù* ûŒÚlÍŠ÷YÌŸ «1òaÁ" þ«Z8ŒÙàææv8Ö8;?ÿÌõFKYùDëîêð)ˆê+æšü¤£ur§g~/P6ÑÚ*¤ÉJ¤L€”$T§…•$¼³S+QE:==3ç1 ùžªX$x³_Ù1"+/nl7h§Ï‡?Lx ¤ñÙ Uš¬bmÙÊ¡ {ÞJ¢³¿ÌVœ´½˜éLŸªŠŽ%[”Î1˺bå\訂IÿiÓÐÐûÅ6¯”¶É/!†Ò"ÿ-45lUS3ÆËÅÃQ[ õ Â=ÂçÔ€¨¿!Yìî^Søø%Éo¹¿¢㱜þ–8ˆð~bžš^ñ½c³è ÁJBç OGþñ3ðRuܳäZ5ÿnq†™):`ŠlêDåèäDÙÏÁ€\]]i,Uàv{¶¥t¼ÒÑ!B@H{‚;÷òu²Ö®‰V¹ë­»¡ˆþ/y/‹"æ¬sÒoV«IÚÁø¸ùæá6àÙFÅk9)êé)PS[ËR¬VšÔñp¥=ºÐ`×1]k6굺k ³Önªìfoþ¸òxæ±±ëþûu8Šz §sXA¶—ò·ú)nç¿ð»¶rnˆ²¢ã+c'9>~ ó§Ò*‡ÀeBu¡³Ñ,Æ\w*Zrˆ“ê™5¤5Uu䉈µ·±rzM+mGÐz´Ø´1±Ýh|ý¯Æ^×óˆÏV$;R™ Qz„Ð?#ƒbüt¤W´ljÝ…JTS“„$¤¤dÜüêh¥ãéÜãüïîìÏ  1F /Þ±'İģñ›Êúbv•±qµ&çNRõ·‡ÊEŸŸÄ9¯×º%Æ`›[[Ί%/³×ãöž"£šN ™ßãÓÓÿ`@‰‘Sd#cã.Î(²Î–ØwW³_¿~?`s¿’ˆR¥0á+v q_¾œ¬{댰SÒäúãÄþ5>çµ­HIN‰y‡lTV'\cœNxșԓʬ;¶½5cа  ¤$çß¾'Ž$õ6*Ó+íY6"8ñZ«œhªôS b‚”Êð¥çCõää¤F®3ŠNÞ$*€d0aì)¤'ýŠŒ³ýg¿j¬ókþí›,[™ ¾Ík7½Ó»Üžû ÍŒâqêúoiyWÅî#±}QÛD^T¹ <;ëÂŒ³@„9G<:òø:ýÜc GCRï¥Zm$%)#høÍ>IþòðñáNÃz¶Š–"—@¡ÆJa¡¨›š¤­~’íϧ[òëÌá,‹rë‚à±2• yáÔ¶Ö¤Ï3ýoÅ$52 C,ײ€?#ý±ñâ쌎@ÑØNæåia=¡/œ“QˆºáE–NEO/룓¨9w*.1ñ¯vj\||'ûí‘ÌØš†­‰l.ù$(”@Ô܉WŒòótB( ¾ÛV²iX8ý×Bmô»9¿ñ³“@6÷EùqBý¢,-|s c®7íÞÕufÝc7¦XÉ ð6d-Ìÿâ² räŒÐðñ!B€=2ÌPò|fìw#Cqkð·È+ÔŸçñàÀÚ™ò E™]?M¾iÀ…Ø´wo¶N‡žm¬‡þ}¶‚×ZU¶}úIãú•^ýŽ\Šûø˜.®´Œ ½€χÐ2µÒ)PÅÒµßÈç8£½¥bèpe7:ÜO_\‘†¬ä tª–dmr©]Ù]̼øñdIöï½ëЪqâ˜ãÈéè>À/Ò°{ÉT Õãùqo“K|%Èg3Oðk9B[¿4ŠN‚»IM†î^Ã%æ>d÷™ž‰õ d’ÆÞxjM¥úÔÓÛÅ£/Ä÷XC©«ŸV[‡âVùòöúõâ»Ð¢WãëæB÷‹x¡v"A¹Ð;;º{·í®S‰,/ó¤S I6··[îxEIÈÉ1ÊÕ1Ò¾kËÈÈP/·¸ÌÀå©!4ÆKaY¨Þö“/ì•r`«2‚Q+úlOfµï]ÇÍsxå©>®ý¾ˆm Œf!¦efþ}h%[71¢ekFÈà…Õ»Ã$ß'˜lHòm˜Á a‘”Ù„™‹‹Ëz]9C«|93-MOÞ-çÀÕÁCýzªÍJ„IÂE¤O9Ø¿$ÐvCiFÔBøiäGçdV4—[?#ÕŒ:î÷“ä͉nîÎáÉÂâõc‘•õšÓ–=4Ѓ¾}#ã)W)QËÕïÖmÅÇLC, yC‡ ÛPRP›ã—´Õy½èxœû7•AöߊdëdeŠÆL"ßêzlʼt5žpÄ‹TM‡¼n6¢õÆÕßʹò…â…ò ½œCž—{‡Ø[¢©xMÕó°O‡´Î¾<ŠjÇ(ÚMd ¿v&8rv‡M ~ü#ÂÚW@A|—»iøŽX5 g9\¦½¯Ž^´Mû®ÒîíÁÇ>Æ- ðo¬B·%ÍÉö­ ì#@”F„~¹L©ìSjï› ©„Jï¶{_Lµ¹¸S-Ì”‹£zûâ0ÐZ*ìÝ)̵âÖ“}-ê?–o€’HJJvšpû~sÏTLIç8Î)Öß±3SžpR„ŠØ}sè*¸üí é O¬ïâei lÂÞµAßÝ¡&û¾&Ö*Ÿ.ºÂB!M£Àª'ü¿s'*戀%S§ƒë"F .·{`@vöж??~\ v²avÛÁ;ZD’·?;>Þßì³/}+^¥6ÿBìö³ûIe¡ìý¦K™poÑŒY<Ù‘Ó4¡½Ùd'¡59ÇÝX¦A6#DÍ«aëgS.áÞD÷÷ƒKpqú¢ YáF.ä+ÿÄWÁ¼¼¼œ)K1µ×‰ƒûõ6 –í’©t/“÷ˆ÷6÷···;"F¬DÃbž™Ëƒï’­ÕoÚ=ÊDú£ÉÖj­¼þaè#¬§J…¼’E1 )¢÷7 ‰NF·ô•àß-H¢¥I0‘ÇxrMæ¼®Bln6ìÈXÅ¥àZ²s¥?tKö‡#Æ4þŠ’M®Ò(«b§5k]”Ã…ŸWsuºþ žw7ª¿ä]POé‚–°Ì>Ezo¡5&ðü·‹KD„œö½Ìœ'm´è"å~h -·¢[µÛ`|g|"3¥W%£‘(ôêþ¯¡óOÊ®¬l?IÐg}\mÜpë/Fbâ=u)Öñá OfòYB DDÈ€8^Ø„9ÏÂõÑÒéYDz }¾þ|ÈO>ëò˜™WX¼ŽÉ‹=9}HÆEc Wj‚Ù ŠOT}áP žÆÃ zw.ÀèÀú¸Èž÷ĨëŠl¹ñ&Ëû•ÏrÈ}«Ûñ²-ŒžŽ†‚Ê£Jw¢|ȿѰpè~ÞÆtsâtSùH³»IUF:¥ÄÑw_½Äå2± ÜTQ$KJ£dëë`+ÒQÇ&Œ_µsÞ·ÜÐ%ì&‚¨¨¨äXh¡ d zœóÊcѲpMÄW”l'‘§+Í.ºÿZƒ>5°løÖ1Ī|Y]ÂøS½¶0:Þdì•­3Cñç‰c—ÄVd>É ×.¿Š¥ó]žn, èá´^S)W/ÓMLHà¤úõ™¥h :Î\ìx­NÅÄŸ*ß妞®49¡ŒŠ< 9N½å˜ž›v˜Dò¤£÷À㯌·|î! ·ª†çÙû¤&I{5Fg[¬¨ô€“öÖÑÒ‰šóR¢®VDüÃÔšæ«O1Ä4ÐÍ?Á“ÿf×å&ÄwKÄ/‡‹ª«y^„Gsˆ?w'ÈÐWé~;˜#0é)øØSü)×%Ñó÷)¹ÞÓgv{]¯\‡ÚãàõNÝ×cŸ3ày$¿â²ß@/áyc²ÁV¸P\–]¹ìê…ð¨(IW×z­üqÖ¹&'3_qqqnYÜ@q&­|eW(®,+ÏÉivïaì4$›gʰOŠ{)—ë‡EØ"ïRqÈôõ¿ËýÐEŠñVŸYÇÌôÍ}T)×âUûËïÔº¢?üçÙ¦÷t>]®­ûÕ¬v ä¯Ü¥†›+ ey­/ ißOç­*i¤ýŒŒèÀwn'ã¡f ®’¼Þئúu,Ì™0-&Aþ*Ýÿn{’øÁË )èád¼Wù㆒Ù.•#$Eù ¸°ˆ×¾DJR ½ÿÆ 죺îB¡¦áçŸ);ƃùø²÷}AuÄZñ0‹ày¢49*^õA •ý÷K—ˆ@U–hÔ¸ùb³Ëþ4Š2z5*Ä¾ïæ³ž¿Åßi¹¸Æwç묌eºy¸^Á#"ú;å†öRÕ¨ïu9ÍFÃu¥ 2øðXn)!¶ÓvqéyH EmÕ«\©2ê‹°¿Jzä†Ð˜ vRn˜9È ¶ƒ¤4”É¢çü±r&T3YEÅþ\‰PNÛÅ7½½½7›‚HP¦ 7"€€L£¡Œ&Ä¢ÓsfZŸÏ¡õáL’¿ÞnEHãg”bñ×ÇÕV)*;2É”s£€0ôh uF5oÜÿS™ºáÐ7®Vj÷Ãù:.ûUQp¥ÕH[ Tû‡Úÿ’ GŽá – µÌ† ›‚$8e þöÑ2t}"0ú$¡§Guvv¦¬¬ DöA|…øÒóMi$Ñ}Ì•É- D-0¯0wÑÚù©e^§ªöÎ…' (ßž$Ñ&6HWY³¨‚Çs6¬HHH0 €“‚ÇâE-…@Q“?„oè]Xo=¢ïKÊ—Žræ¨ðk&i˜Ußì^' ­ôÌ]¿ø‹„ªí{ :€Ü:JãI@ÐiZ'Ððt S÷›Çû«„ F aúýÊÇxà)"‹t}˜4Z:(8”^ˆ¬)δ÷a¨8nÞÄQú0(Qd0›Í•c‹ëa²¿‹£8_‡²*¼2*[ 娤î½I¹[öºÜÇAVêqî°Û ûëiíè®*¨AíÜóÌ”ME@YX“½eXä[È~Rþ\Ò»ñ˜û|œ7p±ŽÓKÜ„Ü: ‘ê%F‡HÔf3ކE…Iš˜ v÷ôÌq¯÷E@Rîï½g¯î\öœóìkHŠºBÇ~~¾éÖ†€àÆø«{Ãì»Çó:?`yÅfB¯Ø»eèÿåõüå{2©¾Î“žå$üŽu iöÀu½¬%Ž*-Æ9ƒ:-ŒØÂ.ÎŒäéñ3‰ÉõÚS©ú:3B±$NƒNxîç ¢ß·ÉÊ%jœ©Qaâ’’ˆ³Ðâ?õK‚¸wöÚ>W>¿ä£ÉÞXd ¶H—mù,W¨Jª:YT3] Pàè+x@îÍ죲ÈóagÈpºXx›~KfÿÃéÀÐPÓbâ b ÇošÍåŽqsI==½¶ÒOe¾Ö;Fÿ÷  ˆ¬LNªe;Cî-îscÔˆ;SלdP«ÊÈ;91ÁÔwlX7'JìŠ3kAå­ÑÞHŒbˆª,Âß«¼‡›Žb±ç ´¿þTnP2e –®yÙòõú#øé;¯£q02ceˆÈŒI‰òQÁ9”£V:Pÿø¢i ¹šõ„²Zóê%É#ñšÝgçÁf?1«ìîß9af3 ±ùÆwº=Q–‹¬rJ„äÊ5fÑÞE¶“s84™£*÷)b×øš›ËÒªŒ¯H勿wÚ6pÈÊËÏÿ×`·Âúk0€úE ØÀÁÔÁe¦¢™bÃm~:ØnL ¡(žŠiê´>ü›ÂL}5dó0Ç4t›?t-И_¾-÷Ëí ¬]§\E…ÿ׌ÂlK,ýa$]‰Îˆ‹s`x8šE¿ýÞ8¦U}…(ÊõØI;Uã´†ŒüËQ*ÐJM‡6†þu [‹q›Ó(•ÀfÛÉ]ÅO”q}†ç×Md{™}3·þI#¨ s'Wbü olÎÔ÷àÐ>N¿b(Yžë÷E뉉=ìšCâwGFhOö‚ ù×µÿxt'-¹1'ƒïÌÓBäË‘),s`æ2þ,¨÷¾ãȆePÛ‹Žâ§Q~ßµëõpx)§,*šh®LŽj™Ì>C¢è?Z~~üqóvĸ·t²tÊ¥HàY¬vòz—Ðä¨UnµNÅS–ÊâœDé¾D5äö6ŒÄ±ÝçлÿÊLpÌà6§ªb’û1‰ˆ B]Ð40@ªn#C2L<üXWŽq—%­çd ó^âØÂ³¿æÂܨ,² ³¬K#¾Ýn¸ù±öQYlŒ˜1Ÿ;`¾Þ¢0䯄4¼¢¯Þ;¸RÐãõ^På±=çÆ‘¸µoq ¼å`ýqšÝ£”Tˆ¡AåœTõRì"!,P˜çát¬L^Ûµ×Möñã~)ORú-¡ûWµ zpùriPjjj"¬ è åô7ýÔùŒ¶~„ÆUÇÌ<…ÁÄÈîÒÚ;G¡Xs‡§1:]«½È°£U‘J±-¡óu×E~©r‘_¡ÁéÑv§ÃãÄó, õ¯pÉv”0åêt x²”|`Ë ÈÿÓÅ]qŠâ¿?S¹q¶õçf;ÛÏþöì‹N‡/ejjj£ß“077w\||—ÕÖ…ç;Pp ƒA~üÊ¡Ouzzê¾ê¢üœ£*õ(yAyl®Bc‘“”ªŒ|?cxf‡«ƒ‡ mŸÊx‡+/†×šbß’|ýƒ™ÂÃ`ƒ 6É ï?nÞûpw½tx—ªÊ0£»çW _c|a±íè`‚Á:ãéeÜc/.œFî®®÷/='K>¢\îMI<ü»ϓ˜¬Ô_Q!•-UP19 ^Òƒ‘®ÒTÚÀPûä‘\‰hG™„´ UßZâø¢¨¿ûª¸)«€¢kòå £:îÏ0TUUã23¯­´@Äñ¥øKífƒ#IÄ6Vú‰Åyg r¹?ÃÁÞ»pŒÉDÝޱ*¾ÏQHöµÓAP2Œ¢{Uö= fÈ:4O :§9±ÜæEÚ)BèO ÿw ž^³Õ‹Ïzv•¤!ÿS©šX‘bæ˜eZü‡¬U®ÎsÅáɾ¨ñò4íI%j %âZí‚ÔV¤×у’ ‰©˜Aó2ß`7ª.ŒUÊHCŽ#JÚ!äÚB)''§ÙhO«˜%´{¶]ªŽd9¥òD-þŒ_¬C ÓÀ ‡Ð!•eÏŠJKoL³­Îó®þ&\Ýûtf]›ä=üó'ÏËW¯è¸¸ð¸¸¸v–Û=/÷‚M‡Ó‘ÖuPå‚‚†[6t|~²G,ðÂÐ_•Âä£ý‹Õãƒæàj>§ %‘‚íÑlŽ«7mTî{L9ŸXVOù3fÑô±°­‘®ö¢½qÇ}ãúÃ]¥Ñ혊ˆC/ª/’x ™½q´œ`Š’DŸúÞ¤@¡ÚíZ‘©ªª´ÉËH@õ È›Š!a¬Dˆ°n¼®TšÈjo8þ·7t1Tïö.¾í˜¯6mÃm—àfY::¨{ àèä¿â‡ruˆPo‹ôx8“”ÜkΓâû唯éI®B„±ÍêÚmå 5d7j}N:*‚”JL‡XeŸyQK‰sPEÃ@粚fÊzGÎÇ8lµÑß¹3ÞÙé$X%g Iç÷gÓ†c‘Ã)ÁÈr[Íœ„>ú?–:œFȪ‡Gå òò¶Ÿo²‘$ÜÈ ˆyñ'Ø I”¨ž˜{Äm6’!&.5É`²¸?\@¸»NLvíEõ zû •­Pëå÷½«e•²’èiß«-þ{õ\‰!˜]ÁÄ5øoS#L2ô•åÆ&t…ïƒ%go±TYБȥ€ßo¬¦t½ ü¯H)òjªç%¤Å5Þ××"GÉ`ˆdBê¶ûŽ7Eçl½ ¹Vƒmtµñ¯uYc [è¸Vɹ"‘éh"8ðçφF™¬0TøW¹iîôÏz±Æ‚—gÖ|w'!H;—&›¹vú«ÁÄKw 0Ø$HªÇ.”¯>¤q÷Ÿ0>¸ÇGÒm­c à5‡£ßÜÞ6^lt ym5pâñjü>€qÁU¦Ê4Æ ˆå6ì¦"îty}[2ÝÑu›eÉýÒùlª6¤uí!Ô>ñúÑÔ•çmëÓãÝ·#Šz›…ÅLð˜&—Hg´e÷@ÄûÅ\9|î™}‘G×ÓAÆlƒþ(Ò<á¶2¿\N{ý?¼Ø Ä1/ÔÛìÌVç|ú3Âõº¦J›\+¬sœÌÖU1Ú–Áz5'y¶Å£Ùõ9c`Ý !¾=’Iy}r³“*’I¹Ü²½ÜDO'ëmüÏÙ»›XßÛ¿äcQÄ¢{‰QÑÈÑB¢O—8”FGJÊ?vʲos0‘ËýÄÀyùOBB¢““â"áÑ Š€ Ýg¸N”4ýw¥ì˜žP…úö®œé|Ï—(?ú7Ý_‘Ÿ\ü7‚ÏSéì 5¢Ë™:»NçÇÁ fߤ`±=½Ývlï(6@íñš&-gú¿ž@šC…8Ù.·†-µl,Øu>¸§ñ@b(h__ë0ðËÊÒ|´kâ1@ëÿz %ï¿€îŽ'(‹ú Ÿ ApW ÊF¬È£}o¸æã¿È°TF49Ž6ɄРºÐÆžg(ÆJЋÈQ•nUÞã >Z³ˆÁ]ôìÆ¿2n´êtD²— ~Åœ6\-‘£àP9¿/Ä" ßDÎöRttSMµß“/&•熇!ÒÄöü¯€8ƒõ½©{oHËR †Ö' >E7±µŒídÖ8ZÞ~&€Ä1I@ßû ‹,È+@‘}!4S$Ûd¤©'ŠÔD2e­'Ô;Æû2Çþš=õŒß†ìdÉ­/æ|ìÝf»ÖSd»»£¥Î¯LYºífJÜ÷ƒ ,,ù2±Ë=hxÑiœÏ3=%ñRÇýi¶‹ƒ9ü×f#›l\X@4Yüt‹Ÿßõ¨×:b5{›çeww0FàþY¥®‚À™Èƒ$”ôr?å/"Ól„"ž‘ÓéU8†{wžÉwÚz™ÐÜÚ™ùPt—‡>»‰UÀ 4¯¯BÁׯõŠñ!9WÀûÞÝ…Z'ŒÐa2~Û¨­?)(BÝÇ«ËïÎ õ¼ã1‡:ž„ÇêÊþPÁÐWüžÞiÕYnÍš6$VijF©e}XgÖy®&í[Ât`“µ“±!'T\N-2fœ´ï\vËB‡ ÄnG‹k¢¤WïŽ{vÖŒ`Ú /´Y=Û¨ÂÃÃc>[Bߦn2qhIªí&iÀÝ–îx2±YÔˆ"ÙÎnô¦ž –'÷Rc¼vƒÄüL}m‹Ùs"z ÷¯µ”ts…âF,¶yûü»èbÌö†¶,,h4°Û_À,`mk~OÔ"¾Bd<æ«Krïhù‰Ýïl&öjk½çëè+:B'|Ƨö>Ø-ë»ûFºìvm}+õF}èϺ ¬l“5²4AŸûÌMcPŸBÈ÷p¡á—°í¹Î@$4ï$Äï éêˆÍ“Lòn+>3-‰žÝ1”&ëO)ú oûÝcý#Oh ~ eäï$ÁejAé”w[™nð³­Èeírõ{°çé9Ø_Ñ\z%/ëðAq-91=Îÿæšf5ºìÙQïŸÃx8`²ïOŸÞõ‚)]â­þô;ZmêÐèá\âÍ6ë§Ò82êãK†îînIHWÁËÑQbB)£W:ÓºÈ_˜d.ú–„R¨ Ò .vøQs´ßÐ ?\|T‰™¯“ËÕNÉŽäÌš]I¤ETšk#7_J“œi,Û Ã,0 •Œ¨,Â$á„_ëÑÅ좜 ®Ômég)b'@`ï6ȥиñ¯˜\‰PìÙ&§"sý•ö‚Ž•âx»ÊÁaÚ Ë:ó¹šB;šà)ù¿t×ríÄÐþX”¬ó]r^Ë^m I:·ßl–“4‰eU¼Al-'uµÆ›!tÄd®æËÎt9y…~ÇÈBÅTB8“ÕtXÊôQÈÚö èH Çh"OKíÑ—±"Š5ŽÜ¯ûP.vîWžnï›Áðxùö-bjê}wARî¯3V¥ ».(’¢1o!¿' 4¯_ã۵߾ò½Ý"oOã•Ó¯ûüúIG%R±'}²Â aË»ÕZÄCèžóïR£ÿ›Šý§^üN‘›ïÕˆ„Ìj«mn£-IÑAo! Ž; ¶¹¹hW©"N{“L/_¾”%ó›©è¼J9ExÉÙñúqÙûüƒõr+©záþH¶Ìþ€¬÷ÇÚWsŸk_¡ý»u(ç*7PWrHŠÖ+Nѱjá0ÇbþwýŒÉD¶I±0 Fg›ƒ0Ü!åqKÿQF?¯àññ\Ø`ǧW32CÙ"ÙüÑD{aášKŽHïÓ5Oð—ÛH—½ü%Vùº…JÀÌÙeÍwÞ¬Rq¯¾õ¯%9øÊàèèx2­m·R,Ña™zô>rÊ}°¼TíÜfw$1G·mÃÝ"þl»à÷éÈe’‰ ?>¿nå2Fæ±™¿¹HSµÿ¶ë¼üKí¾8¥Ftzó t”…ö„þ•\„Ôj؆ÙÚ•qmm-CŠWO‹§ï½»Ê>9U ÿ²;BII‰9>°ÑáyÉ\ùûÄ8¶©9×𰳬 a“­ßI ÉÒ?>ÞÙ-»Ö¥!¶¹ÐðþCˆ¶/öûCXÐMOJÏ÷öË8³$èv}óuV\nG:;K™µ´ÝÇ[‘†ã_ÿ7T§5ßF4ÿrçÍé†ÔTT™í—†e¿•»éAøÉlÚÃíÝ HÁò–²´,5N {µ+°Úl”Jè|赞~O¦‘œÏÒñHj cE¦ò´2b§»N#ÈPÈ 0àZ­d±ÊãÇ ši|[JÕÿ»‡Á®»wé!òo‡~y=‹œ¯7×*îÛ·ôLbTß»ŒËè§§¢ õË™NSÌ¢U‹â©x‡fƒ-¥€ÛQ”ÓöÈi}™š $ é^5ЬÏOäËo•BZ7ÍZS,7‘B sfö¹œw”pt—¾³€+Êi1ñr¹¾ÚXWW ½6õGŒÚ´ b'+ƲÇ6eÕ;²¦Å—Äq6 ²[™DsxÜFˆ¤!fMç¯úQÿ¬4€(srµ`GÏÁã²?-edD÷LŸÅÅ0ê¥r¯ÖËiíÆÞÏØŽ_V/gÚ·A·,9¯‰±F=BÃg©Ô—i°]ª²žão/Ê~Åî'.ŽkûÑYà,ÿo祥L.†F“ÏŸt‰ÿBƒÝF0±^gÖ;¯1¥ÆßÒÀ-¸[©&”lß½%Ößï¼ÞÞû/ún×àÁ':ÿ§ƒDs»ÝzH€ÔzÇžzó70µÜ7_‰Ú­ëzÙKIu¨ jΚDÀNC•ù8õl$‰ùÓYOfs³ËþIsNÉñDðê&Ê„<þ@Õ¦{a ×pQÇ¡o5sÖß„}ˆX5iš+‹aªS¥•4K鬚¢±z/-ÒúÇr%â“’‚Á "º›Ã£—¦¢cŒ¡[2ù‚B2kKekwYŽZ9ÙmÃɤA¥ƒÿÂÓã†Æ Â;‹¾­ ¯¿yîƒýÃ?çÃù)Òd…?ɶ\¾@X8¤Þ¥‹ÿÃî—3ÏqïÛ°éàh¹V:×dTUU•£WLk×Ú®—{NÖz<ú©ñ Öó’DØ—AIJs~kv~\¾>ÿë ¾*ã_ØÎ³*[~çTMj=/Áó!º¡!]!úQ †‚üOeê 9‰Hf“rÀ‰Iè;ü»°z¸øïØäJQôôƒ×§?cº÷¦LÄ“í&÷¦2+”TM•E¡éÃ!`¶#±¯¼4"æ‘‘Ô Ò–œ‰Ö·qiò/’Ÿ¯ ±i×÷¡áK–´uÑÑÓ#$¾ú ¾ì•ãÒ@4ûi¹4ÿpþw+~<‚0ðÓ‚×DOÁd±3 Ös4šÑ÷cs¼+,|÷9E/f²’ã—i­áÕÁ\ñ§2"áÇc0!ðîݞ}Þg SÖYNu_ìþ'…ÆCûÉO(UÑg¯K*²÷Îr›u zÌ\ƒ¼ÅŒ½ëmg±é56¥ÀËùë …ÎLJ£ò ²°XFÂÀ™Œ†¸ÔÔp¦ßsÀ„D"ìýÆ÷áRcðö¸=È„â=f±çÛñ\`Ë©t¿‚äË$›°*j¬ISi>ñ6~QPžÓïç]yK<E|‘öýôrF£vTÿ¡³§gPÕù¾¢®°·s}¨0½½Jt„4ÐMÊoÿz_¤Jå§‹q444ó¥æ:¥¿çâ¶[>˜¯ÃØŸ.ïñ'“J»»Êž¶„ýˆýóçÎø‚QŽ^h³Ê}_iFTVä"ÍXAQ‘ñÐ7®Ù?lúù± _öu4K+Þý %¥Ó©(èÒk¢þûïrÿ›ˆŸðßÑlœ:­hÏ˽\±@dóÙ*Úÿ;Ï‚1ÎÐЄúÀ>#±ÿ“gÓùíÖÁôÆe@1K(ü¿"¥”7o™„©¾ ¥Nâ]èûn¢îî;½@¦œ,kvi¯ø¥I†jyc¿ èyò.¶ûhÿ<.L°¬n/þ£Ÿ¦\æO+Vͪí}™4KoP½pøÆãìåóÈÔ~÷ãר÷ýn¿Œ&K“, %3èèÒuõL—ò|=; ÜïrsaRûÞ@²½ÏÂaU&œqŸJõ|¦ìR8wœ_æÛÞØ¯Îè‡kTÙR~î[XùÊ‚r±#–wr8ï‘5ë´W[®ÝwGG/÷ÂØÓè¸ÿË+ЩS±Å ŒC} nIÞ‰o¹%eÑÅV¶ÓI„¶¸Æ{ßæË@¨¿µ°xlßGµI œØà²3»;H¥@¬Ôy_úßC®¢,Úó¥ZNÇMÙ‚ÂÂð«Ë}™ÒO¡¡(kýòhdX\cØ”^µ©’JÀH’í"ÍëÛ%º;G'9.Õ¤’ôqYÓ½¾_‰2™/=Š|}VH󇥿~£Õ£Óɇ¸¾Œ¬ÉX9Æ®ÁüšÕÁôÝœR8Ÿqà=¨ÌW [(¤é™ø&~ZTÙ_2“–Çk½øáí‘ãfç°žÈr³ÎÈ4Ãh-Ní¿£‘:lZ4óÆ-F툔WÞ“‹É£Ö÷Ý®´,©_OÈËï§ ‡/}WÿÉ6õá˜Ð]¢³£&$« váVͶºöGr]ïÎÎ[£–ÛúZë´VSÍp³[\äœe»ã8ßç‹~ Áü= Wɇ‡R½°SR )®Ð•Èg~o±uÜ1(o|þ7|éB>IV5‘1Éßnù% Úy¼‘‘Q•ã–<ÉﱋÎ8"¸ã–ì¼Y¶ð„Xñpº?2Ö@UNökÂE“9î„Æ—IùcÅx\¾J–I‚ÒQP[ü±Èx:Aj:u&Åxü¨š,“±Cªåæ†;lÈ;T ¦‰Ëür ÊœÆ/IØöt~èÝ\y•} ŽRµÛñòl£}©zùÞÒð\)‹,üˆ9îg%¥Ç“«¹É’õ(îàΓ_Ô’?p#c=³6íM¾@’ãÎÆwoVžCoÏ·S˜²Áf…·ä•VRW(·ðqšbÊyãõ{™ª6x8%hWà’„8÷hÕ%è•–}Qà–ÉÑy{=ê³…žªã¼ìçemÍ:]®êÿ¬*ü$²&Œ€£h½D¨ü5½RÖK‘~þÖ; Äô7¹éåFx_÷ 1‘´Ñ›QáýÏhWÆ¿¼QÖ:Ö@Wˆ±Y¨Ï-ÑyAqº{ úçr2A×—ŸMt¬ù^øØÎâÎ6½~s­1-÷÷–ÏæÅ±×‰ØjÝLŒƒ|^¼À[áòl©Ÿkûí¦b¶®S¢º4géèva‡[î±üTê‚î·_°Óž³BÀ,¯F‰¬èUaŠ,­²›œ#ÓJ7R2Âß¡Ô@i ó5z(Qt»j»§;'rR=Ÿ¿¤§ºÑ!ÖÇ3£µ4DU¦X©TC‡ž ‚¹Œûi¸¸¸Ì­È~C憑Y?¡2ÁªÃaNƒÃHË^±/S¼ŸÞá!"qiTàÒªÝ!‹Êû^ïnÜ¢ÿi°Ãß f ÀÃóëôwuÎ,ûò ÷ jÂÉ‹@ÿ^¤l(mÇ“ââüõ2>Žq°Àþt<©·jÿJ1^j×vÉi¶ðUÏàþ§1 Ãó¿Ã§Ätä3¨2Mˆ^©£Ïd½MŸñ„:Ë.6Õ«cÞ¡¿y¤Þ.93‰ªºï<ÝÕ Ã¾‡·<ý§´õü”Ø—Ãî;¹¡Ð3/,410¬ÕÀÕWAào|súø_‘t| þeÑ;‚Û}Ž„&~»,w}ŠÛÙçšÎÏdÓN*;Îʦ,Ÿ/Ëiþ4Ç£"dí JatÄä ÉžIwÓ0ˆþBš(窬Iåò…]ä[+A{…«5êå–-6ŠY¾E%¾fÕoR/×zža¸ê<• ¢Œ–¶ˆòP„ÆL˜)lI0¨…ïxþŠIm¼¡Ò]§ùG|’ÔG"$N=-rPò·»GÚFpÀ°~ù@ÆkT®Ý°>Ș}qÐK+*‹0„uÛ,HÓ]t[¿ÖW­ ÔÚ—hþÛ9_×K®Ù8Æ_·½ÙOÿrŒ±ŽL)šL’ænô/SúÝÖt¾ð2üëãêÁÁÁ°ØØëƒMZqY4Q¯pÿÍŸ< dÿþp¬¿ÄÓS) Ê¬=Ú~¸+8^¨È¼°n˜@ <.)êµ}›>"è^e¶Û*:N ·vR¦^ÖfœÓ­}ñc[Ê*Ü—ˆ†eê³H«x]®!´eC¾—„%ØûÉ7+~áE´Õ^ì¤÷=¯qˆ{‚¼ÅúåjÓ¶¬@%ç jR¹f¨Í‚g;ÙèTÙÄGwŠ(0õ¯¦èç,+‹¯óõù‰rÂg.r”±Ñ†^%PWs ü†ªWl× öX¿z‹0œ®Ý0Ñy´$Ù[ ¾á±‰Ç­¶7h)Äú+&Þ ÏÝ.’ˆMܽ’#>@4òžœ/Æ:Q ˜áø†† ¼Ë:´x[_ Ž5ÚAJ7šd%‹Fãå›f·ã˜þhrÁrN¯û7htí×YOͯڃ>l¥Ybf·°{zÌâŒj!"OÞèÇ >ðϤ °áˆº–tPÿ¢ö{© *»zYµåó3ƒi€öÈñïùü¡‰Ðmeœ]W(ÝíqÅï^ Ìr=EÙ¾{¯NÀé}¾Ž}„a¥x¿c6D#Ƕâ£ñ“.v±Ñ5ZòÌïîCëh:Ò[Í£%z¦¶nö¯z•¿Ì²}B|þAâŽ×ÉáÞÇø¨Dirxó‹uà†'÷ç£Æ+í>$|Öߊ¥ÚÝÀÿ¡ÃDeÊŒfý6q0T·³{@¹Ã×Çûjάo:­Ã9üç@”ÈÚã"‰°Ž¯§ü–’éË$OÁ§‰77î/£ô»^‹Ë“1ï¾4H¸]Ànî`Fââ³[Ž Á"öz:¹œ9ÚÂÖi×¹h¶[i/^ï}±7Y¨˜)ðvY£‚µâm'g÷§6Ï^zT¾ƒŠwžaRáºq=ÿ9ë嘣ÿNºg'~Ú,È–rï¦j3‡¹“%«Jˆ¤Ý{zŒm(1ì y6ÂïÒCì»äsoo+¶± Nð½_¼xñ.‹xûv„˜­É%r(ãoÃöHüMš@%?†c•&«¨jÂÁòx¾ =Þ¸jaú—¨Å¬ÏÑ%¯É]åçð¼~ú=ô‰(æw蟖¡×æ.ÜóÛz~Ó;Dßð ¤új©Šÿ¦%ÀRüû7aÛu<¡Šóô4?]Ò_ïgnÜF/Ú©°ѦA“WʽÍhÖ–Î/·ŸÐë?jK¥È„’A_Ŭ¯‹¶_Éj¡¤Y‚nìɬŸ,Ty0%B f!´:†¨‰50·¾Èo+5bÕhÈ–~½4>´™¿ñO8°¦“•Áõ_7âÄÍ=3Ãf÷{ú¥ÿñn5Çh£?zg¢0r›Q#N’Š‹J,ÇRCâC ädeÁjá2ìFTé88È[„ت(Û®ð+}8ü笑‡-~7qà©ëÕû¹9£/G3¢™ F"©ÛS™SaW±ÏK!Á`R qqèó çÐwÃÄɤŽûèÒÀ=Ö> –q$8lrC=ÿ„D-ýü#SB¢»þ+ ¯ë„5AÛülvµ»µ4 #Ù"Çî6ÜrJQ;´Û‘É›ÛÄlZŽ7öÕ)ޤGª~ϳ:ø‡¾›Ž7Ø­;í7ž>74çKé쪞«CöÌ"P˜5Û*8ü‰»ÝßC¤t)ë,ä±[?k‚Eˆ/·Ü*—¥rÐHjU¦Qù—Ì¡Éy÷E½c3­ê>j‰jð$EœÖÏ ïrÞ=!„® ºqÆç¦§í(ÔÎÂâkØŒJÐHâÄpe½©²PlŸï±,ëŠv1€둹«€ðÇý·w®¬$#œÙG7ÅO·¿Ê¤¥¤ çZh¶¸–›P' gefF‡ã3F4CSØu»½ŽÛP´sÝòÔÍ›Yª"“£¨½ÇF2uõöÚ2:aSFèÇIp ìYûù=xžÞ‡Q½ó¤yû–Ô) ÏÁŠ=ô()PæÅ9p?øJ÷µœåºû³¦òŠÒÓAh¶Ù-R‘DÏ—ï^àãs9ý}¿‰Þ³¬ÓìŒÆÑqÏå¹Çôü­C .0.RôãÄdµ áKÔ ‚Aѽ»7µÎJ®LØéÕ[ňý™ÁßwWá×R2‰>Y“›Û ™ú¯ŸR:tóÇW3Ý–»vÆóÛZà #'( &¦ýW0·±n-¥KÕºñ~ÆKˆøÛ0ål“ã|ƒÝñEãý½wAAÁíÙÖl‡ŸÈè =Ðèulým›nÀ}ÇÓî²Óh81Û\SbÔ¡©È:Y«å§ú-ÒÍ â ÛûÞŸÊôÝJÊ¢ÂÇþóX@¿3¹YccÊ^Jñëíl=Ý2ßeß¿ïz©TÚ˜3Žh6±£QR7ee.¡ã^<ʳ3¡¬“}€v¨îÚìWз U i'ÿ§ß]šO•&¹+ŸÌ¡> Äý€ëL¼P|ƒãä*uºòzÿÅ‹*³QªçKld†_E½…Â÷œ~XQy!î“ñÿùCÿ_‹Æ+‰Ðî÷Ý É|ðµ›ð€pïÔ‚âr¶ápoñÅÚ“jÄ¢¤?b‚û‰½‚f³]ÿè›çNMãAÓ®·vÐ*χXÎ$+žœ>þm°í½L)­OOeZžþYr½ÛzД ÂN}i(õ5—Ï¿‹8­`Нå/f‰pq’D4õi ä…Z'“dåïé êÛŸìšKÍ.ñQsµfù4Vý¦ôMú~l™Û,–Ó/—;•8zú¾Ÿ»îé pˆ¢—Ê&DDFö(‰<=>Üy¹A²Uþ"uVÙÃs†'òHü²Îç­Z¯¿×Y©=\‹ÝrV&ƒUÐæÅïy¹ÇPª’¥øjþ%c¤Ó¡¿º‚%z“"jYøŸãÊ<Ánsܧnî÷§¿ªÁ/Ô§¼úÜÃOúã¶Û¦mÉ_›.‡÷®‡î Ýê?D Ùu âУ½Ä‚Ñ ŸïŸ½d`Èu=œÏ{`TŒC“FÁùWôÞ}ëwB'óïsÐÀY‰¸¿%tÇ2)ƒf6W±rn€±ÊÉ[Ðô_邽jÖ¥Ù:’Ù÷ *›Í«ð•²øáÎN„5)Ë û;¯•èRËv­—Õ\ C½ÝJŒ\â«ðßéÃ&B~ƒ ¬dë‡óÎ5¸Eê¼ÝÝÝ ëƒþ«\6%¦Ôß#a; xËåÙú&B ù™hN®Û.ô¨ÝF–l:,yç̨D÷÷°o¥ùò02,C!Ch IùÒÑâòòèóõ6,ó~‡d©?]ÊìÌnÑüB—|»¼^y™­S㵚îyŠÚ~)ÄŽt«lŠ$šïÏ©˜L ˜Ä’¨˜í žè«¾à^ñ%R»Õj¡üˆ‚÷°[T©× MÀõ ,SÐÍhg,7¯”ÿóç—Ñ®[ò»k‚n'Óœéƒz% ºàttƒ=ŽÇ”\@ÓR·F„÷iøÑü‚Õz=WÙº>½}˜Ä²ñøÓ¢Ñã†óÈçi Í@^6üãRKhµ¯¨u:_˜fMo¾§Í<Ïs`Œf¨qÉf\î\n˪¤ÚŒF±ß'"]ÇŸFA³˜bÁÕfúèΗ¾VûuÐixªl,SøÐ]IFºû~è5Uf$ŽŒíÓcc‹9žmÆÿ–Hbz·N`ÖrÊqÞ¹´¦ïÝt£l?ªô2BͶmž—q`ûíþW‘Xã‚RฯÛõgu’éžâZùÇ"ìzÛ¥ß,֥ʰD¨Á¿-âe/§"Eï8—~LN·ƒ0¯×¦46£T‹o|ÈÜÔ+¥§oN«ä/Üêü‚åÛ¼èMïÝc›‘˜“ÐP°%--™=¯˜æýîø¸6MNkúÖ*P:×tÖÑÔóêùYEp1µle‰ÊÝrþ·cÖ#CßGИ0Qß2õ ª×£Þ%j_x¹å§G1ÌÀ*—}Ü…úò_K„,F#oŸÝßrª”aÞo‘ÓO8Õy#"e7%.]!"UÁÕ‚‡ìYÜηGCÿ»l'PLŘ9pš_›Qn*üxÚÆÊX›>Zð<ÿÀPíóI=yf)Œ† õ6$"¾B΄üC¦Ü»¦» Ä|.S‰Î¯ƒþ0õöö>; ¯åW/}Q1W°çZ?üËŽŒ!}C+M3¥|†Þ¸±àp­VRi0X|S|´èpw/‰ æ¶yÇ›]¬Æo+õ0Ò‰RW#PìHvõPe(ÈxÌáÃéüÏ—ÕÅ”J™¢qšhA¶ž¢–ý•zƒ ]î{ù(*U}ªŒTH^¹^éyõã{'ªvÕ§ù™›š/TÁçV“Åþ[R6ö+;ˆ gkšV¼%¦§ñU3P j!äüòJk‡sµŒÏ÷ö(`'ñé¸Ï_F ®º1ó/CººjúÈXPX@ã´øÆ¡æ5>W"#}½•†Ê ·†ÇQÓö³A .úß]º·qºu¦¢Ä%IMÄ7äý·ËéóÏùù©=äÀ®ü;µ8Æ/ŠÀÏl+5Ÿ@ æóúZºv²ÆŸ• :!'y]ŠÈ)1iôy}Ÿ)@HÎo+IÖ%èG¥YG<3ךG°ç nOb–•—ï†CÛ9n?þE„7@9¥Nå}‘ȵ£É¿… F…Ë`˜“­±hÐU€“K¬Q¢ß!<]©Ëôñ{X2= ŒFƒ8âßÓÙŽ*lù?Él™¯^2}Åú(Sè§ð¥zs?[ Q ÒÙl+šDS±5‹|2}õđ٠]¼vGµnqO†œqóç¸æje¸ÝV§ÙT¿+4~˜]¡~cO£^¡Sò~mãë[È*íÆWµ~ñþÞðÆ:Á3†d²ÿ2…£¿É%â®üdbƦŽ9áµÊ‘Wr»½ObÑèG«v?5R#t'ïëËyÿ ¿ýß‹÷ãí6Ã4·ìa`F\(ø<¿pÈT¹›î–»G«ŒèQ»é…Xçºy¢¯¾Tw~Køæ¶"5õwXÅbŒf´Q³¡êùf{1ˆ¿Œ¿)qUó¥±@ÚË·š© ò!ž[㨊úKm •YãLÏbáuE³Ÿ¤ÑùF[qÑ6tmFïµÅ‹u*?Šñld-­ðm>Ìçy"6-YªÅ5Ÿ‹q™¶[2ôBL0ØTöË9kª&Ìlc8k’p ßãÎÄRˆýKѧ{ gÌHÞWùbFÖrŒ;SÏÖ”éÉ(tÒó¼¸?>×R`¤×|t± àýàøá$(Êîöv;›ÎJÔq"­Ì+ôe¼÷§¥TœëÈø¬ýë¾Ö[—z]Ì×a|·Y0˜íX±Èø1£×óà¶âòöÈáéÑg(ã->¥€³(ŠR ½ª=i=â¿ønž‘þt_™8àÀ‹›Þì­­Âù߯:Ϻë¾ã€(fArpHÜjg&»v„È&]ÁÅL~g0ñ)æ¾Ùdjv¡U7ÝR¿Ý·)³ª÷Á“¼øñyyYk,—ž.î¿"œ‰zë.?…”n½þZ’ë1ëë£<Xð*=ÿL¶”+tʇ`.à‹}>«hïDaW­ˆíQŸ-ÁK]qðœop ?Â>|•ƒð;0øÿ{àúXDçye[s°Æ&LÕàûÍC·ù¤¾ŒûµŠÅ,§"|Á:`̹z5QX¥QÒ½@ÅëÆÎÜq“÷+Xp Ù˜{m$©QÄŽMŽ@…} ³Fì¤öyéeÍjËøª›]swâäî8Ìg ‰›òl÷2YŠÖj¶ø¹ ž¢õ>u¸˜ÇûÍE(Êé_‚Æ6"P¡ˆ§C©ûË묤xïxøíòÎà¿O³Ò €ùÊcT8RPßo˜Ø¿UHŒ :†€õL¦$n`‰¿: TŒÉµô½c3jqayl¤(Û¹„„᎑SZS£¼»•’‹Ý+`Œ^ˆ>‡_‘w!Ål<ßJ‘}ºwRññ[š«->ëÆÓlÄ&º¨QYvÄaïv¤£÷^419½²»ßëßCðÙÿBÒýWÐH›<^³b‘ŸÕ$Â0¾ÃtXjó»w;qÛtÝ ð¢öé]0}㌺õwk‚’i >ª„ohl˵C£fôQè°'3ß2·yæ®ÏVe‰P^`}–¡ñ£Y®8n¼ú´ºp€ ® /Ö„Ö˜ô±Ì^#Mz6™-Ìï곚çå§o®ÇWÞ”4Nvg&“eÛîJŸËa×·Ûb­ôHoñj Fˆü 6ý³ÕAç[dß3U,nìÕ¼Îä¾ÞÝ;íÄR±}2êܹ”}:x­'ÔÙh•"S‡Bø›ªn€,G!µk N×n «t2¿Ý[hÀ«³§-½Ø ´NÏ_߯¤ßK·3Xl!ÞÓn°Ÿ©0¶˜ÅõÈp¹ƒµPöONÒ,«ìÐ5䨞‡^v¡œ®4¬ˆ»]±æmZl+Nëù< wóÙIÏþޱqnr„k#Å ï¹kRûj|BDsZ¨ç´Yøë^Ùbik¥FòÈA…#"¹ì­vصûÿf zºÀïž©þ;_g$’ßìG²â¸Ö°B±@RGV¯UF3Y àb`±Lá Ÿ™ø¸Ò„ðß÷­6? ú ƒÇ$ñàFU}ýtÆš&Q¤Ô~qÝ-®MB¢s‡àÒàÞž£.4âæuU>¶ü¹¬D’쟊+Û˜Sþ[þH0ÑâP[ȃA€úYø÷éPà€û§…íRÀÑéÎHfàÑÁ瑬૽O±¦¤óTîÀHÖEfJ§/Œ¨ò~KõþN Óú)Ë}ÇQ$ƒ³x{¦­£ÐÅ;û)=†RØ™«-bµV:„:‰È1´­YÏÞþ„Õ’6ŸoSäÜÝÙ=ï‚™¥lÖÉ¢BW¢©ÉIÅvYh“ß.&Ãv)n¦$±xV&œÓï1¼*ÛOúæûe4KÖ—EV‹ŸB „è*ˆ2œÒô¬Ñd]tši Nxµf†oÜqCòe ©¹01Cqzìo8OÆeì&=2h+u5­&Wgþå[¯„þ»²ÙQÊ€?ŽŠ 9£¦ù=¹xúMkÕÅ=v¡$($2±×ØKÀ'¦NÁ€Õˆb¸Ø€c(èÚÈ4°ãÜz‹QúãǺÆõªAd¬Ìßø£•l~1YÚ*˜.üEܳÅ"†ï_mÖÙŶ^Æ {pGu×ÔÈË‰ÍÆPr- 0‹¬þ7gd¿PÇâØì&#–)àÛhüü$·L”¤âhÖÀîþ×9ÌÇÎÃ% P:Æt:°›:Qü!Á¬JaAñº=«¾Àe}‡¬°Ñ_%|"ŠÛá/nñüf7IôK`@nå“ò JM*FNN®;DYÕÐdÉ ¿À12™æ¨ã7 RwÓ£?wø¢ï¶<±¨m âó6þ1\Ê–=! €#nÿXë '‘úlç!Áh¢ŽXi0˜{€ŽßL ¸¯nôÿk;àJ¢,–ËJ;³Ò°Á‚8#€çí³E L}RU†E¨àâ¨ù¨ÿï[zˆ2d éî4 ›»ªÃÁ£²’ƒ½îƒ!"à‚€öZYT:jP,•ÍÄÜ)÷?þ¦{ÑaEµ‚lD¬Ž«‚JâOTœ:Q×(Ȫ*Ÿ¼öÄõR†ä ÞA_Aý‹ßàðnç¢ÂÅ‹»\}æPfø žø5ë Yb^±Ç‹éd 4<×j²Ê xs £‹åž4Øâ 5ÖãqùĊ戫tè“ n6KY¯„­{+Šåþ%~ŒC¦H&·J}÷>rdS&€`µ‹† ÞIDDeÝi‰åòˆ’_ój jÒVÑ£Žû% H3QúØ×¥9«Ì?ºR^BÅ(¯“kUT2BéôB¬   éÿçÿ­&¶§ê×ü‘“R”¬7ø?PK •nYTÇ¢4½¯¯pos.iconset/icon_16x16@2x.pngUT Y(b[(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<=22ò}¯×Û};s•TÃÐÐÐßF ë·Jœêœ—†@(&,²&¬íÿ ðÙÈ$ 뾆¢(èºN8Æl6Fñññ_VWWïÊ ¦t]§Ð¦à»¡aˆ "è†ð÷¡8 Í "ÿà_8ÓÅýË ‘™1†a ( ‘H·Û­º\®gº»»/vvv:ïÀ¢5…*¾š!œÖ¨)0!ºÆ¾7.rî£ ¯ýè–-ÍGD[©(¨ªŠ¦i8òòòp85"Ò{îܹ/ß €XUðš8v-Ž·ÀD<á§/¶ò%·ßl[‹Ón›3IQ”d*Ìf3‡§Ó‰Ãá(±ÙlW|>ß}™Òj```à}»Ý¾Þ¸Ô©Ê7áFñÿéTTT°aÆôU¨*"B4exx˜x<ަiI0«ÕЦiã†a,óz½¡yúûûÿjw8¸Ô©)0aV¨¦œ+“É„®ëLOO355…¦ihºŽ®éhº†ÕbAUUÿŠ+¾~ëþçèë+aß¾ ôõmçøñÃX,,‰ü'û’ftýúõ¶`0(™®¡¡!Ù¿ÿIin.äðá2 >“¤ººDzz$ É®]«DyõU·´¶ž’±±1 çSãelD™V=::ÊÞ½RW÷"Û· i÷Q\\ À閆Ξ…ÊJ\.Ï*D ¡!Äë¯ÿMÓˆF£Ó©ñÒj@UU‘”äwt|À;ïìáùçÿËõ¹]Q>bpðÓÓK‡ÃܼyEóçM L "¨ªšVUi†a$»›ˆðÒK?Ãå:ISS0u(O?ÝËÁƒß¡¨è{¬Yó0~¿¿ÿ=®^=ÁîÝ—xë-xùeÒÒ‚d»¾#€C‡~ÂððIŽ‹¤M°Ù`ÿþ«Wéêú±˜ÊºuS<ö<û,ŒŒÀòå0:ªf˜÷LM°dI„úzðù22PRuuyd “ ¶lIa›ÍħŸ~ƒ½{=[Ki)ÈðùîÆ .TWCs346Âädv–رÊË!pS\ü/¼p«Õšô™@×õäý=˹ÒóMíÜ{/|òÉJzènNš;'I~÷]¨¨€ŽŽbêëðÄ»³úÎ Ø„m¹¿¸‘Õ«NGÇW©¬ôRZZÈÙ³°u+ƒpå lÞ ª n·Bgg%¾ÉÚµßN;ʤtAÈÒŠg·J[ºK{;wì ¶ö»ìÜù$ªÚÇêÕ&›ÍPSvâñ 9ò+,Xq»3ÙÒEÁòá‡DW®$^U…ã•WX81ÁÑÏñ©G ´´›¢¢ twàõþ€Ç*k Yß9f;¡Åï'\_8L46‚®³°¥…ÚñqVìjâ~Ë—[0 {ö¡ªjUÖÀ·úÎ 0›‚Xe%ö¶6¦6mJ¼PU&7oF½y“¼ÖV~¬Y©;t›ÝÎâÅ‹sŸõª´"4 CD„HM ¢(¸›šPÇÆ’`ºÇÃÄ–-Djk)kk#??Þ/çœcm¹Sp«¦êê0áðEë¶ú@¶ÿ+¥˜¯]»t»Ýí"’ãGüΤ(Š„B¡àLLí‹ôýÿ­ÿJRŒšW§xIEND®B`‚PK•nYTïïHLMpos.iconset/icon_256x256.pngUT Z(b[(bux èè»ePÝÅÙ3¸Cp·— ÜI° ¸www܃îHðw îl›í~ØÚ­ý°ÓTQ3·»ï}žsί»'\YQ ,9YIU€Ï/TdðŽc±)øÍ^ö³P†>¿ ±[§_À’:Ki:´3uv3tü¸¹¹±[ØZ9Úa·s4K?"@NRLÍ=ã0ÓÍÿòé—~J¦³ªº…˜¨ä—?êj®b*&vH¤˜„ö4ÌÐ=%±vî>nô˜ø—Aæüœš$¦8Ze\ô%‹´Í£ë_E)Ëòé™VNJÔ\ƒK[Gªg¾>ËÙ×Û~0ì†H~ý³%9ÆÇ›8O¬ðtaIüreØöÑú ÕÑLÞüÞèt9«(Å 8h˜(س8«%+¡nœ˜!†îÇiD‡Æ$ÈR¾¾Rþy0NL§Œï»H%%%,EŠ™–þN±¢]2rÀW¿UUì™Æ9³é1¦ˆ½ÊPù€%ÛPðwØTBLÌßXä°/ÌÉ18+Êömö<^nã!À;!¯Á‡÷G“Kª&97dj›Ù* ûŒÚlÍŠ÷YÌŸ «1òaÁ" þ«Z8ŒÙàææv8Ö8;?ÿÌõFKYùDëîêð)ˆê+æšü¤£ur§g~/P6ÑÚ*¤ÉJ¤L€”$T§…•$¼³S+QE:==3ç1 ùžªX$x³_Ù1"+/nl7h§Ï‡?Lx ¤ñÙ Uš¬bmÙÊ¡ {ÞJ¢³¿ÌVœ´½˜éLŸªŠŽ%[”Î1˺bå\訂IÿiÓÐÐûÅ6¯”¶É/!†Ò"ÿ-45lUS3ÆËÅÃQ[ õ Â=ÂçÔ€¨¿!Yìî^Søø%Éo¹¿¢㱜þ–8ˆð~bžš^ñ½c³è ÁJBç OGþñ3ðRuܳäZ5ÿnq†™):`ŠlêDåèäDÙÏÁ€\]]i,Uàv{¶¥t¼ÒÑ!B@H{‚;÷òu²Ö®‰V¹ë­»¡ˆþ/y/‹"æ¬sÒoV«IÚÁø¸ùæá6àÙFÅk9)êé)PS[ËR¬VšÔñp¥=ºÐ`×1]k6굺k ³Önªìfoþ¸òxæ±±ëþûu8Šz §sXA¶—ò·ú)nç¿ð»¶rnˆ²¢ã+c'9>~ ó§Ò*‡ÀeBu¡³Ñ,Æ\w*Zrˆ“ê™5¤5Uu䉈µ·±rzM+mGÐz´Ø´1±Ýh|ý¯Æ^×óˆÏV$;R™ Qz„Ð?#ƒbüt¤W´ljÝ…JTS“„$¤¤dÜüêh¥ãéÜãüïîìÏ  1F /Þ±'İģñ›Êúbv•±qµ&çNRõ·‡ÊEŸŸÄ9¯×º%Æ`›[[Ί%/³×ãöž"£šN ™ßãÓÓÿ`@‰‘Sd#cã.Î(²Î–ØwW³_¿~?`s¿’ˆR¥0á+v q_¾œ¬{댰SÒäúãÄþ5>çµ­HIN‰y‡lTV'\cœNxșԓʬ;¶½5cа  ¤$çß¾'Ž$õ6*Ó+íY6"8ñZ«œhªôS b‚”Êð¥çCõää¤F®3ŠNÞ$*€d0aì)¤'ýŠŒ³ýg¿j¬ókþí›,[™ ¾Ík7½Ó»Üžû ÍŒâqêúoiyWÅî#±}QÛD^T¹ <;ëÂŒ³@„9G<:òø:ýÜc GCRï¥Zm$%)#høÍ>IþòðñáNÃz¶Š–"—@¡ÆJa¡¨›š¤­~’íϧ[òëÌá,‹rë‚à±2• yáÔ¶Ö¤Ï3ýoÅ$52 C,ײ€?#ý±ñâ쌎@ÑØNæåia=¡/œ“QˆºáE–NEO/룓¨9w*.1ñ¯vj\||'ûí‘ÌØš†­‰l.ù$(”@Ô܉WŒòótB( ¾ÛV²iX8ý×Bmô»9¿ñ³“@6÷EùqBý¢,-|s c®7íÞÕufÝc7¦XÉ ð6d-Ìÿâ² räŒÐðñ!B€=2ÌPò|fìw#Cqkð·È+ÔŸçñàÀÚ™ò E™]?M¾iÀ…Ø´wo¶N‡žm¬‡þ}¶‚×ZU¶}úIãú•^ýŽ\Šûø˜.®´Œ ½€χÐ2µÒ)PÅÒµßÈç8£½¥bèpe7:ÜO_\‘†¬ä tª–dmr©]Ù]̼øñdIöï½ëЪqâ˜ãÈéè>À/Ò°{ÉT Õãùqo“K|%Èg3Oðk9B[¿4ŠN‚»IM†î^Ã%æ>d÷™ž‰õ d’ÆÞxjM¥úÔÓÛÅ£/Ä÷XC©«ŸV[‡âVùòöúõâ»Ð¢WãëæB÷‹x¡v"A¹Ð;;º{·í®S‰,/ó¤S I6··[îxEIÈÉ1ÊÕ1Ò¾kËÈÈP/·¸ÌÀå©!4ÆKaY¨Þö“/ì•r`«2‚Q+úlOfµï]ÇÍsxå©>®ý¾ˆm Œf!¦efþ}h%[71¢ekFÈà…Õ»Ã$ß'˜lHòm˜Á a‘”Ù„™‹‹Ëz]9C«|93-MOÞ-çÀÕÁCýzªÍJ„IÂE¤O9Ø¿$ÐvCiFÔBøiäGçdV4—[?#ÕŒ:î÷“ä͉nîÎáÉÂâõc‘•õšÓ–=4Ѓ¾}#ã)W)QËÕïÖmÅÇLC, yC‡ ÛPRP›ã—´Õy½èxœû7•AöߊdëdeŠÆL"ßêzlʼt5žpÄ‹TM‡¼n6¢õÆÕßʹò…â…ò ½œCž—{‡Ø[¢©xMÕó°O‡´Î¾<ŠjÇ(ÚMd ¿v&8rv‡M ~ü#ÂÚW@A|—»iøŽX5 g9\¦½¯Ž^´Mû®ÒîíÁÇ>Æ- ðo¬B·%ÍÉö­ ì#@”F„~¹L©ìSjï› ©„Jï¶{_Lµ¹¸S-Ì”‹£zûâ0ÐZ*ìÝ)̵âÖ“}-ê?–o€’HJJvšpû~sÏTLIç8Î)Öß±3SžpR„ŠØ}sè*¸üí é O¬ïâei lÂÞµAßÝ¡&û¾&Ö*Ÿ.ºÂB!M£Àª'ü¿s'*戀%S§ƒë"F .·{`@vöж??~\ v²avÛÁ;ZD’·?;>Þßì³/}+^¥6ÿBìö³ûIe¡ìý¦K™poÑŒY<Ù‘Ó4¡½Ùd'¡59ÇÝX¦A6#DÍ«aëgS.áÞD÷÷ƒKpqú¢ YáF.ä+ÿÄWÁ¼¼¼œ)K1µ×‰ƒûõ6 –í’©t/“÷ˆ÷6÷···;"F¬DÃbž™Ëƒï’­ÕoÚ=ÊDú£ÉÖj­¼þaè#¬§J…¼’E1 )¢÷7 ‰NF·ô•àß-H¢¥I0‘ÇxrMæ¼®Bln6ìÈXÅ¥àZ²s¥?tKö‡#Æ4þŠ’M®Ò(«b§5k]”Ã…ŸWsuºþ žw7ª¿ä]POé‚–°Ì>Ezo¡5&ðü·‹KD„œö½Ìœ'm´è"å~h -·¢[µÛ`|g|"3¥W%£‘(ôêþ¯¡óOÊ®¬l?IÐg}\mÜpë/Fbâ=u)Öñá OfòYB DDÈ€8^Ø„9ÏÂõÑÒéYDz }¾þ|ÈO>ëò˜™WX¼ŽÉ‹=9}HÆEc Wj‚Ù ŠOT}áP žÆÃ zw.ÀèÀú¸Èž÷ĨëŠl¹ñ&Ëû•ÏrÈ}«Ûñ²-ŒžŽ†‚Ê£Jw¢|ȿѰpè~ÞÆtsâtSùH³»IUF:¥ÄÑw_½Äå2± ÜTQ$KJ£dëë`+ÒQÇ&Œ_µsÞ·ÜÐ%ì&‚¨¨¨äXh¡ d zœóÊcѲpMÄW”l'‘§+Í.ºÿZƒ>5°løÖ1Ī|Y]ÂøS½¶0:Þdì•­3Cñç‰c—ÄVd>É ×.¿Š¥ó]žn, èá´^S)W/ÓMLHà¤úõ™¥h :Î\ìx­NÅÄŸ*ß妞®49¡ŒŠ< 9N½å˜ž›v˜Dò¤£÷À㯌·|î! ·ª†çÙû¤&I{5Fg[¬¨ô€“öÖÑÒ‰šóR¢®VDüÃÔšæ«O1Ä4ÐÍ?Á“ÿf×å&ÄwKÄ/‡‹ª«y^„Gsˆ?w'ÈÐWé~;˜#0é)øØSü)×%Ñó÷)¹ÞÓgv{]¯\‡ÚãàõNÝ×cŸ3ày$¿â²ß@/áyc²ÁV¸P\–]¹ìê…ð¨(IW×z­üqÖ¹&'3_qqqnYÜ@q&­|eW(®,+ÏÉivïaì4$›gʰOŠ{)—ë‡EØ"ïRqÈôõ¿ËýÐEŠñVŸYÇÌôÍ}T)×âUûËïÔº¢?üçÙ¦÷t>]®­ûÕ¬v ä¯Ü¥†›+ ey­/ ißOç­*i¤ýŒŒèÀwn'ã¡f ®’¼Þئúu,Ì™0-&Aþ*Ýÿn{’øÁË )èád¼Wù㆒Ù.•#$Eù ¸°ˆ×¾DJR ½ÿÆ 죺îB¡¦áçŸ);ƃùø²÷}AuÄZñ0‹ày¢49*^õA •ý÷K—ˆ@U–hÔ¸ùb³Ëþ4Š2z5*Ä¾ïæ³ž¿Åßi¹¸Æwç묌eºy¸^Á#"ú;å†öRÕ¨ïu9ÍFÃu¥ 2øðXn)!¶ÓvqéyH EmÕ«\©2ê‹°¿Jzä†Ð˜ vRn˜9È ¶ƒ¤4”É¢çü±r&T3YEÅþ\‰PNÛÅ7½½½7›‚HP¦ 7"€€L£¡Œ&Ä¢ÓsfZŸÏ¡õáL’¿ÞnEHãg”bñ×ÇÕV)*;2É”s£€0ôh uF5oÜÿS™ºáÐ7®Vj÷Ãù:.ûUQp¥ÕH[ Tû‡Úÿ’ GŽá – µÌ† ›‚$8e þöÑ2t}"0ú$¡§Guvv¦¬¬ DöA|…øÒóMi$Ñ}Ì•É- D-0¯0wÑÚù©e^§ªöÎ…' (ßž$Ñ&6HWY³¨‚Çs6¬HHH0 €“‚ÇâE-…@Q“?„oè]Xo=¢ïKÊ—Žræ¨ðk&i˜Ußì^' ­ôÌ]¿ø‹„ªí{ :€Ü:JãI@ÐiZ'Ððt S÷›Çû«„ F aúýÊÇxà)"‹t}˜4Z:(8”^ˆ¬)δ÷a¨8nÞÄQú0(Qd0›Í•c‹ëa²¿‹£8_‡²*¼2*[ 娤î½I¹[öºÜÇAVêqî°Û ûëiíè®*¨AíÜóÌ”ME@YX“½eXä[È~Rþ\Ò»ñ˜û|œ7p±ŽÓKÜ„Ü: ‘ê%F‡HÔf3ކE…Iš˜ v÷ôÌq¯÷E@Rîï½g¯î\öœóìkHŠºBÇ~~¾éÖ†€àÆø«{Ãì»Çó:?`yÅfB¯Ø»eèÿåõüå{2©¾Î“žå$üŽu iöÀu½¬%Ž*-Æ9ƒ:-ŒØÂ.ÎŒäéñ3‰ÉõÚS©ú:3B±$NƒNxîç ¢ß·ÉÊ%jœ©Qaâ’’ˆ³Ðâ?õK‚¸wöÚ>W>¿ä£ÉÞXd ¶H—mù,W¨Jª:YT3] Pàè+x@îÍ죲ÈóagÈpºXx›~KfÿÃéÀÐPÓbâ b ÇošÍåŽqsI==½¶ÒOe¾Ö;Fÿ÷  ˆ¬LNªe;Cî-îscÔˆ;SלdP«ÊÈ;91ÁÔwlX7'JìŠ3kAå­ÑÞHŒbˆª,Âß«¼‡›Žb±ç ´¿þTnP2e –®yÙòõú#øé;¯£q02ceˆÈŒI‰òQÁ9”£V:Pÿø¢i ¹šõ„²Zóê%É#ñšÝgçÁf?1«ìîß9af3 ±ùÆwº=Q–‹¬rJ„äÊ5fÑÞE¶“s84™£*÷)b×øš›ËÒªŒ¯H勿wÚ6pÈÊËÏÿ×`·Âúk0€úE ØÀÁÔÁe¦¢™bÃm~:ØnL ¡(žŠiê´>ü›ÂL}5dó0Ç4t›?t-И_¾-÷Ëí ¬]§\E…ÿ׌ÂlK,ýa$]‰Îˆ‹s`x8šE¿ýÞ8¦U}…(ÊõØI;Uã´†ŒüËQ*ÐJM‡6†þu [‹q›Ó(•ÀfÛÉ]ÅO”q}†ç×Md{™}3·þI#¨ s'Wbü olÎÔ÷àÐ>N¿b(Yžë÷E뉉=ìšCâwGFhOö‚ ù×µÿxt'-¹1'ƒïÌÓBäË‘),s`æ2þ,¨÷¾ãȆePÛ‹Žâ§Q~ßµëõpx)§,*šh®LŽj™Ì>C¢è?Z~~üqóvĸ·t²tÊ¥HàY¬vòz—Ðä¨UnµNÅS–ÊâœDé¾D5äö6ŒÄ±ÝçлÿÊLpÌà6§ªb’û1‰ˆ B]Ð40@ªn#C2L<üXWŽq—%­çd ó^âØÂ³¿æÂܨ,² ³¬K#¾Ýn¸ù±öQYlŒ˜1Ÿ;`¾Þ¢0䯄4¼¢¯Þ;¸RÐãõ^På±=çÆ‘¸µoq ¼å`ýqšÝ£”Tˆ¡AåœTõRì"!,P˜çát¬L^Ûµ×Möñã~)ORú-¡ûWµ zpùriPjjj"¬ è åô7ýÔùŒ¶~„ÆUÇÌ<…ÁÄÈîÒÚ;G¡Xs‡§1:]«½È°£U‘J±-¡óu×E~©r‘_¡ÁéÑv§ÃãÄó, õ¯pÉv”0åêt x²”|`Ë ÈÿÓÅ]qŠâ¿?S¹q¶õçf;ÛÏþöì‹N‡/ejjj£ß“077w\||—ÕÖ…ç;Pp ƒA~üÊ¡Ouzzê¾ê¢üœ£*õ(yAyl®Bc‘“”ªŒ|?cxf‡«ƒ‡ mŸÊx‡+/†×šbß’|ýƒ™ÂÃ`ƒ 6É ï?nÞûpw½tx—ªÊ0£»çW _c|a±íè`‚Á:ãéeÜc/.œFî®®÷/='K>¢\îMI<ü»ϓ˜¬Ô_Q!•-UP19 ^Òƒ‘®ÒTÚÀPûä‘\‰hG™„´ UßZâø¢¨¿ûª¸)«€¢kòå £:îÏ0TUUã23¯­´@Äñ¥øKífƒ#IÄ6Vú‰Åyg r¹?ÃÁÞ»pŒÉDÝޱ*¾ÏQHöµÓAP2Œ¢{Uö= fÈ:4O :§9±ÜæEÚ)BèO ÿw ž^³Õ‹Ïzv•¤!ÿS©šX‘bæ˜eZü‡¬U®ÎsÅáɾ¨ñò4íI%j %âZí‚ÔV¤×у’ ‰©˜Aó2ß`7ª.ŒUÊHCŽ#JÚ!äÚB)''§ÙhO«˜%´{¶]ªŽd9¥òD-þŒ_¬C ÓÀ ‡Ð!•eÏŠJKoL³­Îó®þ&\Ýûtf]›ä=üó'ÏËW¯è¸¸ð¸¸¸v–Û=/÷‚M‡Ó‘ÖuPå‚‚†[6t|~²G,ðÂÐ_•Âä£ý‹Õãƒæàj>§ %‘‚íÑlŽ«7mTî{L9ŸXVOù3fÑô±°­‘®ö¢½qÇ}ãúÃ]¥Ñ혊ˆC/ª/’x ™½q´œ`Š’DŸúÞ¤@¡ÚíZ‘©ªª´ÉËH@õ È›Š!a¬Dˆ°n¼®TšÈjo8þ·7t1Tïö.¾í˜¯6mÃm—àfY::¨{ àèä¿â‡ruˆPo‹ôx8“”ÜkΓâû唯éI®B„±ÍêÚmå 5d7j}N:*‚”JL‡XeŸyQK‰sPEÃ@粚fÊzGÎÇ8lµÑß¹3ÞÙé$X%g Iç÷gÓ†c‘Ã)ÁÈr[Íœ„>ú?–:œFȪ‡Gå òò¶Ÿo²‘$ÜÈ ˆyñ'Ø I”¨ž˜{Äm6’!&.5É`²¸?\@¸»NLvíEõ zû •­Pëå÷½«e•²’èiß«-þ{õ\‰!˜]ÁÄ5øoS#L2ô•åÆ&t…ïƒ%go±TYБȥ€ßo¬¦t½ ü¯H)òjªç%¤Å5Þ××"GÉ`ˆdBê¶ûŽ7Eçl½ ¹Vƒmtµñ¯uYc [è¸Vɹ"‘éh"8ðçφF™¬0TøW¹iîôÏz±Æ‚—gÖ|w'!H;—&›¹vú«ÁÄKw 0Ø$HªÇ.”¯>¤q÷Ÿ0>¸ÇGÒm­c à5‡£ßÜÞ6^lt ym5pâñjü>€qÁU¦Ê4Æ ˆå6ì¦"îty}[2ÝÑu›eÉýÒùlª6¤uí!Ô>ñúÑÔ•çmëÓãÝ·#Šz›…ÅLð˜&—Hg´e÷@ÄûÅ\9|î™}‘G×ÓAÆlƒþ(Ò<á¶2¿\N{ý?¼Ø Ä1/ÔÛìÌVç|ú3Âõº¦J›\+¬sœÌÖU1Ú–Áz5'y¶Å£Ùõ9c`Ý !¾=’Iy}r³“*’I¹Ü²½ÜDO'ëmüÏÙ»›XßÛ¿äcQÄ¢{‰QÑÈÑB¢O—8”FGJÊ?vʲos0‘ËýÄÀyùOBB¢““â"áÑ Š€ Ýg¸N”4ýw¥ì˜žP…úö®œé|Ï—(?ú7Ý_‘Ÿ\ü7‚ÏSéì 5¢Ë™:»NçÇÁ fߤ`±=½Ývlï(6@íñš&-gú¿ž@šC…8Ù.·†-µl,Øu>¸§ñ@b(h__ë0ðËÊÒ|´kâ1@ëÿz %ï¿€îŽ'(‹ú Ÿ ApW ÊF¬È£}o¸æã¿È°TF49Ž6ɄРºÐÆžg(ÆJЋÈQ•nUÞã >Z³ˆÁ]ôìÆ¿2n´êtD²— ~Åœ6\-‘£àP9¿/Ä" ßDÎöRttSMµß“/&•熇!ÒÄöü¯€8ƒõ½©{oHËR †Ö' >E7±µŒídÖ8ZÞ~&€Ä1I@ßû ‹,È+@‘}!4S$Ûd¤©'ŠÔD2e­'Ô;Æû2Çþš=õŒß†ìdÉ­/æ|ìÝf»ÖSd»»£¥Î¯LYºífJÜ÷ƒ ,,ù2±Ë=hxÑiœÏ3=%ñRÇýi¶‹ƒ9ü×f#›l\X@4Yüt‹Ÿßõ¨×:b5{›çeww0FàþY¥®‚À™Èƒ$”ôr?å/"Ól„"ž‘ÓéU8†{wžÉwÚz™ÐÜÚ™ùPt—‡>»‰UÀ 4¯¯BÁׯõŠñ!9WÀûÞÝ…Z'ŒÐa2~Û¨­?)(BÝÇ«ËïÎ õ¼ã1‡:ž„ÇêÊþPÁÐWüžÞiÕYnÍš6$VijF©e}XgÖy®&í[Ât`“µ“±!'T\N-2fœ´ï\vËB‡ ÄnG‹k¢¤WïŽ{vÖŒ`Ú /´Y=Û¨ÂÃÃc>[Bߦn2qhIªí&iÀÝ–îx2±YÔˆ"ÙÎnô¦ž –'÷Rc¼vƒÄüL}m‹Ùs"z ÷¯µ”ts…âF,¶yûü»èbÌö†¶,,h4°Û_À,`mk~OÔ"¾Bd<æ«Krïhù‰Ýïl&öjk½çëè+:B'|Ƨö>Ø-ë»ûFºìvm}+õF}èϺ ¬l“5²4AŸûÌMcPŸBÈ÷p¡á—°í¹Î@$4ï$Äï éêˆÍ“Lòn+>3-‰žÝ1”&ëO)ú oûÝcý#Oh ~ eäï$ÁejAé”w[™nð³­Èeírõ{°çé9Ø_Ñ\z%/ëðAq-91=Îÿæšf5ºìÙQïŸÃx8`²ïOŸÞõ‚)]â­þô;ZmêÐèá\âÍ6ë§Ò82êãK†îînIHWÁËÑQbB)£W:ÓºÈ_˜d.ú–„R¨ Ò .vøQs´ßÐ ?\|T‰™¯“ËÕNÉŽäÌš]I¤ETšk#7_J“œi,Û Ã,0 •Œ¨,Â$á„_ëÑÅ좜 ®Ômég)b'@`ï6ȥиñ¯˜\‰PìÙ&§"sý•ö‚Ž•âx»ÊÁaÚ Ë:ó¹šB;šà)ù¿t×ríÄÐþX”¬ó]r^Ë^m I:·ßl–“4‰eU¼Al-'uµÆ›!tÄd®æËÎt9y…~ÇÈBÅTB8“ÕtXÊôQÈÚö èH Çh"OKíÑ—±"Š5ŽÜ¯ûP.vîWžnï›Áðxùö-bjê}wARî¯3V¥ ».(’¢1o!¿' 4¯_ã۵߾ò½Ý"oOã•Ó¯ûüúIG%R±'}²Â aË»ÕZÄCèžóïR£ÿ›Šý§^üN‘›ïÕˆ„Ìj«mn£-IÑAo! Ž; ¶¹¹hW©"N{“L/_¾”%ó›©è¼J9ExÉÙñúqÙûüƒõr+©záþH¶Ìþ€¬÷ÇÚWsŸk_¡ý»u(ç*7PWrHŠÖ+Nѱjá0ÇbþwýŒÉD¶I±0 Fg›ƒ0Ü!åqKÿQF?¯àññ\Ø`ǧW32CÙ"ÙüÑD{aášKŽHïÓ5Oð—ÛH—½ü%Vùº…JÀÌÙeÍwÞ¬Rq¯¾õ¯%9øÊàèèx2­m·R,Ña™zô>rÊ}°¼TíÜfw$1G·mÃÝ"þl»à÷éÈe’‰ ?>¿nå2Fæ±™¿¹HSµÿ¶ë¼üKí¾8¥Ftzó t”…ö„þ•\„Ôj؆ÙÚ•qmm-CŠWO‹§ï½»Ê>9U ÿ²;BII‰9>°ÑáyÉ\ùûÄ8¶©9×𰳬 a“­ßI ÉÒ?>ÞÙ-»Ö¥!¶¹ÐðþCˆ¶/öûCXÐMOJÏ÷öË8³$èv}óuV\nG:;K™µ´ÝÇ[‘†ã_ÿ7T§5ßF4ÿrçÍé†ÔTT™í—†e¿•»éAøÉlÚÃíÝ HÁò–²´,5N {µ+°Úl”Jè|赞~O¦‘œÏÒñHj cE¦ò´2b§»N#ÈPÈ 0àZ­d±ÊãÇ ši|[JÕÿ»‡Á®»wé!òo‡~y=‹œ¯7×*îÛ·ôLbTß»ŒËè§§¢ õË™NSÌ¢U‹â©x‡fƒ-¥€ÛQ”ÓöÈi}™š $ é^5ЬÏOäËo•BZ7ÍZS,7‘B sfö¹œw”pt—¾³€+Êi1ñr¹¾ÚXWW ½6õGŒÚ´ b'+ƲÇ6eÕ;²¦Å—Äq6 ²[™DsxÜFˆ¤!fMç¯úQÿ¬4€(srµ`GÏÁã²?-edD÷LŸÅÅ0ê¥r¯ÖËiíÆÞÏØŽ_V/gÚ·A·,9¯‰±F=BÃg©Ô—i°]ª²žão/Ê~Åî'.ŽkûÑYà,ÿo祥L.†F“ÏŸt‰ÿBƒÝF0±^gÖ;¯1¥ÆßÒÀ-¸[©&”lß½%Ößï¼ÞÞû/ún×àÁ':ÿ§ƒDs»ÝzH€ÔzÇžzó70µÜ7_‰Ú­ëzÙKIu¨ jΚDÀNC•ù8õl$‰ùÓYOfs³ËþIsNÉñDðê&Ê„<þ@Õ¦{a ×pQÇ¡o5sÖß„}ˆX5iš+‹aªS¥•4K鬚¢±z/-ÒúÇr%â“’‚Á "º›Ã£—¦¢cŒ¡[2ù‚B2kKekwYŽZ9ÙmÃɤA¥ƒÿÂÓã†Æ Â;‹¾­ ¯¿yîƒýÃ?çÃù)Òd…?ɶ\¾@X8¤Þ¥‹ÿÃî—3ÏqïÛ°éàh¹V:×dTUU•£WLk×Ú®—{NÖz<ú©ñ Öó’DØ—AIJs~kv~\¾>ÿë ¾*ã_ØÎ³*[~çTMj=/Áó!º¡!]!úQ †‚üOeê 9‰Hf“rÀ‰Iè;ü»°z¸øïØäJQôôƒ×§?cº÷¦LÄ“í&÷¦2+”TM•E¡éÃ!`¶#±¯¼4"æ‘‘Ô Ò–œ‰Ö·qiò/’Ÿ¯ ±i×÷¡áK–´uÑÑÓ#$¾ú ¾ì•ãÒ@4ûi¹4ÿpþw+~<‚0ðÓ‚×DOÁd±3 Ös4šÑ÷cs¼+,|÷9E/f²’ã—i­áÕÁ\ñ§2"áÇc0!ðîݞ}Þg SÖYNu_ìþ'…ÆCûÉO(UÑg¯K*²÷Îr›u zÌ\ƒ¼ÅŒ½ëmg±é56¥ÀËùë …ÎLJ£ò ²°XFÂÀ™Œ†¸ÔÔp¦ßsÀ„D"ìýÆ÷áRcðö¸=È„â=f±çÛñ\`Ë©t¿‚äË$›°*j¬ISi>ñ6~QPžÓïç]yK<E|‘öýôrF£vTÿ¡³§gPÕù¾¢®°·s}¨0½½Jt„4ÐMÊoÿz_¤Jå§‹q444ó¥æ:¥¿çâ¶[>˜¯ÃØŸ.ïñ'“J»»Êž¶„ýˆýóçÎø‚QŽ^h³Ê}_iFTVä"ÍXAQ‘ñÐ7®Ù?lúù± _öu4K+Þý %¥Ó©(èÒk¢þûïrÿ›ˆŸðßÑlœ:­hÏ˽\±@dóÙ*Úÿ;Ï‚1ÎÐЄúÀ>#±ÿ“gÓùíÖÁôÆe@1K(ü¿"¥”7o™„©¾ ¥Nâ]èûn¢îî;½@¦œ,kvi¯ø¥I†jyc¿ èyò.¶ûhÿ<.L°¬n/þ£Ÿ¦\æO+Vͪí}™4KoP½pøÆãìåóÈÔ~÷ãר÷ýn¿Œ&K“, %3èèÒuõL—ò|=; ÜïrsaRûÞ@²½ÏÂaU&œqŸJõ|¦ìR8wœ_æÛÞØ¯Îè‡kTÙR~î[XùÊ‚r±#–wr8ï‘5ë´W[®ÝwGG/÷ÂØÓè¸ÿË+ЩS±Å ŒC} nIÞ‰o¹%eÑÅV¶ÓI„¶¸Æ{ßæË@¨¿µ°xlßGµI œØà²3»;H¥@¬Ôy_úßC®¢,Úó¥ZNÇMÙ‚ÂÂð«Ë}™ÒO¡¡(kýòhdX\cØ”^µ©’JÀH’í"ÍëÛ%º;G'9.Õ¤’ôqYÓ½¾_‰2™/=Š|}VH󇥿~£Õ£Óɇ¸¾Œ¬ÉX9Æ®ÁüšÕÁôÝœR8Ÿqà=¨ÌW [(¤é™ø&~ZTÙ_2“–Çk½øáí‘ãfç°žÈr³ÎÈ4Ãh-Ní¿£‘:lZ4óÆ-F툔WÞ“‹É£Ö÷Ý®´,©_OÈËï§ ‡/}WÿÉ6õá˜Ð]¢³£&$« váVͶºöGr]ïÎÎ[£–ÛúZë´VSÍp³[\äœe»ã8ßç‹~ Áü= Wɇ‡R½°SR )®Ð•Èg~o±uÜ1(o|þ7|éB>IV5‘1Éßnù% Úy¼‘‘Q•ã–<ÉﱋÎ8"¸ã–ì¼Y¶ð„Xñpº?2Ö@UNökÂE“9î„Æ—IùcÅx\¾J–I‚ÒQP[ü±Èx:Aj:u&Åxü¨š,“±Cªåæ†;lÈ;T ¦‰Ëür ÊœÆ/IØöt~èÝ\y•} ŽRµÛñòl£}©zùÞÒð\)‹,üˆ9îg%¥Ç“«¹É’õ(îàΓ_Ô’?p#c=³6íM¾@’ãÎÆwoVžCoÏ·S˜²Áf…·ä•VRW(·ðqšbÊyãõ{™ª6x8%hWà’„8÷hÕ%è•–}Qà–ÉÑy{=ê³…žªã¼ìçemÍ:]®êÿ¬*ü$²&Œ€£h½D¨ü5½RÖK‘~þÖ; Äô7¹éåFx_÷ 1‘´Ñ›QáýÏhWÆ¿¼QÖ:Ö@Wˆ±Y¨Ï-ÑyAqº{ úçr2A×—ŸMt¬ù^øØÎâÎ6½~s­1-÷÷–ÏæÅ±×‰ØjÝLŒƒ|^¼À[áòl©Ÿkûí¦b¶®S¢º4géèva‡[î±üTê‚î·_°Óž³BÀ,¯F‰¬èUaŠ,­²›œ#ÓJ7R2Âß¡Ô@i ó5z(Qt»j»§;'rR=Ÿ¿¤§ºÑ!ÖÇ3£µ4DU¦X©TC‡ž ‚¹Œûi¸¸¸Ì­È~C憑Y?¡2ÁªÃaNƒÃHË^±/S¼ŸÞá!"qiTàÒªÝ!‹Êû^ïnÜ¢ÿi°Ãß f ÀÃóëôwuÎ,ûò ÷ jÂÉ‹@ÿ^¤l(mÇ“ââüõ2>Žq°Àþt<©·jÿJ1^j×vÉi¶ðUÏàþ§1 Ãó¿Ã§Ätä3¨2Mˆ^©£Ïd½MŸñ„:Ë.6Õ«cÞ¡¿y¤Þ.93‰ªºï<ÝÕ Ã¾‡·<ý§´õü”Ø—Ãî;¹¡Ð3/,410¬ÕÀÕWAào|súø_‘t| þeÑ;‚Û}Ž„&~»,w}ŠÛÙçšÎÏdÓN*;Îʦ,Ÿ/Ëiþ4Ç£"dí JatÄä ÉžIwÓ0ˆþBš(窬Iåò…]ä[+A{…«5êå–-6ŠY¾E%¾fÕoR/×zža¸ê<• ¢Œ–¶ˆòP„ÆL˜)lI0¨…ïxþŠIm¼¡Ò]§ùG|’ÔG"$N=-rPò·»GÚFpÀ°~ù@ÆkT®Ý°>Ș}qÐK+*‹0„uÛ,HÓ]t[¿ÖW­ ÔÚ—hþÛ9_×K®Ù8Æ_·½ÙOÿrŒ±ŽL)šL’ænô/SúÝÖt¾ð2üëãêÁÁÁ°ØØëƒMZqY4Q¯pÿÍŸ< dÿþp¬¿ÄÓS) Ê¬=Ú~¸+8^¨È¼°n˜@ <.)êµ}›>"è^e¶Û*:N ·vR¦^ÖfœÓ­}ñc[Ê*Ü—ˆ†eê³H«x]®!´eC¾—„%ØûÉ7+~áE´Õ^ì¤÷=¯qˆ{‚¼ÅúåjÓ¶¬@%ç jR¹f¨Í‚g;ÙèTÙÄGwŠ(0õ¯¦èç,+‹¯óõù‰rÂg.r”±Ñ†^%PWs ü†ªWl× öX¿z‹0œ®Ý0Ñy´$Ù[ ¾á±‰Ç­¶7h)Äú+&Þ ÏÝ.’ˆMܽ’#>@4òžœ/Æ:Q ˜áø†† ¼Ë:´x[_ Ž5ÚAJ7šd%‹Fãå›f·ã˜þhrÁrN¯û7htí×YOͯڃ>l¥Ybf·°{zÌâŒj!"OÞèÇ >ðϤ °áˆº–tPÿ¢ö{© *»zYµåó3ƒi€öÈñïùü¡‰Ðmeœ]W(ÝíqÅï^ Ìr=EÙ¾{¯NÀé}¾Ž}„a¥x¿c6D#Ƕâ£ñ“.v±Ñ5ZòÌïîCëh:Ò[Í£%z¦¶nö¯z•¿Ì²}B|þAâŽ×ÉáÞÇø¨Dirxó‹uà†'÷ç£Æ+í>$|Öߊ¥ÚÝÀÿ¡ÃDeÊŒfý6q0T·³{@¹Ã×Çûjάo:­Ã9üç@”ÈÚã"‰°Ž¯§ü–’éË$OÁ§‰77î/£ô»^‹Ë“1ï¾4H¸]Ànî`Fââ³[Ž Á"öz:¹œ9ÚÂÖi×¹h¶[i/^ï}±7Y¨˜)ðvY£‚µâm'g÷§6Ï^zT¾ƒŠwžaRáºq=ÿ9ë嘣ÿNºg'~Ú,È–rï¦j3‡¹“%«Jˆ¤Ý{zŒm(1ì y6ÂïÒCì»äsoo+¶± Nð½_¼xñ.‹xûv„˜­É%r(ãoÃöHüMš@%?†c•&«¨jÂÁòx¾ =Þ¸jaú—¨Å¬ÏÑ%¯É]åçð¼~ú=ô‰(æw蟖¡×æ.ÜóÛz~Ó;Dßð ¤új©Šÿ¦%ÀRüû7aÛu<¡Šóô4?]Ò_ïgnÜF/Ú©°ѦA“WʽÍhÖ–Î/·ŸÐë?jK¥È„’A_Ŭ¯‹¶_Éj¡¤Y‚nìɬŸ,Ty0%B f!´:†¨‰50·¾Èo+5bÕhÈ–~½4>´™¿ñO8°¦“•Áõ_7âÄÍ=3Ãf÷{ú¥ÿñn5Çh£?zg¢0r›Q#N’Š‹J,ÇRCâC ädeÁjá2ìFTé88È[„ت(Û®ð+}8ü笑‡-~7qà©ëÕû¹9£/G3¢™ F"©ÛS™SaW±ÏK!Á`R qqèó çÐwÃÄɤŽûèÒÀ=Ö> –q$8lrC=ÿ„D-ýü#SB¢»þ+ ¯ë„5AÛülvµ»µ4 #Ù"Çî6ÜrJQ;´Û‘É›ÛÄlZŽ7öÕ)ޤGª~ϳ:ø‡¾›Ž7Ø­;í7ž>74çKé쪞«CöÌ"P˜5Û*8ü‰»ÝßC¤t)ë,ä±[?k‚Eˆ/·Ü*—¥rÐHjU¦Qù—Ì¡Éy÷E½c3­ê>j‰jð$EœÖÏ ïrÞ=!„® ºqÆç¦§í(ÔÎÂâkØŒJÐHâÄpe½©²PlŸï±,ëŠv1€둹«€ðÇý·w®¬$#œÙG7ÅO·¿Ê¤¥¤ çZh¶¸–›P' gefF‡ã3F4CSØu»½ŽÛP´sÝòÔÍ›Yª"“£¨½ÇF2uõöÚ2:aSFèÇIp ìYûù=xžÞ‡Q½ó¤yû–Ô) ÏÁŠ=ô()PæÅ9p?øJ÷µœåºû³¦òŠÒÓAh¶Ù-R‘DÏ—ï^àãs9ý}¿‰Þ³¬ÓìŒÆÑqÏå¹Çôü­C .0.RôãÄdµ áKÔ ‚Aѽ»7µÎJ®LØéÕ[ňý™ÁßwWá×R2‰>Y“›Û ™ú¯ŸR:tóÇW3Ý–»vÆóÛZà #'( &¦ýW0·±n-¥KÕºñ~ÆKˆøÛ0ål“ã|ƒÝñEãý½wAAÁíÙÖl‡ŸÈè =Ðèulým›nÀ}ÇÓî²Óh81Û\SbÔ¡©È:Y«å§ú-ÒÍ â ÛûÞŸÊôÝJÊ¢ÂÇþóX@¿3¹YccÊ^Jñëíl=Ý2ßeß¿ïz©TÚ˜3Žh6±£QR7ee.¡ã^<ʳ3¡¬“}€v¨îÚìWз U i'ÿ§ß]šO•&¹+ŸÌ¡> Äý€ëL¼P|ƒãä*uºòzÿÅ‹*³QªçKld†_E½…Â÷œ~XQy!î“ñÿùCÿ_‹Æ+‰Ðî÷Ý É|ðµ›ð€pïÔ‚âr¶ápoñÅÚ“jÄ¢¤?b‚û‰½‚f³]ÿè›çNMãAÓ®·vÐ*χXÎ$+žœ>þm°í½L)­OOeZžþYr½ÛzД ÂN}i(õ5—Ï¿‹8­`Нå/f‰pq’D4õi ä…Z'“dåïé êÛŸìšKÍ.ñQsµfù4Vý¦ôMú~l™Û,–Ó/—;•8zú¾Ÿ»îé pˆ¢—Ê&DDFö(‰<=>Üy¹A²Uþ"uVÙÃs†'òHü²Îç­Z¯¿×Y©=\‹ÝrV&ƒUÐæÅïy¹ÇPª’¥øjþ%c¤Ó¡¿º‚%z“"jYøŸãÊ<Ánsܧnî÷§¿ªÁ/Ô§¼úÜÃOúã¶Û¦mÉ_›.‡÷®‡î Ýê?D Ùu âУ½Ä‚Ñ ŸïŸ½d`Èu=œÏ{`TŒC“FÁùWôÞ}ëwB'óïsÐÀY‰¸¿%tÇ2)ƒf6W±rn€±ÊÉ[Ðô_邽jÖ¥Ù:’Ù÷ *›Í«ð•²øáÎN„5)Ë û;¯•èRËv­—Õ\ C½ÝJŒ\â«ðßéÃ&B~ƒ ¬dë‡óÎ5¸Eê¼ÝÝÝ ëƒþ«\6%¦Ôß#a; xËåÙú&B ù™hN®Û.ô¨ÝF–l:,yç̨D÷÷°o¥ùò02,C!Ch IùÒÑâòòèóõ6,ó~‡d©?]ÊìÌnÑüB—|»¼^y™­S㵚îyŠÚ~)ÄŽt«lŠ$šïÏ©˜L ˜Ä’¨˜í žè«¾à^ñ%R»Õj¡üˆ‚÷°[T©× MÀõ ,SÐÍhg,7¯”ÿóç—Ñ®[ò»k‚n'Óœéƒz% ºàttƒ=ŽÇ”\@ÓR·F„÷iøÑü‚Õz=WÙº>½}˜Ä²ñøÓ¢Ñã†óÈçi Í@^6üãRKhµ¯¨u:_˜fMo¾§Í<Ïs`Œf¨qÉf\î\n˪¤ÚŒF±ß'"]ÇŸFA³˜bÁÕfúèΗ¾VûuÐixªl,SøÐ]IFºû~è5Uf$ŽŒíÓcc‹9žmÆÿ–Hbz·N`ÖrÊqÞ¹´¦ïÝt£l?ªô2BͶmž—q`ûíþW‘Xã‚RฯÛõgu’éžâZùÇ"ìzÛ¥ß,֥ʰD¨Á¿-âe/§"Eï8—~LN·ƒ0¯×¦46£T‹o|ÈÜÔ+¥§oN«ä/Üêü‚åÛ¼èMïÝc›‘˜“ÐP°%--™=¯˜æýîø¸6MNkúÖ*P:×tÖÑÔóêùYEp1µle‰ÊÝrþ·cÖ#CßGИ0Qß2õ ª×£Þ%j_x¹å§G1ÌÀ*—}Ü…úò_K„,F#oŸÝßrª”aÞo‘ÓO8Õy#"e7%.]!"UÁÕ‚‡ìYÜηGCÿ»l'PLŘ9pš_›Qn*üxÚÆÊX›>Zð<ÿÀPíóI=yf)Œ† õ6$"¾B΄üC¦Ü»¦» Ä|.S‰Î¯ƒþ0õöö>; ¯åW/}Q1W°çZ?üËŽŒ!}C+M3¥|†Þ¸±àp­VRi0X|S|´èpw/‰ æ¶yÇ›]¬Æo+õ0Ò‰RW#PìHvõPe(ÈxÌáÃéüÏ—ÕÅ”J™¢qšhA¶ž¢–ý•zƒ ]î{ù(*U}ªŒTH^¹^éyõã{'ªvÕ§ù™›š/TÁçV“Åþ[R6ö+;ˆ gkšV¼%¦§ñU3P j!äüòJk‡sµŒÏ÷ö(`'ñé¸Ï_F ®º1ó/CººjúÈXPX@ã´øÆ¡æ5>W"#}½•†Ê ·†ÇQÓö³A .úß]º·qºu¦¢Ä%IMÄ7äý·ËéóÏùù©=äÀ®ü;µ8Æ/ŠÀÏl+5Ÿ@ æóúZºv²ÆŸ• :!'y]ŠÈ)1iôy}Ÿ)@HÎo+IÖ%èG¥YG<3ךG°ç nOb–•—ï†CÛ9n?þE„7@9¥Nå}‘ȵ£É¿… F…Ë`˜“­±hÐU€“K¬Q¢ß!<]©Ëôñ{X2= ŒFƒ8âßÓÙŽ*lù?Él™¯^2}Åú(Sè§ð¥zs?[ Q ÒÙl+šDS±5‹|2}õđ٠]¼vGµnqO†œqóç¸æje¸ÝV§ÙT¿+4~˜]¡~cO£^¡Sò~mãë[È*íÆWµ~ñþÞðÆ:Á3†d²ÿ2…£¿É%â®üdbƦŽ9áµÊ‘Wr»½ObÑèG«v?5R#t'ïëËyÿ ¿ýß‹÷ãí6Ã4·ìa`F\(ø<¿pÈT¹›î–»G«ŒèQ»é…Xçºy¢¯¾Tw~Køæ¶"5õwXÅbŒf´Q³¡êùf{1ˆ¿Œ¿)qUó¥±@ÚË·š© ò!ž[㨊úKm •YãLÏbáuE³Ÿ¤ÑùF[qÑ6tmFïµÅ‹u*?Šñld-­ðm>Ìçy"6-YªÅ5Ÿ‹q™¶[2ôBL0ØTöË9kª&Ìlc8k’p ßãÎÄRˆýKѧ{ gÌHÞWùbFÖrŒ;SÏÖ”éÉ(tÒó¼¸?>×R`¤×|t± àýàøá$(Êîöv;›ÎJÔq"­Ì+ôe¼÷§¥TœëÈø¬ýë¾Ö[—z]Ì×a|·Y0˜íX±Èø1£×óà¶âòöÈáéÑg(ã->¥€³(ŠR ½ª=i=â¿ønž‘þt_™8àÀ‹›Þì­­Âù߯:Ϻë¾ã€(fArpHÜjg&»v„È&]ÁÅL~g0ñ)æ¾Ùdjv¡U7ÝR¿Ý·)³ª÷Á“¼øñyyYk,—ž.î¿"œ‰zë.?…”n½þZ’ë1ëë£<Xð*=ÿL¶”+tʇ`.à‹}>«hïDaW­ˆíQŸ-ÁK]qðœop ?Â>|•ƒð;0øÿ{àúXDçye[s°Æ&LÕàûÍC·ù¤¾ŒûµŠÅ,§"|Á:`̹z5QX¥QÒ½@ÅëÆÎÜq“÷+Xp Ù˜{m$©QÄŽMŽ@…} ³Fì¤öyéeÍjËøª›]swâäî8Ìg ‰›òl÷2YŠÖj¶ø¹ ž¢õ>u¸˜ÇûÍE(Êé_‚Æ6"P¡ˆ§C©ûË묤xïxøíòÎà¿O³Ò €ùÊcT8RPßo˜Ø¿UHŒ :†€õL¦$n`‰¿: TŒÉµô½c3jqayl¤(Û¹„„᎑SZS£¼»•’‹Ý+`Œ^ˆ>‡_‘w!Ål<ßJ‘}ºwRññ[š«->ëÆÓlÄ&º¨QYvÄaïv¤£÷^419½²»ßëßCðÙÿBÒýWÐH›<^³b‘ŸÕ$Â0¾ÃtXjó»w;qÛtÝ ð¢öé]0}㌺õwk‚’i >ª„ohl˵C£fôQè°'3ß2·yæ®ÏVe‰P^`}–¡ñ£Y®8n¼ú´ºp€ ® /Ö„Ö˜ô±Ì^#Mz6™-Ìï곚çå§o®ÇWÞ”4Nvg&“eÛîJŸËa×·Ûb­ôHoñj Fˆü 6ý³ÕAç[dß3U,nìÕ¼Îä¾ÞÝ;íÄR±}2êܹ”}:x­'ÔÙh•"S‡Bø›ªn€,G!µk N×n «t2¿Ý[hÀ«³§-½Ø ´NÏ_߯¤ßK·3Xl!ÞÓn°Ÿ©0¶˜ÅõÈp¹ƒµPöONÒ,«ìÐ5䨞‡^v¡œ®4¬ˆ»]±æmZl+Nëù< wóÙIÏþޱqnr„k#Å ï¹kRûj|BDsZ¨ç´Yøë^Ùbik¥FòÈA…#"¹ì­vصûÿf zºÀïž©þ;_g$’ßìG²â¸Ö°B±@RGV¯UF3Y àb`±Lá Ÿ™ø¸Ò„ðß÷­6? ú ƒÇ$ñàFU}ýtÆš&Q¤Ô~qÝ-®MB¢s‡àÒàÞž£.4âæuU>¶ü¹¬D’쟊+Û˜Sþ[þH0ÑâP[ȃA€úYø÷éPà€û§…íRÀÑéÎHfàÑÁ瑬૽O±¦¤óTîÀHÖEfJ§/Œ¨ò~KõþN Óú)Ë}ÇQ$ƒ³x{¦­£ÐÅ;û)=†RØ™«-bµV:„:‰È1´­YÏÞþ„Õ’6ŸoSäÜÝÙ=ï‚™¥lÖÉ¢BW¢©ÉIÅvYh“ß.&Ãv)n¦$±xV&œÓï1¼*ÛOúæûe4KÖ—EV‹ŸB „è*ˆ2œÒô¬Ñd]tši Nxµf†oÜqCòe ©¹01Cqzìo8OÆeì&=2h+u5­&Wgþå[¯„þ»²ÙQÊ€?ŽŠ 9£¦ù=¹xúMkÕÅ=v¡$($2±×ØKÀ'¦NÁ€Õˆb¸Ø€c(èÚÈ4°ãÜz‹QúãǺÆõªAd¬Ìßø£•l~1YÚ*˜.üEܳÅ"†ï_mÖÙŶ^Æ {pGu×ÔÈË‰ÍÆPr- 0‹¬þ7gd¿PÇâØì&#–)àÛhüü$·L”¤âhÖÀîþ×9ÌÇÎÃ% P:Æt:°›:Qü!Á¬JaAñº=«¾Àe}‡¬°Ñ_%|"ŠÛá/nñüf7IôK`@nå“ò JM*FNN®;DYÕÐdÉ ¿À12™æ¨ã7 RwÓ£?wø¢ï¶<±¨m âó6þ1\Ê–=! €#nÿXë '‘úlç!Áh¢ŽXi0˜{€ŽßL ¸¯nôÿk;àJ¢,–ËJ;³Ò°Á‚8#€çí³E L}RU†E¨àâ¨ù¨ÿï[zˆ2d éî4 ›»ªÃÁ£²’ƒ½îƒ!"à‚€öZYT:jP,•ÍÄÜ)÷?þ¦{ÑaEµ‚lD¬Ž«‚JâOTœ:Q×(Ȫ*Ÿ¼öÄõR†ä ÞA_Aý‹ßàðnç¢ÂÅ‹»\}æPfø žø5ë Yb^±Ç‹éd 4<×j²Ê xs £‹åž4Øâ 5ÖãqùĊ戫tè“ n6KY¯„­{+Šåþ%~ŒC¦H&·J}÷>rdS&€`µ‹† ÞIDDeÝi‰åòˆ’_ój jÒVÑ£Žû% H3QúØ×¥9«Ì?ºR^BÅ(¯“kUT2BéôB¬   éÿçÿ­&¶§ê×ü‘“R”¬7ø?PK •nYT&%¤“ººpos.iconset/icon_16x16.pngUT Y(bY(bux èè‰PNG  IHDRóÿa pHYsØØú\¦rtEXtSoftwarewww.inkscape.org›î<GIDAT8ÏK“qÇ_ÏO\'êlkˆ–áf3¡º(!žê(½Ý¢.^„ºDtëPBÐM ºaê@Pa™5Tz²áLâÙôϳ=ßo—6góà>ð>¼?ï÷›·Â?lþÚùª3ZJEW{ŽÑÙTŠÅbÄq;—Ë ôôôlPµL‚†Öj9J÷P»]¡&Þ}þÝwåyMÓ:E ªªzÆ4Íï«««·Ž5@  ‰•+17¿ÀÕö½±z„hš†mÛ†¡ú¾ÿ2•JÝ)¿)ebe²_‹Šo4•êÒé²Ùuš[º‰F:pœš¦æãñx€^êø2 «!°í=–—ï£i;45%°~¼fû§I"ñˆpøl¥y…!*·¾>G:}ƒHä##éRossè-ÍÍ9ÖÖ&ð}?[cP*•B°°ðŒÆÆ1††¾ÐÖ–avö9v8L25M0h‘Lnຮ{ؼ 33o°¬' îÐÑñ‡hô.[[&®ë15¥_?²Q¥”RFì}vwCŒŸfr2€iÂÒ’Çôô)ºº0:ú)¥¬i „àb(JìÒC^¤>°¸8ÃææžžwŽáá z{¯Uvª1ð}aš„¢íÜCc>w÷+¯0ŒzÆÆžÒÚ£ìû~­¡ªßÇàÊö6—ƒQÜþ~t]?’zl!„,ôõ¡[f2 Šuu¨ªz䡬­1R"„À‹Åðb±j5ÿ£jÃCƒ|>Ÿ 5âãP(2'žÓ ´@­ôwIEND®B`‚PK •nYTà–3¨{{pos.iconset/icon_32x32@2x.pngUT Z(bZ(bux èè‰PNG  IHDR@@ªiqÞ pHYsaa•ø¶tEXtSoftwarewww.inkscape.org›î<IDATxœí›{\TuÞÇßgΜ™AF@Á êãuY+I+]Iyå%5ï•½Ê ™¥e¥™»ÊúØS­e›>»O[öH Þ³H¼‘%.±¦›k«’¤ä…P0d®çœç㌀ ÃØ¶Ï«Ïëu^3ó;¿Ë÷÷ù}ßËïœhÇŽ)Šâ”¦ê², ²,‹²,£ªªÝb±¼>|øðï5Ðc MU8zô膘˜˜ÇT5àc{…¢(ȲŒÕj@õTUUÚ®^½šqþüùgÇo äxú¦*¨ªŠ¢(¸\.T|`ÌXm6>?òOÆÄÝå)­gEQp:8N¬V&“‘ÐÐP“Áhœi0†êk!š(²ì)¯­µí‚(Š’$I‹óóó_¥ÞºÙ6À » ©ß:™-1¾«ÈûE.dJJJ7nÕeß3²‡‘á÷Äø$Hm"ÏPUÅE§ÓÝD‚›N'J’´(''g¾OƒâS_~ù冘˜˜Ç\®~Ý=ùi=õ„HZç¯)|zªœŠ=ï1xð`î»ï¾:îÍètÚz¸Ép8TVVR^^Nyy9‹u:I¯Ç`0b6› n…ÑhÄáp ‚Ýb±Œô%`ò‰€Þ½{{°ËvÆÅÔ¢gòn8Zž¸ Á}Úl6ªªª¨©©ñD£ª¢ ª*²¬ (2Š¢ zQÄܺ5ªf?*Š‹‹»L:ÕÚØ˜Í2‚MZ6yж[mDQÄh4†ÙlF–eUE‘¯?Uñ„ꊬ ¢" Q—ËÙ¶sçÎË€ß56f“\ÏÈPT•´32Sºëh­¯k°…ü‘óçÏ£ª*z½žˆˆÂÃÃ1ˆz=Š›EA½î4T@EÉKaµZ» iyƒÂú¬0óW"º@dCµŸŸÏæÍùüól®\©¢cG#mÚè©©‘)+sâp¨ÄÆF7Š1c ::EP®»ËúÆÓýÍd4RZªÔ.ò Ÿp"Zøââb–.}†â⯙5ËÎ’%2ÑÑ Šu“¨²2øòËãìÙsŠiÓþLÇŽ]˜7o1<ð  ¢zJõˆ¢Ø¤´~B-AFƇ$'/añbYY2TVÂöíPX(QVfÂéhÛÖAl¬# 1ÑÁÚµ°cÇ·¼öÚó¼óΛ¬Zõgúöí h¸Ž H’oSóé< P°Z­¼ôÒB ²8pÀJl,”—Crr*ññƒ4h}ûvB’$ÊÊÊ8|ø¯,_¾‡ØX•7Þ°0e Lštõ님>}/½´‚Y³æu³J-ŠlZöfm–àÛo¿eöì‡øõ¯K9rÄFHœ8‰‰ÁLš4“3gVÒ¦M/-à´XذéCFŽ|‘5kª™:U!)Ieð`‰‰ÿ‰Ífeþüg›3ɦC…¦°cÇvÆŽÊ“O–°u«6ùª*?ÞÌêÕX½úOÞ'¯ªžŽtæ IIsùâ‹B^x!„ÂBívïÞmåí·_'77·Ùø 7Ç7tÙl6/^À«¯>Çž=V,¸V¿÷žžáÃdÒ¤ÉÞ.)qã@!6€¨¨(Þ|ó]’“C=Õºw‡·Þ²’œü|œÂ(µ˜qöìYï§¼üc޵rÏ=uï<Øš©S÷Úöhz:j¿~pç0}z{'N$?ß^ÇðOž ß}WÂÅ‹}ž¸-ʺvïÞ͘1C?¾˜;­xÓnE©›ä¸qèÐ!ÏËÿ<ò¬\yÓýg7ÊôzPU…¼¼<\.²,#×Ê C@Ý Óéäå——±k×fvî´×pݸ¸j>ú(ƒøøxOYII .dýúõL›6Ík»¬¬,ú÷7¢ÓÙýôS"##½¶)))aÁ‚Y¤¥UzÊd’’ ,LÂd25[ö€l}ûö1jÔ&L("+«éÉ´m Û·W“”4™•+—c±XX¾|¹×É+ŠÂæÍ›ˆ‹‹%9ù*ƒkåW¯Â„ pö,´kgôzÈÒZ´\.kÖ¼Nj껤§Û1¢yíû÷‡‚‚k,YòGúôy‹ÄÄ A§N7¡¯¾Êãã·icÛ6 hm aÒ$h×Nûܹӿ8Åï@èòåË<úèCÔÔœæïwÒ±£_ãÓ©¤¥ÕpéìÚµ‚‚]üðƒ—K <ÜElì5>þXåŽ;´úŠø¬Z£FAŸ>n•:rLêèìÙ³TT|Õêäé§áí·¡CŸÆôŠÈH˜3æÌ±ÞÏ0JKᡇàÜ9˜9w9rJK:wîì“ìµá· Ö3w®ÏGGûï.[¬ o_p8`Æ mò.df œ8Ñž¬¬ôèÑ£Ù6 Å$Áý÷kñÊk¯A\œöþÈÏ/¸\œ¬;#FÀÈ‘ZpXU©©zÚµ‹cÿþ<ºuëæWÿ>k€7N§ç{d$<ö˜Íšqûýï¡Öm¿PR¢ºy3Ìš·Ý¦•Ÿ;))¦M{Š””-^ýÀ4À}$vÓ¨¬¤ªü¶ñ:&ð¬YšÐ·ßŽ'qi.>úHKÌfM»Z·ÖÊóò 33˜””Y¸pI£îÙ—hÐï-pgÇŽL²éX·®Ç×ÍÂÚ¶…°° Γ:4ˆyóàÚ5ßúµÙ`þ|xâ xðA2D#Öá€;ô\¸Ð“}û1`Àoü½ü6‚†ÎYã‚-)RTÅ´âòe­~y9ØlÿÁîÝ{ILËîÝ"11Ýø8'OjÛ''fφ®]µòŠ xÿ}QQ£ÉÌüŒöíÛû”“Œo/\@p¹¸ûøqvíÊæé§_&#£5¨¨€;î¸NG¿~÷eä¾û4U~øa úظ„nÝ`âDpoë¢"HM5òì³É¬Yó’$ù+²Wø} ;†«gOLŸ|ÀäÉS9xð0‘‘‰ìÛÌ_äpúôivìÈ C+ÑÑZÌ~æŒæ2SSµþ-˜¥K5?`žGb¹¹:öï%5u+<òX³³Ò[z`øÛß°<ñúsçÏŸ ,,ŒÕ«×ò—¿lÄéTX´è9TõŸôꥩ£ÉcÆ@b"¼ø"$$h†²¸X lÜѤÝÛ¶(/fïÞ/¸ë®»£ÅðEÁ”“ƒíþû©ž3‡ðgžAªåü @~~!Ï=÷o™™»Y·nÝ»w'!!¡YBû_µÀ¯¡-"|ñbÊRRpFG7^Y°‚uÈÄŠ "žz éÔ)®¼ù&óæÍógø€Â/#h2„Š•+é0cæmÛ|n'·mKÙ Øl„ÿ®Ñ÷~2ø Ô JiFæôt:L™‚é³ÏÀél::E.¯]‹ôÍ7egÌàùk[t,îìÕ‹KÛ·¼{7!ï¿O»^À#&GïÞØââpuér3¡¶AƒÊÉ¡fØ0Ÿõ¾Äy:\@uBºêj 'Ob8yãÑ£„­YƒAÍèÑØ¯Ÿj'83%4”˯¿PÃW_f_Ð'CŠÙŒíî»±Ý}·[ ŒÇŽÑjÿ~BSRP ·ÝÆ•W^ÁÞ¯_ ‡ö>ÿaÂß•²ÅÆb»þt·^Ç~õç+|•Ùï7Eÿð/}<þ왟+~Ñ€¦*47°ø9! FÐ׎~nT:l¶X,æ–‹ó¯ÁuÙ•¿©- ^¼x1³   TU ð›Â·‚ ¨€ZZZšÉ-ø»í/ø¿àÿþ!Ùh IEND®B`‚PK –nYT íApos.iconset/UT[(bux èèPK •nYTÇ¢4½¯¯¤Fpos.iconset/icon_32x32.pngUTY(bux èèPK•nYTrQ¨5t#›#¤Ipos.iconset/icon_128x128.pngUTY(bux èèPK–nYTŸƒ(}ç€X•¤+pos.iconset/icon_512x512@2x.pngUT[(bux èèPK•nYT=`ªæ­¤S¬pos.iconset/icon_256x256@2x.pngUTZ(bux èèPK•nYT=`ªæ­¤ÀVpos.iconset/icon_512x512.pngUTZ(bux èèPK•nYTïïHLM¤*pos.iconset/icon_128x128@2x.pngUTZ(bux èèPK •nYTÇ¢4½¯¯¤ËMpos.iconset/icon_16x16@2x.pngUTY(bux èèPK•nYTïïHLM¤ÑTpos.iconset/icon_256x256.pngUTZ(bux èèPK •nYT&%¤“ºº¤o¡pos.iconset/icon_16x16.pngUTY(bux èèPK •nYTà–3¨{{¤}¤pos.iconset/icon_32x32@2x.pngUTZ(bux èèPK -O´survex-1.4.4/lib/icons/names.xpm0000644000175000017500000000064514141575516013525 00000000000000/* XPM */ static char *names_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 2 1", " c #000000", ". c None", /* pixels */ "...............", "...............", "...............", "...... .......", "..... ......", "..... ......", "..... .. ......", ".... .. .....", ".... .....", "... ....", "... .... ....", ".. ...... ...", ".. ...... ...", "...............", "..............." }; survex-1.4.4/lib/icons/surface_legs.xpm0000644000175000017500000000210114141575516015051 00000000000000/* XPM */ static char *surface_legs_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 46 1", " c #291010", ". c #003908", "X c #003910", "o c #183918", "O c #212121", "+ c #004210", "@ c #007B18", "# c #187B29", "$ c #5A5A5A", "% c #6B7B73", "& c #008418", "* c #088418", "= c #008421", "- c #108421", "; c #108C29", ": c #188C29", "> c #089421", ", c #218C29", "< c #298431", "1 c #218C31", "2 c #00B521", "3 c #08B529", "4 c #08BD29", "5 c #10B531", "6 c #10BD31", "7 c #08C629", "8 c #4AB552", "9 c #52B552", "0 c #52B55A", "q c #52BD5A", "w c #63B563", "e c #63BD63", "r c #63BD73", "t c #6BBD7B", "y c #39C64A", "u c #39CE4A", "i c #39CE52", "p c #42C64A", "a c #42CE52", "s c #63C673", "d c #9C9C9C", "f c #B5BDB5", "g c #BDD6C6", "h c #DEDEDE", "j c #E7E7E7", "k c None", /* pixels */ "kkkkkkkkkkkk#<3", "kkkkkkkkkkk;ea7", "kkkkkkkkkk:wu4=", "kkkkkkkkk,qi4*+", "kkkkkkkk:9p6*.k", "kkkkkkk10u6&Xkk", "kkkkkk18a6&+kkk", "kkkkk18y5&.kkkk", "kkkk:0a5@Xkkkkk", "kkkkta6&Xkkkkkk", "kkkjgr-.kkkkkkk", "kkjhf%okkkkkkkk", "kksd$Okkkkkkkkk", "k2> kkkkkkkkkkk", "kkkkkkkkkkkkkkk" }; survex-1.4.4/lib/icons/aven.svg0000644000175000017500000001511614141575516013345 00000000000000 image/svg+xml survex-1.4.4/lib/icons/ug_legs.xpm0000644000175000017500000000162714141575516014050 00000000000000/* XPM */ static char *ug_legs_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 35 1", " c #291010", ". c #212121", "X c #420000", "o c #4A0000", "O c #520000", "+ c #421010", "@ c #6B0000", "# c #5A5A5A", "$ c #8C0000", "% c #8C0808", "& c #9C0808", "* c #9C1010", "= c #A50000", "- c #A50808", "; c #B50000", ": c #BD0000", "> c #B50808", ", c #CE1818", "< c #CE2929", "1 c #CE3131", "2 c #C63939", "3 c #CE3939", "4 c #EF3939", "5 c #BD5A5A", "6 c #846B6B", "7 c #CE4242", "8 c #C65A5A", "9 c #C66363", "0 c #9C9C9C", "q c #BDB5B5", "w c #D6BDBD", "e c #DEDEDE", "r c #E7DEDE", "t c #E7E7E7", "y c None", /* pixels */ "yyyyyyyyyyyy-4,", "yyyyyyyyyyy&7<:", "yyyyyyyyyy&7<:$", "yyyyyyyyy*3<;$O", "yyyyyyyy*2<:$oy", "yyyyyyy*3<;$oyy", "yyyyyy*2<>$oyyy", "yyyyy*2<>$Xyyyy", "yyyy*3<>$oyyyyy", "yyyy91>$oyyyyyy", "yyyrw5%Xyyyyyyy", "yyteq6+yyyyyyyy", "yy80#.yyyyyyyyy", "y=@ yyyyyyyyyyy", "yyyyyyyyyyyyyyy" }; survex-1.4.4/lib/icons/aven.xpm0000644000175000017500000001275314141575516013356 00000000000000/* XPM */ static char *aven_xpm[] = { /* columns rows colors chars-per-pixel */ "32 32 208 2", " c #010100", ". c #040400", "X c #050500", "o c #080800", "O c #090900", "+ c #0B0B00", "@ c #0C0C00", "# c #0D0D00", "$ c #0E0E00", "% c #0F0F00", "& c #101000", "* c #111100", "= c #131300", "- c #141400", "; c #151500", ": c #161600", "> c #171700", ", c #101007", "< c #181800", "1 c #191900", "2 c #1A1A00", "3 c #1B1B00", "4 c #1D1D00", "5 c #1E1E00", "6 c #1F1F00", "7 c #18180D", "8 c #1A1A0E", "9 c #250000", "0 c #202000", "q c #212100", "w c #222200", "e c #232300", "r c #262600", "t c #242403", "y c #282800", "u c #292900", "i c #2B2B00", "p c #2C2C00", "a c #2E2E00", "s c #313100", "d c #323200", "f c #343400", "g c #353500", "h c #383800", "j c #393900", "k c #3B3B00", "l c #3C3C00", "z c #3D3D00", "x c #3E3E00", "c c #222215", "v c #2E2E15", "b c #2F2F17", "n c #343415", "m c #3B3B15", "M c #3F3F15", "N c #323218", "B c #353518", "V c #33331F", "C c #2D2727", "Z c #2C2C26", "A c #363620", "S c #642200", "D c #404000", "F c #424200", "G c #454500", "H c #4C4600", "J c #484800", "K c #494900", "L c #4A4A00", "P c #4B4B00", "I c #4E4E00", "U c #4F4F00", "Y c #545400", "T c #555500", "R c #565600", "E c #575700", "W c #525207", "Q c #595900", "! c #5B5B00", "~ c #5E5E00", "^ c #5F5F00", "/ c #464612", "( c #404017", ") c #464616", "_ c #4A4A1A", "` c #555517", "' c #626200", "] c #636300", "[ c #646400", "{ c #666600", "} c #676700", "| c #6B6B00", " . c #6E6E00", ".. c #717100", "X. c #747400", "o. c #767600", "O. c #777700", "+. c #787800", "@. c #7B7B00", "#. c #7C7C00", "$. c #7D7D00", "%. c #7E7E00", "&. c #7F7F00", "*. c #656511", "=. c #676712", "-. c #686814", ";. c #454529", ":. c #4D4D3C", ">. c #50503A", ",. c #565641", "<. c #5E5E4C", "1. c #505050", "2. c #64644E", "3. c #646455", "4. c #666662", "5. c #767666", "6. c #777766", "7. c #AB0000", "8. c #F60000", "9. c #FF0000", "0. c #FF2A2A", "q. c #FF7D7D", "w. c #808000", "e. c #818100", "r. c #858500", "t. c #8A8A00", "y. c #8F8F00", "u. c #8E8E05", "i. c #89890A", "p. c #8B8B0E", "a. c #909000", "s. c #969601", "d. c #9C9C00", "f. c #9D9D00", "g. c #90900A", "h. c #95950B", "j. c #9A9A0A", "k. c #A5A500", "l. c #ADAD00", "z. c #AFAF00", "x. c #B0B000", "c. c #B2B200", "v. c #B3B300", "b. c #B8B800", "n. c #B9B900", "m. c #B9B901", "M. c #BABA00", "N. c #BBBB00", "B. c #BEBE00", "V. c #C0C000", "C. c #C2C200", "Z. c #C3C300", "A. c #CCCC00", "S. c #CECE00", "D. c #D2D200", "F. c #D5D500", "G. c #D7D700", "H. c #DBDB00", "J. c #DDDD00", "K. c #E1E100", "L. c #E4E400", "P. c #E6E600", "I. c #E8E800", "U. c #E9E900", "Y. c #EAEA00", "T. c #EEEE00", "R. c #F1F100", "E. c #F2F200", "W. c #F3F300", "Q. c #F7F700", "!. c #F8F800", "~. c #FAFA00", "^. c #FBFB00", "/. c #FCFC00", "(. c #FEFE00", "). c #FFFF00", "_. c #8B8B84", "`. c #8B8B8B", "'. c #9B9B93", "]. c #999999", "[. c #9F9F9B", "{. c #A0A0A0", "}. c #A1A1A1", "|. c #AEAEAB", " X c #AEAEAE", ".X c #BDBDBB", "XX c #BEBEBE", "oX c #E9A7A7", "OX c #FBB8B8", "+X c #C0C0C0", "@X c #C2C2C2", "#X c #CECECE", "$X c #D4D4D4", "%X c #D8D8D8", "&X c #DFDFDF", "*X c #FFC8C8", "=X c #E0E0E0", "-X c #E4E4E4", ";X c #E9E9E9", ":X c #FFE2E2", ">X c #FFE4E4", ",X c #FFEFEF", "._.{.].5.A *.I./.v.3 5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X; g Y./.p.:.-X4X4X4X4X4X>X|.B J./.P.y 5X5X", "5X5X5X5X5X5X5X5X5X5X; +././.S.,.4X4X4X4X4X,Xq.:X4X%X_ /./.Y.e 5X", "5X5X5X5X5X5X5X5X5X; N./././.-.#X4X4X4X4XOX0.*X4X4X4X2.H././.w.5X", "5X5X5X5X5X5X5X; s P././././.` =X4X4X4X@XC oX4X4X4X4X6.B././.a.+ ", "5X5X5X5X5X5X; ..!./././././.j.'.4X4X&X1.$X4X4X4X4X4X;.Q././.Q X ", "5X5X5X5X5X; b./././././././.!.( .X image/svg+xml survex-1.4.4/lib/icons/plt.ico0000644000175000017500000000137612540750610013160 00000000000000 è( @€ÿÿÀÀÀÿ€€€€ÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆ†fhˆˆ€ˆˆ(ˆˆˆˆ†ffffhˆ€ˆˆ(ˆˆˆ†`ffh€ˆˆ(ˆˆ†`wwpff€ˆˆ(ˆˆ€30wpf€ˆˆ(ˆˆ33333wpf`ˆˆ(ˆˆ333333pf`ˆˆ(ˆ€333334w`ˆˆ(ˆ€33333DC7`ˆˆ(ˆ33334D37p`ˆˆ(ˆ333DC33p`ˆˆ(ˆ33h„330p`ˆ""(36h330p`ˆ‚"ˆ736fa333p`ˆˆ(ˆ7sff33330`ˆˆˆˆ€Wvf33333€ˆˆˆˆ€Sxc33333€‚"ˆ‚ˆ3w33330ˆ€ˆ(ˆ"ˆSwws330ˆ€ˆ(ˆ"ˆ€S030ˆ€ˆ(‚"ˆˆ€SS0ˆˆ€ˆ("‚ˆˆˆ€ˆˆˆ€ˆ("‚ˆˆˆˆˆˆˆˆˆˆ€ˆ"(‚ˆˆˆˆˆˆˆˆˆˆ€‚"ˆ"(ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€àÀ€€Ààsurvex-1.4.4/lib/icons/svx.iconset.zip0000644000175000017500000073744414206024136014706 00000000000000PK —nYT svx.iconset/UT ^(b^(bux èèPK –nYTèÎ;½½svx.iconset/icon_32x32.pngUT \(b\(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<JIDATX…Õ–]L[çÇç›úcØ&¤B$PVšÖ2%ÒN«D*„RmMIŠªª]¶F»(Ñ’2A{e£É¦%q/&–õCmC’**B,+S‹–”P¢ñýe 1µX¨1‰Áı}ÎywÁ°À6´õbé\œç¼ïóÿ¿Ïó¼‰ŒŽŽþÉl6;6þuPŪëzr8þ–®ë³^¯·¢   %{¥ØÀÄÄÄE³ÙüƒÕ$ MÓ B¡~çÎßåçç\n¯Ð4 !Ī]ב$‰`0ˆÝn—m6Û/ûûû?ïííµ®J€¯×Ëäää"’ÑÑQãÈ}>~¿Y–QU‹ÅBrr2‹¥P1réÒ¥u« ®_¿NQQõõõÑàää$»ví¢¼¼œæææh\×u¶mÛFCCC´ƒ‹Å‚ÕjÅb±d˜L¦ÁöööGV\ 6püøñE§´Ûíttt°ÿ~†‡‡£ñ––ÒÒÒ€¹YˆD"ôôô000ÀØØ~¿Ÿ¤¤$‡Õjí¼zõª}Yš¦‰ùäóíB ( º®sáœNg4ÞÔÔÄÎ;‘$ £ÑHJJ V««ÕÊ}&Šbà^(„¢(£Ñø·X>C¢ Ä’Ï£¶¶–ÒÒR6n܈‚p8ÌÅ‹Ÿ12ҊѨ b³eòôÓ»yà,TMC×u„®Ï.…¹›M'@Çã¡¶¶–™™Š‹‹)//ÇçóqêÔ)²²²ˆD"TUUárý—K¥¨h–/¾0‰ü‡#L__#§OoÀé¬!?ÿ{Ñö¨ªYH |Àív· †§†‡‡ÈÈÈ 55•H$ÂÐÐccÃôõýžºº¸\¹8;زe;ƒ‘Þž¿rÓý1‡õræÌý{xñÅ:$I" ¤§§?š¨êQܼy³ÍëõŠDÏÄÄ„8|øg¢¡a­ñæ›9ÂãQôõ 10 ü~¿8xp³ñá‡vÑÒrVLMM‰ñññ+±|+6"ŸÏÇë¯ÿˆ²²·yùåITõÖ¯Ïà|c#­­—‡ÍfÃáØŒPYéç£þ€ªªƒÁ»±|q3 ˲X8x]]ç“Oj8zôŸØl ú']çÖ­q÷n‹ÃAZe%@€Û·»‘$¸rEa||!²,/NœH€®ë‹nÁ;ïü›í .—7v)¯¾:‘#%¤§ÿ˜­[Ëééé¡§ç3††NóÚkÿ © Þ{O#3smÔ®W% ¾þW|õÕÞ}7·Àd‚LJðx†èëû-á°Ì“Oβ{7:““ðÐCàóÉK ˆ›!„ðûýœ;w·{„´´ ÐÞžPPVä™gfQØ»„“IÁíþ>uuoÍÏR\   ³³“ÎÎNÜŸc³A~>44À¾}03³´ÆF¨®†Ü\ðxì¬[÷sNœ8ÉdŠ3µ%hšFII ÇŽ£JIãÊåïpë–™ìl¸qã»ìØ‘ÅÙ³‹÷ƒsÄŸ~ ›6AW×zž{îûöÕÄå^VÀ\ÝÝÝdß óAe5[¶ü†®®‡ÉË+ 3ó~Z[¡ª ¼^„={@–Án—èíÍãÈ‘)..‰»Êĸ ,aÅ>ŸÐêtbº|gu5[·þšš_ ª#<þ8„BsÄÂø¸™Hä)Nž| £Ñ˜°Ü‰bq$I¬¹vW®]£âèQÊߟT‡éÎAúUM{˜¼<7ééa’’ ¿-/ñüó¯,I4Ÿ{Yš¦át:ùÉo¨¨@X­LÏ}à|v6†éiÏ>Ëÿ|ŽîîFt=‰šš“<öØæ%‰æ^VÀ|¿Âyy˜Ûژݾ}îƒ,sï…oß&¹¥…ê}”ÕŸÇd6“ššº,ù|îXÄ ¡®ëBA°°!IØ].ä©©¨0Íá`zï^‚OY~¶ÜÖ æ»ã÷©ŸdsjÔý¡píyK„欠ï&Æ]馅å­Q?¬Ž °}%i‚äϺòïÕMTÏù7ÌéaöGü½JqÐõßÔ-6ò;¼§RŸ’Žx~z˜&’>÷5ÌÔVS… ”ÍÄèU v™Õ˜ðe«ýÐ\ˆ)ò÷¸ÜÛúw­Xc¬î¢¢ïßps¼TRï°4K©¥Å‘O†¢"”k3Çö×ð’ÅgŽ[¤ÅÁ3H@ºººßJJ²Õ54âcŠ” Ú¼Ïööl¸Ó‚1–‡A¨aÝ”3ZŒÐ·»)üp_à ö\Úeid¼¶4#µ[: ùåå墨¨½Õ•†­T=½Yb•{hgyýÎËŽ²ËZ¡À˜"çËPy‰ïê…Úe˜˜88ŽEÓûžÇ uÖËÍn¼M? ÓP–{@70K'δóÝG¶qÖµû6î°ù¬. ®”ÜÜx…ïÀá¯G¸sZ<}ïïîâ즊ú —àïº$³ºhœbÄ9¢É'S Ãáþ4ÈxÈr**^GKYbé–??VUâ×ý>½Oàyºúž ×"ô'[êî¬ÃGäK¾k†DhôÑ‘=Dú× r££øO’˜vÙ“ýDÞû‘ vã“X4N "$¢u1cy\£……Å_Ú¶Ë—d¨ZÕvQÑÎ@ƒ?÷¬||T=ÈZ‚Á`CšSâ Eô]6Ä.ApeV×Ȉ¢FÕ˜¯^…çËx®Ú&‚’*=ÂE×8ºGp¨;…_ÖQy¹²W?r#›dËnžŸ¿‡àŠ×ùùù4PB%<Ã-„ uIhLþ–?£NHHˆúlŠøS«¬xnß½j¶ÒP¨˜öî‰FŠýÔ–LÃ~´‹jž7%¾¡D3Âeddäkl¼æ(.. w\уaš„2a˜Hé‹ñG±Ë³—¡tÑŸçfuõ3оz5?¹´ôàlooϸ=ŠìØ€¤¹“)ô÷‰Úõ dQÅ $VœRZW eŒ¡}¸¿Ÿ™´áò:^œ sµ@ôÐ]ë²á©µž j´_pu­ÝºËä4·™«4Œ>TTV¶ÚNëëë;[rêLÊËK€Ãß™šš†GFN—}¬j Üijâï¸ß!ãU.Ù:¬êô,ÄZœïb@±Ïü¤£–J ¿y³âžù©uÙðp³¸Òê…{²Ü|)8Ü ['VŽÕXl°“õôô¬ÜJJJÍH¹ººòŸcÑ« |ú—¶'²wÚÝ/É÷¬çùøJ4P˜A‰Q­}<Ñ2˨ݷÆëÔh“½Ò 9´è/ÿç£J“¯SrVV p§5H»ÑiÓ¸QqiÅåKLQb^^ž™¬×éê“Ðp&ư&šœ’’»üãoZVÖ ÕM¤ÑLÎ0ÃVÏ´ŸòÉüÎëbl›Bù#%äó ®qÆŸäÎ3” »ÿ®}Ÿæ€²‚’¸Np˜*Jç?ÍUR^ÌŒx¨A:/FÔç„ünì3œÉ(£1uˆè©‘æÇ¾›"õ²ç*¿âã»!NÊÀH…FWWsˆÜ­#ÑÒÑŲçäË|5=š¯Éáw ÍzÎ G^õÞŠ7ð4çÊR0¸ÝŸ.Y¨6EJìäŸÔC ê1Ӣ蹓’‡a\ æžÔ3/#k¦ZédpM¤w´\nrYzyò Èè¡Ú÷Ú–áÃ) pñ̨(ôа0ÊíÚÚZ¹X]žÜvF]Âý=öÓ¯ÝôMô"ײ4[€WK ‚§s•«¦lˆVÛîŇƒ1†ëÁ“ûîŽUn»ãîGóœk.ÚŠ‡³n”#ÃÃLj+oß¾eÑoÄ ¸’€@ý%fÓQ>Àa1û[Âù ˜¢õãããíííà°.Ü„©÷ÕmëåHËnïé[D˜˜0úƒ¡òmÏÿG³ß±ÏùÈ'WëU$h³p%÷'3k¯w±w&&å)ËÈ feeéTК̳½¶Ô•)›)š±Úw·©×«'Ãñöóû:½ïÚø0kV³¾µµÅ,ÿ»R«L»!ðâ×›—é½.,ÕÄöå{—„4âAµ×£qg`ÀããcŒapv01 h½0’ªÈçr‡md!Ú©jN¢T¡ üvJ%Âd–¯s‡n'ìòóUdñ¯âeʵQúhb´Ä+´·vO#;;EgŸÜ8Ãflûw©ä“gYŒ;×TDŸÜ7z ÍzX±T§:‚ïî¼± <]mWtÚìmö8$Uu>·(fw2S‡äБţ¶I¡—ÍØŽZÕÑýÔÁ'Ó ÍÐG9ÉH!#1ÆTs.wdÇÅaù·œÝœ{Z!Ê—ÍD¬=EÐpƒ”^w›¬¯x­yùùøpzÍ›;qeÝ”Ul¦‹±s=\MŽW¬ƒ<{lô@šL¤Ê‘3f¿´Q!e±™öJ VíHžjÉtz%™ãjâáÚo7¾A#é¬#~7G>_Z-B&@øøø¢{jD—› èB‹Î¦UDÏw󃋮I­…@9Âs1ް ëôjtÊcŒÄ¨2¦éù‡³ÅyJ·€êÚ[êØðÍìó×_Ø"zˆ¸,PçîŠ!bÖir.4Ĺ·G”6Ï-{­\íOºWA‡Ø@üG/€âÑFWð%9¾)æ­Jù5ŽÌ(!Z ìÿgññžÞÔ9õOpø”M—mÃs'A» ‚s6Žª:}ué…ôkNNαØèè4LLÃøUÆß¾}ãOÌ{ï—œ™¹ÇïõôÏcð^:ÙÐäO-fYÕÈ"Ææ¢ˆ @Öˈúm¥Ó‰ š ïFHÂIfƶ’=Í@¯¥Å¾gÔèŒÞxAÞœ ¦©#þ7føt2ü9*µ,„DDi,Rz&¦˜ÒRÆŒm,T$€¥PL.þþúSö¶¾nbû§TpS¶ ¦ÙPyFåd±$¤_+>ÚÖdšVó+{<ÄY\H´ ƒI~j(ü§ºÿJL ˜Þç»-ÜÁøZ`6Õ{ßÔ‘'Ñdz^ƒ¦´˜‡ÓÎüÉIU IÉýÉB¤xòwžr´eΦ¦:½*Áƒœæü3ÿ ›EN¢ªš4"´‹®YŽ£š×Û•Åm-xt zï{µ^_eÒ2ŒxWFÃ&ëê|FA@0c¤Æ¡"´¢~¬³e2hµÚè‹&üðN;_¨‚^:›7‡ßmÁ¦Û|Ü o‘1ä]““7_1µð]üšÿ ý¡Q-ÓêÇÔeÇÖD|¼ž3Æñªvã@³µeÚÈGëš›ƒë¤·†¡ár9,ò vh—mOÉR[º^3)L~ŸÓö[Š[^÷}D˜(N®`÷Ë#Œ_â¸n†ÖÏÇGœœœåâJ&fÕã¢Rî |R-›áëÙå±Y˜× BH´ˆÜ'¥Ï˜þ•—]ðÇL~<_Ók)&'%%%’ò“ùêt­Sg;ÍpØ®ª]»Üú g{€©êØò:Y6Ýì‹Ô]Z +ü£qD†ñgA-¡áбlÓm…¨èz—6ÏãÅ82Þ˜$:YA(Žx¦+ŽX…vJfæP/®¨ÿÜU™»`×Êúß_)qÉÜÖãêÝäN]§à)#¼8~/Çe¼Š÷ÌàŸ#»Äº9ÄÅ›Gü|Ä_ž73’ÖÁuVÝÔA–¿¿É³èTÿÐ(ù]g­²$‡-™uzag·¼ì§õV'Q*^ß4Ùÿý=ŽZ4¯¼œå¤7ðáÙn?àA ¼ÚICýY8”•ä`6âæxc#Òô̤û•çÝ¿žù«¸ÒÓ§Û£…X,j‘mg Öù qÚžñÔPúH”œO9Ë×c#šˆõö µ:.Aýclê@·ÍñgËu ñ$›äSð))±£D§h§brMy$4!þO¼9‚inÚVÿ› &&4zéõõ<Ótß_î6û ¤d˜Î0½z‡óï:, Ý{=$GP“é:*VpUA\µÇ¡6•o)óåNÀÖÞOˆŸè©˜#Cð2wÚ |(i~^'CPLzëh¡î¿Þ¦¼Q)šêªÿt¶“ý÷¡4›/ú„æ­üQdx8‡ÿ3`~ett^Bƒ²ºu»dýòüTnМŒMÎg•¥úc½ŸÄô@Óù{¤QhB˜¯Wa6œúÜa˧ñ4! ݳ^Ç)&%µ¨èèBë Y~Ÿ ¨ÇaOeQ„ ¡±š”ÝÑŠ>ž(O*«~£óɲƒJžR›!&½ˆXïglRAwFÀ í\løŸu£Ù4æ‚CR2CñæÛÉW}ÐF­À!fqZÎg•-ÈŸ¼l8ñóŽšpœÝ,9q›õ¡ÿþýÛçJßrJ [Áaÿêqí%Ĉ}ó—Jxˆ&¬.ˆŸû56âWÊ·‹¿ò¾W{@³'k¾Jùû?oÚ6$ÊÕYE?E¾¤M¦ Â*âV0;aà bÆp~~ôñ½=뉫•m|…™ô¢–ªÑ-ÀD?Ó+Ò02FQ yrgû}[ÑùŒéÔŽÂ×N…†DÌ>½/=]!=Î1«:qR¢ex¸Ò0bjhábsºøƒyw( •p&‡÷Ù:ÁÚ„=ß% ˆ=Ì:¯´«Æ£©Ñ™ì·d¼8œè~8䱟Z„'²¸»ùж*9Ûæ;nËš­ æJFóEóéÓ«Ý÷«þlýë×!hTŒjí>„«BÖŒeùƒ'\G:Ú"/ny¾¶4@¤ãÑÔÑCÃržKéù ‹™õ>œuøwµŸà Ðiõdmõ:µš,ÿÞ1GÊ ˆeß„ŠÙ/‚9my¼sÔ0TŒóÓÃúÓµ_†g¥lëñäX”‚©0‘èu ={SÕÖ¸<ö{Ï~Ò21•ë€Ysß›Ìh¬Õê1€ÂC†‹¤"˜0sÄÍ–‡áᬮžõN~‹>¬µtЩû*qç¬ðÈH!,NbM–óܹؓÁUÃ&PçC”çÖgt0.Dœ¡Á.Vd¹Ñ× dhœøœ¶1zhÙ¯jüø4r¥ƒÿ+úòHX·ƒæ i?_RoÁâÜ)¥t“Ð1ð;o^}šj§xYËÂ’”+ûr¹yaÉyÒs "×p^jÔnñ$b[îௗvza=[ñ*òã÷Õ´¹•ŒŒ),aÞ|r¾®çñÞ+o»fÞ¾ˆ#Õ²ˆ •ªI uøh(M¬ :è“&å±AwóëÂÈø jæ•G¤VÜåÆìW8u¤q»§›ÆÊO’Í–#ú³¤ââ´ 'g¦øSuŸRT‹EU¯réÏ–µùq¨‰i_F³(’Ö¾ÇÚ1›è‘±³IuÂ`$ÆþœƒIÇmÕNûÊÛÕ£%Ÿsßû¥Ãé²Ù‡Ø—ªªªz+zŒÅF"Zs³õÛµ¯Aêl'ž?”*zžªü‹ëq!3L1EæVàx,˜¤OŽŽ‰ŒÝt£§ŸðDÈ·—ÎBbêê ‹é\ÔÚ[ðò‘hQà›ºlI ed§ÀZPàN`Éñ"³N·½%¸ óNUgÏ@|ÏÓüÔ\Jf¼§ùåD*kDÂfÀÈyž;U„Òvó%“Ðÿ£Þþíhq^8ZøS`?¦)áÞ 8/p‘÷üÃÔ¸5cÔï´]VSÓ=ŸzXÍ92êâ‚ E ›è÷ú‘.~ô{ûLô¯žyÑú«Õ±ð5âð ]¨ÇжwŽQ'G‹¼èègÖ'Ë>Âwëaßÿ)Síb³…|ᵓqwçy£’ecK`3lIõ–±Ýè xX“ø¨Ó¦#¦UvrÒ¬k7'¥´…-þ8[Ñ/WL³ù†>zã¸Án²Åƒ¹Ñ!v»Úݰ)óÌ[(*ÐØg`O—¨P?>=}š,@PSS«o´œñTêÛ'A#Ãv?e u±›!PN AŠpZKß­1¨vÈ®~~z¬›”EÅü¢1 „Ì7¦³Ív½–ü\m5Ö¢Þš5‚h92lq7í Ç(½ôο¯Û)rŒgæxZvbb¶ã¸õõe·‡wNĆRîõ¬ê¤Ý a9,GÄ_eÁò1BÏ„¼b>™åYÄ‘&Ô׿…r"bŽä³¯xQ?„¨Ø?``Ðÿ›,,Šn lç¨BEFv‚¢ónBß{ìùÍþôw¿ÈçÐW±ò9=aï\-ž¡„žß¾E-˜ÉËãQÄòÚÍr¹ï©ÂERA ÇxøGÏŠMêMš´Ûôòla­Ø×•n(§ò!¢OÊf¥…W1ƒÍr£'È<Œ˜LD}ýñ/D¤¢Ë!ZeáCkp•¦‘Xø+Êâ?¶#V6«:׃^ÞÅ}ÈnFÀ>íN2¼ÉÉÉèD8C2ú´ÌÞqJĬ= ØÃJ£ˆûË^Žªö½GŸ)ÄÁÊØŒ1”9 £,Ö’l°åû‚á´òMžV ·;ì{Ðx9 §‡ßºX“ø¤U%êq Þ0®Xm›fÒÀZÿ{ÙŸd*úôb.€oã‘°w4!}e=/è¾×Õè°”ÉaŠH?ÎyÊõúõî"ù;±²@á <øìfãôá<_…&—§§ˆÐûÓ 0­•Eê‘¡rÄ,ðæˆ"¨ÿlEå`h4ü´“DœŠ,>ÿÞäÿZF¥€ú ìæj]·ræÀOÍh“Yá‰z ÂÂ9@Ôhqß—ðmQÅË`ÁO m§RbpÑp•‘AÌ gé}ºEÏotˆøîpcÏ©´ÔÒà}jv»NÏ Ñ`K«\h7Jç[eD´2Ûì†G ,ó…&'CÜ*«°2#¦¼¼|åï’[¨îµï7!¯ÉãÕÜ2{Àµ‘ LÌR¤L(}ô‘ÞÛ·›ýAÏ÷Ö² ££Jž§«ÒzÔRU$¨ßvóIÎQvÇ£åÛUD±•å»Ü^³~ƒìÈÚ¢ËýúœžœHsZm¡Oÿ²Ðä 0ëØîŽÔXÜ”sòøaŠéHÜvƒoÃÈa‹×éøÍñ©€+T»lÔ©3Dþ|;øhÍ à"ƒÖw\iù°Ôx¯/%å̾dŽ£]Ž×ÛxÚ1bx².¾a¯×¨Ô·s}@¿y޹âÌŽH 5h"ØØØ`1h ‚3ûYV ·Ðï+))Åý®4l5èNòdŒ\ÇW ::G°(‚b® ÁRmÄ¢ÃR(Ôåz¿G5ƒÂt L)H))iDºQ ñKfØè4­v¡a§¼v˜í²#鬺€{ŒŸÔ3ÑÒæÜÝZìð)„‚Å §Å‹D»›\*x€Ü }þ‰î›´i_§·ÚÕm›xêmM`€R3áZ‚B!ÒÑZ§èGÏSAƒ³–±Ý\ÅMóSÔGѬøéEÑJš. üЋˆä½É÷'(Óâ"f%ø'®–h¹¡â½MÄY^·‹é}!Ÿ´QWÝ@ô¤µü†Nò[),zAl+t <  ®·oß6ÓÍØòæ+g…ù q½55ýïžUjñ‡_Þoÿv>ͪ¨: C4QtBwƲ­14buë¬Î·`¢¿«M%ÙŒ Ÿüø˜ò9TûvCövõ˜šÊXZ¢¯ÅÕ,hii3EƒD¥?\UA¹½ÎžŸÜ*Öìø²®{ÀÂHö¾ é&:A"H¶3=A'E_ϳßášÇ[ˆ^á  QÑ<¬½ÈœŸoüù¡¡”'œ@lú‡ÆÛÙòý!pf^Þx’ófxõ"â|ö¼ö`ð»Öý&ç*üâ]·I`ßÁm“–\&÷‘K%÷¥»ürà.å ièÚr³·Ã|ðÍK}£pYŒ²¬v¾ÈŽ,¿ó: ‡ÂÙvåŽo=÷-•‘¨í) L¶–ÿž¹ÜWW—6_ÕÝÝ=zʤèm §£†ë.:IÖ„üh FêÖ#˜–òæ«+òÊó“ .¥D§5îªè“Ô7½xj0£Üo4S®,9…–nê 9÷£R ÎçtljŽä>šül§ >“.ÈóyäþáºKz׿ºË’'Q¿Î–T:g½ƒâb&§qu0óí›õž;18„!¶*!˜›`Úû¹&àÁ˜ìcQøtÕz–ž'á{6ÑŠ®^ôX¨œ}KØPyi))ä:«± ÆÍVrǤr}¸2ÜkA8Ué¬âÍ¿JΗ(èD¥ Vÿù`£¢? äBíÊšTÝ|¸¬ú¤¡×`›Sb¸R&Gˆù`Âky3Ê‚¼÷ýmmB^&X…x ”Ìm^#é0sUUÖ¢¢‚ƒÂÂ!²øÏp§àNÆp¤ùÂìó¸ˆËÒ]w]HÐ*Ñx˜HžØVo¤ã"O =t}Û kî§³v•ÑX_4áùÍMM?¥Üã?;G çõgk%Å­žÇQÑ ë5}ð¯êó®+CéOC¾ð5]ó=ÕÊ£yññ¡¬,Í|Á´Åv¿­K°zžK^…Õß¡¤£ùš0$ÔĬÕí6Ç4©m–#®él† ˆÏÏ”jŽX4–Öa ·‡¹K&ØX®ö ößıê|ùòU漪ÑáÇù¬¾÷ñr–ù¾8c$·õøYäO…~ÆHFÿù¨R¡èÄ`¢ÏM“rÅtÃ`>'bð¿u« ÄÏ“ªÉsU»U¤ÜC'“tHùDÌ¥÷Ënö£ä7ع¥™Ph©Ña àS™ïêø£3v¯ÖÇY4·A^Žjˆsåº_ëíæ*Ué'ºß| B%«¾öè‘­°Åû›ṵ̈n ¥¸ý ñíÅ÷ÿîÞZPí±%Œ KîE¡Š÷gti7‹î  ñ u÷å—Ðe4EU¼}:YWAõΘýƒh/÷—dœ=…‘óSM.[ ²þ¥ß׊J’&BJÅf žiäÕP(úXˆ©U*AôS5‚IóÿoŸkî^ô¥ßU1šf4€—¼´²T¥„IèÿPK—nYTÍ$ãñ•svx.iconset/icon_512x512@2x.pngUT ^(b^(bux èèL½\TÝ÷=|‡n†îF@Qº¤E:Aº$Trè$¥;¤¤S%¥»¤[æ½£Ï÷÷ý€(1'öÞk¯µï>‡H 5%|jðŸ>‘×4ùŽ…~ ã ?`»>yá^´ÈwHaç›ð“T úÚ.Ö¯Í^Y¯_¿æ²svp·0sµârye“v N ŒÀSy7é{->µFº~ç·×þY ¸L+%d–ú!Z r*!ŒÏQ—Pr ª{Ì;Û'ª˜õ£˜n¸´®ÈCáe6åù–MɈý{è³ ŽN Vùì*ºÓ”û‚Ïày¼ß¤¤û àfÓ^Ë™±OÖÉm ÑÁÉ•¡ØfÈÉíÐRú3T‹)d<Ú¶jq’-Ò-—q·ˆp7Ñ’ü,öûq„8øE¨¬55<ê:ûJ1$@É»Û_Èe­ÇN‹‰•Éø÷óJ¹¥§nÝ/P4#8÷࢟€è/™€üi¬HõÒî€y¼@ňv(PÙ'ᲨÇe•|Z°£ôbAݼ9ðÙËŽÌ¢„§ÒXLy2ÿ½nwábËÅÓ(„5¥ÂòcHA€œÓñ÷·•z7ìnôÒé-¾<|U@kú¿ŸÌ}QŠxš‚ OèV–úûÀHÐð¿èbÈäÊ¿yFÝz&Fœ„j^íîXvS•—ó‹iÊØq\¢›Ò¬|cåûYž´›É&þoײ—YR‡Óf *‚g'´ÕÁ€¯&ý÷ÕD†r<:\pV¿ì´H„wo¼½hJ DQFAùrùââ"vÊØg²0Ë–7Ô®‘Àž¢0\D¸E{Kmg 9ŸóßKXÀÛŒ—"¨L‰/4&ýÉRQQ¹ùÙÐv»?¸t5ÙðÛã£Ýß –ENâìp)€R:`Ö ¹î}i~=Ä."Öüß1xUN=½ŸåN»yr¾èsØÐz³Î­^dfPái‹4Ct`çÃq‡Í’À¦oe·FŒsmIÚ0uÿqº®{Ýz’1¼7×p(—üòÕS¯/¢{]®ÕQPYâDÑ{äèê›àЩ¬Oä§Æ¤ám£gf!ù·Jƒ®?C¡®´›©ÇÇÇÃ7·KˆÛuñãEé$=üIä.²¢OÐ^ ÷©‰5ŸÿáOÅãKÅ{ÕHûçRÔÓWù‹ï´Ý~÷¿ øvúëYÀšd<ð-=èzdÔkêòÿp¥ñ%A*^|8èªÕ«ø¯‡³ãÖ|~ó³z t}N›"q•-’ ª!ÍžÞRu­æ•q­vŽ  ¿ØæñH¯×µ•eÍ äU)•é,{‹k_v6¶£ÕhîÕåŽàI¡‚Wåþ”í™>ÜÆþ—ë}2$`øhbج€ÈnY©¸‹¬‹ºÕöÔ˜<¸ªÜƌҕ¶-Höì3üÛ5>µeæ~¢+@½ò`ÉÛÁTùЈ!#™¥¤§GÑÔÔä²í ‘AžÆ«Q¬cŸõnMÄ5¯»ÿˆ'Ž^"jtttÖÆ‚Ùôºwmm Qe?Q27’2RH†«§4* Øø¶!X¹òC œ5›Ù>ŽöÜNÛl¯Pܾ»²¯[¥.‘#Í3нlŸ]šëc Üh±…-€/õ¡·½"ŒZéÖíÚ!F] vEàp~À1ö=VØ]r˜– Š[s¤£¢jÜÈ‰æº ­VÿÀÅMã!ùèÒRüãŸP¡èD5Qì“A\/•a‘ÆØ•÷™™™…aaaÍǽ4Ï>ö­Ê’ƒH‚p}/ÝÉ =ÞL a^O9’j!’ ƒ 8~k=™Ï9 MÓ0H¦ÑRT7qŽxð±²H·q“â¤ðÛ¨ Å7í0LöºÑÆÄÆšy8â}x…ž¯EtéKÏÝzÁGû˜Øö %‡T²–±_:…c8•5Òãe]/?"Ã>Ò|VŒÁ#%kQ‘ŽÝ¾Ñ Ý8‹sKô¡Ä’@AœdÅ í=ÇoÉ£z{¨-FçÖ­ˆÆOŒä€l‰ß³u˜•½ØÚÝUh|Ù;=MIþÈ $Q]’JBBb6ÍEåU t5P‰þíoLÃg£ Ü T|ÞSþ[è{Ž+?í¨6ÃÊáXÖë k¬"w'—æç -3x!E†«Džy±¸àdcoìpº?â.ZÖÒŸ5¤¤”ó‰ÃÂÃß ZW;Îð¥{üzÊA­½‚–Âf°_c=xõ}ddÄ“FØy\2Îe ÌÿA<«f ¤…HÔ¿ÕF·õè‘úᙎÜñ°ôÅÑUÒMö%…P%ü\YXÀïsÓàJ F®=ÝåËL{#‹íŸ&%¬ãí1u©ÛQ£f¯ÛbÉrxÇZèÅT¸ˆw¬ÞíÓÓú9Çà vãd~p²D! Fg“1ñ‚–oß‚W†>uâýe<±f>b°mq ùHPÉ`ÈŽ·ŠCJ*ñÒ¥üW7QR~ð¥ÆøÌJ€‰…JúTެ0ìC÷£NÜÄÁë¶ëãBa¡öб僩dò|Jª½Ó¶tÇʨâ9–"ì_s޸夋A¿qó?=ί¸Þ Ãuy¹ãS`Âøs@;cM¤HçTÖôxµGäòwâèÂ\°9þœÿ,YRB@à” eH¸‘˃H6@æLVå¤.ÄøŽ9TG'§ísÍóµ]E™tOÚ×=bw¶ÅˆOÙÓ<= ²ùZ2ÁØ#xüí•/¹rõš_þYׯµ}ÇÛ}"²q˜H}-õ§Ÿe©L<EcÁ6¨ »>üg¹<3GÎ#3f)ŽrãýB\ûºùÚ 6ÃmNjcuN‹UîÇM¢Ü>Ò?äAXa2/ÏÒ±5âGâ-0žÜ×äJÖ,Öá±¢M÷šµKtøXhìâÂûl±Î´#1Ýüúñ«PH°"Ÿ)DÅçÿF {ˆÚ^+(Í wkÿ@¸|Dé1j»ÝÇÕJãp+ÒéUü(vœÅ3¯à{ÇÇn7+„UqµTË™˜<¼¼&´_­ÿLÎÕ(¢?c°D±³Bm|y`/þ§Ÿ°Þe©U>ƒxtKÿ·¸mM> ¨·Æ ز'Ú”©V|qÛ`Ô7ˆVÕ“/•ìï4ÍtèÇUþáÒ?êݨ&­¨Ç4õ³š˜r~Pu5/i´Bú«÷EVBHÊf!3@ò~ÛFÁ‡+‚Þ0!,&~b꿾a—’¤ÎNUžG{cH'yÌýh™íõ*ON%`Å£Û¤‡[Î…<>HÍ’£)ÅÓ÷ô÷?±EX§@Ö_Q‘€[H®&×9=;{Γ‰Ïcˆu G†z`¹a—v!¤*Aôo¸§xž÷ôÚžcóa:Z9KÁôÅ ­Àw×+Gù÷w ùéO‡;椮 0Y,i X¥$1qH’ÀÈC]•55bqš?ËÝ$êÝ¿òŸ½û¹¾júRÜa²ì/°¾lpÎ%ú;"¢ƒÉ‹¤Žj?»=f¯Bü¿ôàu$ÉuöcKÄ–ç +ÔÐJ×QÿAšaxò¹°ŠÛtÅBâ9|z¾Ò¹eVø«c~n-:Pþ2ƒÂóÂ¥‰›<š’’’§—ŒÔ]ÃH ¤!P‘7GŒ`fµ:0‚Ãûúú¤¾ ñëG°ºzÌbTV”ÚúèyŒÒ~¼cøÉþˆY7Ñ'çuPÞl€ãÎv¹ø´f—¡‘˜ÉN--•éå:¡ñ …±(Å…Åóy±¤"·|CEEÕ¯w¤úsé;ï&îécð¿X)ÅÀÄœXrOÅói6DɈBFzÚ|ÊIòéÔ¹ Œí9™¸8(>Ûlpæ1š[–°¡µ÷ƒ?BK<¯kŒõ+¬¸ë '´07ïäwþeÉ9MÖ2÷õ¥ •…°gùòYgqÆ›£=¹ï×: ÇÕ´•#FŒä‹,òÑR?þãNOrÐöo KãÓî¬BÛŒßUš”Z„f°˜Ì@ le8|2ŸR¤P-s gðfO6:Ò‰Z:’¨·8u^é= ‹‰·èB×oõ} ²8˜¾bûntÏ*I˜0:€Œ”ÿðçß¼)õæ¶·/¼SEýS– ¿ëÍíT‡åï*Í<Èvò&Ÿƒø×›rD›¡ IDSwƒéKQI©|ßÐ cËéÇ:_T¿Ú}c0Ífp‹çÃÓûסPjê&‡ë³ýøývG@¶/QôNšZmäö^T¶ÿ´l®ÉTð’¿üj—ÙˆâÀ¹±9ˆ^à£3qD›ê­jÊxðõx}®} ו7oK0¯T'úÄa)~{8Èù¢Éñõ–ŸÇ¼wú2ó$“ÆoVÐÁ•Oí©`¬ßÁÖDZ—ƒpN ¤€L4bÙôûËœÒÝÆõ5xÇiÕÄÉÆ¾´/û,òÓ«{RC%mv¥0ãB“´ƒý¨kØøª+!~ZÑŠy ˆZsò£ž äE+ýÍjdа‹q¹øzàþº,Sw‹œœ\âÿõ~ËÕ8–1åÚGpݵ0!vßf…õH|lÚÅVŒTLtw§—Ù©»‹¹ò5 )·Ö«„?»«g#‘ÆZ1ü!´À"Ó'"%ÎÙ¿È‹dGHÔØéFûäþŠˆÚþìmîêW_ü¥fë¦h|_=˜,?ÉýÓwøfĈƒºH¸·5lV=CØVÅ<°xQ ùJ)K*ê]vµ n{X]†$BG³N…/ghS„€€A’Ö¡Ò¿tЛæ6j"ã`‹Û¦o’ý\µ¶Îp7pß=¹òÀFân\È?A¸Ãöä3RQ»å»8Öyöy¼ËÜÓOœi¤¹qùqTŽ‹§~¹VÖ»ïæ:bVÙ †Ð@@8„§»iÄk–<+Qm|©èâÂý¼L?Pö³éà²ëá‡/éÐU$« ˜kñ9/õ#qC.Žú?ñê9qÑ€}V4‡¤u  ·GplHÏ—2n3³(Gm«Ã¯\òC‚~´XÝÅZÊ´Þ¼ŸéOÆ­Ü=2¬/ó‚=¢‘.Oû&É™5|¸†";&&&|)¶ñ ÊWþ „EÔ 3–<ÎÆ½¬r‚ @ZÇ—<œž*_þ`æÉÏmÆbZöA7m÷óT/v+±Æw&|˜B [—œ_niŠÌÚ䌕}¸ýzh/Ô^ö¢Æõ×Sv¦¬á¾ïV53Ã/j¬¯‡2ÄÔÇ 1Р²Ø (“›&ÀhÜ·µ€]fUÊ~¶¹¼­|`ßÅp½Á‰†§§ úœcmZ>ß ²w¥µs$¤ÂêöüL0Üi3vq°¨H{À­÷@DòRf}›7ô¹1ÊÃU!···ÀM[e‘í¹ËƒÊR³à’M.Ø °¥±R1þÃæÈ Cré¤G€sê xÄ…vKO UexÂ$r+e`b´Œ™ŠzPçß Û¾ê—;¹Om—‘qC„pÞ0§ ¢Dx=ÉNzå%”Ö²ì8É#»ƒÍÄêù¿­²º¦nÖ omÃT§»"C´Î«­)3CHÐ<Õn©<‚Tøb{ûƒ÷pýZ!™ã¯ 7õðŸ•Tåg,‹]é·®A¸··7€fãj{žÌmÒz£$öú@Ü$  sÿ#ÈM„ʛ©¨’þÚä0 «&N4ã}“R¶œ°GC–*°ï—u¢p2˜öú]k=Ädó)¨¹v¢?g„øëÓô¹U™v <4þ6m‹néS2dŸóý¹×F¨(HÝ;û(¦ÑþÔìï¯ñªLI2†Àxký<"ÀÖM%0[t˜ÿÅêÔÜŽÓ7æÇ³Töˆw9!ƒkSù ŠÊ‘ \þá“?~øq%~÷õ†ïLÌÕ;Î|y’5+¬Y+ òôÿ ¨›½į(]É YaOŸ!vý‚7Ê߇;A°~2ô5|.Ø›› Kê^Q¡JéâèÄÈŸ…`ö|üHŘ/É…è*×Y !XÔ™D“÷Á|£:>~ùD¡€D©– úKè?ß蚎2ª¼=ËOI_²§;G,ƃïT‚}þ,Ÿ„䦙ãrŽýÌMÃð¹^W<ícsǬ$ —Ú€t¡¸µl Žå¼D5ÙÏE’ùëªY8»‰Gë·µÞ Q²0ù"ËDÿ½JÎS¿Ø“pÉ‚‰ëì‡ÁEœw2Û§±Ž ‹óqCó:AèˆÖeÏÕÝ5e'‚âH3ÄÛ Ék·ui‰35AT0»ÏÔØLÍ*L3/=¯¶ ýŽ:0ÕG UiËã ²(ÿh÷¸êÈâM•ˆ°ò‡ÊŸür7¤Ç¿ˆ¸ËqO¡7…V9ªÈUC ŸOJSÎЦG‹y®´˜`4é7yØ=r`ù ÔúqºbætÍðõéJy ;U¬Vÿù»³J1BS{?72N’¸“›ù·ÊXí¸o±)hx·<ãTêTî™&Q‚æ9pHSÄ ÐHó¾jXbÏ|c¾µ‹R·Ûú’ë|ÿóçφ.m·gÆžú<4 eÂþ³ŒyHþ&’T‡©¶+-<‡²]©Ê¶fŽøppÎjïû±\÷â6éyæsÓti‹$ÿþâ½#õçÿ‚IÛ×1ßèÎËãÁ]u¸LªÍ{´ÿÒ5–* ûç¿aäRh~ü¢PÙ€—–ORµ*¼`Ð3|!1‡ž“ œ¥Ì“\çú. u0è]ì¹ òŒVXKëtI+GÊ~†Yýü¢ÞÔñJ{Ãuï·ÕúóÍ {ßýË»ªÿÆÆ¬k ÇgZ2 %Côùø—ìX6šv€¡8ü#z*©&úëÚG(­ŒÇ¿¦Ý,4{í¥ºÔŒŒÙ¯‰¨‰¬ žŸ£Fœ}€F¶“í‰R=—¹/V?™=ß,…,ŠRCB>JÿK ‘D¬GÁÏ36¤5RŸZ†Gz'>† š0È‘Åìø%¹é]gõ=wqvŠøä"« ÊaÐ\«óƒkjm•D‚Âéìhg,¦çÃbçßA MìT™ ý?ëƒ4KëÒ¨óùüNÆJs7j"äé²ÒàÑë°A"y($b‹é‚½8Ìe¯(ýË+ª‘nø'|Ì«±ÿ|„ACdVú¥ö¿P É@…ÖÚ3xñ˜J¸aQ‹©´—šäžªÜû‚ }ÑÜÓn‰âvº5ª£·oȾØëF‹‡‡gºøí-Àì‚ÝoÍ—ª^ù¢fcÌ„º…'èËå¹DÒXv8ÿ@S‹aÄø†SZ‚wºÛ;]ÀG{.ÍŸôý41Ôeüüñîðó:¹üÕ‹ÞÌkmq|PÖÿb‰ r1X¿á“E>›¡tö×û³ðÂänäõü7s£ñš=b+2É2•GñWÖ@†uùé”ΛL~Ù4Ïê¹Ôº¸–2!ƒKô©¯¡Q’|ˆ)¿{µ'”ÐFÍzmMS³ç‘¡²fË->RÎ ¢žÌŸÐª2ÿY•˜nI~üöZf]†wË/-uÑ$žz†Ñ>­¯8Ub0vJÚOèÓë(ÌŸ=3ƒ :÷Žöv¶…ܘš¬–O3ßÞž8zÚ.YŽî€6$ÿ·-¿V­1¦g§Ü#L5–¬µwÚKAê¾ÀÈnªÜ|>9ŸÏúÑeÛ¥{‘\ ò¡æ%õ¯¿Aâ>¨rÀmAY¬·üþ^‰Á{ësÍ“_â›][0áS‡ý#PÔ²ª]„ÊÅScðܲN¥§£Â=Ä÷žù‚0QÒìC§3ù£RÒñézîµ loo/¨éh>’ À8œÀÆfO‡ ŒÖƒúB}wgçjÊïų́\ ÕTþŸ°þuÄÌSù‹·»šøè$šx¡Þ¡_œ¡Anxv•Šƒ·kDýoÞ<“ÃnI¨ó€ì[VdbT{­Å–xùÁ ‡-ç‹ôž8Kyÿb©é?–$ÿÔ;Ëx¼†Œ©L=w˜ôüiðÙ–Ò‹F‚œLu#åí9 ž±Aàþ=Ð9ȹc^rQÀ_À›¥›Ë†¹j‹¾Ô‘ÖïµÅr GèÆü7ÓÚt‘ë¹Üô+—g•çÐÖúö÷¿L\ äuVOièÏèÑl©Ù÷OoÀÅÀÀ™›3]cg*ñ¼rkgÇÛòp±åP7 I§ˆÿžÞçUušã3}ðìÃç •0J#jÕë©áGÑ×¾,,,®´}ÂÖ#¾åΉÏiµ”AEnЍ:x©Où¹uÍÌ\xX˜óíYCÛB¾ÚvZ»!27cS¬P ÏÁ?±˜,­Iàí­Ï nÕ_¯Zj ˜W…ÜÞÆÄÄèo>3 i£=øsÂís³_*<õ¹¿¾ÊÂ?]„’Ë÷wtZ¿×i YÒóÙI8Ö.yÃN§ê|˜,’ê Ͷ‹ñ‚®˜yjÎ ‡¯‰€JZZ]žÞƱ‰òä¾ÉØÂÂít«ßõb𾤓eØR rÌÙ\tg5-5v™æq`ñû›ôµ¸uÿç}ñ 秇y-Wåô Z9••„'›Ã• ¥& ûþõÐÕLЋü¼\]Gn[$~4ûpÔ'Xv4ÿåµ}[x±Tæ!!˜·¤Å€õ©ÆâÁäŸfÇ«=ý–|š&d!Ь—-Þð>6qiOÒ„ò2¡|¨ŸÿzôWÇVP ™bä v66ЧË݇YùwNDâ‚IÔD FFFnÆd_½LM—‘ÕÁŒ||æ¿ {÷L àkYéP òñcqõ‚zq¸jì®ãw‹«âíìÅ hº•RÅ:)% ®*×aò§ÓsÅ­_‘‰ª{¯ ©–{í—Øè5‘ !å|bd bIä`³ÔÏ%Ó€ƒ4Ìëpñö³néó…uµ•ç4Reö·§W÷BÆñùÿ¡×‘$#ôŠ Èö{þ{NÂç_¢Sˆ&Ñ€–bL–òsý`¾Áei ”=♸ÒXØ¡ÿ¬KÌ®ZM_ÿ‡¡ÁÈÜ-”œUDo`³ª.ž/.‰8×ÂbòlßCÞ.ñyYÜšéJg(H8ß5 a1U ÷ñ–Pü¨]¼nú¨?BS+uã?Xý‰E² ?Uýá¸õ/¸jx䵚tL«Ðø°Ã›7ÓÂÆbØ{EN¿bºÜh2Ä(2`Ï{Dli Ñ]aÔ<¤.÷i˰ÿ´¾ÅÜ5퇂Vnt³¥• EÛç/¯È¿V/è´Û\èy`œu"1³¿G¼ZƒcäZا۾ùR–‹ÿ1Ÿœ¨Ý„©ô{²ã{AÙ|s0«ÈÑ‚÷ð‹ÅŽŽÖSLÃëyG÷DEoG!šm]Ii ¥Ýn€^ÜÚê{õM4éäGÇbƒþÇžådnT~dtiY»gOݽ÷Ñk²ãx­+SdÖÈT¸F•ØÄ®‡úUŒ“¥(¡P½»cı2Ȱí«]d®¼eû‚þ‡ Û§ŠòŽ ¶ñ,[¹ôÌ”•p]¯w,% r'áϳœ@Í!åLƒ»§1áF r ‹³½ '—1ßWîõës 1¯½ O}Wï¡ý'8c#\ç®Çº~¨È ¯F\pœôÚÍñ0}nea< ‡{h×K ;¯‡Þ+NaúdB-6Ùœ§Lå#hŒ–Šÿñ|¢×Äíäµägd¡u*d&MÓê·P°ýCàxëôhÓv(Ís[_~…6¾äúÕQ3ŽgÈxõ[ëE÷¤^[Öö@ÁJíýÏGÆ"8£ò“Géòî¤Ã+F„}häˆK~ò7Hf›±Æ&WWóî^d0V‰1=?× \XX¨Bk¿ŇÕ;ƒ½44I0t}þ_jºûíøé-OŽ%­'»ž^÷!t‚ÝCÕ䡆 ,ÙÔÜÜåƒr8…¨œiÒ¡A\==í¥Úw7RO¦ÿ9:Ô|kÿÜØÄcl«ÎøEçжªËÓ‰±öÂtζPá~y²yýE[ç#?êpÁHä"†6òœA‡\ÐBšì±YÐ|R‰I|CYÓY-6-ÊSœ-ÐNŸÊ)N„f–‹ï¼ð&,+ ¥ùݦÈ…²¤Be?{1¼âjÏyÉÕ¢•ÄáXá þR4<¡ù_¹‘Dðv)é^öÔÜ ­Ý.>” !¬‹±PÍñ76¸³äPyŸ…®LõÔ „Ž…Éª —bo(ækÉ´mºJÃKýñ³S­]ÖW`!* ÿ'ž·fœkÎmUd·Ùr•“éz†- Ù¡PF é¬>Ö?]|«¿¨ÉÈ>’Cã_5:fZa`í=—Toq)„V1©·Hö+n4BLVËÙÿ€Õ37ÀH>¤|+¼üw³UÁãàE(Û§N#'¶UšòÊð«<ï/(mBQ멽}ì²×*6 ÷«7^=F*lv 9=)dïÇ©Nÿ•‰ƒ<ÈüšÌ‰§„Þ1Àñ`<ÒNb3&‚fÖ!’™NCÙ6zkå6¸Ò¹Xë \˜äå]YB15oSJ¿P@€éAÛwÒwÛ:Q1|°¿;…d9¥„vø¬âÚ°¿-&ÿ•Ì8Ã…Þ¹ÿv#ÄÔùéD)ðnáÚ2Èó`“Nè§•'¶ƒk"¢üÝ_AØú>ùeãuÅŽMØ{^N¹«"C»i5ní¿ƒQv¾Ч ÉX—£7 ¶ÿOgGeO$šÆ›ãM« ´ºü¤¯úÐSÜ0È Æoå}Ë)Õ¥³Ð-_ÉŽ$AóbïÞQ+ë‚ä'å; 5ÛŽ1µÝuÍ£§ŽeÇ÷_>Äb#*cˆ±1Ø&4øNh°@8»yGGž•Iµ$˜¾Ú…ËX¨ž…%“;äTm£„zÝÃÛïcq†Å  ¢y‰uMöJкN–½rèR¾[J¶€\IH@°1nFt£ªJK ýÇ%ºy°Ïª~7$ð`4¿²´HÚÞ“RÛ íúìÏ]Þ/ zH÷$»ðH¦…fM: E¿=Ù€e¡¯çøUš4ÚO”ÔŸ –ôêEµ>-²hlà÷¿bJ-Ö&I#"oª>ø]f©(šÏoŽC[ÈŸˆW£¾Ãû¾ßćâuÿ[¨>Ì‹|XsVņ?[«8»°óoòcƒ=_d¹¸=¡Ì0)¬ùÍ[ö ÊÿQçÝÎçWª9ìŸÈL?My•÷‘ÙÐÀ¶ßî¶šü^Npç|zPÎŽšmÔsâñ“ž‡hÒD9Ò¼:¤¦¨GôE9ó›¡Ðd3UÍ•ë߇ÿ{²Š¦2§u3Q/$“S™bBµÊ 0Â$z«êÙdH7 b§¾™Sk/OÝ›Î%\’fgƒî98_°ú–͆ð«Tûæ<)ôÓr¢ÏùÁíÆß§#­‘¹D²Ô œ³Ã‚3ø1€4Æ0Æ(øàK¦û{×ü±­ƒ´†aÝ"išh²¿“O\Qé]¿ÌÉ6Cô¡…}$Z”ðÓtD¥°7 cܽڵêRP©»§ £ù.ïÕ o8 `Û‘¼²Ã”.FöâXZ/‹¨©BEâÖ «…Ëwšáõ~ˆ+ʸ5dOŒzv)Pr ¨ŒsVž®ç“OírÚíuL ²7q»Û&(­;ô2ºì–ˆšZVû4Åë†/ªÍ`h›‚ÌJäÕo¬ë_*¹—ÅnNÙÓ];åΗs\-§¿‚wªª´Ù®ñŸaAÚñþeDØSqÌ<ô©ïω'J.ôônáþ2¥GoJïb-Q·Ž“adXB‹~/[Œô*I¸Ö-¨ˆõìˆ\]_³´1í `‰w\j½õðYBCò:Ïÿ!–¹!úxd"ÙòÇæÛñ;¡Ö?”§‰ÅP/:ãW†kÄ‹ìÐ)ô^›|­bF~~]Sá?âåQ òxý:·´Wúb¦õ#±¹©éì`¶n÷¥ßƒ¥ß=›í¿¬tßOòÉïf'OêïÀÈ.ü±cl’ƒ¶ìþSBD2:TûdüÞÖ1~aCiÖ6ÿðå* vwwg`87ÜËŠÚøÒy3S‡k¢¨`Ù‰þKlÁŒÜ-ŸôÁ¿î%ÅMÁDoŒ£ô¼àø´:×cšZ{yzIBtj6YÜk`2)KŒHfx” zÓŸ{ƒXw°Ï'‘ª²‘¹Ðü:`„4SÐäxÿM=ìét¸0M@­ål K¨|òz—ffŠaÓ ~ÔßEŒ5 2Œ¹öyä»Ê93/*Ý®vòvg»²Mã¶ÄhóËÌÞ H§‡„9TÙOÿïEçäåFŒÒª"ß.jXðFÆ弔ἩÿS„!óE@‰fÂ|R·-”uà­XMAFHå/|NnŽ¬Ê¶øœK‰ˆí#§ iÅH€ÊZ3‚pƒìXé _!ˆ£}¬eXýsódkwW®XG| ؇;‡„|¶×Ô†û:Rƒ¢Ó1Ú/PÿxB_ÕbÜ}ŸE†í‰–À©}ì@Kù§ë±…:*rÕLøƒ2RkÊÙ‰ÚoÒËaí_FŒ– 'èp£]MÅÈúšO”è‚¡œq=¥gâE¿ø$-KüW±«h#/‹_ïÕ¼ÙHµ9:ÉBжÝî»Ï-Ý‘cжwc² ‚Œ9H«þk£B>|WÝfýv5QÙÛ¸™™™É&…¾-àqLÃæë™ÛÎF<^_À 4SF>ÿK½mpX:\ÜG%ÙÀ”ÿEK4ÓǰcWKYDíOS™fàÂÁêÛ& õ¿ŒI*ŽA*.22RÃB ë8Ù&Ëï¬sÎ¥íöËOî¶›”YdsÞS¼‚áé°°0„¦ß¾ƒ Ít€‡‡Àè,&kÄõÒZu}×ÝíõñÅZüZ¡Ôí}pË?vo¤?QI¸»|ÓE³›(ÕËÕy è©öëqÊóK¼¤º÷ÙB@ÂwË2Î3³Òë”&ÍìøÂsÁsÎx¾‚™t@ç–¹g·59ªqóÉvqåb.ÛEéþ½¼²Š_Ê€Z„ѳA %N;•ôŒ ýûÙ„Cáó 20%G­e7RTúí?î.#RéÛwÈu2àíS‰ÐÅ \Y1ûût_ekÞ¡Ïín??ÙØ{×*ÙèŒùíÖX™–€õ¯ÿ4b¸Ú¢ïh5ºa#¿¸h ²×¶|÷÷o/ד«m†é÷fëpã%¯8üÏj²ò鈯®®Ž&Zɽ§š«^­+ÿ~¥Â—¹ÕiL¿úÑÌÕrëâB³t÷‡•IeS"œ¾ÒpTU¡¸Ô=jú&‰LŸû&û[8§Y6UV qÀÌ@ZADÈz€b-¢6ÔìæRšÍŒÂ¶ *Ž*±“·ÈÞW>>-N\^H&==½ñõdžoë蟱¥Ÿ þ·ŽÞÊ€[Ç…&²¹z§®‘‘„¾ugôCŸ¥ë*³®°CO ¢“ˆw‡ˆ8L_¨ØëƒîDuÉ™S¹zj³•ÎЋ-%©(ÎÊoÄ---vár1O§ÓžÃñ€†ÊYÅýëÓ1õ5ÏJ#GÞ,‡©ŠžÕ4ûs3Åàކ4*û¹K¨2AK6À“m/ØS™JJ Îb§¨ü “ø Œ—ÄAöLq#ÅÃQë¬ÏX³mÐçü€º¤±ƒ% p±>==}Ü·4‰¿- T‹ýe&SžZ¦ßÙ _ÐõúêæŽÆµÕóïpï§f~]²ÙVoâ< NÍÙpUÐIÑv¡à»%ÇÐ)8õrí1Ù'“—ï &ô°Ÿ-0 ¸…;»”«ö—+=¾xDŸ‰«1œòà£MÑ­*‡ÞÑÞ’D¯%Ä"—[­aÙŒ#¹ŸŸŸˆ×ÞtÞc²¯›yæÕ_múâè\Œj¬IŽ:Ý!XÅ$ ·´´DA¯c²Ü°ÚïÚ‹VÄ•q?¡_`=¹íæÞÁ×5‚y¿ó…‹nÿw^"øn{Ó¼¾ëœ&½±4ǩþ‡ˆë]´Xb!³Ê4”‚3ïFƒ³›“ᵃæCgë­ê…hCŒ ½›\Éš_(ô·Ì!zÂÌ@K⬑²­q|Ã' ÆZEíó§mèŒX8{C>œ2..Üqô8@«hƒã—CéÏÓu Ç2©³Ÿà’9«˜N°—{(LºãèĪœæ„ÄOGä2keßçi/¯„3ô6´Â9Î|É/»Þ]9ZéúºñÉ¡ÊnŒí%¸…"k1ü¿"R«ÈüoÉ!^л0TTT²é\×t!ˆK ®šm¿Sÿ‰ë7ÞK¾•¸¾ó嶯Ø-e…eÌÊ»æ©/èÒÍ‘›^ÄHJ ªãµ­ÑÜÖ,|¸Í'¡´RZ¼á-W}˜ Þw#koÔˆcD Ó\½ÙîdùÅh¼?i•¬Ü“5d'æ×í‚´£ŒC_LLBz±ô‚“­Üxóõ(ii»•¤®Fk»˜°s¿*+¯”$0Û÷w?2HúR6,z;pÒ3ñ­”^ŸÈíåE@ŸíªUö¸ìÑ‹pÍÿ³ßl –ÃØÔ”?hãÝøˆÍué{7D'æõ-`ð“àëí1ÀôÖHê/u'ÒŠ¸=´øùñÑ›»ËÍ1‚È ÓÿÊnÞ÷dðëɘ̀Y*WnnîÅx¡d({–/ñîTåf)j!Ñ÷^0-Ò÷ÜX+zÑ+ÜhÑ÷Ùˆ7ÒW}‘Õ7‡‹©†9Ö°ЫCH7SŒ”` {]wSÃßæ%¯ëx­Ï!եɭ ‰ '´“$݆ Í…áñ(¤W!òাûv±ý樳Ús÷9jÑÅ·yVâW[¹É—à'8ájjg¾½å÷‡—𬀩JãA8kDý«ÍÆzlÔ†XcI!¡0—oÕèš}}–Ï·¦ß %nþĽÇ@½¤Àp<·Ö­l8u ´âw«ó“º:aXx¸&—a<^?Z¿uÍLÚÙÁ‚˜h!“0Š9u™}J\9:&~d›þ6«ó3öˆµx)Éý3ýÄ!ÓÛ+øt£»Í¬Y->†¹š¶˜ÅÚQõ¿½q›]IÑèiõ>4N›mÞêt+Puz½UB“{§Ro£K˜v4õsmç¶ÊÈ‘H±KØR“ûÔÆïZ×r2;8pމ‰7Î/;×þãnók0¡#ð¸ç ¤Ÿ`¥Ö¢2æ‘9ÎÕãofHb`bw1Ü%¬f%­‚é¹ Ü3*7ŒNi„•„ŠN1çª=Cö'Å€.|áZÆ7E¼%Ç¥ã¢åq×c¨%¨ÏOo)UqË¿¿}Òƒ7K5¶9_&´O¬4¯?· Úãƒ2yt&¼Ô;ã»%ÆëÃÅÿ…&Ïw­5,ãD|,Ù ¡•ûÒ1±JJ]Ï »nç'ÿBKÁØ*½“Y5Ù·°w_ò;_±‘º~¡½êˆQða‘_º<^1b(’%/¶³©txI"/ËŒ^΀ƒîµù‰¦Ç|Ô]H%ûè8>àfÙÈTf ›þߪjÞ£‹™aÿ°óÖóJšgb¤ï5c Üv+Ъñ•ô*Qß?×ãÏ eŸâ|ÃOäÝØðê¨$Ÿ4¯g–OÙ/ê¿Ô†–—ƒb`”«Eú}É~4¨ìM%.÷7×µp©›•2I½¥2HÌ_Ö”P¿ÉžÙ^( /®íbÄ6›½v!b ^~§Dßa/1ÙdjaþìV¯§¥Ø êݲ(þ Ç/ƒ+PØÚaW–­Hj«w<Ï2j>ºW´MÍ͈°-)“B¹m¾`"l¶gÿV[¿ÞµœP¶_ ìßæk½±_×âÄ~³Â®¢›á¶[B±˜\oáS BÓ”[¥ï®˜ÂìäùŠ2oøqQJJðl²ß6mH¬ haæX ÕÆy‘ ï3VùfÝÖÌ<ôöö_baLüþíd¢Ò.arõ+9êJKb‹–@…þ—;õ-Ý.,­€DÊnÖ,-âzöG©“þéV?ÜÜ2†9{©eŠ+!~FzÞ1”˜ ÙæóU~lÒ )8Þ]¦Œ‹»­ (éIôi˜Ð@F"nUÿ"Ñ€<ÒѸÙKãò°C}Døž*ÀgñÏ û”TT}’g¼­Õ¹]¼‘su³a4ζid–$;Ú ŸÝÆ× ¶³‡ÕÚ·4KþfT\‰íÐÒ€L á“¿ŠB»yï›ÙÚ*¹6œÆDbºOe“~Ü‚O#äqì û»ªýïñþ§,Žó_y÷yž ÈÏ ,×û¬„RT½=Ùx®O"Äü«DªìÞÃÛ2Î/Þ_Ð^@§®'p‚–NËöÑÐëS½b‹ðÓ³3æÄÔ÷ÜT€¢eG·²é5h½–VˆJÁ¿ü)u;&µòºíÚÜAŒ*'ÈHÀèë9¿Û]“¾‹‹7?×Ê(Œ`)™ªìe’´FËáXþÏ ˆ xZðrf/d·øº£ ±r>.¢»e5ôÓ_Ý,ÚÌ(!× vbþ×Äÿ™¨}„”Ë˦à(¢Ø³—h °}Ògé'ÿvß„4Ò .®¿þè×ÂîIá¢ûs@I­öséÙœ:£î>ao +ÈĸÍ÷òÝÒåÐëYzvëÇLt„ÿ2¸1˜v *ô:Œâà¢Õ¥GÍë ]÷¿›DŸJÚ Å°4¸ ç®+“û^. 7D?¥¬Hrm:¾á3¦M˜|ÏäÚg4èÚ™•˜ôâ†íœçÙ‰ÁÖ÷͇Æß.]|×hjü‚ÕÕˆjÒâþóú^7Úy×.|»p™îÚs£AUá…$Å|3ÃmBÑ]inuóºùäL—7 Yf^]Ä2[Úôlï[‡k1°ºŽå,ô¸7c!såöÙ¥ªÀf¦÷N1Ü¥vI˜Ÿ ÿ¯æ~2WóöÄúæjªMM ïãÎ.ž¶ë…ÃÕËÍ,u–²°QUM½›G-p5™†êzÈøWˆaeµ)½6ÃE£T'›Y]ñÂGUbLcùÍÍsö(¶ˆ¡oÖ£9 †mP€Ù,6 UÈ£·myðQ€„„deË5¨»-‰ØävGo «Ôìý‹á²”>Ò ëoå¾/ ²Ñ&Ê& ‚Š×{SFøÎÞ©…S¯ ?d¼2ÑoؤÚÝN¥Be±4E¼O9ê>!7™Ä÷q¯ö¿½úØ—$àÚj@¡à¨V?މÝÇö?¡4  ^nˆ(*öV±"øêÄ—z&Š6ò—hVåþš˜ ›@{³°]˜åˆ^œÆýX†ýíyyÒw´pè/¼}B‡–áè&Q7EÜÝwO`Ä`6sPöxÊ2Ë„¨u8) ¿îÎP!Ò–³†,š¦á}³‘èòÂh¥HfªÌä(lÁ üW¡ëÊs;ZîÜÓÔ›|·Ÿ™(ó—…×^gOÞ|¨Ì±äéd¦“&w¬Ä¯ /ž]ë9̾Ņá¢{}ãrtI³†}~iƒ%+ßKI˜Èõ^Íq¡?”»í†Ï¹y_Èqºê³“ö~xX˜F±Žo¥/ó~äÙ3¯}Š3TL›T‚«a}w•õ¸$ü£I UË»î¹äÁãà @KYZá€Îk¥æ¡å¥ Ò눣TÊÒgÕúh0 i¬cN½Šo~ å x;eôZw1Š{å–‡--6t9•š@ð¹¡!¹3¤6iªíŽ$ÓÇüÃ˸&(CRˆ›&½¥ÔàÒÊVj$ ¯hÚ)©¿1–ôØ‚" ôD"·6 #³ûòpZ’½îרvòäßÌ…–í²€ ps?>2 CŠé×K~Âþw'Y¹••ÜHY¨„ÍÝJ9×àÒêÂpðßÓ SÕDÈ’R"¿¤ÜÄ4Â÷Ïöç’½°ò  F CÊb»ðÑW;‚7©I\$î_zsžJÊdÂÑ`œ(}¡fvÈÊQ5Ç>é-åCÒcNdddô™ –ô588ø`;dXµÁ ð{&|·<šj%G\Ä#">f‡k_ÜlJÅ ·l«ÖéðË~ê)Ñ-­rY’œ»™!røíä“èÔœHmûа¾¬ø¤;ŸÄ„FxLS¯Þ¥þœVÔƒc=‚ºMú&H¢I£xŠuÄr>ùà‚Ì‘ófâ!¬X¨scä .›Ë,¯ÎÞ6YiäßC¾¿ÿBaòB႞átÏ6gkBjS23é¿m«ºt‚5&š« —üá1V¾.doÁñ0âfX¿ÙËéÙ¦Q«ïcú7Ë—¾Ç=H½e(Ú ¢(l*ó&#È#¹u•~Ömß÷$Õ»pjW;QD„@» ïnÌ`ÞiÅú-©¨vb£Pp§¦ ìm¤õ·z¯›¯Á½½½öVü¾ÔÂ×{Ón– ä3 ¼T¸± 0VzR20²ÂòŸ‰ÖÏÒü¯ yu5š»÷^òË \®¯°ÒkV2¤e‹ÕýpôŒßZåØÝ¹![…œfCÀU›¿y#òR'3àî--(Hk¬•ÅH‰Qïß;h½>¨ç}ÿI!A¤ø5Þ’Ä*®Íݹðû¸§›*|o/²6o€J ÄãÙRžšýÑsšPYˆ,RРµ}Gë_…øBáÊD©ÞüŸÚ!–|TéîC/¤›ˆ¿B¤þ¾+¸&í;¥÷ïž>({ÙH/þKò¬:>ŸíÎhHt÷!½q\¦™ý¯Æ² èP"#“²U],F¾XÌJ*/@"Ò„yý¾Ü說ÓÝEtßÄ%—9ÏU:á×Ìœ \òख€æÒ—~aa!“¯Ë x7hÝÖêÛó¦ó°Ï_é`¤@L¡Îƒ•N\în¤ˆ¹ùÍ.ÕºþQCÀuƒHŠÇbL•ó‰+šDç݇%DŽ»IÆ {}Oè¿­Ñ>ÃÑwáôÞ¶³w-=×—B¼<ýÿa’ým‡ Í“•óɧ&f…4€]ô¤ñti©W²\µ¾ÀÝÍ})ÃÔ—\烠²¹ªfEÅlSŠ^›ØÈîX~ïëVNôÑdžoè/]¥)eýþv2Ô"‘g™~5ó¾FŒï{VW0¡dÊÕs˜M–ŸÐÄåS_ç¯+aÝ}éÂ.ôQ=ÌÆoVB»ûâ”ÓIWM,d×Z}ΟU²Ë;¯Î¿MsnÁÄÚ9ÑA°ä[ìÛEµ†¢>-Û—¤5™ìX¯ÅÚ§§S”næ _:ŸÔ;Íq#OÑ„­z¿ˆxPah«Ç5·Û¬C"kx/}ö릛<9ýoÖÖž™\O–½;VŸj»*mëQgª~• çzQZÑô`ŸG‹Ì—UR]ò’5,,Œ˜áœ…á2‚;¶Á("1î%ÉÜGìé·† ÅVC8bÍ™\z1×££¢õã©^G«`ö?à1k…Þ<:q¶}&îv…ùnxÓ!µii-níM«òý樞ÕóƒæÃV½ÎÖ’á ÿ_g`Ðð5|[ôætTÉmÁsjåæd8þŒŠ©<»²’°aÑ›yéAaë”â¢otj*Ù“€ö‰§?q¼õÞíáÁAo¸äéçî¾XY‰ð›íâ[™(õõíuM´¶Öpõkáü£]Dë—¾¨Hî†"ÕhHBe™~xÁÞJHH3<”ó%µù¾¯ÿÛ&“7`W˜ú–‹ÏÜÜ/‚{|~~~_oþüÔŽý«.JN·ÄÁÔþõ°õÜ#T† `c(#íâ+|3ñ1t²OA;ÇjήбĜ¯jÊ`ñ, .i¬8ª ¯Oо²Á¢Vl\í\\ýÒ„]2A:–÷¯¥ñþd5YCõÔ;/ŽêËeL©”LBú5‘â^ézë<ø ß7°þêbºOòãVŠ[DÚbeåŽÒ †Æî”òEÉʺøêòïdX7°#Gv¨¬J4? óuVÒ/“/¸ð·FØÞÝ\.Í!ÙÚj´÷'€UIž(ûþfaè(oXœ­¿NîÙ¯s|a“/„èîF3öÞÎß`½¸= ˆWMº'y ¶t©&‚‡ÇnkÐuyD¶¨v´†_¹QÒ²,ZÛ›ÚóvÏXމܵ¡Åe{ŸÍ4ˆi´Â0•fX98Ü·»•¾ëzFžº è8~¿þbL O´>¾ ÏºžßLøîq&Õåp=§ù,W<¤ÞÙx¹‘Æ+*úi+Eë¥|"2î… ­Ûçä´ç7žó]}óÞ ªIÁ¯áÇŽARE±#Ê 5YÁ¢T”P‘¾<ú_äåûÌ™…ifrÃhU)@²±×ŒÕÒ×£N\'Ô¾GìyÛg.™!Ð_f¯_¯ÕÏ9w}Ð3Nõ∬zµþCg“†æèGG<Îë»ûŒj¬ñ‡ÄOºûÊ1×Íê|àòºÝiUØÄ~xYíSz‡ªîò¼è]°Ž&?i¡†ì׳ð•'{•g°VÍMÌGÈVëã B€—þ`à3·NbK#¯‡¥f·ÿqô×ßïŸý"`á’¼ÞÓiàamù¢ò~œ•Ã!|Ox[æé¢µ)ñoï–¨L"hØ6-¤‹uÑÐ=7›+±ò<šñ5eùP>jÓ‹h:ê@Õc¾O› ‘½é’#”85릀ïR¦jþÛû_KKY^X‘ï‡7ÝÎfl …¤øÙäW1•~û‘ñ>C7—ñ]ÞÈ­®±ÉI‡/qD¼¢4ÕðžÞ ª»ìšKq¾A_ ³OÞvòˆ=5}-[ Gªœÿ¾ ¸‘J¾ô½»ÂdðuŠ"½ÊsúW`2>ŽÒËFuèwès1Qéÿáâë”±ÓªÅdðÖS‰«’ˆ†2ò«+̺È{ÚŒAËSsXriUµu+ÂÚ^uTY~Ð|­â³§«ËZ¸¡FsõNb$Ç*À'Ô¼ü¿í¿ v­ Òׯºð…Y%7î¦=ãn!…ù©ûqF2òèÔB8õ:<ØÚᬘ¿“jú)¬© +À«¶§5ñÊÅ:%~iwøïµÎ’•ó]fkíÌÊíPÈÿö¿>‘{øâ k]ã®ê&ë ÕæPÆÅq|@:¸˜—îªs-&’[>#^9mNéÙõõÏtf§çR¾§|uõlõ<· @Jv»s–ȧê«Ê¸±……}^žTüO ®—ÈÚJ Aÿ ¢öÉÎ Á¥è5ÚzBà§ÎfGþ„ìüÛ¦DdüG=Ù-Ïg{’Z²ö[ ú·—\옿sZÐ+û+p1ñI5ßLž¦¦&që<ç+¾ÔãËz‹¢""¶¿ ê±íþ;êòDn KJª®ÑfUÙ¢ùd\[Ýìp±%2þYuÏ×ÂnçÞ³sA­Âö‚——o“Ä­Ég* •œ/9k3ÊZÃü ÓÍziÿÓshL!Òzz|©1ûâ€%_êÏÅ‹^á;©jdÙÈø+ñGÇÆgçAÞZ<¨:PfÒ&yÌëãããÖC¦÷æÇŽêŠ*Žp‹ wôµ·T]ùƒ=Uλ’‘£4Bl+ˆm(ü‹ÖlÖ¦ê î,RU0@¢x ò6Äb£ûf8¾.é«àߎ»€™, /{w©60Ñ3Ü0»U~]Åø$Èyì–(MvðQ®ÃwßÑéáu¤„\JÛ)fÔnMÞ–d1íBb˜¹ÀÞ:’-¸p¹¡¨ó’¤½ÇrÚªfø »-ç´” ÀîÿZÊspQª,ƒ&gsº¤C: v‚½jLßJyÃí–äBoÁ)G |zþ«ŽÙádª1…mÉØáÊVaˆ `ý(¿l6Êá&ʾ{™|²ÒÖh¯R_šc ª©¨˜þm“E'!!q¥Å\EõAÙjÇ!?(Jk£Þüt]µå¾”6qûÅ…HË„ò°ûdêÎG«G®ð—B¸Xšsg¤SÂðz‰ß«·XLÉ~®' o‚ìLá\²„¹£'ñ±v¶ö­]µ¢PšhÁ°ðp'kYúö¿1°?[‡ sÓ‡Œ ßcÂþÏsð ù*¡AT€S7ÃÝæ¼ÿõ~d|³ó‚èCƒÚþ«è·,¥¯c‰Ù(=ÌÖG¤²œñä[„\ð#P°˜óBB¬«Bòn›_‡vŽC`qk¦¾¾ó'6ŽŽx))æ²Åi)íÝh½}}öVXu•Z“«k¯æ/XóÏiÑ—6®‡ÇCÑ퇙> û·ž «Û 4äc1Ù7̨7¾$pé;AËAÍAŠSWY'ÕÃŒ“?(Ý*ˆnwV(ƒ‹«Ó"ëÇMM<¢¢ö×Tz¤­ë ¹¾®FqÆ•ŽÉfÕRþí¢^½8^[‰ýÔ~sybã[â&æv2(laiÉ:Ê ýºSR ä,g©Ñ®ÉPœ¶ë4µÙÁ¥vîc÷>º×ÈÇ©*¾ó¥•­³É^Š0;£éf+k˜=ùt ʘȕïb«ñ éäÙb§=¡ªGCÅ2E*^ÞŸ²`Ô@ P†’¦‡±£ ™^%GzY?!!)Ä7qI‰'ŠÒÏÇݵdÕÑLü¶ÑAz÷w4žÈóâPÃÆsY¬Ïêùþ0ƒ·ð^¶ÓA*´Å´¢”ueªðxÚŠ[Ãý[ãbk}OÏÏmm ¥E®üõë׃ÙTÐxÙÏb‰§‡0è*â`¦fs—ûÛ‘¿§ÆV"ù¿:¡’ó4›÷DélÜ3~ð„±„‹¯ÈbCR_¿\NÏXs’µzŸaT•€wÀ¹Å7y»ŽŸNGeD§ƒð>ÓJì°C»“¶ÑB2,Ý`ÿ5ºTÒÜš¾¢i´™¿ºRé¥ PÔÑ»1 ¬ÄqÚVA/ÏÄ„Þß7±s 9”ÉYlûâ‡É'MËËÀøîýy»e1ö‡@Õßó[Q>¾¨•wD7íá=P`¶H´lí—[ãžå€+“‰*Ùô¾5Fw鈭¶§"–[ßÙþœÉëã „@§«æ“œÿlŠ8‘B$þøV˜åïýà„˜û|ÑÇE[%Û¡²E¨Vu– öldÇ7é:ûJAKw}==3ö]É“Ó(÷3ØkN˜^·zÛi &Ó2çmÅgÆÚ/%ËÃãÏÏz~GIÑnGIQ¾ÎrÜìÍHUžÓÄöó4i;²_‰©8œÖkÛÕæ²®Þž†¦9—½³p‘joX¬ãú»ßŒöñêà)±lvCh½º²À5Öu¿÷1bÏ*T_657»Ý\¸ÅÞ<<'‹îA¸œl Vúœ7/ùõã£Îãü_j}÷’}ˆÏ¾íúþ µN4WS‘—˳wz»¿ÚÙ ã¯Æì[ +êõÆæT×¶˜™pÿºìhê†XÑçl¨:%KR—©ÑGz_¡·ÙèšÝÊbYòSéÐ~ÊúnIÚ!U§õ R2ƒ¢Õ¾Àq ‰á·ª~äÚ¢&Dzu£”˜ÀO0B²Ã&3SãcBaüáò#Ž»­p`–­h «êÙ³g>@_C_µE²Cªâùó‡ä ò Qså`ˆƒÚ#ˆ ®–W\Üq7 7×Ù¨ÁyA,IrÿôéØç„2óíFêÇáÔï–®½T6µ¾Æ«VK­~ÈN¤¿´²ü8ÙNá–Xä,XŸäG6¶ÓZœÕúž! =;Þáö5ƪ9áÕ© gæ8¡MÞ¿ÑÅ<ù„-ÛžJûÓiíÙ…€}÷Ò.½«àe´$?ؽå“v:lKÃÖh)¹ës¢H:s¹Šs»Ö³°Á§l5E› Œuµ‹q+?³ÄàWg¢LU%(½k{«ù%…šœíÉ›íüä£_ϸ'ÁLãð<à‘!hé)sÏσ¾‚Ùj †Û «å'ÂîƒF¯à8º7€§À_ìÝÙèÇò¤ì†’‡Û…Yq­­­‡Ÿ}C¶iDÆ7ÚŽ2—6TxUFOx=½&ú˜ÉÀʪÂlÒæÕÇç„[î)JÃmªáG¤-Ñ,{ÄÚ4ÎNŸÝµCL°ÉŠíK¡®Žk!èúŠÏ>ı«=yÝ#¥íSq_³”Š`l¹ÞϵD¹PÍsíj[¢-ò/cN¿s##+% ¿F´>Rì´ lkñû`Ra‰YÒ¾5Í¡H·ºÜ±¤NŽýïn?†ëÁβ·ý믙ÌT6¼äKÅSÎ'VTRŠ…Ï8ž¹#OJ5:LНª¡;£3ªþ=è˜Ðôv¯ºOCó$Ô°ÛÁäzöãðÓoâ·§cÓ->¯W×EÊ}!A C­â+«c£ípaÆ›;œˆ‚³z—‡uxf‚NR¨÷9µíî^í$H ÂM”ßü`,)ªÀN€À'Рæ;x€%Ýßûùn=KigñÅ1á'‰òpQÈì—–%+”­Òó2DLs~»6;cŒb0âMX£ùTóÉ•r›y1tGG×)€Šžª÷¨Ÿ‡€¶È™¡È{@Ö$@Ê~Î’6X‚“ɇ—\áæÕÕÕ¼Úä’YÃKnÃçßξüär7)”% àSyLw2ŽÉ&CÖ(7eO©‘}ÅHmvä#i5Yi’u±ÔQö¢æèî¼méÄ^¼ýîÐpÖ8%óo)cÓ— ùV^iàüƒ ëVg-~;Ùvß}ˆÑîkÁÅjkÈ– îƒð$Éö®Zú͉–ïC;„UØêJ‰%V½Î;½o§wØômÑಓìHÙª|`©øã=3ƒÆÊ[¿>èéÛyÃøažËFCm8êäZìŠ6ʉDÎ=f• L.MÄÝÉÖ¥?9J®…åõí¡ÛÑùÄÃÀÖVÉSNL¼ú_x¶½Ïì+Eô>7^Þ•ÒD­L›¡tCLLL„£«ëÈÅ û>èŸñgZý|œ´®à»<±2ÖZ¿ÜÌêC6)t÷µ€Ìldnn—³Û/‘Ç™Œ-ÐÙ ƒÐ`{ ½ë÷„PÉ}sÃã†HÒÛc.æçÚG‚ÚÀbõK·Cgt€­`Ó»Öu«,¼µA­–,€éí“'á_0-«´j¶¢Áh¶öYÁçRÚÜó5‘κ{¨ÆŸ+¨1¨ FéêºÔgÇ4€@ÈJdŸ TÇ…úÅþëÖó‰jüú“n Š$*ÓX¥´…ìå¶Ê»[©¸•µ¾ãæ¥[‚Çz{¬S=BrÜ-?C'Œq¹jý$âõW3§7K Lò'nßœgæÁ… @þý*EÛºÿŸÄ¬ZßEuq"ö,ßW?7ïi;NWu|šÀê1'Ò3~{h®jÈŸ* äú­zQÿ0,{R¿xŽDµµ’É`ñ›$‚¿¾íÕ€¥âŒ®Þ–‰®Avã]/ /µ9lû²j’F¨¶Ÿ-uî>À€<³;TiŒV=Fá­ºQQÃNÃDzoáI¢aV¼KRq^L1u)âc8–ÌW/J^X œ«.s’GY‡Œ‹J»ìSý(Ç÷4ÎÚš ±ñÝÏC‹£—ËUŠ_ih»¥Ý‡'Tgæ RòÉr÷T• þæ×‡þŽ%ºÍÌx $°ñ=žÕV??êl´uâj§&ë ;4ÝæœîI˜Üô˜ ϾËD\™¤'B|(ŽœûõC__;2Y‘I_ê¿8ÏZC=ï‘sQd 6:zW¥•8§ÝŸˆúÛ}F²2ϲÈPÈD/Ò~àñäß>Sq–ƒé¹ªeºHÁS¿;”^4!¹~õÚréoyt7連ïµs&ï¨c™°pv.b0ö(ž.¶vò†<§h:­\2äƒä#Œ+•ñâcL-=H1>IÊù;ièÞÞö¥»WHŽZÄM´äkp™ù²ž.u]#uý¨SAR ¦AöFy]¬GAe ° ‹ã /w}pòþÁÒ͆0HŽåû¬k.ºÙ%W¶>(Ƀ#î}‹µ†¤¨ ´ Ô¯ÖãÏá˜F©†N•òSAúFWµÉ8ØjоëÔ@Ækzдž£·%$ éÐÊØ!2cí×¾_”8‰oÞ9üxIýã矻z{6˜Ì‹=œ·u¶òLïÀ3°aèKÀÒÇû¦e•äh4E·¼¤ºâÐñ˜ÝòGLG²¢ š ì9‚ìª~–‹YØLHív.uán9%Ž Eñöñ› ÷ÅmÀ—Iƒä%á‚Â_¸Â°áà}óAÓ³ 6àé?±e^€ð¿¹è“r¾üÖÒÒ¢_g¯ :¾noo¯+¨ºØ% —®ž#oãkýÃY HA«SížCk$­Ê_ŸëŽtÆÛrïóSÁø¢uŧ÷[ýÌmì®T¶†y^pͨ`Ä}<#ì ˜»“xA(‹Â‡Züy„u>áí2V¯Ì>ö£U¢ÅÄ¡Òhœ³–Ç×\¿”¿M¦ýן- 0âŸY[¯í¹(©] ¯?¼ï²Óм^ꡊ¯Ë/=ˆRâ_n¬®’ä¶5bF+é‹–¯…ÝÒ"J‚ª'?ðŠÂÁ ûv|ì¦ O“úó.Þ÷)=JÄÈlQBþÖÌX…„<´œ{Œ*€qR<  SMZY÷Oè)ÙÛÜSI˾½1;7ÛFp±‘H—k_‡”ßÐÌaJ"vêô<šÃÑJÜtP°LRùS‡©Q'ŒÐµí© µê{¿ŸŒH¢,·Mèý¦¹^äK8»Šý¸]±0‡s¨ZÕ/\yª^§©7ž¯:7ÎÁyõÜÍ‰Îæ‹ñ0JÕš´7>Å€† g__ßÑŸÏr”‘‚£Z£ÈǪíÅ&ä÷É[dk©@ãËÄB½ÓÜbÔ¢çœJ“¿$œ8éÎ_w×Ú©> Ø5eIé7!Ç'¾ó­DZoŒ-ÊÆB«ž5[¢£ío OÌí8ÎÑŽ;Î`h‘ øûè?ߪó¯ó¹Ð•Ü7±µ¢ZšÃâ›ÁKŸ5{¥{5Ð] ¤ñý‹A™tyÆæÉñûW<ç&ÿÓWª,û…Ê1©ÀA¾:üYå;©è³L°Ìc|7™ËVìï8Gµ¡MªŒÓ(Å©‹ü…q~ÄüTEÁ¾EG`¸>ðûá ò"ÜØX¦äŸŸ 1òßÛˆ©~²†AQ@cwuud!´Šuf¿º­õNù3Ð* ª“ÀBþÕ¶^MT"Kú.BÊŒ[šÖÁø>_ ò?Ž6a•<ÐÕ3²*¯¹5wâÇøÅü£¤mk–Zû§ò|*ÐöÓh|:_j‡p–ªs,‰?_–&™`…í4B¾Ôð¦b3fܧcÉ!…%¼Øše‹Â^VÿIÈ•U3â¿Óé@B…f6„µÎª>×¹F /¾í{ªÉæw3ÅŸ†…«¤„¥Lܲ|?›XŠNÖ-'Ɇv,6ö=–͈„Ô GÉÁêª!C4†õDã}^¨ÕØéu_ÄØíé‰Çù€‡úðÁäùÚž‡ÔçÌO3Tó%…%ôd<û§»xñ¡@®ÊÊknÖ™}î«1»˜à¯ãØ·/Ó¿3Ô€=V•N£yŒ.Êd™5Ð[¼§Ýßß/ÊGµÂ‚¾6xùº ;!1ÑbG[þKÔsGÛ´Lˆö7ãj-€& ±ðGܾHN®óï„&‘^-}4AvÂVütœ­½?[ç`#ÆõÂëÞïu™¡)*y ž£î°–zõöÊóBRó Yx÷F2ƒtk? –ØÇ «ûH}äPèÈCo£Ó´ އÄ@”Ûk+±ŸQæ¾F°lh+Y &ÑB×å©÷šÍ=›aÿ>IãæªÜìÛ˜<ýŒÇ„ׯ«‚+õCÃHÍ eò>¨ñôlm`SP^+4ý)¦ÝÑT@åXñz½Öxƒ6¼!1ü6CŒÂÜÅÅÅÚxZÚZ´û{>p xï23ãæç_j.M”êÌ– W”V˜ ¶¸ï1buò’°«‘Þ® v˜B_/xêuNÝ£#¬ýã#×É×í¨„"³ß§hªž7G²~œ­È¿3 a™½œjó§-c™$o1¼·G(ÐÜmˆÀÑÁ†2{R5t&­H%©u++ó—o0ަ޻ûâ•XáN€åuƒzyÚÛêeèÑ3ñðÃWÉ *.{œ%ʨŸZ¹æ7a‡“{§G‡F{< 4§ý#å!R”«Ç0/ƒ`•Løù¤(:ã )ãÓf½5RÈ—ššwZ–°Â‚‚°k’}¼‘È‘WI †––Ö]å÷÷?½O·ÜdÏW¿cKw£=°ÀmPÚ›®FÅ¥à:µÚç2jÊ6nñn-S­ª%l(Ö.$hz}è,6Ä5¿T©øO-=èÎbà¦aÇEPPQ®ðxsmšT2dÑ·{í²ˆ!˜ƒC1ÛÕÐGò1#fƒ¢¦`ÿõÉ.N+iNKÖPëd‡ht™!§DW)y(7šÎÎb·ÏˆE1Ó—Òp¿"ˆ`†\à6'÷¾Õ7˾°ƒHw¿hwÚ¡XÿSú#K3Î?˜®P­ÃÂ;A÷SPj«_]m‘lêâÒ•fÉV(þý;]ÆØXòׯ_ Ÿ>™§l*~‚‘üÓÔ×çxÅ8Yª_½ª žþ JäñPaŒXAU ºº1ôúÅ"DG6Ý$‘×gû`Rý°ûê°ùPRé>_®U„Pˆ¡¿Cø"¥M÷¢M…¢¦BY¤›!"¥È¾{y*2>«£+Hw‰IJv½6K ØóPz1†tÝé ¦oºXíqö2¼›j¤<#f‡Ù£®›xö~¬0Õé¶ÁÒ¿,‡W{1¾g™[Ÿ2}Šv^­©È;¤@~´ƒµ‹Ud®BÇוն9‡ZP{òIÚÒ¶›(!-9ú&È7/¿€™ïÓd[ ÛÇ)ŽRÌle„ºäåï¶ýÙ:Cúrý؈ €tý Kþ4»“å'VûÈF¡GµGVNAûwÍNzÅZè~W§‘v&bw̧MÃÆ4,?ާz¿kAÞ<¾òO­iÂÎÞß›S‚¤hCjµ!§¢5:€&M)&4R ÐÄ’ ѵÒD»:ÅÐålc„–sQ/Ϊ:ðI­ˆ·ðÅ,šýGiL§d{'ŽöžX¶V^k’>eèäk,8Šß3i viåÒÏ¢ÍF|ÃN‡:Âì*aäz*ZЊM(fXiq0§)åpÀTgCÔ%+DW÷]rV|’V‡ét&'yEWV[+ð{}=õ %°½q€hhUÏ’ì\øÊÎ…ýÅ{ȆVmu‰õ¹«\ÅØ?Nû¿†n_/ùMy6càËÎ|±2z·Þ ×n?e’56¼íuŸÊ@ñKûP#”ɨŒ¹}Mé ´e|—TYÞ»ˆ‡V7f¶ñ}ئ¶¼õœäîh'*sg(ìÛ÷Üš]w¥´Ä5¿2®ÙpaÇûG•àС|ÊUxzécïŠÕ?Id*ˆä)¿•m4·²™‹¦Ò+…•e* „}Œäg$`oOå·‰-²g„ 0ñ­îA%O¨ÌBá;ÀÆüxÐ?} ¦¿ûßµ–\ï7¬­FsŸ9ÝþJìîúç÷S=+Œ`äy-·ï˱VmÐÐc‡á†ÛOƒñ¨N®$ï Ôk tE¾¨Ôë>€µšÈóPóšÂ‹Kp¡Å˜Pìë©·4Qd)wŸ¶cÜÐyÖ/Âç:fá%4}4ëŒÙ)xÞûÊØa ð½¢%7"–¯ð~¦ÛôÄ¡x‘,›$\°ýi÷¼¯qÑ0^ëq­Bù»øÏ0 ÿil›Ò;Z…Òá[×̲lÂgðý!è}ÆbØÁ9¿«pã‚48æ;¨¢¿ÑÕuòZ ¥Ä3î±cã(óþ³¼Jˆ,Óßö)ïÓ"îÝdN=‚x‰³nigg.ëÁOëMói.­3uk´o-„Gû½Žzf‡ãó úaã=¾jFÜĵ  ÃøËð‚sXx•¸ŠÁÏtYQðIv¶K¹qŠà¡:‚{h<õØx>CËS ÇgŸ¿›™R,ºðÌ¢c4úOs?cSØþ+{^ÓôS»•‹Ë„€Ql¼53êø“QÉwǃ9Â1·ï†ìDN{h/gl^x ÆŸEÆøõ÷Q¼Þ¡hÔb+_œì+<Úã0¾çýŽ…ïw:ªôLôõÁ·Œ4Y5 “øÆ>”­@%uÕp" |üŠÙÓ¶4ɽÿР “€ÖU· ‡£‚n“'U]à›Lùv~Àäî+™´ÔâÓ‹6Û2ëSÃ|\àO"â®.óÚšš³z å¼dð—€ÀBoK{ç&-ÅÿpU-è¶rü¼*þèôåÈÐ.[Ÿj<=Q¦úý½¯<±ÐÜ-¨úS¼6ëp‡¨Ú7w8£ÌÅ?À •°?Ñ)åp÷JÙÚG—õ´Á. TW7-3GÂY”Œ‰ùgŽ¨Æƒ0ß25˜4ã_€ßØ žÕÕUUWWh´ÎܧxdÐ Â;Sè?xD¶®vG‚~~w¹¹¶èsý\ƒ´ót{Ì(y®ÞÉPÀar@ðíw(„‘ŸcïÕ­U/¬Œæv;-ö¾Šç°‡¡Ò:ìÒµ9Xqú¥Ð‹š :Á“®‹O,q.‹³.{~ <Ê\4ùÞV]ú}raö‡Zü¤ž'ÝÍ—^Í·ä·—ïÝæõ×l´Ö÷ïŽÞ´¾1±TCÛ_x÷¸Jà†„tŒö…hÐþëÙ^MFwœ¨x<ÿp¼¬>XãàC¾0ôŽ¥¶7OTUAŽxŸ h” ÃÛ®±ÍFëogùÓX5.K’xT|òŸ~¦a±©gÆœžz Í[¦_"öúÀÃèàh¥kS!r‹ðLž‰¿>uEkÁúðwV²ƒUÌÏ^ûi*ø -»p+Ò²øÉ¢}ƒò2˜ðUáú—ۼƉZ&±ËÖº¸8~›æäû½¢Õ±o‘–œ±ˆf¹6k+m¿×Í‚ì@^lr è¢åÓ@DŒ:$Yx‘Êÿ›ûjõ”."]m”YðwK“˜¡ ï¹]–ÉÚ5µiM¨)º .nþ;±ê÷ïÞjª¥Îjkk÷!6¥/ø\—¥Ý %~³r„þ[0Ðþ§õ¾΢wQ WiÜâ:(8uQ/ AþÚ›ŠŸÈ¿G Ti¦Ö¯b/ÍøO™Xbõ{í(„µØ~³-3z [™¢9QùxL)]ï0Œç\„{MQn4ìsníÇ6m‰vñB9úØú6e¨=Îq‚fVá°ñç‚sQÆtgÌÈÖþS!¥ª—[MM†n\ºvç·$3q(ßæºCnP/½®îã1Ígû¢ÄÃa9 êXfað=êØ5jöZ`IQÄ4ƒý _4äÝvoO6.KºB°I4Ê M<9öß¼»6ip6òØŸðlü3£0¬Š®„¿ƒxÕo.¯? q¥oU¸h-ºÈê7ëø™ÔB+-Xb@Ž7<•ʲâ™úiÈë&£~7Ö½µDÊq=DIáå›ÏZrRÌÒüÐÇ×&â4JqÀí!¶¢þVëèlƒ©à—¥êFGúŸ“¤"äofn68ç¡Fí¶aͪçnè] ¡¤‡µÆ´4õ“š%`II¤H :Æ¡S§«;tS阜ïO5¢ Ý_pœYVö0†’·S®Éc;_—%rv››Y½?>pýU¡Œ”x³„1ă¦ô‘aK2›'w ÞØw¶ÉÊë·Ñ–ß½à î–Šßžì=†ò °‹9Þ˲dsh$I5Ò$$Ç¢üÍ›ú¥ú¸3ŠÞ‘bº1]š§>0û)y‹±ö–•â"»Â›Ï®zïÒ"n¤åõNtb¥É³Ç”V,1ð¼1=*M°åÛ|Ãï¿W©?ƒ¡tµÜù#àÞýôQ—D âò•]ÐÏÙcƒ$ÒŽ÷Ÿë(ÓÑçÓÇÇÇÚ¿Vjƒ©ØõlÆ÷%Pz)^òjëÕ÷ñirVeVR$ÕŒzì#rqz:í’G‘AÝämK“ì”cªî-uö#ͯ]ô¬ì#:'oeŸß¨ë$¨×ÎU(Õ¢r?€Ú&«?LdIìæ=§Øݽª=E)EqÁJ§‚‘aN^ä±rwDžÍv…³¯Äñü®èjîf7GÕûïÍC­ï T¢/¿:|‡ŠAT€Þý²2Ìå_„X’cq;¥`ñ#j+qåwóO¥ ùp8íŠCMzyÊ)Ït੪*jB|§¬»Ìvy×ÁÕ/0&&†Âûlïmݲ¾4»©ôýÀ¿ŽœOª«Ëë8ͳ7[÷SOL²Ÿ’îGË2Èk=‘§øøø^&—öUbÁl½n¬>Ÿä˜ûs|(eL.EÈ£·5µkéYžœoĉý¥ÿ>$VS àßc9_© ¸­¨7+kVüÄP¢@-9mªçÑ[g–Ä"·dîœ7#nÂ9|ÃòœQÄÛFºœ™Úþ"#- ñ§ýÎðlF~g <æ}QÌí“ø§˜¡×wÓƒÚ°ñZŽKi™—k»ô{j°ÒƒÆÍÌ40$O35˜øŽ°ÿ¢pÎ8ŸÕÒ‡&­óztW§ÛÁÎ M—%¨o~pözêZ_þYç5•.Û.:v8_ú1Ý0ûâõ—]nûµ à 0ó†~ÔàÊ¡ÕÌÐ_}¼vR”V0C 7;h¤»Ç §2×fN[iÌèÝBŠ­”k±uûÜU§p5ŽïPM^im½s±¾d]YRSºÆ}·œ&î‘ÂÔ¤ºiÂ^®‰Õ‘l’†<ØÕ`ú9Às¨±fLXAØD˜NÐÿ-„ôÏvaÖ_®°£Qc­zs½„8ÓÅDyû'ñúü0>ŠŒ³‰Kø4ôÏ F«m_&C®îN2Õ÷c>vXFæìì7ñR‡_v3ѰøÚ*ik툒„EdFX” ÈñÛ8|^õRlí!hýÀ"=Nv'±Ýûå|QÆRZþ!0j£Šßf"Þ©žßn^¯Î0ZЫ)=ÌÚ.ÉÚþ]M*ÀA0<µ{m$aœÈŽ*‘'g\)ç#´z[ý®AÑÆHJN~U ÇmE½A~÷jç|£;²1BϪ  À|käsÅŽ?—p Ë}æÍÀœˆø£šY«äï“#^‡o•‚Z—¼oWÃ\|מ ©ñ}{Ûµ/Ë“ÑÚ¤MÛÁd©1ò Šæ‰óºÎå9Úï½Å<³.ìr‹ÁSCSÐüj¿ /Þ‡pv-Š^˜0F˜çf©ïvïíŒoMý¬MKÔ"ÅNÈÊbÈÜÇ^^KufG©ýiR„ È@åï3KI1 bt¿cQò°gk;V[) Ý;áñ9sœZ?Û›!霗‘3ŸÙíaйµ¹:!IDÖk|xu_üÄîP}ê(÷{²Å JïZRˆs§¢‰!®×ð»YŽæÁų«²û).%ØÛ2ßxzIà!Úý«=}žÞÍkΨ‡¼ÒMÍlòÓ»!fmÇ.K¹)Vi›Ê´è ?†ipÖñKB†|^A“\ûÿA¥„·€Ëâ^)A,µ`çZ¼ÔA)šÅhŽÂtƒKV)™BÇíùÒaÉ€¥<¹A¥Ä ¥Í­ÚíûJèJÌ¥>1æÓQtïFƒE)†Uî÷å3‡S&ãLÏc c®z¡H7¯iá§?†ä¤ V)~4CX§†‰=5€Íô ꉹ¡Qö>íÅ1|˜YõŒ‘x§öùs¹;|o3f·&ßóiQ,Úl}B· ‘ªXh5GTPL Þïß¿IqÇ¡@h‡¡DêŠþ÷ÿDòC¢ÉÍæ23ãfjl|Œ©2«”tuÿ±ªýùF~ja罦yËPDn†ð^yç;×-üOúNû0ÅàDøu4-élÝÃé€Ê€i. `k'§CŽfõ5Šü½é5‚²óNa¸Zp*ÕA=ñŽá­ýÔ÷Ô…o”¯Æ6¦ìþBãÔ’þcÌNѽåZFéÄþbñ÷ÞàùËÄÏcB'ÒB÷W@8˜—¬ÐEyŒ¥Ìò£‡‘Ë82Ч ÏŸ“+ÆP®4P§ðYá|rÚi Fƒ}àÔCž9¬øé·ˆù295&Ï W&?ñüU ŒlÛ8p¤1¸“I&¨FÎçèŽÖ˜VçF >uÁ~þÄ¢ÓÅ”_Ûß(Rõ¡p'’®v£ÏxwhsÙË£6î„7*üS¨öÃ#A_¼<+qXî¯Ü²?íP`Ž ÁóñJ2¿q؇Q— 1ž«ËŸÒ<1§ ÔV¬ ×¥&l ¼eROaüØ›Çk[S• ¯^½òÈUÏ’¼è“º[)%Ù+læªÙ²õòerZY„×ìe‚wêÊðÏ‘áÑß[DëçsëwÑ“#ñ5Qh#$Xh*¢ßiéÞ=Þ˜x‹RýnÈ2"•™60MˆFºaÁ¬ Ä]3ó•ç@~ߢdt¾*sùmŠ¿1eæˆþ,xyåúêpv{+å½NMK˜k 3ý®v_ó OwXÃãoÓüÙF ®äTUA///ãr€ôÜii‚ -œ¿¥eež’óé*³é:‡äJoçyÊD6Õ?º˜ÌS&±ÃRˆyÏFº{Yó±<(c/AÍfàÄ™j˜ÛßœúRåŽuÄ'¿rùÜ=TìR¶Ëø=ß2ÏÞÒ„—þáÅÜ:˜’¹Cüý-c¦ ’O CopsQ.0¢ßæ|3®à¿#ÿ ùJ§»#â$]™ôn$*üÝëwV3¯Ð&»Š'D£ˆÇuicYŒåîÐ)µ$ÙÊ‹ U´ÏÇ7'Ã`ò³AÅË¿÷WRQQ>V%þÖë2]Å$ê¹£óÀ¿Ï·CÜO (^q¶bŒÞØ‘;µê­}H»¤¦tß²úáñ{Šç;)õJ°,r.µá…õ»Ë\OŠ–‘Ñ êê·qãÏ®†" 9¡,»Å@üõ+Yõ«"ùŽ‹ÝÙÜi&V¬«`\Y¹×Ñ=Œ€‹Œš2NÓÌRÑ8óŒ½^Nc® †Z–(Ùd¾À2+ý_Ÿ¤êƒpl¶‹rŒLŸƒÇŽÓ#.‚Xt>çžFUf]ŸWóCm½:šO}Û&Dö >&º4 r F<¤Å}þ~nÆŽžB´µåا«ò… ¿„«r;¨S….áyÃ<„Bî±½wUŒÚ¥Óíñb¿Mè\pàÉNçÁbû³”Ñ —¶±&ì»á}aSI¾K*^ß.¿Êš½i»-oÔÏG ~ò왜±q¦Š§ÐÇtTyÚÉí R¼Ò‹‹m¢þjp1™÷šsjÝ‘~£bªënyÃU¹bgÂú‰ƒõÔçžSL«êGœì,–R‰öócï­ëý¨Òmþöզ붛¤ÀœW` uóšKÚ`L|‚’Ë4ÉŽ_øÃG¶ƒpÿ˜PZ,¼5•œßøo;?¿ ¿á·Œq|÷½¡óQl¿ÄÛ0Ýëû”vÌR e¬ÿètm­))©¼§€)mJš|dø_¨¼ssã‹G-€NÈp¦Ëõ–¼.3VäÊÈÿ >-Ù³â´LrqQ”;²GТ0+Á>0åÃíz%kò¹§·ïQsK ·ã³Ã&Wyö¤>³O[ˆÆ€žãN y>žßn r fvL<ÕŸ»]œ)úžÖî´x˜;.\Á/fQÂü·¯†ðÊ¡XÌÑ56Úä‰86nÝ91aáÿs ÅxúØÁ4áë¹ÆWëÈ_B˜t_»WOëðûÀ€|›ÿíÍs–ÏGè§òûϼ-Cxó>Ÿ¥Ãw¯›·©£ãñNš"~˯£A×ÿüœíz›öºÙ¿î< ž¤uh㪩Øx3] _–>ø¥´•[Àh(kˆ\’PUlØjL“˜#¾òžî^çð^yJ(¨Û÷ã*/Ñ”ž?Qj¾ ü›,ãâÛMºowW»þ¥vcš‹÷Í–Û‹4>ÛI;CàS«Ì4͈-Xò)ˆMñÑ]bAéÌÓk>†˜Û"–'E Tz¿­ÇùÅ„µ2½o7o] \Ac·€ ¯'à£Gsþ&Bydž<Î1B<ºÉA^3ŽÒ5Â7ìQ9 ×,Ð$?_ˆé8šâ"SñöÁ8oé3šÌP01Ö?lÃ’º9B¥÷Þbj›h—8Ÿ¦—ðãíãPúã`pÒ `­¶è#nZän» *Ö.D`g×Þ¾[¬0{é1ª&Ô̰¾ù&~gÀ­'¥Îîª%ž Îݶ”š›Î æ~ÒDò2xA±®–»Ÿ.×.ɶRº¿Є'f.ûÐ ÚgA"3(mš Õ™í D隸:lÅP’¨ä™Š,¯épD„ƒ*EÁÙ™KösÂ}2@|ü6·¯õ¹mf¼ffgïÓ“0¨wŒdÏ|Jшn>‹^¼6Ý'"ȫѴÕ%È’cT‚Q¥-ÆØ•žìߊ`¦/?O5  WpHHç9|ů…+qm¸fˆ‚VùÐ[Ü^¬¾T U¹nüNO¼¾èéþ?TIJòÑ7îû¦6/]܇€ë™ÕXÕ‰Z¶ø}È6Uÿc?ÆxFó!ÖCûÿ×M%z•qî›KÌ]ш¸o*ÚµÛŸ?Øo¯°—â#ÏÈM]Ë“ g‡yôI}+eè¡-ç:ïz>¶Ú¥¿ˆ©[kP™6•XøñãA4o@ªÜÂ+޳/ò½M/0¯«€ýçBRóΆÏ:ö¨ž<w r¤ígÐQÙ¿[f>„Ëý F(yÑ®G§¥­Í‹ümž~g3­;àLñ_p´nÑGìÇû7?AiqÔÄ rt*mt&Å'ÝWÔ ½ ßÄ»íÿvDè–µð²³K —£Ï»Pꬸ}³2räêSùXN‰;ïƒF»~—&ÀSˆõÏ¿M!ò"Í#5áñÀ@X›?~99ÌHF3ÈU¹Ýtňémþl*)Ë Ô”Âδßþ(·M€sEoãä~pÚ¿^¹ÿ cOÈu–>öeijé'”цèªZ†—>__Ìc*ùE»µ©˜Œy4Ò6»ýªÞ ùù¶`%Ê1éeæBŒ-=DW"}€;g+Ö'úE“á¾%ĦòyÛóQ_çL ÌßböGê °däQÿÆFÔýë³ý®l™àÎ>´ËžG óAÁ˜×%¨2¤J–Í|¨ó/ÝrS…YsxÇ3&IG*Z^£¯rÌã>·QoÍt’:•2wGÓž ‚æÊµóRóÏÓÕÍŠ%–$½×¾Nºm½Ïø²ëþ¢¥&Š«’Û§!%Óñ¥½}ÉçáŸÓÑBè’PôïûðpßrG°ÛÅ‘™ ÜöWÞÓ¯Ô¢2СT©Iäùó/V?sÌ{¢í?>>Š=‰Û„ÞêçG*5_Yék¡ƒìQ1•Ï  D´7üØßŒ,˜•bèåþáBžw$ÚøŽÀt^n:य़‚ï™RSí¹ØÕ8°"rëúÍ.å+D*EýA š;êû÷ï³ÒÉtÿ#}QTÑܽÈû>&d4I¿Ýüùi;²=¼áþ¿^€ìÀJo¨¼9˜ !éYlñyÔ‡,£SúÙUnP§Qi,‘þzñm‘aר¡øxÙ‹±ß´#,sªd øý1~ôç逗ØÝûÇ(˜'’XSÁ¹þ_w±°Ôâã„`}ã»PèÏwß=‚4>É?ø’ÿ‚ÆAQ}ëBo£ÿLO`ìó(75u%Ž–öXBr2 ›­Cî_€w×;Íñ˜wc°L(Aãüµ$OAP }ý)Ä IÀÝ%{ëÕ§v€··÷4•ëÝåf®L0èVØÔBŽ8dRryÞ³ËS4½ à]ÀÓ$Àœð:YU~ƒ‡ÅÄ&æFѧܗæòp»P_èÇú,‘K,‘Ì2L¬í+³k*k˜”Ñã•ÃPT?4õcc©¨í>O¡^ÿÈRJBFF,ƒñ/pW´^ÙÇÐKÌêÑaEdÌÏ¿¼¹X‹¿8îcPõN@-hRÆßt FT@%¬¥zJ ¿ì®¼V.Îuø`\[´Â,5îõõ#Ztb*óÇäk§rsPN×bÝ/hŽ_ú·z”È„h³ŒÇÒíqàNoH%wVÛ@„ °·$»VŠ…únh貫8[¡Ù/¬> à0ªü›,evÉ IîÍ7ŽéI؃. jJJ¼«LèbòVÑ™ÌR½J‚†ü¼¼lÍ\ů«Ñnßï%/¯Fs+ލv)`_>±³cGÏ#£ˆz[ײÍä·¿ˆ Ný+wl×K©r°d‹ûQEJŃv€”Ã$·¾zà…;Í;—çíÅ£Ãñøh(OÔÕ•œ+òC8ªÝ¡ ¨ŸÑþCööñbíjßËW&žàwô}{{¢Qg¯kgÄb®©#''î‹/Þ€D¨EŧhG^ɱ1˜– "òðt×Ì"6ã3ìåêÙãdškÞ@C3Äèá™Ò:¬ÿkÏþ]ÐVçí>Šùãç|Vòd¦râæ1½ÍÒïÍiY Ÿ±)EC]9ï! ôöíÛN8z±Ö¿ÂÈûÿ[oäº !yýò¯gÜpCü Æ÷°ÎNYdûŽ˜×^»Øá7T€C¯‚–«íæU­ã ñ#ƒZéhòGŸeÑ?“ ›îóÅ,áBSQßœ14¿ã¦gaØd} -N_?t‰’þTlT¡âš¹ãí =vȺÆ ­Sb2‰“2ÌÏtzêáN¸~K¢ùoÃX­—Zý(l¡8¸¸~¹z•Æ j͹/Ú»ùtQOœ,ÿ«û’·§ÚÀ¨– êìCA]’ë¹; BT”Y‡ª4ËÎ*¬ªúzºM÷k+*ËRE»‰~È­ZÀ8ÂÛv¬(2Ì£'Å·1wVœÛbæ;¥#½KTÄÝâB%Ïz!}£äp!Wƒè"$?)Â…әєïÿ}PòDëÏÉ ï›#SdŸƒžˆaÆo:Âá_TBÍ%$¦nŽ(äå$€Ól­Lš“ëú=d"øÕ ƒeB{K;IÀuUÀ®ëí–jÂÏÈ^"ÆÅõá­Ø³&þp€;ø°J•àIH#UË~åníìº^TXJ.ú›Tóðç£7Ò§…hMÇÇuÐP ]¢hDþ›Xo U°jšÐe‰\¾ò—Åo®è®àvêkêþ½« ?î* L 8Lâ9ÍÕ+€Ét4G7//!àÉ¿'%>\Z|L_ÈàÞßÓEë””/'ÍÕ§\` K–„ÌÆFýQ:¾ù×”ÁF^0Vš1Pe#ÑN{çÎî¼ôÖ±Z¯ö€©$®Rœã@ /êf¦OÏhš|÷>ì^ò vi½Äàþv„‚ÌŒHó¹oÙ.µ"£˜ŒÞììðê)  U–¡…?£Eï彊¾ÀàôõQ*ÊH³ï^Ä¿`¹õ_%ú2œûøaûƒ:Fóîḧ^šŒZñ¿¤ñ>y›iwèࣹJ¹ráþ¥ÈŠàÊéö؈fÇ š¡Ÿ„œ¢ÎöçþNbñÛc”@XO…?Ak–JA,Ñátÿkûå¹øhÑíã X¦ŸØÓ‡V9{°J¹é¥E32Kœïàj»o mÝn˜‡f«™£»}Ò†K³¼èJþçÕ«Ý‘$[KmRË/kM»È»L¶J @]â챂ysÔE˜"äD]¢SÎe­ ÍY´[¨b‚çt›–¥a%þr‘É—ú1Þ7µ^j®µwá_lT/sói:ÔµùEç–Ä{;¸¤æ–_¿sQîÊb¡çPN<^'™þ­(¾c-*‰2ë [™2 €ëÆ‹zî,ç'ãPP3c¥±(Å!»ûõ¿º2ññó~–ÃôØþ…¾?× dmmý&}(HÕ< Ãuœ¡¥]„`4üFÉg> é!rÔG¶Ãïm«•o)Ë„H5{iˆk4ë¢ãÈ_"‚G]xvoŒ]™ÿHǧY…ý_cc¼.‹â:/g@ÑÄh™.þ–øÙLJïï=CV ‘VQЧß/&=·}–£æ”cf_øìÙÅ­ëÔSvK;örÌ×,8ÿ¡áåÓhæ–ØËéÈ.Ƈ5X]☣Ó- Üô»Õþ§ ð™E&>(D“éçáñ¿yfdP´ºŽ*P\–cȰ>²ú¬ÿ€=¨ ?kxÓ“´Ul–rDZ9Ý:tw+ ÌUšqwv^5VzÊ$,LÁù¼¬=ŠŒS£ÞñÅË× ž[‹-b¢[È&‚ŸUsO 3ó9 b({Cû:Ýt`fj¤+wg—ˆçsWßo^çv—}œ»3Kï–© Ù] üòöÆY*€”͇@Z3IŸø~ÍDŒ÷×™}­w·”"®ŒÑb$[æëíÙœßD #ñÓ™/í›(%›Œú‰’j¥Xê½F­üˆŽašKgm ];]¤ƒ%àVö1 ­x<¾Å'P æ{WÈb'âwå!—-гõ+×¹õÒú¥û à/‹±‡¹i Ü áÕ|¡F 1Ïýb…`ó“¥+þ(†Gk;mÊlÓ¨<[ ‹òÀÜ5¿ÕkѦB¸¶©;‚{EK4˜¦¤ü[«”C0~çJW¸ßÄÚŸŸÜ}_ÝÖ|Áu̳=·†ŠŠg;‰œ¿ÌVˈXÉRÉËã Qmh“”œ½ý° õúœ¿°=Sbïø'wû°j_¼O¡û—W«ÝØõ«\ò‡ÒƒŸGKõ¸OwÚ¡PÿÚÖÿéµ5&Žªf±{»uAâ½ÜZ¿…t`+ è<Í'@ÅtÇw÷x™} ÑÉ  ø[E¸èŸ®¶¨¶c3ñD>TDÞXZÌçÄ}‘$ì7Ï;þ?¶þ*«­ûFº¤»;¥DB@@ºC@APBºA@ i‘”îF@R¤•îîî|îÚž÷ÿÝoÜqÇxÏ;Æ9Çóì½×šókÍ5—N_¹0*À›ßÁ&¯۱á„çÑæx:’V”R”ÒpJ'ÌÛK† _q ¸DLî,ÀÔ~seÏSK 'æ2Ì„XÄ»n‰ é+9,´AJFN-~¥ý׬+*éúñŸÛž;õp âZ-ß.£¼É™™°rLt4="íôœÏôSü!œë!òcFžƒ–îû“ øeÑeeL¨‡ - ’bH!}öUCúî4n¡¨ãÙÕq[nâ` R’ÙP:…Щ@k½V-»÷íÝA—›Šß Îäwœž¾p‰ïÖlèL1<­·Íü®˜¨½wAXá>ë„fXg_Ú_ ¢&µÓ™\æïÊ3Ë´(acý!þÁ‰9}q”Ý—Ì,碣7 ¯¦Ë|%tàªÙi¢°žK–œ® pÕ|hÑc£Æv¬Håhƒ:{*fµÔPž–Ëv¬<%‚ÅíâÀâ2‹.¿•.«ÝÆ,ØÙv¥âDYÌùsôË-ó~âÅr†èXB‘Ø”Š2’ç­~¾§{3$ÍÞ ¹Y·X?í¥ aaŽÈ¤ÝÛ<©k÷Š x¼=z«Þ¬>Íñ}ý‚¶Û Jº8PàN<]ŽN…¾'ñþñ_ 0~ÙÝ}ƒMÊ Ë÷·Ø9³ß|ajæJÛôÀ¶Çne÷áV~Æui8"Bæk­Å¯v_FýÏÆdζýìt®Ñ‘¿dç:YfªÓŒçqºB¯Z\0,m=Á´´ú>Ãÿž jÕMm?÷c ¸¹þD®´µsñÞèv|ë²ßtE¬Ë+(€WŽ0Ô9ì"1·|Üh€%Óø÷7BVL)+Ây¢xú/'­”ÍEkü¿ÝPä, ›[á~ÿÉæí‰òhè([¢m»Ü£ÅÃ¥_¤Ò~ó>'ª êIÙ 8‹×;Ü&ßßö%܇â}c• BÝm¶ë|ƒáÿàÍlO:üò—™ä †Iƒ.†­w²Ä¦Á“ô>—›ªz¹äS·xà‘/ýÃÄ/›¿Í‹ZZ˜Oì~Ö?h·@|ãúŸÍù©ty„¯*Ì)8àÞ¼|¥üþ?ß½ Ãê†RëÀP›jÜðî pØ€¢|Ç‚3€-¤%ÔÒ%¶êÄdß?NŒ˜ÏÅâ¿åiÃÊg§ØÚjKЫêî‰)y;Ám~çµ§Pk7µ…ÜC%îö¯Kÿ°Dø~=*¶ÌÞtmZ*ìi7!NàJšßGË_O"¸³¸P{†…‡»ÙðpÂîX§ß°H§‡Ãñ­†–“òÒ믇>™)ÿ'¬ß£‡È‚lZ°¥å⹘uŽ^°­ïjÁÒÚ¿uì0íbÁŸ~=ÑZá}aߪó(&ýË6òév'¶ÿôOƒ Êõ™å…4@ÅôʰôÝ!Ô¤0ÉÔ ƒÿÕ€L· ¯Ëæó›ÑöR°Åüç§ ?ný­š§¾Ds‹µÑ5jtâPöZM³Üw[ërÈ 2<;ø”Ý0wt'¤B·’áˆbØé…;aøŸlÍÐËobW:‚lí•ÑÔ’á€q¯K?Ø­®­%lÃËLGžà¾˜ûáêWlAË…³9Cv'<‡ìÈR†Ÿ|}6eyhîÖú–âpTq·ÒÞä¨îùóç¹*I[¿sëO«<ï:뱉ž—#â‚ìÿ´K~Ý<;õàÐHmr˜¤ï¡@A•FØ=Ëtˆ…TðŽÛQ(æÁ@4{‡[‘âR…ü£,3+.Çn¢¬öV1K>‚8ñd8Ut¥HêèjSÙ ¿sŸ®¶Æ•ýö\v1àx­?[9ÃÀnºæµ x{Ùqö×Á²tÚùá¯ÊNî.²"ÉýŠc¢?êã(_lØHWùêo‡„i"¾H‡ýpG Ç,"þ¬•¯¯°Žw¹FÒ*å<,Ir1çNãu±yzŠ=9¥£Ö~iIfGMžæËrŽÄØ¥ðÉ:¡ƒìѺ¾‹]ÿoÄ,þk†¤@ IL·Ô\"]i ²¤èa¡šÐžt,ŸÀ8tÂ"--ís-ˆ«<Æ{÷Ý~.  pˆý:0ØF*Ò¬'‹ã„ çm mêó2JÇ_8»0qwÄþD„ƒf4Ÿs²ÏÈZ‰»óÍàÓÚÁ{~¤{òa±¬q_öÕ+‘¾-÷J¼L 7¤Í<2{lÁmËO„޲ïöä¹nõ]µãev_#ì“ÀW2П°lêÀ“{´Ì+©¸§˜ûþnãQF"êì;¬ ŽÛóÓ?V·G£™ÌõöT⪋µ_œi~9 –ˆB=A=×ÉŒ½¶rI…÷_Sй »­§d®¹Ì¬ºräUž¿ú&Ô'ÁSÔl­öÀÝò3YÚÿ%—ñVê•—Øå}¬ZY´‹¬îf)ÙÁîDàA”ÿ•©7ýÃug䇫Ý@ªèŸ Ç‚vˆ+ÝHÞç°’jåûŸ™ÛxLñ¶cHrmßž´eÉ·íÕ!­õß”&§Æ±¨/¹Û¾–dÕMã?ÌмÑOEèòü€Õ}‚óî7ŽG_“Ú”Ö b¢×‡âã«WAf<xùÞÌrt]Í“ÞÁÈîƒQþ÷*ŒÌ@ÆÄ1«¶—Ö͇œ»ÌëfJ‚ñ[WIì)Ò ¤¢Ä°%`ßLä±ÃµŽ­ÿƒps&)‘Áz(:Dî8õ2iié#< í\ÝŸ—$i]kXfõ¨¥;:úæx…+aýñg¡ÆM?GûC£ÞçˆÈÐÿÂW¾ÆÀ:ÔPßóþs[õsÛŸ Û)k|ÞFÙæ…F¤ ls$ÌØ¨ñÉF!ªÞØW¤õaë¡€,ƒ¯2†_¾&÷ö÷ÿº½:ú?-VVZ:.>6R„á5¿àqCíXÇ{~:^Öx®ë„p$5"|n)x‰ŸÈ0½•D±×%*[ø£Áê”`TæïÀ§­Ó9Ûàß‹Hqh!: ©ìüªt5-Á!Ób­%­'Ùõþ_ÄÐû/Ò|×ÿ÷¬Ž<Õ”‘ïo@ê0¿°/Åj:yPá'9Rõ²=‘)4‡&æŠ8ïK2ÙLáqý:ó•jk­Å›É à_»áJj½¿æ˜µçí²tDíØŠé}ˆeaWƧÐ?h³N]íù,¿RT#"/¡ÿWÐ.÷^C‡ˆßzH0b…?ü>¸Ä Œ’ãÓw_ñ‘b’ܸ‡rƒ_ÛV¢‘Zïº~#—ýèsˆ„ÖÌ ›ÿôŒPòÔ3¢šš$žø—ˆßÚ‹!cóáTqQ"­Þtk´Y-rtáGÿV7ÀÐ8¦ýï?C÷‘8,´À-ÙŠö.¯ßZÜÈ0xQóéS0§^燿ں¬Ž+ ç›cýðÓ€•îhËÙz'hÙäþ¢ž|­Šê˹tÿ›×ßïëÖÃÖÜŸ^ûtNì´,×W.§4KÜJ±wrÐÇ1e”ÕY,¶^$¨2Mkã(¯µ ¾)`wÜÄóîº;ºZÑMÈñ˜Ñ›Rz¨‹Zœ8ÙH˜È²þøGb¯ú,uvúÄññ†M1ð“‰Ü¼Iœ0mã7Çp¯ßf?¿¼s_\K $ã§oe‘†–Ž!WiKðÆ‘ÕÃRF"QSd´#¥)¿‘r»¼ë a"•?%Ìï!u¾*D…-áÿ/É‘yýï}>QKŠÑ5ÞÂxmðx=ùøIÃ&/wxˆ©‡¤Ý¢Hï0JfXs•‰ÖÑÑó‘ÞC²ý›mS¨…öEßc÷‘ù% ùß›Û?Ö@œè7{ B[­³ÞÍè¨A¿+ÃÐþ²¦! Š¾Çª”άE“à=u­²¼o1 ½+2œ·¤7ø_@¦UÑ}¾·|_õ2°+2@ÂW$¦=Q'â%§z?à¢í7 K*M}y¤èï"ê{-ÐIñ‘I%Ñüxµ·~·ªŸrð"¬R¹ýøIªoõk2žH}y¯R8ÇP»oÍuFÒkë hÈ$–?Òøµ î”·zµèòöD‰zo³abÔYÀýÌû{,O^}3‹õ%¿¼¶;‰ûŠ)`p ö¬±AÈɿɶæ‹KD=ÝA;Ýú…‰ªöæs‘&ýZ¦Úœ®å@Å& xdÙ• ԸƠ°(ò'ée…e’Ï‚„ü„{­"r§Z8°v®ÿN†áQ ³˜¿eêF¬XÊüÞX" ³"ý˜,Ÿ3"ñcÇ_¨‹'ÃúÒ?{†­5pg¾#84ýœæãûÂéjwn3†Y Ýk&fŽWç–éî`~õnÝq…Š#,³¢¯Úz¸ Ø^Ïc+h f13·¡…ÚþÐØ“Pݘï<ªóUëŸÊ€àÛÁÇ‘`€²V’ù¡;`wƒKÜwJÛ’Kx_³HÓ\îò›±›Ï‰-öóò[ߎy8­?Ë!¿ï+Iï!AÔ3é±C«qÇOt#DÙÇ©_B]Gvu1Åáay7°pa¡ž÷`€ŽL%úS›÷{늜Z`è³_&X4‘Û\ÅÅ£Füçü®oRCÑþž`àÌ€is3àûaõªŠÞÿÉmÍ“ò¶í±Ý££î’e©%êox‡w»GÇýoÐncUPM®|µSvï [Gßœ&º\DZ<êthUm¢VIâ†öø ÑqÙŸMÞÊcÓ—“x€€“­.³HÉküÅÞ§­ßÂÿVóhíX+T:†Ñãß´1ºÏ{¢U=ò¿Zk/Íýs©§ühv B¤>]ã·'ò=—êÈ!!%nía2ÝQ2Úª^æŠOÓã™GpM"l¤ÆyPA׈ùÝ]C¼#B'ÒøÁÅzÄn£¯ÑÚÅö7¡<üùšÐ¥%9noBU§³„*=;C52äÖÿE‘Óç””t‹-7û¿iKš•;˜ÏûÝ_¥ó$WUÜ{ ØN –5Å’eJß­Ö½êXúÕ6ÛÐ) ­Iz#:4£ ïk>æEŸu%9<æÌ7¬í(+/bŸ÷Úá‚V¼.w«‡ßtG|:•#ÙÖ²ð`$®´¤cVzÔCË‚°$ô?0"½r¤P‹eà«`ÿI-Àº…W÷}ñG> 9´{§e8ÀÐ5]³/«3²LMµ-w–hÞXWRÉG4I´ ªH¼~Í)»‘dÀ’ñìÖÝí`¾ys4 ZÅobõGÍÀ ì`ˆàUUƒÚ4E÷+³ÉÿÿI¨GV½k¨ ÒË]:K¾ú̧ó¬‰7º#Áï…Å«[^k}ÿßÈ𳓗ëOæ/1-7•)5l«x±ÛÓù[á³8Ûb~Æä£÷a³8!²_$½…€´þ`Òè¡¢ËX³@ÿIz‹ Ùm ɾ Ñ{#°?SøÜ󉙎ß=†Þÿ@P)5ôÆÐU‹ââ3'g×ç/ö(„N}ØÐCôñ[M›®Ï èj©ÄoÇÃ#~} L2E,«G´ù,êª<ãô©Öéd½2ŽÍ°VywÚÌÿN°¬åtJÎ@¤!-Hæë «¹´0KÑWµÎu4½a€ÿ™Bë|ÏÄ‚&ìÿ&ý#dz&Ìü}eeïû,—îO6^ö{µ¤òìÎõ·gïü}²FÌ…ˆ‰ Þâ0voÆÀ°»a1­º'ñ·ÜÉzÛõÙ®·Iõ«åqIçuì®(*;Gãp÷£ænóvEÞÏ4ŒBû´?Úýu»ZP[«y°à,èÂÿ‘Åìh)Ù›ó½£·ˆC—¶Ñ/o¿ß˜=¼Z§ ~à;ïÙöGéæüª?Ʀª:pÂɰÆ<ßp c8\2•0Ä·Î}ßêAŧO¥o~0Š1µEgô \™ woÎŒ‘]¨aû½Cdzÿï€õûŠÌÌL˜ºô$¢€^ðl™§r¯0}5(aÆþ­€ëä@Ñ©æb¤pÀ­Ok-}l —P¤_ûk^·jùÙÅ“ö%¾6ÁÌEál{¥+M-ýÔ(»ÃŒÈGD•¤*C„0Zaa\©KZhá,UÔUæø€ÆÚ òÆ,+ÑX Ì|ÇÏ3`×tïŒ@N"ç²ö˜1ÜmozÉÁÿ&eÁ–Ð{{¼t§³“¸Ú òæÿjä5Ûp/K²›Ç·ÇŠš/–Ë‘µ9ìFÖZÍ|*7T˜>=GׯÐ9]h™sxÛôM6³@#ªo°+ú¦I^„L_OôÀÀ3í"m6“¼gd¬á—ðçÊʘššší¨¤0hGÒÓÓ³gxX‚(jÉp`3éÅÅ)XÔÓ;¾=ùè¸9Bw tˆÇ!í*±à 4Üë£cÉ•Ãæ»ú‹Wh4ÈÔ:x¶\vPk^#}"CHímybZí¸$ ]v²1 ‚5Ý]dÏ´Û6˜ýY¹÷Çݳ£ÆóiÒæo<}ku±ß7°î ¶@œd0·ÇªK]u›]'rMÀ5žà!kP²²²¶cð¾® Þ­^ìÝ7íCŸÂàÌ¢6ñüZï¨|5#1ñøòo/~}(0ª³¿Ô(7•ü[¬‡û2.GÌ$;pkA ~7ƒ‡“ Î,n»“@„Þ”Zk—a¢ìÍBêK81Jé¨xMÀk…~8çfPˆï‹¸;wÙmö'q&övÒ•|Ûž&¥n«/O…°}ÇõÙN¥çÉzÎ=Ü£;ªítkwr VÍOŠ÷bqaL¨M€ÐÛió¡TÑíÂØ—äqiþÒš%§ŸC¶wbBŽN†Ý>´Ìyé> Ž1ÊÈ^†æÁ‡5b•\zàÕÃUÆë±Ï‡_Ò›OòÒ" hh• BW3lŽ|C²r *ðqHg¬wbÐ-7+Ö[rX-¼É^²°°Mò6,¡U¥6üùèîBf¡¥­nÁ«uüj##Z>‚8$Éðn¿Ô­òeã´Ê…œÝdd’<’HïØÄz¶ïG±g–ÝÔNÅo“s)§ŽHPÀNŠÂ kl^ˆf@E†Œf>G(¨¸ÔŸ¤á·Njm'^Õû° ÷ö!î7â> îxž• Æâþn{áÜ?B‹^y·Í7{-}¤±èeº\SÊg§Nù€Ò*ÿÕ#»qNJI¯¿$TEzhëƒHbîç/¯‚«\9œ½n#êv Ý5ìME#ïô²¿„ÛÉžKEߨÆK1Ñ#öIf9œªï6ºc@²YPÇ?…„ì;µt‰°@$´åo©g/õcÆŠ#Zàûm$7–·zź8ÐS~7{Â%`â$½ÏWZ¿üÎQ"€Àºáë¿ãR ³ñÇ ´À2“ÀJ˸‹å:Hí”P!ó\ ûßÅ0(fUTŒ¸0¦¸Ÿï›¬-òà ʰÔq–ɉÛD—æðä›<»«NóÓ½·…áý·ÆÇãÍäD"·Éö•¡N1"‡nEÓJÎW‹Þdþ¶Ã¥7ÎJ»‰r3­|µN‡Ö»ù~ä©ÎjD´ üüO>>èÄ•¾ 8Û™Xù@aÿ´À‰³1±Ô¡õþkÅKßo²(æK²æÛÚnrYzÒ4ÐÑML‘òð’6*øbä¼>µÚjÿéC:¬FÉ—ºw6׎ª.'ž|^üO+C7³Éo ¥Í8´z¶è /ÂñVüÊšzuv”Íéppšü „–á>àÒDÏ̬‹@ÿ­Æ~ŽP̯ñR#†ŽOé'›Èl¦bå·â­CDÇKŽÎOcÀ;‘@­kLMÓG*B*û§³; }îªw ŸðOÊË_zl=C›ÚYf`Ê*t–‰BhWýϯēLxdÕƒ÷‰\Žž­€`7Xkëù#~£Ä ÷öî` &†ÒÐËQ½‘©³Ÿ{&þR®wºí)Å¡%,MÜÝ¢ç3†Ê‰È»`Ñfµg=ïZ~çá8{{ºÛq}ÇÆ?ië©NŒ7Ÿ…¥à›ì˜í:ñcü ]m·º1¨^50¾[Œºoðhƒƒé}†ß50’‰œËW†DˆÄ²êóÁ <ŸRäó—3Ã:{ˆ8,Wº"7ÁY3Å&zm¿XHîéë“]hñ%xˆÿ\ý5ÎéΆï˜Ok¡Úå.ÿb”x“ÑÊ/\éŽÌÇAŸ32¦é&*ø­ÎºÊÆ~± ÏÛâÌã‘ì­ï¬mfì]Ë¿F˜®=Ÿ.±Ò'â]ÁhÇùoཡ3 .»“øân»@A¬|+5²?òaSJ•ÚƒöQç(¹°ý§‹yo܉rEàEšÍ>³ê ¼™Äƒ´#4¥¢¯šŒq8õc{{`ëÃÖ‚ÊM˜5ßßAqðœ•QÀæ%ªˆôÐ é˜ÇÖ“F!ð>¨ü _ëo6aabBaPŒê€v6{¢iKë[äd_/´HB¸ÀÓcéi¹”š4ê·4 Žn3½§–ÔŸ‹ÝkŽ‘vß7`ƒ0Ûã>ó¥–¿ýÊ{JFoo¨e` og4ˆ>9PÐR*©”?eñclˆyL?<7@š^ž›Vê;ó’S­÷}Q²3MS3®P|•·Þ“ÍõøÕ«¼º|¦D ¯€©ŠTÄ13Ÿn —¯{R‘Æó»Üï‘*¦Ã« ™_æ{2D™ÓýﯛM*›ô+Ãa‹•ÊDŸï$íÜ¿ ظ¿“È´¡j–r;CÛŠ4Å…ëà§Cµ•Ë@ tg#¡ÂÖÛdßLtyà/‰Ÿ¡­]ˆXbŒá²µÜòFGçh1×bî‡+¬ä×=R`ÀJ ¬±R-Ь«y¢îDñz+ÒQ£ÓOc;ÐÔýmºNŒ¬F£ŸïûÿUüà) ¤ñ ¢_¾9h½ð)íŠ4ðØ•¾_2~)?ªð½iŠ1«´H% ñ9DrmYCÎÖ–Úsßçj- ºpH€Ašfs,BAEl­Úµ=ÝÝjÙmj’€êR `»‘Î6Ís}îU'Ü),bJm¶sJ˜ïY5*ÅÈ  ÿß<2röøim› O4ž¨™÷·ýb] ïÍÆÇ |Ú®:³ú›ly™n)+‚»ÄÌ'ø)ï*Cýž{Iýª×Q%E[vŽwÓå7UꀎgìqüoÐ`Ö¨Õ㌔ Û„°Qcßß’×è·ÓU‚5v~œÒÑÑ6ï$>3áû¿Qêmñ½iö¾¾µ¶ªÀ„;o$~úì@$¸ó…õºqFçýOÚtŸc¥Óæ¯nwŠ0›N:N˜¤sA µò—ï..VsÞ#BË»cìò,T?i¯w€™¯çñis®QX-Cê-_ËœGÏ*odu;;âcx‰ð¤|—”twßetžM&Eâ 1ÁÐu{og¾w&aˆ$k0èù_:')“3C%îåüÝsoº¶ÒmϺ¤5hŸG†Ðÿþ2h- ›Õe{õꈙ_PÁ*ð*õÜFÅ®Å;Yqä_DÄ0Ì%ÝC¶”¿Í_A‡åëËÃz®_v#~h9PÄÁØØ¸±j¼U‹Fb õøß+AþÌxÎâFQKn_y /`¿™FŽÏy&* -U.øn´ìØ^êñ¸c„^Ýy†CËðÃüDŽ2ëç-›°IHêj•`Ö~WÖ/å„Xïå« ¤¨À¦ð‘ÆÍ숀HƒêW[ãUC4YN>)÷Áqƾw®tºC¨ÚHùù¨Ï1aK¨ÿzì{  æÝ»¡Ò笫[†[[oòwæÜÉ$M Õ%^GÚ ¿æ›ªØdïíÆKª‡Þ™‰hÜŠ:„¤}"ýù}PÜ 9ÝWè{NNŽùõé–ÇÉ °FÞ32½—4"0—=LÆ6ždÂg©è³¾u7ï¸EàP‘Ngõ^èvžË!ŒJûø³(ÔrfÉÔ¤_OÐÅ:L(ó÷_{A÷ñ2“ˆïog,þ䩦—»Þ_íÞîÄ—íV—|IJ]ö¤s ™_RÜ+’uÓ]àMÛz¢í_1*%õÞºïõéQ‡ÁÙuÎÌo#:•JaY0žVìÓ½²Ù÷.`nÈç«|ü|[ߤÆeù®NÎP°:3ë¯Ý÷oÃO<7Ieþo5öRáÅ :fÕ¯ÁÀ´­ôÄ0¤—»ßœd†˜d²0bãn Kº£Þ«†wk‡óÞKö<ßÖ‡¿=)ù½€À©&%MÃjF}¹J)‹b¦ÓxÜÇq,h¶F¶BYŸICìK¡xTD]ÒZw÷5j1ô 4ÜD¯©øNwï~¥(+Vûy­uñœo¾ˆè+Þ¯ô—ÿËÊÇÃÅdz^;¥Wê*–tp•DX;Ð]“2jwtuýáŒÚýuÄÚ ÒÀ%tº\Z®ƒ"ñz§Ü]gøyƒ²ðg†šZÍñ*ÜNzûÀÀ_ù”0$¼pHzEû•çÉ*º£‘[Í z;æc„ñDGb}èfÄ”"‹W^&ˆ >HÆ® *W]‡Kœˆm\C’Æ%Õ¨@¿»«³jðé7<,0ËX»Ø‘T{Ù8÷£Ò‹Ç• "§¬WÂ÷«üÜêj=3_aï€Õc×íz~BLèðn—™ÿÝK»T#²ÝªŸÆìs«n˜ø[yl ´€ÿ‡ eÿÙ[hk}w²²gxøÂ¥4žp±—%0W%°/AÒ¤O³©÷ ¤'tbät¸ Ì^gK€ß]€‘=ÂÔ¡Ô°Óܼ*Ä€òÖý/µ§**¿ÚC° ë“™ù9°<6é&:˜$íª ìó4öfêp>ñÖ*¦ÀË"ò„Þ4VŽR°Æ}ó_wý¼¥€wô¿]—u€ÅcÿUDªï÷|&”òÖ>·•âUìº%¡ zYƒP÷ÑÃ¥3üØÀ¾¢XYGtÇóàB›Ë.®Î55œ¦M¤ƒ)ÂîòóK¿r9ˆ`浊¨ØŽêóÀß^®D+&Ày7nf§GëÈjuØÐù$çž ÓþïÌ6^ÙÉ^ÝB Eýïo’7ìtŠQ}NñD¯*Êq^„ûÿ`à``@êOâéf²Oº`g±‚áJõ ùÌÔ©›.•‹ê|ŸyXœaõê•Eg8‘ÈB.Ö‚GиöW«—mƒA²ó~7o}Ž{Y¢ºgÖ¶ûÛï²^îF`¢n;ý¨v³y*ž ‚÷¿ú¡vSï=A¨„¸ùsŸR»2„–;bÇG_…·È!мë 2€êwÆKçðÀ¿«?”5_æ\Öšþ ;S‡c1Ùúa~Š¢v¹)ÕA+*5‰q¿˜;‹}ª€Ê!gXúÕ›O1Š2ìO¾º85ÿü•[~'Ü*á.m· à¹H!íouÆè,ºð4½„iØÏŽ–úúù3ü‘e€ ]¹ „ {áå<k6ælä î7øý>:C8 JÛuþl¿ îç½÷u_ž´Â_šµ?l !1 Á"¡ß”½ÙŸã|X( ‘ÿ@EéÝÎ Tø ]ýÕ¥`ÄffºSî¹"1?çV|ŠÔX·>hYqnš—ðOß}{P*hÝ%Ì%ÏÈø0%«§\0"‹@õcרµæÛ1Cùç†11|ÎaøPóÑÃdõô‹î+ÛіỒᛳc͘ãüéß2ç´Çü + Ä€ÐPBqßkÛ»;|226IÝd¾¶D. ¤ßÔÊ÷4|¤ÂóÏ­KÚÚd€¤ÕJûÙã•&Ååvg=ø°ñ>dÛË3l =}z@Rä µtÈìÎß,N ê|¨"ÿùsY.Ô°åj¸á]îÈ0G½T«‚Ì}„£ñBÞ)YÏÎФÙ$ºœ|'2 Ÿ­ÊëÌ d+Dµp¼4A±+¿ùj –[íJ„ˆ]»íw®ŠÎÔ#GîÒŸ|¤·Ó°V¸iÍW\\ó…L··W'üA½q, ŒŒrG"ddYb½ó>çd™º1»»ožeHÍåÈ»¾ÀZÍ:Çêq`ÙЊ׼¿íòwij¿—l8d|„ #'ÇÜ;0Ðm¸íê[j • ¦= V3V2-Nüûœ˜ Çî»¶"""b~u¼V`ƒ«Çô|~( íÆz€uºLšÖí^úÛfÁôút@>ÿÏð ŠLDC„¥Æ¼lËÛ˜%útÇr¶“/ÐH—˜d¥fóô©ù¿ ºÃR&^%oAÄTZ%Š–„=ÅQ[O‡Ôµ·àQżó¿—øð€*‹„ûi´NUÎäÝþ¼‰kÄÙ˜^[$E_w²Àë‡b®Û9>´UR ‡ƒÂm9J2^?D´4 ÓÓeZýÚ¾ 1·qÇG·~bŸV€–XTÿâÑÐDø^k¼ä*¸ñw*_ä(–ñ³>ÃR¡'ð{13à’©â…be¸t0žŽëd[•_…P¢¨Q®/’¨ûØ9òn•+·ÇŠWÈiZËZQùÝjì^ww—þ‚ÇIHvFvEŽe¤$^\tGð´Ø`ƒ»uN`¶zɬN,‰ð÷°“Ä vi=j<©æ¥!¥û¹IJºu…æîv¹ƒÛöžõI^ÛøéUÕÕøÔÔQP1ó`¼¼Ü#jΡñRÉø±ËuŠ5Khcïðy± °Á÷ÆL-óôÅ{_§93'OO‡&:røT°2l÷Ó­¦WøÔv«Ëˆ) *œœœ&lý–¡÷üÊ_£ cà@_FÃ})‚ßÍox-iqq9ãow*²²ˆ?ÜöŠ”z[óóY/¢CŸ`²9®†N¶é´OL ¡b?ƒ05^‚_;á}A|PÏž ØHGÒ„ƒútEÓ”Û|Ú}cÞû17ä÷ïÿ’Ù—D߉µ>¼c!ú^À£Üë÷â-ýöîýW4vƒ~ Ûˆ˜Ú#ÂjB tUªÐ L-U„NR| ’ÅEuyàñ£–Ëe¬éFuÜ&ßžt–ù«E½^CÔ)ç²»—>©SŠcþ–Ú.…ŽEB|·ŒbtÒI@Þ¬ˆK% ÔÑÕ€ÿ œ»ðiíÃÑh¢µ[ÿzÄÑYŒLÔwÆ-q…_`´ôô°Óòîš×ðˆ‰?ªU޶ù,ràÐÝýéÄõ ]¤«T._-ípÖy¸Ÿ®ê™ÑwØÙR£{ŠÛ8\ÃÔ´­¼5<–ò:%:wÞcGÞÒ¸{wòÛïà’gA¨m‡KÛŸÎ~áJßîXvôl\Ü„øÚ;Ou&«û% †0¡‡þ—Žw×®.;ã8'ëƒq÷±KûÜeß¾?+Ý\z£–x.Ôå}М?dÕs<ÛŒÕt»™è¹UÀ¯×þ‡`²&ÌÝ~Ýòts”U§(>ë‘nÉó×|º›A¸F_Þ]Ÿ=½[8"NSCCs˜Ùø¿Z€MIPL “’Þ_(ßK ìØÈø5ÞÊ'SÄB#Rå<::ŠŽÝ1š­˜Û]¤¥(pM!ôÌ‹µø»_sÕÆLÍë SÇi½Ÿ_Nµ˜¸ôÝn±¬ÐËpBP¿ç¹:>:úiWÞœgó©ç)-‡J.†A2&ÑßBè08ä©"š-á«ÝÔwgÙÏ^·X+Ód}ú)/Ý ÅdLZßà`'Ë‘:3F•è‰l4ÇKÞ‘’äÓçº{÷¾kkí­wßÅâèúàR¼Vè#ù¸ŸS±­^±ÓüùC@*‚G*ix¥/d ‚£««àÕ•÷E@+‹ÕËy?Šç‡ÝuL*‰_|ÎM"Q}pýýô}ŸÏzÖ>üV±ó ,ÞLEÏ&&¦oîó_툱cµ~„ïd‚YPNŒ'ïc~3_ò&¿B3WGÇAÖÊOC*f±›(ªÞÁ õž&ÔÜ(S‡zXn©Œ’îŒ qhײãçù¤B÷gps¸%¶Š("`^§Þa`þðª`Õ_V_oû7aQQZ[¥-,,rº‹t°&ëpIÅu½XS*²«6>âP Z NÛÇ]½´‚­t…“ÕºÝ!Œ®µj³Êô*¥=Úkn›H’† cu½<[À)«þl¡jŠÐÝŽeÞn¢tƒ Ïæ¦ŒS·÷©%n7·MSÓC¢­Á¿‰'PÈÆAø¤ÕïN€í ‡ÈäÞ¨6–ºï)vÖ·ÆBJJJÞO8Äo~"-—ÀÝ ëvàŸóó ØYtçœÞ7ºíAž+.C] !ŠFÏIV7Ïí­“e®f43 Óˆ5å7Ö¢Rg³F[¼ÝÕ³Òg´|(0997Z&&”»› (?sxbõõb\>©Œ3ùQó÷¹ÐƪÒâùÛ?ph³ @s±0ÝoÓẆ×;372›ÿXñöDèOŠ8ög‘þÑïîšü‰ÒûabVÎ,Œ‘‘qh1X¸?*üÛ­òù‰ «ÄõQÓ×3I²Æúˆ³÷ëÖˆ9B̰ÐÐ7³?ƒÐF[|½wÇ«muë …#{›,DÖ;õ¿î®Ì²ëN—“gf2w&þ æ¼°6çMî*÷ä2¤| %0ÊLÉ㣫_ö'¶ÂE[ïóÒûýOTUùË1ƒo-¾òùg½?<ûÚ£@©­ƒnŽ“ÄÆÆætïüF @J÷Vžkå”ùg‹P˜¿·!O ḚñžŒl»ÛÑmº– ©*®÷«Àë÷ÀU¦Üú¸Ô\¿-§¤0™M@Fvu!-ýƒT8ßÜOù™ÁæFÝs¾¿Bÿ‹sÔ¹Všò¦cÌ<õŒͦ<‚‰ÙÙ¬W ?ÃÄ–™y(_út1+ÃÊzx¥´%•¸[Çx©Qn7»õä÷H&¸m½Ÿ‰€—°NwÕX vo>$k#b“#Hk<+}|ÒÄpq=í>½9ß#’ô_;©Ð´Cä2d¥aafΛĹšñ®z_öd" '(ÎÄD`F~úÖÇ„¾Šãg­ÝDN·í‚©KÍôÏÔ}Ü©…»W¨Ä øñcv 2,Í»°+™8«’òó7{ J¿6‘ºå™4º9j;fÌÁ¯'¦§(9s¬ŠêçnN²Æ¯à·QT®O`NÀ°B‚šù\:6õ %’«ä\ˆ*Ê#$°+á¼Ô‹çÄt£@˜?oõôAÂåµ]ÛI½ãcµìVEÀíÕÖÕ𜯙”3¿3K;Á`™Iô0 „Ï Ëõ¬Í°xjÜõNÏ:`O¹ 9aÐÇ¢ž/z.’S¥á]ÛùžÅŠæOTÒµÇJ(2PŸ—"m¶3æ'Û>d6cÊVÿËñÉ0««›ÐaÑà´«…"¸[ƒmÿE <ÕD†ÝÞß÷bmtÙŠÝz;­ÝöùÇ'ó{ŸLþ˜µ˜æ\µqÌmMžÇ–S…̪_¿Ü3’ÒÇ )%4 ?‘@}þÅû1ÖNûCõô‰a‡’¬¦ò`’;Æÿº Ò”TЖÚTU¾ïŽDrÛC,ÒŽ!ï+3iµ¿®V&f`ÔEÉÃ9_.ñ·/»ý"Fõü‡†ˆho´u~<ó\¼OóLø÷· ÑNû³ Ý~&©v0,ÃÔ~ òÏ \òžéašHÿž¶Þ‚þö»ÞbÙªTŽÇþ8˜†%"®‚k]÷Î90‡ñOF¹Q]™WÝÚ'…Ía’È{ ËÚ¹ý³ã‡Sbó½l:¾!g;ž³æÖî€3¯H[á÷7 pãÔ4ømÙŽ·‡Kf½¥ÔVïþ½¼*-a¾]Ì?IREÏ¡W©Çû[Ï­J_ùjvÁ‚Z?ccR)Á»3I1£êtEw7•p’ÖLžù÷ü!Ðoxh3"ÓøÅ­èÍT•£³3ÿ•§.,4¼jº6!ÒéþöJbø’dm×ß©ï<°ÏìyÓ{‰dÞEÙÿœo¦ÕË—KPÅ ð{Ÿ““Ù$çCñÛæ›e"É?Áè{9¬WflöÙÂ}öq>‰Y‡YCƒ‡^þ,EÅ;ðƒ5”géØÁÁ=Ñò#[.á-û_`xñßy<޲z7"Þᘛ†{Ý·Vˆ\é`àõvA\ÒèqD/æ¾ÿ @¥RôÚ tüÛ²¿2Ççì ¤îíÙ„/)öÓþ¾v¥ ®H…¦¥]ì×sbrîC‡Žø¬¸Ê-ûñ>ƒ3±p$3’“äï/Wí?¸ÎÆ:h*B£žg}Né9ø­‚’_ÿQ.ŠQ=äÎw €#F‹¢B2õÑðbõ’õú±5üãÇvvyæ3h‡/42R^Ww|†Ÿ<òéð`'½¢â_g—ºZ~»¨(™±¢T Y/ãÞX&U?!†'aúÕŠã_«4Û˜à,¯¨†+‹]mtÆŸÀ•£ðñˆˆ #f§XZZ‚Êî©mßN.þlkñmÓRW•÷|^Eêèî®ç@oUEãw‰ÐŸÈÕ±#ÈÅO ÆdÔ\æK¶Öæ Òî,[ì©5æý@2 ïïSXNNΪ÷ºÙ ¼‹†ìPŸág{ú '}ò¿ã“ùøùs{•®ÝÒñº0¨7‰ÛÄk×Ò–ó;û‚ÿ©e´7É•οïFj6üEÇÉYÒv,_{ºB).`Ï)I˜,ÓkAËÏO0¥üýy%0í8Õ¯Ù5ÿ´.÷Œîµ™·å?x`³¿Z­Nu~Œèw%O™Ê\­õÎ8v–“ŸÏ .~cqô1}vlØ.©5Ó9}wÎÊ}ÙKþA¥oçöá0>[Ü—/¡é’ÞÀ¢´èüÓ‰¿-7Ãg¥$d[\{y] Ä®°ýìs>íÌËKÓ õí³Ô×ÉÉ"/y3kGC…?ã„ò‹ë!áP(G¨t:›—¡s,è`÷ÎyŒªã`#'¸½%Åêó†ù—ƒ¬\ôL«¿4´$&^)Z'ûƒ>Ïå5ˆtL²’Ý+¨µ™ Ý¸öKîøÖøxÂË›“[i+ò˜ô”ˆ5µÉÕÅ€ZžÖOÄÿ^ÑeS‚if-Ë•¤’{~´>̈_H¾Ïºoi8¼K¶²@† ò‘óú³Ó­?Šqþå¦maÆ·FáD T[ºUxß²Fw΀ö¹j\úò*5õÐåæ¼àúþfº3Gv®Å×HÆ »ÿ¦€"ãqÙN|‘Xɉ£§ïµŸûÒâ{cq¾;õ[åÞÄX®þÕóªŽYMüèdc¸X˜¬ïÏæh¶ÓñªÒ`™‰‹›Û‡¤$)ø­óm•3K_O¹’1;y®™óXQ¡>ÅçX‹}2¼)jZúXVffTèXö`Š0ð™º8—GŠmÃê^¬±™¶:m#o¨)'ó¸XðNàгռƅÍÏÏÛL×°é–†éÛ>Œ ßè#O·F 0@TRZOG‰ñ} 2˜ßb.YÈÌܺïaRJu¶ ëôŸZ'Ã>ňZÞ|þ•9Â_QQÑÃÓª]šltç!ïÇÀ,m”‡½¸WºlU2¹7  /(w* ‰­BN`X Kdç½$WWWŸF®­"û\ÒyÏÍ%H¨”·Þ¥’Ľtw³­ú›(3yòô)úï?r»eWº"¡>ñM×ÛÅ)o––——Ÿù}W" b±XóĈ9‡òGsté×Ç¥ƒƒè4qwåh\Ì ;Þ—˜‹mëºê½Ymæ¼æ -¾àç?ÇÄ¥‰3 êØRBâáŒD]´Æ$HÍ–”ž¤aò­ÏŸ“†S@ÓÂ÷¿pñE/ˆ—f†¸æ'h‹›™o¶¾=eP&vt­é‘4‘˜ùàc``Œìœý^öðöÎ~ñëChDįƃ,´WÇ%²..UÕÕª~éþ¬=Ùx1a—Â8ø1²ÀFËëëaf‚GEµ)Ò hhôýèŠ[+ÔUMÅÔ·}uø ·ÒûÂ^~¢‰H.ÿÏÏ_¿šN€y^goÂæôôA®™â!nH3aXrJ@èÓ@P£ë§OŸ~¦.65¿zG iN¾¸ñÒÀ½Uo!nî ­eÖúÆÒâÓ¦ê^ §s•neäç³@MMÏv& .‚šŸAz ^àâfj0±X®é#ÈäHB+¶É6GËèŒ[ÁÛ±,òƒ#ügÆ¿m “c£ÞžþQßVíz&æÁ“Ø1U—þõ;Òè©"Nï#ü9\fƒÊ¿V72ü©4€ Þ]W]Œ–Ä¢¿ù‡Æ£ÜÜ\¨:.n’éqù„•.q7ää‰e”a°ñr³ò!¹]èPÅíÝ]LbbÞõdzzzA5sVvö#ïó7"ââÅÔA5•¯Éå‡9îÈë˜òtÅñcø %ú‚E‚GH \?€Ÿ<슗X¼îÜmgï}mFY5ÚO7²³³c¾|)˜Þ 6-W^SS¨oª™?>ÉøøHÖØ|ÛžÌiŽ‰Ý øb×õXßßò_`‡îþSâò5àáȨ¨Ë@"ÿ¶¬µÇ¡EDFSÁ•'îÕ ¼àÕ±·çNä4Èéè‰apº>} 4f¡PÞÇhÐõ\£»%Çsucâ.›xjib/O¤¤dŠuÙÕzÂ×ÖÃû„èSC ñ8\D€NUM˜z«ê~tƒNóÜÝÖæ| Çkn¬Ú áÔ˜5ve¶DƒêËÄxí/€ )}O}ét½•é‚ßMiÖÆ“',ßPa06¶¨ÉàPèâ*íçĶ ×9VÈÓbÞÛ*¹3¥eWa7Q¶”dæ§á +ôê=%í×d»q?77§ñM*µ»\úH³¸´ô­¯ÞÊd€ŽÏ}«»C³%R"04t$Ð÷\éC’ Ÿ††GR7‚xY,§Å7÷#=–^Qü±s;üîÀ_'9‚KåéS™ÿC‡lxf†|HggÉÑûXgJ«¨~P^îá‰`ò£@„Ž#1u /ŠI:¬ƒæ è,Zöôr&mÒÍ9€IBŒ\ñ а0 k>!V$ͺ/7ÆÆˆ Rô8.[š yŸT1nmm…ÇÙÒÑ46*T½³‡¹|õ&–;ŒLŸ¥hÜâCöøñcý›˜Sýùù¶"9d3ì-§fo${û¾®/,?ˆÅU>x|w}ö „SæÄQäÚÖVX@̸Þáþþž}ð3ç`–|„ãÎ8—¼%6iæo«7m )Þ¨rçeÁ§j^üÿY·/yžÌ'“!Õ×5YõËÂÒr,ù3.n÷þ\#‘à©‹««<Ðã•ïÖ”ßÌ7‘å*'h:}°R‚š¬ÙsÊ[j—öQ˜P‡G eeB “©æÝÝ7MóÞ¤,‚mÛ0ù<*6ŒëÊNŸ[u*DiŸ7Út¤8´Y½écu¸–dƾ}y°· bxi¹3bs¼4%¼šAå´“Älñúl'¼‹TèÓœæ«/ùÿ÷9µ8Šìkümc#RqX¬¿Z~»\b¤ ¦êt²(’B¸ˆŸŽÃx“àä¦Kw77胬z—‡ò²/^ÃóƒÕkˆ©‡¥áÆ£¤€šdÚ¦ªÛòTAXãCyn; dwGQ ²Å•éኸ„ò¼×–ÈV`£±\îëÒ•úLÔè{#ÀFµìðèøø}k«4·q}À|Sÿ =4õþð–¬G²OÙu´¿~NH#â%… Jš]55µR—‹Hà —ÊPKCÑpQ-,»"ADSœ÷Ë\÷uÕ;.½7Fèí…|7œ¯ö*««ù›šš¯62,g¾¿eÕ+KÍ1ˆÍu\„µÜì‹w®4%bÆU"°¨#îŒ'ƒC†¤¼ÛzW$´fFÌ©ÿ|·SÆ©¡Áy=4Ö_]½ð[‚§Œ€™•fc%Zz<§!—‰ü‘òPº¤Ñ.;ºƒƒCÍë?¨GGG¤…5tH %%œØBب!3cib~~ìª}}‘4¸«ë_ÿŸ‡1²³cB‹U€¡Õp4çM§xl^agÖôú¸¹ A;ÆâÞHÂÔã¥Fz%΀ð¢Û­3|?4{_daîÔí A õÀ,v®,æ%£¨xÇt8ãÍ$´ö=Õumú*ˆ„†Û²1§{gIÄGßøL1'>—×­äØé•XNý·dÁ©:šyß‹9‹´›  'vÆKÀÒÌF@2Hûò…T§Eíö6à|/a¸{:7ñ Érßo4Ò)‰ññÁR¾×‹'ÃÒzÆC¤zzæóæ¿P3­”ÀØ 5¡>ÿiJG™+âýí±b ÙŽ—~þD ¦¦þ"áÉw~°m;V¤”Ng”ÔDæ½i¹žÄøßBög=PõDæ!±<½&@;«j Ò‹ Ù>om9vâ6kùôíÉÇéÕ G r€Zcxô¨rÄÄ8M M]]ýYª>Ș'ib®_™ ² jäbÝRM‰¨j~óî$ûÛ½yI'¤¨´ZªQì…a% fXhOTâ×€ðEÊ÷Çék55è`'…0b®Š Ž<²µõbõð_2;‚_„Þ~ 2øÜÇb9œ.ÙÓÓÃzx"!)9šù‰RÒ‹piiÉÑÅå¯Í«0À÷G]|ã_ÉÌý(Â~9¦ªÍšGKñoF¡5.›#СDêbCAóajó>¢_9 #ÏiYŸ¦UJ]o2¼™­×HûÉÙÀè‘Ã|âðÝŽ‹$o/D<·‹54ëîõ%p€ÄÒ«,P Ál»9(æe㨳Ù¼U—K +/•³:û¤ÀÐr{¬rº?G¡¤¤ô{¡;êÈÏš/Ú¡¥©9!Ú’—”j+íg|eþÊm¹à¤¤äÂ0@ÙRÃÚ ‡)ŸÛ£îÙ30ë¸P=©™ÿ]nŸÇÉz%ùîéëÅ1=$ÙÑ¡èÛ_hó´ òY7×Ùù1%•|/<‘kÛÅŠ…Oþl»%£€_×Ðð©_®¨A3uÙ@‚_qß»ŠQ€áõ¹tL‚ Ä„T>>¾‘R#a Ó ŽdeZ|uÈúlssBQC ×Ó1ð‰‚çTvGÓ|HøÝ~Ž]R÷ê¸íû[Î+–~^/ÃÛ“íO ©©ŸÍ™™‹ø3?¼{÷n¤ÁÙZw™ºì²c¬Hç !H­Õ××y‘hõ2j`hvçõŽ”ãñDÏ9Ye¸M.ž…ðúD2Ñ×¼™â ^œ®µ²Ê—Rú2òS\ymÆÚ²äòóÅVLþãܧJJÖ2‘ØTb„Ciý'·ß¶BÅ!Æ"áÎÔ)Ö}õ…Ê€>ègÀ.KvE‘¢îÜÏsÃmä­š4BÎŽ …n4<­·|Сÿÿ\Í"í¾it8"»N,yxÁäö„ÞEÔ‹Z&0EiߥŠ!þ«UÉŸJ yhI‹˜3 ¸¸8ùÕÓÄ.`RÀЯ² ³µ<ßA )JÕùÊöEza¶š6+ëßrÏ"· Öz&Ah˜@y¶§—ÓÍnD¬ÿ{ó·¼+}êî|©i÷¿§›4ºMÖÚ‘°ë– e>”ST\i¾˜ÿP“ú¦8O¯³í¨‘nºm‚âgÕžÁÁΑoO*˜ë*11Ò^ž¬ÎU ^¸àì¸ÉãjvžþÝŠe@ DŒŽ~õ+Ù'O n¥o8OYIàVTà— tTš€ÅúÄÊl½Ó“æÇ:.gÛ:Á>H}¿twv~ru¼†OF–«’ôîH=ºwh¨kñgŽÉmc=Lúýò²@(gìj‹%&X0&=ûh¼³$=aå-×ìP7“g…•.bæ³"æ R™ 8…ßBµµ²+¼×óæ¿ä«g|ÈÈ Y^Y£ÐFyýúõæd%ƒ&Íkþ} ¡>Æ3nòÀ§sá]Ùíy˜›—GÏȈ !•ë¬AuÀx©Õï¢Ûc,^GZÚ«c*úØ(²õA¸<17§z3I+©»õ[Æ*Çf}u—S’2¦È°N·•P”ŽС_hT”®»96êéîÈw^RlÇÿI*Û1ö“FbàÈ×Óé ¾ää0BÝÄÝvŸ»ÎVðÆp~צFÒ f`eTò{è¹OíÆKCì´õ›i«Òð;r%þ…Añã €º]÷q÷ýLç! Ó~ ¥˜yùºÔ$¸`|ûöm=Ü “ßz¨mx ´–«±´´ùOD5ì)ÂHsH¶$« <åûrñÒÿ†ZÝ.­›o¯wZ¹›3ú€Ïð…tt ¬gzðË7?z¨¸§9Jqæ¼^,¸îŒ¿¸¿½‚Î2O=ú…+m~²>Èjò£Æ`ýIâ[@¹û ÚdZ |n\æå$*œfN·Q¬¬ Äí{ceª_mG)É]A‹oœ] 4 ;¶ÖŸ¤½¶Â0¤Ê£OûU  ͼ3ÓÓÙµ[<ò‹¨3³×éfàÍÅA±¸ÔÝZäç'@@@€ºA‚T7dÆÚXlÿ-DÇÁéêB›ªÑJÉ|F(¹Bñd=,×6ãÊÝ »b!3FÒ0ÄKù~²`º âÔ%°Ágþ¿Z€“õ¶JËåûWôF++ ÄìêÒ¥÷“)ÂÊËyÔÒ% ï=ë=O˜ÅÜ÷±YXX 3“?\9ú¹Š•ÞTq³±±A‡t¥nŸŒ•?wv'‘´ø* áª_l.€¸´”µ8"#F5Ò(üüÛû+5~B„UÝ×××.~Ð4š­ßQs Sˆ|ÈÿgLb¦´ `·×Ï c¯-»»»ML€`Ðñ?dúVôîcšÛ:꣒ò!d"ke•³m).þûâû[šéåܘ¤7b†½µ¿¦©¤¨%Æý¿'_Õí$ÈÉÉ=^[cRÎÞÖ»ø!@¯¢SœX€Ìj yWÉÏÏÿèE;òéÖ4ȾI·Á?‘ bB­²ä°r¡ð 'Tà4®Çƒ ÑZ>¨¡ùœñ¾ú¿Ä䬌#ïáýͶðw…|¦¿Û”ôDè‰üÐBK4µäᘞYá|Ζ’½}[ª(p‹ÐúvL§Ý8ödåÓ‡0tH!O5Å$ÑñûÏ&âÎëØÓßßFÄ0(*ï­l¢ûÀ%y½jÀuµã H¯×H<õ%¡}ÀÆW% ëñ&Oj¾éðÿªRŒôRÍ(¥M=–$‹< =!¯†V–xr±?óù3-ÞT C æ@²òpEE`U¼!;ô‡³pwŽî²i ¥æ0z:)'yRS[àiŒB9£¹uæõ,MŒZã™æÜý†€0©ÓTVÀIaÄK.𙂅ï!…PÈ®p`~öä½q M%$ýSS)_;ùø”u.Ð/¿ =ÈŽþÛº| Á¤‚øâE@]]©œ¶ ðë1aaaÐQ¨DTUù~cM·Œ Æê h »¹èoç””¤‚úƒÌ EßZ@êùÞÑÕÕ¾°@ÓìuÖNãK'¨ÛÞ¶?'“¯¦ùK?~¬8˜+à×ǵ.6 Ùø»$V:áøDT@S1vµ; Ä ¥˜ËS¯rÁ€?$…ÈXêðæxv¦¡ëó]6éq`Ôñˆ‰Q¥¥¥wgêÔýdªl100 [Ò}Ï v§kU¼š®ÏäužEÿ~b<ðÌI¢Ìßq^²¡²/‘¨Ž5ž› z.x^;Ø€ì0¡ŒR£:`næ©B#| 5*¶ýý¶®Y+uÄNTxP#~0…‚ ÷q%*ššMýï\ÿ–›Ñpè–<~¥z GF‹0²°‹¥î£Og¹/jôª’]ÕÔ/Y.— ˆFspo¦î‘yìY†”ÉuJ¯%jÅ‹ ÉAƬegGXž =C­·Fô§OrÄ\xxx™JZÏ«Þôöö~xý0Ýk›m ™-99ù·å¶K[GØô½¿ƒ=>¾ÌÎx[oܱåX ÛÐí *5}?dÞ —Û‘)g×x'Óè”’WXG{þ±Øˆí †ý[vÉ5((`….–€ó¥H¦‰y°UÐIPÛ¿ÉüÖô’’&qõÔÔmE:ô»›JO«øÓŠ<çìašK½üâuð8¦§wUÚ# =j0¾3¤|OÖU· )»Ò -½õ-tW9[‚ö7º@± ½FYc;†‰?²s6­ à¾;ùêÄõΚvú„=h1QŽK)kºÌzE7¸}øÂén£HgºÃnJóvJLô5Atè3h 3Z‡–"ãÿœ’Â!˜Gp¸ô±-Oõ «cDt´>§ÏId½Á•ÊÊJt,¬' D¡«Ðfœg0> ˆŠŠê7ºq‰ûà£ÅTÕ˯,^pª38,"Ì÷þt'p¯ˆŠ#™ü€}û¶¬o ä—ü0F)ŠF: ¨1»ß¹ ²(æ7nÀë´ã½^Óë´(t²Ü³4ð •’²ëûÝ]Ó±³+ß(}f/3kc¼\˜Ÿm àQQ•^Q65qÈGÈ]µ–ª¨'¼#`†MM¯$ðàbÓ<¨yÍ MŒ_Tþ[›6{T·Jú{ 66§É™OÐ4Žx$ ñ%³^<¥ó9aœ¯ªªªpÛ3DFFÎTŠc†.Š­É@'RQP@õ»=RDFCËBDZ,³¿Þjî´Å 'ÔyêÝy.å{ÿ{ƒÕ”ðNÿ«ãéŽlÿûÔE;ᜂ‚D¿>âvß´Fl)¬¤v{=_‰T ¯aËJß÷ñãGV¦¨(ÔíqÁ µ4± 3*"ퟀô¢¡Š{AÁ1‚¬nRlÔ]èX‹b”\g8”#@·«Æß//Ñ}½•—Ÿê&ò÷j.øŒ…³ŸýL3<ˆ³ùmsJ+Nãú"åf°ÂÓö_6håDðoË4 ~Q•qååä7XÈ‘ÕÒ±}îÍó\©°Q‘ Å‚»›‹•Háy¨Z’èÀ6]^^~±ÖtS.Ÿ€,ðåV~0¨ÀL}õV†u”ÁݦºÛi`÷—H[L19dØ-ކwÜ×–oÿ• Ù‚°,©ø s¦–@µ‡]/‘:<4üç‚Ëc'•¶ÍѬšéTj €e{Óµ@º†?©¬2“Æ,¾ÖÀ§1‰‰ ƒô¿>àL6yòkjjHæ¶‚/HŸ]€O ŸU¤!”7!ÚœeüœÐc\ß[º–£7‚¸}ƒ‹ Ç¡ùŒXÈ~–U2Q ­éœüðjƒ“±ÊÊϯm4;ëábn‡äÊzbBBÔÁ\~pè Þc´P‹Åeû/°p‡ÇÇ|'Ø¥ 6+^öËÉËÓ‰‰‘@¢ù·¥‹˜ÓÁíî”ÌTÕzz¤PUU€û<Âú üåÉ)áÚ½º4ÐÞnè]¶ÚC° ãçÜÆõ´ÐÉÀÂx”œ 2 Ûz1H¥©7gHE0{ôÌÌ]ì_9tË=„¨/†Ñí¯XH(5”DÉíª./Ή#Ûééë/Yª„q ’x"¶3ÆK%ª´×ú‘hüÐCíîvŽü7ñFšÜ"àyªø ПgÃ=õ €"ÎëŸNõq(ÑpÃù?ÉYµwp¯,ý’qÀ{ؾ¿Ìø·i ɸóY²…ÿÆ-‚SäúlƒÌÌ÷6ˆ,~„§SIzWáóÄ4/áÃèÅcÓÒ" µòm á{uY©q¡›ß62H¤Õ2ˆyH^[I§¦Œ<ר¦!µYèÍL¤{`æ?ÆlºÖ'“!%³õ{ºƒ¾¿ü˜Óݵëéî”V\gkc£È þÏNiüµr è–†F'‰L-çáP«bc²/"øõ.JÆS Õ¾<÷ÙY¯kŒno®Ÿ||w¤n5¬ £I©à¬»=îç®WØ]Ñ©[ž.Ò8Y_ …ÃìlÇQ@‹o`½ˆù–æb7Mç«´»{¦·»Ñxÿâ¦Í>Yr†)î³ €¨¤ØÇ+žÐbƒëN_ôË Ù1©rò€%bpþìœAüj8½´×ìS*ÂÉ’©éï'ø1‘¶óÆ·_$)BùTå´´%ùÙ ¡-JÃñs÷în¤¤ÖÓcÖž>…¡bÃPŽ0›~•)7½u‘C%Äþè>Ô5ؘœîwÎH¯`]ÑI€‚vƒƒ~I7#¾Fr fZ™ùŽðúõz:ÕZ稆@åΔ–À—bÍÎYþ*‰ ¤_Üú¢×a5v,~"‡#<øwhb<`Ùõéñ»wU§ú®Û¡± j€^¦_Ûbs‹¹¹€º ûÞÈÉš’J tép^?‘ 1«.¾ §ç×:•4øvùê2”ñY$94•;?¡#"hG¼>˜’¯Ôëßê—5EÓö”ÃÞ>ËÀ<_-‹oñÒiô);æd5ZOï£ ì·f{Óð[atldåxÞ‹Oœ3…Zôž®ç%BGÛh?\- Léû( W^«ýË#Ë ÷Ó­ÊÔ4ù•¬0èû’²Fªr/9Ñ;nD=EÞDSD::ZOÿöè—Ýã››ÿRC0Üg¡¡0S_¢§êI4ý½JŒ/}|÷n^¡Ð³“B …JF£»Tq _é•?(1ÅHN£2žýlø-"ìs*öîîîGNGgØþŽv…˜«ÜAˆÛ^ÀF:AkÞrÔ¢š³¯¾…ð½ ò PN¨ S”‡v29^ M˜1'ëL æ ¼\B›§y&7þÍXÔéÌ šzyBT´-KæÍ®´t5JUÕ€¸ºs‘öV{x"Wç¾ÓÕ1ÀCWñwr.W­.JŒC4iDäæþ7ø@3Ä$(+)ý#t8ãЪ½¶Šü‰Æ§M­]Ϊ95-Ð:_¸^šþä¡Tünê{Ÿóý¦)ÍZ™Z[™ ÔeÅ_–7"åÆ ÙªÞîJ¤ž2 ì7—§Æ'Bä»  ª‘°ñ7©-b}á³/ Ok­?"Ö_×OÃ邌•<´p½Íás>e=bW!¨SË]úü10åôËËô? 'Ê3à·gIO‘Y„íC3´´:£ÅÝjކ_¿^~vù„Œ,ëxQ#**šç÷ÜOÛŒÑîooïSS‹J³–&ýÃ$G‘Co²²~Õ6ÆOYËó+Ü ³Ðk¡Å$ð’b{lå& °]ù³>ÒHå0n"µV]!'§ûíÁQÐnœ)®Ï%0€æ¼=Ñû\L5ÃC x%U¬˜())Ÿ÷a´´ / ¾z¦/~)x·_ØÅ†ðb¯êOêløv¦==ýžÕ«pÛzÓæ€x«# ÉÀÇA™´£ í‰/­¾@ûÞA0v<þϧŒÙøúߟgá¿ØŸÂÃÇïu¿—8Ì€‡ÚŠp™úÛN ‚lñ¸~}U9Ðkƒü€ÙmïâY ÖÿmJ1 ;„sDË>é4x žiDˆPc‹B)Í tÒHKs½N[¿ŠŸ„sßêx)Òw‡‰¼hD|ŒîÒè;,’iÁ¯x° ?†XSKÃBŸÆwÍÜ€oOäeòãh†S툅±ÓD-÷“ñ¦h u¡Jï ¹B @K Îëé8à?åëŽBà2Bäе!(Œ4ºÖªLôv9YËG¢Â‘Ä^ƒµ¬U$ŠÆ@î ¼Å|ö•Qù&44´$l} ëò ¡Î-G0’‹u¸”խǺ•@x n9*ÈA0š7БÇBv´/¢Z»©”bVÿFŠhÐÌa®‰€Ù¦Z†Kï©¥Í?Nçþ¾‡XðVjF>aðÆ»ÁãêÄ⬠ŠáÎñ`&m‡©3 øÍO^½]|ËN 'b·!Ÿ:L̉— —³òƒˆ#íÁæÁááwÞOÚ¡+Á׈·ÇnNa¡¡áíæxLp„¶³ˆ™›½#Z£MŒW»ùë´òåª[ã =AW¢ÙŽõbÉXY‚¯¯"K›t"•4¼-É©IÖíw°jõÖ’mm]•–õiüíÆjO´^CUA¸Ý¬>ø ~R¹øõÙñýW1ª®(ªˆ—ý‰?ÿüÑRã§€È/íèø¡8."“² …÷ža¦©¤‘ ˆmnq7À'Õ§——×/—»¼†æÃK¬Â§Áæ’%")‰„˜Ë0øðÐQDL¬KÎ*z?-×ðâßÚ=\ⓘˆÖD¨ÈÉåL iå…Õä0þ ä$Ó‡þS¿ÄκpbV[} L?£o¹3^º9][ÜD+'ô äƒøú:³©²©Ÿ Ãøïó=l]³ÆÐ÷ÆÜ5xÙÌ_n2hdq•Å*“&vliðž€%€I% Ñ}­:¡öýí T*æù8ô %À½àí±Î2Ÿ›óéýç9ùHqÌ¥FHÝQ¯I’BCwû¯ÏdNÖÛ~[ŠŠ„¶ª£á¢65¯uó 7›Î¦W¼j:¹ŠŠ‚š³@¥@œö`ÈZ±üSêqq/È!êÌL:9-S¯*Å <û÷¦{}=€óÑ®Ocù=@yyó÷çƒùªƒ4¿K„ÐÈ’líBM¨¿´µ&2ù‹†=Æê–>«[»€–œ(䃭·¼†Z”ȃ‘úGÞuPôô¥Ir\Ïú\åB K´Á7ûða‡'\O²’lþó|o樋§KÖʼf–ÿèVà „@uéÒ·»$þþæ=x ¨Ð[†‡âu÷«¥ÅB”*@äs$ß6gâ'¡‚GÁqÿéÏïÕN¨šj`±=VÜ~ð#ôƒ> œØäȧ{bdv6ȉ\Hä‚7„ è^¾÷5oƒi|ÈHç–6ª~`™4%Qxû‹ ø’VÏê&Ô555àλ'Ìüqܽ{ ð^÷ôÎÐÒ÷_ ðËìMËhÇÏ:û©+?#ܪš¥H{”[ß ‰A1àþnÍôñEÉe&µ’ÜÖjllmÛcmƒ)ÇñlZ¨XÄœmÎÃ’,<è1i–(0|¢°ÆÆM¬Ãß*Y|2*FßCmB°ä]aøø£OxݹoO¦9ïMŒÒ%;q½ ná÷â61³þ &+7Ô¸ïá­šð\5*óÒ£¬Ü—üóî:!)˜/H™¯);e¿ç„–Ä®Ïv Ç‚m`#Z[Cx/ørr7mœ’NâÙ¦›v,¾œ®Uáì¨{û‡ÙôO^G9ìe4ÏÀç ÚuIŒ¹—••AmÈ_ ~EÖXôqèæ#š{ÙuF‹¹>4ù\ƒàs³yè³ú/vnO½b ã5[Xk3èè}Nˆáè}8aÖ¶Ü ùØB»Ì˜ jE€€´ŠB—åÿ‚@F³Cÿ©r}ÅËÎÆ&k’ÀÖˆf Y&»q,ÒÒN&KÝ4@3Ow2Ò2iDŦDß](Wm*Ò œoÔÌ­ ³ÆPË@¥gXÓºººZÚF~ªêåUÙ´ûäÏÏJ@éÄsã`“Ñ“£üøaK¢WŽÖr«ÿjò4²¿Ç»"—Ñ¿èFø›™-®%íY9ð†¾ƒ»î¬rAû÷P} ÿ->À¶‚àPÌ`G4#ÕÐjÞ`ü-å²J—,6Ùr¦MF#ïjPxÙþ˜,¿ää¶Ž0ú©b}ø_­éŽjä­-‹%žbuuõtIŠoß¾¿ÇÓøüˆ\ÑÉ9êõÐù>>5‘Ín¥õ|¼ô²3õÛZ.=2U)öˆáµvHÙ SËÒ4Œ«9œÌŠu¹ÞÌ7%GøÓcA'I”´€ƒÉX¨Êýîä0ÜÞðÏÉ4ИºòH‘ãrð­þƒ27çm‹?ÏÇÔ×;0o:u«‘‘¡Vxf­-µ­ )Öjœ§­ŸÇÎ,±Õ•`¯{™ÈÌSÀL<‚D¤OßÑH|¦)·R:r×¾9_fM‘ÙéÔhÆ¡H¥}äèàY“Jb›âÎ;ú>Èç„‘ «Ü‰•˜íæð‰ùlúûØwÀ”fo8G²P*,B„ŽÈ…™àcE¯ †ζârš`RŠ1ò|ν~ïüñ㯟ý8ô*íåO骮~ æy ]˜õv÷ )D™¿i9Tf&åä´y³5´í®®Hxú¢7€ߢ¿«oè¶f+3!ظƒ_>1ýô‡b@Ô¤s …Ž>ªWûZ¬O*¦ÝäÓPoC"üÓSÙ$=ž7‚éˆom½GüáJ0fÈwî_`,jQºÊC ·ûX6šFÏÀ­€|ŠoŠô…þúˆ»2Ûà,â/QfÜ€ØljVâÄÇÏ“œæ]âhii ?ó„ªkª‡¥ ›’MLèÝ–ÊÏýÈ"7Ÿà^<|qÄ—"îÞ¡¡‡AŒàºmCÚ3¾¶ £ñÇ~–Âì®qý9Ÿe$ûã/Íp¢ÐÛXï½Òˆ,¨6¥ÈsS<úذ,ÄœÜÜðû;ÇEX¥è{­|5"ïÊòGPg¸‰r4-â™Yc“ÀLZ œ OþÏ©%&»’Þ 4>°¦³Dß=J|ü½m@™{öf…:X›cý÷äMó-8·—Ù³­<:EÁòÄßÀ_b´AþK¶Û,$ó_îÕ-@^q©'†¡§˜ñš{7ø½¯³úcç±bGh`­wÌ?Èìè$©¾(5=ã2Å®yS¨ pÕ¨Ê>MD×õ¢ìì4ºµañL.<*;Ù(1ðÌóÑtÍk×YÍÿW „‚EœI™²†g È ëÙ'‹Tèèì¤ãã{˜"ìâ%«!_NÝÑ9Ýß”'ô!NNÍ»Ûúú²ÃAaùn[aá= |ƒâOØ1rwвC+ùNy™ª„Ê ÞÐWáÞç=’ÜÝ'÷r߯©2ùþK]ú.x0Ex¨ÃõôD¯ŽÛF¾µUZfÅhë& 9y™¯?«Œ«u¤©ÌÜV2:UÝÁƒ˜¯nGPîç›éíd HzI“~Û »ÏQ' T Å?øŽ2 CXLL ¤À¢¨Ä_ío}ÆpÓˆ2«+«g£•2mœLâFHCBEp^Ÿ\HД“ ƒ– t8Õ^:¿{¸çë»W¾*͆¡ßl(Pž Èør¿ñ`$ó1„/ÎÏ`ŸMDœ×±»ªpZéj-_fØYßÃ9=ÀMEº½å?\ rŠT0Ÿâ3ï~`>/‘©Nóvù!¾A•÷E{±ø`Sï&†ìûQ`©l_WúÞh¬DC;¦LÊñŸI‚CÞƒ13PÈÆ÷>ßýy{u‚OEõ|ã°Òß29yÏÙVU͇#u  ++Û~ç œËCµˆàË5òÕ¨ÀäöX@ÛB…šL1È›•\ÂÇ•_å¥þ£V„DEΊH­Ellä‡kÝ'‡xÍ(ïß×ÜIÙcœzÑòi Üô&@-v––– ëY%$$V‘éè#,­ÔÂzÒEDBW`8ðŒæ›ÑUÊÒ÷iV¿ iOçÃð s8tb²èåÙ²~cìþ651_˜C9½(ÓpßÒ ?}ˆÎ„ö7³ 3+3ëaQÀVàg…õ‹n§|žëüq Òµ*±³Š±~C ^ÛÌÊç½Ò×Û6£ˆ°ýï°Þ FpãE¹sžî ÑøZ©5ai'À-:Â6”ígp(72Î:Y5²O6†óUS„®ß£ÓÇîÂðd ½˜”ÛÚ€²“Ú$¦Rê×'ñ˜;»ò:?‡«q€ [ÞØ¿¡ f-8u!åGM÷~Pfò‡†G„û¹Ñ}sóY·3“¥ŒC· þãt{,¢Ô¨N°’ïã`vö=#,ºÐím-P6µâmœIÜ?Ux MÇ­‡¿’è¡ÓÛubÚLFQŽÒ>¬}NÅÛÆo— H+‚ä×hö5dV>€‘ƒJ– ·³òïíÖÊ¿m¹å‹ç|m¿»7óÍÞ$4j\oÉn7æ+æÝM1cîÐÛÍVvÝgig3ã³r%ÅO•ÝtÂ^˜PûžjÄÆÆÚüÎ k¡•E¯£Ç€Ñw“}ÀÕþö*]\U%(Œ`©²ûTê_6´‰R 9’â×WÁõŽb=õ·WÙ›B» ¸vEbX?°Iy¾|!moo?EÁ—­§R‚¡Ó!/®d?„ýúàx½ 0´Íß§LH||‘\Á‡o„(R1¸ŒÚîW®.e6†Šˆ#X¨å‡{Îv^LpŸ9”edÐüÉW߀ªíº»Õñè‚gb‘ðdg³]^“JèÏe^_%æP¡B+0£‰Œà>4Nâyr±ÏëVÂ.—oT¨ÉkÊνÆm€‚¥(oÒ—Ä3œÈeäqµq½§ ôž4ž…cËŸúÞŠÔ8”G1æä}¥0B_ûöâÉÓ§¼,¦rÁÓ/t~ÔˆN˜ýúë5ÃöÝn"*MÜý!>þ7žP¼ö=(騳<œ<Žä¨BDŒ°«þ™%ÿ<ÿÁ›ù7¦ÆtrKîÜÏ’©ÄÛ‡¥w¢76К½GSÛÞ´æ÷öjÌÜ ¿ý]×ßnQÉkû—U·Dÿq¥Eç)2¾,!¹®µ:øiczvÂzç|Ñ·•~®û”©Ê2ÉHšÝJè/:Ô¥ Ùá4>æjMÇkcË­NÎË _k&ëñÕÒ~“0ˆˆ|Ùú“ÿ§ÖN  p(ýB}ÐèªW\_|Ì’Œ¤"@ªµ+6Aø®€A‡Y÷væo¢51|ðëÏÌÇé—ÒîjͯvŒoõÊMÓ./= n±èvéÅaÁtß%t<}MÑݵª™?QãÜœn߉Юw4û™Œ¡èW+Ìi½T3¦ öîï ˜0 šªT¢EEùY=\4¡¬îºŠÞÑ]¼\öC⨃`à«`ÄçÏx ìÁ«Þì.±T0z=¡® iYzW¿ó=m;þ½™üôeyÅâê&Yô#^66`8¾¾ZnµÕ°îLŸšÂ#É·­Û4¼õööæ÷»õHä6Q~ú44¶}­÷®WJ "Ž¢”¹(ªŸ¶Ë~EâîæËr ¥à³ú\à EKašùJ'&‘Ô¼ÅBB{Ÿ_¦ä0|ˆáãi'«i“‡^™U{0†>'±o Ó¯P–·Ãlæ k늞ÿœüˆ[œïmÙÕ¶7³ÞE,[Ÿ'îþ×N6CÊqåý‡|D{?O1røYÿËÇTƒ×[,¾Úýšjñ–¾¯‡Ò2šVÌKËËû94ý«ÐÛ>†h ¨’” <½3‚¤{b" Xp¨ñ“¦¦¦ˆ×)+Ô"»;ŠÊù¼&õÅ ^^Ÿ#”ÝÉoCs_éÄÞ¨> ÁúöÍy“Îxx4û° È.ÓZh鞨ˆˆ³ÃP½ß›9£îõÚoØ€ÚŒ£®úÛÐÿz Â[<$$äh€ººó½¤a÷Ž[·„XàéßÏ7{#9^Ÿ¾Nä1úáºóTUUÐnº™KàuæéÛ… ¾Ö¦»q,ß´XHyayêGžŸX`Ñ¥:tb’ŠjÖ¦ÿ´ÕQÌø*/æi¶Ác¥DÊ×QM×+oeò"[_bÒ¨K —EÿG“]mŽÞÈðOaPÔTþ1ŠŠœ\ÙÅEp=Ô9˸ÅgêÛ ÖîGÛ1àšC¾Ýo¶£Ô’††^ –«ÒóvçgqÁóÕSxèŒ23YšµÒM'¤;f8ÂÄÇ ´;>1q(–½ÙŠtÔmÝÝ¿=ùøn± áþjØ_ÌçÈ¿\èíôç/_žžmÕvâ àÁæ‹é ^9ôGGë5"¼ N¥t¶Ä¢;­œú{àº3¾Îyw»Ø°‘©ˆ;lr;ó¦Â_ºÄ ÛýH «#žà·šVRS{Õϖ׌ġHG£X—KkãD§0Ëõ»}©á«äµ.RqbjÊø<”-’Ü&ïóÓ5['~x .‹Ž­åü·pýïñåY},KÆÓþÞ@*qó_ñºÐ#ª7óD(ÃMø‚~¶ýØ¥¦ˆŠ.xdg]UÇž›´xþöî(œH«œëíÌ×+Aa‡v?ƒ®-9t?çó<¶Ú:dvÄ8VfĬ­¨à²Ÿ}šÄm’*™€xtvv77ëzמ—Wĵ؟ôk­ÿëûPÄBm%U{ .ÝŒ_¿æu¢¯yÍÐKGçr}ëlóy¼LÅ´Ùk[0W]QµõXL~†ßo’lðO¡vÛ›†PÏ (;ÖÛ±"y0ÕøøøCéátVù¹Æ·þT8Ò1²¿iÔ/eGà}CÏã`¿«.¥¡ÓâŸM/+;ˆÊo-[¬ë¸|ï!%çºÜ:(—NçwyÊÔäúý±ïù”5€„$ñktº`~ Ó•K k-vÆKµY‘£E¾ ;DÁý÷Çôý_¾,Dnkòt<ÎÁ@oIàÆ–.¿vIaƒd¦Ç*þdãÄì¤,¡Bë-â\ã¯ÉÊëë…bm6R1¤•ðÒúW"WÑydÙŠ*à­Þ8~÷}cD$¤3 ãБh1ÓtK +½Î¶eµl ösžL E¿A“HoåYQOÚ`^‘öpF¹á…è¯0‚‘oAì„'yÎë´Á3$äBÁÁÈÎËòrsOì5áº)vÚK3¿>ƒ¥SD¸3Qný·@2XÁì…¨Špët.@ÉÎÇ÷0 «í]f|Xe4eàTõRBOï£G—ƒƒ)o’•»fVf&ßlϾIãؙm@_RÛŸaÓÊÔbqWó—ð÷ßÃò:}>—œ #ØvÝiGñ}D.`ò”ôM Ák_ƒD°ðs@°(D¤@‡@=Xu¸p~þÍXÃàí¦À‡7µÏǦª‡Ò{Ò¤q%½‹ÞHÃww§Ð—¦ýnñ§kƒ µ·J4Zš¦ Oz®-øRp¤.aºåã)T¼æÿ:çv?Á ÉrËHÖ TmDX&cá%Œ÷ä~¿›fÌBà‘f{òÒá‹»¢OáÑzŸä#þ¼¹øn¯" };ñеŽêhÑñ1ß~ÌìNeÔö‚©[ðKÙÜÜ”­;yŽ®áñßçSSC¼ê°ÁñÁ€½Wýª¢µ,a%FM{*âò”‹rÀÃÐæïÙÎök˙_ª­‚ízzYþ%¾åÐ;íÆÂ|€´X˜?ð–l;¼ÌXcã®õN×ìÈ÷‡*­~wqBÇ!LŽAGKÐØvá™JDz’}!à¤VX¸ýìú« -+åÆÉ°N‚­»wÖýO´m¥x¶"ç¼tv&À'Ô®$Ëtq> žv¿síŽhX¤†õCÀa>µ£C.Ÿp“H=zR «ŽrÂýÍ-]îäï¯Ü¨Ô”œuvdÜ= ÷¶ÕRöfÒ$#Þ7:+¦9G}Òæ“ 'ÉÁð¹Ê½×75µÝŒà‘}zïQÆÉ¢ØŒ[j”¿=¾É„Åx¹|Æ» O¶žðÔóû÷ïa"Ÿ»'\‰0nÑ‹=ÕZûú4…MKj1£ps›}ˆ¤ÀR¬ aPüK0òÈ2'2ç»Îþg[àáo•õ¿{¬†„¦~L0ÎW:Á®¯_˜½«j¡"yüø1 ò€ÍM›ÝâtÀø/ÿ=ðöö6 ‰ l#\¤5õ$‹CïïŸòR£1œäžÖOØ®©²qÕ/­‹¹FpÈÛÊL†Ò#ñ®)%1S~õ%Il¤÷öª\»7Õ£l÷ÖS'øtUéõ};³9ßÜi‹ÿ=ÉÇwìäö Àîª)îðQå˜h§™Fµõ¯@¤}÷¨9ƒyš2S×sÎSWÌtYI*ÁlÒ¯x¯ +e©@“vÕÙ– Ú3”úä ¼§¨Û¢¯”¯ÞsrêÃÂÂ3(?Ô+*|(º<`ã6ÕÆÊÛŸ[ê¦I“¤ Ã\_|ݺúþE³õöÄÇd~,ÅÑ'Kdo„ÎøgòpR¥J¥Ó3h$.(O7Z^鸺¾heŽw½Ÿ™(Ъ¯sß/òZV$&þQ»jN^Þý9Ñá1j -"#ÑÄ~>‡"S—kó7J8¿'"÷úµëeíŒè;2cQàÄ”÷¦k1°° _=0ð H¯ÎB­üËóQ—ÍEåÔ-H#ëJÊû^˜èL>C×sÝŠ-²<º¿YïàÐ{àuöþ!0[Û¨4¹4]¿§ø^oå_M´ÞË››gB‘µd 8x¹w'ëƒ ÷~—¨¡¼¼yü ¹9mÉü#eTvy^ÞYÍÞ:¹>ÙMMM6 -’Í^g}µÏuŠuKa®©VóÍ%Õœ7†È2Óøæ|‰¦Áý“×§¶äå¶÷žÄ,‹d l¢$™=uËd„Ó.6Ãñ²¢…ôôåsé­´ËCîOØq} ùFÊ Ï¦êwÌů%©$îCúÃ5(œ(M‚.n®aÁÇÒ'U‘Ú3~•ÿ¦œÀ~ÕÂÌÊ h4W…ÄÂÒÒ Ê Ã} À"1¢„34JWø:‚¤å3ÞPbŽCBy«ýFB›ŒÇ¹A­ŠrÁDïÿ{ùp}0ûˇÁX1ȼŒåÊÙšaù].}¼‘zUcÓt"ÀAÂüÛ6Æaœz…¹úa/K×÷*/OO¨7Péz‹ô:¦¦¦Ðr_"—Ñq]ë]dœÅë? 2ý‰EÓWâ2OC«­%Æp¥eZý+c²8Ü 4åÓ.x4;ì¹Jl¦_×=И˜Ë:þ°æ'_OxåI(æ¹ÙeD7ÛFÀ²3™„Ú= ŽØ6àüY1ªmwj;Õú…ÿ‚Šºðøù0 áy $T‘YW Ö¡›|MrZõÕp"ãqŸ7 õîì*b‡–@››2ßé˜É÷ÏàmcÜÚË­ÖÃéжqxú÷»gèKGÿ¨ãòödøàfR/ feåJ±Â¢Óë|÷5m¸ïþ¬×Ѽ7®ßUgMEž¸WÍ"¾¯Ï¥?ü>ZõRåãPïÂBÆ„™ÿÜÒ ¹Ó:¶Ë~‰W)ÉzÚ’Øÿ¯H'®~k4\ò®|àÙd=~lì)UÃáÙÙËí¿ÿŸîþ:ªª¨mF7%HˆH‹ˆ€„Ò ¡¨Hç¤C:éTJI¥»»»»$%7ÝݽÏ\ú<ï9ï8cœq~ß8ÿ|Ç1À-¸ÖšóŽë¾®{εVô–.777~(d¼º¦™™éè|€ö™9Ýÿ2Wûõ³Çá™3Hø ‹glý@$y?â0~ø]?ÒU&/þî=œz[=‘ÀûW“EºwIHÖ+»¦[€vs»Z¤±)²ºzñB¦¦|’ˆÊ“á’a,Ý­'U;Y¦ÝŠ•©6y§›Ž\\“uy4lK{)É+û¿ µÙÇO\Tô\Ó݉dN4Àeúg¯b{ˆ8- }¡·ó ¢Éîî¨sÛ® ø,vHÞ6ò$‹eó´ dˆÍ–çMãÀ@ÑpúŸÝu á²2¾}ÀQ)B}L3ŸSpÔQ¬2ÚN¬±Mç **›'Ä¢xïÇ}0é¡ÊϺÓ J+âˆØØ«Æ K”×·Úñ0¬¦®þ$¿óC\Ï€igf>³Ýí[ 4§*vÉW÷ÍÑî{¿39Ct´®¤²„‰,<[z±ºØs'ZÚ×uŽÙºîý®sÍlÓµYØ×uGÁ³‡+ Џ®$Ñ\˜~lNEÕX1x'»>e&£û8ê§» -èáÙ¡ÍôôŸ™>|°ŸëÆ 4¡>EonQy Ï’óÍQ*1xÙÎdbùà<"Õz5;æÛäçõwÇÀó—¶[Êò9¶kƒ_E(]FJíO>@-äÑ{ª4m÷½ ."˜Vfè#¤È/¿Rê4¹ óéüO»×ÅKóúêêì´)ùå »b{ýÝ7XP{€y{ºÊšLÀùìkãªû>ey-£\*Þ#öÎãI©8^è©_Ðc ***ÐôC*z%lJ* ï\…ÐS“3Р¹^ý¾Ùœ,5Z 5Ë‘••Mw±ÀYèa ùqïX€ÿ¾—ßtƒÖûUqJʲå;‹ŸÑÖÝ^8Ùý=§ˆM?ÙzgN‹Y‰—¿ìŒëÉmµšò›7ÍÂNM¼Éæ#Èý9â¯@Ã,›Ì+¥~¸“.óPa _ð#eoÔ*aâá+}F…5Ü.ÕZSc˜ødkg]KÂa péò¼™ñ¨ª2žÿ4°Ov8Xò-¥!aQÝô§håþC<$ax²Ø3M7<ñˆíbèÞšY7äõ«{ÀQ?þ:ªxÂ4W¥l#)¡`Áý!ÞWL~Òõ¡4?õÅ‘ÍPë’SR$) J²Œ/WHr²-Ò¿ÝGúùû§Ý˜ !P·×Œc«©[òz4ûÑÓ¿{t‰Â˜£â×pk]œÓB;vS¬© ¨Yõ†é¦¥*X€(àçKÆÑj>€Œú\³>V§Íwý6 'æRwao*3—–>I­ –ùz,H`츌íîîJרnoQtôôøÝ\_–X (­'N,o1•Ý›«;;Ðn~ÐyŽzd¶¸Õ"ŽO4‡‰\­YMÉŒŠ™þK¹¬!)NÒ\µÛA¯’¼}2h ¥̺Ë—!ßÐp1±û[Ø IœÝ¸Ð–ííÇÜÔÔô\­z4JÍÑoZjOKNˆ«%‡?ÿ¼¹šÃýLŠinÝéf¶HWï(G7¨¡¸1šC¯éÇ“¢rkg2ÍüL= /=ùTêW˜ íκèJ/¡Åï’ß)I¢÷ðBºil 4ëø®®JªŠ¼LÎ÷E ÇñÓ¥82LÞžd«ëÙWÞ(ï,LóŒ.ì©TÐX$˜éSOÂøwaÍ„1}á›”²¬7$ÿåÉvϱÉ7ëì™ÓMC öÓ2ãQ_¨×±¿Ø±¸¹¹ùóÅ¡Õi¾c3»…FSÎö¦Õ5ït•.‚@j¦Ò¶Êh4;lfüªz PI¦ÖËS%¦ÁÞû”¶hÏUR º+-ÕU+²™¼ ¼ˆœlÙ±|‰¹èâù¸­ÐÙä Üþ¶á[;:ä‚Å5­‰EŽãf^…•Ë×SL2‡ÖjŽAŠgêÕìAü'‘-íǧ§Wgû`:—If6•®Þ£ëÿÝ àH¤˜÷ÃD!ÁBÉrÙ÷z¼RŒ´~(M\¾ªØEy†P-yêÿ(-ð–}ÔY¿õuµãã˳E Ÿ>{~úÔù§žä˜êÛ7 (ì7èÆ­ŠÙr¶¶e-~üøÑQÇþ?ÍýçuT¶I¨=ŸáþÍ ÀÀùl·:MŒ.­/÷žXh2ÕZÔ=Yfò±P …V<üËÙAHp²-w"¶ üë»wôm;ýꬫ>/ÞŸ uf³ªLãG+ ¸œQ³§ö‹‘½Vçî(ÒÍ^¸Éý¸²u‘ùÿZÄ\ÙÑÏ}ð×ýdkí?+æ*7í/ENؾŢÆF‚OgÖù°ïUCz¾wå/¡š Çç Õ6›íõ.—ÐýÐOùoIIû¤>±¹5µÚDYJÕ/ j¥^wèo¶(ÔLíUlP£|XJ{½¨…^ ×ÓóHÆaÿúµ7a°ÒF´¢\„ÍéÕâsÜqpð­Ül¾ø5…rœ@0“†Kð:•å½½=÷íÛ·_Ýœ-B$ê-õSÏ:O¶§Î—B¤®xÕ{Ž^j:'-!TJŸ §Kꂯ‘¬ÅN±[U|nX§äØ^Jà\’:݃fí³èT1è×"§ÜJ**xñ ‰ô\{ ê¿…3rî«Vô0‘±pÀ™Z5»bw ~'ïu32 Ì½iH–²[û)Ö¼vEq´öÛƒIµ\&KŽ*ˆÉ?C ÔÌÁÖ€¼Þ=¿˜L^™‹ˆÍ5Zº|÷þ}phhëH–üm||NÚô¾ts¹Õ^Ù¶¬ÞÐp}ÄxÍа›Œ l+,!Ùçïªr¶Lb‚&ÊSE¡‰ ãû·è[ÓFjóÊ`~Õ¹*€6TÛŒ†#}‰ú~¬â¿dÓ^|¦6:jÔd\µÁôâ%…„Ü!99Oý7ªì/·+ª~|`ïkZ­ÙÝ«·—^;-QÉÃ¥x 0xR_ezDk|nUé<yRþ”½Dñkè3Ùæ Âs¦½¢ÌwÓk¿e 4Pž4fÉïµÞÌrÄiæŽÁÓïWàã ¤§ø„à$©Õaƒ*Â…Xó“-þ$:–¯.® ð¯R¿þ›–ÜVKX=,€P†c–ò“–OHÌ`ìå¼Ôë.ÔjB ÷½6‘„ŸÓûs5¬®®–Ám= Ú­ÄD*þ{ôT,,,5 µ—²ÿYç>Q7Qð7&©Ôñªúìum>-ƒ³_¤ÛÇÓ/_œÊ 6Q[léì3\õA?÷Ë—Áä|¶ƒÉïpþ²™¿KDtâââ‹n7lv‡UvÅE+çg»S<Í-6#?êœN_‚„uvv–ø–vv¸š“ÑÄ»ø§e ÷zïüÓn,öäMŽ­œ4Q4䛺¦ 1K¶õ(ˆ%+íέçÜ7VïéJÕ~Çzȉ‹m‰š>X<¡…tÕçìpÆÎvCÞ@ éÂBÖ¿ãAƒº7t1¼6 tÒñ½§ã›÷Î]ö¾ÞtÌWaaaA¬‚¸XiV¾1æiÕ;þë€_§*Èë똺z7‚µ,øbbIZVv 6Pk|QMÒ=ÑmîSóNžoÓxl†#;(äùì¾zÄó'‰ìR¨àòÆ+4‰¨çôsuu­=ìç{+"Žõà –ô‚£]äûŸœ:5e°ƒî>~¼yV%T T~¡Ã¡¾~oäëwiÓŽžõÆçųóÜŸ½üƒkPÊÐÙBÎGyʳ0[g¥÷P@ ®VÁ†ÔêÜžúÛxEC¸šh¨}nð#=¿,ÒÅ©Ïi¥XîÎJ¨º8>î°¢‹`É‘b¤™å=ß–½ˆ5¡–ú«X¨“|¸:p¸‘S0éGR“|pCx>s(Q~)%3wP¸cưð“œY¯’±¥×ùi;Oé–®ØÜ$?Þëï¡…yã{,“³é»º\½`7Í FaŽ ¡?²Ý–CÞðÙFÞ+E畲M!ò¸«µ¿¿‹(Z ì½}ûöo›ZžåVT|ÐâC° ʱ­ºþ³±†{?CS-Ü P ~õÚš!ÔÎS)–Ú‰u\‹4tÞ70@qa®Q½ˆá²ŽŠ2眭SM÷W‰µÙ1Ý)ßÊ}nC–h$_Æöv-"O>½1Dú@LÊû±®/šä¥£j†[G——2Ÿô¶dÏ$à?ðózíq zmĦ+š×¯'°·ù¦œªùno›$¢^z±ÔŸ5ïl~!†]…J Î/~»Œá0|œ/’×&Û~`m57÷:’ 3ŒþŒûææÄå:M<›BÂã[¯ˆ¹0 <ÀeéC¦ÆÌþâêJŒ…ÂTÕ| œQ4©ÀvÉ|F´¼G’Ññá'óßL©iMÙðì¹æÿ4½€™˜ÑWÀ’~zºÚŒjŒvñŸ?œ+®.SDÈ_EL£Wv¾p,þ‡Qq|vCõ.Nà ééÍ+}ÙÇÇ›'šª5”®gM7T★–Ë’ßqH, úûkzÎÖ«–ü15füÇ[¨ççð™¿-]Ò¸I—°´¼œŽK–©"ã‹äuÓ¸ŽÝÜò—+3†/,,@·g@E½C ŒÄÑõ)‚íóB+ª&¢÷«u—xãXÞÓ÷%š@½@{éz™Rj`¶ÈËií¨ò²&Ä‘¢\·D0«/8¾~‰Ëý¹9¿àôØË&R%b_iLbxR4o½ªàuxy¼ßÉ}»Às”šîšž0¨(”9›N)Ò¢¶º‘ó â|-ðeëÏ/OOtù /·©=e–̤±BRÓÓ_~Y“ÂþR‡ñýËV¨•¿ÃÝ„IeÖ8^›Ç</¶’£´‘s¥9>V‡5`¤:Xê‚VKžJö®…$ªÕãöDä®LUX#'uÚ¶(‘‡‚,Zɶ@!w60Ø-XÐG&÷[мËjKÅ£UÚJ2=›*óXìèóS}˜«ŒÃñø…îǼl÷%–H'ÓVr 5zð)FˆS€S€¤ðÄy‘vŠÀ¨Ñ‘2Ö½Þ® ÔÔ'º‘U×H¥¯ªÕ£º}ŽÇEz= Èú|O)Q$0óñWLüWW 9 ô—|(Ð[*™e{Wçš<¦ËVkÑdÆüm‰æV3ª¥Þôõ•Z$ð6P›!ö ¥¿>=ÚÎ)Ÿ'¶”U# Çü±Ò×'‰_åQb0ŠNé6ò?«F”njš„ÀrçЮ%ö˵” h£nîÊ RÓyÅVïƒÏCmÕôñù0¶x~§µ‰º!;'»Ó_SŸØïòÛË49³°»¡<`V00Bþ᪡ÂùÙÚú¶C"×Y³¾× ÁEÿÔ&¿ðÏÁ‰÷XžöÖÌÿî/é»G÷ƱºªH= ’³Ù»]]!÷Tîd xÜØï<áSµ)úî7\¡ÚöÝ¥#œ[Eø+‚²`W¿~ë÷;øë«;˜#\i¨·| ¿­ôÅ”‹<•Ž÷Ol?"°<Íççs»Ùð$þt§ü*_£n£²k‚ž“3|kË´&ÿ6>³ršzsóÈÉîÎÌè”’O9‹° W¨N'‘ÄãD×8_¶±u;fS?ÇõÆÇ¸'þ­2€”K! -baááéoŒ‚üø»,˜,qœ§òRËÃÒ‚6Ê2¢0ƒ½›eâ«^Ãî¼_£Æ´ ¾üN'4^Ш¹•£Ôͱ‘^ãhsÙÑÙÝ­s}q˜ &0]ë’‡ñ ýãO¤ÔÌóeÉømŒ¼à:é ÙxÖÜøu®U-pxk"¥|>¦,ŠöÔ®”T,´sŒT\ZåzóT›!¨d¾ý Q <àêæb½2Îx6lØlz5ÊRšÕr7”>z=á²c­üôôÙæ~Ñ`¨†¶¶·€LåsÕqP.7%©84¶ØƒqFú{xzf2ìÕ9 ËütølÆ©\u·¹ðÑÃ^y[N‰(Ô8Þ¦óCàÓËœ]“¿ÛÅÎX ŽRW'ŸÝQÛ:¢APµÂ<íÛ„9¨K1P5/Üm@Æk8õ%é–³Û»è/¶{ç|hÕi¯Wù¨0«á Um]$ b5¶Ë3Ì{MãúÐc&;¤ˆéééM…®1ý0²áìԘ8J5(½³]ç¿©¤Úîâ ^27e»>K1öã¶aXZZ RJúÆpDL‘/^ÓÕéùðø"eÓi~s³gÊ¢j뻀Œˆ€4Ù3@ðµ[¼­ÌÕ+zß…=ÀáºÙ'Þ¯Ë×ìp;5Ö­Œþù“j§›ã‘r²3™¿¾ ƒaâ“Q Ì…8|ï핸ÙEÞµ12Â_žvUßAA1¦¾9èÉ–ŒZX„›¹G±õ}¤Š1êy0Šÿéj½Àar« õ©íÍR¥üÆ…¶½íŠ P&ÕpÉÎßšc|Ãíÿ£ï×[íP¥ +¥5mó1}핟¡Wwäa=œˆR¯ã% W0 \”æ>£rš?ɳ6@cû,9??o:SVf2~ÐNja)n øÜÒ  ³T+òǸKôû ½øÕå¯Ñ:úÛpáÙ™á_/Oš:(c*¨> µM•ŠksÕp~MIËhѼA-ѺÇòìƒÙ©Ý2 ]ÿ—­‡¦³¹8ïÀ‰”ÿ‰Ø£ÌS'ê/!º¤-PD^¯ $HËÉ·t˜™í]ø#·>K9] /žíNx(Qçi­,/¿CÞ\COþðåä  GÃõ¶…Z­½¬*´ à}Æ×ÑzÕBg…¤ú$á> í³yŸÁÌ_¼,»ùtfä˜zU¯”rnшt/ _[YQñŒå לí‚@ÜËKùÔü·GoÉ ‰^¥ÛÕ èu{áEªkJŒäa;¯ýyÕ…ÂsŸ£..àö·—yyy½ÐmÇ+ДÆ#Vÿ¨Vïþm©! /ƒºŽàŒ¨ššù ­+ýÝápQ÷@rø›–çëëµÎŸžpg:|7RÌuO—<.» û»]¥>sRÒ!..'Ÿ$ÿöí[$—…EýùSE67QÈÙž SXך½püqtïh¬Ÿëq£ì%Ã&ˆƒöræÒ%o,R¨”›Šêè<^lhŸ®ðÂ!~øB]ÓyßK¸½§»{!Înv~ÆÁÁ.ÅfP‘cIÈÂb8ó(99Ñn­ëvæ,àÌ]¹gt&'?úæ*-¢7ʤHg#×mªÜÛ*ÊkÌ go§&{;•ž­  Ñ—ÝYõ¿N‚´â’’¾¾ Ë=*í¨þÏ'¬}ÐnƧo ð Ôkºþ8n½ ²ÇÍÍ­=ˆr`g¦0À’ ëR.ó=Àê‹í÷u^âm‘ º^q§¼x©¦Uh ‡ÿ¨c¥—E½…¯°Ú‹†Úë’bŒÊn§Y6…ÁÈ$Û€ÛŸdzËC}áñšxv¡~ß#ª»V껳u=ÙðûóåѨã7g‹A@3±é´bÉÉÉá¤Á[„+Ÿøa<~¬5ò,Si`úO†t  î ‰ô†\1’6̆wÿ_µsŸds¥_,Ùè, §bÙ£Ñ&"B"¢¿ÛkTJ3!YO-A³ö6aqÑšÿÝC’¨Íã÷ñÕÕLªå{ V‹šø7 Z<¬¼Y1)ø|H`KÎþÝ=ŽçÕÊ 67ò·Hƒøs{_ 2 Ü®ý–{"ˆ3ßÅ›¿ó½Ÿðäíû÷r9ŠLbÌ\° ÄÊÑú°óéŒó^&¿c(fXMÚG³¾ôŽÀ×oP§ķ Yí/ÍÊhš>2k*" Bªeå²ïm`¤‰Çܘ™®Ç#åÊ~û jlJ$Äõ{¢ùæ?/XôqàwÞË‹ÉÝoî"ðé {£ØúS¤ûêúh85-Í(àÁËk–ÍñßÅË»~þZû~Ç{åX\—¤/†ôQKœËõñ¸D4û‘@n'l\Ü'llòªØ~ïˆú•¤zö˜éùÉOvàm½;##i8½ a Q¤v5¥ëÍ´¸;XÆX©u?Âòäykk&/nõH¦¬Ç;¿²%ú’¼<¹ K Yåo¾×œ*ôÔ¢m?7-ÃfeÁ$w>#|†ùlwÌqJIÓß:c=Þ7É©,-b–wñááéfûÆI+¢~n2qøñŽØ®$½DÅ.5¼”äxú¦oººd‹x¿°ìï®bò;eW㟹 ûh[Õù!AV„üüIåçFíùÌ"䦜¤÷žJ@/vœÔEƒ§–𱂹<1ñRÀüðx9° »e_ù g¤-šbNX“fHl¬Ä@<?y¶ÜöÁ+ør7«Žg¶2!äAú‡ÿl™Ÿ[“uù̬¡°ºK'ÅN7!“Ëp¤ÔP£¼óŒ´ÜÜ«’ÛA`aañT2ºuºÊú6.î´ÒSÊv>H×mOUÄÜÍÉjÚd‹pöœºUƒb?Sí…œ­ónö„UŸ? ›ýnÝi¦ÌŸî¹Õ$¥õ6ó²lôÆBm™úÚª"Á›‡8äpŽüq;ë¬3&g´Õ¾«Gsx4yÀW1>7riM¼<;wy!ú¬©;ŒÀKóc—^„ɃÐûó£ýÊÃ1U‹¨,§Ø=¦CKó ~þOjT8„T¸Ük¿¬ ~…Ú9æÓ•¯vˆnݹ³¢Ôf§—&žƒaºÚ¿b®>Ð-§z´9î³ô©ÃŸKÏ÷b·Òþ÷™½Ãml¹2ŒxÇîiõû;K½$£äVïø_oÏÌ3I(á°ÜéƒCÌ íƒÏ3ÈBvZ¢&~^TL8éeón?E”álŽãÈþ9»¼„À¶;Ó¢ ð¯˜57+¼àÝwÒЬåñ'»=šCzyöÙ¡a–IJ6±Çf0Rô-K~tÂm&[.òl)òÜcÂÔr–«œÄp³9Tb ­£«ËoŽ @Ú/Àk“““+MuhÌ-“¾nZûÑðÅT• ¸(Ü>E-þ¤wçg¨ÂÜ&N‰ñh6ô•té)ÃÌ_bøùtÜÊüELJÖ'jJû { ~ƒ5\‘þ“úòÒ¾›#(N\k¦Ó™÷ȸ ÌOä:žj8ßyóæ¨ÃZ$*jÃ)84•…d¨PzùȺ·þs7‰§% †Ó%{Jf|SFÑvXnQwî80ï”0*tG ¹ÙïóŸæËå ´ö][;\ ¸8Áð|òê½=÷ÛwY‹wõyíðãð/޾ŠGX!'ùì´z†å²ê KÿNÎvz3UÎp‡jÇnû¹FnE£nÔK½ï?~hïÍ5ý«ð¢'Œo™ËͦÚ²J]f‚ˆ%]±@ M– <ò]´›ƒÍ®>J)dT)}h¼(¢#ùêSÃô¬‚‚Y¯ÞØí0s+—•n"W­¢¸#ùy¶LOÝn¦,þmÑŒ’Žã5îqK[iµ¡§•ÒÎÜÿ»¿ÿ§Ë“möþÅÈHÂ7ß›EïÂÞ¼z+&†]P‘-¯C*€L 4š©Ö.QÁ¡xFçÓh6…íZ‡ùÃßÿ =ýzùtÂ#÷ÿü^„¦Ùx¾òï ¶Ïš&Ík¿«Ëª¤ë 4•lP&Ëäýz4óþ«—WµÊ²“¿   \,VÑügõµÏ(´¨¥ÝrK,Œ! ÚYò—äþb„Ötš2«â’rú—–²g´rEÃ:» P©èØCý;(Øî3Zö<wº›3Ú 4²¨”TºÉx~¼T½§wöƉe/7%åÚY³¯\N×e@+/"O¦KèjîFî(?Á%Iö¥3¨Âìù·’š¹;b =¡óæz×íp%ÆB‡#øˆèM%ºt q ¤õnõKö‘‡‚±¯†è÷¯¿Šàª¹U˜~ÜñöZ¾Üv‹#S”i‡…ÛÂ/и,Æ*ìÊ~âü§7üäÉ`©‘|FÛé#.oÁëÛÑ쿘¦ô±ðàSû ŽÙ–OT•¾Ö«;·äá1®A¦Kþ§c˜™ù zñ…/c:кñÍb„¦«öÑÚïO|6üx;}(N$Û·´®×é®.:Æç›ÏT¡øÒåâ €fmÇ+±°‘fäzFß¶:‹BrÚG¶Ñ—…ŠLésÑòÇßÇñß·¹äÌU˾Y¿KFÖ ¼=zvvvöõ6HQq¨@àŸíÍ« M8ÑSnŒæ‰/úû#˜Û–TLyo«~óGwéa­ FY÷àñþ²ÍÑb\)nÈe gt·“\^Ò%M” ÅÒgG›˜uN|¾{§JÖ®ôÖ&*c¬Wü†3ŽÛ25êx§ÊÍ ŽÇ?„0.Éiö(Áå$J~U&õÃź“G³·ð=õG³„¥, ¯‰UòRm6ç*a(?~œ‘ñéâ&A^.„sHdäCã±\#•éøëâÖ·.ª!ïf›[à=O%cùCjᙉ“¸Þ>|NOó·;¡Ç•餠imk‹ºˆ^o¾þ€*d_k6U^d:ñ2£AV 4²ãxõ cqÑo¥ÌÀ:»’Öb,‘ _Ie˜¦|ºõ`ªË9åUoÔYû°kx ã|®7>#‡È%©=À¾Ï²³U™¿eúÝÏ£/†šQ\TõöÒŽ`Zq¬Û·ÿÞåð6 ¤ÝüoÀcí·ËÆcùñnŽ2¡w^áRàöùû??+zR=+8éì¦Æö!¥…!î¾Ó?ºu_&ËL T¦c¸¾(—¼ß•ÿUÃWèiËkêy7[äá1ßF<îÆ£scùoCw’ð…Î}X"FEVPåƒp¡0Ðd¶â£ö<7GÔ÷íÍ·T¹\–˯þ®¶1±9 óB4yx·w³þ„5êPo{ã¶a>»oX¸>ðî¸Ó ”%G -g¥‰Ó+åÇ}þÛªý å]c'‰Ã¸3¿ˆFΗ½qñÔu“2S…#ìg¦ÆLÕ¡¥àÌïA“´àºß ) ä¡Õâ¿malò¿w.”L@-¦“еÜxÝ™¨ÐþÉIûnˆtaj‘}îV6¼Jµ¾6é|zg¸Ã’ˆ¥ Gé69Ï]¿_:Þ I¼6­³uN€¸¼Ìk¶S ƒ=WA¼1„ܤ×ÉpIΩi:0Eï,ÇÎò!ꎴÕa®2J…ùºôðvhcG›/Ñ_P’}˜—}*uÁ€†ŒðœŸþNF¨Ôc<¡%yÄRgcÒb]­ZÍnGVØ7}ÚÃBÿÂ*•ÆHÆÌÊúS4äé/À¨Ae“ôsÚüücr?i'ü6Zm]’$)ÈWkŒéÆwJ “TøböôzŽF¹©×èå*2†<•„^.‰ŽŽ¾í¡H– n­Hp>¸ýû÷ïþø[µû·ð±Ë¸uu5¹uà /ê•-º|½Ñù Ÿ„NkUJìê|@ù ¼þ®§O‰Ã¡>Ä?>ßc,"çA-1È¡‹ãŒ1Ònã •‘^t:‚ÅSoŽÊ«Þ,¿¶ÞÉ×€wYÔÿ&¦ag:ûÑßúõýô]XsŠZ­ý/Ù”÷¿¶—膉Xörꟺ¤ð?móàœŠñÀDÆÊÿÀz½ßAþRQK,‰¥Á¿­Ëæ6 ÔyÝ‘]{ùß½35ë%F^;Ó²Ò¼'fõ—´©gh¬1‡‰TÌžx÷Ç%ISîÚmýñêÛ_ÅÞØÇŸùׯ_@Ðx„3©n@mÁf(§ýÿ1³³åÍXÞ ½=Ëtɘ“š ’¼Ø„‰Bjž6_’G‹\t–”o(…”Ow”¥ã¿ü‰\p…n1j÷'6{<â0Ž|pêC©5ÿ惄‚j¢×ù7$;‹µ)bßûŸ{#ƒ°ûbøôs›»õ=®/áþÿm¸mŽÐ=.ñ·°PkéÖî·“:_¬gHÅ ÿ¸K«\kÿâæT@®§ÿ)TâgAqó`»¬ë}ðaów‹öâ9™ ”r…9z{;¯©Ä¾Öw E³ßÕ[^g¶“ ùê|Ã(Ó2p²lÔÜ]¿Ï?aÔNáqRaw§ŒÙK»í!;Üö »Y€”÷())¡mwoìÉ ä"$&†@(– ÔîõÂ&r=ýŒ$lšË÷ä“~¥½vYuäös±ÑzY£Â\V§÷áܦË=Ÿ€Mæ|:c•ç9£b ÷kìvW>c’¯v™Œk¿=jÇnöu:»l‘—~] ÑÞ¾\ãáSíLò€Å{·~˜8E­ÊÊt²ôÇj‚›Æ?‰Î.¼K²»:û¬ár 7ö¸}ïéà Š×*—9;»¹bÀ£O&†Ýq÷u7\÷Í/ÞªE ¤QºÅÎÑŠ¿Êo”—æÜ$Ep’­Võ2G1Og}(-”Iu¬´’žžÕ.’".DWEùsÐK=u–ÑÊ­ >‰8º.•RÃ×yîܹó·í)C7ELuE"àÌ]§æ™j…?ÿE}ÓLåk÷¦ äziµ—QSÈX]MKÇqµCˆŽ|ºÌÅ:¬?UÃ4b]šUV^IÂ>/­–>äk6˜oýïhô/ØØFOÖÞùÍe$HܦßÑ>R³…]iH^8ÌVÊjæáøµ5'¾ö€ÞC+þOúu„TØËN˜r>•ˆlüLG)–¯RÆÀfÐï¬es’HÄX˜šAúH0ÏDIx|uyrÊ"$-+3v`ÑÿÑÛ?ÃÒ‹ ±¹´Þ9?‚‚V»è }¿éíx·okoŒdBø»P[xxA£2q2Ål×È(ÝëØþ½ÆÔ¹†¡!­Q†²”w‰‰T+ @ ©äý%{öÌ4¸EËû‘ô›¥–óoîÞ½û€²Hp8\¹CFæŒhð¢å›KÇ H€gàGÍÏ«$$N¡¢U[Rk¼òÏSUÑ9£è"Ö|Âö*v$I¸êðhøö¾ä^•õêCnK*rÞ/sÇãš ÌžRA¯°TËMµgªm dš:⯋è»%ØØ2˜uÝJµ×†í"˜ A¹|å Ü@ñÅ|2 ˜ z›A™ñ¨Õ†S:a³M§É×AQ««d^û=ª ¾{ ¦¾¶ôÆóö›ŸÙ™<>ƒ—< fiO¯Ê®ÝýâH.>¡˜÷ì¥ÉƒY¯Ú¦«€VƒIhÖ+½ÔŒŒ=¥•ОáÍñ ¥¥OñN;<à ³Õi¶¨Ï5óOqË~’Ã-—°ž«gÛí#’„12á9áK]+ÿ“Æ}^b' ¾¦tÄ‘NËaJkû…ŠŽžÏU>=w¯¨V=^¦MÑÏLãi,õ©€[|òn­pÕJ=3÷Ó‰}*ÚîtU‹ªEÝ;@Ì~,ƒ¦·áãà@ÍU­Üx„-*ÐÅV¨õ•W^ýCCž ›™ôî=x±˜’F? > bß|sg½ê@Ñ·WXh˜™™Ç§:Áµ‚8=1tŸ!àpéu\üN'Îkûà úY7ƒðÚ¸åÊŸ[Nbèµ1Q²jØlì‹¡¡ýmç V§­r¸Š ¨®_³Å´•w¾Fs˜ô^Í”ý›ôiâ˜cƒ´üüq燫ÐíQònâ¡îÌêBòQ·ƒŽ‡¥³áê¯70‚^-TžWúÅpQ?½åz%« ½"K¿7²éÞ£É ljlLMM„š r aùâØ¢ç‘ô«P§™×8¿¸ÔQÎgjì& µ[Ð P4¬…ü¹ f¢9ðÒ[0h … 9QeÊŠ’ýXî'—_@³Wo¬¶AÏS‘úq7Õf§7ngFÔbv:Tý¶>Ïçt‘ÀTÀÎqI^zf$¸>ìaÍyÈeN6 pùÜízSs¢ da‚TUŒ1ãÑoæ3BÞ¼Þ[°BÄDI¡¶ov²xã±r©á0øße$ÏN/2ÂæOÒ(ïkøX¦VjØ u.N®K¼cÚâî"67à߯s“õ¡&“¡wÝÎq¾îïÛGMkHg€°„,Zë`=ëziƬV©%6 Ï)þ×[•64̤"'§5ûŠÛ²ñì܆š¶e³ö3[2ÉzÙË6@HJÊ5Ã¥–µ-ößp#¸1ý÷Ykƒ?„ÿN½MÜi:Ò™u¸Woå•Xfr;À7Ù¹Å;tg2,yEwsyªû¢¨0žY)_Mûdk¢Ôt"ÒÁÆ£ ®/’¾iŒç«OÔ»8Åw8“ÑC›FæfìæW$qTŸuá»_uõ{3©R1ã CªäAljƒ{fþL¿¤­Ð…°îÞâ}H¶øRkΰ@x†I5\œ”Sæj×Îp[Å@ÓÊjïúÂĹá̶㙄£ßƒTÁ“‡$}1!ðï) b zVZ— /7ä©›ÑPêmÀAB›ÏñH9ŸPQ5Ræ@↚ú+é>þ&A‡«£çÇíó?è=ïznÁ:§H³ÛUÖ:žÞÞ/Aت”›fýûÚ˜Pë;ù×ÂZÌÊm÷*nß¾ œß¿S+Œ„÷‘ךµÐ½?¡®ºU6~îq|·ÿT݃©Ê´üôþm¦ Þ£Ÿêi¾Öta<<<Ð#pˆPŠUò  ¼Ç›ò€« n ÇÌÍÍù~>?ÐŽn„î5٩م6ùà“w+½™1å,câ£ÅàµõÄJYÕåÿ]Hb¹€n:‰ÎÛ jÅÖ;;ü]éÂ⃚!èh,¤d‹œ¬ãg ¥6ÇŽæì7Üý¹¶µþêçò‰Ù•ÀõýiÁëm]ž¦¦O@²é__|â0L¼©xWáˆ×„mø:oðñô$$$toh42‚ÞÒûùòÄ,£¢»7hDa4p{O{m’H,üˉÿ´Ço˜ùÑ¢q žÀÖÉÖoU“dÍ×Ú›‹M ÷ÿíºïþw¯ÍûÝÇmhïð‹°lÐáˡϻ–½pnÿ©Ó)hÅ÷rš©öB¬&,žž¯6¸<§c=zÀÔi8|ÎÔ•¯Ø÷ƒ™ƒ#ldDÁ@ºåçp†öüÃQl• ÛæŸé!ä°ÓžN÷<Õù)‹ã¶½ããeP2,õcx?€C³ô@ +ä-I­À½³ š§:ßøÔ«ÎÖóS®Êºq~¾¾Þ¬^›¯FÍ*ßxf/4ÊûÁ\¼ƒ‚¦NžÎŠ¢8Oc-, £«kïx|0 G¡`g‹¤ŠyeÏI)¿±Ú&±ÄU¢XÚ•«öÁ‚$µ“q3GÊ£‡dºä{!h+:b¹:¯ê]¦7”1¤‚ÅÇ P$JÆ`‘³y[<’µúÊzï.ö»»/ËØ¹j·_¼°œ ÃÖ©$×ÒìÌê¿ËKŒì‹æ‘þz¬µZ<´Öô Ó>ÛyhUaú1ÿú0AíOEДËEåõ¬™øû[(¢¢žd¢˜žñºðγð:©P¬¯ÉFò“⓱޴Öþ"‡1܎Ϳڜö&mS¥—ä7ÞýoöÔjªÏ[æ& $¬œÃó™jtÞå×⯠^ý¡.$úfv4Á,ûéâKw¹áëã-›ÅŒJ†Ïb‡†©éEùçG'úûfì/ðÝKÙ•ëTha_h} å<>;æ¿Ëy\Ҧ؀°A{-JÜ š^¬ðèÀÚaßý¯¥©©‘ÙlŒüþw•·wao îê[ú§¹;V„D¯ç©ZëÝ8÷Sr77 ãzÛfì0P•¥ã’GzXä­Ödr xx)è8ˆ8-¼9Læ.l Úy^™a IáoMbe«zBí©_4"ÅÐ#P´Y⟺N?•ºø¹bÓúDƒÖk7¨6Ý4SÈ*çƒKmÓIX;GÃJÿÃýÌþ ŸÜª‡Áe·!Ï?ýˆÕPÈ6=†‘C*Á[1/Q’tïÄöÄ¿wQ”fŽð:÷T%Tn¨9\emaÏ‚àÒÊÚ’>+õ´FŒõñA{éÍ¡pF‘Ä×j¾ËW>”Vº o_¶´Äñ3Õ|,.ÆúXîßUë^äù³PS1œË"~#9g?”f0Ðü ñ¡zV`Pv7Rð¦ž-DTúµ»o£/FåŽ)–ò7톛ûÏw6š«5ß5ˆŠë9DÜù­³¯«GͺNM xyyUŸÎ:…묀½%Ai}½£­!(—À½È;ÇÚ Š×NqtÙÎHé¦pà'æºËŸæ¼÷uK±Ÿþ¨AWÅó¹Û¢;™ w ëB÷~8žleý¸Gg¼=Yvg½"·—«¬ÖÉÎè+ý,åᬊ>ldTÔ¢žÞå<ÍÆ…;Njƪ‡é›¾¿M FHƒƒ…ÓÒÇ^'×`À¾ÇzË$© Úp u·.£´¡xP³ÛmùÎÜË5ˆ‚ÉÉóýâññÐdÙPÉ€˜ ’ì³$ñ.¬þRÊq‡ÇYçt:6”&Nr…»‹ \Pl‰æþ.]¥Ä~²T¶m9Âä2>yÝËfõÎÒš5ÆYçL¥¾C¬½3×t˜Üy¯I¥Ò2IêÕ~kâ*›Íåv…IW0-ïNåâcÅñ@ò¡£õ¡f/98¼µšã]m?lÏ1Íf3u¢$í¥ÇKã‘g}q|Jc6¨0!ÜÇ0˜D(Ëz*ë컬wÒF’pÙuœ]©ÝÁ'€4c6N¢,â*ŒY"­ŽþÚ-ÞFàRÐÂRÈîöïŸÌj™N»uJQQQw2ûWÒ:(#Ο\ñmþºÄ36q‘¿QÊ/Ýq[ú•ÿhP ¿eËBì»°ŸöÀù÷â˜l³ªt¢š‘ 8¹ó’brç‘/&Ë­–]Io¿oM«V•3~ëÄ© ¥«ë…0º$OŸæ’VÉ;´L«^£ÂúbeƱѾÎzZDªzÍã13¿¶)\÷í©´Œ„ðúóöj^›T ü6 ÜÎ<þß"t}<üËw:§HûùQ§xG1>M'Éã;ζ±òCLÁõ!ì/uê¢MÖ“†€æ›Yà<888ê¤ 2ìåé‹æ× §t;ÂSˆ`9Ý–¡Ìiƃ=æAÓZ|¿îEœ|wóâ!»áÏpÍ|Ý þ±¿(ƒ†sÿqËÓáZG>[èÉhü—àrÕô…,ùe£)NkŠ'ë6ç7½_• æ×ØA6ˆwh/-¿¾8ö%bdw½²á/?iê;µíÄ|]j4ÔpCô‹™@ùÕs”={çáëÕ f‰¸Âº£~,õ™œf“ÊÃi>{Â`¬]¯ƒññ/°Ew#å±÷éË/wþš,·Íë \+Yô¿út®Ù𠆬ÈfÐ?2]eÍ4ñ™Ÿ‡çãbGÐxw#‡åœÐð”…„èvëtv“p•GEæ1´±$0om˜ œ¶îÀ×¢E0çÓ§O†“¥FÕç+14'è`:ä Øƒ-}ÈŸŒFËb%·‡ÄåÕU ò·ÅÃ3Ë‘oçý|jœD{ì§\”–šj¸Ôù+ZЭ>üùÇ»¿¾ž'ùPdG±ƒsçÇ-_sœíð­wѹxLXfÌþ€bQ=zú½Òµ0?Ëõ>.®I¸xÞÕ¹äQè&E_??šÙÝ*ÕòÚG—’R¼O¹Æ[}{CHSlÚ²/(øK­g_¥<á¼G×]¤'þö‚_qˆW”v†Šþ‘ÓèñÚoab û$lœ°¸8r/lgéYµÜ)רë®z¬jfÂO?*­Æô×…°;WÞoÊxw‹h–ª`é§ šê”@ÇWS8,ýú.@ s·ÿ­BɈò\¥ôÙ’Kêl“Omýl·´Ã‹t­NBZ³Ùé…ÍŠ•´‹|¶¢Ç­¨)Õ*¥óz3âƒeI«x(hƒÍ#Ž*Ÿ0Zˆèée¹!o »…÷(õÛ7T'>ËN³!`†ÜAä+—GÞ_¶Š  ‘%ë¨Ö’ün(#¡|K%C¾zùõæç*gR:׃UÛ%SÛÕ@q˜Os“ü¶¤†E>¡§§_:¼á^:·îçñÑüfxŸ FøÀâÞ¡D /Bå˜Xèývs­øiµQ›Í‚$"%òr¥vÓÜðûVùBUîÿrµ~ÂÿxUT—ÖìeR_jêr׳ù €&ŽGkI)A*üN'Ó»E'võ"A*…Z_5\Ïõ ôÈÎÌ,¬•.·Ë¸D Ã¥Õ7&†˜ÝhÂõa¡a¢uO¯üÀÐ{ºº~ƒè-·ÈͽæAwGkÚeUþ‚ÿõ¥‡}Áö _ñÀÌ›Ö*|ž·5ñnY9Šô«åSK…VìK ©Oøi×E—_Ï.Zr‡ÆÇ3û´$mm™.¯®æûà#êë°±±G’„1mv¦?úÛþqõ¸¶Ÿ·äf×ï}ô½À¸‚Ï• ¹22¤z᤹ÝÈ?â”ð+GQ‚Ù$(v¸r~SQØ-+Bžf࢈Ié\AÒ X+‚އê­OAYú´û†üÙ>¸²’ˆún×­z§±¸=äÁù_Ì:'‡%øDëé‡IHHÂO)Ÿ/€Þ˜ÕúýNõvùÔÑဠH*‚Òõg¼«ÊqJô—ö>ÌùàG©iÔnÑEžÝÚÃ/»u§ *&LžØ^aÀX¿ZËÛßË5¹îFNNÂúã1Õ Ê&ÂôJeÇe¢ÍŒ664ªXX"øç‚KÑhªB>í ô´qáG¡ò1P²½ŸR,PÔÓÖn­. £_=™‚[öóXÝ&€)Žį́ö„3 §Š†€¬£ø%ÀO±ÞBàÒƒÚ«,HùƒVcw9véÃs›!5œÏx¶Ö¡z¯ç¯AÑßÀ`ž]û×§Lõc›_²o…ûoåùÖ¸8mGñÂk4œeó±§«ŒB°±q¬§ÌŠÃÂÞå"”þ%mžF HDÛÖ &PÇAM“:°ÍG)4 9Ú*ÊWgÚÍ §‹û jQr<¿E°ÛÞÀòr˜‰ã+A¡ŠVà·/,ÏSËú¼¸0¨»¹dËhÝŽkCÆÚXñ¼Ñ7ncAèõë¯é’1éëÃ9òRw6OkvƒpÕjÆN±šÐôFqaA\3Èãñ´êêðÓ;¾Ú!gk¸~7ïÅ‚ =¦‚ÁšµFF:ë­ ü ìlÖut8 ûjééÈ5¦”re$Ñí„*¶grb§,”.›ßðp™ù*7­r:œ Ïa7Ÿ®üž'\PpŠNÅäýÝéKƒÃ‡z£êñ¹Áññù€§‡{XÞ‡Á†¡ˆ)´˜z0F·íˆ #K¼0Ÿ)µî'ÛŽPßÁ'àí¢P|±7àœmØëmÄi2ç)$¨E¤Ü&f>b)ü|ÇBÈíÆAOOï#DÀþø€xñàï%í|C axý8gó·ðÔê€Ðé=!Q ïãb8³®;uDZ¾._Xø~L*ÈN H©µ²q ùÓš±]iAÑW‹¤‰ãc7'ÎÜ(îÚôô )/rO…–†Fx@à2÷©D$•jª~°ëÜ11–p¥I’úµ–Å~s¥s 0¦¢9²Ÿ?7-™îÛ¦{bjCÆÞyZ «à{yÝ)àrax~°Ín<DÀPF¸œày*ÐÓ— 8·…Ôã,ê‚>JšÏ '@—­Ÿ»"¸„PÌ„…—_éøÇsšõ2Þú¹Ôß3Ÿ%yUµ-òò!¹åi×ì~~¥®—E®º?@]ˆ|¡[ªÓ†縑ug³"WÂq›Ãh,™?L`p«1\îO†õNÕªqÓ7 ^O~P°¸QaT¸'¬¨0i[Û¥¡Çó#G» V1D±‹Î––~?Þœ®TìN^üï^ÙíAM³Ž —ÓȾø>KõVîV äYyȤQ« ¤‚Ÿ-= öäd÷ÚRÓ£•o–f— Œ•æÀ]—Â[î¹’«V0\ÎûŒfi .«;¤É)åãnîJ½â=è¤)³œU¸î®®¶„2yÏ»è% L'X;óàê°Ì¬ïQ˜¦MXmÑËDëš°ƒ&Ìî¨WÉ/图ßév<¥½¾DüÎïUXwÊÃMù"Ò"¿&ö)¹ãZÔ¹xïÿðòBlÐé± È/w%sÑY#èh„i+f³·{"rÒ-†%‚Jý,õ21—»J>M£óGÃaÇg‹VWWÖ¥ŒlïôõÓŸJÇç¶ùož6 ]J{ŒF²2â³ßù=XÿNørBbd&ÏôÆ"=¿­©ò(e<­ú‹™2¨†¹^}®ÂÁNV—’E¸dpd¢Ýʼ>_…jöÄéÖÛÚ›ÿir~FCC3¹¼¥ûÐ$mP€¯'&&~3cÂ`d0(ËYm©Xn!ÌF/TåY5ÜÜe¨Y‰þãòÍk`(šÃDAYùá¶Uè¯_I@ñ¿¿÷Tâ'S¬¤ LHa¯€‹Ð{R£®¹ZÀæØ8„%wURz|6Æb¬<ùñ(î£ûÛVo^ª1§1©¦_ ÞÈ’câÉ•·íçº_]9KÆñÂ!8ÎêÑݯ1ë|(ç°%»N hS(JÂÛ·éMëž, îÑ“z!äYYýåw? [©Ó${Ÿ­¿-¤ÕÕª ±õnÝÆ—!Ñîºó•ÊYÆD D½J½sU~Í/í;˧íPßøS×]¨oì§œŠ3kn§| Ží؇š‰?ˆP~ÉÛœLLV‡ußDÆ¿Cÿ^=î¥~ŸœÏk‘“]·ˆEÊdu9¿ÔÔÔµ]7d¯¯/»V#Lü²xjÊ: ·«Ïiii'‰a°B Ø›Ç:ꆻñÚ™åÒ …Ñ4 SuÜ;ÓÓŒ »õÊs5 ê*¦+E0ÿfÎõîI;r8ùÜIXv½©Vê`]*nü‹Y½Ú¨>#ÐmS}}£=, ¹|³âOaÂJqîàwKŒz`úظLú½d`”̾õ_zªœár8¡Ôf[ÅL³ø-QÊ{¯ãPÿï–5a7í¤–ëñ‚;îmûª|úS¨­Rc›÷>ˆÂl²Ý™ßñhp¡Ío´ÁÍM~ +ú ÑÊã¹&¹‡vþÙ i ûÞÀd¿áv½/â_¾SE¸iÒ†<Í<˜ÈP£ 8]R¾Æ¤ `Š•™‘Q¢ìÉïü€ÊïðUÔÖNR4ÑŸ·3ud].Ä —Ì6d÷I?RVØQ~m¯œ*“‡Zo`°“M˜õ¬sk))êŠ)Cá,JM{óbã Éêb~äÖ½/ ,~*ztt„V=¶þÅx(U4š×&ˆ±çÙ ©ß†ðObP•«;ï·…ÇíþiÅŸ3¯˜êµÒ ¯K}K¿[7¾°iFK›}}½ w[KZ!Âh%èhÄ'Œ–e¼&S5U‘—üæD½&Y}Òu‹–VL³RÆÆ‡<ýâ¿9‹Șr»XæÊ9T"bâÍÍ‚óƒèoßPëÎüx/·Jhd¨aT¡éáÖf3ÕKç<Ö+Óæúü†ê‘(°ÈÄäB™bŸˆŒ2 tÛΫ=9™*Þ&ÙT»¾>y=ç‘ýˆ—}Á%¦oóØøòd{c0I¸T†~‡[•q°ƒÒìàÊa5®ã!A€Î-˜Ö] 1ßnäYGá”›MöV]ŒÌA^{rüQ܇‰ 5;C,”Ήä%úY Í8Ë]ݾÊxïõÒòëÍvj¤}û$ñZ´ö`Bß ¾¶‚ëzÚç¯IÎ6EÅôiUóYʦàà 'Ón Ql™GÃi$tOÃøÍ¢:üååö^ÜÀÀáï;ã ºjâ Åˆ R‹H0G‡8)xœCº-ÿi¬ëÇ )'À&ùPíÊå,‚ʳ•Ü£ Å0 »8ú ¶ž8nÙ@J7ö¤Ç‰ÇÖÄ÷3 ÜFY6njƭ²ÆD&i]uÎBžù¤]ƒ«GþÅqÿ/¦ýÚœó€ž÷Ò®ÐedQšÕ¼yœ’ßï™íŽ®]‘F_æÒ„ºÉ!Îq}ñq,,/Wâp0 .ÎG†Ö1yJ5&ù¿¬ßËCþþ "ån… ä´-_ÆçÛéÚ¹ëôé~(˜@ 9O™¥ûÀʻŖ5]«È¯´Œk@l“=/žPxù9ùäÕYb­T†ÞÌC›îªC©2¤Rȸçà²e®x(½ø[[N'™×iÝõÖÐpÝ[Æ·úâ0òX/õT”&„º] “ðŠYÔé å|zÈÅ-»¬Û9™»¡êÖFô2;[òôf'í£nµåL¹“ñüLÛ@ÕÕ ^‹:¸Ý”˜¦¥…Ÿ`”¾o»G—}5$.i6\õ9åàæÊ k›³LÌ7L˜{P1¾•~ørժʬÒäPÚ†åÉ„ØÇ†ÙƒzwÅ60ëòìʵÇò1’ê%ï«ìfôŒc¾°õ¹9&8y&H û/Xg§¹ð”›Ê^ʦ„Z¯ÆdÚÆ1„ã ;¥KÈêi'eõéý÷RÓub„HŠ€ m™²“åŸ~l8–Ó‰|o)Ô†6:”¹ äýèKŸ!x•ØmÝÿ¢lbšoGKS¿ÿMîŠt;7ù)‚¢–ç”vbÉàj–_q#Äé\×u¯¶ÚÚºí·9HFG³×‡E4H«¨Ÿ´ÈŒ’<[G íõ­'ìC«õDüÒÑ´Ä‚‘½èk5ÈËS­ð~%h·3=Õ—‹™‡“°ô•{Ù†n5,9ùÂ¥zÚlJe2bÞ–ñr=nÙ„!vqÚÍ–cËv;ž>šo¬âtòl7ÚD9TO€Ö£·Œ6–³–ï÷\ŠÝ,àØ ¨)—0ò âΦ>Ùv>=ÙÐS‰éÒtNš ‘0xý°ýD"ËÕe£?–÷Ÿ<„RÒ!7¤®ÆÒ€R yø mûyŒQr›P#3ýþ¸œ£w~ÿŒ0±Œ7LÓêGyý¾÷Fà«¡ƒXM—4|/¯n‡½×é4h’{Ÿô;pX:möšÒË&lÞ7¾Èã8t¼œ'árº3yÒNÊP³ÁÐÅú|»Ç²*ôz)dƒûK¦Üx^I) Õ,àËãÄš¡’¤ò“%aaôÓÜ€¦ýÏ9~ޝ+ì3Uv0tªËh9¸‰ ^%žDhd_üQý|—à»ÒñLµÑj©ÑÁSÚ¨!oYXèGyûƒŽI²f·Ap‹°°”Æ‚H"`HI0”­Œj773z†ƒ¾[ßçfa7±לé®Ëc¤ 2ÅçSN¶¯“Ði~,ø5qþ^8z•jOÀ,TîJÓð›•TkêF6ßAçÑ‚-#ûÈŽ7é™ÝYãÓŠúã8»?Ü„y*`¸]q ”Ф'35aÕ¶y< (_J1âWœzÀ$×ÀÕýhTÅïV®”ÙfiPÃ<ÝH«Ý_ «w®ÂÕ¿•¶ÿI/ë yòeûr¥-éH­hàZ¬®MËÌ/[ÊfËÄ È·­žˆ–¿„$;$K|ÈÜj jåH êž^îÌüfÆc}·¼7¯=P/ª^§R^ç$™ ùæ:t¢cï«7 –6k‰êÒYÛõـ䥨÷ ¼7ËRÌ“«‰1jr¹È\äY}¶šäzÕE“¶µ-í™Hg„D€ëÂm ¡É‡r" êUÌ(\Œ•º‹lLJÑ£óŒ; GÉ]¾(›¥Þe&hH £Âç!c e{OD¬žÚ«¤! X^§âG’íl×–r»¡Š ¥»‘tlòÇ>”ù“)AŠ3/:2OÖRàˆ<Õ‘x{˜§œëïwÆ5Fò~v Êü:É^¦¶Wëë u+à€áM¾ºÈF¹³8¼c¶¼,6[øº‹”s‹oER>sG$3_„‚Z@¾ÄŽ}ÈŸJ«¨ÜgÄHeJvgÆ®'3Ëè÷±h —¸FÁ§‡O•}]¸<^X…ƒ] ”H˜ºMØä«ƒï2ürŽO ¼”èJpY±ü )-»³ùìÝÙbÂ/»ÌJãù¼g£?:÷€÷«5Óò4f’7Íàp péí.Oþsú”Èôz¥mÇ­aÓ–Å .Š$‡«=™y¶™»÷‡¥­®ŽB–*<¡}Œæ3'^¨Ç35—ß¾zà/03>—uºÚg‡=éRTƒŒý€v¡{޵Á6`µÛä\RYj{•4Ãòj_MêE5gDÆX,]­¦±¨”îVÒñÏßbï}¸6«~,BFm7U.›û ï+˜NKu}ÙÕ ¨ó40˜‰F¼˜yµ(DªýÇ5¡´|¶5ÚÂiMÃÂÔßSuÅÅä\ÐÊÌ ºÙk9Å@÷÷÷µ×÷’ æñ.«.k´Šï•  È+Ôp£Ú¦Ûy™ºÂ=I—˜ q²^nÖÍ­aˆ@g6ŒÀWVˆã8¾Xï‹mué? ™$úNÖ"s쎒MÁ*Ȥz¾‘Óɧ€ÄPéÁgð“¥?Åï²LÆ@ˆJŸb 6üH„b€Òµ²vºIR™äp…Þe¡pR‹@ŒàG jq¼YKí¤evWöiùSü¹fe66F÷kŒoƒ™ŠM¾¦¿ zö…[Áíö%êWoËÆ(’61m'ÑV;uJàœç‹ãoò¿¡B.™‹ ˆ"€ÙeI19À`27üÙ>12ÊO,wÛ/âAšqiÿmMm&›3OÃJACøÊÀ)yé„ÂxŠç;äM6ÿ<ºC\ÿÚlkûWݱl"<¯¨¦fë´¹”ìFdŸÞX\âEKHXš¯³\Û;â®"³˜!bEp±›«ÃÂoå¼A±¤\Ý€K'8ŠÍ–²­—°fîÎòO%c7œ½©ºGÇpîÇ"aRr*/a$M« tâ. ÓÄ@ª§)i2]žl‹12ÈMNY0‰M¬TÚãGÿ&7žߘ, ~Â;{¡ 4D¶ãœÃdéó¯X] èZQØ7ž*‹²y0רÅ}¢Ç)€€+uâk…–«8g Ë+U0ÊQ‚Ö€²6Çöý©¶ølŸéÞ8ëõ&°LlgóïpÃã³³1ñtÄìq‹Â"/³2Bü·\d]º ; TÍwM~FßY¥mËú5‰VXªÔÄΆ]ìâ4ÝêMå-ᑆÖj{€Á í|C…ã=JÝxí¡À¦åþÊÈèw>ëüò²îXñ‰ Afàb½ë­ëMM&R˜¹€f‹ýBDKR´€‹ÂpF˜y­ìÉöTXµy\0—yèaKØÑñ8Dtjº#uõêQÖ+ϬûÉBBàü†?TG3âÞ?Ôz‘R®ýÎi’}Ân«°´`£Ér;üˆ÷¨ð´¨Ë$Á!Ó†A¼Å§(îŠáÜžbgqX|?a·í«VÔ’™ŸTµ ËY»±‹.Çø+Ônù›¹`”uc3lÿbÚÄSnQQ+(­íK'UZK ƒºaÁÃÓÓŸ½ðºý{¥{ ÂdO ŽOQ»©{iËÓp%×_P/w ¤Ùu¾auu ~?Ç_ r”Ù±±ƒEsf ' y\àáÆ Ò¬¨‘ß;Qv=$^,¢5‡Ðˆ³Ëη6ˆE}ö(¼›°{B¦ôú«Fö£—Ÿ/T?FÅ"\2R- š®ýØ>敲û†½÷‘UÏ;J«ÿ’5}~΀l¡T¢¥â~8PòƒèŽåS*ïîþ~¢Î«ïoáRÏ btŒâuŽYéJ×S‡5»'8ÁœåŸÆO”]’7‹w–3K—”müÊ@É!ψg˜ØþÍÌ´òÄí"«Ø Wf²XïåôÎ÷SM×ý6†›¤Ÿ}€ WBBXPÜßÏÑÞàaN{}‚{v¢ª)´·]auu¦«pËõÎüþ3³m•´`VX™®²2Ÿ%‹{Œ+œ¦¤ž¶@jŠKÃË!f#†g©VÓ·Ÿ~?¥¸ç=Ž×¨njaa5gæÈ­ô!ãè¡«˜Ï>ïgúÍÜ÷ò؇";:DZpƒ‚[fvdÄ0âHÖæ8£õŽZZÝq¸uufØ‚¤øp>½¼ÎÛc,²g¶õy´Àù“¥óææ7íöÐ=Xã y~GP9ƒ€åº{–§k'ˆ±Ø]ŽÃL——e³G^‰"σ‚o)õê/²k³²²y—ïÃ7ÍV™ÒŘ1Os¾*RÊ•¹ð%‚z»Û¾ E'­/·³w'9&ÓÀü¸_ƒ²õàð“~öÊÙ"üÞžšm‡´ ýùfÁòÕ±(:;ßNÝ…\¥]R*'yy¸Í¤QöÃoF3b[ÈÉ•öði½w©³lp®‚VYUKQ~‚(寘NîžoIQdž6§4%¤ÍÆÿµùSXÁa%ê2pB\ì= ®(Â¥mÂêQJµÊº1£Ë¾À,ÙåÁ¤lîU²Ñ£¦ ÓßÌ,܆֜0Øýh/@…*H>úcˆ5A5á½MiÎd‡IEÎÖAO™Ý4·ÃÐpŠ:P½ß…¡K Oóðd œ‚'8Ôëþ¥H5oô63¼´“O^Éæ4þ9Ù¯lMtÇò«B[ùã?{g{ãÃ%wgx“dZÞ"œUƒ‹ŒBän¸õ#ô¬|}-ªÞÙø?ø»2J¦ëåÙúÔ]h«(,ôÙñõ)(zûÕ]‰tüê.—Ù€ˆŒR8ånr¿Ñ9Á€ ÇÈ®Û?a·ª;Å p$XwsÌ…”ãGú‘^Z5(èû}\9Žî†¨°ï„œ(ža‘’>·‡„¤tk·(ð˜F>¡Lßî3`ãIÇgåÝbiyjY¥aŒ.˜[¶UKý=! gCïè;­C„ü¢ž0- ÛæÓWPêÉÌ ÉË+?°šèîþÄȃÄ{´hŽÐ u»Œé ôŸ¡½rmʵ؜ݡw@fen ‰ëŒýå’*g„Ã$ôhXÀÜù´9@· Í–å®.Ùõ0¥ì£â‰<0êAw «ꨕ€_^Ì.wXùfKó¼‹f…tm)8Iµ~€œÀ•ŒwÑöÝ;žtt"iJjIÅ=̺‚0¡ÿ¡Æ‰DÐ(ÒÀ(¾ô>œ+7´P~£f÷î­V´)¯fëeX ´¾~i¸røö ªDØ8pYåg ” )‚¼J»Þk©têÕªµ&ºŸ ¢.`jaˆ—;ø†¾Ôß%{ÄâU°ø'D‰ÈºE}V.ÀÕ£]7‘šRżÌÇå°l2WŽAB ØnûISÂ~ÎM›Me›ö> IY’Œ åq*8ãï×±Ôæ}OJfc<ÓxO«kn]˜–L v9BáRj¼[¯ ™Ðhù±X«Öátï|,ÒD4"ÙWÍ8ÐÂÛßµk`JØžêN¹ܱƒ¡îÂ8-_5£×á0ôbÖ©x{†t{H'f&?û+àt6Å«H£¨Á¿×…䎑ü;èZü >´ÚµNN)OnC„²Èa®`£ÚNiùûJ¹oß #€-ï£@{L9!þnASóB×Yúî3¹‹…61õùf÷ê”@9(gÉxŽÕkÞC{AÜŸ6 Si I9ÀaQ8÷"†úwCÌðöäw+2ŒÐÇ«Q/¡ÌËf8»ೠ´}Áôß9í\ë»ß)N¬ý»ØIk8‡Ú! v$««ôxoà ªýÍ* ÍÑXûäWQQ¿ó±!E3={wú£SAƒô¦àˆˆ1ôdLUìæ@¼kñ‡­CÀÁ'ƒœï4 v­w²×gT9èâžØ™›—ö¾Å kãK0ãݲqè«[C.9ôtVÐenèJ+ ¢Ø™çOƒâÉ·Å:JîZ ¥5POÌJ>øw '¤ †rgÄPŽ @Ô‚:þËÿ7y\/DOt&|ýô@T ¹Œ“,/¿Dý†Z0Ãlñ¾½>Ÿ„äà“þE}qñ‰‹AO\‹¨ÖÛS=3õuµRŸn<À0upQ Ú ÈR6Ïý(™›3´Jû€Udßß?¹"ÿþB¥ú÷ …ð߇Ÿ0¬>ÀÐÿ}xCý÷á. å߇ÛîÿþvGúïi,ßÖÀZ¹ ÆIÇ  ÛV ”üœ`ކõCýøîšV­==þOþÿ0  tÝÏVŽSÔ¡ó ï?RÔ¹õåLÿ'æøÿõi¸“Õa:1ã›¶·¡¸¶ý/ éèžKÒþ| t¸NòÃþqwšI ªz‡ºYÃèߥœë½ÿV¾ÿ}¦Btõ ÈNßÉ¡âðÿþ?þ/ yî»-Êw ®Üÿ?èÔú¿¯É~3ð–þ›„œ-¬Éꨅ”¨°È~7Øî±£[¢…±»ôßóŒ%fÁ¨öœåÑæÄüØq‡ø)\1¹)7ø“ò¡Ë.„õÕß ]·çÙK·7£”¢£ÀÞ`ÛžÎ"•µ`ƒfZÈvT”‚ñvpH+GÁøÔZ@žV‚ i Ã«øë~®ÚÁ]·À>nB ?¹p¡b^}¬™ÙyŠyþºŒÐcã®»î2óîÚ©ÑÜ55§hÜ®ƒv`ÆÁ®ä[ŒZ{,]{ö¯¨Ñ`Èï»8'7‡Ô¡„^ñ 6¹µ5òÝܨÂÎ|`7‚4¯ïÀž0 SߺÁÄÄ]5\À°lo„vo¸j}þÚi?·jøtꬠˆ*‘ÆŠ»È%nàæb&¿ˆæfñS÷:ìGZÖk·?(îHž¬uI˜9Ž'`öº%®sI7"‘OÝ›šQÀ€ü(l°TþÙm´»d(B:†¦?Ÿ¨M#Ü|GMá0vŽkÁºðXPÅa:å HcÈçnkîÞ µ* Ñcn­wÝÑ®ß0¾… òbN]õsœ\piJÎÌ[ô㺣‘Þƒf›ÈÁ=(rÄ»B¸U© wË™8;Üjò ºÇ!ÑÆh#ßµE ñÀrùÇuûŒ«·qÙ ƒaùüÏ©ÖîÄ®`³t2 G—S#º7ßê:ïbÁP3—×Ó¬hT–n-OU½]ù*OÑ«©‰à ù¯0Ï%½`}Ø„öÄ‚{Ns(I³NTŽc»µ­ê’r#Ðmî Ò{`ªiç†ëZ£á’²¼Ò{Î`-†"tÅ÷“ï“ ]jŸ ƒpËYž U¹"ø=ãoèƒßw¿‡$p–ž †!ùaWˆEblv:AK-Ê­k /|L ,Ø‚ª5æ1>ê·>Ö4zá¼Máá׎« ®6qè<„»¨”L”s— æuŠ´œ`è¦X`ƒ#d,Óœ=š@n=ªûÙhì׫¯dò…ÖM'0¬“ê"]<ÁKcÑiº ž9Pš´sÆåL@vu‰X'P»;‡TÁtA¸Y"þ¸#,=¤ü³Hˆ"äll,Ciþp/†&·÷ÕM¸˜ä9–­dáîWSNÒCã’nÖí†L¸n¸2€±ßEG'ó©Nq£êÀBY±ve|òÞÕ˜—Êð˺uì ieòœÐИÀÝ[SºõÌêÊ`È{ò´™Ój˜wì"~v†œþóvm›¸C‰l À€R¹9€{ êê6§ŒÅ–½xó×ëÀK‚9a&LCãA„ò÷9dü-ÛÍ¿nKÑJ0Î;'˜Þn(âC‚G7åþ³÷QàzYãbÒ­³¯‚Nh®œW4R„°Öˆü‹‡]×$¡Ìã믚7=(ßêÆ‘‘ Z%(‘ ÙŸE•©ß\kbz£xkoÕ\"õµ~ZæÎ¿Ó•?ñÀ[ðˆã<}ŒN–¡åa‡g"9⺘•A»hà ¡‘¶ý‹›ß n¸:£«w‘¼–·Ý¯ÝæŠaHÎë #ÓAŠ3kñ÷Æñï4è°ýŒ¢†Ô¯1Öù]{‰E_kEéúžŽš:ÿNdw#ûæk»¼Dl´#Ó?Îym¨Çç”!¸âùC5‹eO¾¡V8Ý(ºŸVåᆗ¬cùãtrMfŒ‰”±; UÅžC¾io†µ°þAƒNù™…†E¶…)µKàüEkŽ©…v£¥-Ô²ÜàJÀ™IÀ‘HPëM˜HD ûNùuØÿˆ?)•ãäæ)‚ØtñgSkošK(X™˜í_t F”ÝÊ_%àŒkøÅw umñÖ:c•ËŽ‹"@-K3TGÍ8g?UóC ·+;”î÷VLq;S`ƒÕvŪÎ-SåÂçVýÃÖ¯øíÂu _]ßÀQ3–=5u7]9Ý¿ŠF ˆ?éüò‰'ùMRÐøù(î˜7ÒÉ”SÕÚ­ ý]ú%×ú·„æNÓã±ÿ\z¨¯v.Øè®F[»è¢N½Ã¥}×Ä|ùݸ$¨1á´Ÿ#“À&žX£Å­eÓûôÂÍ‚{|d…Bõç8åõ¤S˦Ú•–ÝUÌ=¬³²mÁgœ{DwÙO.„!/ ÀßP®sæ€( ¼9ûú 3þ ½ª±ãåVY)òî7Ä&O;Å¿<0; ÞrùºªrõÃõÙb¥ÌÚk7ë rC!w±³eA®7WΉ÷íwÜ΄Ç\.¦×¾ð^’zÿ¢ØÂw“·»ô0;Ôbû—¦wŸÃ ·\nê¤Æs€I0nnlŒ¹ý9ˆáÚuº¶µdñ"¾…Nqˆ$ùì £ª÷⯴Xˆ^qÍú¡‹}À¿g3çFìÕPÂ7xÁ} xeíõ´›Ç1N iÔ( „¹gÄý‰ ihn‹±oȆ‘»ý¶¤·¿>s,yƒô£ëþð½Paø‰î𵆋˜éíÕ£ùþ& €Ú–eÃ~&¨Ê®•]‰ø¡˜Šuò¶˜6ܽQEf¼J`XTðïqPŠñ.¯eP–PÆÐbMrÔcÇqjç‡òË™çô'µñc>:2´Þ+uÁ±ôáÏ[‹ì+€£·ŒG4q®Ï+l~Nå›K©dqkNÐ ºÊíŽÚè®VWç»==ov-XnàD¨¬öJ‚±aÔYçÑ¢ä%7Îè¸Ï!Yߌïx߬}[Dâ1ïŠxäiàAøåo—å3)­/ÏÏ#“åÄM^Ә܈JAÜdæ6,Åv`ŽÚñKæs¯8Þ¨-‘s§®¼4ÐÈeØ–¹Ìpu’ Ñ9Ž뚀öÿ”EÅ•È)Lü^Ë.µÑPÓ¡r·íöÇ%Eþó]¯›ÎØË{%0ØÞÂ,Úi)/ÊÁ~¶ŒbgÛ­ECìfyÐiÒ-㸡ËØ ‚©$9·É¹Ï"V›t§H7"Hw—”(-ÝÒÝñßç>ïïõsÕ«÷röìYk}cfÍùNU•a(ÈK¿ ØOdDà·KÏ©{à7gy=Hö<ܘ ü%‰«Œ®«†“•«‡ÙgK‡‡ûGG; 3gKv§ÏÖ™Ç"¤ 5HAZRÓ3ë0Û# _fáWÀr`uõZÒ—¦ßØ88‰%yU=f ¯ôŸÍÅdÆàTE ®4%H0e¦d$DÌ~³ÓF˜JhJãK~ÖwŸçä~zž˜äžæ6;>¾xp÷pÓrS9©«Êñ.U„HbKûÒ!8;|Õ 1OXåRÂF Í ‡—Ä®é©<ãÇ¢‚&Z¾"Sƒ%èééAÈAÖ‡—×¥gIe–‘¡òžò lxœ±¹O'‹¢¤fÖàÀô ˆ xܧOg Iô#q¦šˆŒ˜¦ï³ö¤õÆIô-L<´´´¸›ìçÏWBPð\s£+QhiÀÝ5Ÿ6ÄAN¸ø¹w¹®ýü'†>… –æøk –ì‡dX{ “÷Üj`µœ2I"‰Þ¨•±bxûsÇõ¢S—JËÓõ¢šÍtÍÈz¦õã2­5¸[¥Þ–€èÀ ¤/_ÓÓ#cbЙ¢ M‹À?Å“(À¯©C¡¥¥ÌÙªšÚÚ¥¥Š:, Ï@j…¿fÅ“w—¼vVj9"-¨3ÜÈÈÿ½ÅO4(&…õë׿«ä$°y dÔŸE#bX‡œÛ–Aš›¿¯§FÐ[ÝGw¦÷'*ØS+UÙ82ÕR,È1éé^¿VHM}i^vtê9oô¡d |‚loo÷Ð@dÔý?µœLþÂ}¶#Γ^’ÔŽ &™ør‘™®!@Ý+H4ŽrÒ Œ‡ªŠ"C­†õÀy$¶‰gV'w˜H¶Ó¥¡ÉÉøËÜ2¹À;%g ÂYkàƒä0©®Qá­M?ÊÈôûux_Ýõ“ydAÛz•®O°X†z†ÇˆK–#L¤Ó+ÝàaYíúfh¯ ¡îù纱7Q(à~˜6ª”7ý˘Fua2AAAy%™ÍØÄÔTëË%ðÇWçªÍþ*qt$—j u!ÄÒG0IAˆ€bGš«å¨ðÿKŽk—缡ö<— pµëð®ÀYfýü)¾æ*„ÑyýI€|ppPÂÛ[¨¶¶v¼T‹ekg'ªS©•^¯Íõ_mCsó-s…;Y$ˆö8ÏDÓ9ÏâW\뺖dZTDŠå‰àÁ~ÓyrM/üBƒºFcqeËÚ¼+_·Z›U8ü’#BÔFXøe±¢ò¨ J¾ÚŸ–RTŒr&†VÄWèØ Â!½ÓÖ~•%“Çô§]£XUt®+à¥0.R L/9G;·^m†y(fÀc9æ¡Æ²+îf¢ŽO.æ ÿõëW œ'¸?è]{#fð9D½RÉè^wŽhÇkš®4zhk°›]oø"³¢e§K`KKœvxŠX¥aÐEŒÎר'И4yZU/ |ÞBÎR-6cáZsoKLI Ka3ØC æJHMN¾\ßÍ xV033³ˆ¡€i¿'€¨‘i™zp¨íø|©›p)¹oì©uïƒ0•4±ë7ÚGÖ×óœx˜Ã×ÕÕuwù?Up^#&`S›CP@AÔöf¿Þ‘!À…Ý£«ís‹XòTAO¾ó%Ñ3aïj€€*Ù˜ú¡Ñèý\ð o6°«ÛÕÐIÙö೟; “è…HÃ^,„Á=¶EkIu-WkùÙ«á5ˆr=¿!°æ4‰^ò|N%é¸3åeên¯'HØ\‚ŒppxX:š-!%åUÆ^nvöÓQ™lï§ÑtOP±B£DNôU¼´Àl#¬͘fI‡…^Š›åÈwÔ¨ç+̈ ˆfp9è]¼þ”8µ¤úRÎÃó…¸?ùÕÁìM™É%e̱ÝjYoÇ/`þ~‹3Ê%}KþÍëä £ZÜÅ0>è’Žþ8ƒšâž D:Í­ªÊ6@Ø>Cœ„’>-nöÙ¤ˆŸ;àUp¬eÒ¬ù¡2³°th<@(×NX¢‚¦¦4ëm& $$$­¨¢»üÓ¥Z‹À󱯣\ªbEÀÒ}ÿ›Z:– Œîh0Ý'jÔgî}‡‹™½¥v œ5“ë¾H¼VߟQàÆ'///›©’Ä› Á™Tú¿91ƒ¾`ƒ€*(€½‡°]xåpÓʘ¥Ð‰žRúî½a­dÝUH][ÛÊ(<¯BÖ _FRQU¿Þ&ðòÒÕ_¥{9–”w¡ÓýhÁQÿ«ý5„42.ˆp<$YRÝá˜Ñ‡gZ¼;:ë’{6›STô ÑäCÉü½ÚnHÌn 1€wƒCCRÁˆ®'=MÛöá½êõþO÷q$Ü`R\ê,ŸX׉6'8÷¯ HüÓ8IovÇül¶›_«˜ŠàAUf4ôÔÿ-# $› ~üøa3SNò^CÃM˜„9*‰^áïñ~FêêêJÀØpÌ`äd9¯Ûɯî_w_n¡W8?–YójeŒõêr;F„ À'‡|¥.) ·ëó:>è]—¿ßT™Ž½{ë·ïßý—[iü1 iÀ´1ÿÍnâAÖžÊÅ&Få<6tþ]¦¶¶ëêê ÝGo³<ÄNÚ`#mí &ç1T-ôj‡Q Së¬FÖœnç äz)«&MŽËv'íªB6òÐŒV«Cx»ËÁ ç ÝTÓNRÜñãƒнõÅU„÷c»Ä©®/ÀÉ)9˜Þí«Ž”G>¼ŽKÄ®ú¯€ôR~希 fêT/ƒé!œ0EVŠYº·'=sâA¬Æ¸2/œ49rs;§éÞ –ƒ@ª¹b,ÖÅ:TåÿftT¶P6ÖµçÏ…‡¼ªêJ3ðÒ>4qh@˜áþ ËD Ë?ƒ–Çyï¹7V” ÆÊw2Ðj¶au Dì*ìã4ÐÝÐR~Çr4ìKß¿ôü½žî¯¨¶wwg½à"8%`Ã2 nyŒ­œçQ[fª„Êðì8ÑÇü‘†Òß}G¼?â\Ókˆ7!áLâ/È©ãaÀ²ÎvKYM€Ò+ðó8.ÝðÚÍ¢tñ¿XpÓ G†!Ô»&Îv—8&þäÙï0ð‚óÄén2Ö4VÇÏbg›ÞŽtU-¦L|À\[jÐÌ+õ † >\`Dÿ+ wHOÎɲ¯b{šE‘ÿB1Âû^ûˆ™ C©JL— {d|SGŒk^?rh½.vF† ýØ’ÿ½—RyÌ›èÁµL/ôáý&fëíå „›s0333@Vtbè¦Úá‹G²ªª˜çççÚ¯¾ÒÿÛðÙ¿`áë< ¹$þËÔˆôÞ2G½y ΃¯‹#e8ƒöPùH0ÈY€¨mrL$qúq!^^·ÍV·Ù iÎIÄÙ7z+Œö3þ•~YÐÇð™!1—å9Ÿ+÷ƒµ ¦¨Ö6SYYDÈ_K½œÑZîîîÒ÷ Òƒ<‰È$±Íød~¥šÅš09˜½"C´AÒ=ýT6”2ê ÙÙ±KK†Í†ì@"žÈ©'/’òÚÖ;Î×Z²I®€z ¸Ñõ1XI¡çOõ®Ö•ò“/‘‰òãs%deÅ(e…b¨Y¦]Á1[a0‹DAÆ#ºëóÖàïC7XòÝd«ZódJaŠÖ«Z²Á¡â‹½El€<±$™¤P£öJ¢oî½f@ã•ÙªŒû3Ñß¾Ñe»/àÆ‰hKqÌÏÏ;·–”–š_|WJr½ÈöXy+æç½G!쪟ÃTªÕaë~…áKPÄ3/—i9!<ÄœˆzϽM½L›mªÒ(3—y/þãÆíÙ¦8¶2AÈZF‰Ùé]–ÓNÒÞ}Ì •ïŽ{A šyþˉâÃ~G„i;ž˜ë™Dÿï;!›¾/,¢h´PSjlÓh[Ù0ÊUžaËs2ìqëbL^›Cês%)ôôõû·oøN€"¢¶¹’èûXñb>5.L1öü¬Çl»CA ØÞÆ9˜_ôÑ{f&K³®’zrüL…ÁÍáÖï/–·Ñ \/:,ºæSCMtÈžp–ø—¿(e¶‡s>e÷[ì×”ÖµôTaLìO#iÀòQV6Œ‰Èÿ;¼ÙþLÖ5Áˆó.ø¿Á¿¶²¸±Â¹/÷ïÌrAƒ?¬ú…Sy%iøìØ´HfImÜ‘-$í•”””šŠÔ}âg<[¢^ˆQo,1’ÄþNܲÓju+C '|쟸Î݆*aË¿Æ)!°Ïù§°ÐÛg¥Fú |zu;Šï %bC`_›_×5ýl’ª:ùN4í@ĽNýI‡Œ ']ªC5ì²äÈ¿?õƒ. ­äÀYu¦ÒÈ'|øÞðÿ>÷i;sÛlR—nÔ5&‡åóKø$õÛ¤ñÓ_\åVàò8ð^ÀAŽMd€-h†âÐl@3‹Å@Ì'h¼-úEÊ»!+ê¥á}cOñˆ(Ïy*w$Ò>`âVÞÆ÷öÔÀÜÐ=Y@*K£±Åv5.>ßü+ÎÝA6FŒ„Ú"â©lÛL2`×Å‚2Íq8ÏŠŸÌ5mîñ/(xoâC~¹4ósWá?´ƒ$Ñ_•µñ9¼Ò”ú_ ½AºÒ”  ^F§>Ý^›üŸ\®s|šZZ(“w|…ÄØÛ3hò gh˜Ãþ¬u“tйÂ&‹5"‹½!"Þå>V™`›ñáà œˆbíï®?ÿð@ödE°é4d'ttBbbþ¢>±„‘^ šv•±hŒÙ‚ J íÿè'ö$º²GÌtL^¹îfdça‘3"‹JB¦ϦøüÝþ;|„ׯ_—£_+Ý©J¯Î*IaÕÞÇ).Bç|,зoߨåv´ð Ô“ìfÊ[´XzåN«2"ha¥Œ\F-!–;} %±{p »Z*C£6”špA—û…¼ÉyÛ°<-£åµ ‹ãIëì~·Ž´= k§lTsD"Of6–#*ðiþdŸ¾ª…µú§:Ó ÷­™>¶ÉC¿Hwh\”ˆ‹Lüп—O¢m²ÉÐAÄ¢dÝ¿û‚aÁ„-¹JÂl±Ñáv¿¬ªÚeWõñv3~®Íƒpá!þ(v=þû÷Ïf¢aTp—Üõx‰Ä¨ÕU²X5›zè[* qïh*Q?ünÒ3Âüp\5h®A,–qªæÞFL.“f†‘@ƒµ"þ·g À“„mÏ·~«î™pö#ô½þ6*8›¼™£©_Žý5®¹êz¾gAEE=ÝŒGÔòßL´YíôK3 X=\lÂRJeï?ß:ë'2YN禙ž­6“B'åApHP½SúÞr÷äÐQ•{ì “ˆ<ßnöðÂ’^··‹ˆ\ÏY¬ØM(“Wòï B úäý®,Q«êŸÚ:äR1š†¶Eµ³Û …²KJ?÷l.°J±Y¨ÿqä10F»±hw"—#/*—b™%ä†Êžª´Ë(Bª§ûƒªÞc@¤ªèÕ‰sâ‚?!¢€â<±Aì©h™üN²’’`à…€ MØ÷9é¸á4í†r6°û߸wzö‹ÊÐs~>ÒVöÀ›®ýLãùˆKÊcƒ}}†˜Ĥqš½•û8]JÐh?¿a¢;=¨~9ñ½ù£ÝšÝÁºp6{³¡ª@6»@¶ÖÊÁÎH&=Èâã7º'r…¤wúúQ¥¥ÌËÎLeXB®½ 4RŠõ³Ý¸‹ñ<ðØŒ@”” # ÜÖ9³®Ëÿšx7Ø9ífXËõê^ÑÊæöÿsÝxºYýUk9tz9©f°ðL¨-±j1^Uǵ¾î¾¹(rùàøqhœÿJ®É×%N¨p·õ9%&Ël[¶ÈºóYø¦ @!€{,¢œŒLhS ½‚Îööv…!àê ’Áˆ`¼yP_‚ßÃu~^h(…­PDí/ÈvŠŠŠœdžígdsuÖjS¹ç[ 1Tâ”ö?Ñ8Ú¡ÉÉÉ%M4„§êw´pžgæ‡Ëmüåc[>Ï Û`&L‰‰Ñ7n¹lA‘P< ôèŒOJäà]KuªVö{zzÊ®š°è!¸¸ òÄcIH7•/tÖ$€bÕ÷B¥/WËè5+kžšΕéñR‹€óhÅïfÙ–Ùk½PÿÑÌÇêtÀÄYþ|xs2nœí±÷UA¿u:Ùæ–)7x\€Aì)2™XX.0‘˜¢þ¾bcsXþó•åáêxÙ‡H¾†N»\Wr ‹T]W7B½PAD†ubÍçå°ÅŠ Š™Uÿáù•g¹1¿ˆøçNÿU£U¶#¯®à'Ü >9óÖb"ˆ­¯²¶6!Ë8­  ×HË‚íü|û*  @/ÒÄ·[_ÔN{Ð8úZIpä¦È¬ÇL¼¶¿V‹kðPñŒ°Gd\É}ùpX쯌ÈgÜÊ’ÿƒµµ XB=9  / k4é´‡-r ãi|W–üôéSy&¯.«n£ÓjàDBžHÚ‰$>¤±ÚNPa,Á™?œ\ Ê7æXN$ ðni¡_ 6ØNC@îtùu''uÒ"ÆØ+¥i1¨›¦$—scБ/ cp|È1¤,Xÿatм‚’Ìy\Èdz­ùt¦¼Î:“Œœ*ÃÚé,`üýœ—©mó "=+[0û0[iäy1Âo±a†ŸpópÒµ €MÜ7¯.\¡QÝ H«Sá)GcJ²9V< ¹ã^"wÓ½­#¤ _nÜòÙRŽMØFžÚ »œÜnûSiåÄ$1Þ›“ÅjüËÌüYcܨÈõz…Ú5ú©ŒZhgG­p¾_ðC÷¤§‘¾À ¹TkèáâÂw(zB‚š²òDä0À´Ãä"žØh„¬nÜ´ˆ«bÞ—L°‹×Ùò2=ùôzcÙ-s‚:JÖ d³è|Œ”ÑqošSÈ„Z[WçF ’ ïU— ¥n„ ™3àùQ—ŸfÃfÀóúpžæ¤Á4dpütŒhy££_cê¾Þ[Ô:Êúž ;#·B‡jϯ›òAoGFb½T«ŒÝ,š, ‡: œâÔdƒ8:oiËËÖûé’¾±?¾±ÍŠÿÅtÏËÉg{NIàð‰º¡^Á9ωŠ '”sxšºIýúµßb;TÛ‹X[›•³j‰>Ê8äKI (° fú¥ÝFœ{¶VˆA¸ëõhÙl!7PI¦ðÓõ¢Ó-=g?‘¨LHšyå0éÖ˜#ø;Z=E¤föN8“K.ž2v¯4`³8v^‡ÅóŽL_]öÆ<½¾Â „ûËvßÛüxŠ ®>²R¨/‚ÍäY[[o^þ›\qƒÐ+üQQUedÌ?-8Dô[ã2Ìz[Ó>, Èx­¥R …0! wj{& å°Xõjázëý¦ðe¼L‡£ê Z_ÏSï¸LŠ%z‰ÍeÖRݱëv0Z”ã)õ uâÞÖÛøO-ol·D[­ >A£ÄŸB4²ÚYsyQZ)ì]G^¼o D>“Ï„ú†›Û-¤´oõá«I»ç'¥FÒ`ZåP„`ra)|yµÍÑÙ ˜œ3`veãÕܾz À«þè‰^Jt¥ÏŸßPú]ª·3)¯ˆº,x iˆ¡\{j «îר4igé —ˆ¹uÆMâdèƒð!›7=­‘gx¦Å²7z·iÀXHù÷¹ë E;¨ëÇä”}zëîÎç}µêÿtŸ¯–+VbÐäXž™œF²1‘ ô0L ÒæO§‚ÚØñ\ Dzk [v~¼ý”ý+_gT%à°î¶íÁÏKº²Bwé®x^‘¦9KØxMã€u[˜²Œ Š„g¦§§GþýûÞ]`m øÑsw±{Ó¾b÷±_¢Œ(âúæu±CÌm…XΣ6÷õ£¦Õñ|©ß·H UÆÕŸ6e—|/F$Éb…›átŒÜ´î×éÞVÒQêµ¹³5:,Z±8YYYÉÕÞëûÀ_i"”YÖSK¬ƒýÌ¿…¯ãÖèPýq]Ý_À×îtýå»JfJ¿¶5ß0waU0ºì}PÁÄÎ>| §å|C·i­i–yù¤ää |f?ƒlÆó$çöýžïv¥(ÝTrƒ¿«å:²äö®wW›õ¾õÏIZ-ýõÛræëzá³Û ˆM…Ÿà]ÔlèÌ€nd H¸\4 ÀÛüyJmîG;ñTâ9Z†ôt(ñ8Àš†Î?jeò«ÛîÉuÜõòœàó$xÊ·ñ”¢oK7ÇÄ_ÐÕ,6"N:0Ë´+j¿Þ,ØUÉD\ÁMjj]žëÆR‡8pÂÄ^¡µ!êŽÚ®7ý2„)H[zÔOîê| ³ éUR`ÒËzàCppAÒ=KµX𠀜Àñ`kZÂ}׎þƒá¬·þ㤽ϯÿF“ÓOŠ:1×:4ãP+ì:·ÀLŠñf¥_½Œý’#?¾LàÐQ؆Wg#Z¾ºîÁI8$¯¾=éŠa{WŸ‘5ßÛÀÞu YoÄ¿ÿ&¤§Ã6+¾yÅüøQ^E…×p•šP 3Z^A!pñ(lòß”ÿNG8&Åýåá|ÉSL<’ » }³é×#›H™÷ý-R:âèšû#l5L¼ÜÌæƒNXÇ0Ε;DGïdÅF³muWSÇ?iÙRÐÅìÜ•O‚—ÇÅob¬*ð”.VH;3yÃU‘ºÍ|¿[ä7¡\B°÷º¾N“%¨¶ù+þÇÅÞyÙ‘ª’šPÅo¸ßLYXÖÖ¾IÌÉq¼uÁï]Jù¿^. ¡Â¸­G»·?–ÓP­Ãz,‡ Dȃý¥f½½š5 f÷,mH CÍÏãÚ.Àä‹z׳³MÑ€:)Gì:ü¸?å“|¨S þ 4TF?”°ä˜K$‘D­PúÓ£e9Á’S,rì†Pú¤=¤´âµˆ¡ R;É8z² 3q׎þéaõ²K€*&U‰àÇ{(„ÔÎ4žª³„ÊÌÂü©|ƒ8ŽB´ÔNêýû7€XKüú5ôðƒhzzz­"‰ÄŠœ÷-ß‹‹}d@ ò8AaŸ«}K' Ô·H>pþ\Ø/ªôR{`F2¯¸C(“ À69`„j¾zÜž®¯àäxUŸXM¾HïÚ“IK†t扅§‹æ]ÝZê :¾¡žcéëïCo6¢ü´Áõ˜‘ÚÏý×0>§æ¨]òæâÙNe6¥:ò´mC`Pè1¶â&>9‹]ò÷?ÜG/ ¿zÖ¡Á?ïû%Æ·.ÝΦ%)'ÆÞ®9‡÷á#T"UçÍŠO¶SÇÕÌ—ñ.†sˆ®¤òœÊùž ^&IÞÑ^sùn'Ó)Èx¤ °Æf¹¨D‡Žw™¶t’\-ÎÖo—'ÿ\X<Šr{®S+¼Áïß•L`@aWSH¡©©ôWbž"†“93AÔhbrnYJXbLb&œâcy‡ÿ44{TõUç’/š,$¹ö£›C`ÝúÁ*Ø¢©§h/š¬¨î†AáíG=Å¡?ÎkÝ`ù¤Ëô-OxIw÷FþïÔ¸\à$zQÑ凓÷êÉÚ±dü9ž§kd„¬ºÝ„ô8¦`X4Ìú£$Sìˆ pýüoבW_ÂÈO+ÓˆÙ›ÄMíY¥A]ò6|©7ÄòI[G†>ý Å|§“ÜŠUǦ!nžü™µÏm`™@V¯‚•¨uÔ¹Èá —Fæï_n¢¤Þ.…Ó™IK±¾Œ2q~Öà(cfù´5ˆC.øyJ8 K›mZ8¯";†˜3ó ¶¡ 2Û¿ÖO›Ëu¦?ƒþ-ñÓà˜-Nú¸g}7àåÁdܲªýüA÷í÷ûe>s7K.X §®\çÃ,künk>a¨_'Ÿpw‰˜¿<ÔíAøÃüî@xWÍû´ÝfÃRIîGÌp8Ç&HGôŠõ­ŸBÔø©žÙIu«vWðàöX¼Íê$G¦šÄ©ƒÕj.½BI Ó¯u:Ï—L0üɆå¼ýä¿|Y.°lW0ðI€“\ÙndPð>ä£b$è¿ '8>‡…“®±’Z€1†djÌ_žŸt›ó+ÚE}®¥®:fµšƒ%é!Òañ¦\kd»©éç¥4.ä+f™™¶—/@ê(\_?órÞ8{¢—mˆ$~ QÃfêl@vý—ór×òÔ0ŒXÚ°s”Ç{F4ÁCiß«±xÛÁM³†efT͈ü¨FÃÆ†¡§—.¯¤ÄMñê´¡7kkëÃI½²Œú{€àV3ùVú›–Ý PVy|Vó¬`í2èžOW³ìÄ6M@é`5œfæC PûAå¥SÛ†ÅÚv(Ø$'ûü—¶nUèPQ\:ÉÍìƒîûÈQ0ð^Ž:nx|‡ êÝ뛬2´–ǬuþlRïþ*Ìç”9º<ãfA‹ª€Ý(‡ƒ×@Üõwš‚eÎ[ ŠŠ ‰‰11èËÂX²èß¾«Žïà½&KÊëMÙ-ð³ ¶“€| ø«×óþ(&…t=_U™9ª_ xÓïŒfÛ±œÈ}hµüÜÜ’¥í¶A„ªSÈ:˜?ß’€ô·Ä† ò˜k!MAp šâ2¦·ó.ù;1ÙüÃr»~-뀜°óÜ'íž—QyÒé0õyôHã'Bòl·,õ®¿§êhæÔâþxýZ^EI*é×bOʬh?-¥D& µÂ_#»™r½…B¹ø"ÃM× Fd€L×à ˜Ò>8 ºŒðÚ,·º¥ˆ®ø?8,–Q­øœtô\:“ùO¤‰gþ*/ŸlÄ"î­ÂÀ`ŠŠÃÉ’ Âþ+æý¹®ŒŒ{ ô®{Ê)—BJñ€Ñ¶{¯¦.5\]/¸Ë»~ò˜ÅÜŽã&ç#¦L=iNƤ‚Žw¿Áã~P‘o1dba øÕV¿”¹¹ÙZƒE!©U§7ÛºþÛüÝÝE:ÉgüSî[òµ@`¢»*¬Ûæî0¾Må½—ÏÙøªUSSÓx¿ÆóF› Ȭ±OÅú“œbÀ=àñ é•j±ëÝJ‡ÏfA4;ªEt’¿¿&¥ˆ ËIÇÍÊ8‡$ 2‡‚¼uA‰lº÷aÜ´¸¹çáA  äÜ¿žA:m}b n`€ð¯žce ]òðœziÞ«7NYˆœˆ«“7±¸{‘|A4“MM'»§K“/–jÐ"zgÔÒ,U‘!¶‹4QAAÕb‡tLffï**c–uˆ<>lÍÈSK䤨x 2÷­ªžoý^wÐÄWÇï¿þ.(3BÀ‰Úê§î‰¤ñ¥#\ÞÞàTát§šù<ˆ-NºVºl}>tñÙÐIä^pð´HòyŸî23 ”’­p-:é±?䔼£š¾ÒÕTådº6O ^O€îÚprnòãSÿ&E_É“@¿çR?T­Ø`­éÑË ¯[Ì&&\+ß÷°h,‹Ív†Ó™˜™Q[çj,&ëÈÙÈÔÊjÒI.þtù¥¢ÝcÙ-õßïÇ9§æu¢S.}dy©ÕºÙ1ȸ4˜2÷þ\N‚{p…ÇD‡ÊQíÄÄêq4½kêRéG|ù|gבØÄ?§äÏjBŒŽ,a°ýŽSY\û2Œ­Çxì Ò7Ö»q9Ä/Ì­KÑ1 —WO&d3hô…@í¨´ ¤ìØVt$“Óäå^g|ûâüüô´+¼Ffâ ¡ÝB,øùCˆÁf¯£¸Ýmƒ]gŒ+HÜ! 2~~ÛŽ•;þ.m¥«—£ë¸óEcùáùŸÿj.‹OãI€+|ýËäÍüÔ ½O8üã-™ïNÇCÃàˆóm"R­ŽÈ›I8K…7kŸÕ j\à Öú¾œo­¶îdØùó [Èî©`À0 èTbK×í8c¢7ä€6!ЖI¸cЪõÿ ¤Áß¿k¾òO̓Üw¯£ÛA ~ê¾P6%Ô¡kë“BD¢Ì Lê ¡ÔD§…GHxòy©Ý%"vDAÅGI ~XÆÛÖZ„%q¨ø|ãÇ€nÝafàè[°qÉæxÙeçt™´Â¿ä†öEM$ò^üH0Ãá>ßY}H{ôÿ˜•ƒ”æœ›ÊøxêÌ./iñd$ì¦/Þ§£†Yóµî@3{­ËšÅ5UÕ +è–H©IýcÔ3´Uñ©™¼Sœø%ª‚÷kgû@›•D †òX×U•€1(ý¢ëÃÏ¥ìǨ‚n”c®=õ<ÕÔËW{ç™­/ßlA×q;¦áðäq@¸†ìÅÿ\ìf+c sŽbHëÍû£Žýî/õ¬ÿö‘2¢Â—ñû cas³ÀÞùÕÁì/–ªvÜB™\£6÷üêêq핟ÁHHíýŸšgà9¹÷ý@þ´P‹`$™6ôÚ¸ÜUËpS@ðñò¬yáó²íÞö˜Àw[,a  ú°ÿxùÒl×½Ë6~õÜÑ4oܹC`J‡Òáô÷AŒä¢ª“ûgü_Æ0ûçr[(ïÓ£$ÉDå÷ëßEâɷįĝ_Ⱥ ”exG×.±`Ë Û1ˆ!á~[j±?õcpdC#Ú¼wꇆ›7½B§J@A¬ž¦8Ä $<¢Æó’Ï1>r¤ƒïI¹Œ×F†y€'&ó¿6t#-¹þ¥†í)‚jœyü›ñ#bÖOb‰¥‡&Õ›‘§d„“êˆQPqÈh÷ͳ§K…O•¿G³¦{i#2à ipKKKCz‚© ïñ·ßÿì%ør`‹d¨ìùظÅá\ Í•j8U\§ßCXÖÄnw Üí^a¼ýöÑlÕ¨øË#r“||"K®8æ GF$u­µÎõfnþ ²¼ñl³U5¸ßnJnŒÔQÌÈsæôÂâ&ÉŸ ¤"ïYªý8p/#ê·×?\¤i]ndöE¤XŒ#p4íâªmpã(ó/‹›Ä—°ÛɹÛeü|jø­Lf"â±€VGêúúQ‹N]Ëן›hÑøŠ<ÖiŸ&èòÝCX‹åéÈMäe9]êÉ]ó `ö±01ýVB0ho´Ã_­jj°»Ì ®“²K¥·J¾ÓX ï‘I¬lÔ ­9O\”ÛW!#e"É—(þ$þp,ô ”V†²^Âíu€ÌãÁ›k5&ÿ®±³\dR˜rŠhnzßY%€Ög=pºDO{çZ\¬Ç·¹ß¼9” ¨¨hLE”C#ÿÓ¿¹:öŽä›‚ñ&¾¢Ã ŠŠ¨YªÅ|7«‹¯Œ»qÄ`£’ Ç\>FþX“ (|Ó?ɯô2çôô\ÿÎ:=ùjg£tS{7W¨u’[•ËÖ;S„Q÷—Rƒê§côVM÷¢È'q"¿ÛÅà$FÄFwñð*0b§úIðö _v äÿ$"ÑËçÄ&µØÙ-¨@G¾¶~ýo¡÷Ÿ^ow® jæƒNiH7 ¸¸‚…MW!.Û)&rgê=!X·w‹Ëî«ÇæNßÓŸH€Õ0ß¾9Z$r,CH1ö\G¨·þ3^çÝ;:zGDâÛxSU”îÀqÈ—xCò‰¥×iéáÆã‚Û+ô¦"ÚÍ’g…à²ÍO¾&Žf"BßÛIFùâ›äO,iÞ—›Ó-uÕYþ0¯èoN-(ˆ  ðµG"Nаû¢& 8{‘½ó$z³ûË@öΕöÑ$‡&½]NçÖ­³Šý˜3Y¬†æsß¾˜HØâ‹3Kéx cÓ:8O ª¬u¢å:/Œ9×» D“¥‡ÙcŸUœÔ5¿e÷|¦†.ž•¢Ÿ&û‚“µL-Imîü—¬ŒŒýìQzÞ: ´d¦Cªºž½åÝDN»áš¯ìz§hi³ª½ÔÉ¡zñ¹2<…Ýö× ÈÜ:yt^$çƒ$Vn £ëzÞ«ôËçŠp¸ö“îÁWµÙwÐ0„9ýÖ±#ßdcÞR‰¿¼àׯ0qp`iÁO!™1b⇰9‹ö›`®ÃÇC9“&¦‚¶ç÷²Çj¬Û>5#ã¯S.?»t Rhï:'9íø(ØO,¼ q¢‡”;oN<ÔTª›ù°m  ŸNü(¼O _•Nô7’Vª•†EÅÞ%¸=< Arûg…‰.¡ÜÖ£Èp¢(T°ÙWÐÓ# Z£XÁHîË+NëQròz¨nûù¤šøühfVVÌ@,YáÇÉï6 õ¯3xíÂÙôód¢ m&¿cÔÖÕ÷0ÚUàç>=<ìN›øœÛmO+Ážà!¯°”­t‹a˜ˆ#ûì‹Kõ2Öóæm³q±þ’\›E†ã€ªœY—âÀöÝT¼öòÃßê2òò¼<¨Wwp6FE0hiiÍÕYc]Îoz¨%Ñó8­-4H-6::’Ìuo<’ÁËÍ»ŽuS³wKã#WÁ‘¼]ž†û;–f;ÒK°¢C¨Ø×ÐëOü¸Â–ɔ֩@LÄÃ`zjÁy³™Í*.ÄT\tƒ`NÇÆ°~Ľָ¾sÑžrêøU°¹Ž€ ´Yí…íEUµmüUâ±²ún–W´hDb·åZ×¶×îêo#ö©1IëÃuJ¥Ñ 'M6 ÜQ‡MÙKdü­UQQWÿï'Ž à­+æj-•£ŸÐIÞÀ÷†a ©G„ì\þ›œkþDÇ縑jâ+8à…{-SvàÝfÖQ@ºRÖþcÞÄݕا¤nt\kÅJ`Ÿîþ0?ë ¼B–jwÍè¹ØA³ÍJÊè:‘í J‹*Ðè­ÆI.àÏÔ|o×;­Rrt=~&6Ñd4d'‚íf-6Yz=…ÈÐ Te°˜ßýZ’{`ïú)šH)îé2œr0È휈m:™FoáÑImêØûÒ3ƒ‘ÉÉŠÞÉŸÊH(цÅYïÿ ôÚÝû™WÐ/¥ªÅx€5èË x&q¥hiiñÜÍöp­” â”RÇ4œ°ûa7 g`-_—ûÓh~×2c9¢¡×áð ²5§­‘P(ûH懵c¬7TGøÄæ¿_’oà#‚^æxÁÔgÏσ¸I_¾ÀÙ䦒2üWqAÅ9ÞÌßúý?è Úi¼\¯H­’ä¢Þø€w‚.÷ùóX\ŸŸ,e k»KåÝ îU¶˜Ô Þ!ƒR¤ÀÊoÒ²À×Ï ~8àÀ;ú‰Ÿâ·c. O"ðbPxê׿ÿ¶O3YÀâŠÄF•îù¬t\ëË»îð¹ÁÔˆFn —0¦LÈD›úA'¦ï¶G…¤š…G‰€I7ê±þ£´´çþê ÆÿÉûñ"÷E:žRÔyR…??àå¹õìc(ÿ¾ÿ,Ôìd•Så)׆‰úrE|7¥éŠý³Òóïà…D„ÀÀw¢ð …¤Šï'©¼IÇÍZnóoŸSëò+¤F+ÜöQ‘þ“4…-ÏŠÆÒoÒ®ÊäGÊà©á;ͯz8_øòxéýø±{'nfÝU¨æó¶b¹a nzz:1§)ȱýLÖõdeÙ®$f4d2ʸ x[ØÞ¡É¼6‡Ïf7&Ù~‰y;ɬxeNØ:Lt‹·“_G|„òªâÃF–R[ûŒˆ ]tLüx­Ú–ûƒðUMLóó–Þ¿1̳Óɳ»ºHí‘àx%³½ált˜Ž0 @輓}²_­ôw?ALÓ ëUüøñ‡GZžÿÓ}óvŠ'æ<ŽKid¿šð.ËL¼Ä,®Hcß#«å‘ ?ƒAÏžgí/k/ ‰ŠvЛgtØ™µíõp*L¯š\€'iùùùÕeÂÌÂr¶“é´ÑOdÒ‰ÇØ£ít±Ó=­§cüß”Õ`Z=ßRéÊå骳~²XK²ú]µ;ÛéÝnwÅzÀ5`"η8,€z”•l q ãr«×ÉE/(G‰ñ)½õ1}Mè9§‰8UÎ7¹ݳDbÃãÅâØÛðå¹BÉ…=×þBúñ `UPRnnüÿôV«ÇI@^¤&Oniú ;Àe¥sÍ`d\Ÿ6¤W:„·Z?ìÍ`4 åL7˜,þyßAlÔÁýæ ×ùB©Û„©Ûe,ƹއ8µ"¥Tó‹l–[yaÆNÇÍ'’]ÚÜËåù6NîÞPHŒÀ©Zj°EÂÉ?ŒŽo™„6õÿ¾@Ií`£L9Ýç&— ò¹9îߟ.ƒc':<Ö.Ó®èYÑåÃαT6Ó–ìÊ#çÝÒ.× $`ÑÉçÝYrîÅø©ª€šÔÌÆIÀ‹°v¥!Ég#`´O,@5DÎaè!.4éˆ\ŽÀ:«QF¯'ê¬ÕXõjé×jE} &~E¤Ï] Xºö­-,¨L§ r³\üAIK‹@¨àÑla‹˜Yu-­mq|”ÚçÅ_Ô·f}šÄ}Zv ;b§&Ž kHƒ\¸bÞ ·~2Îò©\`ac†°·2½¥C<Yûª£YÕ½ÔÒJ„h2ûû #—×ùCïEG!ð‚«<Ò/æNž‚W𰣈 ]c«t`S¬ `ôƒ@:žènz¶Ñþª¤‚ð|†µ6!§uãJûNû;"]JJé.Á¾—%û÷£c¿Õ­ØMC’’ ‡öÔ¢6KõÆîß”à°tÄfÀUˆ¬†ÈðÜ›«~Í»9>°æD‘—Ç ›ÅÆ Uø[§ ´êm©îÌÙ[úGg‹[ÄtôpõA8S*\|¢©ïËÓ 1—9¼ÿÝv*ôÛ æpNEe?•Zóòþ߶Ŧ²è£Ãy¸ÃU¬Ç³pRuªý‚Ðôt‰:«ý„X28•LÈÑÂn2€“¤DÆ;ÚîçÐêùŬëê$iüYc{Ø{R;ñù§ÿplS—å³0Þ ¬7O`§0^ìm®˜dáŠS”"[îé[±\õ'rñgd‘»oB+•ÙÞ”=V±ŸzW:l±Ú•ˆÖë¦A¨gôPÓec¡ü+ï•Ñ‘Ûú4ÄÖ´vö‹JÎÒ²è8'11>jhU‚:¢Žt7ÿî%vØm#!* ÖM,ìn/öPïXq­)eºI¼äØÐä»ìfëð—¾áÆÄh¾NŽ"õdNýi8#Ko™ÏÐ9°u·;ŠÀöð-5ST ËN »óïÜJ­´åý2üë[‡6bî‹£ì 2¬‘qðoü€\ Ÿ¯³FÒtœãœÞ¦Šu{PËѼA¶™FÝ›”ã•ç9hucqž5Ú×} A™ ZÙ[6xòKOURèê9œ•ôG=T`aGSÖ' ˜žÔÉ©·îeq†,$TU1ÙÑ-·ã™Æ—êtÛép¡ªÿ× ðÐrÍᤘá½î+ J)kÏ'r ‘Goþýë®ÿ8ñïŠJøû5ÐSµ‰¬nûS’€áTLå·¢"::¸ÿþ­¸„÷Ü;¾^_O@@ÀÄÂÒ»Þ^¼5´©3Y*úZcÊ,Høø]áM&Oä]=ØâWéFI#y©?%!Ð>ØŽ‘l,i(›A#¼¦ãšÄÚQœÇ bÐP‘ªŒÏýdžb2Ì÷ïß;ÿ+J-°Ëiªs"_ iªÊD\ä+ÒàÙæ¯¿wß³~"Ýo^>û9h­ÄîIBvÅ(¥çVâ¢EŽÈoc?­Ø‰j%€9Ï€ÐòÖ½O¶Ò­ˆñ§Ö8k½u)ôÖ æð~ež¢ é&õ&!4«Íûwï >Ç-¿ê 3Eßk™À·0aÀU;qzó`ç±ãüf˜ÛVnr\~{<-õç¢ýB= LšÁÎl§š„‰•k±˜Î°ºmÙÔÚ~%%ª èzz#((x ȱèãå6ƒKŸ“…†0&‰øêïS{Q«Jÿ‰‹»7ô òüÔŸ?Ñ Jì-Ò¹ð Ì,UFcï »â/ÂPGý:«îpªR¿´ýéÜûi×uc¥GHJC)l\±Ñ©ÄȀјÀ®tøÔØLвêVƒúûûi"ªå¤ÈŽG®¾‰›ÂÞ`òêõkXÛ¥lù%"'²–[ÚŸÔoÎEÚ«9½; ˜V<ÉdÔ’“CF2ùÎ@ãRÁÁÀ >^Ÿ¬ÆOÊ=\©–7?{Oo›«†"šnʺYdµ±ä~ùŒC'kÚck¨&#²p?Y‰Ü€ùõá¼€óšÄ;·©ª*UŠÇ®4—Måwø¼gg¿àð\ãÅî™` ¨jÄP‰M°îaÈæNúÔ¾3¦w¶lªGÁT 8¼ËãeaêÍÜäo£U&õLµ×öyrñk1/^»Ùá:Æ^°Tæ®ÈÖú ÀâØ@×óÇãõ¢̲ÂP¼rsM’×}³ó!hq‘˜^!V†‰];œîðå|å‘ù±½è¥«Nëùø>ëƒí_§ ñ„S¿ÆàA¾à{ ßÛz,»%ÚMTð—µ¥r`1­}zñwcè Bæ‹ë]çA˜Å«Da\Û{ùo’ëã_ú^.–9cÁÅ/üQ—»âÔ¦¤ ¶ ê°\¤—h9ìŸyL¨ßU2Ã$ƒ××~7moƒ‡Råf¶±@³e“ãdå“B¸,ÖNº~ð¯*˜b4ßï—Õ8,ò‰Ü,¹ø³¨²Ïq?å+—ôå «DkÈøP‰€^%iå¡›íLd1þ°t®õò: N— zÎÉ”z‰B¡†-Œ<˜œMi¨ýÜþ<Ï>[Çx:ÂoÏ™T®pyRÅNlî2&J$##“ÆkGh;ß@È›¶µõAä~¯ðö¸íÄyZKgžYCeéstë¢ O˽­é•mž£‘Ï£jVÉâ{Ýã±è"kO›wV¾­êè €ÜjØq¾Ä ƒ¦µ\1ŽÞ$}sä"û˜*žGúbW©žzݳs§€Yàû0ã÷¥¶·t˜.%\bdÀËÃjãu°sË”ñÝRK>ßNöNb&æÚ&±À¡ížºêÞ ÌrïçÇDþ…GtP§*Fb1”ê=g4ußÇ€y·ˉµ«êàË»Ú>˜†KaƒËñQ¥ÈŒ¥vñ/àø+.*JórÆ>G¼‹•‡¶c—ÿº-Sê“âY‡<Ï~©kj† bêîèà»]ɨ1 Ûzæß+ ›Ño¾ÛÉü4hî`㯼ZÂ?FæÍ7Š%¹ÏÈ…c¹¸?yoF¯8 ß58[¢X¦¶Ý«:…‚b/œ× û×âþKBN35^V1Ä\´çJð˜ïu޽ÎÖžn¦%bA-çX`ÿ٨ٯ²Ò)-8!ÒYjZS4ˆÅ|˜™™Y/Εn¢øðq+¶4Ãå©kí›ßR›¡Ã¹Â" Se |½‘lÒ†¹v„”?ÎtS$92k„ôxé¶¢š-´~1&.·Øè@·Z-múìëVÚ×êÖ­¡N5¡tÕRÉà‘TWÇAD'6M¿éC1í†îUâJhóJW5¸èé‹Ä •MWã&#]vx×u‹ª'äº×s/'ŒÃ´\ÐV¶ÇÊO·Y#¢„!qF¹åN?øÕo·"9ìMÊ-ù•ËÕûÑxÝ 4Ýs5Ý9¢ûA÷¿Â ¼½…Äžo-–üŽR¼nÕù/")Æ%³Mwo\F³·»t"Séߌ­Ô­³WO¾HS‰¥%ˆ2:AyaOxÇPá“v<Ø9f8]¡“¿JG‹dN1¦›¨¨PA—ò‹«“U*üm¬’66£Ï‘¥SŠŠSW‰&Þ¯í§Ö+šVzö& Ù.* Q†³Hå¿«Q¹5¼eÁ—ùy{¶ù´ŽñÞ(héÆÌ@L‡ªw àP`Ù‚u+MbÆ÷þ_1ø+·ì-¿e~ŠÀ§·Luû’îûS(wwwòñ;߯ÎhtðÃy¬-b¯DO;§ÍŠ&X’p[öåI³^ˆ=ržNª™ùµ³w’‹¯­&ÒÉÎYÄ“¬ð£.à]íUÀ€—›|û7€ÝƒuÁ:JRÿ²kê))DšnÂÇ!¾Í+Às2¥Tv+++WR‚*ßÇÒ¯w?‘:å×iWÑm$Z’œt>° yÛgT•£7_¨ºe˜Ö{ÝYúH–¢±K›™åÿø4»6 •©K÷tÓjÒã–ÿ׋›œ’b~8Wsx2¢v†¾\§Ó:ÐXUã9½&U ]~:~~"@5Hc«M‡q[kÞ —¨ï3+“b‚4Š!»ÙD¿¬?|Xû¢&& ü*Dp'dß‘? @oVà2xjFéâójkß <;Y.yM˜âÙN?#B`s!ãzÏýÅÊXh¦»£L|›¡Då©2°}•5W¡ŽY+HÝ ï¹ï˜ÉÔÀ %ïX2ân3^ü4àå&àÖ ê?-<%ÞWã~WǪk*&¶T¤D«ü »w¬€£ZûÃ2½}8ì^¡¤¢E°dä!SñQ»Þaqæ„ËJ;¯¬D›ûL™Þñj‹v96âKäÒµý8µÏ‡uŸKZ. ѧnjà-uaÂŒRÔÛ`®Æ¡oE`n«©~AA{Cl]’P‡d‹ijúŽ´w%®OªTs¬½óßz_‚ž/rKxذܲôO€Þ1*èªÔåŠt®wMøúÍTxA¤»<›zà;Ø Ög ˆ3@· ¸í'}Éd\ˆ¥ZZµ†zþ¨'-ÿ²«Æ%)>šÿ3Ió>3lQÃï¡üÂcÿs‹€!çNiYå[@­bœ¼\“U$CÖ7‘,Ä;ó•E§àÛ·>çR*Ÿ­1ðS{@™©øÄuÏ L·¨Î59QÁx•sÅDóıgMªdgM¼?“A š28p]ž®f ³EñpdÔw¹}m…7×úê–€%‘}Ä$C‚¥Þ@¶Ö“ß™x@eê_¢¢P’#Ûk‰ÕIHÖùÚ“vÙ`ÓÀg;è}} X›Eö/ÉßÜ™ˆ8´-ú7X,L­±îC¶fMW:‹sg¦,ý‹UàFEùkÐpÊrõʺó$géËõP¡gAâ¢t…l\¦øØòa«b°Ýáx@0ÁN›õ†­77NDcdði 'Ç‹‘¦›Shä¸?ñQž']ˆ`oM·AÑhy 3=}ŸÐ…:BÈý0ÿ /Jç-mT,NBªn2!‘ÏXÅ_&0S/7QV2`Aä¹(M;Lr(™c3˜£ý4è8>š`ÖÍ~ñ»*•ü𱋋ËD©VÙï«¿wÅB$Og¿´° Fä˜kadSŸQ`—¾-499y,òyËNôÙ¶…,·ylB­ê,xo×$& ý˦!ótf˜°fˆZ³^DÀ{‘™Àk)*BCªÎ/©pûä±ù-äVÊ×A·ýUê¸ íééží‹]ÓõÓ¼QËYÁùÔŸŒ¨ŠŠ  d{}ëqólüè,œäðÇõA×@ºk 󤾨ð/‡HY¹t ’ò#jWi{)}›—þ—îÓ]ј¡‚O¸½»YPœÓ£8Aú Ô«þ7ævø™hÂï7/·tBGœ5®,ÃjŠˆi’/!­]\ô‚¦e.e“àï¹å°gÈÅ|‰¥ÂÐQæ¶W›ªH·W+ €t£QÍâìZ­6ëÝã¡:\h@‹yh¤£a'BÜÝÙHî¿n1Îà×™•¯4à¯i‹·}a,œÂÆ[¨çêzXŒý.ãÂàCž‰h0¬ejá¡aLލùÓýUãy÷5ÈPê/_’Û¼š…jNnÕâÖù¢oßàòÂó¿Û&uŸ%áúº·ÎTƾèÇNNý(lurñ•¢ƒN±k ÃÕÖ;:ø¿œ®÷ÏŠ­qÿµÏÐrZ¶Õ…Æø;Ãv)eÔ9}®íÑ)Eˆ‘àˆñEXMç߸‘ÜJ¾» fûT•˜lêèDØ´K#fúp}äÓ)îK¼ÉÂ<sre¥ ެŒRÇIbŽL^xÉÚÐÔÞÑ$¤Äïþ~éü±þõ.|˜!ê'¹ÈYðÏurØûT©Ž-j"gð¥[»¹B¤j¿¶ý{5×÷#'©‹Ù´DáK~7Ë+-[´ª©)u›¿&D…ÉÆvwzì0éQö&‘<ÏúKê¹ß'빞MNÂæ³<‹³ÍãäÚ«°å¥½l•Õ Š k½±4óÞdq¼G—°<®óIG·u.xÚÔ†zÅ×X6œÁ‹(»’òòúá‡ÉõÞ4Mý¨c·}Skí”Öá“pª&aV5òiD8[‰ ;<ˆ\ÈÙZdS³€Ë?±†h›¡Gmã‘.D;j‚ÇКåzu°[ ¦ªtÔ–•–mÅ/¤é8Ô\d»2+ˆäÊMº(ÕÄŸê‹À^W•t‡E¡jTQvfp#µœ™RHmaEs°ÜøðT“A¦òÉÙ˜ø“¤þ¸™Â¢õ…Qm£óá¸÷|{Žy¶åô'ÒŒF nb=Ö¹kçËÓͪ\“$ÍùnnÀFeÛq-¿ Ióaíloa‹Ï‘<F&Œ£—þ_^©ÛF €mxhGóh@´f·;™NãMN«Ð˜®s“ŽVoÒŒ:ùCØ)΢¢¢ ;edØN×xž$ © ̳í^."g}xº-ŸHuð6±@™Ê3žŽs؃£qæès]â3lÔA¡ð Dìö«Ø~öõá¼E›r¶Ðþ+1@>¾R*ÕAví*” v€â+9¶ñùÞm§6^ÿ^àss¬ÛæÎFésXƒÜÈzÿøüpr ” ÆÉ¯¡kÌš¥”4d \´¡ËýåÇnÄxÑë´ SÎX%vpç½âò@Ó+Ó•3`(³ÃBºÅ_îÔX ‡¯!ªlúõÝ!(xÕV#¤^¶Ë°N„JȬ ¿±W’<9\ë0¿g¶T!K5¤au£g”Î~¿>›…© Ø)Z]ÂÂÓ£§‡‹á4®ž'˜Gš(”³<l±Üb¼u®ÖâæãÉË›—e7‰r Z$,È˳‡ý¢DPWš?ÊËû`wZ_V2÷–‹Q £çBY™êOÓ!Ï“"o Õñc(E…öÁ°;r-ýÞqvÜvb>S®'_ñÑE »èötý»¿îéÖuûd0Þ+d# àYÁà;8×$Úïv2Á_ÛÖM'_¹•R™èYÿˆ¦I¯ xñ!ãgÂ8§Öß¹)¯í²¿æÓ¦, öK€Pzn ø^Më|÷ C?Ÿ§2ñBƒ ¦ÇKs0˜ýñ‘å÷)ì€VõŸ-TŒýtë‘KŒ„ƒb®G…YKíì6OðÃŒáÀ‘Fð,æ²ýÆæU5Ò..l¯ Zx¶5ÌÍìk¢qТ ¨M£CmxRWP„,Ÿ{þT¬’^.¨aú”cMùgþ!‹a4«ctÁ®£ ýü_143óš  £Étg+¦·oßV4+¦á¶?õs¡Á‡’óás{qÝÇÉW¬ºÕÄ¡=—j/ Ý{ MÙ|r{þ•ŸAÈêêÌ_u«MÁ1$½Ó‹¶Zkƒ8kÁX}u¬ù€Jï'2ñ TÉä‹´…Á MÂR{TÙÙÙ‰yl°GsD£;¼#½\vçj,Ò8Í‚Fûÿ•UÍñ¥ý`b…a"ÀGðâ ‚BlD¼/‘ýÑ{³ÀÑü­7{4—«ÂE黉¸û䌬™X7`&¤kÖJty•””ôßu}­nØ88`$—„Zn*c GSS‹Ý 3ùºQ‘ý.Áe²ÿ¡’Ì6¦–^B¹·Ô­c§Ã²Nõ™ÃcU÷Ná°þ ^€]^êìÌinaá}“ú¦ x“½ù:FàÕÂüŸîI.…R·‡RqðñCêëy*6¯À¶Ôlº =ìWô¬øŸA®ï\±"LBi^Ö{Ã],Óu~ôäpZ ›Î†˜9Ï”ƒ]v­­­ ÕrÅæZ\Š%+ËÞÿ€¿a«+JƒÝì «=NŒ5©Ç0U³$€ žÉKuôG«°|êp¤àt±ú7fQú€“‹Ppbrrˆd0â§ðÇ6kÑþ!³Mê{ ºÍïnšÛÛE••Ö¦X(ðJ%#„Ûz”š‰ ¹X5»'ËBÑo´¶ûùéa¢ÁNGòŽS£8£ñÐíHß´ÞL! ²rcQŠ˜öçý©×®G Œj9ø"r¯à:qçš°JtÕ¥7‘•³ÿ\rËÿã? å*#Û,ƒõDDEõïMD„Äo´¼ Š• Èsƒ„-7gÎELnñçAÂßÛË»M >Š¡ú0Šs^ëN4~{z ‹ tq /Fé­¶IΠÏ5Žð<<+2( d iÝ~yYûYï`ýc¼"u<39Œ}Õï&;Ì€&[¸.! “–T®=Põñm¼2»úlw4;¸«K@J†[Òé29eeô¥åå«úZûO·Ÿx—ˆƒf«ÆhÍ¿'È4{`Ù¬{ný@$~Ów‰üDƒ¾…¨c“™ê‹¼î[u{Öµušéßs‹Ü¼MÇË¡±j ?¡`8Ø5,Ù*¶ jj¿¦~hÀ¶ª'W ,” üóU†¯’ØýÄjVÜMqΓ…EÛ\Ñ?ÇR ô3T¶ðg­åP3¼‡GãéX®ÓBÒ« Ñš£•‘o–¡µN«b·÷÷æ¿“ Qr¶;|nzfg‰€1®uiµ¹wçK)̧mí@4¾sŽ çË4x,Ó›å{ë „þâñÎ.*¬¥+Y±hÍëh¼; ÞÖÝ_>|Ç=uîd½¸¼tUÎäÃ\+¿¿¤Ë0xdtté“•Ž–¬MJÑ4—ÃCÖ‚OýÎWÌØØ r]߸¯h]Ožî8Áä ·ØDÆ}Â'íÁÍÍ?]èqS¼r@ž>Ñ6äùDoH¾ =ßYï`#o4+©~ƒm¨T8f¤u^¨óݹeûÃq¬yÓep›À_ ˜£ŠÊX]âµ,Ãv&߸X ÎÏôïÊR` ÆX¦S% |Ìñr£g\&YµGõ[êáÔH<½ÕPf­Û†W¯ \vG‘QQßÞ²H »~“Y\\Ü~µ3[És ?”íqàÙ÷ƒ¤7¼î»˜ž^Ï® ÄâW-%…ô| 9¨@Ú¸Ý3và lA]R2pÍk$Îz´ZߪçÍt”–•ëÑq~°ßý¥äÑB÷5•¸ÿÿ^RÒ( I{Él^mmoÓ°²¢Ç’ñËÅ »ôÎñW±:ÝõÝÞ²=ÒÚ’ ¶91å(•,Æýû Çù`r(mB2ýæß"¥½¿Eh€îåuÚ^ëCqŸ¤fŽ"|zH,óóv\íŒêE³BŸ€N6¦{¥Ãǯµ^“™vŸÇT999Ä¢Þ<ì†ÍÝ~”,,¦×öÔ\Íf®±a2¤úMˆŽ+øbjÌBîð²±æ8 ¥ãÝ…ÄÌK±HçGZZZN—evFÆÆÜá/zªiToHðÿ-¦Z†|9HÍÎŽRÆâbgÄùÓ'É\1?ض#<"bÏ©l4T±¨/ÂR»;GÈI€|oïI%éëÆŸ:ý|/²²Áp¬[&”'³EÀ´o0èééÁ®k1å)àQÓ%ÿÁ.OLtÏTtׄv¬^ìŽÁhÝ~©§±±Ö ƒ›ø¡Áxûð ÅÎo Q4ѧÛS3˜ ûG!%++ûcì`Ù÷ °A:í"ÞÉG7⾃üUÆ¢yjT›Œ¯p~‰ˆù…ü¾;¨ê‚¡¢a›{¬ÝÊ`"kt–#¡å)]ö_2Ê4•QÙâTºèãujãv¬¬hÅÄ(ÏÎÎ8S‡ÔÛÜ4«Œ)ŒKÞ¡–jþ€¨©©iV’\__¿cÂÆbÈF‹òwrÀþS˜¾*Â>ˆ!žR´Pg·g€3ô<]Wµ½Òw 2}sØuÛó~ñ~'ÙEóbzG‡”!šÀI±J¶8??^ÇÄb$ƒ×ðb©Ñ É×WúM §ÒÒ úo2ð¤n¦ŠÃH:O Y‘¡Ò¸# (dÒë>Z’h*\ÈT…)ÙÆÆÜÆX›Ñd Nôù©$¶%\)„©x©Õ m¹Íc×øQ.îƒrýmªI{»nQwo¸ýC±™”†Á!Q=¥ƒ‡›t©Qý]yP·éÙX§³¦FÄûë7ÝÀW¨1Aºôß,wˆWËýºõÁâÂ)Þ94Ç7Þy(ŠC5Fo‰EnznI’ãVŸ%È0”þ&þìØ¨#5mlòKèãò’4×F ú˜ Rybnn•Î`—£QÊöÉ.c’Yˆ ]bµ–Q+h~¾Ü›š]À{pŒ¿Á-L’ÙÒ\!Œ”ùËø.ŽbøÎû9ËÉ(ˆ®7_ è=!ãyYÎ%*g लmdðÛ£]ìÓ¡K%‹ÎÑ Ú`'¤ l9ÞœX¿ïýýû{c–œ\žŸ¡>'T”7NO¯;œª– ‰òð0­S*[hcNF—ˆ  ‰¸Üö5¿£åX8`„„½Q'G%HC™«9Ü]lš×–\ga©¿&èŸ!´YÀ·YLùÚÛàääﳩSYÜ—p>Rfœ}t#,iNh–Ÿ÷. —Èý0âº^-Õ² y!d“æ‰còhâ[äÏH|zÜÃq¾f5˜b7±Z5iC$.,N(fTúà0ý·ùp[ýAÖ…ÍbB>Ýš ås€vKl¢áàì` ‚,“ñ¨Ì7ú"<ŽÉgÛ+æ7œW¶¤ïz‡¢aßóâÆc~¾»ÃgXÐóûöÁéú)éPW¯Éë9Ë ÝVP¨VÔÁÚ:åÛîF®NGÇ<ïŠw´_ÅûP?'µž»oÏ@ÅŒYYsWûi2ÉàA0S° )Œ+u* ×s|Îé}þr†º¾–œ›çÊŽ¼¿Rqˆôr>§ê]ßëÀ]Ü =çÀ«ãºFÏ2¸I’§·×âu·pºúy~.e•Ä(®6ùçÝ¥<°ƒNa»ÔŸ+÷YW™õÌßAx ¤#xw´æs~vº«+rôú?<9¬™y·"DD)Îó5t‹üˆ¶¼J{›†ñD­¹vá0zBEÕeøòª;ï{cõ1$¬7±iÄ^¬’ÕŠŸ™ãí×RM ›¿b=Tzªà$ö¶öµòŒ„MÿÒ÷ÚuáÁƒ™¾*6ùxˆ 𰔏¡Æèý<½åªöæe9¢g%ú úCƒ‹ý>6Ìí¥L'^œ,:"©% 7ôhwt›%°\3R ‰¸Íïäî¢{¡¡ÇÜÐÐPÚéLyI´":‚„p6(æ?œÃç}en©/¹§ö~¼™ë…РPVYíg¯y[T¡sWÀ#a vP|<–¹¹ùšÄû+à#ðÓc^ç¨ä”›dŸvú) XN3RP#¿hiQ¶¬ “‘¶³›é+6'|æ'LOWöN³îê2éò‡]([ªUö*ÇLú5R^Öæb åHΞW¡ëXnüÛ_qÝWirØ–qv³ºsÏ¿¨îv¼|àNºœ¯‡nN¸å^~™mn{8ä†(fƒT.PÔòôʘWâ/jÐí9.íל֘&ó¸’Éü==Б@4¢ÛxÐæ@Í3êÀÖ¡žé¦,!;(3“¬Ñ~>èåqW|ƒT–þ3("U@¨V–N*¼öÄkð·™‚òósw:÷ÆœvŠ¢Õ+NsøèFKK”\k§±·“ÑÆ£˜Ð÷(°æÜeí_ccX555°žßæD@m`ìÏX¾ïÉ8ëpÛ,g9/í!”¾f=xÓìŽÚNÊ«;Ø¥ÍäDä¥kãêX!¼y2ì‚Û••• Ybr`Pæ55f^`‹j0e²bc׿Ý_µa("ï™v[ysßçhþ9·•݈ïûšÒæ1ïß5ŽJú6ð¤ë…ú•«%XbêúNS¬¶ý·‚vÕhÎÛ8JËXÏýd§U«e¹!Û†=rÏ{U«QWžUkkm+ƒ†R&«¯²½Š8X¸Ï$7——}ûÓeõ5êZ82¢)R 2 äl]=®( ò”´(yHï?ã$ʪLþ€Ü“%ð9dúú‚ýùê€Ûzq.:À˜²ÚO8zÅèÑ Ñ>2-˜ÇaAÓpYôØÊÛ”½Ê ø¡Mó¦ïÿvm‡½ŠDîIz÷C—Aùv®|Šá¨˜F0Ü@e†’‚Y©¿Hv¯\ q `]òß)Âf aBÝœ ¨‡á’-¤Œ¡ƒæ»*¦Íw;­Ãà œ¢‹›ÕîÓõÃŽ©þ(å¹âÏ–ŸÿÄ’)ÏóëÌyúøø<žöbí-·55‡áÈ;vÉä]'ö8»!ÈÆ}ˆúÐî÷‹ûnÙäõ‘^!MPõ‡‚ÝÁ\3Žä Þëª N™.6ƒŽg˜§ÑÔLîg{vŸÅœøŠ<ýá+>KÔ‡?C‘xöÆòÈ ¹NžÈo•ÏÏu[ìV;Y“Ùñíì^—ª¨^´õ?þþm¶qvÖÃÐ.ìq‡„™×)Æl¢'e²RÔ×'Í?˜­ÚÜÉlö8¡Ìõ ÛÚú°µµE-.N¥­­]]W h‰RíŠ( VÿIœ(Uwps6å禢J¹MÎa÷u”c“þÙ©0vxµ‚ÏÇò8yó³¼OºÓËØ˜uëdŸ9JOßë~®QÅó)ôZã;ìF’„¿ÆFé!ä nؼ‘‘‘‘‘?-é|±£’MSØŒNT”âæx¹·ªë9J%“ ²··1»¶›úÑû& ‹ Q5wÇ÷r7W"“õ÷éÃI¬É‹2öÛùNŠ4ÎÀ± „´,§ÙÊ­K–­¿ Z4š¥‹8J)¬’MŽË}¼1œ¯·@i ‡‡öôôôÔ||„(((ò»…64:{;9@¡Ô‰‰)Ë^Îs¯»LÛ¾z‹KÁjôçm¼ûÖVõóÊ+1w÷ÃÃâ8÷RV O"F°S¾ v³€'²( x´ÍãÄ|s v®ÖíÍ›7ÊqLš„(Å1ïËœE?A¿¾»:@B'…g5@|×€cfËn‚†n–ÈLYªcýð¤ªZVôµœÕôæÚ(ź‹÷Íql(QO]jµü ˜—4¿½­n0±Êÿ-Ð›Ü “÷Wzൂ›V¼•Dz‘ëÂAÈ_Ö6á`zfSÜ'Åé˜* :©4^Ì|áàU‰'ýjµÜZ..ß CC]‡€¯ÌsEÑ>7ºÃÑD=,ø¨'/½·g›ý@6ù0A$ÒÐ €QÝ:»ãmKþø°îì,ޤV”z ùr±môHÆcJ Áöl=VK/“°ýçk `õQ@€'°’8ZèF¢ª®fq¸4 ¨?(Q—°-¸Æ±$*J’Ilur†PlìO”Û©ÏѤtÞùż†ø˜@4!6^°ÕHF¤¹0?iÚÚö4¹œàÓ˭̲ P=da( *õëæª½qpšp*Êrÿrv‡š ƒAvj¹^o=JÈ€5Mq|| d°.9l`¡ÅŒ_à0QÍ… ""þÃ׿>W³äÔˆÚÜk^~ñ½ å5îú13AÆŸ¦¿3YÜ3````1Q kK4µ´d¨üÒ/©•a*íª:°öSJŽQh„#æC5ÇÞ4×ÿ;,¬6“÷_vèÖ„Ûú|èna$êSËôåõ¸îÍpüº(_{GG÷•-íTÉÒRº[;Ç;x(§¡ÑüŠ•qy(3ÖX.78“j7ÛW_ÍZid1M×ÝÕÄïÑn{66dÀ=›¯°Û~H0VA¢˜_käg8Ð0>@tªÙBù À^‹ˆŠšY[‡××óˆøÞb v šòâ»u(ä­Û>§[]™ÎÝÎË=ËxýkØY¸Ãù“.Õ4$33åf–h§œ×·`‰ÏoªÝX˜Cz;¹­GC†5eñáAVa©©D°U?É`ÄŸóów±›qqq%ú ̰¥“tnks`òt;}“‹PÊy)ãâº×~š¦Ü€Z «(‹ÙÓ¯ …aZˆUcðHAÑ_£Dt_Z¡W÷ @õ`¡ï{‚ʺ¬Ép¦æ€ˆ£ˆ†*½Ü›ð¶ÜGDD4?Ûè§ÕµÎ™›«n‡ÖXFÜí0µÇš‹Ä‘ž/|7Ú¤BÖÙoÂl¹Ì"dz¼‘ûµ¿‘Å“ðxÃÕ®\€ ²Ï åA§ŽÐˆdß‹~gfË^@=>xœ¬pÌ\;Ù®–“¼ÿÙJ²Á–U°ÌBîYtAØcnHEÔU†áÜ­;䪙³nçÓ“)„3*m·Ö¥´7Iý¬g‚ª‘§ù¦"zP^ÂUÍ m“B(ÂŽ\}‡©;bn~Þ °óio,£lŒh¤š¬?T“nž:S³©à‰ Óü³¥Ç¨fiØ~¸:ÖþVêî›ÊäÙxü^Ù9vi$VõŽÆŸ;Èa]“œÉ»—ç'6_@&bB?}ú Û8m°ÓQ¯Ú<9ÁBBB:m%âw ¥Öµzåý|Ÿ™ÄßýÁ΂†Œ^h€«4äjwYŸ«C²ùÒaíe3…œ&€szŠý‹f©íñ±Îù·- ìÐÉí¿â\S»Rgõj¤nyÍ2í¦RÃ÷?ð;;;ÓÀ¦L»KAW¼­Ÿ¸#ññ«—ÂŽõžº:³D~×oH½eW+(OLERÎþ£xõþ}ÈX]#""ºé…òkä¯iƒŸUC¢p[ÚÚ,®ˆ¹­bJÜq¶±ËDAÊÓMZa•Œ ¾Ìs›>y7rü.˲R¬­ œ.Ós ¦ab2]dÖeò™y;.ôÌ‹²DÞœ—›÷Íêˆ,ºækBÚ<ุzšÒŸžpÈÈÐÞWÑJCÉ¡o"¶Dm"†4ƒLÅ\ ·¤ù÷¾ñ6ÝG-6b:D¸nô×óöBí5ÏGÜ„ô·x=ÈhÂ?ù9¨¡ ­­Q©Ø'Ý »¡cù„!s€©GüôùsO‹Ž#„ogoØ«2‹üº¯Ö¿C ºŒæ]Yºñ}0Ò†Qaµk­±(! M̯h¢ò×S{‡>ùsóàÞ0ðr[¦êÈqåâí[|@U{ž™‡„…½G3y« sØs 8Ð}q7P\ä]èEÖÍI]fš -R– ÜR«e–¨7üåÉ|Èð4 ³’açð›+~‡L¡2D®"Ù^ü§žÞÐÝBO//³ÝÑlb›ÀÁ‚=ábe/†pßí:º|Ùì=¢˜ ìz™Lc6û¶à#’& +¿YØ7:YO@µÊ†|úÞ£ YÄfz®Ø…~î,”MW%2Uý, o‚¶ª]¡¿Þg³Ô\Ó<ð•îOÏ“¡r É;’­»‹]PÜxY×(ˆ2WþëŽûÍÄó.Zádý¸ ¹hkÇ–js? €¥Û‡‡BÀ3¼+›†-¦ÅQ‰Ç57 lý#ù+¯dá^_g½«vwèP•§ÍžÞsZå›O—±.ÕÂûÅž/â3Ðø-D›éšI&,>-7j«)6Õ@Í+‹õfnEß÷µ¹Ð11©ü‘É2g5¨;::&`ׯsAVýØØZ¿5QÈÅ×.œstÁ‹=ÏÕ?Œ¤Œ:uÕ`ú{ŸŽ”íM†=d&ÌêÅE°×c&…Õ°ù´(ˆQ’o2.9ÄÐ^iÒ… •Õ#tDµÉ¹ÌÄœh¼‘ ö¼]7µNðk¾n¡· ¶+Θë{>°ñÂü•Eg ‰Ai¼H)õý|Ò—^¸ þ]' åÇÅŸUFÂý]ïF=±'ÙŸmyÑnœæi}ÏªÔ  °ÉÉíÏ}dõüphòb`—Ö–½ˆK¶Á½û18–““£[g…Ñè°–Ák÷Ùˆÿ5Šn[ŠèÓk•i´¢÷>‚s{…MN&’»IŠE°;¤$m+Ær­ì4ŠõS‚^{Ý';0¨d¾2Ä¢--éz™ ¥|?XCª¾yØñeó  ¦ ˆts”5±ä¬öÎ6åk2ƒA×ãÏT‡Q³7P9,ÔKÚÛ³Z §Š?,„¢u«‰ÿóâ`ó8N>´™ú¡T¸f¡\Cö_Źþ÷µ™æß1§¿S)”UÖKdJ¿õ¼öˆŠÝΜ-Áê:š¹þ‹ è¨sñí|üã›*ƒ¦Ê)¶n”‚z æšœV‡NB—È„;Îý2ùŒý,,‚I¸­¨ihÀG‹M»µ4Œán‹Õ’í«f—ê¼Ñ*RüÊiÞ!f¹ÒÚ/4KÚN Î¬‡Ôå±ÎÁ¯Ð™úJ0^–úoÛ¼¶!ó꘮>2¥°ÆÛóuÖRÌEfÞ{FºaòJJ°žãgC¥î,/½©Z÷IûÅ(Ù/»©’ÀÓSgØ…,Ú[µ»+¢3§[Ý`jñ\»Ò<"¹﫵ÍÍÂ/Ÿ›c#óQ‰ÍGµ,RŒ2³›3°ûáøbù›þ‰‡ëò`*µYmŠñòtÏF”|简YöuB[%T©Éå â$Øíu'%)ÂúÚ¶:“éûÀ6ˆyŒÐë£Å^­hmÛ±ÑO‡s\1düqÿdŠÌÓ—Y´9ex¤ò4SÊKg åâßg/þü Ûµ®-³4(H÷œK-ŒXS¬“O±ö‡°˜þŪg#vSOG*Q™é¿5¹¼®Ð^nó( ƒAÕå ‚˜$4ÜÜxeÚÞGoÉA [*ÝÜOF‚‚ëeU=€ YÛÝýei¢Oª”ŒŠeí¶RT½ ¸â›Â—¿ÙäLê ¡(#õhÊé©’ŸÇ~Ð0 ½á±Éª¢/™C¸tHèØ”o@dd;W¿z^¾o=ûuÚµÆ1²ø÷·ñ7 ²”03àOò,Ÿ­ J•&!qÅxâââÒ22fÇK-ÎÎÎØŽôºüM–CsxÉh¦ ¿TUUKÞ‡êlݪòÙën¸¡Q1ÿ§›»üAN>×—®)g+ùp“ï™ ;þž?ÞÒ­¶3k阼vwE˜¯ëˆíÉ”lii1»Øi†æ0é×ÔHyèÎÿþ2<>^Œ9=v¾þ%HG¾Þú(Ÿ“Žp °“÷†.ó”û¥Z÷¡½JŸAÌZ¥ð‘àýŸÌZÌúÔ¿ß•™œS'V_&¿–F|œôÏ íÝæò iÁ&¨Ça7ÞÊ$ÂÅP i–PǽUgõÑ}_¦È`—›KUPXh¢TÊ€ìBB+ÎËq[ {êÝëÈk(ÉwkfêŒGz{áëÿ3 ƒìtÆÀéÓˆß9¼n]˜‰pÞ·æQÄ¿ôMM5hŸÜ…„jw$¤Â!í_ZZXIFW©*”Z'‚M³oeãwºšdc8ýÄ¡2¶3U»vâ"¦Ý Ã…†!êD¦ l@Ÿ²f1(¥´ã?{}ÝÉÚU7lG"ç½ëK Ç4ˆ!YbSæ0¥pX›„nÓ5“j´›­*ƒÁ ÁD ýš~µ!—­›ÕÀï*éÌ”XN]#B·Ó¸í´´'µÈÓ½áÿ™PØQMàÕ&JE°wàA„À¨vý÷×<¾aM4]¶Ð?ÛÀ`1uܾ>FÄ¡Koº);£,Cư­aùჳQýçÏŸLÞ*ë°§ÆbøxSp#®•g„èRˆ‹¯­Iv¶ìHäg9eòù¥£ ߯’£8O&&góíí aôöö6‡ñ´k ÀÓ!˜#§¼—=?œçVι‹ ¹OV\ìû•:Zà ȶ·mVãvbGGGC—“íÊ‚ËûÔd×TÚú§ LE¡xÍ?„ž4še9;Âî[X–«-½ðŸWüˆäUw2í˜sDἯ?ü޹Cgg·¯ê²›DèðñÑ⼚M­„èúdÕ)a¯çT÷ÏÓÀ­¦L_•Óß ¨)&¼û @ì1©Â¤m2ê0«‚ˆI^ÒäÞ}¶io°VÕµ"büWÃS__?2’=uº2“â”X[k޶Ø mâï¢XlªC¿­æ|nØ:5{•T ¾Ú~•þ¥/]ˆõõkVªí?ë.°›¾øùšÆ£ˆ½ƒ ÄFÞÆ†Iõ£úûÝ2ñŠçç¦vyL4£££ÿ}Ã4¿wØwW³s´e>âP^›Þëü‚çCÊw±;–Ú£?Ðû~Æèò®rzjªb×ê¶™ZåwŸÌðÉ.Uœ9F­É¬Ãšä¡ˆX;ùøÁ€'Ïéz7o c{“Nòüüü„ æ·8!$’˜ÐP@xFümKQ86@Óèslîþ~mígpš°ûáÑQËÎJóÏpd$+OÙ;ÐW"q¾”¦2e iœ¿…$ þEnQ(*·[Þú ².”þkõ÷£æÑôÌHñ¹î÷1{þÐŒ|}ß`ÿ:Çáí륓ÝëÞn‡óuH>7„³Aœ-.6@}õ']-¿€«Å¼ñÿîŽ)} Kz=… ÛÞoúàäȎכ3E)öÁç°ÿÓó£×R‡Ž¥HD9nmzþ–~>DÉŒ'¢+ÀÏRo‡”\­d†}hF@)h¸f"h‚•s¯™8øÛìOòÙYO™"ÐÞWû‘vä’Ä(@‡ÚÃnJ‡\ïÁ¹’ë ¥x*¿2X1T­a!{íú½¶Ó̰&Þ•¬ÌÍxªºŽ…¤žÒXÄhB¶¿,ëŒttpd|öLgÍ4EK~¾º¿M e]Ô²Í!oihªÐð"UŒ)¿\ÍÆWµå7ð~ñ…cúƒ&suJo“6˜ì×ÛÌzƒ?ª`‡ìÅŒ²JÌØ¿ú͘»vu tÔv Š­`3Ž!+¾"ols'Ù^Åp¦7 vç‘¡ÏR n–×4'=¡hsmUk5.¶§“jâ4ņò ¶Êߪe>Ý:C=Œ^Ã\Kg'¨8¢Ðذk´çZüy°¸wm»÷Éׯ¿.6\)Ú`zC°Kw©V컸ÉÓã~YEÚë¿¡­—„"Tû?yâ4ó¯’£0E>Ä&Š:ç͸è¾\“mÉÚêé”PÀ$—U–Ÿqƒ_g*«ìÖ)d±Ùýé2""³¢y Éÿ-„½’jwØpZ‡ÀÍÓÚQ“„ð3%_lT¡#›þŽ×ÏP&í!ìö@uZ7(Ófx/ß ÉqƒTûU9ˆ{w©Ååöþ  !Þ©hÓÓ¿ÎêvUœ¯CüÒX›ßP†‰C0Ùihð2—Jcg“¬ÈC¯/ŒjŸG| l*Pz\¡J[ÁÑàâ®®ÒÊopHïÞ½µ3´HHK‹H¶‘€(l½.VùÛÿr^ÿéÈC((¸gŽýóuå¾ïmÒ ë ;´ô¿…bÒ(Z½ïÖ£Y^G»9¢>3nP­ÎÕ¢pIIÿtÜÎB¯1¡2xóŸ­¥´µ~à~vÛ»Z$.›Ÿe NNÄ}ˆf|WE‰vGV+]Ëóሌ¯š =vGDbb",&_Y ŒÀˆö›ü:{¤Å”P½9·ùáð…ág7* ¡V™vÿw•ÌjÇe!À+Gúw´ºÍOvµ¬í ~sAÂØàþm–ɨÑî¨*¸+6„7ΗwÃ*£D ãe‹‡§·MÊø¨°+•ú£‰4ÐL ßbBI~Ò]k·’CƒbMô,¬Ã³*Fk¢c¦†k`K››\ŽKƒÒŠ\UÆÄã"=ó2ggf Ñ(Pw(šD™¶ò0# š¼¢yômýÇ¥MÐÌŽç£çw4Ó}LÿÐ,Ñ¡?¡Ú,°ÆÏ“Ž›>ÞêabîöþtB T…d܇ט¯¡ßõãìðQññéÌJ]È`ßNãóçËZVr .cCi99²v »:«ò‘?òŠy™Y9L·ä_± ¿ÿôHÊHÊI¹•¹ÚÌuà¨ûžÑBc®'Õºkuu•êáædw&›š ñ/ÀÎV°[qô¢ŠdAYõä%&TæÚ Kù¥º5}^ID¦CmŠÄ(TTT‡+d'‡zYЂéd«C§³ˆ^t~è}Ñbª·í§ª¸=à Ô»õ´³Ë Ès2¹H¸@H#?ËàõõÕVD²íº65R7«€Ï5kêœÚ'e6Üʼn§—ÔÁíÁ“r†á±dW¼J®ßÞ¿†}Éÿ§¦½³{WrØlIæèòÞNÚ{Kúlk7ÿýιzìì[jþyýÚxÚÐØø_ÓfÀ³/ìa/°õLUÕ­ß_Zúü£þ¾×éÔ™ô—⢗ÒJP:÷;üżü€BrÂb±Ñ¡¤¿%ÉÚ²fÔ91ñÐG©o1óë“ÛÕã¥ÕHšËúŽU³K b,%›oGGGÝ,;:)¼á&rOðb!%šÌ7]/ý›¿â¯ÄÂëê¸ýk „6‘ð^`†äá› >ñ5-Cñ§©ÃÏà¨B·ƒØVàå¿ÉUl„‰~Àiÿ-*§Åm JÚÍóC‡I}R‡wº*R>“—Ww£àå…Ý#ÒÒˆoÓ5nƒ¨‡áa‹Ä«~á&OZ'wïà‹?]âÙŠû þ»Øeˆc)ÑB³e{xš÷ÀWüÚx Eå¶Î0$’@ž™™Iã²@ÄÅÅïôó©l”PF¯öï8=­mYßÿƒ ïseŽ&È1]Z£Ý/&Ö¤b’ô%pº,Ðn6$6 !´*::¦C:ŠŒˆí"`Qt‹û8ù=_£Xµ:6ꯪÁmWÂa§_þßšXS"”YnÖ @X§ì„!ó¾34êó‹Xõgç5ÐO1¶í¸Äm;d:Å”‚ÿ‘ýñŽqñ„(£~om 8Xƒ}Á×(\i=(9Ïyw”B9W¬CÓòu```šsÞûŸ|BúsKÝÙ»“LøžgÏB¿æBO:Ñæ{ÃxyE}®û&þ_gßUóµy‡8äÉ‘,’à 9¼""9(9J”0 9% T$Šä C’$’“dœsÚ;ïo÷«új·¶¶–(¨{ûöí>ç9ÏÓÝçÜ*uU¸Ãvs5³ãÕ˜äûìôÜìä䘆…pa!6GoŸt-B¹¹Y0òzB½ZíF‹# ¸ÿ*€sþ»èÛÝÝÝÒIytû’Æó'^îZ¨K¼Ñ®Æû®Å“t>L’PIç•×;lýf©™0sÿsé?>„Çpø&¿£•f¶lìð°n©(W±ôx{&Z9–Þµ¯¯ `gGíº|þê9\Ò›tVÙR$È}gb¢˜’M‹d–ߤ[i„OVžwóU“ž1ÚÞÐð——å°b ×š…G+ž)wÞÏ=\TÀÕ¹ÅõåYùÃT½<‹ 4ä@ü@8P¹ì@ è÷Ø[.®•šhë}ó=ÌŸŠx—°uªŸ‚º3>\AŸv©Æ)ùwÅBwOOëX8-mÄŸ¦×– dÔº-ãÜ¢^v“˜¬´ -1Rh­»µ²TþB„A0Üz'¡ xö,»asAùŸÛ‘ͪN¤ðÂèP‘’?\f±çiZ-rFDèÍÅq^—YÂõnAùׄÉþÑ:Ûì ~@À¦ýÖ$鈈xàµô¯l¹xŸƒ•–ÁA¸¬¬l^ ýôÌÌüÜ©ˆŽ‰!•¼f¬qš# MÂû÷&_6þ4tVâ¾#”ôÍþ,šf„7·i`~0O” ª{ýj:Ã'¾R ¼Çš¬Øeñß”¾Îàûƒ¹#rrU“FÚ ÿsÌòÍ5…žo5oõZ4Mùõ•—þÍõEïláôLâØg27£e§|Míº†ÔsI !==ôOÎ;wè—ü&µ ÇecñÌ(‰§ŸÒ5ð…xÇ[¸¿²idóÁWÁf#N“f±ö¦¸È‰qUâ›ùå,žB€gJµN`£Þ·(ƒ‡w¾«‡„íVäk¥OÎÝÍÆÜg¨;ãBÿ!}FŽ®KHùAOŽ»¶ö¹:Ì‚Ž:|•²Üÿ픂A”ŒÁÁ'%å½²€”üÁK9¤“(„Ííí-ª4ÒžINÂ6bÕñ§Bðt3ÅáY%†BM¸$‡+$U¸q,b‘/~Û§Iâ¸Ü™b÷9T ƒ=vQK/’µùHЬx ² bDUVÏcÍÕsž7תQQò¿³dºèÅav‰ŠúVjj.ïe™˜¯Î‘®{¸Ç`o.ýîØö¾Ù¼Cð9 °¹¶g`þuëNèÜòr(“”§ùî\Ë­ oøÛ:}œ ¼.þ‡—“¶$f‹¾óˆµ»?¼/‘£|ª†¢zo/¡ÑÛb`ƒû×û`•?´K‹Á‚@ÊhñN7åg¦¹Õ—ô[ÀE`5ÓTÄøZ§Ä°ª{p”AR7SÖÇJêˆÛÀº„)`þ&Ñáy¬|è‰CU÷9ëêʯ·ÄÆ¥2,;I“Ä¡€vÑàÂo®i@£SX“—3(¸…2ªAñ›¤%$••)¨`Øuœ IUVç¼……ÃìÀk‰%v[eÞžÀá½o¬¯ð,-dµ:è–<ÿ¢¦éáÝYÒA}eÍò®Ç¼T4­ë“U:\'¸úÐÏá‚d¤­£¢i#ÀÎ$w øãÅì•Ûÿ„bŽ66gS3î;465É`?; SÆ®3~¨‰[l¦í ¾Ò~ZSŒ NxhIÙEEÏrk½áQ«ïÓ uÌ çG-ŒÙªÀHšNV HßÄýNŸå·6xQßG镠☔(5ðÌ3¡(C2FÉö±Ž20Þa Õ­>ñÅ…¢aXÛ’÷ª*û˜5§ih•»œ‡¡´Ý KÌÏYÙqELÔ¾r?°èã`ÒBƒÝêÍü¨±…Wû³-Aį°Žž»RMŽâK{V ¬áäõG q8jÓÁ|U³º‰í-¶¾jw—‹›ÏLz.ì Àb*׉K3w¬æžõ%Isw±{¾MÕô[˜z‚9~áØp„uh}®jÑ.'Ccll,Ol>ÆE¤èCêÓeš¾ìD o£Ž@:€´Ø”Ïo/U•3MÚGx´ÔD#Z™Å®¾˜3užÐw/bí#‹““Õåñ¡å+à’Øœ ˜o‚œ­ ~$ÄîÉW;N‰ÅUÙ â as%7·ª<½ß0ˆ¡–{ƒÚÛì#¨!µÞ‰‘Ÿòˆv@¶4Rô [u>áÅs4wþ@~?N9AÀMDºR®èH³¡"¶òÛ…0³ÈD__Õ1?æþàºPòŠaœAµõŒ ¦ä·c T^\ܺÒÄ ’ööòüõp {¡¶8PõnasêøjŒöííí9öc¥~4ÐÖ9mì bäËÓ£wSì¢jj\Ì7m“ôÇÌ̆ ¸û9‚ßøEy((>ñ›ÆÏ·Íï/§j_žåÏÕQcêÙÉñéP»ée‹àû`‹€Ñæga€~•ÝS‡ñrÈÞÞÞéåAÿ^‚¥Rà%­þ·°*úíIêòꕪK3R:H×O+>?Ÿ}Ñ‹Ã5lÚ×8Äñ\hq{ù3ÏzÕ*ç¿ë4Pÿa!VMÔÖ³†¤© «ËU9Õ›Ã'†VòÃvâ3Ä« j¾å˜b6÷…D~ø¬ã­ähl ªpr¦¹g˜Ä俦öKÖEz%hu†ÆTQynOhÜLî0¡³¿÷ë}çÖ«ìÕkó Ï<(’?uñ–l ¨OB±BeîÓÉ€2Þ^îd{&c´ñY»æ–!o«îz^9ºXw}½¬Ñ`G® äv­’ñ¬¶YL‰¶Èà~ÄæIß°Ky´Úji©æéˆKJÊó§¶ÍÌ`ó'vCjjÄ8•ž/„2LMN²srâùŸþ›±ßÉÍÊHï¶ÛèÏ&DŸUá’Â!ù¡;¿ó4ë=6ö˜¹þ!hê<ÅÆ´•Sã:}d:éY_C?í¤I.ŽŽ‚B"ˆÆr¤zc¥DY™YqB ^–.Ú°ß+¿B+Ô©á||Y àä¾Õà¹Õ:f+’K÷ Øž†\ÓÙ ØLéÕz"lÝ€·ê¬’ïˆhˆ:°‰a7—@, Õb‡â>;qwG'}Œ¶¾’VZ£'÷ Lì Á)2]zè×98è}=ñrÀåÅÔÔζÜPÍÞÔŒOËåŠìØ„6 M8È›šá®ÊHˆË”^ïo4ÎèϬ­aÎü¢oÊ-Ú`ttjXÏZÒ$ôÄœldLµŸy¡ÜÐÆq1‘”{w-ôø0Aœw ùsswI‰Ñ ÈFYåxb%¤Rôm Ð_ : qÞ&á„„~•9ãeŠ$«gD-\Æ7xÐ(äúD‡âäææ¦‰93WírA„3:×W•t’؉&q­Ä÷´áÞ‹¾=?Qï1máö^Ê…Eâ–ÓÐgÛØÚµÞ>ì"vBLßýó…ÙwR^“žJ\õ(ßõ¨°ïôn‡y†ÛŸ§¾r· QÂápZa«ˆr"z5; ê®P—ãD’}éa‰îé¹½÷ñ_HF»b"ï°f•Ýìöí°*û±Ö¡¡7öÛUþ‘šÃ@XvfgI"OŸÊë&÷5£…ÆCÂÃ?~2¤¿…g!Øt·’|WXÄóT8‰+E Ybè]ïÈ”*åTQÀ´Løñw­k͉ª#ÆÎüWËNù;oˆ²òõp›¯~TãóŸžxMªª?ÄÍ•b=>>Ö¯uo¥/ƒ°.Í‘” ÃÇŽ˜­[EJ°N±qÌËü7 §î §àpßÔGY²á ¿ñöÜ&]UŠÉMwk’ë«Wí™îØ„Y'êVù-P½–h1äk= zΆMd _¾Ì´~RŽgQš€k¾bó¤áɳV'Ü3á°Én"[÷•¹î_ï»NöæßÝïþv°ÐQ0ý‘p“ƒƒ­[(`G  ØUÜ?>.s¼W®¸â¾º´¹\Cï%=äuu©@QÝi‹„­àK/â5¦õíí5zÈϽ›ëþÓ¤z±¯áD†_”!6/êHߘ!¾’¿óCÛùûùõ{ƒñµ›î}ë–<ŸчD¶•»ÊT«¢pjžòòvÜÛŽèD*xÐåùÑ‘døe ®x‰)Y<2xnk‡b,ýÅë¿0NeÆ‘¯–* ]ηQÈQ=òÎwš©ÇfGHzmóöœ¡É@§•2d bøäïúðÎu÷WÍ¢±»{·©ŸCC-¨ tOOÞÆ ÑÐ)–ÈmÒñññ¹Åx9eccÆI"ÛÕN$ö{ö¯OœÀùšÉYå‚¶b'ª êP3õó'Ìú(‡á“‰½‰/H™Y$ÐÅ^³ËnsG‰pàKy ¾Ì1xPK½B¡Kÿp·W ÙülÙÅÝýþHÕ¿ç±»-š½¯X¡½¡ ÃÜíŸ5ÛpÍ ¼c¥v†\^ {‹O’PiO³Ï *Ò%‘·¶V~s÷%æ›xH(rÿ‹z<„ˆœüG®B¸à«¿ÚMÇ3ÓÓå>/þÉ’N/B‘°ìÔk:eˆÆOýh§íNÚW1úì}‹:tx@;X°ß]:?[ݵ›º z{„ŽÎß…ôÙÁ*q@@zõ¡Ã8ìñãÇ6#_’[Ù¡­XЧ]©J-ì¶Ÿ1´çž\YRë =æ:MìÞ}Þ“ŽŒ{q…GkEŠwoX+[¸{ƒàæ7î’ˆ^ØØˆîêRÅV5)ä¯Ã»®s¿ûÅET‡êÞ1½½ºBÍi(aÞ•Àænz5ÑÛ»QµÈÑìCý¡º*ÔÄ8SOÍ<¶ê¡iæ¥RcdÏuã»û´øÒŹü‡AÄñ®E!åå§ôôòÙ&†ž/OÍòりý—/uÂ%døúY™©ÿV­|.æe¶ˆœI‡\¼ï>™ÆG©z;ƒæ]*´%äÅci¤×ÞpíìËx4ÚZ-ýœä™<’,>“¨æ›S\µæKôϯ–¹û»™I›º—» µ}Yd‘ª&Piér—yùb“†ãå'ØsÎŽS¢1 bšoíAÀú®¦÷Üùse˜ÙÕ¬zË4n×ÍÞ×…HF%¯;ÒÛÂØŽn®û#ôàÎ9zmç'³Ír›äŒ(Þ{jeCKÕN±Ky¹n˃n’Þ¿Ån‰€¼z¸#žûÕH«øÃÖTê~ާ›¼žKù¨P®mÜhÃñͶkYÕ´‘ÖŽé‹“váÜñ^§ )Ƀ8“Ó¥³‹Å½?MõïëËëý˜ÛÂl©ÃØAyƒÊ›ˆ ÇŸ~eä7½WÆŽ jcº¥º ¬¸öØÇ›ÕvCÏêh›Ï¦q¤Äh—V’ªbÉ*‘ú«Œ“FIJúÓØlŠÏvieèë&–°*Y:Æ.qiìúMŠ #J®Ï£•pttbÌ™0k8(3Ò)äWºÑ?&3Å!e¥&¯ ºôྉ¬þ“"ÒFÕ¤ôFFïÛJœ¦Q ;¿=$Ì»kþæ|9µk}He@ßÀMxº3.TæÀÆ÷@q­{{0˜‹PïË'÷b°£Å’¨RxHyrœWSUž_eÿƒ’·H@öìf>+F,__Y(9†ô¥4þˆM¬tÌÈ!†tTÙïÒ áüþù‡¾2,%¸c¦?TÖBª{+BuæAÜü¦!/û³\ 4ƒ‚D¨¯D“ZÛro匕պá'ßÑ á”›…¦Àñߪ˜5‘u+ðF¡çòl€j-âéÂÛMÐIcÕ)ï ”Ù¬¾}ÊÑã«fbÍÉMè+|ârqj‰(E[ã!õ%—€·B¦¤tì§…_a µâÞßÈ(o)VÆ ¤¢'«&n QǘãÇAkË‚ƒ°ø›0‡4iu'¾óâ„£ÆÑ¨Åݪ?«åªédîö-[½”ˆQø¹¶v VX¸†ÈۉžÜ¨š¶…ÍÊK7ƒß¹ÓÕÕ5&¬ôŽÆvþKå§MŸ*ú_EÏÚ–/vê*®“›B—X¥ÍÍ?àç9µ¾ÔÉádC”pŽ;¥¼ˆ·¥A/ø$þ¡o¾¹¾½c,þ_ïG(ó(Ró®°§!þ`´+rLX m5^ýj8§ww™‹šý(ÂÒò£G&§E²ì)ŠÔÝÜ •ô@|¾÷¦bвÄ+ü‰Ý†wœ†î`âÚ/‘ßØË (ôûùyö,€´Q=}ú?âE¯O´]¢z²ÁvÀvˆè>œqe•rq§Ã&¾½,8TÙ¥}H¬w²iÃÖ¢à¹úKõj_ãýâæÂâ|­Gœ;®Ø ÇD&ª7® GÚgm•5·Ù?« ¸à³²µe7PÙMpãŒ^ÿ›ÓzyÆIó¬!W›ü1È¿?UÙ' ;3{z¢WÕöæ+_5NÕ„÷¶†.AÓ ¶ß^r”¹Z–X~¢£Ó¥WýÏ}¦‰ª VPf&qÔ4{2y}ÂwoHjv€|²¨ãœäKòâíix·ª< ýýûØw]'¦®ŒsˆBÄ2(WD±B5PŒ(·¸ »§ÒÕd¶ß^¬ýäˆâ¼ÎE 2ÃøD 5djÊ-®ÜÃcåý“Y{–O:-ËùÙ1–0$ì6DÀ»O“)§°´LúÊqãKPÝßvuu²§‡¦eoE›o4“*•9¥açÇ#’?øESª¡ho"  ]ãíÓ"vÛ+_i£ïŒ_z’Aê„]CUO0Á| Ð%% 21fä” ¨NáVŸ|™mÛ·–@E… ègæ0T„…H(€îZàÏ™0Ò$Åü£“ÃrZü}ÕÊd×]¬°¬ÕÊŒøò(£u´ëÓ^mãzE“ EÄÓ¯ìÂ*ñ£’?@*Àa û¾½:ÉfÐξ9YµQå—0ŽNÂô¼¶1 I[ΡøÖ"nÄv#òÁ õ0Û Ÿœ˜0ãŽïb‘UL>ÞÒ˜ÀÎ"a¾ÃZ\)ÕŸ)q0Ùuq’ÿp‡z©>¶œŽ‰•Äð'³z¼Ôå^ ¯Ýäñ1—:ÕX)Òu‹~7êwN…›5Õpað¥ïÖ÷7†‘È­É}£Ôów˼±}ðÑ ûËÏã{³d‚A%⇑2,¤I°Eø™™I›|ÅÑ«qúêäþú‘”a¿»Ñ•-tÙM9Î,u¼#`-L¥[6Ÿ`Ö,K¼>¦Ðä«íëCwyn ÉK}Iª"ôÚ‚oY¡n”ŸØnTD$U¢ Åã-—éF:·¯\è§<ú3õøEF5æ,LWûcv/_®P uf¢ ÈÌD½$, ä—ˆŠû³ø|PŠ8±ou¡hVBÔeU4Éï»ÿ Î_ï´¬ü¤WQn½Æ@TǼ‘am¾"Ș ¸8I¦#þòT!àê»p&2§fS™ùG ¼ÔUôäR^ZÑø yŸSÄ‹s2¥Tñ—$€âZ‚z" 5>Q;Ä3;úIo’3 Ç^7ªãMÕXx\ˆn~üø‚ê™a’ØšúölªZòé/ÙÆ·—ó’^üÅ&¿%Dó=ì9ôAëâB‚"ÄøÁèЩ©ªèGSù[øe™«‰ˆ´›ì„¬´²[-:ÉÅ7Ç!]V]GÖ¿áä]öÃPn¥Â÷åü"ˆIncdyÔõCÃt£x™ž#ñoYº ‘¸õHݨF娄±øoÙsè¾J¼ùU'‹¶ñ÷Ë}. 5¡ï&<ÔÅýÙáGg.g{*Æ&‰3MRèàÄ©¡Jâ¸à ·ø,«ïü!#R1°[™kù9Ï!L$ŠÇÑÒ¢òöÅ‘ñm¼|Ï{hôY)Âu™ø>(¿ö§jØƼHå}H—!Öæzð¢€GOQ¯Ì´‹V¿Êž¡ —ûú’’ÿ¾FV4¥ê‰A±ŽÜYÈŸfÅô°?³~Øä5Òäp 鄙¡ÞY5bbó£13íéZHÑÆXnmS”ýkà¥þ«×VÝÝ.†ÍÌšc ³"g+všÉyÌ­Øì©¦úV}ü'æž4cuóõ—1 Ðæ[ÞÄ2äzº •{€ñMøßĶ=QÖ»ce7“; °‡¿‡¬ì[A‹Y`ä¨%fåÐv˜e ^Ð?sKµ!--]Ääw©ÙËs<•øÖ•“Y²ß‘Út[‡ïgIâ ¶(,¯PÕüåINÈË‹œ¼e`iJ³ó=ºrm¤îÔ[’ Õ2aK$X'¦ÈìoŒ*ÌÔ«f B@%1~çNëör¼³ù.åE‚½êþ¾:Sõaì{&ápRäùéž¶^©Ãá%Ö'î[ É¼½/âéÙENªèiΪóýŒ@ô®&†M’þxpðƒl.}Õ·Âʱò?Ò„´“…¬Ь1¸ k×)q¤rä+.½ú‹z{sEAž˜èBJ¾°òèI†;þH‡{ ´*‚ªààÂ>6h+šÅŠIZVŽWþñw°üìÊ+å,ð»øú¼wø3Òñeøf©IâÙvC”û"6Š9;Lî–!¦ât°¢zµùDö« \0d.ôËžž„O¼—d+zíöÁt Þ$ÞrûíŸ?ª,rÌk‹m ÈïüѺ=À¦Ÿ-×Ï×YDö4”¸ëäHÉ©7¥ËvâHQn¦¢þ£ Ñ0Udß;oYkâ,­t;žë榆gq™­€ïHE.Ô•Z£ö)g#ùŽÂ¯à=RNÍ÷_!ðÄ—œðq§ª×¤R úþšÉêSŸ·ä]¬yÍì4wÖ^ÂkNN„ΩÍšýúcùÓËKÈÿÆÿð×ÕnÛ¼÷ÉÖÞéA¿ÿé.õµ2¢8¥ùÜÐpz‘j¶à\6†ÿ§ð°ê@ hŠœØ É ˆpi|å+a"Tà4ÐÍ?€ þ&#”ÐxãcC¯ G^©þ×­o€~ÁH¼9—¦ÿy5L·þ÷ëþëxÿë¢ *—ñîÔào4ÅAœj…¡¤ s6·òu5B`®§Ç~ëëB6.bøy`ܯ~´÷ê[šœóä(.Âi«Á„÷Û'"BaP 0D²R@i™GI Iàµô£¡ù†çäþí’V–=á{ÒÏp«þ{×e¿úy/®<üxñb½mÄ .LGUÇú{ý ÀSBÖþ³(}šó'¢ 8¾PÀ&N‡Óö»/±_HâA`왩½Q‡\Þ«4nñGO$®Yö^5õÿ¢¾áÊZo}ÁB7mÐFñ=í,q/_siÐÎÆôõÅ€‹õtÙ‹“UtöÎþF~õþ øÄeyë 9=–÷ ˆß8ÖœÙ/ì/ ØÖoh&…œÙ¹ÍçÌ8p]›3õMM±ª÷:Äã„úÝck ñ ø¯;,ƒ;K/Jêµo¦W@ ¬¤œê¸çDVÛÜè16KO\[W‡góøøø)8ÎxÃλÙë¯+Gí¸ Þ»ÕÏV{;4ƽ²Oï¶6 ï®&ăój>Ûí–ùFCmA¦x³¶ERË_3|ïgsHTz§XŸ=È;´”h“£¹d„jAt)µèéã~MêË ŽrÞÞìÁ€Ë2?1D‘¦CÅ©Šƒ°4› Q´ ÞÛÖÖVÆ"pÉ—wÈö\&KWS0R¿Gj¿ •£7ÎøhkYiéKú `àÜxG¬IÚ…‚zcsA.v'l½áÜ=½#p7êç×€vt§H7"Hw—”(-ÝÒÝñßç>ïïõsÕ«÷röìYk}cfÍùNU•a(ÈK¿ ØOdDà·KÏ©{à7gy=Hö<ܘ ü%‰«Œ®«†“•«‡ÙgK‡‡ûGG; 3gKv§ÏÖ™Ç"¤ 5HAZRÓ3ë0Û# _fáWÀr`uõZÒ—¦ßØ88‰%yU=f ¯ôŸÍÅdÆàTE ®4%H0e¦d$DÌ~³ÓF˜JhJãK~ÖwŸçä~zž˜äžæ6;>¾xp÷pÓrS9©«Êñ.U„HbKûÒ!8;|Õ 1OXåRÂF Í ‡—Ä®é©<ãÇ¢‚&Z¾"Sƒ%èééAÈAÖ‡—×¥gIe–‘¡òžò lxœ±¹O'‹¢¤fÖàÀô ˆ xܧOg Iô#q¦šˆŒ˜¦ï³ö¤õÆIô-L<´´´¸›ìçÏWBPð\s£+QhiÀÝ5Ÿ6ÄAN¸ø¹w¹®ýü'†>… –æøk –ì‡dX{ “÷Üj`µœ2I"‰Þ¨•±bxûsÇõ¢S—JËÓõ¢šÍtÍÈz¦õã2­5¸[¥Þ–€èÀ ¤/_ÓÓ#cbЙ¢ M‹À?Å“(À¯©C¡¥¥ÌÙªšÚÚ¥¥Š:, Ï@j…¿fÅ“w—¼vVj9"-¨3ÜÈÈÿ½ÅO4(&…õë׿«ä$°y dÔŸE#bX‡œÛ–Aš›¿¯§FÐ[ÝGw¦÷'*ØS+UÙ82ÕR,È1éé^¿VHM}i^vtê9oô¡d |‚loo÷Ð@dÔý?µœLþÂ}¶#Γ^’ÔŽ &™ør‘™®!@Ý+H4ŽrÒ Œ‡ªŠ"C­†õÀy$¶‰gV'w˜H¶Ó¥¡ÉÉøËÜ2¹À;%g ÂYkàƒä0©®Qá­M?ÊÈôûux_Ýõ“ydAÛz•®O°X†z†ÇˆK–#L¤Ó+ÝàaYíúfh¯ ¡îù纱7Q(à~˜6ª”7ý˘Fua2AAAy%™ÍØÄÔTëË%ðÇWçªÍþ*qt$—j u!ÄÒG0IAˆ€bGš«å¨ðÿKŽk—缡ö<— pµëð®ÀYfýü)¾æ*„ÑyýI€|ppPÂÛ[¨¶¶v¼T‹ekg'ªS©•^¯Íõ_mCsó-s…;Y$ˆö8ÏDÓ9ÏâW\뺖dZTDŠå‰àÁ~ÓyrM/üBƒºFcqeËÚ¼+_·Z›U8ü’#BÔFXøe±¢ò¨ J¾ÚŸ–RTŒr&†VÄWèØ Â!½ÓÖ~•%“Çô§]£XUt®+à¥0.R L/9G;·^m†y(fÀc9æ¡Æ²+îf¢ŽO.æ ÿõëW œ'¸?è]{#fð9D½RÉè^wŽhÇkš®4zhk°›]oø"³¢e§K`KKœvxŠX¥aÐEŒÎר'И4yZU/ |ÞBÎR-6cáZsoKLI Ka3ØC æJHMN¾\ßÍ xV033³ˆ¡€i¿'€¨‘i™zp¨íø|©›p)¹oì©uïƒ0•4±ë7ÚGÖ×óœx˜Ã×ÕÕuwù?Up^#&`S›CP@AÔöf¿Þ‘!À…Ý£«ís‹XòTAO¾ó%Ñ3aïj€€*Ù˜ú¡Ñèý\ð o6°«ÛÕÐIÙö೟; “è…HÃ^,„Á=¶EkIu-WkùÙ«á5ˆr=¿!°æ4‰^ò|N%é¸3åeên¯'HØ\‚ŒppxX:š-!%åUÆ^nvöÓQ™lï§ÑtOP±B£DNôU¼´Àl#¬͘fI‡…^Š›åÈwÔ¨ç+̈ ˆfp9è]¼þ”8µ¤úRÎÃó…¸?ùÕÁìM™É%e̱ÝjYoÇ/`þ~‹3Ê%}KþÍëä £ZÜÅ0>è’Žþ8ƒšâž D:Í­ªÊ6@Ø>Cœ„’>-nöÙ¤ˆŸ;àUp¬eÒ¬ù¡2³°th<@(×NX¢‚¦¦4ëm& $$$­¨¢»üÓ¥Z‹À󱯣\ªbEÀÒ}ÿ›Z:– Œîh0Ý'jÔgî}‡‹™½¥v œ5“ë¾H¼VߟQàÆ'///›©’Ä› Á™Tú¿91ƒ¾`ƒ€*(€½‡°]xåpÓʘ¥Ð‰žRúî½a­dÝUH][ÛÊ(<¯BÖ _FRQU¿Þ&ðòÒÕ_¥{9–”w¡ÓýhÁQÿ«ý5„42.ˆp<$YRÝá˜Ñ‡gZ¼;:ë’{6›STô ÑäCÉü½ÚnHÌn 1€wƒCCRÁˆ®'=MÛöá½êõþO÷q$Ü`R\ê,ŸX׉6'8÷¯ HüÓ8IovÇül¶›_«˜ŠàAUf4ôÔÿ-# $› ~üøa3SNò^CÃM˜„9*‰^áïñ~FêêêJÀØpÌ`äd9¯Ûɯî_w_n¡W8?–YójeŒõêr;F„ À'‡|¥.) ·ëó:>è]—¿ßT™Ž½{ë·ïßý—[iü1 iÀ´1ÿÍnâAÖžÊÅ&Få<6tþ]¦¶¶ëêê ÝGo³<ÄNÚ`#mí &ç1T-ôj‡Q Së¬FÖœnç äz)«&MŽËv'íªB6òÐŒV«Cx»ËÁ ç ÝTÓNRÜñãƒнõÅU„÷c»Ä©®/ÀÉ)9˜Þí«Ž”G>¼ŽKÄ®ú¯€ôR~希 fêT/ƒé!œ0EVŠYº·'=sâA¬Æ¸2/œ49rs;§éÞ –ƒ@ª¹b,ÖÅ:TåÿftT¶P6ÖµçÏ…‡¼ªêJ3ðÒ>4qh@˜áþ ËD Ë?ƒ–Çyï¹7V” ÆÊw2Ðj¶au Dì*ìã4ÐÝÐR~Çr4ìKß¿ôü½žî¯¨¶wwg½à"8%`Ã2 nyŒ­œçQ[fª„Êðì8ÑÇü‘†Òß}G¼?â\Ókˆ7!áLâ/È©ãaÀ²ÎvKYM€Ò+ðó8.ÝðÚÍ¢tñ¿XpÓ G†!Ô»&Îv—8&þäÙï0ð‚óÄén2Ö4VÇÏbg›ÞŽtU-¦L|À\[jÐÌ+õ † >\`Dÿ+ wHOÎɲ¯b{šE‘ÿB1Âû^ûˆ™ C©JL— {d|SGŒk^?rh½.vF† ýØ’ÿ½—RyÌ›èÁµL/ôáý&fëíå „›s0333@Vtbè¦Úá‹G²ªª˜çççÚ¯¾ÒÿÛðÙ¿`áë< ¹$þËÔˆôÞ2G½y ΃¯‹#e8ƒöPùH0ÈY€¨mrL$qúq!^^·ÍV·Ù iÎIÄÙ7z+Œö3þ•~YÐÇð™!1—å9Ÿ+÷ƒµ ¦¨Ö6SYYDÈ_K½œÑZîîîÒ÷ Òƒ<‰È$±Íød~¥šÅš09˜½"C´AÒ=ýT6”2ê ÙÙ±KK†Í†ì@"žÈ©'/’òÚÖ;Î×Z²I®€z ¸Ñõ1XI¡çOõ®Ö•ò“/‘‰òãs%deÅ(e…b¨Y¦]Á1[a0‹DAÆ#ºëóÖàïC7XòÝd«ZódJaŠÖ«Z²Á¡â‹½El€<±$™¤P£öJ¢oî½f@ã•ÙªŒû3Ñß¾Ñe»/àÆ‰hKqÌÏÏ;·–”–š_|WJr½ÈöXy+æç½G!쪟ÃTªÕaë~…áKPÄ3/—i9!<ÄœˆzϽM½L›mªÒ(3—y/þãÆíÙ¦8¶2AÈZF‰Ùé]–ÓNÒÞ}Ì •ïŽ{A šyþˉâÃ~G„i;ž˜ë™Dÿï;!›¾/,¢h´PSjlÓh[Ù0ÊUžaËs2ìqëbL^›Cês%)ôôõû·oøN€"¢¶¹’èûXñb>5.L1öü¬Çl»CA ØÞÆ9˜_ôÑ{f&K³®’zrüL…ÁÍáÖï/–·Ñ \/:,ºæSCMtÈžp–ø—¿(e¶‡s>e÷[ì×”ÖµôTaLìO#iÀòQV6Œ‰Èÿ;¼ÙþLÖ5Áˆó.ø¿Á¿¶²¸±Â¹/÷ïÌrAƒ?¬ú…Sy%iøìØ´HfImÜ‘-$í•”””šŠÔ}âg<[¢^ˆQo,1’ÄþNܲÓju+C '|쟸Î݆*aË¿Æ)!°Ïù§°ÐÛg¥Fú |zu;Šï %bC`_›_×5ýl’ª:ùN4í@ĽNýI‡Œ ']ªC5ì²äÈ¿?õƒ. ­äÀYu¦ÒÈ'|øÞðÿ>÷i;sÛlR—nÔ5&‡åóKø$õÛ¤ñÓ_\åVàò8ð^ÀAŽMd€-h†âÐl@3‹Å@Ì'h¼-úEÊ»!+ê¥á}cOñˆ(Ïy*w$Ò>`âVÞÆ÷öÔÀÜÐ=Y@*K£±Åv5.>ßü+ÎÝA6FŒ„Ú"â©lÛL2`×Å‚2Íq8ÏŠŸÌ5mîñ/(xoâC~¹4ósWá?´ƒ$Ñ_•µñ9¼Ò”ú_ ½AºÒ”  ^F§>Ý^›üŸ\®s|šZZ(“w|…ÄØÛ3hò gh˜Ãþ¬u“tйÂ&‹5"‹½!"Þå>V™`›ñáà œˆbíï®?ÿð@ödE°é4d'ttBbbþ¢>±„‘^ šv•±hŒÙ‚ J íÿè'ö$º²GÌtL^¹îfdça‘3"‹JB¦ϦøüÝþ;|„ׯ_—£_+Ý©J¯Î*IaÕÞÇ).Bç|,зoߨåv´ð Ô“ìfÊ[´XzåN«2"ha¥Œ\F-!–;} %±{p »Z*C£6”špA—û…¼ÉyÛ°<-£åµ ‹ãIëì~·Ž´= k§lTsD"Of6–#*ðiþdŸ¾ª…µú§:Ó ÷­™>¶ÉC¿Hwh\”ˆ‹Lüп—O¢m²ÉÐAÄ¢dÝ¿û‚aÁ„-¹JÂl±Ñáv¿¬ªÚeWõñv3~®Íƒpá!þ(v=þû÷Ïf¢aTp—Üõx‰Ä¨ÕU²X5›zè[* qïh*Q?ünÒ3Âüp\5h®A,–qªæÞFL.“f†‘@ƒµ"þ·g À“„mÏ·~«î™pö#ô½þ6*8›¼™£©_Žý5®¹êz¾gAEE=ÝŒGÔòßL´YíôK3 X=\lÂRJeï?ß:ë'2YN禙ž­6“B'åApHP½SúÞr÷äÐQ•{ì “ˆ<ßnöðÂ’^··‹ˆ\ÏY¬ØM(“Wòï B úäý®,Q«êŸÚ:äR1š†¶Eµ³Û …²KJ?÷l.°J±Y¨ÿqä10F»±hw"—#/*—b™%ä†Êžª´Ë(Bª§ûƒªÞc@¤ªèÕ‰sâ‚?!¢€â<±Aì©h™üN²’’`à…€ MØ÷9é¸á4í†r6°û߸wzö‹ÊÐs~>ÒVöÀ›®ýLãùˆKÊcƒ}}†˜Ĥqš½•û8]JÐh?¿a¢;=¨~9ñ½ù£ÝšÝÁºp6{³¡ª@6»@¶ÖÊÁÎH&=Èâã7º'r…¤wúúQ¥¥ÌËÎLeXB®½ 4RŠõ³Ý¸‹ñ<ðØŒ@”” # ÜÖ9³®Ëÿšx7Ø9ífXËõê^ÑÊæöÿsÝxºYýUk9tz9©f°ðL¨-±j1^Uǵ¾î¾¹(rùàøqhœÿJ®É×%N¨p·õ9%&Ël[¶ÈºóYø¦ @!€{,¢œŒLhS ½‚Îööv…!àê ’Áˆ`¼yP_‚ßÃu~^h(…­PDí/ÈvŠŠŠœdžígdsuÖjS¹ç[ 1Tâ”ö?Ñ8Ú¡ÉÉÉ%M4„§êw´pžgæ‡Ëmüåc[>Ï Û`&L‰‰Ñ7n¹lA‘P< ôèŒOJäà]KuªVö{zzÊ®š°è!¸¸ òÄcIH7•/tÖ$€bÕ÷B¥/WËè5+kžšΕéñR‹€óhÅïfÙ–Ùk½PÿÑÌÇêtÀÄYþ|xs2nœí±÷UA¿u:Ùæ–)7x\€Aì)2™XX.0‘˜¢þ¾bcsXþó•åáêxÙ‡H¾†N»\Wr ‹T]W7B½PAD†ubÍçå°ÅŠ Š™Uÿáù•g¹1¿ˆøçNÿU£U¶#¯®à'Ü >9óÖb"ˆ­¯²¶6!Ë8­  ×HË‚íü|û*  @/ÒÄ·[_ÔN{Ð8úZIpä¦È¬ÇL¼¶¿V‹kðPñŒ°Gd\É}ùpX쯌ÈgÜÊ’ÿƒµµ XB=9  / k4é´‡-r ãi|W–üôéSy&¯.«n£ÓjàDBžHÚ‰$>¤±ÚNPa,Á™?œ\ Ê7æXN$ ðni¡_ 6ØNC@îtùu''uÒ"ÆØ+¥i1¨›¦$—scБ/ cp|È1¤,Xÿatм‚’Ìy\Èdz­ùt¦¼Î:“Œœ*ÃÚé,`üýœ—©mó "=+[0û0[iäy1Âo±a†ŸpópÒµ €MÜ7¯.\¡QÝ H«Sá)GcJ²9V< ¹ã^"wÓ½­#¤ _nÜòÙRŽMØFžÚ »œÜnûSiåÄ$1Þ›“ÅjüËÌüYcܨÈõz…Ú5ú©ŒZhgG­p¾_ðC÷¤§‘¾À ¹TkèáâÂw(zB‚š²òDä0À´Ãä"žØh„¬nÜ´ˆ«bÞ—L°‹×Ùò2=ùôzcÙ-s‚:JÖ d³è|Œ”ÑqošSÈ„Z[WçF ’ ïU— ¥n„ ™3àùQ—ŸfÃfÀóúpžæ¤Á4dpütŒhy££_cê¾Þ[Ô:Êúž ;#·B‡jϯ›òAoGFb½T«ŒÝ,š, ‡: œâÔdƒ8:oiËËÖûé’¾±?¾±ÍŠÿÅtÏËÉg{NIàð‰º¡^Á9ωŠ '”sxšºIýúµßb;TÛ‹X[›•³j‰>Ê8äKI (° fú¥ÝFœ{¶VˆA¸ëõhÙl!7PI¦ðÓõ¢Ó-=g?‘¨LHšyå0éÖ˜#ø;Z=E¤föN8“K.ž2v¯4`³8v^‡ÅóŽL_]öÆ<½¾Â „ûËvßÛüxŠ ®>²R¨/‚ÍäY[[o^þ›\qƒÐ+üQQUedÌ?-8Dô[ã2Ìz[Ó>, Èx­¥R …0! wj{& å°Xõjázëý¦ðe¼L‡£ê Z_ÏSï¸LŠ%z‰ÍeÖRݱëv0Z”ã)õ uâÞÖÛøO-ol·D[­ >A£ÄŸB4²ÚYsyQZ)ì]G^¼o D>“Ï„ú†›Û-¤´oõá«I»ç'¥FÒ`ZåP„`ra)|yµÍÑÙ ˜œ3`veãÕܾz À«þè‰^Jt¥ÏŸßPú]ª·3)¯ˆº,x iˆ¡\{j «îר4igé —ˆ¹uÆMâdèƒð!›7=­‘gx¦Å²7z·iÀXHù÷¹ë E;¨ëÇä”}zëîÎç}µêÿtŸ¯–+VbÐäXž™œF²1‘ ô0L ÒæO§‚ÚØñ\ Dzk [v~¼ý”ý+_gT%à°î¶íÁÏKº²Bwé®x^‘¦9KØxMã€u[˜²Œ Š„g¦§§GþýûÞ]`m øÑsw±{Ó¾b÷±_¢Œ(âúæu±CÌm…XΣ6÷õ£¦Õñ|©ß·H UÆÕŸ6e—|/F$Éb…›átŒÜ´î×éÞVÒQêµ¹³5:,Z±8YYYÉÕÞëûÀ_i"”YÖSK¬ƒýÌ¿…¯ãÖèPýq]Ý_À×îtýå»JfJ¿¶5ß0waU0ºì}PÁÄÎ>| §å|C·i­i–yù¤ää |f?ƒlÆó$çöýžïv¥(ÝTrƒ¿«å:²äö®wW›õ¾õÏIZ-ýõÛræëzá³Û ˆM…Ÿà]ÔlèÌ€nd H¸\4 ÀÛüyJmîG;ñTâ9Z†ôt(ñ8Àš†Î?jeò«ÛîÉuÜõòœàó$xÊ·ñ”¢oK7ÇÄ_ÐÕ,6"N:0Ë´+j¿Þ,ØUÉD\ÁMjj]žëÆR‡8pÂÄ^¡µ!êŽÚ®7ý2„)H[zÔOîê| ³ éUR`ÒËzàCppAÒ=KµX𠀜Àñ`kZÂ}׎þƒá¬·þ㤽ϯÿF“ÓOŠ:1×:4ãP+ì:·ÀLŠñf¥_½Œý’#?¾LàÐQ؆Wg#Z¾ºîÁI8$¯¾=éŠa{WŸ‘5ßÛÀÞu YoÄ¿ÿ&¤§Ã6+¾yÅüøQ^E…×p•šP 3Z^A!pñ(lòß”ÿNG8&Åýåá|ÉSL<’ » }³é×#›H™÷ý-R:âèšû#l5L¼ÜÌæƒNXÇ0Ε;DGïdÅF³muWSÇ?iÙRÐÅìÜ•O‚—ÇÅob¬*ð”.VH;3yÃU‘ºÍ|¿[ä7¡\B°÷º¾N“%¨¶ù+þÇÅÞyÙ‘ª’šPÅo¸ßLYXÖÖ¾IÌÉq¼uÁï]Jù¿^. ¡Â¸­G»·?–ÓP­Ãz,‡ Dȃý¥f½½š5 f÷,mH CÍÏãÚ.Àä‹z׳³MÑ€:)Gì:ü¸?å“|¨S þ 4TF?”°ä˜K$‘D­PúÓ£e9Á’S,rì†Pú¤=¤´âµˆ¡ R;É8z² 3q׎þéaõ²K€*&U‰àÇ{(„ÔÎ4žª³„ÊÌÂü©|ƒ8ŽB´ÔNêýû7€XKüú5ôðƒhzzz­"‰ÄŠœ÷-ß‹‹}d@ ò8AaŸ«}K' Ô·H>pþ\Ø/ªôR{`F2¯¸C(“ À69`„j¾zÜž®¯àäxUŸXM¾HïÚ“IK†t扅§‹æ]ÝZê :¾¡žcéëïCo6¢ü´Áõ˜‘ÚÏý×0>§æ¨]òæâÙNe6¥:ò´mC`Pè1¶â&>9‹]ò÷?ÜG/ ¿zÖ¡Á?ïû%Æ·.ÝΦ%)'ÆÞ®9‡÷á#T"UçÍŠO¶SÇÕÌ—ñ.†sˆ®¤òœÊùž ^&IÞÑ^sùn'Ó)Èx¤ °Æf¹¨D‡Žw™¶t’\-ÎÖo—'ÿ\X<Šr{®S+¼Áïß•L`@aWSH¡©©ôWbž"†“93AÔhbrnYJXbLb&œâcy‡ÿ44{TõUç’/š,$¹ö£›C`ÝúÁ*Ø¢©§h/š¬¨î†AáíG=Å¡?ÎkÝ`ù¤Ëô-OxIw÷FþïÔ¸\à$zQÑ凓÷êÉÚ±dü9ž§kd„¬ºÝ„ô8¦`X4Ìú£$Sìˆ pýüoבW_ÂÈO+ÓˆÙ›ÄMíY¥A]ò6|©7ÄòI[G†>ý Å|§“ÜŠUǦ!nžü™µÏm`™@V¯‚•¨uÔ¹Èá —Fæï_n¢¤Þ.…Ó™IK±¾Œ2q~Öà(cfù´5ˆC.øyJ8 K›mZ8¯";†˜3ó ¶¡ 2Û¿ÖO›Ëu¦?ƒþ-ñÓà˜-Nú¸g}7àåÁdܲªýüA÷í÷ûe>s7K.X §®\çÃ,künk>a¨_'Ÿpw‰˜¿<ÔíAøÃüî@xWÍû´ÝfÃRIîGÌp8Ç&HGôŠõ­ŸBÔø©žÙIu«vWðàöX¼Íê$G¦šÄ©ƒÕj.½BI Ó¯u:Ï—L0üɆå¼ýä¿|Y.°lW0ðI€“\ÙndPð>ä£b$è¿ '8>‡…“®±’Z€1†djÌ_žŸt›ó+ÚE}®¥®:fµšƒ%é!Òañ¦\kd»©éç¥4.ä+f™™¶—/@ê(\_?órÞ8{¢—mˆ$~ QÃfêl@vý—ór×òÔ0ŒXÚ°s”Ç{F4ÁCiß«±xÛÁM³†efT͈ü¨FÃÆ†¡§—.¯¤ÄMñê´¡7kkëÃI½²Œú{€àV3ùVú›–Ý PVy|Vó¬`í2èžOW³ìÄ6M@é`5œfæC PûAå¥SÛ†ÅÚv(Ø$'ûü—¶nUèPQ\:ÉÍìƒîûÈQ0ð^Ž:nx|‡ êÝ뛬2´–ǬuþlRïþ*Ìç”9º<ãfA‹ª€Ý(‡ƒ×@Üõwš‚eÎ[ ŠŠ ‰‰11èËÂX²èß¾«Žïà½&KÊëMÙ-ð³ ¶“€| ø«×óþ(&…t=_U™9ª_ xÓïŒfÛ±œÈ}hµüÜÜ’¥í¶A„ªSÈ:˜?ß’€ô·Ä† ò˜k!MAp šâ2¦·ó.ù;1ÙüÃr»~-뀜°óÜ'íž—QyÒé0õyôHã'Bòl·,õ®¿§êhæÔâþxýZ^EI*é×bOʬh?-¥D& µÂ_#»™r½…B¹ø"ÃM× Fd€L×à ˜Ò>8 ºŒðÚ,·º¥ˆ®ø?8,–Q­øœtô\:“ùO¤‰gþ*/ŸlÄ"î­ÂÀ`ŠŠÃÉ’ Âþ+æý¹®ŒŒ{ ô®{Ê)—BJñ€Ñ¶{¯¦.5\]/¸Ë»~ò˜ÅÜŽã&ç#¦L=iNƤ‚Žw¿Áã~P‘o1dba øÕV¿”¹¹ÙZƒE!©U§7ÛºþÛüÝÝE:ÉgüSî[òµ@`¢»*¬Ûæî0¾Må½—ÏÙøªUSSÓx¿ÆóF› Ȭ±OÅú“œbÀ=àñ é•j±ëÝJ‡ÏfA4;ªEt’¿¿&¥ˆ ËIÇÍÊ8‡$ 2‡‚¼uA‰lº÷aÜ´¸¹çáA  äÜ¿žA:m}b n`€ð¯žce ]òðœziÞ«7NYˆœˆ«“7±¸{‘|A4“MM'»§K“/–jÐ"zgÔÒ,U‘!¶‹4QAAÕb‡tLffï**c–uˆ<>lÍÈSK䤨x 2÷­ªžoý^wÐÄWÇï¿þ.(3BÀ‰Úê§î‰¤ñ¥#\ÞÞàTát§šù<ˆ-NºVºl}>tñÙÐIä^pð´HòyŸî23 ”’­p-:é±?䔼£š¾ÒÕTådº6O ^O€îÚprnòãSÿ&E_É“@¿çR?T­Ø`­éÑË ¯[Ì&&\+ß÷°h,‹Ív†Ó™˜™Q[çj,&ëÈÙÈÔÊjÒI.þtù¥¢ÝcÙ-õßïÇ9§æu¢S.}dy©ÕºÙ1ȸ4˜2÷þ\N‚{p…ÇD‡ÊQíÄÄêq4½kêRéG|ù|gבØÄ?§äÏjBŒŽ,a°ýŽSY\û2Œ­Çxì Ò7Ö»q9Ä/Ì­KÑ1 —WO&d3hô…@í¨´ ¤ìØVt$“Óäå^g|ûâüüô´+¼Ffâ ¡ÝB,øùCˆÁf¯£¸Ýmƒ]gŒ+HÜ! 2~~ÛŽ•;þ.m¥«—£ë¸óEcùáùŸÿj.‹OãI€+|ýËäÍüÔ ½O8üã-™ïNÇCÃàˆóm"R­ŽÈ›I8K…7kŸÕ j\à Öú¾œo­¶îdØùó [Èî©`À0 èTbK×í8c¢7ä€6!ЖI¸cЪõÿ ¤Áß¿k¾òO̓Üw¯£ÛA ~ê¾P6%Ô¡kë“BD¢Ì Lê ¡ÔD§…GHxòy©Ý%"vDAÅGI ~XÆÛÖZ„%q¨ø|ãÇ€nÝafàè[°qÉæxÙeçt™´Â¿ä†öEM$ò^üH0Ãá>ßY}H{ôÿ˜•ƒ”æœ›ÊøxêÌ./iñd$ì¦/Þ§£†Yóµî@3{­ËšÅ5UÕ +è–H©IýcÔ3´Uñ©™¼Sœø%ª‚÷kgû@›•D †òX×U•€1(ý¢ëÃÏ¥ìǨ‚n”c®=õ<ÕÔËW{ç™­/ßlA×q;¦áðäq@¸†ìÅÿ\ìf+c sŽbHëÍû£Žýî/õ¬ÿö‘2¢Â—ñû cas³ÀÞùÕÁì/–ªvÜB™\£6÷üêêq핟ÁHHíýŸšgà9¹÷ý@þ´P‹`$™6ôÚ¸ÜUËpS@ðñò¬yáó²íÞö˜Àw[,a  ú°ÿxùÒl×½Ë6~õÜÑ4oܹC`J‡Òáô÷AŒä¢ª“ûgü_Æ0ûçr[(ïÓ£$ÉDå÷ëßEâɷįĝ_Ⱥ ”exG×.±`Ë Û1ˆ!á~[j±?õcpdC#Ú¼wꇆ›7½B§J@A¬ž¦8Ä $<¢Æó’Ï1>r¤ƒïI¹Œ×F†y€'&ó¿6t#-¹þ¥†í)‚jœyü›ñ#bÖOb‰¥‡&Õ›‘§d„“êˆQPqÈh÷ͳ§K…O•¿G³¦{i#2à ipKKKCz‚© ïñ·ßÿì%ør`‹d¨ìùظÅá\ Í•j8U\§ßCXÖÄnw Üí^a¼ýöÑlÕ¨øË#r“||"K®8æ GF$u­µÎõfnþ ²¼ñl³U5¸ßnJnŒÔQÌÈsæôÂâ&ÉŸ ¤"ïYªý8p/#ê·×?\¤i]ndöE¤XŒ#p4íâªmpã(ó/‹›Ä—°ÛɹÛeü|jø­Lf"â±€VGêúúQ‹N]Ëן›hÑøŠ<ÖiŸ&èòÝCX‹åéÈMäe9]êÉ]ó `ö±01ýVB0ho´Ã_­jj°»Ì ®“²K¥·J¾ÓX ï‘I¬lÔ ­9O\”ÛW!#e"É—(þ$þp,ô ”V†²^Âíu€ÌãÁ›k5&ÿ®±³\dR˜rŠhnzßY%€Ög=pºDO{çZ\¬Ç·¹ß¼9” ¨¨hLE”C#ÿÓ¿¹:öŽä›‚ñ&¾¢Ã ŠŠ¨YªÅ|7«‹¯Œ»qÄ`£’ Ç\>FþX“ (|Ó?ɯô2çôô\ÿÎ:=ùjg£tS{7W¨u’[•ËÖ;S„Q÷—Rƒê§côVM÷¢È'q"¿ÛÅà$FÄFwñð*0b§úIðö _v äÿ$"ÑËçÄ&µØÙ-¨@G¾¶~ýo¡÷Ÿ^ow® jæƒNiH7 ¸¸‚…MW!.Û)&rgê=!X·w‹Ëî«ÇæNßÓŸH€Õ0ß¾9Z$r,CH1ö\G¨·þ3^çÝ;:zGDâÛxSU”îÀqÈ—xCò‰¥×iéáÆã‚Û+ô¦"ÚÍ’g…à²ÍO¾&Žf"BßÛIFùâ›äO,iÞ—›Ó-uÕYþ0¯èoN-(ˆ  ðµG"Nаû¢& 8{‘½ó$z³ûË@öΕöÑ$‡&½]NçÖ­³Šý˜3Y¬†æsß¾˜HØâ‹3Kéx cÓ:8O ª¬u¢å:/Œ9×» D“¥‡ÙcŸUœÔ5¿e÷|¦†.ž•¢Ÿ&û‚“µL-Imîü—¬ŒŒýìQzÞ: ´d¦Cªºž½åÝDN»áš¯ìz§hi³ª½ÔÉ¡zñ¹2<…Ýö× ÈÜ:yt^$çƒ$Vn £ëzÞ«ôËçŠp¸ö“îÁWµÙwÐ0„9ýÖ±#ßdcÞR‰¿¼àׯ0qp`iÁO!™1b⇰9‹ö›`®ÃÇC9“&¦‚¶ç÷²Çj¬Û>5#ã¯S.?»t Rhï:'9íø(ØO,¼ q¢‡”;oN<ÔTª›ù°m  ŸNü(¼O _•Nô7’Vª•†EÅÞ%¸=< Arûg…‰.¡ÜÖ£Èp¢(T°ÙWÐÓ# Z£XÁHîË+NëQròz¨nûù¤šøühfVVÌ@,YáÇÉï6 õ¯3xíÂÙôód¢ m&¿cÔÖÕ÷0ÚUàç>=<ìN›øœÛmO+Ážà!¯°”­t‹a˜ˆ#ûì‹Kõ2Öóæm³q±þ’\›E†ã€ªœY—âÀöÝT¼öòÃßê2òò¼<¨Wwp6FE0hiiÍÕYc]Îoz¨%Ñó8­-4H-6::’Ìuo<’ÁËÍ»ŽuS³wKã#WÁ‘¼]ž†û;–f;ÒK°¢C¨Ø×ÐëOü¸Â–ɔ֩@LÄÃ`zjÁy³™Í*.ÄT\tƒ`NÇÆ°~Ľָ¾sÑžrêøU°¹Ž€ ´Yí…íEUµmüUâ±²ún–W´hDb·åZ×¶×îêo#ö©1IëÃuJ¥Ñ 'M6 ÜQ‡MÙKdü­UQQWÿï'Ž à­+æj-•£ŸÐIÞÀ÷†a ©G„ì\þ›œkþDÇ縑jâ+8à…{-SvàÝfÖQ@ºRÖþcÞÄݕا¤nt\kÅJ`Ÿîþ0?ë ¼B–jwÍè¹ØA³ÍJÊè:‘í J‹*Ðè­ÆI.àÏÔ|o×;­Rrt=~&6Ñd4d'‚íf-6Yz=…ÈÐ Te°˜ßýZ’{`ïú)šH)îé2œr0È휈m:™FoáÑImêØûÒ3ƒ‘ÉÉŠÞÉŸÊH(цÅYïÿ ôÚÝû™WÐ/¥ªÅx€5èË x&q¥hiiñÜÍöp­” â”RÇ4œ°ûa7 g`-_—ûÓh~×2c9¢¡×áð ²5§­‘P(ûH懵c¬7TGøÄæ¿_’oà#‚^æxÁÔgÏσ¸I_¾ÀÙ䦒2üWqAÅ9ÞÌßúý?è Úi¼\¯H­’ä¢Þø€w‚.÷ùóX\ŸŸ,e k»KåÝ îU¶˜Ô Þ!ƒR¤ÀÊoÒ²À×Ï ~8àÀ;ú‰Ÿâ·c. O"ðbPxê׿ÿ¶O3YÀâŠÄF•îù¬t\ëË»îð¹ÁÔˆFn —0¦LÈD›úA'¦ï¶G…¤š…G‰€I7ê±þ£´´çþê ÆÿÉûñ"÷E:žRÔyR…??àå¹õìc(ÿ¾ÿ,Ôìd•Så)׆‰úrE|7¥éŠý³Òóïà…D„ÀÀw¢ð …¤Šï'©¼IÇÍZnóoŸSëò+¤F+ÜöQ‘þ“4…-ÏŠÆÒoÒ®ÊäGÊà©á;ͯz8_øòxéýø±{'nfÝU¨æó¶b¹a nzz:1§)ȱýLÖõdeÙ®$f4d2ʸ x[ØÞ¡É¼6‡Ïf7&Ù~‰y;ɬxeNØ:Lt‹·“_G|„òªâÃF–R[ûŒˆ ]tLüx­Ú–ûƒðUMLóó–Þ¿1̳Óɳ»ºHí‘àx%³½ált˜Ž0 @輓}²_­ôw?ALÓ ëUüøñ‡GZžÿÓ}óvŠ'æ<ŽKid¿šð.ËL¼Ä,®Hcß#«å‘ ?ƒAÏžgí/k/ ‰ŠvЛgtØ™µíõp*L¯š\€'iùùùÕeÂÌÂr¶“é´ÑOdÒ‰ÇØ£ít±Ó=­§cüß”Õ`Z=ßRéÊå骳~²XK²ú]µ;ÛéÝnwÅzÀ5`"η8,€z”•l q ãr«×ÉE/(G‰ñ)½õ1}Mè9§‰8UÎ7¹ݳDbÃãÅâØÛðå¹BÉ…=×þBúñ `UPRnnüÿôV«ÇI@^¤&Oniú ;Àe¥sÍ`d\Ÿ6¤W:„·Z?ìÍ`4 åL7˜,þyßAlÔÁýæ ×ùB©Û„©Ûe,ƹއ8µ"¥Tó‹l–[yaÆNÇÍ'’]ÚÜËåù6NîÞPHŒÀ©Zj°EÂÉ?ŒŽo™„6õÿ¾@Ií`£L9Ýç&— ò¹9îߟ.ƒc':<Ö.Ó®èYÑåÃαT6Ó–ìÊ#çÝÒ.× $`ÑÉçÝYrîÅø©ª€šÔÌÆIÀ‹°v¥!Ég#`´O,@5DÎaè!.4éˆ\ŽÀ:«QF¯'ê¬ÕXõjé×jE} &~E¤Ï] Xºö­-,¨L§ r³\üAIK‹@¨àÑla‹˜Yu-­mq|”ÚçÅ_Ô·f}šÄ}Zv ;b§&Ž kHƒ\¸bÞ ·~2Îò©\`ac†°·2½¥C<Yûª£YÕ½ÔÒJ„h2ûû #—×ùCïEG!ð‚«<Ò/æNž‚W𰣈 ]c«t`S¬ `ôƒ@:žènz¶Ñþª¤‚ð|†µ6!§uãJûNû;"]JJé.Á¾—%û÷£c¿Õ­ØMC’’ ‡öÔ¢6KõÆîß”à°tÄfÀUˆ¬†ÈðÜ›«~Í»9>°æD‘—Ç ›ÅÆ Uø[§ ´êm©îÌÙ[úGg‹[ÄtôpõA8S*\|¢©ïËÓ 1—9¼ÿÝv*ôÛ æpNEe?•Zóòþ߶Ŧ²è£Ãy¸ÃU¬Ç³pRuªý‚Ðôt‰:«ý„X28•LÈÑÂn2€“¤DÆ;ÚîçÐêùŬëê$iüYc{Ø{R;ñù§ÿplS—å³0Þ ¬7O`§0^ìm®˜dáŠS”"[îé[±\õ'rñgd‘»oB+•ÙÞ”=V±ŸzW:l±Ú•ˆÖë¦A¨gôPÓec¡ü+ï•Ñ‘Ûú4ÄÖ´vö‹JÎÒ²è8'11>jhU‚:¢Žt7ÿî%vØm#!* ÖM,ìn/öPïXq­)eºI¼äØÐä»ìfëð—¾áÆÄh¾NŽ"õdNýi8#Ko™ÏÐ9°u·;ŠÀöð-5ST ËN »óïÜJ­´åý2üë[‡6bî‹£ì 2¬‘qðoü€\ Ÿ¯³FÒtœãœÞ¦Šu{PËѼA¶™FÝ›”ã•ç9hucqž5Ú×} A™ ZÙ[6xòKOURèê9œ•ôG=T`aGSÖ' ˜žÔÉ©·îeq†,$TU1ÙÑ-·ã™Æ—êtÛép¡ªÿ× ðÐrÍᤘá½î+ J)kÏ'r ‘Goþýë®ÿ8ñïŠJøû5ÐSµ‰¬nûS’€áTLå·¢"::¸ÿþ­¸„÷Ü;¾^_O@@ÀÄÂÒ»Þ^¼5´©3Y*úZcÊ,Høø]áM&Oä]=ØâWéFI#y©?%!Ð>ØŽ‘l,i(›A#¼¦ãšÄÚQœÇ bÐP‘ªŒÏýdžb2Ì÷ïß;ÿ+J-°Ëiªs"_ iªÊD\ä+ÒàÙæ¯¿wß³~"Ýo^>û9h­ÄîIBvÅ(¥çVâ¢EŽÈoc?­Ø‰j%€9Ï€ÐòÖ½O¶Ò­ˆñ§Ö8k½u)ôÖ æð~ež¢ é&õ&!4«Íûwï >Ç-¿ê 3Eßk™À·0aÀU;qzó`ç±ãüf˜ÛVnr\~{<-õç¢ýB= LšÁÎl§š„‰•k±˜Î°ºmÙÔÚ~%%ª èzz#((x ȱèãå6ƒKŸ“…†0&‰øêïS{Q«Jÿ‰‹»7ô òüÔŸ?Ñ Jì-Ò¹ð Ì,UFcï »â/ÂPGý:«îpªR¿´ýéÜûi×uc¥GHJC)l\±Ñ©ÄȀјÀ®tøÔØLвêVƒúûûi"ªå¤ÈŽG®¾‰›ÂÞ`òêõkXÛ¥lù%"'²–[ÚŸÔoÎEÚ«9½; ˜V<ÉdÔ’“CF2ùÎ@ãRÁÁÀ >^Ÿ¬ÆOÊ=\©–7?{Oo›«†"šnʺYdµ±ä~ùŒC'kÚck¨&#²p?Y‰Ü€ùõá¼€óšÄ;·©ª*UŠÇ®4—Måwø¼gg¿àð\ãÅî™` ¨jÄP‰M°îaÈæNúÔ¾3¦w¶lªGÁT 8¼ËãeaêÍÜäo£U&õLµ×öyrñk1/^»Ùá:Æ^°Tæ®ÈÖú ÀâØ@×óÇãõ¢̲ÂP¼rsM’×}³ó!hq‘˜^!V†‰];œîðå|å‘ù±½è¥«Nëùø>ëƒí_§ ñ„S¿ÆàA¾à{ ßÛz,»%ÚMTð—µ¥r`1­}zñwcè Bæ‹ë]çA˜Å«Da\Û{ùo’ëã_ú^.–9cÁÅ/üQ—»âÔ¦¤ ¶ ê°\¤—h9ìŸyL¨ßU2Ã$ƒ××~7moƒ‡Råf¶±@³e“ãdå“B¸,ÖNº~ð¯*˜b4ßï—Õ8,ò‰Ü,¹ø³¨²Ïq?å+—ôå «DkÈøP‰€^%iå¡›íLd1þ°t®õò: N— zÎÉ”z‰B¡†-Œ<˜œMi¨ýÜþ<Ï>[Çx:ÂoÏ™T®pyRÅNlî2&J$##“ÆkGh;ß@È›¶µõAä~¯ðö¸íÄyZKgžYCeéstë¢ O˽­é•mž£‘Ï£jVÉâ{Ýã±è"kO›wV¾­êè €ÜjØq¾Ä ƒ¦µ\1ŽÞ$}sä"û˜*žGúbW©žzݳs§€Yàû0ã÷¥¶·t˜.%\bdÀËÃjãu°sË”ñÝRK>ßNöNb&æÚ&±À¡ížºêÞ ÌrïçÇDþ…GtP§*Fb1”ê=g4ußÇ€y·ˉµ«êàË»Ú>˜†KaƒËñQ¥ÈŒ¥vñ/àø+.*JórÆ>G¼‹•‡¶c—ÿº-Sê“âY‡<Ï~©kj† bêîèà»]ɨ1 Ûzæß+ ›Ño¾ÛÉü4hî`㯼ZÂ?FæÍ7Š%¹ÏÈ…c¹¸?yoF¯8 ß58[¢X¦¶Ý«:…‚b/œ× û×âþKBN35^V1Ä\´çJð˜ïu޽ÎÖžn¦%bA-çX`ÿ٨ٯ²Ò)-8!ÒYjZS4ˆÅ|˜™™Y/Εn¢øðq+¶4Ãå©kí›ßR›¡Ã¹Â" Se |½‘lÒ†¹v„”?ÎtS$92k„ôxé¶¢š-´~1&.·Øè@·Z-múìëVÚ×êÖ­¡N5¡tÕRÉà‘TWÇAD'6M¿éC1í†îUâJhóJW5¸èé‹Ä •MWã&#]vx×u‹ª'äº×s/'ŒÃ´\ÐV¶ÇÊO·Y#¢„!qF¹åN?øÕo·"9ìMÊ-ù•ËÕûÑxÝ 4Ýs5Ý9¢ûA÷¿Â ¼½…Äžo-–üŽR¼nÕù/")Æ%³Mwo\F³·»t"Séߌ­Ô­³WO¾HS‰¥%ˆ2:AyaOxÇPá“v<Ø9f8]¡“¿JG‹dN1¦›¨¨PA—ò‹«“U*üm¬’66£Ï‘¥SŠŠSW‰&Þ¯í§Ö+šVzö& Ù.* Q†³Hå¿«Q¹5¼eÁ—ùy{¶ù´ŽñÞ(héÆÌ@L‡ªw àP`Ù‚u+MbÆ÷þ_1ø+·ì-¿e~ŠÀ§·Luû’îûS(wwwòñ;߯ÎhtðÃy¬-b¯DO;§ÍŠ&X’p[öåI³^ˆ=ržNª™ùµ³w’‹¯­&ÒÉÎYÄ“¬ð£.à]íUÀ€—›|û7€ÝƒuÁ:JRÿ²kê))DšnÂÇ!¾Í+Às2¥Tv+++WR‚*ßÇÒ¯w?‘:å×iWÑm$Z’œt>° yÛgT•£7_¨ºe˜Ö{ÝYúH–¢±K›™åÿø4»6 •©K÷tÓjÒã–ÿ׋›œ’b~8Wsx2¢v†¾\§Ó:ÐXUã9½&U ]~:~~"@5Hc«M‡q[kÞ —¨ï3+“b‚4Š!»ÙD¿¬?|Xû¢&& ü*Dp'dß‘? @oVà2xjFéâójkß <;Y.yM˜âÙN?#B`s!ãzÏýÅÊXh¦»£L|›¡Då©2°}•5W¡ŽY+HÝ ï¹ï˜ÉÔÀ %ïX2ân3^ü4àå&àÖ ê?-<%ÞWã~WǪk*&¶T¤D«ü »w¬€£ZûÃ2½}8ì^¡¤¢E°dä!SñQ»Þaqæ„ËJ;¯¬D›ûL™Þñj‹v96âKäÒµý8µÏ‡uŸKZ. ѧnjà-uaÂŒRÔÛ`®Æ¡oE`n«©~AA{Cl]’P‡d‹ijúŽ´w%®OªTs¬½óßz_‚ž/rKxذܲôO€Þ1*èªÔåŠt®wMøúÍTxA¤»<›zà;Ø Ög ˆ3@· ¸í'}Éd\ˆ¥ZZµ†zþ¨'-ÿ²«Æ%)>šÿ3Ió>3lQÃï¡üÂcÿs‹€!çNiYå[@­bœ¼\“U$CÖ7‘,Ä;ó•E§àÛ·>çR*Ÿ­1ðS{@™©øÄuÏ L·¨Î59QÁx•sÅDóıgMªdgM¼?“A š28p]ž®f ³EñpdÔw¹}m…7×úê–€%‘}Ä$C‚¥Þ@¶Ö“ß™x@eê_¢¢P’#Ûk‰ÕIHÖùÚ“vÙ`ÓÀg;è}} X›Eö/ÉßÜ™ˆ8´-ú7X,L­±îC¶fMW:‹sg¦,ý‹UàFEùkÐpÊrõʺó$géËõP¡gAâ¢t…l\¦øØòa«b°Ýáx@0ÁN›õ†­77NDcdði 'Ç‹‘¦›Shä¸?ñQž']ˆ`oM·AÑhy 3=}ŸÐ…:BÈý0ÿ /Jç-mT,NBªn2!‘ÏXÅ_&0S/7QV2`Aä¹(M;Lr(™c3˜£ý4è8>š`ÖÍ~ñ»*•ü𱋋ËD©VÙï«¿wÅB$Og¿´° Fä˜kadSŸQ`—¾-499y,òyËNôÙ¶…,·ylB­ê,xo×$& ý˦!ótf˜°fˆZ³^DÀ{‘™Àk)*BCªÎ/©pûä±ù-äVÊ×A·ýUê¸ íééží‹]ÓõÓ¼QËYÁùÔŸŒ¨ŠŠ  d{}ëqólüè,œäðÇõA×@ºk 󤾨ð/‡HY¹t ’ò#jWi{)}›—þ—îÓ]ј¡‚O¸½»YPœÓ£8Aú Ô«þ7ævø™hÂï7/·tBGœ5®,ÃjŠˆi’/!­]\ô‚¦e.e“àï¹å°gÈÅ|‰¥ÂÐQæ¶W›ªH·W+ €t£QÍâìZ­6ëÝã¡:\h@‹yh¤£a'BÜÝÙHî¿n1Îà×™•¯4à¯i‹·}a,œÂÆ[¨çêzXŒý.ãÂàCž‰h0¬ejá¡aLލùÓýUãy÷5ÈPê/_’Û¼š…jNnÕâÖù¢oßàòÂó¿Û&uŸ%áúº·ÎTƾèÇNNý(lurñ•¢ƒN±k ÃÕÖ;:ø¿œ®÷ÏŠ­qÿµÏÐrZ¶Õ…Æø;Ãv)eÔ9}®íÑ)Eˆ‘àˆñEXMç߸‘ÜJ¾» fûT•˜lêèDØ´K#fúp}äÓ)îK¼ÉÂ<sre¥ ެŒRÇIbŽL^xÉÚÐÔÞÑ$¤Äïþ~éü±þõ.|˜!ê'¹ÈYðÏurØûT©Ž-j"gð¥[»¹B¤j¿¶ý{5×÷#'©‹Ù´DáK~7Ë+-[´ª©)u›¿&D…ÉÆvwzì0éQö&‘<ÏúKê¹ß'빞MNÂæ³<‹³ÍãäÚ«°å¥½l•Õ Š k½±4óÞdq¼G—°<®óIG·u.xÚÔ†zÅ×X6œÁ‹(»’òòúá‡ÉõÞ4Mý¨c·}Skí”Öá“pª&aV5òiD8[‰ ;<ˆ\ÈÙZdS³€Ë?±†h›¡Gmã‘.D;j‚ÇКåzu°[ ¦ªtÔ–•–mÅ/¤é8Ô\d»2+ˆäÊMº(ÕÄŸê‹À^W•t‡E¡jTQvfp#µœ™RHmaEs°ÜøðT“A¦òÉÙ˜ø“¤þ¸™Â¢õ…Qm£óá¸÷|{Žy¶åô'ÒŒF nb=Ö¹kçËÓͪ\“$ÍùnnÀFeÛq-¿ Ióaíloa‹Ï‘<F&Œ£—þ_^©ÛF €mxhGóh@´f·;™NãMN«Ð˜®s“ŽVoÒŒ:ùCØ)΢¢¢ ;edØN×xž$ © ̳í^."g}xº-ŸHuð6±@™Ê3žŽs؃£qæès]â3lÔA¡ð Dìö«Ø~öõá¼E›r¶Ðþ+1@>¾R*ÕAví*” v€â+9¶ñùÞm§6^ÿ^àss¬ÛæÎFésXƒÜÈzÿøüpr ” ÆÉ¯¡kÌš¥”4d \´¡ËýåÇnÄxÑë´ SÎX%vpç½âò@Ó+Ó•3`(³ÃBºÅ_îÔX ‡¯!ªlúõÝ!(xÕV#¤^¶Ë°N„JȬ ¿±W’<9\ë0¿g¶T!K5¤au£g”Î~¿>›…© Ø)Z]ÂÂÓ£§‡‹á4®ž'˜Gš(”³<l±Üb¼u®ÖâæãÉË›—e7‰r Z$,È˳‡ý¢DPWš?ÊËû`wZ_V2÷–‹Q £çBY™êOÓ!Ï“"o Õñc(E…öÁ°;r-ýÞqvÜvb>S®'_ñÑE »èötý»¿îéÖuûd0Þ+d# àYÁà;8×$Úïv2Á_ÛÖM'_¹•R™èYÿˆ¦I¯ xñ!ãgÂ8§Öß¹)¯í²¿æÓ¦, öK€Pzn ø^Më|÷ C?Ÿ§2ñBƒ ¦ÇKs0˜ýñ‘å÷)ì€VõŸ-TŒýtë‘KŒ„ƒb®G…YKíì6OðÃŒáÀ‘Fð,æ²ýÆæU5Ò..l¯ Zx¶5ÌÍìk¢qТ ¨M£CmxRWP„,Ÿ{þT¬’^.¨aú”cMùgþ!‹a4«ctÁ®£ ýü_143óš  £Étg+¦·oßV4+¦á¶?õs¡Á‡’óás{qÝÇÉW¬ºÕÄ¡=—j/ Ý{ MÙ|r{þ•ŸAÈêêÌ_u«MÁ1$½Ó‹¶Zkƒ8kÁX}u¬ù€Jï'2ñ TÉä‹´…Á MÂR{TÙÙÙ‰yl°GsD£;¼#½\vçj,Ò8Í‚Fûÿ•UÍñ¥ý`b…a"ÀGðâ ‚BlD¼/‘ýÑ{³ÀÑü­7{4—«ÂE黉¸û䌬™X7`&¤kÖJty•””ôßu}­nØ88`$—„Zn*c GSS‹Ý 3ùºQ‘ý.Áe²ÿ¡’Ì6¦–^B¹·Ô­c§Ã²Nõ™ÃcU÷Ná°þ ^€]^êìÌinaá}“ú¦ x“½ù:FàÕÂüŸîI.…R·‡RqðñCêëy*6¯À¶Ôlº =ìWô¬øŸA®ï\±"LBi^Ö{Ã],Óu~ôäpZ ›Î†˜9Ï”ƒ]v­­­ ÕrÅæZ\Š%+ËÞÿ€¿a«+JƒÝì «=NŒ5©Ç0U³$€ žÉKuôG«°|êp¤àt±ú7fQú€“‹Ppbrrˆd0â§ðÇ6kÑþ!³Mê{ ºÍïnšÛÛE••Ö¦X(ðJ%#„Ûz”š‰ ¹X5»'ËBÑo´¶ûùéa¢ÁNGòŽS£8£ñÐíHß´ÞL! ²rcQŠ˜öçý©×®G Œj9ø"r¯à:qçš°JtÕ¥7‘•³ÿ\rËÿã? å*#Û,ƒõDDEõïMD„Äo´¼ Š• Èsƒ„-7gÎELnñçAÂßÛË»M >Š¡ú0Šs^ëN4~{z ‹ tq /Fé­¶IΠÏ5Žð<<+2( d iÝ~yYûYï`ýc¼"u<39Œ}Õï&;Ì€&[¸.! “–T®=Põñm¼2»úlw4;¸«K@J†[Òé29eeô¥åå«úZûO·Ÿx—ˆƒf«ÆhÍ¿'È4{`Ù¬{ný@$~Ów‰üDƒ¾…¨c“™ê‹¼î[u{Öµušéßs‹Ü¼MÇË¡±j ?¡`8Ø5,Ù*¶ jj¿¦~hÀ¶ª'W ,” üóU†¯’ØýÄjVÜMqΓ…EÛ\Ñ?ÇR ô3T¶ðg­åP3¼‡GãéX®ÓBÒ« Ñš£•‘o–¡µN«b·÷÷æ¿“ Qr¶;|nzfg‰€1®uiµ¹wçK)̧mí@4¾sŽ çË4x,Ó›å{ë „þâñÎ.*¬¥+Y±hÍëh¼; ÞÖÝ_>|Ç=uîd½¸¼tUÎäÃ\+¿¿¤Ë0xdtté“•Ž–¬MJÑ4—ÃCÖ‚OýÎWÌØØ r]߸¯h]Ožî8Áä ·ØDÆ}Â'íÁÍÍ?]èqS¼r@ž>Ñ6äùDoH¾ =ßYï`#o4+©~ƒm¨T8f¤u^¨óݹeûÃq¬yÓep›À_ ˜£ŠÊX]âµ,Ãv&߸X ÎÏôïÊR` ÆX¦S% |Ìñr£g\&YµGõ[êáÔH<½ÕPf­Û†W¯ \vG‘QQßÞ²H »~“Y\\Ü~µ3[És ?”íqàÙ÷ƒ¤7¼î»˜ž^Ï® ÄâW-%…ô| 9¨@Ú¸Ý3và lA]R2pÍk$Îz´ZߪçÍt”–•ëÑq~°ßý¥äÑB÷5•¸ÿÿ^RÒ( I{Él^mmoÓ°²¢Ç’ñËÅ »ôÎñW±:ÝõÝÞ²=ÒÚ’ ¶91å(•,Æýû Çù`r(mB2ýæß"¥½¿Eh€îåuÚ^ëCqŸ¤fŽ"|zH,óóv\íŒêE³BŸ€N6¦{¥Ãǯµ^“™vŸÇT999Ä¢Þ<ì†ÍÝ~”,,¦×öÔ\Íf®±a2¤úMˆŽ+øbjÌBîð²±æ8 ¥ãÝ…ÄÌK±HçGZZZN—evFÆÆÜá/zªiToHðÿ-¦Z†|9HÍÎŽRÆâbgÄùÓ'É\1?ض#<"bÏ©l4T±¨/ÂR»;GÈI€|oïI%éëÆŸ:ý|/²²Áp¬[&”'³EÀ´o0èééÁ®k1å)àQÓ%ÿÁ.OLtÏTtׄv¬^ìŽÁhÝ~©§±±Ö ƒ›ø¡Áxûð ÅÎo Q4ѧÛS3˜ ûG!%++ûcì`Ù÷ °A:í"ÞÉG7⾃üUÆ¢yjT›Œ¯p~‰ˆù…ü¾;¨ê‚¡¢a›{¬ÝÊ`"kt–#¡å)]ö_2Ê4•QÙâTºèãujãv¬¬hÅÄ(ÏÎÎ8S‡ÔÛÜ4«Œ)ŒKÞ¡–jþ€¨©©iV’\__¿cÂÆbÈF‹òwrÀþS˜¾*Â>ˆ!žR´Pg·g€3ô<]Wµ½Òw 2}sØuÛó~ñ~'ÙEóbzG‡”!šÀI±J¶8??^ÇÄb$ƒ×ðb©Ñ É×WúM §ÒÒ úo2ð¤n¦ŠÃH:O Y‘¡Ò¸# (dÒë>Z’h*\ÈT…)ÙÆÆÜÆX›Ñd Nôù©$¶%\)„©x©Õ m¹Íc×øQ.îƒrýmªI{»nQwo¸ýC±™”†Á!Q=¥ƒ‡›t©Qý]yP·éÙX§³¦FÄûë7ÝÀW¨1Aºôß,wˆWËýºõÁâÂ)Þ94Ç7Þy(ŠC5Fo‰EnznI’ãVŸ%È0”þ&þìØ¨#5mlòKèãò’4×F ú˜ Rybnn•Î`—£QÊöÉ.c’Yˆ ]bµ–Q+h~¾Ü›š]À{pŒ¿Á-L’ÙÒ\!Œ”ùËø.ŽbøÎû9ËÉ(ˆ®7_ è=!ãyYÎ%*g लmdðÛ£]ìÓ¡K%‹ÎÑ Ú`'¤ l9ÞœX¿ïýýû{c–œ\žŸ¡>'T”7NO¯;œª– ‰òð0­S*[hcNF—ˆ  ‰¸Üö5¿£åX8`„„½Q'G%HC™«9Ü]lš×–\ga©¿&èŸ!´YÀ·YLùÚÛàääﳩSYÜ—p>Rfœ}t#,iNh–Ÿ÷. —Èý0âº^-Õ² y!d“æ‰còhâ[äÏH|zÜÃq¾f5˜b7±Z5iC$.,N(fTúà0ý·ùp[ýAÖ…ÍbB>Ýš ås€vKl¢áàì` ‚,“ñ¨Ì7ú"<ŽÉgÛ+æ7œW¶¤ïz‡¢aßóâÆc~¾»ÃgXÐóûöÁéú)éPW¯Éë9Ë ÝVP¨VÔÁÚ:åÛîF®NGÇ<ïŠw´_ÅûP?'µž»oÏ@ÅŒYYsWûi2ÉàA0S° )Œ+u* ×s|Îé}þr†º¾–œ›çÊŽ¼¿Rqˆôr>§ê]ßëÀ]Ü =çÀ«ãºFÏ2¸I’§·×âu·pºúy~.e•Ä(®6ùçÝ¥<°ƒNa»ÔŸ+÷YW™õÌßAx ¤#xw´æs~vº«+rôú?<9¬™y·"DD)Îó5t‹üˆ¶¼J{›†ñD­¹vá0zBEÕeøòª;ï{cõ1$¬7±iÄ^¬’ÕŠŸ™ãí×RM ›¿b=Tzªà$ö¶öµòŒ„MÿÒ÷ÚuáÁƒ™¾*6ùxˆ 𰔏¡Æèý<½åªöæe9¢g%ú úCƒ‹ý>6Ìí¥L'^œ,:"©% 7ôhwt›%°\3R ‰¸Íïäî¢{¡¡ÇÜÐÐPÚéLyI´":‚„p6(æ?œÃç}en©/¹§ö~¼™ë…РPVYíg¯y[T¡sWÀ#a vP|<–¹¹ùšÄû+à#ðÓc^ç¨ä”›dŸvú) XN3RP#¿hiQ¶¬ “‘¶³›é+6'|æ'LOWöN³îê2éò‡]([ªUö*ÇLú5R^Öæb åHΞW¡ëXnüÛ_qÝWirØ–qv³ºsÏ¿¨îv¼|àNºœ¯‡nN¸å^~™mn{8ä†(fƒT.PÔòôʘWâ/jÐí9.íל֘&ó¸’Éü==Б@4¢ÛxÐæ@Í3êÀÖ¡žé¦,!;(3“¬Ñ~>èåqW|ƒT–þ3("U@¨V–N*¼öÄkð·™‚òósw:÷ÆœvŠ¢Õ+NsøèFKK”\k§±·“ÑÆ£˜Ð÷(°æÜeí_ccX555°žßæD@m`ìÏX¾ïÉ8ëpÛ,g9/í!”¾f=xÓìŽÚNÊ«;Ø¥ÍäDä¥kãêX!¼y2ì‚Û••• Ybr`Pæ55f^`‹j0e²bc׿Ý_µa("ï™v[ysßçhþ9·•݈ïûšÒæ1ïß5ŽJú6ð¤ë…ú•«%XbêúNS¬¶ý·‚vÕhÎÛ8JËXÏýd§U«e¹!Û†=rÏ{U«QWžUkkm+ƒ†R&«¯²½Š8X¸Ï$7——}ûÓeõ5êZ82¢)R 2 äl]=®( ò”´(yHï?ã$ʪLþ€Ü“%ð9dúú‚ýùê€Ûzq.:À˜²ÚO8zÅèÑ Ñ>2-˜ÇaAÓpYôØÊÛ”½Ê ø¡Mó¦ïÿvm‡½ŠDîIz÷C—Aùv®|Šá¨˜F0Ü@e†’‚Y©¿Hv¯\ q `]òß)Âf aBÝœ ¨‡á’-¤Œ¡ƒæ»*¦Íw;­Ãà œ¢‹›ÕîÓõÃŽ©þ(å¹âÏ–ŸÿÄ’)ÏóëÌyúøø<žöbí-·55‡áÈ;vÉä]'ö8»!ÈÆ}ˆúÐî÷‹ûnÙäõ‘^!MPõ‡‚ÝÁ\3Žä Þëª N™.6ƒŽg˜§ÑÔLîg{vŸÅœøŠ<ýá+>KÔ‡?C‘xöÆòÈ ¹NžÈo•ÏÏu[ìV;Y“Ùñíì^—ª¨^´õ?þþm¶qvÖÃÐ.ìq‡„™×)Æl¢'e²RÔ×'Í?˜­ÚÜÉlö8¡Ìõ ÛÚú°µµE-.N¥­­]]W h‰RíŠ( VÿIœ(Uwps6å禢J¹MÎa÷u”c“þÙ©0vxµ‚ÏÇò8yó³¼OºÓËØ˜uëdŸ9JOßë~®QÅó)ôZã;ìF’„¿ÆFé!ä nؼ‘‘‘‘‘?-é|±£’MSØŒNT”âæx¹·ªë9J%“ ²··1»¶›úÑû& ‹ Q5wÇ÷r7W"“õ÷éÃI¬É‹2öÛùNŠ4ÎÀ± „´,§ÙÊ­K–­¿ Z4š¥‹8J)¬’MŽË}¼1œ¯·@i ‡‡öôôôÔ||„(((ò»…64:{;9@¡Ô‰‰)Ë^Îs¯»LÛ¾z‹KÁjôçm¼ûÖVõóÊ+1w÷ÃÃâ8÷RV O"F°S¾ v³€'²( x´ÍãÄ|s v®ÖíÍ›7ÊqLš„(Å1ïËœE?A¿¾»:@B'…g5@|×€cfËn‚†n–ÈLYªcýð¤ªZVôµœÕôæÚ(ź‹÷Íql(QO]jµü ˜—4¿½­n0±Êÿ-Ð›Ü “÷Wzൂ›V¼•Dz‘ëÂAÈ_Ö6á`zfSÜ'Åé˜* :©4^Ì|áàU‰'ýjµÜZ..ß CC]‡€¯ÌsEÑ>7ºÃÑD=,ø¨'/½·g›ý@6ù0A$ÒÐ €QÝ:»ãmKþø°îì,ޤV”z ùr±môHÆcJ Áöl=VK/“°ýçk `õQ@€'°’8ZèF¢ª®fq¸4 ¨?(Q—°-¸Æ±$*J’Ilur†PlìO”Û©ÏѤtÞùż†ø˜@4!6^°ÕHF¤¹0?iÚÚö4¹œàÓ˭̲ P=da( *õëæª½qpšp*Êrÿrv‡š ƒAvj¹^o=JÈ€5Mq|| d°.9l`¡ÅŒ_à0QÍ… ""þÃ׿>W³äÔˆÚÜk^~ñ½ å5îú13AÆŸ¦¿3YÜ3````1Q kK4µ´d¨üÒ/©•a*íª:°öSJŽQh„#æC5ÇÞ4×ÿ;,¬6“÷_vèÖ„Ûú|èna$êSËôåõ¸îÍpüº(_{GG÷•-íTÉÒRº[;Ç;x(§¡ÑüŠ•qy(3ÖX.78“j7ÛW_ÍZid1M×ÝÕÄïÑn{66dÀ=›¯°Û~H0VA¢˜_käg8Ð0>@tªÙBù À^‹ˆŠšY[‡××óˆøÞb v šòâ»u(ä­Û>§[]™ÎÝÎË=ËxýkØY¸Ãù“.Õ4$33åf–h§œ×·`‰ÏoªÝX˜Cz;¹­GC†5eñáAVa©©D°U?É`ÄŸóów±›qqq%ú ̰¥“tnks`òt;}“‹PÊy)ãâº×~š¦Ü€Z «(‹ÙÓ¯ …aZˆUcðHAÑ_£Dt_Z¡W÷ @õ`¡ï{‚ʺ¬Ép¦æ€ˆ£ˆ†*½Ü›ð¶ÜGDD4?Ûè§ÕµÎ™›«n‡ÖXFÜí0µÇš‹Ä‘ž/|7Ú¤BÖÙoÂl¹Ì"dz¼‘ûµ¿‘Å“ðxÃÕ®\€ ²Ï åA§ŽÐˆdß‹~gfË^@=>xœ¬pÌ\;Ù®–“¼ÿÙJ²Á–U°ÌBîYtAØcnHEÔU†áÜ­;䪙³nçÓ“)„3*m·Ö¥´7Iý¬g‚ª‘§ù¦"zP^ÂUÍ m“B(ÂŽ\}‡©;bn~Þ °óio,£lŒh¤š¬?T“nž:S³©à‰ Óü³¥Ç¨fiØ~¸:ÖþVêî›ÊäÙxü^Ù9vi$VõŽÆŸ;Èa]“œÉ»—ç'6_@&bB?}ú Û8m°ÓQ¯Ú<9ÁBBB:m%âw ¥Öµzåý|Ÿ™ÄßýÁ΂†Œ^h€«4äjwYŸ«C²ùÒaíe3…œ&€szŠý‹f©íñ±Îù·- ìÐÉí¿â\S»Rgõj¤nyÍ2í¦RÃ÷?ð;;;ÓÀ¦L»KAW¼­Ÿ¸#ññ«—ÂŽõžº:³D~×oH½eW+(OLERÎþ£xõþ}ÈX]#""ºé…òkä¯iƒŸUC¢p[ÚÚ,®ˆ¹­bJÜq¶±ËDAÊÓMZa•Œ ¾Ìs›>y7rü.˲R¬­ œ.Ós ¦ab2]dÖeò™y;.ôÌ‹²DÞœ—›÷Íêˆ,ºækBÚ<ุzšÒŸžpÈÈÐÞWÑJCÉ¡o"¶Dm"†4ƒLÅ\ ·¤ù÷¾ñ6ÝG-6b:D¸nô×óöBí5ÏGÜ„ô·x=ÈhÂ?ù9¨¡ ­­Q©Ø'Ý »¡cù„!s€©GüôùsO‹Ž#„ogoØ«2‹üº¯Ö¿C ºŒæ]Yºñ}0Ò†Qaµk­±(! M̯h¢ò×S{‡>ùsóàÞ0ðr[¦êÈqåâí[|@U{ž™‡„…½G3y« sØs 8Ð}q7P\ä]èEÖÍI]fš -R– ÜR«e–¨7üåÉ|Èð4 ³’açð›+~‡L¡2D®"Ù^ü§žÞÐÝBO//³ÝÑlb›ÀÁ‚=ábe/†pßí:º|Ùì=¢˜ ìz™Lc6û¶à#’& +¿YØ7:YO@µÊ†|úÞ£ YÄfz®Ø…~î,”MW%2Uý, o‚¶ª]¡¿Þg³Ô\Ó<ð•îOÏ“¡r É;’­»‹]PÜxY×(ˆ2WþëŽûÍÄó.Zádý¸ ¹hkÇ–js? €¥Û‡‡BÀ3¼+›†-¦ÅQ‰Ç57 lý#ù+¯dá^_g½«vwèP•§ÍžÞsZå›O—±.ÕÂûÅž/â3Ðø-D›éšI&,>-7j«)6Õ@Í+‹õfnEß÷µ¹Ð11©ü‘É2g5¨;::&`ׯsAVýØØZ¿5QÈÅ×.œstÁ‹=ÏÕ?Œ¤Œ:uÕ`ú{ŸŽ”íM†=d&ÌêÅE°×c&…Õ°ù´(ˆQ’o2.9ÄÐ^iÒ… •Õ#tDµÉ¹ÌÄœh¼‘ ö¼]7µNðk¾n¡· ¶+Θë{>°ñÂü•Eg ‰Ai¼H)õý|Ò—^¸ þ]' åÇÅŸUFÂý]ïF=±'ÙŸmyÑnœæi}ÏªÔ  °ÉÉíÏ}dõüphòb`—Ö–½ˆK¶Á½û18–““£[g…Ñè°–Ák÷Ùˆÿ5Šn[ŠèÓk•i´¢÷>‚s{…MN&’»IŠE°;¤$m+Ær­ì4ŠõS‚^{Ý';0¨d¾2Ä¢--éz™ ¥|?XCª¾yØñeó  ¦ ˆts”5±ä¬öÎ6åk2ƒA×ãÏT‡Q³7P9,ÔKÚÛ³Z §Š?,„¢u«‰ÿóâ`ó8N>´™ú¡T¸f¡\Cö_Źþ÷µ™æß1§¿S)”UÖKdJ¿õ¼öˆŠÝΜ-Áê:š¹þ‹ è¨sñí|üã›*ƒ¦Ê)¶n”‚z æšœV‡NB—È„;Îý2ùŒý,,‚I¸­¨ihÀG‹M»µ4Œán‹Õ’í«f—ê¼Ñ*RüÊiÞ!f¹ÒÚ/4KÚN Î¬‡Ôå±ÎÁ¯Ð™úJ0^–úoÛ¼¶!ó꘮>2¥°ÆÛóuÖRÌEfÞ{FºaòJJ°žãgC¥î,/½©Z÷IûÅ(Ù/»©’ÀÓSgØ…,Ú[µ»+¢3§[Ý`jñ\»Ò<"¹﫵ÍÍÂ/Ÿ›c#óQ‰ÍGµ,RŒ2³›3°ûáøbù›þ‰‡ëò`*µYmŠñòtÏF”|简YöuB[%T©Éå â$Øíu'%)ÂúÚ¶:“éûÀ6ˆyŒÐë£Å^­hmÛ±ÑO‡s\1düqÿdŠÌÓ—Y´9ex¤ò4SÊKg åâßg/þü Ûµ®-³4(H÷œK-ŒXS¬“O±ö‡°˜þŪg#vSOG*Q™é¿5¹¼®Ð^nó( ƒAÕå ‚˜$4ÜÜxeÚÞGoÉA [*ÝÜOF‚‚ëeU=€ YÛÝýei¢Oª”ŒŠeí¶RT½ ¸â›Â—¿ÙäLê ¡(#õhÊé©’ŸÇ~Ð0 ½á±Éª¢/™C¸tHèØ”o@dd;W¿z^¾o=ûuÚµÆ1²ø÷·ñ7 ²”03àOò,Ÿ­ J•&!qÅxâââÒ22fÇK-ÎÎÎØŽôºüM–CsxÉh¦ ¿TUUKÞ‡êlݪòÙën¸¡Q1ÿ§›»üAN>×—®)g+ùp“ï™ ;þž?ÞÒ­¶3k阼vwE˜¯ëˆíÉ”lii1»Øi†æ0é×ÔHyèÎÿþ2<>^Œ9=v¾þ%HG¾Þú(Ÿ“Žp °“÷†.ó”û¥Z÷¡½JŸAÌZ¥ð‘àýŸÌZÌúÔ¿ß•™œS'V_&¿–F|œôÏ íÝæò iÁ&¨Ça7ÞÊ$ÂÅP i–PǽUgõÑ}_¦È`—›KUPXh¢TÊ€ìBB+ÎËq[ {êÝëÈk(ÉwkfêŒGz{áëÿ3 ƒìtÆÀéÓˆß9¼n]˜‰pÞ·æQÄ¿ôMM5hŸÜ…„jw$¤Â!í_ZZXIFW©*”Z'‚M³oeãwºšdc8ýÄ¡2¶3U»vâ"¦Ý Ã…†!êD¦ l@Ÿ²f1(¥´ã?{}ÝÉÚU7lG"ç½ëK Ç4ˆ!YbSæ0¥pX›„nÓ5“j´›­*ƒÁ ÁD ýš~µ!—­›ÕÀï*éÌ”XN]#B·Ó¸í´´'µÈÓ½áÿ™PØQMàÕ&JE°wàA„À¨vý÷×<¾aM4]¶Ð?ÛÀ`1uܾ>FÄ¡Koº);£,Cư­aùჳQýçÏŸLÞ*ë°§ÆbøxSp#®•g„èRˆ‹¯­Iv¶ìHäg9eòù¥£ ߯’£8O&&góíí aôöö6‡ñ´k ÀÓ!˜#§¼—=?œçVι‹ ¹OV\ìû•:Zà ȶ·mVãvbGGGC—“íÊ‚ËûÔd×TÚú§ LE¡xÍ?„ž4še9;Âî[X–«-½ðŸWüˆäUw2í˜sDἯ?ü޹Cgg·¯ê²›DèðñÑ⼚M­„èúdÕ)a¯çT÷ÏÓÀ­¦L_•Óß ¨)&¼û @ì1©Â¤m2ê0«‚ˆI^ÒäÞ}¶io°VÕµ"büWÃS__?2’=uº2“â”X[k޶Ø mâï¢XlªC¿­æ|nØ:5{•T ¾Ú~•þ¥/]ˆõõkVªí?ë.°›¾øùšÆ£ˆ½ƒ ÄFÞÆ†Iõ£úûÝ2ñŠçç¦vyL4£££ÿ}Ã4¿wØwW³s´e>âP^›Þëü‚çCÊw±;–Ú£?Ðû~Æèò®rzjªb×ê¶™ZåwŸÌðÉ.Uœ9F­É¬Ãšä¡ˆX;ùøÁ€'Ïéz7o c{“Nòüüü„ æ·8!$’˜ÐP@xFümKQ86@Óèslîþ~mígpš°ûáÑQËÎJóÏpd$+OÙ;ÐW"q¾”¦2e iœ¿…$ þEnQ(*·[Þú ².”þkõ÷£æÑôÌHñ¹î÷1{þÐŒ|}ß`ÿ:Çáí륓ÝëÞn‡óuH>7„³Aœ-.6@}õ']-¿€«Å¼ñÿîŽ)} Kz=… ÛÞoúàäȎכ3E)öÁç°ÿÓó£×R‡Ž¥HD9nmzþ–~>DÉŒ'¢+ÀÏRo‡”\­d†}hF@)h¸f"h‚•s¯™8øÛìOòÙYO™"ÐÞWû‘vä’Ä(@‡ÚÃnJ‡\ïÁ¹’ë ¥x*¿2X1T­a!{íú½¶Ó̰&Þ•¬ÌÍxªºŽ…¤žÒXÄhB¶¿,ëŒttpd|öLgÍ4EK~¾º¿M e]Ô²Í!oihªÐð"UŒ)¿\ÍÆWµå7ð~ñ…cúƒ&suJo“6˜ì×ÛÌzƒ?ª`‡ìÅŒ²JÌØ¿ú͘»vu tÔv Š­`3Ž!+¾"ols'Ù^Åp¦7 vç‘¡ÏR n–×4'=¡hsmUk5.¶§“jâ4ņò ¶Êߪe>Ý:C=Œ^Ã\Kg'¨8¢Ðذk´çZüy°¸wm»÷Éׯ¿.6\)Ú`zC°Kw©V컸ÉÓã~YEÚë¿¡­—„"Tû?yâ4ó¯’£0E>Ä&Š:ç͸è¾\“mÉÚêé”PÀ$—U–Ÿqƒ_g*«ìÖ)d±Ùýé2""³¢y Éÿ-„½’jwØpZ‡ÀÍÓÚQ“„ð3%_lT¡#›þŽ×ÏP&í!ìö@uZ7(Ófx/ß ÉqƒTûU9ˆ{w©Ååöþ  !Þ©hÓÓ¿ÎêvUœ¯CüÒX›ßP†‰C0Ùihð2—Jcg“¬ÈC¯/ŒjŸG| l*Pz\¡J[ÁÑàâ®®ÒÊopHïÞ½µ3´HHK‹H¶‘€(l½.VùÛÿr^ÿéÈC((¸gŽýóuå¾ïmÒ ë ;´ô¿…bÒ(Z½ïÖ£Y^G»9¢>3nP­ÎÕ¢pIIÿtÜÎB¯1¡2xóŸ­¥´µ~à~vÛ»Z$.›Ÿe NNÄ}ˆf|WE‰vGV+]Ëóሌ¯š =vGDbb",&_Y ŒÀˆö›ü:{¤Å”P½9·ùáð…ág7* ¡V™vÿw•ÌjÇe!À+Gúw´ºÍOvµ¬í ~sAÂØàþm–ɨÑî¨*¸+6„7ΗwÃ*£D ãe‹‡§·MÊø¨°+•ú£‰4ÐL ßbBI~Ò]k·’CƒbMô,¬Ã³*Fk¢c¦†k`K››\ŽKƒÒŠ\UÆÄã"=ó2ggf Ñ(Pw(šD™¶ò0# š¼¢yômýÇ¥MÐÌŽç£çw4Ó}LÿÐ,Ñ¡?¡Ú,°ÆÏ“Ž›>ÞêabîöþtB T…d܇ט¯¡ßõãìðQññéÌJ]È`ßNãóçËZVr .cCi99²v »:«ò‘?òŠy™Y9L·ä_± ¿ÿôHÊHÊI¹•¹ÚÌuà¨ûžÑBc®'Õºkuu•êáædw&›š ñ/ÀÎV°[qô¢ŠdAYõä%&TæÚ Kù¥º5}^ID¦CmŠÄ(TTT‡+d'‡zYЂéd«C§³ˆ^t~è}Ñbª·í§ª¸=à Ô»õ´³Ë Ès2¹H¸@H#?ËàõõÕVD²íº65R7«€Ï5kêœÚ'e6Üʼn§—ÔÁíÁ“r†á±dW¼J®ßÞ¿†}Éÿ§¦½³{WrØlIæèòÞNÚ{Kúlk7ÿýιzìì[jþyýÚxÚÐØø_ÓfÀ³/ìa/°õLUÕ­ß_Zúü£þ¾×éÔ™ô—⢗ÒJP:÷;üżü€BrÂb±Ñ¡¤¿%ÉÚ²fÔ91ñÐG©o1óë“ÛÕã¥ÕHšËúŽU³K b,%›oGGGÝ,;:)¼á&rOðb!%šÌ7]/ý›¿â¯ÄÂëê¸ýk „6‘ð^`†äá› >ñ5-Cñ§©ÃÏà¨B·ƒØVàå¿ÉUl„‰~Àiÿ-*§Åm JÚÍóC‡I}R‡wº*R>“—Ww£àå…Ý#ÒÒˆoÓ5nƒ¨‡áa‹Ä«~á&OZ'wïà‹?]âÙŠû þ»Øeˆc)ÑB³e{xš÷ÀWüÚx Eå¶Î0$’@ž™™Iã²@ÄÅÅïôó©l”PF¯öï8=­mYßÿƒ ïseŽ&È1]Z£Ý/&Ö¤b’ô%pº,Ðn6$6 !´*::¦C:ŠŒˆí"`Qt‹û8ù=_£Xµ:6ꯪÁmWÂa§_þßšXS"”YnÖ @X§ì„!ó¾34êó‹Xõgç5ÐO1¶í¸Äm;d:Å”‚ÿ‘ýñŽqñ„(£~om 8Xƒ}Á×(\i=(9Ïyw”B9W¬CÓòu```šsÞûŸ|BúsKÝÙ»“LøžgÏB¿æBO:Ñæ{ÃxyE}®û&þ_gßUóµy‡8äÉ‘,’à 9¼""9(9J”0 9% T$Šä C’$’“dœsÚ;ïo÷«új·¶¶–(¨{ûöí>ç9ÏÓÝçÜ*uU¸Ãvs5³ãÕ˜äûìôÜìä䘆…pa!6GoŸt-B¹¹Y0òzB½ZíF‹# ¸ÿ*€sþ»èÛÝÝÝÒIytû’Æó'^îZ¨K¼Ñ®Æû®Å“t>L’PIç•×;lýf©™0sÿsé?>„Çpø&¿£•f¶lìð°n©(W±ôx{&Z9–Þµ¯¯ `gGíº|þê9\Ò›tVÙR$È}gb¢˜’M‹d–ߤ[i„OVžwóU“ž1ÚÞÐð——å°b ×š…G+ž)wÞÏ=\TÀÕ¹ÅõåYùÃT½<‹ 4ä@ü@8P¹ì@ è÷Ø[.®•šhë}ó=ÌŸŠx—°uªŸ‚º3>\AŸv©Æ)ùwÅBwOOëX8-mÄŸ¦×– dÔº-ãÜ¢^v“˜¬´ -1Rh­»µ²TþB„A0Üz'¡ xö,»asAùŸÛ‘ͪN¤ðÂèP‘’?\f±çiZ-rFDèÍÅq^—YÂõnAùׄÉþÑ:Ûì ~@À¦ýÖ$鈈xàµô¯l¹xŸƒ•–ÁA¸¬¬l^ ýôÌÌüÜ©ˆŽ‰!•¼f¬qš# MÂû÷&_6þ4tVâ¾#”ôÍþ,šf„7·i`~0O” ª{ýj:Ã'¾R ¼Çš¬Øeñß”¾Îàûƒ¹#rrU“FÚ ÿsÌòÍ5…žo5oõZ4Mùõ•—þÍõEïláôLâØg27£e§|Míº†ÔsI !==ôOÎ;wè—ü&µ ÇecñÌ(‰§ŸÒ5ð…xÇ[¸¿²idóÁWÁf#N“f±ö¦¸È‰qUâ›ùå,žB€gJµN`£Þ·(ƒ‡w¾«‡„íVäk¥OÎÝÍÆÜg¨;ãBÿ!}FŽ®KHùAOŽ»¶ö¹:Ì‚Ž:|•²Üÿ픂A”ŒÁÁ'%å½²€”üÁK9¤“(„Ííí-ª4ÒžINÂ6bÕñ§Bðt3ÅáY%†BM¸$‡+$U¸q,b‘/~Û§Iâ¸Ü™b÷9T ƒ=vQK/’µùHЬx ² bDUVÏcÍÕsž7תQQò¿³dºèÅav‰ŠúVjj.ïe™˜¯Î‘®{¸Ç`o.ýîØö¾Ù¼Cð9 °¹¶g`þuëNèÜòr(“”§ùî\Ë­ oøÛ:}œ ¼.þ‡—“¶$f‹¾óˆµ»?¼/‘£|ª†¢zo/¡ÑÛb`ƒû×û`•?´K‹Á‚@ÊhñN7åg¦¹Õ—ô[ÀE`5ÓTÄøZ§Ä°ª{p”AR7SÖÇJêˆÛÀº„)`þ&Ñáy¬|è‰CU÷9ëêʯ·ÄÆ¥2,;I“Ä¡€vÑàÂo®i@£SX“—3(¸…2ªAñ›¤%$••)¨`Øuœ IUVç¼……ÃìÀk‰%v[eÞžÀá½o¬¯ð,-dµ:è–<ÿ¢¦éáÝYÒA}eÍò®Ç¼T4­ë“U:\'¸úÐÏá‚d¤­£¢i#ÀÎ$w øãÅì•Ûÿ„bŽ66gS3î;465É`?; SÆ®3~¨‰[l¦í ¾Ò~ZSŒ NxhIÙEEÏrk½áQ«ïÓ uÌ çG-ŒÙªÀHšNV HßÄýNŸå·6xQßG镠☔(5ðÌ3¡(C2FÉö±Ž20Þa Õ­>ñÅ…¢aXÛ’÷ª*û˜5§ih•»œ‡¡´Ý KÌÏYÙqELÔ¾r?°èã`ÒBƒÝêÍü¨±…Wû³-Aį°Žž»RMŽâK{V ¬áäõG q8jÓÁ|U³º‰í-¶¾jw—‹›ÏLz.ì Àb*׉K3w¬æžõ%Isw±{¾MÕô[˜z‚9~áØp„uh}®jÑ.'Ccll,Ol>ÆE¤èCêÓeš¾ìD o£Ž@:€´Ø”Ïo/U•3MÚGx´ÔD#Z™Å®¾˜3užÐw/bí#‹““Õåñ¡å+à’Øœ ˜o‚œ­ ~$ÄîÉW;N‰ÅUÙ â as%7·ª<½ß0ˆ¡–{ƒÚÛì#¨!µÞ‰‘Ÿòˆv@¶4Rô [u>áÅs4wþ@~?N9AÀMDºR®èH³¡"¶òÛ…0³ÈD__Õ1?æþàºPòŠaœAµõŒ ¦ä·c T^\ܺÒÄ ’ööòüõp {¡¶8PõnasêøjŒöííí9öc¥~4ÐÖ9mì bäËÓ£wSì¢jj\Ì7m“ôÇÌ̆ ¸û9‚ßøEy((>ñ›ÆÏ·Íï/§j_žåÏÕQcêÙÉñéP»ée‹àû`‹€Ñæga€~•ÝS‡ñrÈÞÞÞéåAÿ^‚¥Rà%­þ·°*úíIêòꕪK3R:H×O+>?Ÿ}Ñ‹Ã5lÚ×8Äñ\hq{ù3ÏzÕ*ç¿ë4Pÿa!VMÔÖ³†¤© «ËU9Õ›Ã'†VòÃvâ3Ä« j¾å˜b6÷…D~ø¬ã­ähl ªpr¦¹g˜Ä俦öKÖEz%hu†ÆTQynOhÜLî0¡³¿÷ë}çÖ«ìÕkó Ï<(’?uñ–l ¨OB±BeîÓÉ€2Þ^îd{&c´ñY»æ–!o«îz^9ºXw}½¬Ñ`G® äv­’ñ¬¶YL‰¶Èà~ÄæIß°Ky´Úji©æéˆKJÊó§¶ÍÌ`ó'vCjjÄ8•ž/„2LMN²srâùŸþ›±ßÉÍÊHï¶ÛèÏ&DŸUá’Â!ù¡;¿ó4ë=6ö˜¹þ!hê<ÅÆ´•Sã:}d:éY_C?í¤I.ŽŽ‚B"ˆÆr¤zc¥DY™YqB ^–.Ú°ß+¿B+Ô©á||Y àä¾Õà¹Õ:f+’K÷ Øž†\ÓÙ ØLéÕz"lÝ€·ê¬’ïˆhˆ:°‰a7—@, Õb‡â>;qwG'}Œ¶¾’VZ£'÷ Lì Á)2]zè×98è}=ñrÀåÅÔÔζÜPÍÞÔŒOËåŠìØ„6 M8È›šá®ÊHˆË”^ïo4ÎèϬ­aÎü¢oÊ-Ú`ttjXÏZÒ$ôÄœldLµŸy¡ÜÐÆq1‘”{w-ôø0Aœw ùsswI‰Ñ ÈFYåxb%¤Rôm Ð_ : qÞ&á„„~•9ãeŠ$«gD-\Æ7xÐ(äúD‡âäææ¦‰93WírA„3:×W•t’؉&q­Ä÷´áÞ‹¾=?Qï1máö^Ê…Eâ–ÓÐgÛØÚµÞ>ì"vBLßýó…ÙwR^“žJ\õ(ßõ¨°ïôn‡y†ÛŸ§¾r· QÂápZa«ˆr"z5; ê®P—ãD’}éa‰îé¹½÷ñ_HF»b"ï°f•Ýìöí°*û±Ö¡¡7öÛUþ‘šÃ@XvfgI"OŸÊë&÷5£…ÆCÂÃ?~2¤¿…g!Øt·’|WXÄóT8‰+E Ybè]ïÈ”*åTQÀ´Løñw­k͉ª#ÆÎüWËNù;oˆ²òõp›¯~TãóŸžxMªª?ÄÍ•b=>>Ö¯uo¥/ƒ°.Í‘” ÃÇŽ˜­[EJ°N±qÌËü7 §î §àpßÔGY²á ¿ñöÜ&]UŠÉMwk’ë«Wí™îØ„Y'êVù-P½–h1äk= zΆMd _¾Ì´~RŽgQš€k¾bó¤áɳV'Ü3á°Én"[÷•¹î_ï»NöæßÝïþv°ÐQ0ý‘p“ƒƒ­[(`G  ØUÜ?>.s¼W®¸â¾º´¹\Cï%=äuu©@QÝi‹„­àK/â5¦õíí5zÈϽ›ëþÓ¤z±¯áD†_”!6/êHߘ!¾’¿óCÛùûùõ{ƒñµ›î}ë–<ŸчD¶•»ÊT«¢pjžòòvÜÛŽèD*xÐåùÑ‘døe ®x‰)Y<2xnk‡b,ýÅë¿0NeÆ‘¯–* ]ηQÈQ=òÎwš©ÇfGHzmóöœ¡É@§•2d bøäïúðÎu÷WÍ¢±»{·©ŸCC-¨ tOOÞÆ ÑÐ)–ÈmÒñññ¹Åx9eccÆI"ÛÕN$ö{ö¯OœÀùšÉYå‚¶b'ª êP3õó'Ìú(‡á“‰½‰/H™Y$ÐÅ^³ËnsG‰pàKy ¾Ì1xPK½B¡Kÿp·W ÙülÙÅÝýþHÕ¿ç±»-š½¯X¡½¡ ÃÜíŸ5ÛpÍ ¼c¥v†\^ {‹O’PiO³Ï *Ò%‘·¶V~s÷%æ›xH(rÿ‹z<„ˆœüG®B¸à«¿ÚMÇ3ÓÓå>/þÉ’N/B‘°ìÔk:eˆÆOýh§íNÚW1úì}‹:tx@;X°ß]:?[ݵ›º z{„ŽÎß…ôÙÁ*q@@zõ¡Ã8ìñãÇ6#_’[Ù¡­XЧ]©J-ì¶Ÿ1´çž\YRë =æ:MìÞ}Þ“ŽŒ{q…GkEŠwoX+[¸{ƒàæ7î’ˆ^ØØˆîêRÅV5)ä¯Ã»®s¿ûÅET‡êÞ1½½ºBÍi(aÞ•Àænz5ÑÛ»QµÈÑìCý¡º*ÔÄ8SOÍ<¶ê¡iæ¥RcdÏuã»û´øÒŹü‡AÄñ®E!åå§ôôòÙ&†ž/OÍòりý—/uÂ%døúY™©ÿV­|.æe¶ˆœI‡\¼ï>™ÆG©z;ƒæ]*´%äÅci¤×ÞpíìËx4ÚZ-ýœä™<’,>“¨æ›S\µæKôϯ–¹û»™I›º—» µ}Yd‘ª&Piér—yùb“†ãå'ØsÎŽS¢1 bšoíAÀú®¦÷Üùse˜ÙÕ¬zË4n×ÍÞ×…HF%¯;ÒÛÂØŽn®û#ôàÎ9zmç'³Ír›äŒ(Þ{jeCKÕN±Ky¹n˃n’Þ¿Ån‰€¼z¸#žûÕH«øÃÖTê~ާ›¼žKù¨P®mÜhÃñͶkYÕ´‘ÖŽé‹“váÜñ^§ )Ƀ8“Ó¥³‹Å½?MõïëËëý˜ÛÂl©ÃØAyƒÊ›ˆ ÇŸ~eä7½WÆŽ jcº¥º ¬¸öØÇ›ÕvCÏêh›Ï¦q¤Äh—V’ªbÉ*‘ú«Œ“FIJúÓØlŠÏvieèë&–°*Y:Æ.qiìúMŠ #J®Ï£•pttbÌ™0k8(3Ò)äWºÑ?&3Å!e¥&¯ ºôྉ¬þ“"ÒFÕ¤ôFFïÛJœ¦Q ;¿=$Ì»kþæ|9µk}He@ßÀMxº3.TæÀÆ÷@q­{{0˜‹PïË'÷b°£Å’¨RxHyrœWSUž_eÿƒ’·H@öìf>+F,__Y(9†ô¥4þˆM¬tÌÈ!†tTÙïÒ áüþù‡¾2,%¸c¦?TÖBª{+BuæAÜü¦!/û³\ 4ƒ‚D¨¯D“ZÛro匕պá'ßÑ á”›…¦Àñߪ˜5‘u+ðF¡çòl€j-âéÂÛMÐIcÕ)ï ”Ù¬¾}ÊÑã«fbÍÉMè+|ârqj‰(E[ã!õ%—€·B¦¤tì§…_a µâÞßÈ(o)VÆ ¤¢'«&n QǘãÇAkË‚ƒ°ø›0‡4iu'¾óâ„£ÆÑ¨Åݪ?«åªédîö-[½”ˆQø¹¶v VX¸†ÈۉžÜ¨š¶…ÍÊK7ƒß¹ÓÕÕ5&¬ôŽÆvþKå§MŸ*ú_EÏÚ–/vê*®“›B—X¥ÍÍ?àç9µ¾ÔÉádC”pŽ;¥¼ˆ·¥A/ø$þ¡o¾¹¾½c,þ_ïG(ó(Ró®°§!þ`´+rLX m5^ýj8§ww™‹šý(ÂÒò£G&§E²ì)ŠÔÝÜ •ô@|¾÷¦bвÄ+ü‰Ý†wœ†î`âÚ/‘ßØË (ôûùyö,€´Q=}ú?âE¯O´]¢z²ÁvÀvˆè>œqe•rq§Ã&¾½,8TÙ¥}H¬w²iÃÖ¢à¹úKõj_ãýâæÂâ|­Gœ;®Ø ÇD&ª7® GÚgm•5·Ù?« ¸à³²µe7PÙMpãŒ^ÿ›ÓzyÆIó¬!W›ü1È¿?UÙ' ;3{z¢WÕöæ+_5NÕ„÷¶†.AÓ ¶ß^r”¹Z–X~¢£Ó¥WýÏ}¦‰ª VPf&qÔ4{2y}ÂwoHjv€|²¨ãœäKòâíix·ª< ýýûØw]'¦®ŒsˆBÄ2(WD±B5PŒ(·¸ »§ÒÕd¶ß^¬ýäˆâ¼ÎE 2ÃøD 5djÊ-®ÜÃcåý“Y{–O:-ËùÙ1–0$ì6DÀ»O“)§°´LúÊqãKPÝßvuu²§‡¦eoE›o4“*•9¥açÇ#’?øESª¡ho"  ]ãíÓ"vÛ+_i£ïŒ_z’Aê„]CUO0Á| Ð%% 21fä” ¨NáVŸ|™mÛ·–@E… ègæ0T„…H(€îZàÏ™0Ò$Åü£“ÃrZü}ÕÊd×]¬°¬ÕÊŒøò(£u´ëÓ^mãzE“ EÄÓ¯ìÂ*ñ£’?@*Àa û¾½:ÉfÐξ9YµQå—0ŽNÂô¼¶1 I[ΡøÖ"nÄv#òÁ õ0Û Ÿœ˜0ãŽïb‘UL>ÞÒ˜ÀÎ"a¾ÃZ\)ÕŸ)q0Ùuq’ÿp‡z©>¶œŽ‰•Äð'³z¼Ôå^ ¯Ýäñ1—:ÕX)Òu‹~7êwN…›5Õpað¥ïÖ÷7†‘È­É}£Ôów˼±}ðÑ ûËÏã{³d‚A%⇑2,¤I°Eø™™I›|ÅÑ«qúêäþú‘”a¿»Ñ•-tÙM9Î,u¼#`-L¥[6Ÿ`Ö,K¼>¦Ðä«íëCwyn ÉK}Iª"ôÚ‚oY¡n”ŸØnTD$U¢ Åã-—éF:·¯\è§<ú3õøEF5æ,LWûcv/_®P uf¢ ÈÌD½$, ä—ˆŠû³ø|PŠ8±ou¡hVBÔeU4Éï»ÿ Î_ï´¬ü¤WQn½Æ@TǼ‘am¾"Ș ¸8I¦#þòT!àê»p&2§fS™ùG ¼ÔUôäR^ZÑø yŸSÄ‹s2¥Tñ—$€âZ‚z" 5>Q;Ä3;úIo’3 Ç^7ªãMÕXx\ˆn~üø‚ê™a’ØšúölªZòé/ÙÆ·—ó’^üÅ&¿%Dó=ì9ôAëâB‚"ÄøÁèЩ©ªèGSù[øe™«‰ˆ´›ì„¬´²[-:ÉÅ7Ç!]V]GÖ¿áä]öÃPn¥Â÷åü"ˆIncdyÔõCÃt£x™ž#ñoYº ‘¸õHݨF娄±øoÙsè¾J¼ùU'‹¶ñ÷Ë}. 5¡ï&<ÔÅýÙáGg.g{*Æ&‰3MRèàÄ©¡Jâ¸à ·ø,«ïü!#R1°[™kù9Ï!L$ŠÇÑÒ¢òöÅ‘ñm¼|Ï{hôY)Âu™ø>(¿ö§jØƼHå}H—!Öæzð¢€GOQ¯Ì´‹V¿Êž¡ —ûú’’ÿ¾FV4¥ê‰A±ŽÜYÈŸfÅô°?³~Øä5Òäp 鄙¡ÞY5bbó£13íéZHÑÆXnmS”ýkà¥þ«×VÝÝ.†ÍÌšc ³"g+všÉyÌ­Øì©¦úV}ü'æž4cuóõ—1 Ðæ[ÞÄ2äzº •{€ñMøßĶ=QÖ»ce7“; °‡¿‡¬ì[A‹Y`ä¨%fåÐv˜e ^Ð?sKµ!--]Ääw©ÙËs<•øÖ•“Y²ß‘Út[‡ïgIâ ¶(,¯PÕüåINÈË‹œ¼e`iJ³ó=ºrm¤îÔ[’ Õ2aK$X'¦ÈìoŒ*ÌÔ«f B@%1~çNëör¼³ù.åE‚½êþ¾:Sõaì{&ápRäùéž¶^©Ãá%Ö'î[ É¼½/âéÙENªèiΪóýŒ@ô®&†M’þxpðƒl.}Õ·Âʱò?Ò„´“…¬Ь1¸ k×)q¤rä+.½ú‹z{sEAž˜èBJ¾°òèI†;þH‡{ ´*‚ªààÂ>6h+šÅŠIZVŽWþñw°üìÊ+å,ð»øú¼wø3Òñeøf©IâÙvC”û"6Š9;Lî–!¦ât°¢zµùDö« \0d.ôËžž„O¼—d+zíöÁt Þ$ÞrûíŸ?ª,rÌk‹m ÈïüѺ=À¦Ÿ-×Ï×YDö4”¸ëäHÉ©7¥ËvâHQn¦¢þ£ Ñ0Udß;oYkâ,­t;žë榆gq™­€ïHE.Ô•Z£ö)g#ùŽÂ¯à=RNÍ÷_!ðÄ—œðq§ª×¤R úþšÉêSŸ·ä]¬yÍì4wÖ^ÂkNN„ΩÍšýúcùÓËKÈÿÆÿð×ÕnÛ¼÷ÉÖÞéA¿ÿé.õµ2¢8¥ùÜÐpz‘j¶à\6†ÿ§ð°ê@ hŠœØ É ˆpi|å+a"Tà4ÐÍ?€ þ&#”ÐxãcC¯ G^©þ×­o€~ÁH¼9—¦ÿy5L·þ÷ëþëxÿë¢ *—ñîÔào4ÅAœj…¡¤ s6·òu5B`®§Ç~ëëB6.bøy`ܯ~´÷ê[šœóä(.Âi«Á„÷Û'"BaP 0D²R@i™GI Iàµô£¡ù†çäþí’V–=á{ÒÏp«þ{×e¿úy/®<üxñb½mÄ .LGUÇú{ý ÀSBÖþ³(}šó'¢ 8¾PÀ&N‡Óö»/±_HâA`왩½Q‡\Þ«4nñGO$®Yö^5õÿ¢¾áÊZo}ÁB7mÐFñ=í,q/_siÐÎÆôõÅ€‹õtÙ‹“UtöÎþF~õþ øÄeyë 9=–÷ ˆß8ÖœÙ/ì/ ØÖoh&…œÙ¹ÍçÌ8p]›3õMM±ª÷:Äã„úÝck ñ ø¯;,ƒ;K/Jêµo¦W@ ¬¤œê¸çDVÛÜè16KO\[W‡góøøø)8ÎxÃλÙë¯+Gí¸ Þ»ÕÏV{;4ƽ²Oï¶6 ï®&ăój>Ûí–ùFCmA¦x³¶ERË_3|ïgsHTz§XŸ=È;´”h“£¹d„jAt)µèéã~MêË ŽrÞÞìÁ€Ë2?1D‘¦CÅ©Šƒ°4› Q´ ÞÛÖÖVÆ"pÉ—wÈö\&KWS0R¿Gj¿ •£7ÎøhkYiéKú `àÜxG¬IÚ…‚zcsA.v'l½áÜ=½#p7êç×€v™„ôôðÑQÖ¢"aIww>ÇuWW±ˆ˜˜2°Y´¨d^懵pž±»?|­t ™S‡¿M ˆÜ¬Ùñõ˜ÕPÒÐÀa‘ ‹+*¢§•s6¦œÄØ$$AŠ©ÌTÔÔP’XDÖ¾¹ßnrXd‚¼ ‚‚K¹‡FC¸Å}Ù“E x€øû÷qÚ÷~mÂçJU ß¯XµOÂÁúÌj˜€ë‰6´P­r™»‹]:Å`!ö7o°(DwØ?µ\L¬j½P$íÐïûû8‚zå¬Ä„Û~v¹%vÏâ àÒ\\\³ùVTË4~t0§¢RQQ•êÖÑ?<<yß‹—ünÏ6Ž—µ;bÌÈMÚQ5|ÝÖ¿.¹»Ø>7w§šÌˆèp  é?róðØws” w÷ô¨5»X¾¼b×þ¾rŒ„u-Ó•B­ Ï^°À+ÈáLÙ v=rlÛ' e‚sÈR,®=Aycœ(ìÿ@,[¨VýµC 8øë=[ª744$¯¢ÂQ¥^ÆG*êÛ´ÿx#v°X·Oƒ¼ÄˆY@Œ&~¤\àIq^O®šGÊÙ{n‰üvAû úÌ4Ѷ­¤¢Ò˜ùä’4:êè3kþ×{‡á-vÞ‹Ç€‹‡g m@4äB…3CO{rwB‚§/—o·}EÍŠ;‰\ÚqŽU^}jÐÓ(×Âxzz2ÑýñM¶p1àl£‹ƒˆM¯h›]ß ãµ”3*¬@y'ÈUÊág°œ 33Ê`b: Pþ÷ôä×IÓ„»½½ÛÏkò8]+ifÇÁRÎC…Q+©Åµw' ]"ô,„|õ‰DøòqM(·Aí?­JÔ¯ï‘ÂL¿üþû/YAAá4‰4ˆˆ‚¯Qà <èŽÃ{³„¤!sŠ?ûK‚E;¹ €ÉÁä›Å÷›,óÕ†ÜnåÍFCw÷¸žîÓRºÎZV0­° ËçþS+Ó0&ötZ½Ø‰e쉂½Œ§„Ý7 ™/ìòŒ+Fºõ³€€&ZG݇P03 ˜æzYG®«ô$u¯ÑTÄk”¦f¼1C࣒3µÝãÌEíp­r‚ÝáÔí蘔¤d˜»U¯ªF,ÿ¨ü“ˆÞ\§'{qð1j‡®'šBFj‘ÑÑCrs)tÒbAÙãKáÑk•Q2ÉìR¹Ÿœ?_$‡ ’ ™Ü<´¦G™špeÙ/GÏàƒ¦ªªØ¬„ѦŸÁÃ(zÚ˜?ƒÇ©¦„®¸å¶åÃxêã:-ñör×Õ¬rY0%Sû^uÉIIiíÏO÷$)q@&¨­¤1»y"þ•Ó,Dz——×›ñ÷÷¶(Në…¾w+·&0×ÔԔĊöç{4&ü>&À©}2ý±“|ühn>·Š”Ôï_ò%ªÔÎZ5ºz¡‘–Ý49©Ê+• E%¸îïïs5tº6ºFÀ/†IÀ®Z\\\; ´¸d°à.B³q:(ï·î‰›\SCèLjt°IIÑ+µÐÀìûwwG[Ùw[ŒÚGð9õèÈ.[ð3jsssí2‹F)LðóŸ§*ä·+9">g÷§Û£™"cxUNaFUhÅ–ίeJ­ Éõ"”F»øI-—L¤ÿ¯d¥V·Èïý}J*ªÍP©êî Y߬Ùô}ª— Ǭ&ë­?NÊnO;ž©ÙÙ1[ŸãZL4‡ ¯X#9ÍûÑÝUûXQ´äÖ!ëý°‹{ºí9á255mr?&î òˆ:>!kÓprp`88>.ûøï/..u3¢‡pÇFDj"Kîî°•0ª¢Ÿó%+k¹Ÿp*V½?3·NÏO~Æäàuõ—}(±È%^û8U “ñÆ6M‰þ)öõ[ÎO“”Êœ™oï\GÊO˜³ÏàÄ}}}ó»OÑ·6Þž4>ÊL5#­4Àßæ¢-Ë«w­¯S€‚ÛEKïðüôضToÝ£ÉpáE—GL«Û/”‹ßŠæhïtìxü&¿‰KfPù)ÒžûÖ‘üãxöï|r¸ÛuóÍîPL²m’‡;÷5r(€ãÎÎ þœÊÖzÑ2.ª‡‚Œ ›³y½õϱªªø ™ `¼Î Ť5(˜ßAÛoÇé`’*<.ùÖ$ƒÁf" a€ˆ]ÿDð>[ qã3À×70pøc{‹®¹ÀP¤xpŽ4Jæ¼ÜŸð¸åo?ã÷Æ0³ßÁBðÔ ,œgfR‚Y겟—j•Ï9,µx8Šá#w¨0Cþ|CЈØ7æØÎךœá¸¸¸0O'MÛ‰T9Ñ7Xá`¶ „ðÕ_»ÆJ~² 8Í„h•kVN}*ð5DaGaÄe²Ó?ýS“S KòiªÁæWEdL zïÀÀöt±’ ùM–ØÂ·EÅ(4Bù Ô`Ó7p»ð™È¶YɈ”äÊ)4Xgù}f ,LÏÌÌ‘Ä~ü ˜{8&Ù@~._›/ªÎ¨šÄaÁˆ“eoÖoÏ(ÚVéPƲÞôFâá¼zeÝ2˜ôǼÒùéÆôM%רÔEÐÿÁSÁm¦¿ãùéðêt°¶‚ ‚tÓ|`~a {Ø•Ùü^²N` lPPP—/ÿÍÙ4ˆõöõ}þ=[6#z›{ö› fT%^§ãšp¶X9¨ô)LÎv’U¼[l¡’’’ÕN›’Gkm¯AÁL_YAï1¹:˜"r·ËßoöþËL.æomHPmÖ‡:ĦWÉ~E|ž¬¿†k?Ý•ùœýv̦A²|NpEEnÔC¥ŠYÚ_,8(ȤAï¯wÛÓþj‹GcH<~!ýfL¿Á&ôp¾ŠFPd#YP«£EÑf+õ‰@%æw2Iüx<@êV˲nZxA"«2º ^YÂ}ûé~ügÖë³>ètbX©^‡“™€—d?æƒJÌéWMÊ¢ Ú* ÏyHb—ÍÍÌþt‡§ÀÌðau!aaÝŸx½[^‡NƒöM¾^ƒ æ±#/I4~uR-ð«R?<%_B¬Àk~7†áqûhí~yllžWFçÕõÙlvG]Œã"ƒ­ƒi»fˆ!JùÃbŒóŒ;üÏnn<þd€u˜è§È›7s_Ù¤ŒÈÓØôé­)Ý¡P(© ’ÕØ9‚ «<:;ºª DðþjûäÃê¢ù­"åsc$ÝËóUƪQZðƘ(Ÿ«™55åvË?ÞÕÈUÍ›ƒDŠIÆAˆ~Òö€¯ñíšþíÆ~³Š§òÙ*~Óxyb ½‡7""b!#WƒöY‰9YMUqXÔrƒŠyÐA¡K«¿9]§ `ÖH0Ä 繿;í“ò5;_sò Ë"DÏEÙΧbaAÓÕÕ“yÿSyq±:cìGv ëoN»€ 6T°.ÈCáÄËç$Êg$KæÀè6á/™ïùÄÙm2Ùö·…;ì~ܦDð+&X&ªþΟFƒU@94È ¾ªJ ^‡›(¹Qÿ¡  ð<µæ½«Ô2cÈŽîØ`6›Û«ÌøÎè«KTjQ10 5:¬J‚Wãââj:>¼h7n,1Ø=¬w¹¨»f3Mè YYYJ ëñÏ5;ºµa½Ÿx»Å(ÈÓÓKµŸšÀ „@0™àü_ß<º ’bÑ.'%#óÆ~ù‡mþd™Ä¾¬)ËÉp:‡ãˆµ±Á Èãºç6Æò¬!jcümÙÄ5-Wñå ª8\Ãz¬¬¹þN±™†ª-oõÕG{ÉÑ; âå™\SâMiß@kJ~LFUt­_QWWnEÅßMOÇ8,ONOãó:)á¨))aJ4ó¸,ümFl>O9"V‚îGžˆ¨PкÃ'àÆÔnôInó¹YZýUk©ôÍ?Ï”¨Ð01)L‹~%^ö‘Ó6º@Âû×Í 4èa”Ï¡6,Ace¥Â0acÜ •«Ö©0Y b°ïJ¦HbÝ7ÞɹÎ>P¨Yuªµô¿áf…è~|±y WÓ`&xxˆAÆÄ”51É{'1ćܫ¨` ~_¢ßá~¼´‡„9Ôý?é•Z[ÄïyFùÝ¨ÍÆ£¥Îõl¼öÓµ‚~¹Våd©Mºrf“< û[š¼-¯…7z•žÑŠ©z¿Òꃅk^ Óu¶¥×ACºð¼ÓJJ›í×{˜+|>Õè$&]—•YŸ]Þƒ”†îÝf¡ÓyÚ1õIZKKk´4¾&¼7ÉâTŠâ &C}/ÇÞº7‚µ³ªíZ¯ÆðÌÇ…f×’¢¯ÏWHQäЈG³.",nt8Ð[ ÃÏØ>¸×-¢Ç›´ØïRN¤ÝüÏÀ¼]Tuã-6#ôG'ƒÉîø{AçϨL=VB‹©…„^ËãèUÊþ¢èäD¿ò©­«“£§§ïo´_vºù Q‰6´Úz†ž”ß©óä‡Fßvc¦Ör„6ÚÿÏ\yøûå%Q!’J¦” -Jf‚¡þrõDgÑgRÂTÅ‹+¢˜G¯ ‰=9¢(„ŽNTì/Ï?JÄLð¤Ò’þ"³."Ž |€1;8'¼bµ £ÅMÕ€f|F[Z»¹¹me9¶g~ÊLO¹ucü«P†àçÿV5˵ú"ph¢Žÿæòv3œ‚öؼ?Æyð7C? :RR­ÜÞ’mÜ9œdÙýP"ö~#þÆ^%™DZÅomFÌx£kÙá5¦Î\Y î:Br!ý¾Úâ Ø3Z/ž— è š €¥õmtÓ™6ú>ݯ?Î<ƒ\˜N«^©UIòÓãôäªù6Ç¿ÙZ\ œÒ‡®ß,ðMËéï‰ØùPżdÑ â&‡5Å›}ªf_Wcá“ý}ô•ëY ÝÒËFÝJ­ÒYÊŠÀêå‡VãIJÿ?Ñõ{cÎ'"ÔŽ[”óº2>#Ì7Z¼X‹Šãí¼{ÜãûXÙÂ;Dq¤5ë¶o ¼Qëÿ°K$#yccr}´Ø·þùð•€€î$! I±ÉM´f#Ú ÝÊ`ð¤\Z,~:?ÄuñùXT‘ù$ö±þ@«•ð! è¹Ï½HÏ¿9Øü™5c6ØTè°ËÐ)"Ù d»&˜fühMV¥(ÅÆ™Ç@ªýþ<ÿ‰W§Æ  ]‰E0’Α^RÄýÙå¥ëïìkå€ö¼h©Ð»4‘±Šôv-@ü¶w>7µ ¸•i€3 y‚Ôp›ØÍg~¦¿¨sè(Õ•3x“¼¹ß =°CP¹œÈÏh€D©¤9Èð.W$kÔll àHji¥­ú}SÎ ¢÷ß֘à –}´¥Yš0L2››Ÿq𺋗Á. ijýûy3bN>ºÎAdÿ®Çnêcñ«ôúàr‘N§e»gUD›“ßG<ìLÒÿtÓÄкðIÇ89IbAîÇ~f_™Éý 㲎˜Í–ªý@t©·ž‘å~62ðÙɓ–ü{þ;oìÞ¸»··µŸ@˜ýÜ0oÜe’`Ü¡ŠÌ¨ ¿2ÓѹcÕu‘  ®-úJì‡è?¤4‰ÈŒ‹Mé;a ûã½=¤Ô²\QÌ|4x½ŽªZ6gÀ*nŠ:ËzWîGœowÓªÔ‹Qµ*t65Þ «¸-p‘ ¹›ópsÓ¢H±þ 9sR7Ѧ¬geÁv‚LÆ{!cÓ3_8ô€ ã3ñÝG‚Ûã[ Ôœ'a„¦fÿ“d{´y•5«Z} ÷Žœ2*ÊÖl—²c§Y=5^Àí»ýáB©eù¯·È¯ Ý`§Lª¢Òµ¼òóó_ô¤ÑáT–ðˆä—90ûeþþ™S+”ÅÐÿ.!ºFñýÝŽÕ-³¸,r19Â^ >¥Î4z;B꺕æÓ(Üþ¼x»Ñp@U½Y(&tý÷7çO÷§=v|Ë«VãÙŸÀ~G¹þïÖëlÚzÕQï6rÐØÉ®þü¬Ve$ÒzÖVª]•cO¢î •/¾q¹Ü«[ Þ šÙáEïVDp ÈïZÏj„z®‡Ï»æÕ'§§‡SI…áÿü°Ñè¹ÿÕC±Z{ø…JTrûÏ”ØÛC ÏÍP¢I°ÖÛÎc‚76BÄ^³èˆ%ðº3e£sÆø½­“"ðã[ÆâzA¨¢w[;gx©6>¼‹N†\ß Ð-­>=\NÝûvT%&&†„ÀÓÒÒšìf–j”á‚%8âýWÁ|0s'mÔ댈B1éÆjÇP¹¹ßeW”£¦çøŒ€´< ­ïjpùƒkŸŒZ—(Øý: 6©Úýáßµ4¿«#”j¢yþaÊûø.ÏL†’ .((ä^µs{¡Êç¦ß{ý–õvh]RV†ïd­-º´”QZF†Š•$h¹*£6ÐÓÎ@å²áÆÅsu0D ¾‘ e?MÂr_«iA<¿iÇ@c Z=q¶ûcëZ ‹ÕMï.vKÚ¼Q®£°ñð‚­g¾4çaµ>pOÖÒM œmEK/ˆÈ¼ÇtÚ„:í¡{‘‰ f ë6©{^àhUê…‚³9ÄÛ æÑdG@|dC<™súbq„{{6·KÀ OÎ_ªkÍ„ã$‰Ð•{\ÐáL‰çeg“¶ü½ïÁö¦ Äê.dpl@s¼e¢½7£"ÆÆ»ÀÀɉ­”ÎÞ,2Q«xr‘³ëeÇ–•«q“é"…ÛãÆõ£<\hë“àdåë³?åâ\ˆ4’UH$oé9âF•AÇ[m üP‚6möôïÃ÷ßï’ >XPã)&„/cœJ$Çž»gƒ³'îYÍðGß;µp†¶0·Ú!0ÒÓ‚^1öqì VD›šQ®]U MH~ÜÖè©b%¢ø¯/óMü¾·ÕãHا=`Ðl]9{yye€Îyo"×у¾@ÆdG>/  ³O~ÃlsœŒ’q¡l¡‰ÑN‚MP|nÏ·Õ ªÖ»S…à OgX‚ß ÄaIEøkÙÌo§½ÑW€¸…EµEü/F8ƒ&'™ [çJ³«e¨7.¿g‚°u8Ƈ´38ñÝáNŸSH‹;ŽeµÊ«¨AÐO׸î¿IPy»AüAýEÅYÐM‹MÄÌĨC½~²!ŠMˆ»ÙqkK&pqö»,¾Í9mãÔ¢ˆ0ï¿°ƒO&ë¢Üã7ÃéH²±ÔR!Jé0.s ÙL†u„š°R¯¡û`ªð|£ n¹Þ0• UÕ=vôTp)©+9!ç, DY ŽŽö‚&¶Æëòã_@€É8©Ù‰ÏV{«^“'Îí>ÅÆµýÆ“ßÖŠ’ ‘ÑŒ %"ÎÎßW ®9Qá{Öj'ª³»ýÎáÔηëØhñs6}{cY8¯_G3}øf2˜@E;«ãpÀ‡µýÐ'æ¾T e šÄ8ÀønÐ*ÅÆV_t’=G;r….\Ä£Eœ7D.@A±XpºfÍ\sMÍ£Ìó÷3 ”–…r´I§„òÀ#ÁáÑ…rp¯ßâ†RÙ¦æäÄ•}(1[þaÿ2º9~׺ S»/š—\.¥[FâÈânȪà õÖxK ¶ 8þ $\pünƒ^›ÃP>GÄWáT¸¥¸§{ã­bFg=§[ÎyÁÏÔû§kd ÕÁA§A2N'ʳŠ^’„¬ïÂÎ[ð`sVY^5‡Nv#&Ä3 _†)äèÈ.æõ[ÌBÙØ$e­ ùÖý™¸qVî‡C“ ‹<½7cosý© Å“’¥Zá±÷×Ï6a1÷ªn‚f8m¨1dhÛŽ.®®\æýèW‡óX õ1ê4mÿÄN=Ç7ºÖ¿óâÏ‚ªGyn"2*pß¾}3»¿>=Ùf­Ôo¼þ¤úÞÀÀ ±á)»’$Ü­ùï†= TRN›ÝCO•úpbOÈÿíܾùn„ zCº/_mâéÉÿg¾*þËÛ°&•4sKJJæM}Â&&Žˆ‰AßÙÝ¥9áùáëEé@0ؽ‰†¼~¤“S¼Ê¨·¾Êpùü´ëüþÔÂ}{–é÷Ð ›}yó"÷Ü»£ÞVĸ(ƒ}ÆŒ–$ª8_lm¿ÄjNÿO‹ˆ#Ë0È7e*ÉäŽéòÓ3*¢öÇgÍׂŸÿäI…c‚ÑÍÑÁãÙ½ûÄÀÀ°=˜H#¯¬ÜÛîwow¹ãR:×9™ßy´8.Góe¬³Õ«uXeÊJ ôß¿§‹ÁT@‚<ªeOF#|5%VøHãß—ªšÌ ÍC‡–¤ð̇;{{fKõÖ/UÀBÿî¢s©ÆbfÙìw˜öàξóC%W´ôxØ|AtNQŸ@¹ß¼Ø©½ ‡SJ‡Šø<}(µû²h‡£÷l€@›â0BÇG t³Ã €§ýúe–qhž(@±fËÁJs]ÅY£‚ƒ‹\èºUšäþøE÷úÏ϶G 5pÚß º®~ÏDkÞB6ÊJrºgË>8ÿž¦ëíï/0ˆKò;Y¥‘ â2‡­ì¯7qéÚžýÒïvO³<ï#26ë|W[¡y@ÙFG:[P2.—™¹ùT»ŸOdÙ(§4%.^àšdBÚÞ‚ç­9l± Ž+M\[[[ÕÏþn`Çõ~HáBëéâ?J¢ë6O®LAß«ÁfW$DÜçþ£Åiâªö¨¹~×™½1éJî6Uë×gZ_»U•ã{55%/..8í—xÑIù±ãe\óó;ØÓ2Ê–¸ù21‰ÄÑ¢&ÄO}ê=Z¬s~¸u^,©zûiõçÿÇ¿ÚËê&¢áXpU­Ô3j„þ´ @žM]4š­Œ-Ï{ÅÜÛn×Åuv‡K~߉Äk&¾ yL¶ùxøÞ¬z$e•8›oô¢ÔºL¨qób’ Në‹þ=œ1„ËzšV?N´êìf½óßß ú0SN§ ñlÁÏÃ{ [·ÛX£‘ žûd¸Â´ZÐ盀çð¦&þå†ãG}xÅÎÄ«ƒµ Ð,ÖyœÕÛ/ÄS¤Û½ùÒÛ;ÿßîí+áüˆ‡ìòÁjËÛ8rfCEýii™DÌö§ŸG{`•Úí1¿S^Þc7‘Ó/Ûj«?¶Ûóeî³'|T– º?[¯€'ÿ,b:YTÂHþãKWÃ!¢wÒLQ¦¿îa7Rþ5#Ô“-`¡I–›/n;vm¸ d,Š$ºžÀH:‘àÄ€¥ áü{yy@ôq¶aäæHá›Ø]Qq±éÎ`â2‘æßbí¿'TòzÄ@Ó¹³Öæs°Xǰ7þ•Eay®šÊËûæøðÁk"›ê¢¯D»Êt'¡ïžÆ²†ÄŸJr#h Ú¨±L‰ÑYt ®û¸0ôײZ$ F¦±êª—â%¯®9IDª€»Ïy£"-+»5oj÷š/†µ×ëŸõü8[Ÿíl)ίJý}‘Ó+÷Ì­¹ÿ³ PnG©í‘/3#WÀ‰š ­‡óvýù)rÂæØÛõ”©·$Ïñ­1²óþó«-C[d˜mFñ ¼Šä·Ø-Ën¥h§ÕûÝv‹uùÇ+øÔ;"|5¿/ÄxßóæpŸiª¾¼ª­«ãò81ÔEo<®"ŸíR>!0¾‡¤È‹úFˆúýÛ Ög†cWþéöøíEž[xU¡?¹˜¿0(¶§k †TW%‡v&øûÅ”œ…5·œ‘¹ÿí&Rd'ý‘ËMÝô‰k#¬q¤V§þŽ÷õQ¤ÏÍ Êgú矟ÇÌG73n+×$K\}ˆB‡¤í_)¹Æ)¦ÅF8Ýã>==ᆛ¸Õî£aÒ‹â‰f½u$TFq Øõ÷éŠ%`Dò ]ËŽ±™7§æ¶Ñ„´Ì o4JåŠÒ–d„«•i”DSÉ¿# §ÿšn„ë/êºÓyˆ58OvF@——Q”Wœ9;«C&DØñpm¡?öÅ¢,KçBlï2Vz¾îÅVžÓm³÷«Pø÷ á`™ç‡àaß™ç>¢ÀÓŽeA³WÃé·‰>©±½\tv䌛ë0 h¢2]÷ÇAÁÀ¬í^/F«‰‹Vº…à÷”4Ñ<õÇ‘E¶¸Sqp`é³Ë–çQúê×Ñ/êÔÑ;ÿ#0¯äªü¤©bšK*QÁñáÃÓ“={®ö‹+$| È`æûöq ^'J«ôSCgº1³ FxH‚tÞŠß—¤$u»y½VÏ“Wl€A‹Ås ÷£< Wç'wÒ™Ù“’“reg"¶‹ÀîEH¢%–p©bþÛ®Z¥wbÏwXþOwVC?þÓæ©q-kR-ôå#2ðüûGS‡•0^êììœÁeŽxaAÞ ²s_†€kžõêRá|Jp®¬r‰ëz‰zÌ?uœI*Xx³Ë.ª Ç +ËÃñRbÃ=Ý郳·÷O»k&çmÄþx ¯ˆðð&£\òŠŠ’‡¸ØO` £Ö¢‹=·ºZOîbïc²Ú«"lHðÙ-ÀÀ€Øž{Ư/ŸëýÝf…54e<Q²Ôè°ú§ÆÕÊÒrsÕc=ŸÚzºåe3Hòôè‹%N‡JqDò·>°NôÉ(æý1]  ¡[ŒaѤ¶nüöþó³õó‚»íü÷}ê•W:i/“u‰))¶<$±`U :ÞùŸòªŸ~Vÿ¨ß'-5”ûì'í½g|¹>úž(¯j»DᇌlR>É#¡b2}7Ýõ|•ñ8z+¢§ q ôɽæý¿GÅ̬X-XE{û»$ž †Æg¿"´/&hœ3:Ÿ‡Ú‰ñÃn1D„Mй§Fáç¥ q DàtOäúÿ+£Ià±[ªG¹Üƒ©<üK,ìɉIÊc_±ƒÿêÕ« n˨<û«Ohƒ¦Ü‰ä‹Éþ ((ü®pdãH#•ýÐ[íX‡Z·Çh…ÌÂ0hfÎH=NVºÿ½F𺠥ŸQQÁ ’ššˆpAÁÁ"³úû |>Û¶ºt°@)üÖöG©ŠÇ•„¢ÔE¬Œ—åÃlç´] rÝ ¹ID‰—м}“ûúí®!ÿðãý —ÝçJG˜2ffÔk¸Ú‹Œí÷'B G]£™'•ÊÊ´ûŒ˜)î¹,²[h‹û±$hK@î@[z…x{k^{6Ç¢+êWÔ Ï ’ÃZ>ºÃ™5öÒÜÜÜÕ.»ŠvëídÌŒa9‚ý`};Ë?P[oæ)£8`~똴A!QÖ)LN.å(®“Á5öbÓØ ™k;qÙÌ•§§ îÓ*¥'m—kY%¯+‰¤vPçÙ¯@I£¢¤0IÅ鬆1ˆà@óÜïsÚÆ0˜§ÑÀ|×è¤iâ¸F·ðLðãþíkàwá¾T7±Ë|Bqœ•v¿×†?Ýj,ÃvgZ†êYº±SSqÒÎ'ýJ-ßÛÍð—ðS¦O>r{º¥) äã*ÔŽE»þ¡d.·ÕÀ3$D¨GRwþw§]Tý³yãîëý\¢=¤—äQEö¹>’]Œå»§s…¤±?sm³o=/¸;Øþ« ý|ø+ßr$ÿóŸ” ÿÇÍG¼Wøû¹,U­A®{È)ΪØw¢ß÷ÔšYq‰ä*Vü’Ôá4¾OwûļŸŠ0ÁÞâo1 \¶>jU¬û(®Ž‹¢±åúïÊš×q^9!äÚ;¤:óá¦O ÇEI^§3jUê ¬U°r MWQèò•Èb˜tÖCÕÓˆšõ‹-Ý–éb­%nr. Û±¢¡7zUÎÃ|ÝbÌÝå~!xüíÃåÄùÙ¦TÕBÕ„,èÔ9}®í†$ ûc~Qh§}È’KÙN¶c }¼¿ÿäßÇÐ)Ç“ŠúüÜ]c>@»¼æ…Äï9Ù,èÛ.. ?Dü0%7Ý –—)•R½æ0L²(PㇾÜвŽlf‰XÔ—ÿ?² ЛËCÓˆ‰’4€­>þ᥋¯0ƒ_{c |{[¸þt+û¾øBhªI:•Z¬ú?Ðë>Ž%­l@ E†ÏOtk•¸Råt^Wë¾É³û 'ò¦1šåZ¦sÿi–ª£z_€¸-˜~DŽò448؇Tí¸.j·X‹ðÖq­¾Åñx©3Š€¶¥©®¨ÒžÌÕA,&–çã‘×dSȬpp÷BP¼ ë%~cƒ}‰·¿¹âZd÷®ø"»¬$¦î¿‡ ÄG±¯§ýÖÛcû¢‰ÌÏ·úTËçJõÙ_<,"IÞDZ//–Yû{LBö›àíý= š€€€¼’RX0…[øoÁ¿:¼„"ÚÏ–J„}Î8@K±FpÚÄñ=ëBj xn·X:M°©É9Uýgž„´Î¯J¸4ÖD=xRÂh«‰œ>IÏ{°Äð•þÌR9?ž¶êéò¦!²QêmMo28“ÿ°ÙmKý²&[ƒšÇÿŽôn7ëÛ 8&ð§¡#ªÿy¼‰>¾ |/Gý' “ŒZ«+­(ÊÃõê@¢õÌ~ù'ùÂåDíc‹‡R#Bâ-†ö7çT¾8¤>fØÖÖT¡±ˆ7/Xè–‡¿ 2rt()¥%”õøÝË·>8v@ÈåY€’O³È>-î;U-ï›Ú|" ˜Âž×ºyúo¹O8S˜œ¶zQÐ)DI=N×Rí|Ù’*);ÑÈ.qxI¨óÀê9Aw^”+gЊüp‰¥+áqJ¾˜–©”øŸ†ôBŒl­:uP«Í<}—Ðß?^ï‰Ç>ÖâûŒ“ZG:Å"~ZÏñü§äêÛÁ?~‰õ÷#2Ñ8«AÅvm#¦#é‚1²IvE xŽ7!N—ô™•‰,(ZßI'[yφp„•˜?æÏË)Ä”¿l²5ø)Í}CLe<V`÷îY`Óqvë–Màz‹%ü »Œ÷9Ð ö;žG—ðöDÈì‹ÃâÖWQµl¡¬Š‘ƒUý/ÝúåF~©ÊçYé¼4Áðè‘æÝ¼$ÅŸ†ó®|ñˆˆ¹ ž˜¬ïW[vÂþLÛY„žk>=$kè×ËÛ|Ó.úb0„î»ÉdB'‡Š†Ö†ñÚ„Qfn¤ŠŒAgšë÷oP(ßýúgža&¨¢äœÔ`«°‘d#Ù&}k8¤érA«KAIŽø«Ê˜ÄÏâÈázèF©~úNB²ëGô˜×rÜ£Q.ê­âÞ‚™k¯yå¿ÔÌ›P¦éǓˡ}ëŒ#£-5嘮µò©Q¦Þ×6΂ýpÁE9$f”•0ìmHÔþ;ª›(±LIÚœe*(š¯JwˆŽ t~úÞëæj¹vòååÔo·Û‡U5žç[ê–×—jÙÐ m¿W#89þ$Äo¢àÛ#üDèñ†®—+^E²•¤ ³*…™²é§ÿ±YË®ÀAÆøü´òÖ!¡DV;,,¬°ÐMv<ãv )áö1tysI°Ä®àÝD«‰¤,磅icþîea_ù‚ëþX8—å‡ÇH¬ý†y¥.°gN)ŸÞÚM ¼ÌkH3A0û"Ì Âùd3ÓÓN×Gº àŠy>Ür¹¸ºâàâ1äxBcï¸ÉŠl4Í´È$^ö}Üò[kNf%Ò2cv2f`ŠDêU±‚½9œ Þº¥­˜Ü»‹—ýóbQžŸn:& ?0Së¾,£}YÜéáÖ¹·¯Ït½Ýïö°ªã詽G¼Ðùéð¿9 ~Õ¾L‚&æÇŸóÌ帓«í2ïÿ0Yô[ž›%IØgëwÍÿl°Ýlêüönz´1Ö†þ,ÇößÞ~ع@<…X?9Ø¡ÏOËùæ:i©•†§Œ»Ã8$\¹©uW·ËI´WåUƒþøóM¹þ>×òHxsÿ}ÿza‰ËÅøßzÔËêæîpj©aË[†kS_uÈè—7h‡»]}è=ØW<@ǃ$açYs@®²ŠŒžmž^îi …Jˆ±C³ìñRÑRU¹“‚¾œ¸Ñ Dj‹!ܪÔ7—|³(ÐÀ@‹¿&þºffòÔhÍÖøLy2üþj–Ùò=V6à=e“š]œ®²àû‡™rÚ̾,œ¤ên"ùÎBUQ'D•p{ðâ¹sG•M.,p .:žqBÅ]¶ÕŠ ìÖ±bŠyV1_ù‹çÈä xDD³® Ïc0,„œ™‚ô3Π +82W|´ª#éw2ƒÒ#¢åW6ýATQP*6\5o'r.ïÍ6«4Ë Ý—dBÅ(ÀZkŒù ˆ EžÖBG˜ákº\Ü»¬áõ#KŒä2„ÜÒÔ+ï¤ÿÊå°æk¡º•½+Ï¿¬{?–¼ÿú²`S’ãýŸܸïorö7R°— Ÿ¯k]Jm! u[po‚õ0CȃÝ!}2I´2¶ŸCóíù«P÷ñþD2Pp³×þ´Ô `g "¶üßU×ý¢efmzE ƒÚQµÚÚˆèÃû²9å/¼(4rqðR (g^ªß ”³ø0Ú¼ÿâVÌ`¢£Kƒ‰>õÝPèêÏZÀÓƒ ØÍ@Dþ^ñ=™Ø{ŰË\iV%åÃù¸6rÅ<)TÓc½Zx!¥Ÿ•^®¸*›ŠÒâA¡|öIi·` %m¼Öo½šVúþµ)¥0ƒ Æâö{AAAá`¦$~•ãeé¬þά͛ÞöµB¹è ¥*õĆÙ„Ò7\' ÒŽíLŠLöEÅ8rëyê›7—4Ö­ûòvýæÔÁñ¨¦r?]{Úí«y¹»uÿ{6I2ˆz•‘H½ÍêÖ_ƒšš^)"›?L’RCsä";®˜vkÊaè,Zžô7ÙÓüÎAüÿvþ;ë5~QùœçèGܨ6óp^!g0/kì—ù¤¥¥›Ü/¸ƒT˜a‘x f ›{»OMCs^  8íë3Žyš^a„ž_·ëþ&&‹1‰å嫾8ë#J;Ìç©è¤?)hÙ0têdÿ›³áùíeˤPRúV2êF$CŽÓ¿Œ’\’SèÒ†î_Ýö_:%yw±Èç§,n„xZºÄßU®E L¾‘HX°yc–ÛÞœÛ4°g(ÿ'«uÛyyCñs\íÛ]"êYR’XD6½zñ›“Õ©R5š–ñ‘™’H<ç‹­×_‚9ô£•¹PB úÙoUéqÎvèà`µqýΚH­äx–Œ»!õS¤LtÑò Ó`Wb²” ó Û&™€ mAA6uúOÝ.Fû£ ðtÖ/Ö•ñù½ßû>J€½L×>" ïQWÇõþû‡N ,šl¡yæ µct4(ë-'gõ ,Å*—-#{t”vÆÒ` 7 à÷S‹{"þa}Ë ó^Œ[–‚?¹(mG%ÿ¢¢¸8Æaü²Ì'yl3H)#Y¦ €†¤– ÑÆÆŠ¢cAgñúe©i³;T§ÍûÍQª5¬™ß¶ÍzÏ‚;²á£Ïnnˆn!ü«?;¦.d”Ô? øþê3®§ùÊX$´eΉ-³«()ð¤òÜgzŸ¬"I&äžçº?þ=7›:Ú _Ü9Cþüü\§Ñáë±+Ðý«úJ/·ƒI J§i­¾·`$YDîw‘ýx¿º­ŽÎLåê ò]_ @»~ç¸q7:TPšÔ¹O³~gGA7œ¢h¹)ˆôóáO”Óx1Åa!·XF±ð¶Mku·ê’ª8jçÌJ«žù@\Ãã‚?pTì;kô>–ßH3dêSo ^µÇ©ÑbÝ|Ur™ »;ìyR49"ÍÒÂìÆív>§û œ{e%GDlCãìŒz.Âë¿©‚Hµ«[>$Ó°D3¦I…‡Û4€¸s8•G‡pþ]:v±:$C™¾õfÍG~{lùì¦VXø¸a¹›ÝJ!«¸€j^«pÐþ˜Æp‹3šx–«VŸ›“†¶*ƒÅ'ƒ©¤›µä\#!Ÿ4Q2Ñ•¶:,Š$Úl—ÍÖÂ&Ÿt~*C¼áaafÇK `_J–1÷UJ+îV Yã¿lŽ â«¹ËeàfŠåâÂÌÍ5%¾:Y} ÖŸÚ¸¡!‹á8ЉçmYaüý’áý¥Û…±×a³ºnÌšÔHK ‰î¾Z¸,ëy¾ÞÇòŠÔÖ£îÇI> ÷<øãN׬Õ6ºÈ}%«?#"#%U®¶}Tø%ÀÊ»†z÷c½Zµ5ƒ+¿«OÕ­Ö¢«¿gT÷‰¯HIc^ñ|4¹Ü«5×xzðôö¤÷…öªA‹;F2ƒJ˜€ØžN%ýš›ÜFTZ )Sïwc$ÁÏàeCÑÎiêm¾îíhµ]bR~!ûŒêÐÚñ¹ÜÍO:ž\¤,Z•zs‡L-Š>Ìœ˜};ràÝ¡c_­>G[«˜)Q)Ô®2ªXƒïT™ ¸éEøKðÀçø£¡8–"¾/»Èûò•éÉJó ~Ë1:bëÃÅÈËv‡•¦@#B((?Ø9¶n>üÕMÖ47/ä2¿d ÍûO%-7*¼ú‡T´,))Ÿ#ªæâTT’|ççÌF+/úlÀíŠ*›~J šh¬yûvM5䈩vººÏƒ•fž§ÄÈÉ2xXn΄z3÷ ¹bOW0ãzGGåªA›à ™ðÞX™ïÓÓ½£ïѼ¼¼Ó¿…Nñ ^ºg9oAÝHÈâÁJæ-ã­ŒÒÖöP²¡Cs-(·+?e’r‹JЖGRYÂ-GÒ^æˆN Å75!ŒÈ¨ /”‹O#ð°‘Šw÷ˆPÇüÓét£ACÞ¼u”¼¹?uø[l3÷_DTT÷šåÙÃ²æœ Õ-A„ÄòÊþ>2Jþw¡È³hµY©ý=Ð\μ’”“£B;të>FDG³üí®²À/V^ÑøÀï9¹¶e´¡9µãur9‘ü–™ ÖÓ´Øhü\®ä‡=“/…DKOo¶3˜(CHAiôètn†ðtÙ[¶³ò?ÙX¢Yy¾ë$*“EÑ °hP Ü­¢ì# º\Óš©goXt /»˜~¹]—SûÂñ"š[ÛÛ5 ·,?>>Nió§õ •àïþ]þIÀì±7áI+«œÉÀÅÅ厧ù‰·sFeé¶)À´ö¸m é6Bo4—~EÞo¶®4kW!ö"¦U ¬4»‚hsdÆÒõΙ4W xë¸ÖÛä¼:WŠ&öLØ*íS‘KqÁˆµyV¯_ë¦æÄ%üžùBTñþ«àÂû×{¹ fûd:?”¿M|˜­P¨L7ªÍ ‹FÛ?žîks2‚¥ÜëÕH &¿<¼÷p5£r°ÜXåC”牞« ,..‹ú6Q.Èúœ¶…“£Ã…í[Nxm"TS' ocÁç>ò9ÊÌ–™kôaÒÒÒæéò ”…ü±öÓ:>* £Ì†ö„+ÁÅÎÚ˜]´à£á³n¶hý#Ó«ÿø¢´ÚñO·ëPMþÌ–59m­¿<Þ1[öa³Ñ<„€†MF[’KÈ¡JÆJå…e^ ÒÛ+Ü3L÷6,¹÷˜ç/¶çЉ=øe ÌE€ôÝÅîj rßö­…b5Æk>Ç'#e°îÑ«äÄÈ Äå#ªÀt+ Ó…Þí½â*›)ÙÎ x L#J®z¼TI¡àš1H(Í7Ä3Ý`s]7/ó€·›á/ðÒÆ~»¬ÃZ« gÏX ZIa:Þå Iï]>ß÷Âã{ü'ä¡=OÏœb¸exzzzñøçÞíÓšI—åEj<´³¡N!EEE’Vy Œè@kaæ¶FäÞ˺ê‚&ÀèbÎîzÅ¿u<»™¯"ÑÕ‘x±/]³í"ÊÇË=¬ÚrÒ áâ½<7 FÍænºñººÉO¼Ä\fðz 6¡ \lad|úÅVÛYjý÷ë¾;×–ÏÔW¯tŽäRÑsævÐH™õE #áïn&£vât­,6Yƽ\¿.vÏÝxƒÒؤ&k-MzG<ÙâÉCŸÔBF³Ql›]í'ÁÞzMÝ"ƒ¶Ãg‹¨ÕÜ_Ëz}¼îw-Q©ER³L«¼/ ëlÞ8% Íi> £mŒðgÖùŠˆqÇ'Š}wØûupsœÌœ28(ϪW,ሌ/“O rž52àO· X\h)N}JàûˆÎ½î&1’Öåxù±e&è¿ b\B2ƤÏî>c¼lTàèxÀE î*kWGU]²/»„Hk º½«ÖVÎtï]móIt ÕQëÓ´aîþöNÊ3}rD!®õéßáËæ²—G!\ÕÕå‡1^‡|l¡×#Ñíf9‰z_Òs´XÇðäËüP£^Ô?De."8‚ûô]°Ùómg òŒ¥úD»yÃ&XT›7•Ý0~)¹˜û¿‡'xT7ñ2¼)jžépJé¸r9sÌŽýný2u:i9¹Bc1g „b^Õ?ø°/ÆÚQ¦ðL­±Í²ÂQÝÁ©,tuÕz8Õ¦pÌ6¡šåÌ·`å±[ýIð²ìZDªëÀ®[ÖhÊû¨mÃ|~ GžõÖ1ΰÅ=?Ñ@J±,o– ³:Ô{|°0¿l‹-óóY‰—[LLz*Sÿ€#hŽØÝâ&ц¡‰÷› P¶° 4Ê 9">Š?Ö[ä¦Ý"—{ÇÛŸïÍ{Â0ÜP™JÀ&!¨qrVgžÓ´+ÑÑR?Fݾœ1¾è'÷¿«®Õ ⇖¬w…ù¸p6W[”‚ò×䬿‰…oáÃýNŠ¢µá9 £:ߨ¶Îä›uÎ~Ã89^ Št›5j ;;Y5åwéU)¼Åý' >\¤ä°`•Keñä›^p”!@ ½ñÿ‡¢[ <ð߬†1w3D11E¡“½©Ç_Qøvï5mÀŽÚ“Øj_tél T»°å#Ò§Pü“º˜GÎnÀx†òédMæK >+}ÿïSênú´j6”Ñaúþºï«aKÂL^`Þס!‰… ÝÒ•Ê×W%*>e94u®VÂ_D '?ò»£ç£y—ÉáÓ©ïáÀŽÈí‰ýbÐ…?²>Yi‹$Õûo7^¡3Â=µu0"•_' ¡†öäZÓæWL5|¹L è´áõ6…žÈÈѨLõÛ„(£Sù`¬Pø£ LǼí.´žIÐoü~Ì“œ>ÉÑqeϨX0Ê Äe÷Ç:3ðÆËÅ#²q86tsˆ’„aÊÌ¥I¤'MoŠ¡ë´‘Õ}Dy€ôûÝ ‹È3ù#ê9£ÐM‚îùû¼1~²:øgVá‡FÜ¿'?ø*@E¿y6u=·z°pŽ9OÖ±þ¶ù4lïð~‚±M½ï7 äbŠana{%ï*z>ès¡ðp¿ê1iØ‘ ½ADÁq_¯]RÔ0Ï~{ºdi[FÝøžlGô&û8õf”G½¼[ ”ý@c»Šãº“a ï1|KqzsƒíöºcGèÞšüÔÏ1lïW¥d¼ZqQ§Ó-'z8Öò’NÉž^C„d©ákðë4%º<:JMi9ÿºànW˜>Õ!§|¢`a†Ir†‡oŸLy Ûà_•¼Oì%½¿êÔa4jGýÈÙz 8 ƒÖKøß´*MlVIš'Dö=ýL]\°ë½ß¥³2'ß´Zgyë|W8gÃOL€«ÃPñdúw@ˆ ´Ä{s"á± uKg—ð8§v#âô¹ü¦TŽ>6÷U›–ÅÕŠëÜä¿s™yð_óQzî*.tÄ‹œmd9 »°E™;if½ÏFëJ¨-âõvL¬paRÝV ½˜!øÕݾмûK•và(í2̱J}dÃ&ìühBª] ·Ã°Š82º!ѨKÓÛGÛç¨ûIˆ¢ÁôÛÜvó„÷pêù¨RÕ²4.$|Òq¥¼é ` ³…l¨ûß¿ó?ÇévzàGˆ‡›)¡iq6·ø|QñÃ>Q»0Œs>wõ³"êìÍ©TÀúUÇ3ævy´ÈìÂfNòâù1×Κ[qQç#ò†¾àaR[k"ì߇´Ña/õ!¢â=ƒNGž¢KëO$,Wixõp,9ïõö É”¤PLH”¸‚kaÊá~xÅ ¼…Œ,µ×/1™äƯʳå:$å÷qG\Êßg”Ò\s}0ˤ©ëôß2ߢJZß´ñ´Fêa|8üÅÙà€¡©Gòp}úœ#ÂIÎÐ -ÿžÉìéI\,Fãþé!çp¼Ô7iªhÌ „š` JÊNä ,â]¼Ý|¶ÜAñ3š(¿ÙïuÌ¢ÝrúbŒÐb‘¿ø.9ä±$TUzo8üá¢8$ `PÓXÙ-`'ôT±/ÐìT•1%)œ@-F/l¢öé4¿4¦H:#¯M¼ì¥z dÄW)¨¿ÏÆ„0¦p£køŠ¯d¹¤ÌâLyü(Õ?~ïØ^Ž•"BÕÃòQa’L=ªâù)¦øÛðøHÓœµd~Sú©­ D•Ñ’ø?àÿ6Æüÿ=Ñ$A’éãß§o„ÿ¯O?"wæk|ˆ”dŠUEûÚ/…æ©sjüO«2‚Ý´Ð9›¿½çbU_H˜i''A§&sêFºjT2¹³·d©kaiÙeÓÐmÓ€’à Dqt¹‡™æ©—¯„ääû'\µwY4ÐZÔßÍϪû;;`¶Qóð౎t›Õ,T€ƒ§¾Å_Ñ…Ú4 ÷P ½fNEñØ+ñœ·ÿ~c ä!âø·C'PauÀËÜ./º €á t;"&F c«š¥ÔC7ÐÄž‹‡FF‚û̇,‚ÀßûÌj0àfmÞ°¦á>2â7nœèŽ?h—Ï©–Ï Ž…êU""Â¥@ÄW8:÷ºôz¨ê¹‘ÍšRŠŸ‘ùËfY£órFÒ‘r­òü©Ovk~Π[ ‚RrbH¶Lpß̦YA¬Ðb{5Èù2(¹’•ZÁ–ºY—*…S OÌÖ|yE€ñH¦„2"`Þ 0ó‰÷€©v™ nalG`ØÉÆ‚‰¡WëUvHð?½ D¼anöOÛé»PËï„0:Áïu4™BÞò™y¨1¶Cß¶ tÎîð>xµvÐ ²¼ÓqEþ ß·ýÌUr"@%ÿª…ݵ߱Ïy£³p*Ž‹HƒNŠçOw•*éŒÿ~#ZjD¶Ì¬[J¼ bU—6°-™¯Êˆúÿû­Oቂ–øÖ?ïŸþRy/ý]Ò$èPK –nYTèÎ;½½svx.iconset/icon_16x16@2x.pngUT \(b^(bux èè‰PNG  IHDR szzô pHYs°°'Ä­tEXtSoftwarewww.inkscape.org›î<JIDATX…Õ–]L[çÇç›úcØ&¤B$PVšÖ2%ÒN«D*„RmMIŠªª]¶F»(Ñ’2A{e£É¦%q/&–õCmC’**B,+S‹–”P¢ñýe 1µX¨1‰Áı}ÎywÁ°À6´õbé\œç¼ïóÿ¿Ïó¼‰ŒŽŽþÉl6;6þuPŪëzr8þ–®ë³^¯·¢   %{¥ØÀÄÄÄE³ÙüƒÕ$ MÓ B¡~çÎßåçç\n¯Ð4 !Ī]ב$‰`0ˆÝn—m6Û/ûûû?ïííµ®J€¯×Ëäää"’ÑÑQãÈ}>~¿Y–QU‹ÅBrr2‹¥P1réÒ¥u« ®_¿NQQõõõÑàää$»ví¢¼¼œæææh\×u¶mÛFCCC´ƒ‹Å‚ÕjÅb±d˜L¦ÁöööGV\ 6püøñE§´Ûíttt°ÿ~†‡‡£ñ––ÒÒÒ€¹YˆD"ôôô000ÀØØ~¿Ÿ¤¤$‡Õjí¼zõª}Yš¦‰ùäóíB ( º®sáœNg4ÞÔÔÄÎ;‘$ £ÑHJJ V««ÕÊ}&Šbà^(„¢(£Ñø·X>C¢ Ä’Ï£¶¶–ÒÒR6n܈‚p8ÌÅ‹Ÿ12ҊѨ b³eòôÓ»yà,TMC×u„®Ï.…¹›M'@Çã¡¶¶–™™Š‹‹)//ÇçóqêÔ)²²²ˆD"TUUárý—K¥¨h–/¾0‰ü‡#L__#§OoÀé¬!?ÿ{Ñö¨ªYH |Àív· †§†‡‡ÈÈÈ 55•H$ÂÐÐccÃôõýžºº¸\¹8;زe;ƒ‘Þž¿rÓý1‡õræÌý{xñÅ:$I" ¤§§?š¨êQܼy³ÍëõŠDÏÄÄ„8|øg¢¡a­ñæ›9ÂãQôõ 10 ü~¿8xp³ñá‡vÑÒrVLMM‰ñññ+±|+6"ŸÏÇë¯ÿˆ²²·yùåITõÖ¯Ïà|c#­­—‡ÍfÃáØŒPYéç£þ€ªªƒÁ»±|q3 ˲X8x]]ç“Oj8zôŸØl ú']çÖ­q÷n‹ÃAZe%@€Û·»‘$¸rEa||!²,/NœH€®ë‹nÁ;ïü›í .—7v)¯¾:‘#%¤§ÿ˜­[Ëééé¡§ç3††NóÚkÿ © Þ{O#3smÔ®W% ¾þW|õÕÞ}7·Àd‚LJðx†èëû-á°Ì“Oβ{7:““ðÐCàóÉK ˆ›!„ðûýœ;w·{„´´ ÐÞžPPVä™gfQØ»„“IÁíþ>uuoÍÏR\   ³³“ÎÎNÜŸc³A~>44À¾}03³´ÆF¨®†Ü\ðxì¬[÷sNœ8ÉdŠ3µ%hšFII ÇŽ£JIãÊåïpë–™ìl¸qã»ìØ‘ÅÙ³‹÷ƒsÄŸ~ ›6AW×zž{îûöÕÄå^VÀ\ÝÝÝdß óAe5[¶ü†®®‡ÉË+ 3ó~Z[¡ª ¼^„={@–Án—èíÍãÈ‘)..‰»Êĸ ,aÅ>ŸÐêtbº|gu5[·þšš_ ª#<þ8„BsÄÂø¸™Hä)Nž| £Ñ˜°Ü‰bq$I¬¹vW®]£âèQÊߟT‡éÎAúUM{˜¼<7ééa’’ ¿-/ñüó¯,I4Ÿ{Yš¦át:ùÉo¨¨@X­LÏ}à|v6†éiÏ>Ëÿ|ŽîîFt=‰šš“<öØæ%‰æ^VÀ|¿Âyy˜Ûژݾ}îƒ,sï…oß&¹¥…ê}”ÕŸÇd6“ššº,ù|îXÄ ¡®ëBA°°!IØ].ä©©¨0Íá`zï^‚O™„ôôðÑQÖ¢"aIww>ÇuWW±ˆ˜˜2°Y´¨d^懵pž±»?|­t ™S‡¿M ˆÜ¬Ùñõ˜ÕPÒÐÀa‘ ‹+*¢§•s6¦œÄØ$$AŠ©ÌTÔÔP’XDÖ¾¹ßnrXd‚¼ ‚‚K¹‡FC¸Å}Ù“E x€øû÷qÚ÷~mÂçJU ß¯XµOÂÁúÌj˜€ë‰6´P­r™»‹]:Å`!ö7o°(DwØ?µ\L¬j½P$íÐïûû8‚zå¬Ä„Û~v¹%vÏâ àÒ\\\³ùVTË4~t0§¢RQQ•êÖÑ?<<yß‹—ünÏ6Ž—µ;bÌÈMÚQ5|ÝÖ¿.¹»Ø>7w§šÌˆèp  é?róðØws” w÷ô¨5»X¾¼b×þ¾rŒ„u-Ó•B­ Ï^°À+ÈáLÙ v=rlÛ' e‚sÈR,®=Aycœ(ìÿ@,[¨VýµC 8øë=[ª744$¯¢ÂQ¥^ÆG*êÛ´ÿx#v°X·Oƒ¼ÄˆY@Œ&~¤\àIq^O®šGÊÙ{n‰üvAû úÌ4Ѷ­¤¢Ò˜ùä’4:êè3kþ×{‡á-vÞ‹Ç€‹‡g m@4äB…3CO{rwB‚§/—o·}EÍŠ;‰\ÚqŽU^}jÐÓ(×Âxzz2ÑýñM¶p1àl£‹ƒˆM¯h›]ß ãµ”3*¬@y'ÈUÊág°œ 33Ê`b: Pþ÷ôä×IÓ„»½½ÛÏkò8]+ifÇÁRÎC…Q+©Åµw' ]"ô,„|õ‰DøòqM(·Aí?­JÔ¯ï‘ÂL¿üþû/YAAá4‰4ˆˆ‚¯Qà <èŽÃ{³„¤!sŠ?ûK‚E;¹ €ÉÁä›Å÷›,óÕ†ÜnåÍFCw÷¸žîÓRºÎZV0­° ËçþS+Ó0&ötZ½Ø‰e쉂½Œ§„Ý7 ™/ìòŒ+Fºõ³€€&ZG݇P03 ˜æzYG®«ô$u¯ÑTÄk”¦f¼1C࣒3µÝãÌEíp­r‚ÝáÔí蘔¤d˜»U¯ªF,ÿ¨ü“ˆÞ\§'{qð1j‡®'šBFj‘ÑÑCrs)tÒbAÙãKáÑk•Q2ÉìR¹Ÿœ?_$‡ ’ ™Ü<´¦G™špeÙ/GÏàƒ¦ªªØ¬„ѦŸÁÃ(zÚ˜?ƒÇ©¦„®¸å¶åÃxêã:-ñör×Õ¬rY0%Sû^uÉIIiíÏO÷$)q@&¨­¤1»y"þ•Ó,Dz——×›ñ÷÷¶(Në…¾w+·&0×ÔԔĊöç{4&ü>&À©}2ý±“|ühn>·Š”Ôï_ò%ªÔÎZ5ºz¡‘–Ý49©Ê+• E%¸îïïs5tº6ºFÀ/†IÀ®Z\\\; ´¸d°à.B³q:(ï·î‰›\SCèLjt°IIÑ+µÐÀìûwwG[Ùw[ŒÚGð9õèÈ.[ð3jsssí2‹F)LðóŸ§*ä·+9">g÷§Û£™"cxUNaFUhÅ–ίeJ­ Éõ"”F»øI-—L¤ÿ¯d¥V·Èïý}J*ªÍP©êî Y߬Ùô}ª— Ǭ&ë­?NÊnO;ž©ÙÙ1[ŸãZL4‡ ¯X#9ÍûÑÝUûXQ´äÖ!ëý°‹{ºí9á255mr?&î òˆ:>!kÓprp`88>.ûøï/..u3¢‡pÇFDj"Kîî°•0ª¢Ÿó%+k¹Ÿp*V½?3·NÏO~Æäàuõ—}(±È%^û8U “ñÆ6M‰þ)öõ[ÎO“”Êœ™oï\GÊO˜³ÏàÄ}}}ó»OÑ·6Þž4>ÊL5#­4Àßæ¢-Ë«w­¯S€‚ÛEKïðüôضToÝ£ÉpáE—GL«Û/”‹ßŠæhïtìxü&¿‰KfPù)ÒžûÖ‘üãxöï|r¸ÛuóÍîPL²m’‡;÷5r(€ãÎÎ þœÊÖzÑ2.ª‡‚Œ ›³y½õϱªªø ™ `¼Î Ť5(˜ßAÛoÇé`’*<.ùÖ$ƒÁf" a€ˆ]ÿDð>[ qã3À×70pøc{‹®¹ÀP¤xpŽ4Jæ¼ÜŸð¸åo?ã÷Æ0³ßÁBðÔ ,œgfR‚Y겟—j•Ï9,µx8Šá#w¨0Cþ|CЈØ7æØÎךœá¸¸¸0O'MÛ‰T9Ñ7Xá`¶ „ðÕ_»ÆJ~² 8Í„h•kVN}*ð5DaGaÄe²Ó?ýS“S KòiªÁæWEdL zïÀÀöt±’ ùM–ØÂ·EÅ(4Bù Ô`Ó7p»ð™È¶YɈ”äÊ)4Xgù}f ,LÏÌÌ‘Ä~ü ˜{8&Ù@~._›/ªÎ¨šÄaÁˆ“eoÖoÏ(ÚVéPƲÞôFâá¼zeÝ2˜ôǼÒùéÆôM%רÔEÐÿÁSÁm¦¿ãùéðêt°¶‚ ‚tÓ|`~a {Ø•Ùü^²N` lPPP—/ÿÍÙ4ˆõöõ}þ=[6#z›{ö› fT%^§ãšp¶X9¨ô)LÎv’U¼[l¡’’’ÕN›’Gkm¯AÁL_YAï1¹:˜"r·ËßoöþËL.æomHPmÖ‡:ĦWÉ~E|ž¬¿†k?Ý•ùœýv̦A²|NpEEnÔC¥ŠYÚ_,8(ȤAï¯wÛÓþj‹GcH<~!ýfL¿Á&ôp¾ŠFPd#YP«£EÑf+õ‰@%æw2Iüx<@êV˲nZxA"«2º ^YÂ}ûé~ügÖë³>ètbX©^‡“™€—d?æƒJÌéWMÊ¢ Ú* ÏyHb—ÍÍÌþt‡§ÀÌðau!aaÝŸx½[^‡NƒöM¾^ƒ æ±#/I4~uR-ð«R?<%_B¬Àk~7†áqûhí~yllžWFçÕõÙlvG]Œã"ƒ­ƒi»fˆ!JùÃbŒóŒ;üÏnn<þd€u˜è§È›7s_Ù¤ŒÈÓØôé­)Ý¡P(© ’ÕØ9‚ «<:;ºª DðþjûäÃê¢ù­"åsc$ÝËóUƪQZðƘ(Ÿ«™55åvË?ÞÕÈUÍ›ƒDŠIÆAˆ~Òö€¯ñíšþíÆ~³Š§òÙ*~Óxyb ½‡7""b!#WƒöY‰9YMUqXÔrƒŠyÐA¡K«¿9]§ `ÖH0Ä 繿;í“ò5;_sò Ë"DÏEÙΧbaAÓÕÕ“yÿSyq±:cìGv ëoN»€ 6T°.ÈCáÄËç$Êg$KæÀè6á/™ïùÄÙm2Ùö·…;ì~ܦDð+&X&ªþΟFƒU@94È ¾ªJ ^‡›(¹Qÿ¡  ð<µæ½«Ô2cÈŽîØ`6›Û«ÌøÎè«KTjQ10 5:¬J‚Wãââj:>¼h7n,1Ø=¬w¹¨»f3Mè YYYJ ëñÏ5;ºµa½Ÿx»Å(ÈÓÓKµŸšÀ „@0™àü_ß<º ’bÑ.'%#óÆ~ù‡mþd™Ä¾¬)ËÉp:‡ãˆµ±Á Èãºç6Æò¬!jcümÙÄ5-Wñå ª8\Ãz¬¬¹þN±™†ª-oõÕG{ÉÑ; âå™\SâMiß@kJ~LFUt­_QWWnEÅßMOÇ8,ONOãó:)á¨))aJ4ó¸,ümFl>O9"V‚îGžˆ¨PкÃ'àÆÔnôInó¹YZýUk©ôÍ?Ï”¨Ð01)L‹~%^ö‘Ó6º@Âû×Í 4èa”Ï¡6,Ace¥Â0acÜ •«Ö©0Y b°ïJ¦HbÝ7ÞɹÎ>P¨Yuªµô¿áf…è~|±y WÓ`&xxˆAÆÄ”51É{'1ćܫ¨` ~_¢ßá~¼´‡„9Ôý?é•Z[ÄïyFùÝ¨ÍÆ£¥Îõl¼öÓµ‚~¹Våd©Mºrf“< û[š¼-¯…7z•žÑŠ©z¿Òꃅk^ Óu¶¥×ACºð¼ÓJJ›í×{˜+|>Õè$&]—•YŸ]Þƒ”†îÝf¡ÓyÚ1õIZKKk´4¾&¼7ÉâTŠâ &C}/ÇÞº7‚µ³ªíZ¯ÆðÌÇ…f×’¢¯ÏWHQäЈG³.",nt8Ð[ ÃÏØ>¸×-¢Ç›´ØïRN¤ÝüÏÀ¼]Tuã-6#ôG'ƒÉîø{AçϨL=VB‹©…„^ËãèUÊþ¢èäD¿ò©­«“£§§ïo´_vºù Q‰6´Úz†ž”ß©óä‡Fßvc¦Ör„6ÚÿÏ\yøûå%Q!’J¦” -Jf‚¡þrõDgÑgRÂTÅ‹+¢˜G¯ ‰=9¢(„ŽNTì/Ï?JÄLð¤Ò’þ"³."Ž |€1;8'¼bµ £ÅMÕ€f|F[Z»¹¹me9¶g~ÊLO¹ucü«P†àçÿV5˵ú"ph¢Žÿæòv3œ‚öؼ?Æyð7C? :RR­ÜÞ’mÜ9œdÙýP"ö~#þÆ^%™DZÅomFÌx£kÙá5¦Î\Y î:Br!ý¾Úâ Ø3Z/ž— è š €¥õmtÓ™6ú>ݯ?Î<ƒ\˜N«^©UIòÓãôäªù6Ç¿ÙZ\ œÒ‡®ß,ðMËéï‰ØùPżdÑ â&‡5Å›}ªf_Wcá“ý}ô•ëY ÝÒËFÝJ­ÒYÊŠÀêå‡VãIJÿ?Ñõ{cÎ'"ÔŽ[”óº2>#Ì7Z¼X‹Šãí¼{ÜãûXÙÂ;Dq¤5ë¶o ¼Qëÿ°K$#yccr}´Ø·þùð•€€î$! I±ÉM´f#Ú ÝÊ`ð¤\Z,~:?ÄuñùXT‘ù$ö±þ@«•ð! è¹Ï½HÏ¿9Øü™5c6ØTè°ËÐ)"Ù d»&˜fühMV¥(ÅÆ™Ç@ªýþ<ÿ‰W§Æ  ]‰E0’Α^RÄýÙå¥ëïìkå€ö¼h©Ð»4‘±Šôv-@ü¶w>7µ ¸•i€3 y‚Ôp›ØÍg~¦¿¨sè(Õ•3x“¼¹ß =°CP¹œÈÏh€D©¤9Èð.W$kÔll àHji¥­ú}SÎ ¢÷ß֘à –}´¥Yš0L2››Ÿq𺋗Á. ijýûy3bN>ºÎAdÿ®Çnêcñ«ôúàr‘N§e»gUD›“ßG<ìLÒÿtÓÄкðIÇ89IbAîÇ~f_™Éý 㲎˜Í–ªý@t©·ž‘å~62ðÙɓ–ü{þ;oìÞ¸»··µŸ@˜ýÜ0oÜe’`Ü¡ŠÌ¨ ¿2ÓѹcÕu‘  ®-úJì‡è?¤4‰ÈŒ‹Mé;a ûã½=¤Ô²\QÌ|4x½ŽªZ6gÀ*nŠ:ËzWîGœowÓªÔ‹Qµ*t65Þ «¸-p‘ ¹›ópsÓ¢H±þ 9sR7Ѧ¬geÁv‚LÆ{!cÓ3_8ô€ ã3ñÝG‚Ûã[ Ôœ'a„¦fÿ“d{´y•5«Z} ÷Žœ2*ÊÖl—²c§Y=5^Àí»ýáB©eù¯·È¯ Ý`§Lª¢Òµ¼òóó_ô¤ÑáT–ðˆä—90ûeþþ™S+”ÅÐÿ.!ºFñýÝŽÕ-³¸,r19Â^ >¥Î4z;B꺕æÓ(Üþ¼x»Ñp@U½Y(&tý÷7çO÷§=v|Ë«VãÙŸÀ~G¹þïÖëlÚzÕQï6rÐØÉ®þü¬Ve$ÒzÖVª]•cO¢î •/¾q¹Ü«[ Þ šÙáEïVDp ÈïZÏj„z®‡Ï»æÕ'§§‡SI…áÿü°Ñè¹ÿÕC±Z{ø…JTrûÏ”ØÛC ÏÍP¢I°ÖÛÎc‚76BÄ^³èˆ%ðº3e£sÆø½­“"ðã[ÆâzA¨¢w[;gx©6>¼‹N†\ß Ð-­>=\NÝûvT%&&†„ÀÓÒÒšìf–j”á‚%8âýWÁ|0s'mÔ댈B1éÆjÇP¹¹ßeW”£¦çøŒ€´< ­ïjpùƒkŸŒZ—(Øý: 6©Úýáßµ4¿«#”j¢yþaÊûø.ÏL†’ .((ä^µs{¡Êç¦ß{ý–õvh]RV†ïd­-º´”QZF†Š•$h¹*£6ÐÓÎ@å²áÆÅsu0D ¾‘ e?MÂr_«iA<¿iÇ@c Z=q¶ûcëZ ‹ÕMï.vKÚ¼Q®£°ñð‚­g¾4çaµ>pOÖÒM œmEK/ˆÈ¼ÇtÚ„:í¡{‘‰ f ë6©{^àhUê…‚³9ÄÛ æÑdG@|dC<™súbq„{{6·KÀ OÎ_ªkÍ„ã$‰Ð•{\ÐáL‰çeg“¶ü½ïÁö¦ Äê.dpl@s¼e¢½7£"ÆÆ»ÀÀɉ­”ÎÞ,2Q«xr‘³ëeÇ–•«q“é"…ÛãÆõ£<\hë“àdåë³?åâ\ˆ4’UH$oé9âF•AÇ[m üP‚6möôïÃ÷ßï’ >XPã)&„/cœJ$Çž»gƒ³'îYÍðGß;µp†¶0·Ú!0ÒÓ‚^1öqì VD›šQ®]U MH~ÜÖè©b%¢ø¯/óMü¾·ÕãHا=`Ðl]9{yye€Îyo"×у¾@ÆdG>/  ³O~ÃlsœŒ’q¡l¡‰ÑN‚MP|nÏ·Õ ªÖ»S…à OgX‚ß ÄaIEøkÙÌo§½ÑW€¸…EµEü/F8ƒ&'™ [çJ³«e¨7.¿g‚°u8Ƈ´38ñÝáNŸSH‹;ŽeµÊ«¨AÐO׸î¿IPy»AüAýEÅYÐM‹MÄÌĨC½~²!ŠMˆ»ÙqkK&pqö»,¾Í9mãÔ¢ˆ0ï¿°ƒO&ë¢Üã7ÃéH²±ÔR!Jé0.s ÙL†u„š°R¯¡û`ªð|£ n¹Þ0• UÕ=vôTp)©+9!ç, DY ŽŽö‚&¶Æëòã_@€É8©Ù‰ÏV{«^“'Îí>ÅÆµýÆ“ßÖŠ’ ‘ÑŒ %"ÎÎßW ®9Qá{Öj'ª³»ýÎáÔηëØhñs6}{cY8¯_G3}øf2˜@E;«ãpÀ‡µýÐ'æ¾T e šÄ8ÀønÐ*ÅÆV_t’=G;r….\Ä£Eœ7D.@A±XpºfÍ\sMÍ£Ìó÷3 ”–…r´I§„òÀ#ÁáÑ…rp¯ßâ†RÙ¦æäÄ•}(1[þaÿ2º9~׺ S»/š—\.¥[FâÈânȪà õÖxK ¶ 8þ $\pünƒ^›ÃP>GÄWáT¸¥¸§{ã­bFg=§[ÎyÁÏÔû§kd ÕÁA§A2N'ʳŠ^’„¬ïÂÎ[ð`sVY^5‡Nv#&Ä3 _†)äèÈ.æõ[ÌBÙØ$e­ ùÖý™¸qVî‡C“ ‹<½7cosý© Å“’¥Zá±÷×Ï6a1÷ªn‚f8m¨1dhÛŽ.®®\æýèW‡óX õ1ê4mÿÄN=Ç7ºÖ¿óâÏ‚ªGyn"2*pß¾}3»¿>=Ùf­Ôo¼þ¤úÞÀÀ ±á)»’$Ü­ùï†= TRN›ÝCO•úpbOÈÿíܾùn„ zCº/_mâéÉÿg¾*þËÛ°&•4sKJJæM}Â&&Žˆ‰AßÙÝ¥9áùáëEé@0ؽ‰†¼~¤“S¼Ê¨·¾Êpùü´ëüþÔÂ}{–é÷Ð ›}yó"÷Ü»£ÞVĸ(ƒ}ÆŒ–$ª8_lm¿ÄjNÿO‹ˆ#Ë0È7e*ÉäŽéòÓ3*¢öÇgÍׂŸÿäI…c‚ÑÍÑÁãÙ½ûÄÀÀ°=˜H#¯¬ÜÛîwow¹ãR:×9™ßy´8.Góe¬³Õ«uXeÊJ ôß¿§‹ÁT@‚<ªeOF#|5%VøHãß—ªšÌ ÍC‡–¤ð̇;{{fKõÖ/UÀBÿî¢s©ÆbfÙìw˜öàξóC%W´ôxØ|AtNQŸ@¹ß¼Ø©½ ‡SJ‡Šø<}(µû²h‡£÷l€@›â0BÇG t³Ã €§ýúe–qhž(@±fËÁJs]ÅY£‚ƒ‹\èºUšäþøE÷úÏ϶G 5pÚß º®~ÏDkÞB6ÊJrºgË>8ÿž¦ëíï/0ˆKò;Y¥‘ â2‡­ì¯7qéÚžýÒïvO³<ï#26ë|W[¡y@ÙFG:[P2.—™¹ùT»ŸOdÙ(§4%.^àšdBÚÞ‚ç­9l± Ž+M\[[[ÕÏþn`Çõ~HáBëéâ?J¢ë6O®LAß«ÁfW$DÜçþ£Åiâªö¨¹~×™½1éJî6Uë×gZ_»U•ã{55%/..8í—xÑIù±ãe\óó;ØÓ2Ê–¸ù21‰ÄÑ¢&ÄO}ê=Z¬s~¸u^,©zûiõçÿÇ¿ÚËê&¢áXpU­Ô3j„þ´ @žM]4š­Œ-Ï{ÅÜÛn×Åuv‡K~߉Äk&¾ yL¶ùxøÞ¬z$e•8›oô¢ÔºL¨qób’ Në‹þ=œ1„ËzšV?N´êìf½óßß ú0SN§ ñlÁÏÃ{ [·ÛX£‘ žûd¸Â´ZÐ盀çð¦&þå†ãG}xÅÎÄ«ƒµ Ð,ÖyœÕÛ/ÄS¤Û½ùÒÛ;ÿßîí+áüˆ‡ìòÁjËÛ8rfCEýii™DÌö§ŸG{`•Úí1¿S^Þc7‘Ó/Ûj«?¶Ûóeî³'|T– º?[¯€'ÿ,b:YTÂHþãKWÃ!¢wÒLQ¦¿îa7Rþ5#Ô“-`¡I–›/n;vm¸ d,Š$ºžÀH:‘àÄ€¥ áü{yy@ôq¶aäæHá›Ø]Qq±éÎ`â2‘æßbí¿'TòzÄ@Ó¹³Öæs°Xǰ7þ•Eay®šÊËûæøðÁk"›ê¢¯D»Êt'¡ïžÆ²†ÄŸJr#h Ú¨±L‰ÑYt ®û¸0ôײZ$ F¦±êª—â%¯®9IDª€»Ïy£"-+»5oj÷š/†µ×ëŸõü8[Ÿíl)ίJý}‘Ó+÷Ì­¹ÿ³ PnG©í‘/3#WÀ‰š ­‡óvýù)rÂæØÛõ”©·$Ïñ­1²óþó«-C[d˜mFñ ¼Šä·Ø-Ën¥h§ÕûÝv‹uùÇ+øÔ;"|5¿/ÄxßóæpŸiª¾¼ª­«ãò81ÔEo<®"ŸíR>!0¾‡¤È‹úFˆúýÛ Ög†cWþéöøíEž[xU¡?¹˜¿0(¶§k †TW%‡v&øûÅ”œ…5·œ‘¹ÿí&Rd'ý‘ËMÝô‰k#¬q¤V§þŽ÷õQ¤ÏÍ Êgú矟ÇÌG73n+×$K\}ˆB‡¤í_)¹Æ)¦ÅF8Ýã>==ᆛ¸Õî£aÒ‹â‰f½u$TFq Øõ÷éŠ%`Dò ]ËŽ±™7§æ¶Ñ„´Ì o4JåŠÒ–d„«•i”DSÉ¿# §ÿšn„ë/êºÓyˆ58OvF@——Q”Wœ9;«C&DØñpm¡?öÅ¢,KçBlï2Vz¾îÅVžÓm³÷«Pø÷ á`™ç‡àaß™ç>¢ÀÓŽeA³WÃé·‰>©±½\tv䌛ë0 h¢2]÷ÇAÁÀ¬í^/F«‰‹Vº…à÷”4Ñ<õÇ‘E¶¸Sqp`é³Ë–çQúê×Ñ/êÔÑ;ÿ#0¯äªü¤©bšK*QÁñáÃÓ“={®ö‹+$| È`æûöq ^'J«ôSCgº1³ FxH‚tÞŠß—¤$u»y½VÏ“Wl€A‹Ås ÷£< Wç'wÒ™Ù“’“reg"¶‹ÀîEH¢%–p©bþÛ®Z¥wbÏwXþOwVC?þÓæ©q-kR-ôå#2ðüûGS‡•0^êììœÁeŽxaAÞ ²s_†€kžõêRá|Jp®¬r‰ëz‰zÌ?uœI*Xx³Ë.ª Ç +ËÃñRbÃ=Ý郳·÷O»k&çmÄþx ¯ˆðð&£\òŠŠ’‡¸ØO` £Ö¢‹=·ºZOîbïc²Ú«"lHðÙ-ÀÀ€Øž{Ư/ŸëýÝf…54e<Q²Ôè°ú§ÆÕÊÒrsÕc=ŸÚzºåe3Hòôè‹%N‡JqDò·>°NôÉ(æý1]  ¡[ŒaѤ¶nüöþó³õó‚»íü÷}ê•W:i/“u‰))¶<$±`U :ÞùŸòªŸ~Vÿ¨ß'-5”ûì'í½g|¹>úž(¯j»DᇌlR>É#¡b2}7Ýõ|•ñ8z+¢§ q ôɽæý¿GÅ̬X-XE{û»$ž †Æg¿"´/&hœ3:Ÿ‡Ú‰ñÃn1D„Mй§Fáç¥ q DàtOäúÿ+£Ià±[ªG¹Üƒ©<üK,ìɉIÊc_±ƒÿêÕ« n˨<û«Ohƒ¦Ü‰ä‹Éþ ((ü®pdãH#•ýÐ[íX‡Z·Çh…ÌÂ0hfÎH=NVºÿ½F𺠥ŸQQÁ ’ššˆpAÁÁ"³úû |>Û¶ºt°@)üÖöG©ŠÇ•„¢ÔE¬Œ—åÃlç´] rÝ ¹ID‰—м}“ûúí®!ÿðãý —ÝçJG˜2ffÔk¸Ú‹Œí÷'B G]£™'•ÊÊ´ûŒ˜)î¹,²[h‹û±$hK@î@[z…x{k^{6Ç¢+êWÔ Ï ’ÃZ>ºÃ™5öÒÜÜÜÕ.»ŠvëídÌŒa9‚ý`};Ë?P[oæ)£8`~똴A!QÖ)LN.å(®“Á5öbÓØ ™k;qÙÌ•§§ îÓ*¥'m—kY%¯+‰¤vPçÙ¯@I£¢¤0IÅ鬆1ˆà@óÜïsÚÆ0˜§ÑÀ|×è¤iâ¸F·ðLðãþíkàwá¾T7±Ë|Bqœ•v¿×†?Ýj,ÃvgZ†êYº±SSqÒÎ'ýJ-ßÛÍð—ðS¦O>r{º¥) äã*ÔŽE»þ¡d.·ÕÀ3$D¨GRwþw§]Tý³yãîëý\¢=¤—äQEö¹>’]Œå»§s…¤±?sm³o=/¸;Øþ« ý|ø+ßr$ÿóŸ” ÿÇÍG¼Wøû¹,U­A®{È)ΪØw¢ß÷ÔšYq‰ä*Vü’Ôá4¾OwûļŸŠ0ÁÞâo1 \¶>jU¬û(®Ž‹¢±åúïÊš×q^9!äÚ;¤:óá¦O ÇEI^§3jUê ¬U°r MWQèò•Èb˜tÖCÕÓˆšõ‹-Ý–éb­%nr. Û±¢¡7zUÎÃ|ÝbÌÝå~!xüíÃåÄùÙ¦TÕBÕ„,èÔ9}®í†$ ûc~Qh§}È’KÙN¶c }¼¿ÿäßÇÐ)Ç“ŠúüÜ]c>@»¼æ…Äï9Ù,èÛ.. ?Dü0%7Ý –—)•R½æ0L²(PㇾÜвŽlf‰XÔ—ÿ?² ЛËCÓˆ‰’4€­>þ᥋¯0ƒ_{c |{[¸þt+û¾øBhªI:•Z¬ú?Ðë>Ž%­l@ E†ÏOtk•¸Råt^Wë¾É³û 'ò¦1šåZ¦sÿi–ª£z_€¸-˜~DŽò448؇Tí¸.j·X‹ðÖq­¾Åñx©3Š€¶¥©®¨ÒžÌÕA,&–çã‘×dSȬpp÷BP¼ ë%~cƒ}‰·¿¹âZd÷®ø"»¬$¦î¿‡ ÄG±¯§ýÖÛcû¢‰ÌÏ·úTËçJõÙ_<,"IÞDZ//–Yû{LBö›àíý= š€€€¼’RX0…[øoÁ¿:¼„"ÚÏ–J„}Î8@K±FpÚÄñ=ëBj xn·X:M°©É9Uýgž„´Î¯J¸4ÖD=xRÂh«‰œ>IÏ{°Äð•þÌR9?ž¶êéò¦!²QêmMo28“ÿ°ÙmKý²&[ƒšÇÿŽôn7ëÛ 8&ð§¡#ªÿy¼‰>¾ |/Gý' “ŒZ«+­(ÊÃõê@¢õÌ~ù'ùÂåDíc‹‡R#Bâ-†ö7çT¾8¤>fØÖÖT¡±ˆ7/Xè–‡¿ 2rt()¥%”õøÝË·>8v@ÈåY€’O³È>-î;U-ï›Ú|" ˜Âž×ºyúo¹O8S˜œ¶zQÐ)DI=N×Rí|Ù’*);ÑÈ.qxI¨óÀê9Aw^”+gЊüp‰¥+áqJ¾˜–©”øŸ†ôBŒl­:uP«Í<}—Ðß?^ï‰Ç>ÖâûŒ“ZG:Å"~ZÏñü§äêÛÁ?~‰õ÷#2Ñ8«AÅvm#¦#é‚1²IvE xŽ7!N—ô™•‰,(ZßI'[yφp„•˜?æÏË)Ä”¿l²5ø)Í}CLe<V`÷îY`Óqvë–Màz‹%ü »Œ÷9Ð ö;žG—ðöDÈì‹ÃâÖWQµl¡¬Š‘ƒUý/ÝúåF~©ÊçYé¼4Áðè‘æÝ¼$ÅŸ†ó®|ñˆˆ¹ ž˜¬ïW[vÂþLÛY„žk>=$kè×ËÛ|Ó.úb0„î»ÉdB'‡Š†Ö†ñÚ„Qfn¤ŠŒAgšë÷oP(ßýúgža&¨¢äœÔ`«°‘d#Ù&}k8¤érA«KAIŽø«Ê˜ÄÏâÈázèF©~úNB²ëGô˜×rÜ£Q.ê­âÞ‚™k¯yå¿ÔÌ›P¦éǓˡ}ëŒ#£-5嘮µò©Q¦Þ×6΂ýpÁE9$f”•0ìmHÔþ;ª›(±LIÚœe*(š¯JwˆŽ t~úÞëæj¹vòååÔo·Û‡U5žç[ê–×—jÙÐ m¿W#89þ$Äo¢àÛ#üDèñ†®—+^E²•¤ ³*…™²é§ÿ±YË®ÀAÆøü´òÖ!¡DV;,,¬°ÐMv<ãv )áö1tysI°Ä®àÝD«‰¤,磅icþîea_ù‚ëþX8—å‡ÇH¬ý†y¥.°gN)ŸÞÚM ¼ÌkH3A0û"Ì Âùd3ÓÓN×Gº àŠy>Ür¹¸ºâàâ1äxBcï¸ÉŠl4Í´È$^ö}Üò[kNf%Ò2cv2f`ŠDêU±‚½9œ Þº¥­˜Ü»‹—ýóbQžŸn:& ?0Së¾,£}YÜéáÖ¹·¯Ït½Ýïö°ªã詽G¼Ðùéð¿9 ~Õ¾L‚&æÇŸóÌ帓«í2ïÿ0Yô[ž›%IØgëwÍÿl°Ýlêüönz´1Ö†þ,ÇößÞ~ع@<…X?9Ø¡ÏOËùæ:i©•†§Œ»Ã8$\¹©uW·ËI´WåUƒþøóM¹þ>×òHxsÿ}ÿza‰ËÅøßzÔËêæîpj©aË[†kS_uÈè—7h‡»]}è=ØW<@ǃ$açYs@®²ŠŒžmž^îi …Jˆ±C³ìñRÑRU¹“‚¾œ¸Ñ Dj‹!ܪÔ7—|³(ÐÀ@‹¿&þºffòÔhÍÖøLy2üþj–Ùò=V6à=e“š]œ®²àû‡™rÚ̾,œ¤ên"ùÎBUQ'D•p{ðâ¹sG•M.,p .:žqBÅ]¶ÕŠ ìÖ±bŠyV1_ù‹çÈä xDD³® Ïc0,„œ™‚ô3Π +82W|´ª#éw2ƒÒ#¢åW6ýATQP*6\5o'r.ïÍ6«4Ë Ý—dBÅ(ÀZkŒù ˆ EžÖBG˜ákº\Ü»¬áõ#KŒä2„ÜÒÔ+ï¤ÿÊå°æk¡º•½+Ï¿¬{?–¼ÿú²`S’ãýŸܸïorö7R°— Ÿ¯k]Jm! u[po‚õ0CȃÝ!}2I´2¶ŸCóíù«P÷ñþD2Pp³×þ´Ô `g "¶üßU×ý¢efmzE ƒÚQµÚÚˆèÃû²9å/¼(4rqðR (g^ªß ”³ø0Ú¼ÿâVÌ`¢£Kƒ‰>õÝPèêÏZÀÓƒ ØÍ@Dþ^ñ=™Ø{ŰË\iV%åÃù¸6rÅ<)TÓc½Zx!¥Ÿ•^®¸*›ŠÒâA¡|öIi·` %m¼Öo½šVúþµ)¥0ƒ Æâö{AAAá`¦$~•ãeé¬þά͛ÞöµB¹è ¥*õĆÙ„Ò7\' ÒŽíLŠLöEÅ8rëyê›7—4Ö­ûòvýæÔÁñ¨¦r?]{Úí«y¹»uÿ{6I2ˆz•‘H½ÍêÖ_ƒšš^)"›?L’RCsä";®˜vkÊaè,Zžô7ÙÓüÎAüÿvþ;ë5~QùœçèGܨ6óp^!g0/kì—ù¤¥¥›Ü/¸ƒT˜a‘x f ›{»OMCs^  8íë3Žyš^a„ž_·ëþ&&‹1‰å嫾8ë#J;Ìç©è¤?)hÙ0têdÿ›³áùíeˤPRúV2êF$CŽÓ¿Œ’\’SèÒ†î_Ýö_:%yw±Èç§,n„xZºÄßU®E L¾‘HX°yc–ÛÞœÛ4°g(ÿ'«uÛyyCñs\íÛ]"êYR’XD6½zñ›“Õ©R5š–ñ‘™’H<ç‹­×_‚9ô£•¹PB úÙoUéqÎvèà`µqýΚH­äx–Œ»!õS¤LtÑò Ó`Wb²” ó Û&™€ mAA6uúOÝ.Fû£ ðtÖ/Ö•ñù½ßû>J€½L×>" ïQWÇõþû‡N ,šl¡yæ µct4(ë-'gõ ,Å*—-#{t”vÆÒ` 7 à÷S‹{"þa}Ë ó^Œ[–‚?¹(mG%ÿ¢¢¸8Æaü²Ì'yl3H)#Y¦ €†¤– ÑÆÆŠ¢cAgñúe©i³;T§ÍûÍQª5¬™ß¶ÍzÏ‚;²á£Ïnnˆn!ü«?;¦.d”Ô? øþê3®§ùÊX$´eΉ-³«()ð¤òÜgzŸ¬"I&äžçº?þ=7›:Ú _Ü9Cþüü\§Ñáë±+Ðý«úJ/·ƒI J§i­¾·`$YDîw‘ýx¿º­ŽÎLåê ò]_ @»~ç¸q7:TPšÔ¹O³~gGA7œ¢h¹)ˆôóáO”Óx1Åa!·XF±ð¶Mku·ê’ª8jçÌJ«žù@\Ãã‚?pTì;kô>–ßH3dêSo ^µÇ©ÑbÝ|Ur™ »;ìyR49"ÍÒÂìÆív>§û œ{e%GDlCãìŒz.Âë¿©‚Hµ«[>$Ó°D3¦I…‡Û4€¸s8•G‡pþ]:v±:$C™¾õfÍG~{lùì¦VXø¸a¹›ÝJ!«¸€j^«pÐþ˜Æp‹3šx–«VŸ›“†¶*ƒÅ'ƒ©¤›µä\#!Ÿ4Q2Ñ•¶:,Š$Úl—ÍÖÂ&Ÿt~*C¼áaafÇK `_J–1÷UJ+îV Yã¿lŽ â«¹ËeàfŠåâÂÌÍ5%¾:Y} ÖŸÚ¸¡!‹á8ЉçmYaüý’áý¥Û…±×a³ºnÌšÔHK ‰î¾Z¸,ëy¾ÞÇòŠÔÖ£îÇI> ÷<øãN׬Õ6ºÈ}%«?#"#%U®¶}Tø%ÀÊ»†z÷c½Zµ5ƒ+¿«OÕ­Ö¢«¿gT÷‰¯HIc^ñ|4¹Ü«5×xzðôö¤÷…öªA‹;F2ƒJ˜€ØžN%ýš›ÜFTZ )Sïwc$ÁÏàeCÑÎiêm¾îíhµ]bR~!ûŒêÐÚñ¹ÜÍO:ž\¤,Z•zs‡L-Š>Ìœ˜};ràÝ¡c_­>G[«˜)Q)Ô®2ªXƒïT™ ¸éEøKðÀçø£¡8–"¾/»Èûò•éÉJó ~Ë1:bëÃÅÈËv‡•¦@#B((?Ø9¶n>üÕMÖ47/ä2¿d ÍûO%-7*¼ú‡T´,))Ÿ#ªæâTT’|ççÌF+/úlÀíŠ*›~J šh¬yûvM5䈩vººÏƒ•fž§ÄÈÉ2xXn΄z3÷ ¹bOW0ãzGGåªA›à ™ðÞX™ïÓÓ½£ïѼ¼¼Ó¿…Nñ ^ºg9oAÝHÈâÁJæ-ã­ŒÒÖöP²¡Cs-(·+?e’r‹JЖGRYÂ-GÒ^æˆN Å75!ŒÈ¨ /”‹O#ð°‘Šw÷ˆPÇüÓét£ACÞ¼u”¼¹?uø[l3÷_DTT÷šåÙÃ²æœ Õ-A„ÄòÊþ>2Jþw¡È³hµY©ý=Ð\μ’”“£B;të>FDG³üí®²À/V^ÑøÀï9¹¶e´¡9µãur9‘ü–™ ÖÓ´Øhü\®ä‡=“/…DKOo¶3˜(CHAiôètn†ðtÙ[¶³ò?ÙX¢Yy¾ë$*“EÑ °hP Ü­¢ì# º\Óš©goXt /»˜~¹]—SûÂñ"š[ÛÛ5 ·,?>>Nió§õ •àïþ]þIÀì±7áI+«œÉÀÅÅ厧ù‰·sFeé¶)À´ö¸m é6Bo4—~EÞo¶®4kW!ö"¦U ¬4»‚hsdÆÒõΙ4W xë¸ÖÛä¼:WŠ&öLØ*íS‘KqÁˆµyV¯_ë¦æÄ%üžùBTñþ«àÂû×{¹ fûd:?”¿M|˜­P¨L7ªÍ ‹FÛ?žîks2‚¥ÜëÕH &¿<¼÷p5£r°ÜXåC”牞« ,..‹ú6Q.Èúœ¶…“£Ã…í[Nxm"TS' ocÁç>ò9ÊÌ–™kôaÒÒÒæéò ”…ü±öÓ:>* £Ì†ö„+ÁÅÎÚ˜]´à£á³n¶hý#Ó«ÿø¢´ÚñO·ëPMþÌ–59m­¿<Þ1[öa³Ñ<„€†MF[’KÈ¡JÆJå…e^ ÒÛ+Ü3L÷6,¹÷˜ç/¶çЉ=øe ÌE€ôÝÅîj rßö­…b5Æk>Ç'#e°îÑ«äÄÈ Äå#ªÀt+ Ó…Þí½â*›)ÙÎ x L#J®z¼TI¡àš1H(Í7Ä3Ý`s]7/ó€·›á/ðÒÆ~»¬ÃZ« gÏX ZIa:Þå Iï]>ß÷Âã{ü'ä¡=OÏœb¸exzzzñøçÞíÓšI—åEj<´³¡N!EEE’Vy Œè@kaæ¶FäÞ˺ê‚&ÀèbÎîzÅ¿u<»™¯"ÑÕ‘x±/]³í"ÊÇË=¬ÚrÒ áâ½<7 FÍænºñººÉO¼Ä\fðz 6¡ \lad|úÅVÛYjý÷ë¾;×–ÏÔW¯tŽäRÑsævÐH™õE #áïn&£vât­,6Yƽ\¿.vÏÝxƒÒؤ&k-MzG<ÙâÉCŸÔBF³Ql›]í'ÁÞzMÝ"ƒ¶Ãg‹¨ÕÜ_Ëz}¼îw-Q©ER³L«¼/ ëlÞ8% Íi> £mŒðgÖùŠˆqÇ'Š}wØûupsœÌœ28(ϪW,ሌ/“O rž52àO· X\h)N}JàûˆÎ½î&1’Öåxù±e&è¿ b\B2ƤÏî>c¼lTàèxÀE î*kWGU]²/»„Hk º½«ÖVÎtï]móIt ÕQëÓ´aîþöNÊ3}rD!®õéßáËæ²—G!\ÕÕå‡1^‡|l¡×#Ñíf9‰z_Òs´XÇðäËüP£^Ô?De."8‚ûô]°Ùómg òŒ¥úD»yÃ&XT›7•Ý0~)¹˜û¿‡'xT7ñ2¼)jžépJé¸r9sÌŽýný2u:i9¹Bc1g „b^Õ?ø°/ÆÚQ¦ðL­±Í²ÂQÝÁ©,tuÕz8Õ¦pÌ6¡šåÌ·`å±[ýIð²ìZDªëÀ®[ÖhÊû¨mÃ|~ GžõÖ1ΰÅ=?Ñ@J±,o– ³:Ô{|°0¿l‹-óóY‰—[LLz*Sÿ€#hŽØÝâ&ц¡‰÷› P¶° 4Ê 9">Š?Ö[ä¦Ý"—{ÇÛŸïÍ{Â0ÜP™JÀ&!¨qrVgžÓ´+ÑÑR?Fݾœ1¾è'÷¿«®Õ ⇖¬w…ù¸p6W[”‚ò×䬿‰…oáÃýNŠ¢µá9 £:ߨ¶Îä›uÎ~Ã89^ Št›5j ;;Y5åwéU)¼Åý' >\¤ä°`•Keñä›^p”!@ ½ñÿ‡¢[ <ð߬†1w3D11E¡“½©Ç_Qøvï5mÀŽÚ“Øj_tél T»°å#Ò§Pü“º˜GÎnÀx†òédMæK >+}ÿïSênú´j6”Ñaúþºï«aKÂL^`Þס!‰… ÝÒ•Ê×W%*>e94u®VÂ_D '?ò»£ç£y—ÉáÓ©ïáÀŽÈí‰ýbÐ…?²>Yi‹$Õûo7^¡3Â=µu0"•_' ¡†öäZÓæWL5|¹L è´áõ6…žÈÈѨLõÛ„(£Sù`¬Pø£ LǼí.´žIÐoü~Ì“œ>ÉÑqeϨX0Ê Äe÷Ç:3ðÆËÅ#²q86tsˆ’„aÊÌ¥I¤'MoŠ¡ë´‘Õ}Dy€ôûÝ ‹È3ù#ê9£ÐM‚îùû¼1~²:øgVá‡FÜ¿'?ø*@E¿y6u=·z°pŽ9OÖ±þ¶ù4lïð~‚±M½ï7 äbŠana{%ï*z>ès¡ðp¿ê1iØ‘ ½ADÁq_¯]RÔ0Ï~{ºdi[FÝøžlGô&û8õf”G½¼[ ”ý@c»Šãº“a ï1|KqzsƒíöºcGèÞšüÔÏ1lïW¥d¼ZqQ§Ó-'z8Öò’NÉž^C„d©ákðë4%º<:JMi9ÿºànW˜>Õ!§|¢`a†Ir†‡oŸLy Ûà_•¼Oì%½¿êÔa4jGýÈÙz 8 ƒÖKøß´*MlVIš'Dö=ýL]\°ë½ß¥³2'ß´Zgyë|W8gÃOL€«ÃPñdúw@ˆ ´Ä{s"á± uKg—ð8§v#âô¹ü¦TŽ>6÷U›–ÅÕŠëÜä¿s™yð_óQzî*.tÄ‹œmd9 »°E™;if½ÏFëJ¨-âõvL¬paRÝV ½˜!øÕݾмûK•và(í2̱J}dÃ&ìühBª] ·Ã°Š82º!ѨKÓÛGÛç¨ûIˆ¢ÁôÛÜvó„÷pêù¨RÕ²4.$|Òq¥¼é ` ³…l¨ûß¿ó?ÇévzàGˆ‡›)¡iq6·ø|QñÃ>Q»0Œs>wõ³"êìÍ©TÀúUÇ3ævy´ÈìÂfNòâù1×Κ[qQç#ò†¾àaR[k"ì߇´Ña/õ!¢â=ƒNGž¢KëO$,Wixõp,9ïõö É”¤PLH”¸‚kaÊá~xÅ ¼…Œ,µ×/1™äƯʳå:$å÷qG\Êßg”Ò\s}0ˤ©ëôß2ߢJZß´ñ´Fêa|8üÅÙà€¡©Gòp}úœ#ÂIÎÐ -ÿžÉìéI\,Fãþé!çp¼Ô7iªhÌ „š` JÊNä ,â]¼Ý|¶ÜAñ3š(¿ÙïuÌ¢ÝrúbŒÐb‘¿ø.9ä±$TUzo8üá¢8$ `PÓXÙ-`'ôT±/ÐìT•1%)œ@-F/l¢öé4¿4¦H:#¯M¼ì¥z dÄW)¨¿ÏÆ„0¦p£køŠ¯d¹¤ÌâLyü(Õ?~ïØ^Ž•"BÕÃòQa’L=ªâù)¦øÛðøHÓœµd~Sú©­ D•Ñ’ø?àÿ6Æüÿ=Ñ$A’éãß§o„ÿ¯O?"wæk|ˆ”dŠUEûÚ/…æ©sjüO«2‚Ý´Ð9›¿½çbU_H˜i''A§&sêFºjT2¹³·d©kaiÙeÓÐmÓ€’à Dqt¹‡™æ©—¯„ääû'\µwY4ÐZÔßÍϪû;;`¶Qóð౎t›Õ,T€ƒ§¾Å_Ñ…Ú4 ÷P ½fNEñØ+ñœ·ÿ~c ä!âø·C'PauÀËÜ./º €á t;"&F c«š¥ÔC7ÐÄž‹‡FF‚û̇,‚ÀßûÌj0àfmÞ°¦á>2â7nœèŽ?h—Ï©–Ï Ž…êU""Â¥@ÄW8:÷ºôz¨ê¹‘ÍšRŠŸ‘ùËfY£órFÒ‘r­òü©Ovk~Π[ ‚RrbH¶Lpß̦YA¬Ðb{5Èù2(¹’•ZÁ–ºY—*…S OÌÖ|yE€ñH¦„2"`Þ 0ó‰÷€©v™ nalG`ØÉÆ‚‰¡WëUvHð?½ D¼anöOÛé»PËï„0:Áïu4™BÞò™y¨1¶Cß¶ tÎîð>xµvÐ ²¼ÓqEþ ß·ýÌUr"@%ÿª…ݵ߱Ïy£³p*Ž‹HƒNŠçOw•*éŒÿ~#ZjD¶Ì¬[J¼ bU—6°-™¯Êˆúÿû­Oቂ–øÖ?ïŸþRy/ý]Ò$èPK –nYTÍcbËËsvx.iconset/icon_16x16.pngUT [(b[(bux èè‰PNG  IHDRóÿa pHYsØØú\¦rtEXtSoftwarewww.inkscape.org›î<XIDAT8‘ßKSqÆ?çìœýÐ#¨9‡ I¤‚90ðʉƒÿW7Rt„7A ºÑUAdÀÀË„P$6ÐÖ‚!*Ø:l™ÎyŽç|O7ÍœóÂçê÷yŸçý!ñÅbqUQ”ç ˲jšfO­V+W*•[ÃÃÃÛgëR†ñÓ¶íþ@ @­VC’$ü~?¶mcY''' Û¶cCCCNê¤R©Èóóó!Èf³Äãq„$ 2™ årUUeÇqÞçr¹GMš¦9‘H×u ƒ â8©Ô2IŒýßx<TÕ+ù|¾x½O©“jµ*†®ëlnnR(üaeå!{èì”(^°oøˆÓÕÕw|zƒ|>ÿCUÕ€­­‡‡Ï`t4Ëþú:¡h”Ïßî`!ÆÇßm‡B¡Hà ¶m#„ •zM{{Œ©©ïôöꬭ½¥ ’Î-ÑÚºG:½Íññ±Õ´‚mÛR2¹ˆi&˜œ< ¯¯DOÏvw½˜¦E2) Þn|s”J%iwù…‚ÆÂBˆÅÅV¼^Èd,––ZèïÊììK\×u›&Ð4MÜh 1vóo¾~$^eg§Šee]czú9ÑèB„4ȮχÛ~…û¾«|qïòK_GU5b±Wtw‡©;ŽÓlÐÑÑáÜ›™Áik£enŽëù<îÖæØŠ¢4¤^8­Œ ìíáM§A’ÀïG–円º¶ÉÀu]„Xá0V8|VÍyœ¹á]×u¯×+5©/€eYúet—Â_v.µì(IEND®B`‚PK —nYTï+Zðþþsvx.iconset/icon_32x32@2x.pngUT ](b](bux èè‰PNG  IHDR@@ªiqÞ pHYsaa•ø¶tEXtSoftwarewww.inkscape.org›î<‹IDATxœí›{XTÕúÇ?{6{dðRô” –wOšžä¤æ•E³’ŽJò33’šçx’§ô—'MJ­ôxAó*F^ ò®@摞sRóŠh 8 :8 0{ïß›á"ƒ 8vê÷ô}žõ ¬ý®µÞõîµÞõ}ß5#P233ˆ¢8º.9WB–eA–eQ–eTU-1›Í‹ú÷ïP]=–P—À©S§Öµk×nœªº|ì ¨ªŠ (Š‚,ËØl6îܹ€»»;f³ÙzóæÍÍ×®]›6|øp³+ÇvsF9EQ°Ùl®·A¨6ž [ðööv× ôz}¿C‡½zØUãê\Õ‘+!¢("InX,$I ×Ó¤I“‡÷8qbéÛo¿íݰ¿}ÐV€ªªèt:t:²,SZZŠ^¯G’$ÜÝÝ=¼½½§‡‡‡KMMõ»ß±2€]©_¢T5ˆý³´´I’Ðëõö"xxxôôóóË<~üø“ÔŠ¢ÜOÿNÁ>ñ» ‚ £¤¤I’*J•ÕÐÊÓÓ39===²¡c×éíŠÙ•+(( ##ƒ’’úõëGãÆ¶¹|ù2Àl6Ó£GzöìYkÿ‚ PXXÈ¡C‡"‚‚ ¯ù EQî.>îîî+ÓÒÒZ<õÔS‹ˆìHMMe̘1Ȳ @zz:mÛ¶­!wþüyž|òÉjotéÒ¥L˜0Áa¿ªªòé§Ÿ²`Á$I"//¯â$PUPÊû©Å(Šâa0þ7==½IÏž=çP¾P/`6›i×®=öXgU‹ÍfÃßߟ9sæ0~üxTUeáÂ…µî{‹ÅÂÊ•+«©mm(å·áîí ×ëEQ’$iVzzúœà7N ª6lGŽ¡G÷lÀÑ£G™5kK—.Åßߟœœœ rs76mÚ„(ŠÕV“} ¨*ˆ¢X©°NWÃvCèt:Q’¤™‡~½Î™—£^[@§sîÔôññ©øÛîÐ ƒ¡†¬,Ë,[¶ŒI“&±k×®Š6:QEyyyœ9s³ÙŒ ˆ:‚N‡äæ†^oÀh4âéÙƒÁ@ii©›Ñh|ÿСCß;C˜t ÖVï¨$''“››Ëˆ#E±Æó/¿ü“ÉTÍ?ئÓéðððÀËË ‚‚‚ ¢U«V´ Ä××F<°ÙÊ(¼u‹üü|TͨOOÏÛ¶mó¨knõZõÅ7ˆ‰‰Á××—wÞyÇ¡ÌG}Äøñãñöö®VogƒƒŒF#²,£¨*Š\îüT¥‚:+²‚ŠŠ€¶zÊÊJ}[¶lùð÷{éX§Ê#²oÞþY[d³ÙˆŠŠâúõë¬]»–¦M›Ö-**"33“ÀÀ@bbb¸zõ*²,ÉŒ3ÀÏσÁ€èæ†b7€¢ –ŸšT@Eë¾òİZ­­Ðb­§Â[óçÏçØ±c¼öÚk 6ìž²ìE¡´š5ƒÓ§“xõÕää”RR¢Ð±cþô§¡ ò!!!(‚€Rî'j¼œòOƒ `2)U«¢^DèÂ… lÚ´‰ÌÌLV¬XAHH“'O®&ñâE–/_ŽN§ãÊ•+DEEðÞ{ïѬY3.]ºÄìÙSiÝZOt´ˆ…¨tøEäåÁ·ßžaß¾‹Œ³Œ€€VLž<‹çž{PQÁÁ*ÔéDDQ¼ÿ>--m]aa¡j2™Ô-[¶hk­JiÛ¶­j2™ª•ƒÖÔ“'Oª&“IýøãÔ&M<Ô Dµ¤D³oa!êÖ­¨3gJêŸÿÜX}ñE/uÊwuÕ*Ô¬,MÆfCݶ µKOµK—`5%%EÍÍÍUsssÕœœÜŠ¿óòòT“ɤ¦¥¥­«k~NåìèС«W¯®öÜnݺu 9£ÑÈ´i“ÈÈØÃþýÅtî ùùëÁæÍ*¡¡½èÕk :µ¨`„ÇeîÜ}tî¬òþûfF†ˆˆ;¬^}ž^Æ_ÿú6QQêQ¥Æ"ë^õÚÍ›7w¸ŸïÈËË«†Ü… 1b íÛçpò¤//øá ó$"b/ΣI“&FŸJ™Ù̺-›0àMââŠxþy…èh•§Ÿ¶öVk1¯¿>­bâU?ëÂ/’رc;C‡öåÕW³ùâ mò·oÃðáF/^ÇâÅ;ž¼ªÂÆH/=‰ƒO0c†'NhÛ¶…ÔÔbV¬XıcÇj¬gànhloµZ™5k* İo_1S§VÒêU«Üèߣœ Æi^±sg‚ƒƒY²ä3bc+9CP|ðA1±±oÔ8ž åØ ÈÊÊ",ìòówqêT1øCõç‡5æùçÇ;l{jãFÔ®]¡cGxá…jÏFŽIzzI5Ç?j\¾œÍÏ?ÿ\!:›Ä} ¡½{÷2dH_†¿Dbb1ŽV·¢Trì8räOOšÄò±caÞ¼Ï+“§•unn ª iiiØl61:™Èq)*++cþü·Ø½{+‰‰Åôî]»lïÞEìܹ™ÐÐЊºììl¦OŸÎêÕ«3fŒÃv{öì¡[7:µ¢îêU°Xd<<ê¤þ5P§œµäO?ýDtôXš6ÍâÔ©bš6½·ü¤Ietíº‘AƒÂ4h‹…øøx¾úê+¶ÉÎÎfêÔ(6l¸UQ'Ë >>îîîõÖÝ%[ %%…û~ž={êž<€¯/lß^Dtô(æÍ›‹Ùlfîܹ'¯( [·n¡wïÎÄÆÞäé§µú›7!<²² Y3C­Që½p_[Àf³·ˆõë?cãÆž}¶~í»uƒŒŒ;Ìž½”Çÿ€°°Áôêõ,-ZT¡ý+]» ´’`Æž‹9q""´Ø!"ÆzëµãƼüò‹X,çøþû24>-ZÀ† ®_‡Ý»ÈÈØMn®›MÀÏÏFçÎwصK¥CM^Qà½÷`áB8Ü®£RMO—­€Ú:ÊÊÊ¢ à*ÅÅeL™+V€¿¿Sc:D` Lœ'ÅerràÅáʘ0ŠÓåäIÈÉQhÙ²¥SºWEƒ}€§§“&i|>$>ûÌa`æìß:i!sd¤6y› ’’~ø¡9{öìç‘Gy°> ##ƒøøxΜ9ƒ$I”••!IðÌ3-ýÇ? >Ö­ƒàà†L³&l6,[C†@›6ZýíÛàFûö=Ù¶-¾AG ÔÃÄÇÇ“˜˜XQߪy¥L` Œiišs{ã xë-¤éhlxôh(,„¨(°žW®ÀÎz¢£_%&æ¯÷Ô¹.Ô¹ª¦Äš5kƪU«8sæ ýºwG¶‚µ’ ÓAïÞš²[·ÂOP¸Ô;wj!€Ñ¨±aûäÓÒ )É“5k61}úì{Ïr•û„ÚP¯-[‘yÐ ¾ÍüŽeËÜ8P¦C‡J‹ûú‚™™6úöu#2²˜Å‹ÁÓ³î1¬V˜9S3àˆðÐCZ}i)|õ•Šò)) øßÇ­‚z9A{’AUU²ŠŠˆ³Áÿ¼ÅùóÁ|þy#nÜÐäóóÁjmÍ޽Ʉ… eï^‘ví 5õÞãœ=«mŸÃ‡á•W*'_Pk×ê DRÒ74oÞÜ©˜Äe¸&“‰oÖ®Ef7oÎîÝ©L™2ŸÍ›³¿ž‚èС#:Ž®]Ÿ$8ØÀÿ¨-å—^Ò t7âã¡gOxøa9ì>íüyX¿ÞÀ´i±ÄÅ}Št?NÅê°ÙlL™2…à[·¸€wr2£F=Ï¡CÇ #%Å“ƒsîÜ9vìØŒ¿1!!g¿xQ;2ׯ×ú7›5ÃüíoÚߣWbÇŽéøúkoÖ¯ÿ‚±cÇÕ;*} ù€E‹´ì˸6m§OÇíÊÄk×íJlñâùä“xÊÊfÎŒAUÏðè£Úrtw׎²°0xóM”¸|¹ Û¶m$$$¤!j5u¦NSRRÖµoß~\URÑò©§ÈILD®å,ÖݹCã%KðØµ‹k“'ãöÊ+ X,ââ–’°™ÐÐbrrd5‚ìlüý;²bÅ?ñòòrÉÄDQäôéÓñ /9§y@µFÈåW\Ž xzr+6–üM›h™’B@x8Æ-[0Ê2sæ¼E|üΞ}”4ž.1tèD6lØê²É;Ò¹68ßM,Ê‚ƒ1¤¥aíÕëžmKƒƒÉÙ²#GðLLÄgáBnOœÈ“'“”´—•+WÄàÁƒë¥´3p– 5ÈΜ‰ß¬Yä­YCY]ûU(îÓ‡â>} húÚkH?þˆiÉ’—ªÿ 4ˆ ÷éCÁ¼yøGFbLHpºìëKÞçŸ#X­øýýžß[øÅÐà„ˆ¥o_r6oƸq#þ£GãþÍ7PVV7;En|ø!ÒéÓx¤¦6èÆÉÙâ î+-^öè£\ß¾Ͻ{ñZ»–f3fPBi»v”¶m‹µwol­ZÕ4¨^µW/<ÆÒ¯ŸSŠ6.ãuY´hð`ŠFWT„þìYôgÏb8u Ÿ¸8ä¦M± DIyVÓðïã™”„âíÍE‹\êøîÖÙ¸ôfH1±v{w»23iôõ×x¯Yƒª×SÚ¦ ¦wߥ¤kWWÝ`8ýƒ‰†¾)kçÎXËowïê¸Aý9 guþU|[üAá¿z=þ[Kœào¿¯€ºêK,~MpéÕØo ®âÆK—.í:sÑðk€(Š‚@¹îFì_;u€º  æåå%Y,OY–u¿•#±ü·JQQQàç¶¿ãwüŽÿ?ø?+Âý‹Nƒ±IEND®B`‚PK —nYT íAsvx.iconset/UT^(bux èèPK –nYTèÎ;½½¤Fsvx.iconset/icon_32x32.pngUT\(bux èèPK–nYTp£öãà#$¤Wsvx.iconset/icon_128x128.pngUT\(bux èèPK—nYTÍ$ãñ•¤+svx.iconset/icon_512x512@2x.pngUT^(bux èèPK—nYT03:ðªt¯¤É­svx.iconset/icon_256x256@2x.pngUT](bux èèPK—nYT03:ðªt¯¤Ysvx.iconset/icon_512x512.pngUT](bux èèPK—nYTöûDn©MO¤Xsvx.iconset/icon_128x128@2x.pngUT](bux èèPK –nYTèÎ;½½¤ZRsvx.iconset/icon_16x16@2x.pngUT\(bux èèPK—nYTöûDn©MO¤nYsvx.iconset/icon_256x256.pngUT](bux èèPK –nYTÍcbËˤm§svx.iconset/icon_16x16.pngUT[(bux èèPK —nYTï+Zðþþ¤Œªsvx.iconset/icon_32x32@2x.pngUT](bux èèPK -áºsurvex-1.4.4/lib/icons/pos.ico0000644000175000017500000000427612540750610013164 00000000000000 ¨( @«´©²³†+os3JL;¯¶””ë68ËÌÌVV¶‹‹‹ª®®ouê*”› 46)>?O•¥¦¦-rv™™ñôôúeeerrÆTTÓ'ÉÒååõ[[[’’Ì€¼ß³³Ý××ûVV…=Œ‘MMM?gy~C€ƒHbc$ÃÌDG7df ‘‘ãÿ™~„FghFppFXp.pppppppNY;tw†M[)nFpppFXpp.ppppppp ]4UU€4mFppppFXppp.pppppFFFFFppppppFXpppp.p.pppppppppppppFXppppp.ppp..pppppXXpppp.p.ppp..ppppXppFXXppp.ppp.ppp..pppXpFXXpp.ppppp.ppp..ppXFXXp.ppppppp.ppp.ppXXXpppppppppppppppppXXXXXXXXXXXXXXXXXXXXXààààààààààààààààààààààààààààà?ààÿàÿsurvex-1.4.4/lib/icons/pres_go.xpm0000644000175000017500000000066614141575516014063 00000000000000/* XPM */ static char *pres_go_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #60E03C", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXX XXXXXXXXX", "XXXXX XXXXXXXX", "XXXXX . XXXXXXX", "XXXXX .. XXXXXX", "XXXXX ... XXXXX", "XXXXX .... XXXX", "XXXXX ..... XXX", "XXXXX .... XXXX", "XXXXX ... XXXXX", "XXXXX .. XXXXXX", "XXXXX . XXXXXXX", "XXXXX XXXXXXXX", "XXXXX XXXXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/plt.png0000644000175000017500000000073312540721306013166 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“IDATxÚÅWY’„ }LͽÌÍoOÆ| kʱ_U·­¼…ÄÅ¡EÀ;pâG$•¿|eòÐ~ìAN8·D;wv0ÓÍóû¬6 Ä¾Ÿ“òä {þe ¡÷ µs"¾%$¨Ï"t¡Û*HkÞÇOÄà®>ôô¬‚½OD¢øZ|Îí\)À¡í€ª%ûþ.ÇÛ‰m vˆ3ȱ×ä‡2>vC¬¿ÖˆÄÜn]äÚEkB@¬¿î¼QÜO ˜C‘:^sLÕ@9åª,´kŸàŸz¸&¾ÂBÈX·]fnˆ£stî?wÃÛð*a­ø‘R‰YÖñtµXN Ÿh}üäóÀ]ìݾ%Ôý—€»X| yVBÄR(¯f _}9­D¼§þf (§ˆÏŸIEND®B`‚survex-1.4.4/lib/icons/Makefile.in0000644000175000017500000004155414367066627013755 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/icons ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_appicon_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(appicondir)" DATA = $(dist_appicon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVEN_COPYRIGHT_MSG = @AVEN_COPYRIGHT_MSG@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMMAVERSION = @COMMAVERSION@ COPYRIGHT_MSG = @COPYRIGHT_MSG@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_TEXT = @EXTRA_TEXT@ HAVE_CXX11 = @HAVE_CXX11@ HTMLFILES = @HTMLFILES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JW = @JW@ LDFLAGS = @LDFLAGS@ LIBAV_CFLAGS = @LIBAV_CFLAGS@ LIBAV_LIBS = @LIBAV_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDOCDIR = @PKGDOCDIR@ PKGDOCDIR_EXPANDED = @PKGDOCDIR_EXPANDED@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRETTYPACKAGE = @PRETTYPACKAGE@ PROJ_CFLAGS = @PROJ_CFLAGS@ PROJ_LIBS = @PROJ_LIBS@ RELEASE = @RELEASE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WXCONFIG = @WXCONFIG@ WX_CFLAGS = @WX_CFLAGS@ WX_CONFIG = @WX_CONFIG@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_LIBS = @WX_LIBS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xpm_files = \ aven.xpm \ log.xpm \ open.xpm \ open_pres.xpm \ rotation.xpm \ plan.xpm \ elevation.xpm \ defaults.xpm \ names.xpm \ crosses.xpm \ entrances.xpm \ fixed_pts.xpm \ exported_pts.xpm \ ug_legs.xpm \ surface_legs.xpm \ tubes.xpm \ solid_surface.xpm \ pres_frew.xpm \ pres_rew.xpm \ pres_go_back.xpm \ pres_pause.xpm \ pres_go.xpm \ pres_ff.xpm \ pres_fff.xpm \ pres_stop.xpm \ find.xpm \ hideresults.xpm \ survey_tree.xpm \ pres_tree.xpm EXTRA_DIST = 3d.svg err.svg plt.svg pos.svg svx.svg 3d.png err.png \ plt.png pos.png svx.png png2winicon png2iconsetzip \ svg2iconsetzip $(xpm_files) aven.ico 3d.ico err.ico plt.ico \ pos.ico svx.ico $(iconsets) svgicondir = $(datadir)/icons/hicolor/scalable x32icondir = $(datadir)/icons/hicolor/32x32 # tubesprefs.png stationsprefs.png indicatorprefs.png\ # windowprefs.png gridprefs.png unitsprefs.png \ # legsprefs.png ctlprefs.png pres-restart.png pres-create.png\ # pres-record.png pres-finish.png svxedit.png appicondir = $(datadir)/icons/hicolor/scalable/apps dist_appicon_DATA = aven.svg SUFFIXES = .ico .png .svg .iconset.zip .xpm iconsets = Aven.iconset.zip\ 3d.iconset.zip err.iconset.zip plt.iconset.zip pos.iconset.zip\ svx.iconset.zip MAINTAINERCLEANFILES = $(iconsets) all: all-am .SUFFIXES: .SUFFIXES: .ico .png .svg .iconset.zip .xpm $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/icons/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_appiconDATA: $(dist_appicon_DATA) @$(NORMAL_INSTALL) @list='$(dist_appicon_DATA)'; test -n "$(appicondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appicondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appicondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appicondir)" || exit $$?; \ done uninstall-dist_appiconDATA: @$(NORMAL_UNINSTALL) @list='$(dist_appicon_DATA)'; test -n "$(appicondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appicondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(appicondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dist_appiconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_appiconDATA uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dist_appiconDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags-am \ uninstall uninstall-am uninstall-dist_appiconDATA \ uninstall-local .PRECIOUS: Makefile install-data-local: $(MKDIR_P) "$(DESTDIR)$(svgicondir)/mimetypes" $(MKDIR_P) "$(DESTDIR)$(x32icondir)/mimetypes" for f in 3d err pos svx ; do \ $(INSTALL_DATA) "$(srcdir)/$$f.svg" "$(DESTDIR)$(svgicondir)/mimetypes/application-x-survex-$$f.svg" ; \ $(INSTALL_DATA) "$(srcdir)/$$f.png" "$(DESTDIR)$(x32icondir)/mimetypes/application-x-survex-$$f.png" ; \ done $(INSTALL_DATA) "$(srcdir)/plt.svg" "$(DESTDIR)$(svgicondir)/mimetypes/application-x-compass-plot.svg" $(INSTALL_DATA) "$(srcdir)/plt.png" "$(DESTDIR)$(x32icondir)/mimetypes/application-x-compass-plot.png" uninstall-local: for f in 3d err pos svx ; do \ rm -f $(DESTDIR)$(svgicondir)/mimetypes/application-x-survex-$$f.svg ; \ rm -f $(DESTDIR)$(x32icondir)/mimetypes/application-x-survex-$$f.png ; \ done rm -f $(DESTDIR)$(svgicondir)/mimetypes/application-x-compass-plot.svg rm -f $(DESTDIR)$(x32icondir)/mimetypes/application-x-compass-plot.png Aven.iconset.zip: aven.svg $(SHELL) $(srcdir)/svg2iconsetzip aven.svg Aven.iconset.zip .svg.iconset.zip: $(SHELL) $(srcdir)/svg2iconsetzip $< $@ .png.ico: $(SHELL) $(srcdir)/png2winicon $< $@ .xpm.ico: $(SHELL) $(srcdir)/xpm2winicon $< $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: survex-1.4.4/lib/icons/svx.svg0000644000175000017500000004343514141575516013241 00000000000000 image/svg+xml 1 2 4.2 34 3 5.1 survex-1.4.4/lib/icons/png2iconsetzip0000755000175000017500000000103414141575516014571 00000000000000#!/bin/sh set -e case $1 in -*) in=./$1 ;; *) in=$1 ;; esac case $2 in -*) out=./$2 ;; *) out=$2 ;; esac tmp=`echo "$out"|sed 's/\.zip$//'` rm -rf "$tmp" mkdir "$tmp" for r in 16 32 128 256 512 ; do convert "$in" -resize "${r}x${r}" "$tmp/icon_${r}x${r}.png" done for r in 16 128 256 ; do d=`expr $r + $r` ln "$tmp/icon_${d}x${d}.png" "$tmp/icon_${r}x${r}@2x.png" done for r in 32 512 ; do d=`expr $r + $r` convert "$in" -resize "${d}x${d}" "$tmp/icon_${r}x${r}@2x.png" ; \ done rm -f "$out" zip --move -r "$out" "$tmp" survex-1.4.4/lib/icons/elevation.xpm0000644000175000017500000000067014141575516014406 00000000000000/* XPM */ static char *elevation_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 3 1", " c #000000", ". c #F2E9C1", "X c None", /* pixels */ "XXXXXXXXXXXXXXX", "XXXXXXX XXXXXXX", "XXXXXXX XXXXXX", "XXXXXXX . XXXXX", "XXXXXXX .. XXXX", "X ... XXX", "X .......... XX", "X ........... X", "X .......... XX", "X ... XXX", "XXXXXXX .. XXXX", "XXXXXXX . XXXXX", "XXXXXXX XXXXXX", "XXXXXXX XXXXXXX", "XXXXXXXXXXXXXXX" }; survex-1.4.4/lib/icons/fixed_pts.xpm0000644000175000017500000000065114141575516014404 00000000000000/* XPM */ static char *fixed_pts_xpm[] = { /* columns rows colors chars-per-pixel */ "15 15 2 1", " c #FF0000", ". c None", /* pixels */ "...............", "....... .......", "....... .......", "...... ......", "..... . .....", "..... . .....", ".... ... ....", "... ..... ...", "... .. .. ...", ".. .. .. ..", ". .... .... .", ". ......... .", " ", " ", "..............." }; survex-1.4.4/lib/images/0000755000175000017500000000000014367067015012101 500000000000000survex-1.4.4/lib/images/Makefile.am0000644000175000017500000000022714141575516014056 00000000000000## Process this file with automake to produce Makefile.in imagedir = $(pkgdatadir)/images dist_image_DATA = \ aven-about.png osterei.png texture.png survex-1.4.4/lib/images/aven-about.png0000644000175000017500000006513314141575516014600 00000000000000‰PNG  IHDRÈÜ,ß‚ýPLTE          %  (     !&$ 5+(""$&#&)*,"0#.+')#D1'.!'."#6*5 $0!-/!13 2;05#+2%+:'09'4?&/6)0F%)<(,7*+:);E'5C,,B,0D+5:/0<.5@-5?-:N,2A3:E2:J1;E2@O0I6>X32N:Cb5ÓbxCN••™5f©f!UQhBBhH •$4ƒLc°À`ŒX€Í2^4tÜ4ÐÌxÑ´Á^¦ã^ @a& AY B%©TRI¥ªÌʪÊéMw8çìñÛýÇ>çñ"Þ“P/â®ûn¼ˆç;¿ýûæým¡4# B”@”¶ÌÀ–V{í5Q¯½öÚ—vçl>×¾´%†[‚˜€$@ùw‚~ÿEOÎ×"¼¾ß‡Ðß&T†A8ïƒL,óðF\ð&ê>?€Úû?Q9pepǾ󷽾ð[Bç{ ·_ŠÈ÷zód¯ V^ƒÎ|oûžrû;2"ÌãïŽȈ ŸŸyÝ<‡õáõøôúöÏï„ÝíFÝù  ²÷†WŒñönÜŽHæ!J¦í½Ù]ÿ`õþýÞÿþEaìÝóWÊ‘­wD„îtשì íݾwD*S™…WŠ ƒ/â$™×íÞú¯VożŽìñgÿޫزú¶çð7ì¹\å9w„6wv÷±sg”}}×Ç :g\öÿ·ÁéÌÿ ªÃý~x¡Î[£ò¼÷nlñÞݾ#=wß™ÿw.{ºK€Æ»~ùº!²]šÅ[LÆÏÁ„—ˆå…ëõŽwùöû¼û¸Ó÷.Ärçïó¹Ù³'wAd/Üá>Û¼½ÿQ>{ˆœù(LuÎã~ ü=p䞰ؽ¯ÄMwûcÿ'šhº¦;û“{ø ¥¬»îÛ×RgïÎVüð1pÄVÝy’ìs$mË 2•Û⌈0W˜û~ä,†{Eu›?î(ïäÀÈó™´À¤Í8l‘ØÿyœÇ—ñ:Æ÷ «,¿ùaçØ‘íš%nºÊàæŽÖø|Döçÿ<7fcUÜ>¶W“ ueîFœ;qäœûy®yqÑëE?™û]lLÜøÏwŽUD‰qî[_â¦kLÕWæÎ÷»ºøq·Ÿëè6†ëÉvå)/²M×eªî|¼b9FIîjc8 Úb#.²'¢>wÅo1Õ¯ÕT@P=ï$ëøÛ÷xTÜÆ˜{Gäöu›í@Ó5¨2UPf«—o{ êâÇÈ“‹~>„áÎåÈÎÿî™#Ù:£ëlö׈©‚Îb0âÜŽÉøóç}íÌê« åpc´3{öåîVäÈøûvq9GŽ Ì ¶×z¯ $É–j«Ç.òÃÆÜÁ®ˆƒÕØA„ÏeòÅ\ØþÅ;½çN˜ƒniÌíÞØ½@2räŒþ¿`ýŒ îsÁ19îó±á‹CÓ±ªöìÎɳÈóc•Qkñ¹:õ̽$&ÞÜÿ3xlþòß?÷ë[|º¦£ ƒ6ÛÞûsxr!G.༈ÉçÛi”(û»ù¡æ Õ]Ön¥ö¬Ï¹<±çÆ&âè<ûvfíw›Pög=Žz7ƒjqw9n¿£AÝ¥µ^"ìJB|ﱊ(éz|šh\^õÄ·ùIÀîçYO'ô[9ö𩇯×=P÷€H€H°¥-ÇÏí»ÆFª{ n·|=‡#ûW42F4I$‘Dš­f«Ùª‘‚€ü½ìàŒeÎÈš* Tf?·§Í«L(Ïj¢$P™áo$‡«6àÎbpžöÚHÔã=™­f«Y¿‘#í±¥LL^+áásiû<'¯‡,Æ>.£/Œv²y V £;Åõ{yj-®fM…Q7m´SÖI;XlVWÖÂó¼öðûö ÈÿŽy2$d²‘2Ög}®~{g9É_€H Ìz`ƒ ÷4ÓXíÊœ8Ç¢{4^{x é´Ïž4hd¤†ÿ'±áú}?½2HuÖÇ#"ƒ]óaç`r†#¥hRÖXÅ.7v$°WÓ<€î4´‡o: ½õ< »ŒOÓ© Â K]%ÐgLê~›‘'^·E£=9Wk‘¨gý*¯NäçPAŸ]ùYßùñ7Ÿm¿MGcÍ*RÂÈ‘ömdÆl?n¹ÝóÚ·#€/ÅÕ^ûb×vïj(¹ñ̘€Û¥È²ï¬>\˜Ó„"ÿÖ$€ÔÕiÌŠ4J³‘$Ûø=9Îõ¼¶ˆÌ€-Õ`±÷4GèŒÆž½WQF1â²ÁG{íuFJí¢†ÁF€ ˆ¢ŸDJ¢«)u S—uÙÆ¨œ‰ýï`O69ÎëjôAñv=CÕk&ŒX.?rtBÐ~Ädo5^ÌøyÖ¾€¡À`!„ O‚öíK?Ä=C.†°kO.Bdk «ÍßÞÕNE`)³(P8ˆüDíµG¬<’€v£´" [níI~O¯bÕצÒXU†xȾGɢ˕¤ñ:•߉Z˜º½ëß·#Ž\ÂÖ&Uf²—9Í÷…HÙ.¨M„"óºÊ¯V¡ì W¸"Ê(£ ;¸ùtÞ£qA‰¤"|t ; øÆ§€PT¯/ pŒÜž‹ãQ[eç0_áðÀpÿWd‹ ”+d)™liË(­rÅ9y^„ Xv¨¢—I…ìç\¶î´/mÓm|ƒ^{=x±ÄÄ:nm'ùs{4¬‘Јâ¤ÂÈ>þ6Öd,ò»bኾˆ2büÉxNüň2j§¢$î¦N¤×’͸Â6QvzëdI€,IÎd_`¨ÕŸ‹ µ¨°›“/\–âìš*\‹8â!£Œ²¯û"}eÊ﮺"€‰ W¸,¦ñaá4Ä[ž˜lÓi¯ý€Ë&ª›ÄM¤â'gù2øZdËa*Èá;Ãú†H›Œk¾€ 2ÞV‰ÈŸõ5ÄV×åŠPeÔ(K#N &¯9K#LieÌ1¥ô_v¼6x66*Ú÷bŽ\|«-‡G^äõºA1’{L°ªd”QŠü÷¤-œêš®pMÎ]1q.õÓà5Ë ’0ÕCnkù£¿¦ü†)I´“˜ù~Gr'Ì."#¿Wó(…šù®Â ÇxõùÕIH'8äŠ ’ˆ“CAâÚ&ŸÕ klˆö‡;Ñ5®ÀëŒII ežl8r›÷»ƒˆWVæÆ–L2G$´‡VÁ#óù+QB$aËM6\™„UØÉOnWš˜’„©Ì€ËÀ”AwAxáu›9Ò0Le&í;Ÿõ–xdð•F]•õÔ7 Bfi ˆ¤}±ê5TP@ØÄUH¨‘ €,`ËHn¼/! ’[I“QWWÖ]uP½öÈxdŸóLOË&¯uUïH²½ÿ£žµ×–íãÕw8{3í„©°`b‘D]Óg«^g?ЖVxÈ¿™!æ~çÓ›ÖݾMí¤mxÐÁæL‡ËØ/&AŽbe¶ÔF²=ò@P»\Ï:ž ˆàu,¶¾S¿“O‰;¹_3ø Y ¤ *íÕë_2 Dâ]Dv¹"!ÖœuÁ†åAµÃüZ÷uÎ ™D”ÙÛ›|*OW2Ê(ý^þ¤¯ûzôχUFNÅd 7â2êãÒf\t·áJIŒ±c$–™#Ût×À‘ÇÇØÛPa›u5`’`9¬ëùñ°žÕ}Ñ6í^B"ñ¾F2›¼JDþ»¦pYš]®”Vz²M§³?oª~“߉´‰Ïp䑇¸í©Ùùÿ(KÝ× $ ƒÀ÷Ì9örÄ"!K‚Üû0iáÖ$‘DW÷›U–"_‰ËùN±½²ýÆh>‰¶aÇg8’û*Å7ÜIͤTW@¤Â^CÆzã­È$ÒÁâ`9ÃèÏJ „'Ê_‘€¢­õ$‰6çuƒI õý·…SA]ávt’•qðÚ« úzŒH¦ê…íåRY¼1GDD‚Ю`â°%².õUe_'`”£ðÓ£L`™šnÒ#çN’Hh' Ilãí(=%$ÑmøÉ© ö%1¥dY¨¶¹î¶aÙæ¼Ê•Á×zsÎÏ ¶(q1\i…5OÀÈO mÚi‹4’H³ëW®×ýæ^e݆f«ÙjÒ× Àõ+kå%«@Q{íÅz’¹´ Ýd)¼Æ€l5#‚bb8¸©ƒÛÁÄ6H[DÚÉ"»$oÜÈ‘ÄÆ–êÁ’ ¬€uÓ¤¯ûI–‚gQô“1ë‘$÷ƒïX·äeÄQŽ9Ô®ée”A°èšnàÊŽU O†¥¿#ÛQ¼Ù9·‘* ”I ÊØÄ”æcþ„ uŒˆ' (QÚü V*åˆK¯=˜Z01´[ÆhŸí[¶1&WB¶)[Æç8¶ñÙG¸ G Þ ¥)³_•ñ1˜¯g ÈuôI_÷5#jž`ÌÕëéz‡ÌVÐN{Ý£­À³ƒ ¢ôb\]£Måùz …‹¡¹™% Ú×}¶–cdYäÚh7Ïy½¬§ÜЋØÎZxíÑf-ŒQ$ôµ-ý®•߉Ywý $Ñ6¹»€ÏdƒÅÛ3©H@Ï—s “v`Ú5]`@Â×AÝçƒ7¶b2¦YJ‹®ÉvÍA9j±ƒŠH¢E Iô@˜ÌŽ?<2Åj¯îU©²eΛƌ˜G `Ðt Dj:Aµ×¾î³•/\2Õ`‡”¤$P°–¶dàŠ€LÀ“˜’H¢Ï™—ãP7Ø+“mÉ툌}Y{ˆ@©CæZ®pÍ.ÍPÑ* £öuߨú:‰TŽõ©l‡‚r„*J'ûº'£löëtG ´ÈÖ%¢,!“dŒžŒÑÖ}päí" Œ{qrU¡a`>¸Árƒ×I¤ 4D/UP W@PQBFéåºtÊÊ À«€S;9Õ-€.çn+k|fü–'[D€3Au‘'“H%²g® Š'QBA4aÒ6UˆQ¢¤ÂT}@Y‚A ¨Æ1M0øº^÷ŠaT@„­zíÐ7,ÚÉZ$tM‡ G”à ¤ã–mý¤êEÚö«ìvÀŠ·úJû*J®ÊìˆJ4]ÓMÑ0Qµž& R‘¤© £°Â@˜Øó”«èšpðEeOìFPÁ+Õ2#‰¶Y kRôºG¶X€³‡ÇËCF«‰r¤ŒM×€¸qU”˜,§ Jf×ë1ËÜ‘;îY;qºõ‹Âˆ^²\R  WFu€XpPÜ+ À·ÿ±ÔÅàwa¨N—‘R‚4Õ•hÄW¸`B£e³š1ñdœ0qƒ@áJ—¶q³š¸1uö½LƒéZ½`™{÷wEÚµ’á± V:iÑk[íÙ€Ñ#ôí¤Eö»†Õ¥GY ¼ö³•^U¦òð0’1ÙÑ]âƒMPL¨1_Ô(\áŽ×ó!ºå²ÉÑñ›. Wx$áäw÷r±ø¨ Âá­ËL|°Êrd†ˆ¤ãåÿßÕpr¾ü¾ßùÐÓ«vÚO€Ì¤z;¶·wØ-œD®".bô.ï°‚]êÐÆà —§háuŽNžÈ8ø½¹o%cÒ ;n€[öâÃE8\ÏP÷®p¨˜¤DÍ$›Ïü“Ÿ›®ÖóG~ïõ/ š¸‰«Ì,×à]!Š8;žE‚ˆ`ºx—U”YwE³V"øˆ[±Çâ` Ø0z„ &íd¡º"c’s×}áÀXÍVU_÷*¨ =LÝ×^âÛQ„ÃÓ™Id eªM‰’yùÆÿô™®.~žÞùûó.Wiø†¹©lÔü!‘x3äN;ÆÆ~Ñζh“ƒ Ktb¡}4è´E/ãhásÝÖ;’D8r²<‚Šˆ€úUćkW„Ã[Çé`9w…k’À•¨|Í«ÙsÿïÏQ½,ÞããA£DésÞ¥€ (.Oˆ^ß“2b匰Þ%—º.  ½VfŒ²Ô *[-ºÉR˜*¯/v †ÏZYEDrC¯ð€ÈQ˜g9TR©Tæù¿ñB÷àÞýÂã(]!š8h]”(Ó¼i"ä† w— ®w­ðÞ Ë§D‡¥Îš‹ÑžüFw‰$ZeF+ÂF1Ù!‹.wÛ ¹u)¯,¨®Iuª‚†T*ÌÐüÄß³þ›~‹QT]³éQ(q8iv;ê“ûUn»^½ï“÷F¸ÐÆ>K}Š ßáu»¦El”QZ¸ø¡ò»» ©ú··ˆ¤ƒåÜ5@ªPBùY:tݧ>òÉK.\ù]ïv]“*TCW$%æÅ¹µ÷²¶\8õ}r‰m{$ôh¥aæÀ½Hˆ bé9$ï„É:Íò¤éˆÉ€•Sõè%cèD92 âš$R*[bšÐ~ôOOŽnÎÂoz ¾@ QJ¦\[H*–AëÃéŠ!ã;Xñ»ËÁ´p&úè’ecz±8XÀÁëÀ=£‚ïÙÃÃ0È4=1V³ÕÐ+r¿ Ä÷¸"BŒ++ÇXåt=ù×?}S…Ú}ð7>yTÐPiË„ÊÎë‰4p>Cö¿º±-Äamúýèàá`Á1Ê>K0YïŠËÂåÙ–á`Šu8˜\÷UAv€·>¦."tõNFô-3&XÂë— £€¥ö°Ú3ÃåÎÆŽñ´Æ¡@Uá פ…ýèOÞ*ôºÊ-ž¸tSÊ7ÿîw¸ˆ—‰ !ŠÊ6Š…× l娱{ˆ+‰Ö9ô Á{#"LÑXpˆ²G”k¬f+@/yí£‚ê=ô F(ÌÐw4îÖOaTØ"R¡p毷®p²†×ð¡Y/.5ÿéû *II L©$]Ï#y @çéÞ Áʇԩè{XD±D_÷X,à CY`¥½^"²s^{Ý£×^kX€ ¹ñTÄãe ¦hRm&ˆÏý(¦Úk[WÔþèÛžš*• BrëˆfJ:h¯“dÊs–/r7Ù<:£p>Ë +öY’¼ûˆzdŒŒ‡^z¦uÑê z¬§ë¦ÓFÀ´ž®«Eed”âÛ 8ö€ ª*PabÿyW–Ü×^£t€ˆ&~ão}ÄT (’‚2Öñ°PiìÙºÃ<àÛ숺h`c‹ƒ×¹ ‚… ªk:ôÖÓ5VÚë›e«N&«Ù Àz¶js@`ÀŽÅ×Ϙ0»u5LבJVáÓÿ³o¾üÇam+sõZ!Où#ïÐ^¥€FîlŠJè$)î  ¶Kk"§ŒŒÁ wA-TP]Ædà‰ŒKu¢½^¡ÓQk0å>Sy;ñ3¨p2GdU­ÿÁ§ð-?ÿsÚk”˪›=øÐ¿©ÿðXÙb‹ˆ¬hJ$7r0Ý‘Ý~e,Œ°l…‡…G¯= ØHR÷Xi%‚ZX©^{‘Äj¶ê@0T88ñõ3&>XÍ0µ%𮩀I˜>ý£Ÿx’±Ê)fïSÿäÒù"eÊT&â:Ê8GQê¤72܃$û{å:»PÑÇ„>K‚œ]èÀÅ©[¬Ô^¯àuP^¬f«Œ ‚Êù®-"¨P¨œ×ªèðÿÇ/N^ª Så`®>ÖÿÔ¯ý­o†àBBhV±¤R5)yÑ‹$¹]kå•me+{áÈŒ’×>8k9`` ¨ó&ï‡Ãzºž®so…j-¾^¢aÂQ¦h’À$J5®ÿð³.(h[™£›o¼©þ£_ ’v%$$t”²òÓ’„E‘ähÝï °Ï gaàÐÁT+•1YO×´n:ôuÕl)l¹„+NÕºÊû!2V€©:p6ˆª*\ƒ  Ó!žý©©¸„j«úæÕöÝ¿ãM"‰T$Å’d’qîKU–2Š$’»äÏ»÷g}Æütw&ØècÞç>/ƒ-Ú£SkÑÕK‘ÄB¬‰i1[©A§é>Ï_$£ŒøúY×`¶šA…) ×T9KWÕÓŸù¶•;xé þÙ”$$ÉXJ…‚¦‚œÌùí]«xWŽÈ(@k×Åè=Rpðð€·`29™ž¢¯{œ6V.À´œv`Zì`’ç2qO¡Áñ­ªõqÖZh@|ØýÜi­¡€vrúÕ¿ë¡ 3"DB¡¨(¦^…d͈’î‘Y¦ÎzM–!0®¡”°“öêÞðƒ  ‘„â%dR¡©T qÜ»¨ïÄÐ0h’GÎ…z8pt¥‘keE£˜ÄXçl#“זΑüŽÁ€d…Ó¿ýy7  (:ú D(Y¡He¨’Š)¨SqØù4ѽsÄ£+Z`@$!ÀÁ ¸vX]F:tÅ 9€[0ÖM`Q8bôÚÃ0âësÉ ÀÔThR TÍKë%êÕÌWëòC¿ó2Hû :B¢Œ2Ö• Û=Ç’†8·O5ìÈ0K™|ˆ²`¢Aä,‡+<<Ìfm¹üU„hª…Œr€i ¦ÅÁ mJ‹¾îD¯¥$žBÓ5L˜AÆãÕQ©N UÕÿOÏ·U€’Lzwþ–/vGkWÐ!AªBaDR€/y'Ÿ²‘cœ'v´1q²áE –yÄŒˆö©+ZeGIT׬Ñ&¨€ÅÁàS° è ’èˆ0©i”qŠ"UJaŠŸû!”+ ÙOoÎÛ·V^CCû’ *]™D*TãD$çJ1ÎßîÞ»]§€(CˆEüVx8´ÊJŸ­ ˜:6ˆ0%¹uxª‚Z#ÁÈuÝM×€0¼È­ChÔI¡Âñ'þÎ “%ûÄ/UøÁ)jW±€‚@C)Ê(‡|¼Þ÷SnÏClÖV´ˆœ‚AÌY\„ÀÖ–ê‰á²$†‘% êŠSµÕ\+ÔÀ‘ }F¤éš4 JM‹çþª5*TfÒ„'þÓ_ ÅE%D”P‰t SÞ£w”Ad£¯ržÅ ¸ˆˆ+B ),qèЪ úÁ¾CŸÊâ`†sAµ= WM'’j‘©@£‚ª*4ÏþÂtY·XÔü»¿qt*ƒf …**J(H Ú4ר4ïùŽ»ö#×å\1LŸˆ&$Š!Æ$,RˆpdR[¶£$`ê B4…C°˜-pª‚ZOW¢¯ ­g+Ñ×aÃFLU¨óÊ óêÙ¿vCV¦2“vb§kõ=ÿQh,¹H+!cÁBjPd̈ä]e´]Gqèˆ`º¨dI A0",…%NäÜ©•Þœ2È}B‹ƒ…nÕA­«>¯7Õ `ƒÈa”ñ0¨ÐT2Vtxí|È{”+øM¿ý²× (¡RFD -K'ÒŽìb²;ÑÞ ùZH ²#¤¬wIȦི¹c6Ft…úé­NG½U÷åZ÷C<Â}Ü‹\'…Š 7=ùì?Z¶ó¥Œº}ñ|^'©IŠB…PÙ6ˆÌ…í¼Í¼&' £Lˆ2"R '#X:ØÂF„Q#ÚI ¦6òvm˜ `q°’­ÖVFIu…×â)T ¾ìeO63ºe”'HÚk Ár !9ÄÒ¹ Ý ÛÂ{›;áÀì%‰bQZœªÌ÷$z„rUxñTžÃxW%ThP%%5Uæ0üÍ_>ñ=¿J^zéÿõ+üÚßõh;‹R(.’BÁ$ ‘×Tž¾¥äÞdJ’Qæ9"QFAär¶Q$Éð1" ^0¬`8DtÄdD‹¼¶€"< !Œ¶$âÖÄb ‚ZÁÔ- ¾£«@8ö2N¡²‘º18Ä,þÿ]<þ{Þ¥W~üÏœ¨Ùÿý]AAC&Q@Ȩ•%‘d”bU5lÆdòº¯Ç³ÀI$ '’Š" B†ƒŒ‚»¤Brpd„WÚ7c®Ém¬"›rY®š€5zªOU FèIPá8©X@ƒŠ“ÿâ…úWÏ“FëöÏþ»Õ_øÒ %B-eT©„€…T¼­‹ÀE4Q‚¼öµ¦!Q$™wµGrCŒ22ˆEH.!9lô:0XGI“ BSªXhphoý±Yø_yédæèÏ–ø/¿1(‚ÒiƒU€yÆH¤Xæ…µ‡DžÔçñˆ)H[0bJÄÂVeë1 Rx kK·…Ö¢ 뀮^Á§jCéY|;ˆ³ÖšBi‘êT¢ªàBòÏ7ò?þ‚ÒøèŸj—ßõ{&ÚC“ (™ UîÍþ.üà“О_µ™áL›Skà$‰”‡'|Dˆ É"ä| 1Œèe”†Ý`KLá`e” 0;,–¹Ê•kˆÇ7Ž7v¢@Ý_]ÍÄsÿW‰ßþu³¤¡?ûÇ©zûŸ«"I”I‘ŠíD41øºr;-%ž­5„,£Q‘# ÁŠè"¼0²­[0zDX¸i†µµ¢ÜõosÆŽÖX,áâȾìµ?^MBÓÕ¨ Py­æm³ü“·äw|çL¨P÷ÿíOðá_xÒk¯S ™D! !%1±‚ŒyÌvòªm{ÏÌ Ý E¶í)8RDNia¨­{DÑW–ÀÊC}9f‡Ö4"Ä·@{è*Ô}ƒ*•(m YêÿöÙôÝßr¹;X\ö?þ'ÛêÏ~ÈC§ÂWG”PB²b ŒyþÖŽIžƒ†çjé¤ßED9ábŠA;XtêóqÏd6zËȈ%åXq ƒbß´Ÿ®§P¡Feê¤âÄ—¤ÒûŸëïøÕ úÅ¿õwç¿ë7y@£È$)5–X¡Œ…“,㙊Õír$‘ÄG¢| `N!G¼ÔÃi# À®0!óäHÎ×í rÙk?ͧp¡6U*­ ›É¿ýËø¾oµ¯Åý¥å—ÿ×h_BA¦’¥$(1žª7Î »ãdla’hØãˆêUÖZF$a„máŠU¹1³}°î"•ÖŒõ|ƒÅwðe¯ý!DŽØ%jSɉ0¬ÿÎoáI8:9*?ÿ—ôÿeª½IB)‘ȃ?Ÿ{³[o㈈)‘‰0Ô’'¶®èeט˜°#†´Öšv¹lªÜµ%J[Š* T\$‘®tåã_ò-á'J‰ô—¿ý×^yÄk®¡ Žd;§€ XsýA‰´³æ¼öÚH'#GÚ*çLBæˆÈ¹”†= £7ÅZeËTVžÌ×W–‹LÌâ-ªÔ³t4ŠI£‚ª!RAe,þü3õ¿öÑ3“‚^ø+ÿb:û=ߨYqY(5h­ÿUⶪîyóÊ7Z qäˆMÄ>$D°ƒ/̆#l‘ÌÖ’ÄlG×ÖM‡ÅƲËD"Nâ46ⱇ*L 4‡P*áýcuõ»ß:‘‹ËèÿÐó+ù ßýð””«´”zàÈ(‹N´«±ò„üs˜‚1p$Š€„NEá‚§‹+Ú±Ȉx°8²(bÎÓ®h‰IèÁâ‚As(”åÃozÔ‹4)¦¨~è#áê7ÕH‰gþÔg›îá÷|÷[kJ¦ EwìåÕ5°¾ñÙŽ`äz=BDŠÂÁʈà²þe›µ–Ø(;謓ù’˜ÖÍšx ¸ÈÚ h&ªÚaêm…6‰«éÍžNk\ÿ U¿ï©÷Ìû‹xñÒúè{¿­¼””BŠD2Wª6ˆÜEkm&;@ÄÁÈÑUG!6%adD€Ér 1Æ©€ GhÌ9.‘DÖâi¡‰Ç¹~±´‚UÕ¦$”BÁ0Õ{¾î‹}_ã¯ýh¹|ЯÞñ¾o}$Ö¶ RPP<Û´?mz£¥€½IÓÃtЧ !Á"%bÊuÁDXé…‘QøŒÈÈØ]Ë^Y,çkÆF#TØ9ù!ÏYÜäA(Ð0 ©r…™äyÓ¿ökŸ|¨ P±”Šˆ•Q$ÉŠ‰ ¶“õT9E Ä$¼´Ê'böµÔVk¥\+û(z‘ౚµXNop¦2èÁÌGß;Ïv8ù0Ïo>ù¦¯xÏe(P 2œ\%7;673â†3DvÎ*6rä&,ùÁ†Qk†Zt¥ÍSa C½6ˆè+'³L7 W,+ƒvÒ%¡÷÷ÖžwÞ6Õ}mQTDÄzúè÷åcBQá t®\‘çºìrvæŒÈ,È™A°Òæ˜="Eáa$§‡ˆbD8û(­0…EÞ}Ét£puè.Dd÷Ìçí韦‚ˆ3¼X~økß{Å!t”ˆCâAŒ×ª22»g`lÎŒHÂËœwˆ2 ‰ ­ÊuÄÌ‘œ6èt¥MmXmD² N¬f-˜–Ó[0•AK) }§“_wŽÒ­ûAP?]¿íWÛ7}è2éX"$ œ='jGT(Üf]±tç9[‚E€)¤S‚ÝrgAÄYD<"úº½‘qWúg@c*S‰¦ˆëªŒ³ïýÊ–ÚJ@åÉãjRAå^С; óBާ!D$0±´õ€E.%ad[{8Ø€]Žìc‰º G–Ó[ðÚ =X@œ‹ÅvŽÿ®.£Ìø:Õ½Hu_߬é]ßöµEÈXúÍé!Q"O]Ýä±ÏìHTN{ º7Vy8ááE„£³»Ü'¿Ë CÔ¾A·Žo>Êåäæ½pdŸ/ŠI‹Ô˜Ê£¿ô½ßÿ('I‚‰)i?Ø?¦l7r5a»Ó‡)ÛrIéd‚CB¤$r>‚ae«°±#6ùÈÑÌ""×Kn®°°rÍ8¹3Gnç Š'A“QíÑø®†,Ié$(ŸÀÍeØf€#±Ì³i yކŒH€K ÂÁ#¤ˆ#†ÜPl}f; ö¥…“v|c$YŸ Ùõè.w˜þ±o½†MðÄE:€b°HHÄ”$¢Œ"ɨÇíçƒ$1( Ĉˆ]iÑ'ȵŒè›nX[Œ¡³V{0\uýÙÏžºü+ÏGdÿ¤”}D‡<_V¢Wü£ï8%[nöX•J)¸"äé¹gS'@ Ú+e%bˆ•CB’§S™»Z$$@tƒÖ²ÚÇ  Bbœ`uë™6§¸êsy°·G•ö¿WÖ°ÄšîR§~ÿA®ÈçT©Q¨FK;œ‰‘ˆE¢ Hˆ„ }á +¼öº—ž²× ¬f+²p‘'hw™#ÄlbfŒ˜öÙötys3_ë\Dˆw%ÙÿÞA7ñ`âêDWzñýÿyéš®éŠÁ_OPªÁ°S!©¨vÏs1†Hˆ*¤qÒz€#†I8¬šŽk‘gçõh'ÛcD‚d‡“g_º¾Ä‘sìÅmˆìت„×–‚*pr‰/ÿæoŒE- ‘dQ&Éu¡Ã™srâx’'–#Ê[Ù/¹kË $Ÿ«¢h)"Ïùí2ÝÑ#J»jÚ'üùëŸw›˜çbŽly²ÿ½‰zÅÔýŽGkÀbèþ)\áŠ"º*o߇¼‰«Æ¨Ò°3Ý«G1Ï3D„™¬°.Ý+RŸ{ ‚‡^¯~Þu¨†¹þ’•›S\ï‹#U¦öÚRhNÔÛþZ]:$@ØÙp¦±†Š*(UJ gvIä»/ã&¾J"[v?ì†2GŒ„(W"HF$Ñ5]Îc·Ïî(\Ñ‹““e/—#%TF$Dùeb÷œ˜Œ ±Ž*i&Y…*ŸR”³Ag* ˆHHÂ#‰—÷Þk/ze”+xX„AÊ,)‚b»8ý¥aîÀzuó zË‘Û0QûˆÄï‘‚öÚ¦ù¾ïnHæq–¤È³xä$a˜Ÿ’³Wt6žÚŠaº@òÄ pÚ{E,°«·tá'L+çú[v{F£¿;2"¢„S[¿ãýÜÓ7eÔ`?røer„útê>ÊÊ¡êìá[¿ù­5ÏÝPùš­,+€ Ã4¥ŒÒ*/€X;Db™dAFfòHÂi#Z²z=_f;‚>[±þÜ?ð@”˜œ,O·¾ù‘½<Ö|-½“\}ëÕpêõÄO€¸¯ûºWJœ~Ñï?æíù8•™ ô2J̨CfNɈ „ùT¬a‡>8â‘rg<’÷z„" "õ¥E‹«ÒþÈ'Äî,ÈÍ5ÈÅvd/#lK[B™ê×ÿ–ž0ä#y¾žT2JÒ^Ë™BW@EKÀƒ+0 óª™3"HOA‘Ðéˆà˜†xD,ôÂ/çZõÂ4/ýÓóOX9²íC¼K<²åÊè êÓoý.NÖC¶{D Íe=‰)Ocþ²Î'FÄ<ýa#‰ÓžBÌ;‰W“í¤M½èÊ[õ-k*S'=-?óÏ#ߎÇËåÈNý¤ B»ê÷¼Àrh=œË;Ò­‹Ò(£ôÐ¥áP•`K  æC‘¥×^[iE’+í©°fÛ·Na«Þ?kú+ÄÅçÿUå1þý}D¶Ý ÷bGü™îwŠi&oÿž‡æKçYšŒæËy Q(F”(¹vÉêTvÜ#òYqãYP™ë^GtXº®Z¹^{k*ÓâùÏËøGzqÿïo®k‹@÷HìféUYß8Xà‘7ÖlËéŸ|Û›ß:œL«³–Ä!fÈuhá•Ê[S+£ F9À ^‡A޽9…Ç2÷̶?sã@ÂÙ£ns"ûù¹ç˜ýLíÄ,&íÄQS§ÊPW=ñÕ–·p<Ï’` †ó9Ú ØÒ i”VÆ)ØÚ«ˆÃídi®£‡…Q«Ú›½p£îë®Y71Ÿ›o»ÿ˜}ÿ¡Â¤´¥-éH…Áá£Áœ|ñ£êùÀþ¹$TÅ„ÉB¨ F¨ÊE€¼;k”£p: ÁȶïÛ½:Õ×þ3uá‚rM\ˆÈýÅ#g1ñùòÒ–T¡QtsR‰¾8yì±÷ÎŽW³ùa‹‰4jÕÈ%$D®)\‚ ‹ˆq¿k”Žœöh±,­¹^tÞ„$ÖÄ7?ñ<Še刉ëžÏÍÞoæ]Ë7§êk×^£À¤Ð<Ák] ‡YyŠQ>‘+Ú àViaM×öX`]uZ^¿tý³×Ì Î'»½ÊÙ©Î ’ êµÄ¡} íÌã¿æ°2Ey<}0Jª1•ˆE*…ͱTDPŽÆ~´([´ñ–_Ô½5>¨öÄé…[ çš5ÙÒj¯Ä«Ì‘á¤ðñôWÄÊ¥=¨ ×£åôxªÑûß~©µ-©„òj†Õ¤CBÈg¹) SYºuÜbɧm€‘ ¬n\›œ’7Û5À>Ÿ÷z!GîD%RØZÂ|óö4òpV¥B §2_žÀ ®ë¢º‚åü«Ÿsôk)~ä£ßõž5†• äDŽCZ´íuôuŸ–õ­õB^^ÇÐu8]3ñ¡Äyõ›{‰GdÄpVó¶n>þ×ÞlmN öš.Ù2 LÔ!êw|ñÕI‹Fƒb-¯ÿÉÿí÷wdö/RJž’èÙ«²]Ý4§èë5®Û[ ÁЂ8Éץ…ˆÜ#÷ñص1ªjX¢ªßøþ7Ô³Ii!Öý?þ+ò[þ“Fû”„©LÂC {\½vÍÀúŽ^òËàuÂ’Væ¤lÏó¯î—#÷%ÉN5刪„¾D˳æÉ/>˜æsÓÿÌ¿à7ÿ¾'¡óÌÅ$Ròå­r9·eÛþ’–7¯£WA­+ÚÅw¯ÞÜ“¹/9²?æ5 *Ô¶ì뾆èÐ=ôõ_5SeÑλ?ý/õü¿y;X™ÊK¾KÑj€éæs'Ôž\/2Ÿºèo1à5ñki÷bGîçudfJc**ûºêæ+ø¢'¦Ë?öñRüÀo00j˜ÈÔ÷u×hútrú¬mçKaЊ¾4îVΤ;#òZpdÈ5Ü5n6€©ñ¾_ÿä~ò¯~ö ûÚßzø™îr ôèЩ%,‹ÓÕç Šµ U§0…3{»ñëëË‘’áK€ M4Ä]Ã(yà}îß¾äxâ?™ÿÓÿÒGlÐÁb¸Uk[ð–@L·Úåå¶<ÎFK/ߎÜ'G6¿g’ãz nºrU÷…«–•š÷üšO|ÄŇ&4io-úE·9‹¦êølwÇ>€{©œg/.úÿ^ ˜övÁ± @aˆÒtWß´ø´×2ÊòÑ+öÅÆJ{ŒxÛ‘zouç×ÎŽäøÀÀuÔíÄj;œl F…|Þ:u|ƒýa?–ŸÈj¯Âv}ßK/À½päl í^íˆ÷ˆqìp¢ð¥Í«Põ𲥉eÏ‘eÜõ/ô/—Ù­9nf -ÎøÕ˜œj"¦9¿wÒoò#^FÍ"Œ×q/=÷nGÎòâNvd[•×Û¼‘=<-ysÒPröÉ2:¾NÈÕ^{HbÚÄ:į?Gr¬ÄÖ/¢ G`K;J²ògã¿ûz* ;_-ŽÜÏc¬ÝæÎîœ$c¼Âaõ WMØ—àœôµÖ«jGÎÕaT··õor’#î³oìeÆ#÷oOöjççŽwå`xýʯ2G.ÐaLÙÌ×S|^nýe<_mŽ\`Ur>ø¼üñyyÜ—‡Èþz{…väâx9ž¸Ûz¿SOø¿ÿjÇ#û¯çç‹_“ÇëÑ1f| Ÿ¯G^{D^{;rѾ”Wd7^ëxdÿÿ¯+"¯G^óç«ü²rä‚xD…WjOÎɛ߯ý¸ççEó»c–ùâxdŸ¼g¿¿ÝcõËÁ‘û‰ÏTJãm¥á.u¯×”#g#‚;ÅÚï>ÙsûGÒ+@䜎–WÙ~ÜÙŽœ‡Èùöb›{ÚåÒùïÿ•Ì‘{¨ ÿŽÜƒ¹;ˆ¼&öãÎväüZúyvdäÇø¼S|ò8rÇ}Ä¿â9²›™üe°#çä·^æ+¥”û±#Û‡óíÈùï•Y±¿ÃûW.GvOP¿#G6{÷üs½wæ°Ý øªkªÝ|Øûïý>ß‘Ï÷ž—zÅ:ì¢xd×>Ü_}Ë—×1>¼0f•ùeÙïÝ6Ü3¿Üy­W#¯Yüq6_v±ÖÚòä~òY»?÷:#ò8rß9êBœ˜Ä¯iòªrdx¬f®=îeÕ?^^}d‹Éíqø_÷ã“3»|ÙÅ2ˆð+ž#þp=íëž_ ŽðëÈ‘+ïüjc~ø§~eÚ‘[rõ÷|éÛŸý»ÿäõÎkíÚ‘ûé׺Ў ‰·NÚgÂ볿Üä¶Øgˆæê¾Î»u?þ0bÉ 0<±÷ Ý Äyü#ƒÏKŸˆ|饗÷_CÜçÀÙÚÉÞ÷dŽà¾†Ÿœ/‡ëõš`ëj!Èk&V¶d0aì׺CÝšåO±²“6÷ãLÚÛìȦ_êUBÄk€AS¨é¦7¿€.j¶¥­™}ÝkFŽæ·ó¼.²LLÔ  I!̱¬¼Œª<½ÿ:û¾?¥ýùvd8£ äµ'1?!&ž°_ù~úVMˆ•Uáh©šÎîÞ•½^¯s&å O¬ýQ‡K“ϱ?:Ñ^BÙ×…#˜ôA5×üÀWýºwÿÄÿø“U+UœèÚ/‰eq|ƒ1鑵'‰3{T÷m…sbâœA¹ÜÜì ±”E[ÂëÁÍÄÓ¶|âËŽÞöÆGôÉ¿ø‹/T¦2_öî/}<”†®^âM‡ÙEˆ€¬&Ø,Ù¤™ÜLj><=ñ‰Ä¹uðW—#Ä(Ú7|økßPjXÿë›ö_v_ö†‡þGÑnfÜ]™´×¡¸îs÷æ¹ö‚ŠŽjK²2²zÿÛ>ùÒsúeõkíñÀß!‘ÄäK[Ú’ü¯ù}ï–FC®¼Åµ²©*œþПY‘øá n,¹Ž·ºkýþ}SA3Ñ¥“@ÍüÒtö©–Ò ¼ÖÎtxã ßù Wg%,bÞ¡ê½ “ÿübÏ$áIÏ%íé¬É©~_ûó ½FäC[¶³7s³øßNI“I¿¦Á0u³/‰íäáo}ï{`ƒò×oâúÊàÆ©¿öQ’zMóïúù›1ö¡Ž+5‰Ü}›X3ùÇßyåúϽ”=…òµµ# Ô=1Иr…ê àÔ{,ÏâåÄ¥-í0ƒ‚x´(¹G ÈÌyăxsµ^ûC!Ú¦ y|$¿\;²Wîäîkêµ/¢ŒePavšÏÀ!ý`h„WíŠkf¦<ÓrÓß_‚YÚâÁ䉭ƪ Egµ× ů-GÆæ9 ^(” c×Åå)ÑÕ¼{Šóm"ÞÚ÷±’“ ]< €‰Ø«p°Ðˆ"éw®îΑÛö»ž‰Yî%!±3%?äÏÄ¥=X ó#åßaõïfÜ7»º³„ÓùQLD^$ ¯ùM~áüúˆß@w–ùúÂñí÷cœN­1IP Gë­µ*ÁÄ * õgã{bùžcãk%1‡hëž1iÁ4N½òäéë#L^3ùížÃóêå·Û•íëÙúÈ‘±<`¹¹ÀíØ¹eÛÏr¦ßÞk&âû®!Þ†Èòöwz\Ž«PZ=F'^«Ê¹-Oõ]òÿ;žKÖÀžääô>êìÃØgÉíu޳¼¸(n/bíçùe,í³ÓÛ§’PàÛ½1q÷Úiä;öÅÝ­³;ã¦å8ÁÁ#o]¼ðb¬SázX úKý2žWe:XÈx°Pigî0“— û­³o9o?îíù¯}û²ó¾¬q‰¯|IS\>8~ã%z©í¯Ö½]ØÿêG?{;®j˜Ì¾Wéb€| d¼ÍC~=82ìKˆþá¯P(SÃÄ0å2ÅÆ!ÜøWÿcçÏ4ˆúR¿ö$w¯gzpõ ׫ыr_ÙÉýÀ_xëiõ¥M@PVÀýÜÇ>ù ÏËÍQFbI×ê <øà‹O»Ë4ÄöIÐô¡'>õ9¾}_â˨³ë3~Ù°¨{€¸†Œ²ãïü¿„8ä òy“yJ`í'êÙS~äô™ •jUBñ®·Í&L»zöcÝ) â$‰ÁóËG¿´~•úµîÝŽh¯¡˜©éj‹wüg_ÙÀ–"¯€$®„ùl¿,*óQ‡£öÆò8¼í²ŒÜtfñ±Ï\sékžøÈøðêô¢Ü;GÊ@˜ôŠëä‚ W¾òöMÅ›ÄDÕQB/K„NF°O"‰hKaÔ ÷"‰E‘À×âÆáú¥!ûbÀhI^WŽh&VQx‰ªÄ)… J48ÄcÀ›ÞôEš˜ŠrU80Œtò”«z,5“—]pêçþõgE’VçýÓô&¾ÇúÈûµîÃŽ$íLÈmY6'¦2UPj-ptu2«¯¼ùÊ£µZ`RÞR%,B´Ú³ÓI´p0Õòo}Bøe’à´??îD¹ÇúÈEýZg9Ï~ O@óæ°Á•/ºüwð<Ð-¦mÚžU«.…Ìš'Ûf}½>¦cÌ:œØþŸ>MÌ*ѾGì2Ü¿¹Íó¹Û¯'mÅô‘¯xËâé…{¡ùϧ·¿ð‘Å{Ü §‡x¨D·zq¹D’ù”Á$ò¤fâT·2ÊJ«“8[”àÑ–ŒÓè½Æ6n|¹¹«·“§½œn†ƒKxñ-ŸÆ7ügG§Ÿýùþà7>pk¹xðŠÝ‹Ï?sã:ziͺ²-ZáÑÊ(£ÎçñF™D’AÙû¨\ôq{¼Hûß?3 fï›W yâí»æ¡Þ¾éíÇö3î™ïýŽc ¬+‹€`^‰'èÔM˜ê¤=õ«Ù5QR+Úê 'L9äx•ú~wã‘;åÀö' hj@kRnú /üªåür]¬žþ‡§ïü¶/}l¬…#&f8€áØæÙ˜èÑÒ:¸Â©VôÿüãÌôŠê#÷ΑÛñ›ÈšØÏmc*àÝ/@/뛓V,óޝ}B¾åXib ˆÒɘ,8µÚ£Õ^ôu'ÚÆ°ƒé~èg‰‰ïiÖkÅ‘Òjd´%Fáx¥‚ —^*P·—„*ÞžÞpt©©êšf¥DáÐ"‰=˜:bb:Å ÿé{âÇyväÜ×;ôïžÇ‘aš5Ukˆ‚ˆù š<4{á™ú„g+嚎1ëk_ÚƒÉÑ•7ÌfEÐ5]á`E_ƒ¸/|ä9Objø5éû=‘ÛâyŽ:X ‚g)”=0ªX…I«‚ ëÍ™Y¨YA¦ºg‰Ãô0Ɉš,^oŽžnæú® Z,&f6=d´í eœ@ŸªTf"Þ± ;ù¬(O]…óçi½¶9g_:Á,&myå÷¿«þ¹Ÿú±õ©Œ2J…@\ÙáÜcŽÃ9âù¹í öåßýlÕí¡}þ\`GvÏ+YLŒR¿ïûˆ鹟ý·?õìÁeRØâqæo ñù~MöÜ)O|{ÿIiK{xzùƯÿ/ß›TkžûÜ¿ý©OÕf}ïíÕ'ÓÜÇþ¬WÓŽ jÇ{7î¶/yrzˆUõáïþˆE_!(iÛë×W¸¾þäÇ)lÎ@ß›7ÀûúR¿¾ÁQXÅÝéð‡}Ý×¾=zä™)D‹nݼÜ:ÆÊá¹Ïüij¦2ÄçLj†œÐùЫbGhÿû‘ó_#>Tò%½7ÏaaªõÍ¿ùíÅëÏãG€ëúðyí5°.œ‰{gœŒSJ7sn730^%;²o”÷diñðu¯§èp,úùµÉ§?¼Ïþ€<åÊXûI{¶Î~ÏÜ÷zFÏÀÜCàôöu(j5$˜£ëÇΙ\Ù>¢ÄìôpUiÛªB7Û¸nL ‡§‡§ÄÙ/x-öX˜h¯1íøúÕK{h­ ¼,O ˆ—Û ôác8˜Í3KàáæR_×í5œ7æÅ§»øî³´î%9Ïžø »y/Ú§Nh\; •;:.TwzˆæÍÀ!4<¨ªS™ hMDZ ª¸…ab¦Oý/ÏŸº×nâ–÷Ú_]÷ÚuüÖw]zïÞ*K)/D² ÑWì–Þ{¡‚‹Âx/7~â_·áœxüUóµî«—wÐ;E±zò_±oxT€Ê)!Ö" úÖàtÒ Z¾%>í“ëÿ{’àÄú5åHÖ3÷v"ÐÌÿÈ—þèûÞ?ì¿–A ‹Ž ± ëìõ•«?÷¹O¬¯qÛ¦ÄÃo¹¹û:<¿OñÌ+¡A}ýñGñ"&Ï]Ÿˆ‡>à~ÛûµöBª©@ &qµÀ ?ÿ×Éûªí˜^§}ˆûùª ;Ûd ÌÛ%N_ìaøjû­<ñ–ƒBË2À˜“þûÓó§ÏwN®«^@Å’éåé©W`GîȺ4Ñ)¸ÂyèkêfŠÀ<–åšî´ƒ3I°@Ý Óu>åŠ^ǽºgó‰Ïg«€¨)Ÿ¦[­„®–HÜ, XQ%@ÅÒ¼ HÜW^âíÞ€ÇvÓýrë#w›‹µµ–x;û½ágçïñð÷"“œÄyQA¼°3ͯ’¹“Ÿ{é&öª¬»=uû{*U¸§YBtIÌõD+`uíÙ{žK ôysïƒ#‡"jس×Ä€?X£2ñ›Þ„Ïüƒžµ/­Æ|yõZåWúOÚóÅQ÷cî~Äìáƒ+ª1­§ëð¹çü0;”÷|€súç÷ysU(íÑÉÑÉå“Ù ÕóåGzvñ“Ÿüß¿Ÿðoúª¿ó”ødPá#+]·A1x{%%ÃkuU4”j¡BÇhëþäóL|n×Òmaqs,ï|5@MLj¬JË?ó5úJNN>Ïèÿåü7¾á#ïrݳùÙç_2I°§Ù¨miË>ßµòøÊ䉩fƯÀ´QtúôÅ510±e‹³çÇ¿¬xä.š‹ ©ÌQÔ.œ~Ó߸ì ĄҚ²ÿ‹é÷¡pÝ¿ûÔ}\Ö}ÑËÇ”Ot¦ËWÍŸl g£<Õ·°Žà±~qíµ×DÌô’½ ÙI™€ªŽ¸1l%*¼ów~»b)Båë•„ò/ýö‰çöü1\¾!£¬Ž+‘Þø¹_c‚YÇ•ÅôV±BW³ë1(^GaU¯ìOžßh â{³#wó/è&#&7]ƒú¤xøíϵïûÚ7¾§PÐF&åâÍâYõ3ï§{Sáѯzç£OLæí§á|RÔr¾ô+¬ÐÓ¦ºŽ“)Ó}""nÞ°Ûrñ¼‡û±#Îë&¶Ì€?üÕ­ãaiK«CÖÄ"*¼ô¿þß–ÚOדã7}ïWÍj¸vÓÁø%üÒ:‹Eáh½2𖈡•@/Á/Æ~Ó}ǹ*¯€#Cfó¨UQ¢¸qùÏ|·EiUR"ˆ*÷^»›ïù¹†ôá¯xÛÛæl‰Ó/, Ztzi×b…NŽ®ÃÒVDéЗÉÓqÖ¸[½ëIc¿¯ñ|D9ÿÎÌŽ8%jnÎùØ×ýÀiÛw‹TZT(m¸ñoþæO?þ'ß]«áDßþ ××h;½Ä-¬¦kËÝõÃ|W ^· É&À”V¶¦U¦ê*´6Waè9rWwA·Ìæ>”—ªèë“Rýá¾¥ª< R®]‰$Ɖ(±¸ññø£?ðMLjþSÝiÇ~Цu+ç× ÑÃI'ðÚȈ$–f†óï2uËùLî|ÞÙ³§ïÇß´PÛɪIÍÍúÊÉÕÿêkìwv(ç)Sá §‚Åú—þ>ôẑÒ#'Ÿ¹:ö½ÅB®±R }‚K¬ëN:Dá••®p0@•l¶þA0sj09}å)Aܸƒçÿàï= TÉ£Bfb‘r–q8¡rÙ‡§ÿλ¿á*„+øä™Ó§1`|œ_÷õIuS÷äG9"É‹• ÊT¦2à¦Ë»Q4ÏOJ«)Ä—Í‘õ n *ô…ÔÏ~Óïû`ªûÊTù¬o&¦$’ àQ¦¨IËÿâzêWÏÂÏw×a±ÆiìDßù5p‡žà³yU9LNåóKLÕ5]cÊ>oƈ“«Ÿ{‡„¾ÇŒÃ[“ñ8êë¾ðÍÍ7ü鯚XVä”Êí~Y8QV 0ËÕÓß·|äC_÷åu¸þ‹}°Xã+±r~Ý`ƒ¾p²/ŒÉ»+ —©:BÕÃj:¼17o8¼þÜ=päñ¡¶•©S®A—~à6 $ÍÈü6U¬€ ’H*Æ@ŠŸýÓ?¼ã¿zÏâÙ[}‹>öÖú>´XãmJ0°"ÁPØÁÄÃÄ蚎P 2uO(ûº÷2êËÏ•yÂÖËæH‰ÆT€9êaê‡ÿ?• NŠ’ *ˆ„€(˜’0‘ÍK?þ'€åüÏðæ3äü‹ÜÚy}ݬÑ#0“@>µ‰“ŸuÊTÝÆ×NjØvVœAä¾f' I@ÝKþ†?7gA˜¢Jœ„7NOúœ°åŠm™ð7~ËIûk~ëã·B'Od ¹Z·8U'X•7§k•;gƒÈh˜ ©BÑUA™Ê€‰+3¬·Tã{vä>æZˆT€@ó׿N‘H@>sÒ¯ìõ§áúG°€E'c³¦·J[®ø-O…éuZÂ.€[Xèëê+‘°S[$áÀ´š.(eª‘¦ÛÃbßæ‰—1ß's¤oLPucbíÿ½®PÎbe¯__Á‰Ÿ¿î®'&é8žD?i¡iUG9ÿþ/%ö¾}‡Ît8ÁIµ,ÖX!¨IùTROLŒÌr&T;ßwOõd_>GˆS M³~ôÿù¾",úÇ>scÑ]‡×kƒi‹ÒNd™¸0Z˜IÄåïúÐ|éO.}êÒMtk‡“°‚ƒ+Ød*§B‚`Zi&§@k°bâ¡}m ÝýV¯ˆ#µÍçË×7gü»¾Ïá3ïµ*E«ôÐj 1ã6 ô&o¿†åOÌVoþÊK¸‰åü7Ñá”OÐø^®°nX­“-B‚@²YQwxÛó{ûµ2[;rßSuÊNLxè…Jôu/æ Q@ÌI©©~øê»覻úäc—ºæÀü¬B뱜6Öê9ôX¢—+e¨O€"ŒP¬S™*\>\¼™w^Vé•Ä#ն왕*Öµe®“M„”f«ÙéAu¥¹rðÞGÞtõHªW–2 XàéÏ·“Ö/a±PK¬_¿47Îb­ `“°7PݘvGÂT'G7è]ñ™Žw±x•óZ¥ÕL~´ºÆR¢ ì>~ìà¿éáòr3±%bR¶‰”Dr‹Ï>%,Z¬°r~Ýc­Vb…‘ü`ɹ¶¡}Ûð ÷KlZÁäIÐËÉ4ÞK¬ž!X]On€Q¡üƯyÇôP)n[3¬‚ôITQFÃâÅOIøh×=6úª°p…¡ŒHšðúÍßKüÙÿuÙJNÎäÕÍý–€-Q8zìó‡o>ùžÇ¨ÚXÞÒ*€ Ô•ÀÍ?•O’F‹¥X¹“¿„½° ê<ÓjÚÍ :Ư}_óÌßîNUޤîV}¿G.Êkm>¦—g²VjýèW~ÅñÄkjº™+œt24.G"Äš)F‰›/~¡³åM9ð­~KêE2ŽŒŒ0d*À€©›y¡>8ÿÜÓצ I^ÓúH‰¦yøêáC—W˜}ÝÛÊÈ¡ˆ"‰$]Á‰eRV É ®?û¹tsºÆM×ÐbKXf¤ƒŸ0¹ùI”ñÒäiõƇ>Z/èågãï#DU× .ßýîÙjö«?$‰„Ð gg* "ùä:ŠæÖg¯™Ø¸ t8ÅÍ­j À©ozbtÓ®êˆï~Ç,Tƒn"{'Žè âõ;UAó€ìýý:ÌVoý¶¼ Ä„|Òo~ !j$™ðüÏÜB£ÃZu~Iý2Ê‹ºH†€&§†˜ƒ ¾á´<¹ë™2/+!Ô Ì[>ð €ßðN €I@I$EI•$Â^//\º‰k¬èKËp`›*ƒª8¥®¢ªKB$˜² ¹qÉ«mGÊÄÉS@½ó[kb  eDI†Â†ÏýâKÓë@×5èNU‹S¿„EGË*Ê>AœT0ÝåÔwM÷ÄQ½Z­ºŽúÍL_ŸwX¿L­u±îá"QQ¿åIÌ^üâï<òÄÚ“ÈɸH„žý…›eßw—>F=ßžªà—°j ¸¾pHªÀdª$ W<ñÆOf˜êàU¢¼¢_m;2òfì5AÝ#¾ë“öèòo¾ ¦¤¶ýÔA  žýù/A$t8UÁ.idyt®p`a(áäøýO~úðÆÇP`u3÷äI ›NÚ»ÕÛïi•>#¨ RÝÇK˜">ñuïXÛ2ÊX¸ÂI«‚‚’}þg>ü…¦¾Ùa;XÑÕ}\Dפ“÷áËf?…åOa%¤9ˆ5À´™~ôJúµÎãq N8~¦øêoœ€ A"Axí5d7âÓõ£7>Õ<¯Z,‰ék$”Œ X˜‡nùÿSü{±›_ã½SoëïC6þ^9r5‘<¦PC{ýÈ;¢ü7½±éSÅ ‚’ÔV«§ÿ«/Ýüüzºn×89:q+b&îe€+\Ýþ[ö`y+L,ok‰Ùg'öš”Û›“rÁ5mìÈýð„`K49®rpïztºž~ÿ¯:” I£ÇòS?·X@á%`XU½ZN×èš–ù¡«Ó×ö§ó0™.Ÿ(¸kÇöv…â¢ó*ï¥_ëöÿr„‘d8xäQ\n¿â©«É–`$áµ/CtîÆÏ|¢¯Â),–t‚5€¨–ÄÄhK“3W®ê:PeÀuV(ûº%&Ô=3ˆ¬F;3.Œ—^¦¯EÈ¢©’š¼Û¡>þê_3w€NH@XÞøÔçŸ9:AÄu°:ÁZ°èë&õu_åüÛj¶ Mu£1U×t@3䯈aÏŸÒòjrd“¤&ONŽpÔ|דWFA@èWןyf}㫯\Ç¢2pÅ ¦îáÐçD‡h°pÜÜj]“ Ô=1sQa™äæÚ¨YC‘¡ó9ò²òZCôL•™àÊá ÀQàwý–ª¨‚J0þéç?>'¢Œ¸ŽÅÑiù’JH0pè'-€b0ïСA·ƒ`KÀêi}“ÇÙyÞ–zƒ[žÜÕŽÜ휩³õC7xè²2S•Nßø-M”ñ׿xã`Í“ëW®xáØ¬A9ZO[}ݱ Ô…«]×({ŒyDjŒS¸btÙ½ÈçÆJ÷Ç‘°@ž •÷L^©¼ „ãåñ—?ðìÚÓÓk=ûõ•ëxþ 'hE‹^ô• fØWeÊž˜œ ªkº¦ÛžQ½ÓÛ²oÑ9âh5;Ѳè_¯5æ†oÖ¶œÔå!J¯ƒÂ•éXO×@Ýë[ßù©ŸYñóH=röÖ"ÙìÙ2gC±&.m^Yƒ^ ç_ÍaÏä5O® ½ÉgÏÑ÷Ñ•é5«ëamQS¢Re«$…%0G“…ßüâXª  õ¥EcDÉy]8È)Ó¬‰K äÌnž17x#gâ#â£í5_~ãÕO|^âåÅ#Cÿ"¦—ÛõR£–TT¨PÑ%‘f ‡–ó%̯Àyš†!†©{ÑWG勯•É¡0•!`š5AÛŒHÝöüÎ0MžK&ûEÕ3'å~•á~í“BêI€¦ObÒU}Íu_÷JÕÃ~ʦK¹Æ‘°¬[‘„)C{sZcпA YgV ™öñ ùsÿú¤-y@i2ôŠâ ä5꾞ÔI¤¦kºi;馫2Ÿo‡ùrTB{,çËùrj ÐWAÀd{Ì—uƒE׬h[Ú‘#`Ú«~ì}¨òô[ȵ\òòœ3zî±Î^ò°ÒÔƒ€©„¦‚ *wj[Â| Ì—h+Àk˜˜LáD–!JÀT¦éª®é2?J›õ¶çß~ Ów¿ðôtÅu¯Éó9S8î‡ìŸ·Þ¼åÆiUrT‹I;Y‹Ò Ì³ m™ûfÛ2 È \‘¥°e^UÝ%ío6¦ê“Ñ(méFÝß ‘‡ßõÂÇ&-¤ö¼LÂýûZ_ôÕŸüÅtóÒÉqB‰eJ ¯SUoi­ ר>Ï>1yrt;i§y‚tG‡Õ’‡šù™;DM.Oêꤴš_a^ Ô—~îĨY_†îÖ­‡§k˜c¶¬×u_£ïëüÞ~˜~ ·¦…ÉŸuMÓuM×m;LʾG(†GÒõ±Oè,"÷Ù«E«­¼ç/úîæ¿K¦‚AuóªÓã¾Æ-îJí ïõh'íÄ`¨ú3šmEð"Dnïôç©áiýü87“^q}dÚr,~ð­ÿü_T/Ö¥HâàÔkAõ„ºgWåë2Ó5r=6KÒ™cï9-È©O5¨AwÞ·ïŸ#cÇniKØw|ͳxìÇ_(q"Ò_ú…Çq]wl:U¸p8ø²Žó”©jèÀ¨º‰7aÁÝ8Âäµ//¡ïì+Îýuô¹Ïpz¢¯×?ùôrÞÃ?öÍÏ}ô?öwO¯]¦âðÔ õØÊT¦:=¼Õ`ˆ9`Âv•o¹+G0±AÝ$¾‘{í×+UÀ›)­ö§ùOû'Nñá/ý?>öá+éèCí䓟¼A™ÇÄÓNÛÒ3†Ø©#š5€­™‰¶«ÎK22åö_‚-9ò]¦x5?&‡¾ùCOü…[¿á§Û_|aô˜*Õ5¿÷ãŸäK7óL:âÚݬ… µ%¾Ôw¬BîŽ  ¬%¶ ¶ê˜œgþ_ø!^Ýst˜üá{Þô‘O<ÝW‹ñ)‡âwÙÇÿjÿà‹'u_‚0…éË<—˜8Ç"6ïß)ÁÔtÔkš®1l7'/?Óx¿ž„˜.¹´ZqØ0˜ø­xúãâ‰gêƒÅõ‰@W· ²hнéi éÀ„K=Ö0­q9>¡!:¹Ë¾‰»Æ#ç½Þá}*<|3ÕÉÁâðTïX‡‚'-ßÿÿY_¢éØ?Ü<‡šÎO¿ïk~øo3ƒšƒæÄt°ÚkjL8¿ëú¢ëz•iyÒñ°Ãhã`AÄL¾´]}þjšù‡¿ô‡x}éù¯ydz—Ÿüï?#á5]Ö/ š'=ß˾ù׎#^” ¯Uå¨=XÓ¨[1y*ƒ'Ö«ÕÕæ{ÞþÃ7LW²99ª¯ŸÉµ—{³Eàwk%¯ G¼ö‡§Ä2>ð’ ›ÙhäùpE˜®ák{§‹Ÿk–I—=<É<{öìh}ý|wµ#Ù•ûÝgr}Å/ï}÷ƒˆ¿O¿Ì¿ÊñuåÈ/Ûãþ8r/{îÒ/üš!¢ïagïÙõúr¦{¿¼Ýþ÷nÇ^-­u·úÊàÈkÑ?îËŽ¼Ú¯¿\väßDþGþ}BD¿^§“¾ ûp?ïûÿDþBn '¡u3#IEND®B`‚survex-1.4.4/lib/images/osterei.png0000644000175000017500000006704414141575516014214 00000000000000‰PNG  IHDRÈÜ2ƒ0PLTE3Zv94£8'ŽH(žQVm™ZVÞoTÔƒ/σRØ}w»…ÀŽ‚ö¶wúŸ“”",tEXtCommentFile written by Adobe Photoshop? 4.0Q€¸ mwIDATxÚu½}lb{– v¡½õVíŠËGõLG#Á5 z[£Á@™W^E\7O–…«¶ieT…;°ÛÊkÌpŸìbçÌö5dð=–Œ£xw_A®Ç”Ô®¶ ¸ìhWrEkœšx½¦å2UQ´Éb¬ÂÿD‰S¸ìœó»Øå·“ܪòó{åwçûãwÎùQŒRIËd2Š¢iÚåÅV©Tl­N×jojÇÇÇ;áõ0χöÞP4Î‡ÇÆk{µ·µZíâ¢v|\›Æ‚¼ÑÝgõJíí£VI,³óóÜR»Ý¾"¥Ó*h-P4Íú¹@ t²T\|ÛØÜ<®ÕŽ7›±Íÿ"þM$Ñ{–ùå¿ÚÛÛƒOP»j\ìí6†Áa4ò§?'µÚ«íR±(ŽÌs_´Û—g-#£e …‚’Ñ´ßï_,Š¥V[äÇð£^Ôvk»ë±·Æ1Âü¹žâ7¦ùÃZcðDD¡Ã±PÈüyÔîòˆâQ»$–J‘ì÷•„É%¢ÕÉ(ø% jÎüi±X7×ß’[ÛÛÛ=…C¼›1êÙžŠ¾9:¾@ ;;{‡$ŽF]œØ.­¶ŽŠâ<÷+ïgLÎ(-­Pt±û5#Àb±”]onî"”‹‹ã½g;»¡X$òˆÑ³|}š×÷ö^&¦vüz·@þ¡Èó¬žý0¤$Š‘ù¤u09C —W”¹Ž`€K‹‹«¡Zm³vïÙßYûOÆxþç‘ ÃòüKþõÞÞ›Æ@DjµñÚzhl•7²,ˉbK,æ‹#ÀvÓl» 0QÐC"—F£á<óùùÅìÿlz§ eïø¸1ÎO†cLÿÃÍó|,~ÖØ«7ÇÀ’ñZ-\b|PÉåD±(æ9ÎGg\WÈ%d2I¸Ô—‹ãb1°2=¶[%Bü¦¶w¸¾¾±ru°zæi~o¢Ö8Þk4Þ\ŒÝ>¡g<*ÀTn~dÄê§³Èø.Ä‚R (À„å#ùÅüO§wªµê«Í÷ÈÝã͉Øúú´Þqh¦ùUþððÍÞÿuü  ¼©IÏNm'üó¨ÞÁ²9„’ç8Z]ºáIß.ýÆ«ý~Î5"f³ÿŒ_mn»8Þ©†øÑ°qJÏèÜn~ŠŽk{ ÀÎæ& ƒÃåñ8|hÕbBÄë’ÒDº4¬š p###ÙåXh}}s8\»€·oîl¬ÇÜucäùéz<ÔÑ~óä©UE­Îð,£f9¤8À éb»Ýe ðD†l‚©ÿ÷–(úágæçöed#Üx]Ûû„Ì­í=[æÝA=Ã(ÅãÃÏbã`Rj*u‰+Á°‘µ.~Öï7Á'^j_›•KJ’_…â÷>yǸ§'C;ch>Þ ]^ïì„шƒÑò€Ë_?{¿7qü%d@qGõv$ÙëDÔEä €¹Ö!”â^ Œ‰(–¦Ä<õÛ© ¾þj ¨‚–£6±÷š_ðuV©ü>á#õø^}oü Ê2Ž`éõQµÝ¯¦½š–i–Nº<9kS(Y EO»Õ[­#QŒŠ,—òü»*{LJ„ã  F£R÷‘ñ|½qFøm1ù²Zçy†µ»@Ù44HÑ‹D„`g—à€Ql·ÅÒ* “Ëå¸ÇŽèÆôt(öTpÙ«ÂAþ>£Õ² ?ÍÇã|HFìýAdèiëFÓ^/à!Óý°ˆ˜´Á>¶ÛD©¿ÿ¡Ý.•qYœššŠúô‘Èò«éê³úññ³ÚÞPç°‹è-CµŸ˜ŠÇ‘%@°7h(kã!b@…Æ »‹ Äëì¬M8"‡0?|øP:=S`np¡zè°~\;n¼þ³?[¯ÇÝz£gämËë!÷á8„…[Ìèu~AâGÅ¢(—m‚ E}¾iµÎVK-ñÕÔËååë6º0!ñ_óÿEØX?;Ž2ŒBÁøH,þoõ:°þÍJPÉÝ0BaXÄCѳ¸Ô&¸ ô¼¥ÒY!~lˆbêgù¼ÛãdŒ÷?†Üóõׇ‡ãáØ·FVÎ(?àÌóì¸Ñ¨ï׈¾îµÆ\Œƒ°ïY"*/Ar!ZíË÷[—¥ÊK¶àŽæØi·ÛsÇžBúijØa½¾á#ŒRGÉy#èŒáx•x<^¿ ˜ãqðAFÿˆ’ _̶»P– ~j]¢°]¾{÷±UØÅç®—¬…PåËXðϱÆ8m,(èšr3LoŒ7†â 4ÕÄ‚… #ÃèºvÝS¼Áälõ÷‰@_¶Ï^€ÏT^.çrnV¯\î5èùØD#üºÎ‡w d•wÀÏËù‘o¢ÆP#^›– €ÙŸB˜¢S &JÚ˜Üð„–S%PLèË—AO ¹œgÐáf”Fƒ‘7Äÿñ0ÈøA唌ECéæðì}éú´ ˜¦ÐD½iõb[b ü»’¨?ˆóåeåíéJê·…ÁëŒê¿`ŒŽß ½®ïL€ï E< h£‚RúþÅñ{ð›`ZcC‚Ä´+Ÿ]êB9¡hê t`æÝåÕDZ;Zöüv†ÕëFotó÷cñp=¼ûM„×G˜?šË&èFÃ{µÃÆqms<ýz(dD :-á¼L3²t#_¥$,AÃÿþ]{kee¥àñDYv†ed öFC8‹ý&|  V”1ÒËðQcì°¶÷,¯?# †Cw”ZX\…LaW/&(_''K`êÿíñÙåååUçc§UY]N¸Å™ÖÁjµ [`·øúÄáÆ—Æ`ï“'º§@/ù—LÄ} ‡Â¯wž…ã@­ñÐ:+t'€ø!Kj×â1"³ÿ¥„º/ųÊïÄÕœFs9½V§×ë>ç‚ѰÛŒ€ôÈá%”ÃØgŒ»A®SGñ¡ZˆÈÖ]ø{%良81{OÅ£òï*Îô±,ü´ÒqßÍÇùñ×Už•Ü»ìp€Ý¦#Åc‡;GA>yʆâP–‰æ–ýÆiÞc`@ÀutZ¨ Ää–tQyÿ©sÔX9šš²¼MQR”Vn4ÞçñXʼnyòüf ¢ßhDŽ}úôi0¨{òT®TH@À¶¨]#óÙø“¥}Iò÷Fã£XýÝÔôä7´Ä`¶•Œhܽ„xä)£•`ïQwÔíŽNFzCÁw• CZœ¶K@(/ŽÌPŒ®tƒÉðäÓvc‚‰ ö%kw(ÑÚÉmL„&ÂÁõXèË»ŒN‚ò„’ÃÇ`õ9žé ö2º;wáéâAB Lt!E@ãø“›,ÿ©ÒY}U9šz<ÈZX;ƒ)ëýë=¾›"ouOhäÎJ–Ýaaú@{z£J¹Vñ¤ûv é!@á8°Ò Â.?½::ZY^‰N±; y1؈LÄÂ÷‡¨µî©¤øÈ”je„u‚îôõéƒöéS¥–VÓ&„–cUç‡ÐšÒëÿpéSÞìv:~Õóœ¦ÚíÀy™œ‰…w'ÃÝ»ò.Sž<¶8ÀºE•Ê^]„éÅϯ½¦þj$«†(ßG9ôˆIû†)—G•£••ø/û/t Ñ2‡¡ÃXXò¯AFÖå<2_­Fº^“R){¢@±«n ÀÿKÛívK÷£ö-!¾øÔi¼:¨¸gX·Ã¯v N*à}Cuˆž†”JâŠL¦(øÐ:Ê} ­¡\÷ˆ÷ºÖù«÷¯ Ë+9TV /¤ä *Cü5XõÐÐÝ»ZígLàŒ]œÆT¨ Ä“Ï?CóÕ»õK7˜`4øiûèíÞQÑ«ñ‡rƦ‡ÀÑ :ˆï>cÒG›Lˆ`è¿… á IX©-Åßo)ïß®¾Z]žr²ý»ŽxlÐH€C¯‰‹}òD{‹'&‹ bié+pĤúŒ(AØÿ$‚ÉÅÕqg»ñjà á0X=ùa°_  »ò´¿FĬ3›Mf¾¹ Hwýýõ «¨ˆ^ÿûRLA€\í¾Z>:˜zìmVÚ'Xx3€@åÔõ ÀMôšÍfbs †ØGÓ 8ÀܨgôˆH»Õþÿ~»Ñ¨Æÿ¸4õvIàÁÞÿa" ÁÔ*u×Úø=sŸymmÀÜ«\ ¥‰6©MÞϘ(HðMaº¹Hһ˫ïA¶ª¯V6&— §^¥f™R¡T±ø¸ íÓ¾+ÍæY%ȘL*;}[¼ˆPË(£¬ÊWéCû²üöÕJa&êÏÈêÔÝO$—£®ð¡ˆÁßv9/7›‰êÀÀzµ:ÖkBd94 bº‚– âI*MYX‚døòãöÙ««7ŸÞU<‡=ÀykD€(£ˆãcÀöà­NBD-˜kkkÕju·º¾O¯„†é©%§x —ò¤Õ~ÉoçÓÕû÷o?þNô°."I(ý¬\)(áPð©\7:gÑöšétužÝê/G{ûL}*ä»é†\ˆ…N÷„¡ ødì¢ùÜYéìÅÑÛN£rTñ8m¥ÕÝ$W@FÊCp§ 2)Q¬”*¢¸˜3'„jºº{qµ[ÝÛX›ì{ ½_uM.}W©Ó)•Ô{À(ÿ³“ö‹RåôÅÙûwG[GžTî·~Vc¥‘‹DFdrŠÑ!“ 2ÕU’òC&SXN•ÓÕí‹NuH¶Vè3÷ö"ÑT¨’Äê)dZ4l¨èuKèÛ©j«Ó9ª¬²…AÎåÒXÙkrÉd}C?´Z¥­Ê‡o*«3)¿ËËyý»òZ©drpÌ?Îí—gðÓ¢èªÛWÛ››µêî@5ö”SRL•ÄÉ ÜLÂFHÁô€IsIO+©Ær®08Èrv¯F§¼!ÄræËÒ;Ha3ggo?ž~<È{ÒÕΛjµ³»¹þK@¤Weé3Ý`BÃ'ÓAî÷4u^y¯$6 ­qujCœÉÍø]ÎÏ:”ŽkíÖÒ:-#ž¶¤kL[m± Î<ÿoVU€“HL‚¥7ÝðÐ`˜Ñð$…ÅHC•Ù–˜Y)¼Ìýåcö¹µ—õ«Õ»]qí1#Z%Ö@œ^]^–/Å”èñ¡h] ÷›s¯M¥D.ÚUxúP1ãˆ0:åOÄæ‚(®TTreÏ ‰U³j5«»ñ r9u¯ÔAW•]µáÛ­’˜*ä¶ëˆLÕf^3÷šÌ¬êÚkA±$°¿¡‚±ˆ‘±3ò{âR+µP(xÒ¹”g¹ßÁÚÑ}ëA®”r‚‹\.žJ d.!oA+®pÓéÝê´y-a^Ž˜”ê®YØSÉ<èëçcTÌÄô\«ÅbKLUV<3ƒVÖb×9,j0õ@Xð¸ˆÊ/JX?½¿ÜjeIJ'圮þràŸUûÍ}}`À®¯Q:e¯¡ì* òl„y$—ý"8µœZɳ33LàòÈAÓz5Ø0ePøû¨°øþn*Ӻ̀§‡Í¶Éµ1óÚãµI´‘: à»Û~~:F… !&¢—ët ±(®~–[^΋^or¨!lRb…”u@ö‡¥-¬)tÃ`Ì‹h^r?cÌ£¿1O‚t‘ìzz¢bAòʯSO = ~ÁPŒìûqQÌÿe®0üÐÉZôv¡ku²_‰™ëèŒ|yññôècI,ògïèèÚh¿Y¢–£¿zj¾ollRZG\G¡Ñ ffr ‹'«fìvÀ…uÁcaíÒuQAz:?ž6[­B.õÜ9ššu7tõ)I$aB º^&žSáPäIРÄÈZ] eÎPËo±¨U`„í¯Kò~½¥“³³›˜kÊ[¯À‰+ù¤ÓdX{`žTõõ™tôg]dBŒÅk5ª~‚-Ø ð’gexpp* ÎWâ­V9=ƒƒœÅâøQóVŠ!q¥õ ˜˜1+ûÌ“}¨ñÄ¡B V({{ñgÏŽ_Qã¦þ¿D9¾ä¢èË?Dú(¥hÚë÷;lÒee=K7¹e÷Y=¦€ûö³ðö~`:@QJaž1:ø±Züø˜ …Aº@ùõDåa²ðXœþÙgÒ«íÛØ-¾Üp`˜ó±¶“[æK———•Ir¢“Qq‡e73µƒtõ•}L8V«5ÞS±Ð óD«UãÁ%Â+-V'ÝÇ ¯Éoeób²àâü?9iž}–`|V>ž‚)NUfò¬S‰¤¹Wg—Â;”`-{ý¡A0 =»Ã¸µa Fõäóy  ¯b5 «TþÁÁaW> X­ÿ¹Tæ½E®Ë*xQüY!À9i“ÄפR«1ŒT–Æ÷êÇï{”á02‚ ¨ÅôÜ—Ÿ™±X-`‚A§4^«Å/Î$ó§uäVÖ'Ñ«sö¶‘)ƒÏYÚ^µÉôC)û ra“¦Ôk~?ü:0¤àS沚^ä;m²ª|áa'¹H:r8ùùzßZ++(÷>|µJ§Ãb½D-…ŽéCÞ.^Q!ÆXkÁ]\Çê¬ß‹á,xFÕÏV<…—œÏ¬Še¸Ë«[<ùøáSõÅŠG ,N'ݸ¹Ð+™0†¾©íÕ(¬48"D®ýœ@a>îµjÌSƒ ¡©d²`žE·µñýU§ENvRùç¹>3, Tè³Jã3R–¾¸@³Âß1jµx<ûLCã©ãðÔo+«©ù¬¸è[êbråãÕ‹ï*-»ÔÍ_¥_ÀœOW/Þ6%ÿàñ³&-SIG4˜a鞎““¨ãWˆI,FX @î­‚ y⤌0À`WW_\}?´…Ùdrv¶‰Ç ¡“c7,¶Zba*'rVKßu1‘‡îÿ `û§Î«ãú4+øõ“ dRº·•Êj`Š¥S6°ú2{±ôq¶¸8¿ð«ìÒB¹öò—Ÿ>žžv>” -0ža¿Ó®SÜp0a˜1®æRSNÖuªUìê‡S0í%ñlVæ¸Ù¥àÊ\ûŒD‘À™—/>@±RàQül¯â3"`U äàn÷d•TŒ1PFíæûïŽÞž¶ÞVR–ͱ´É•ß½/‘¤JH&}_eOÚÛ ^§¨*g/Ò‹/ L‡¿Ïçr3V‹]ÊÙ%ÃDé¾ÄŽ·Çk6êÎù×(¿÷Oß½x·ú±Óùˇ®<Ëö{íÖ@©ôNl‹³ÅâH’ûJhžœf@ Þ½#§-g­ËÕÖQgebÂ<Ë¥Rз23Õ}r¹; ¹+õ$<Æ‹ï¶:Ûýaµ’›…®¨³¥Rkqvïã|š“ÌRƒ‰³„dm®ÄBæ_æóß87%š‰ÕÆ;o/ªéµ5R€_ÊÕ÷¥ò‹Wgïß¾ÉMb~í§­q¥•ÍfGæçç}>U6“)41[l:ƒß%Lý?”*••™Â°ßeµ[þHvC&»Çcã½m³•«TP  ì<$@ŸàyÿjYt zX ŠTÃ"Dˆÿ¼UXæ¬>õâÉìÉ Èp òÅKHêJ§§­­w™UÐàA„vûMmCTPö·Õ·ßTÓÂuä2¢/VÏ*G_¼s´Z˜I &àN¹€X*Î.ÄÎgR!ïÍœ¶ší—/Ò ‚Öð‹bjf˜s²^ÓMÕ¬J¿»¹÷öb’ý4K«ß«_y±"vÞÚ­~šö0oœv` 7"Š™l1%Žø8Ú÷ÃÙ¥¥v¦•j¶.?àÁ^«#¶Kâ©XañtÝ¥2y?Òhåݰ·w\9(W× I%W0_¬–Z¯ÀZt†Åuê-à‚5Öbv1…¬õyMêß_Xh.¥ÚÉ—^œž,¾h¶/_¤J©ðñ/-Vøù[%A¥Ò8ñ b.›-]MSŠGE&ÿ¾øþÅUåýÅ‹ÞØX‹>ÎO§æ¸|q8Ësf/v=4—š'-`>0¤°9꩜E Ñ]&³Ït ¹²¯5kki›P¥­R&{¤èy!uÞ}º87W^N}˲>‹ —€ørV0⎠W¦Ò^JÁ«áW[|wJ|¼'÷3ûUû-ïM3}áׯ_M®¥ÓeRhµ­VƈG§/Þ¿¿Ý(lx<9’pó~@ÅçÏ%Y“W£¦.œœ4OÑw¡º¤2­J«Uja ìœñy}·È¥rûb»o«k‰t1ÑB€,SBä|zõfïU5—ûs6Ê:Õ´>½…´Óp^/z¼.ÌžˆBs¡)¶Ú¥- ê=?}ɲN¯Éú]r1÷øg¯×l€JšÒtaUQ+ïß_­4+¯*9–ý‘ÓŽ¡ Uã÷¡ú»4èòÔÅB*³tÒÎ4› ðµ]ÙÂÆ”8cŽšNmúNQ𠆯6lkB€àyM?RÜ;W?í~\qW–«l?k"Ñm·ºX¿`x±æ)...OZlLXÇÛBëXÈ-cVi÷šèïЋabÏ@|ËU ߤ$ÿwÅ•­¯Ò/_¬¾d=}7å‡<ȾX#…S?,,Á‚µÚ ' —ËA&Ê8“`N'„7fü—މ…û¿±%Ò¶j•ÒÙ:üKYªP}µ*V•åËšIt®O i Jx$JV(,d–Š­ÔR¶É,‰b©T=)Ô©Q¡îê<|‡˜„ÆlUÔ´8DöÄÔïJ««ÜJýß²NGß窻׫¾©¾»f!k.•R­¥V« ,ˆâËÜÚL¿Ënr)®M½BA?U2ýü7¶D¹ºM©ÕjâÎdß÷¬V …Š8휄o'™²WCY&§TõýÁEq¡XX\ K¥’¸’WDÈ_X—ÅIʲ.<Ÿé5ôNNØÊe°Âð•¤1Š.x„¿•"MT/+ƒ®Ç`²¥º#m—*É $‚Oƒ@D¶ˆL†ufÖÍ?;›*d^ÔÏ9—Åâu©h/D¶j‡‰†¸P2à Óß› Û”XZZÌ..f!Éȹ|¬ àMš IxOøA¢ˆ0ã`€Kæ“âH7<Ìz\ '+–©Õz4* &ñh©”†38FÀd©]ăù¥E1_ X­¬S¥îr’Z|‘j„ëŒÞíÖGXd.Ÿ„ìkØ3è—öšH‡CÌõúT„ Xþ1ð1Áöø“=i‹œßçÔß:,"Ý4ƒ(â¯VÝ˼;jdØa.HF8H‰¹™„Åoéž4*5Ëd"2 Cß+ãKèIOÀ ,Ž$Õ "í¤­žþ¢x°<4Uçùz”q±Ï9ÄdxØŸdýNoŸúk‚Æ?kµºTö?¢ÈQ3º&„´È Á[,ŠÙ<ÇÙoÛ9Ä㫯<ñøÔêÑA_^r3ŒË•äð‹³B’a¿>8Cz!—…S‘S°îª5[Z˜KS%©Ý¿ç8i™»eMïÔ—ëGGq7 ¿——=fnØ:èb5NŸÆt Â)Z”u¹8§ÙŒ2®×fS_¥r™w­3˜??êÖž¬ÑˆóüPÜstTŸíó|¬.ºi4ù1à‰ŠY×;Ü âbѵР¹RŒcO 3âuV ÂEŽÓp·8¿:4µ<Ôàã­zþÐa<îŽ/Oé°úÉ:],4jÉè@RêP»OÒj±šIOÜ]ZUrA ‘f2íàË<çe]×GYT{V¦Ü£©9`ŽÅx~yÕe$a’êXgÆ“eÖz‚ú ¬7a#™‚þžyMH#&…B£ÚËÒI<ß"çåüþnÀ9ñËÆ*-¾hðûõ¿Ìçr×¥nlÔÒéÀ.±ƒlî9Ëáñ&Zb™É%€‰Pð| ¸—ŠÈ¿ßKœ-õEU¯Ä«H­P<ƒˆDy÷#rbuŒ€]бˆÇ ?—Kø}>P0¥Ù Ú˜¦Ú©‚0Sú©À»(¤¸ˆÑ kG¼Zÿu£Q¿oÄØáø³Õÿ<u{¢¹èw‚,¬ƒ3n–}ùSà|näKÂDÖ»¸”©L xÞ½»|ׯ쬗÷ûYû#Åý:Ðf꨾ÚXŽ¿ÿÙÿ9!âëì‘Û} Š ­Þ8 x^oì5j;‡µÃÚþ0ÆÇïî~Èè‰ònȹ-¯ç£ËSžåÜL~ÆŒ¡ 2Me³%“ x¸äÌâ‡vé¨U\óyÎãaýö¡8¼Ðhì&{‡‡õÉPc§~pppÄÇïGݬÛxmá 6Ñ»ùh=úòèñÔJjæ¹ßLAŸ'³™AQ¨ `Rz TÃèèÚ ÆDüíDã¨QÛÛ¯ííí„ùXm¯~ÿúþ>ÏòQ>Ñ_YJïæëžF}Uœz¹œÆ›d¸¡7!ØÖ¨³LÒôç~¡€—ôøóO ÇÞ«ØkìýE£±W¯íì5v°3jÌ׿98bÝnG”gºä¢nP¢ƒ©å·G+…©™„ÏlîºzUèEeÎ…fª`qæ!Å¿—püvh•߃ãýqí¢¶W«MÔ'øXã8¾ZNñ±(o¼Ï¸Á +$UÔéYžoÄ_5oEqåñs'g"¹-Î PçWMÐI›ë•X¥ÉW\~Ö ÿÃÅÕÅN²`Ýugüõxœÿù~¼ÁÞwÇ"Ä,»)ºÖ9X>¾÷¾ñöíQ½\˜z˜ÄvòW*ó€ÍF] ͦðÍsŸ‹™@à¯æó`Xö¯§6Ž÷pÒË¡Ø/š˜8“\7ðuc}Ÿ×½Ïèy=6IÑ{â÷oÞ7G•Ê2#V«ªKÚlæuu¶%ɤ™E7”_=¬È‰åÄŸÕŸ.Þ¼¹"=Ç{{ãØPc"Ž`Wïðý âv°¤dëÕÅޤ诎~W~œ²™­f)‘zæùi¦Px貸~ââ?áæ]¹< O„ë|ÜÈGáۉ赿3@¬ÕWŸ‘W 1·2ŸÞ,a"£Ô6³:;rUÌ ¸4çÏåÙ€'Ÿóÿ?\¿¸º"Å] Ûq(¼šà'ö÷÷ãõè>ð¾Î3n‡Žeg§¢`ßÞ¼ýØù°R˜~Ü©‡ëÁСqÿÞ>ßG<½çf”ĽüöU§ñ¾ñéH× Ùú:RpÚÌÔååi« X,¬ëG~H•ËϹŠg£±wôþ òäŠÌåêá°%~€Ö…·l䑈ã‘C¿ü ;5Õx»]=‚lpp# a‘ù:¹ÓóË­ ¨22Žå8¿ã×sö¡X >âÒ^}"^çCá‰úá·ÀxÐy†ðn‡¢”Êã••Æ[®••)óË‹ÙtãÂ\gÛ™‚H˜-j?‰î~Ø ÅvŽ÷ðÔà ( Žì‡Á-ÆÁyñ<KÌß¿¬w‡^I__yµºòöee`£Ÿ´~\iŸ™Ú:==-$gˆšD™,«dý,ã9úõrì°ö«ˆWµ+2,ŠÎÇã¡Xè籉X,Îßÿâ[@F‰DŒ{!Áy_­¤ëéÁéèšÓô5÷œ:?Û•H€Ð©5j¯KG䬊…j¡Z ÌÊ6¨Õ£ ¾1î2^?¦Ç‚a>‰G–±ÓJw.·ñjå`cùeù¥eéÕEÄå©«­¦JøÍ©Ì¡ñ‚ëU³Ž¡x¬Ñ8FÓY»@Îø°^×Cñ!üëû <8+7q@®¶¸ù•o¦^¾üet²â.³â'‚ÆgRÂpÂbBzih/ ñšÎN»ë¨5ÒÑNJîµÃ×<„õX}¿1a¨†ýˆ‘¿Íܬ^G«˜ÜÆÛ>½üËÁ>' ò$]TûÒ¢N›y™á¿z *ÈÚíû¹ëñÐÎxyà Ž€4êõ£†;ã!8:äÿÞ „J#ÞŠ‰0°Ä½NvzæÇüÚd?ø,³©ÛL¤æ¸Õlž/$†A÷!Ÿ¶C*Y;„† 8wpíC2ð¦Vò[¯ÖÁÇ༾ómŒ½Ì—qŒ  ¢Š>îÌ"?&ÁÐ{% j 7¿@ `„^©õ OòÍ÷£u•™þŸÇ'v€3õcœ-׈D ÅõÑXü~Ìx?b3©‡ôAÕ뜜äÍý|ÔŠ½+µþŽ†Ë¶ÀÇÏæQÍH-Íu몢]#ìÿ÷ûŠ?üy=÷x±}üIè–ÃnèH|ˆaz"xtO÷š{ÍQ,<Ý&2/Çe!F¶[M^ïu:M²Ý/xwäp>Ÿ›²´ŠE‘'ñxÜëóÃáÌHž4){#£§Î‰=%×-·Ø¢„ÙDÒìsZM7É´CLj‚Å¿À€åx¼6QDüDø1 ó¡Ɉ ÄÝØÈ â*ÚÞgÂÆ¨jQ´—ùÓ5›œM$€ˆ¦k4È,(EÝg§ø Ÿ÷ðÕÄNèõ¿i¼žˆOŧB4 ‡ˆà´ð¥K)åtêIUŸÝG: $D°Çú’«Õç#!¶evÓiŠêGåWχvA¨&÷ãñh¹ïóá0¿ºX¯G¾Žð ¸`èK+u½v“êsRÑûb›‚ 50¼¥PÜ:iì‰Üÿeü¯ÏêËÏø߀¯c<Žpð˜©ÄŒñ¡û<ðô1â¶ë:R$Qa‡ Ð5&##ÙN Cda5apqû,žƒ©:|æ_N7øñW(K¿> Ã×:* ŽbÁ  Ì“˜{»þs½Ç{sŒjÂ-µ)ÀÃg5«TÿQg,EéüJ}•߈ý:òu`(ʯêÁ‰ ¦v aÞ êYNR‚}>þEL\Ü ð0›0“¼•ž‘çï-cšµº?lðÏ€>èªø_Cÿ³0Ä1å1#µ a³*“ ÜÎó‘üR‰Jú ™ÐhL7Þ7ϯòËõ¡zl¢9€À.·€û aF@ <|=AÈ/1: CߪÝ`>0I *>ÕçòÙ ÆÈOA>RkŒÅêG(·1HµQ`!æƒ1£á‹ ´õØÉ¡t(µŸŸ»õZíÓÕ¢€#&¯F»ßΪ?Cé!“÷ÿoHÝc±åûÑz8þ!P‰òdŠƒã‘¿áF#q8ô™N*>v›÷¥xxRl!O|^š_ xïm(¹o+îh.Zù:Ƽ >è9 ÛóC(+a¢1ÊõÒˆÖw1=ÉžP>NÅù°óÀë%^ëÖ¡Ñ÷Á‰z Îá}c̸Ê1…vô%Z… ÆØèè!4ÚuR?£„K¢ñKK À §!ÏgîÇnHAxžp:Œ&‹ñ¿ëŽ Þ°ÂÄE­£?¯1ñÊ.O4^¬0k€T^ÞÄ’ðuKƤ´†1À!7Äòð­!ò-ómô>³‰Š#"ǦʞϘHÏô#,&±aŠ¼ÙŠ òy,ÝÐ~–¾¥,ì*dÏ >€ƒ~"x Nñ †˜âfŒ¨ñrPù[f¬Žq° ÖöÀèÉ7ŸÍf‹ââ.ð«]¬†¾A¥':Å—Þç¿p#N’ðjŒAm‡©…‡V× %XsWÐ ô“¥VLD~qiQ\ÂcKίrÙ?K1hdô€­„Ì;¼Cy<`` »—÷ L#ãjÅdEq6,£ôjõðB–Ï•-Û‹'­v©´˜]­~¿ë–®P@¢!Ïø¥È²Ò]aÀß‹Bvʳàb¾ÅF7ãríµð’ ‚V)׃if~¼°¡fÛRѶtÒ^ZŠװK*Ý]7¾êÝŽˆƒu|˸·›­ë£Ñ)Ò?¢#ŽCØ®Ô2JÝm5$²¡øðìl“"Í¥nAµTE¿Ïçbol‹v¨„»Ã­Bæl詃J:"À·c?¹lgŒj¹gÀ$«EÓZÒÆË°B6“¡HÐ5Œ“%q‘Kr~Vs£zP=ØÝc7˜B£H¶d õ ž»¶˜ž}4šGÒwZÎ< ‚³³í% û]¤ùåöe«u¼Or>î»ôb F©g„ÅÖeÞÁDÂÀ·bz c¥‰öh¥ä¥î.Ù9cLlÂB³M•°ÕÛg/ÉäÆRqv8Ïúoì—#Â/‡_èÝ„åQÆáÖ2ûZüðd˜¹ ±ÇB§•¥dÝœ§Òí†>Ó¦¤·³k¢Eq$iå4~‰^rˆYxC‚7”(»ï cÁšr0n¾‡‘0q0J™£;êMND€`w˜ Ñ …"ÍAg—XÆsv V†Ù®WQþCßX„×b²&u| ¯ÂE‡ÜÀ"ã#"iŒNÉÐJröE¿àO €co/i« ³+2E(''âb1Ÿä8µƒÐ ¤6~?~|ö–ÑGÙoFý·¼Ãw :ýCú^`ü#óÙ!â°…ˆ0¶Ù&bBz¨^H®œcÈûX/á¼\öjü5Ï;”rv,?ào·ÞÈÈ“# ·u:…4âÔmó‘iƒŒÁÀüˆ ³R¤ô첃S¹x&ÐZ,âñ Á=ûËõÿG®ùƒˆL.}ôèY6:Õƒº¹µn}Oò‘½k¹º‚¯¤ž7£Õj©rºê‹ tÒ1Úûn½^ \gnœ¢¤ŒØX "Ñ‹˜€Y‘`ü?ÝsšÒâb~1ÀY$Lt÷ïÇï?Û«]ÔŽâA¢•É£XIjýBS($°ˆ%ûî°™B®D…gzggO€ñÝæ\ì¨j}l̓[瓜‹CL´,ÿâÓÅÞÄÖ:ärìúdŒ›« /‰î“TŽQ^‹ÌlᤥgÏQO ¸ënÙº%)Œ$³Ã¸ÍÄqë¾;~?¾¸Ø«Å" ÖŒžŒ•²h cœÒÛ•vœÈ‘úÜáBÁ£!ÝS´½'³8‹Ýõ&¶evQH /,Šóy¿—Ãã_û°±|õ¦ñæø˜¿6*s,žÈlÔ¡'VV§W*õdD&SsÃl"S18,¯fgÐ@JLÁfr>52"Î,\.¯ 1qL×LJÚ!ü?ڈǡÕbÒ§v 3tz‡’Q*íÝÃ'HÌ*ò€V*ñ#ôéÆEº¿Ï"Ŭ¹”J¦Zù"‹£•”\~o(~ÑX­5êß¾ŽiùýnÇ/Zf;#ïÁ´÷‘Ž8&B+³Š ìu½–Z÷Õì xÆ3”K\QlŸVÀÖÿy\уFãÓjãøˆ¯38‘bwàL®ôàÃÕj¥N1”DÆ -¿ƒ`~0ÉRRÛ?A%›4/ŠqU9Ö¯AéRb£qü¦ 7cϵ}²Ûl Ä= Œ™ ’®d ¥j6Û\ º­³WívSH¦ª•–XʬNƒ-$ò?j4þÃûãÆq#@˜ 8Ü+¨Tª•µ]­SJLW‘J6¥#Ádr(©N™%"LŒ|û¬Ô^ÄÊ öWpI 2Êt,ÿ}š€¬c’ãuKúšìjÀBEž Ã%Lð÷á9®íú XOI«WÐΟ©ô*Ù‹EZ”°­‘Ñ7ÈZ—½×¯¦ ýüÖàf˜ëÚŒ4”Ù- IÆfÚÔgV‘â]É•@¯…ì,Õ]õpÙÞ:YH¤Ú"ø“aÎor¹¾ÞØ‹½oˆ«3@Øòï‘ñ ƒƒ3Xø7›>³ç6ÌD…&ÍJ™N€¨^:&GL2)1•*ž,æç}œKºhI£±Ü¨ÿoû·7I`˜ˆPdæ±I,p™ «‰¤Ìä_ÉÞ…V«ƒ00!@ˆÏ.ň»YNŠîäì¿Á­Pü»!ðÂLDÏxX¨AÎË×W6ÖÆ¦ñ8Gaîò NšÍ>³IÃyr9E½(\]@:N›ÅL±¸P$‰ R å<ŽçZñx=®ßßïU2rI¼þ“§Æ¦'×úû‘p*‚~GªÂ„»JÀ[*d¿Ÿ¥p™Dü›'‹ gG†çñ`@MœÖÀ7j{«SÆ¢ÈûàsåR²¦žúP•žô@ÿ®Ï<ŠÃsæÞµ¡‰ðä€ö÷¨,nÆ@@'`0³ÅÅ|~ع#ñ=ÚnÔöðLžç£ D©ßb Aå˹ójm“@¯cf›ñÁNèš×6ˆ<”ê÷©âR6»”]Ê`÷ð„ä[ÅOæ£!›ž¸06ê|Âw7Õÿcõ#‡Ô¯û{©Íí«..e}­üàAutíË€p’sF°?‰AÚ¥!ñ ²´€«F¸aÎâ²#KÀ>FëáZ#|‰Ï· ŠÑFû/tRÚi«nï^tvw«i%½6ðë6ó7Îs"Å”@©wGFAHL6JœÌf‹ ó#€G‹ƒ2ÆcáúNýŸB®ó¿²ü¾#‡½ý âap^r‘ØÄ‰ÉtõÁÚèÚè†Ùöy1Q)¤Qd™ì÷ŠÙÅ“f·WÌ \7q)ïÈ;‡{!È =ú¨ «4ŒÃNc³¡,½½ýf{w»zýàpîÀó˜ÙŒô²ªL·†èÁQú€NH«lrdžã,ì—˜y`‰– Å_ï„ø8dn¬#9p;z0[Gñ*W;ðT;˜µjÕ¼¶66´²–˜ðÔ?©ÆÏ¹ÀQªìBV\ÈÎÏ[}Vç´vKÇZÆÚÙ 7x’ëå÷=:Üy˜åj éÿ0Ão@)˜ÐD°àòÀd,é¹á —Ä(Åo!ŠH†Æ!ÚM<‹ý«ú·‘hÄXÿzHïÐËÐÙ&ÀÀNŒ01¯"Ï­h¼ð=Éâbj6IÆßÄå†\rÄÊYí¿åúØVÞc¼?‹ÅÃüÁ}Ï”ÛRÀCi¥Ð*!HšH~WÓésu€Ì˜#K|>B.WLÍÂ#uÄêÊnÒê´Z4š›±s-3tTŸ E£=AúG˜`ò¥M˜›ƒ×w¨•X3›ûëÈ€@Y"SÀÿÇ8N³­.Öb½Î{ÑzzÜXç=žºÇ ɯÔ{ƒäú½ª.“—”µ*ÈíZ©e PP„5_ͦ ³`êqÞTIÃ~Ödú\é”+÷ÔòAÜf÷sË9>w|K†p_H§±É[6«UxûÀèŽË“×gVȬÃâl1HÈq&2£³«nW†!0ê£<¯çÃu7{ÀGôzV¯ÔuGÍe‚  ¤ÏÒ@ÕœXPº!´ôˆ‰&]jÏ ³`ê‘^Zx}P1…Lv»Æ-§åãC9~ˆ_vG†}dW^7‡®•± -m³ÁÒˆ>æËä3ÑÖÙæÉBv¡ÙHf¯„8¹©ñPŠn•âk,=íGêC?0²q·^ɰ¸~FÊ {°AL0'ª¶µru •é%xH0Ln¬H&³”)"ƒ™^·4,»é{”vÈ•û>òöïóañ«s@| ö‘| X²€l€GÙL8ø/ÕìlBÔ…¥…&’^ÏOB”>ˆÆÎ½º>Hào´Œ;r`4ÖTªgdZG”7F¾5BÞîfõnV)·Ëºõ\ñ`K$Ž9!àW³9!ñϰ“¥ì,ø†‡ÂÓ†¾ÑÑpðÁƒ±¿ñ²º±>:i[¡„ÑÈǘ}ýò=@ä‘^¡’LÑ­•Êœ>³Ã|ë‘0­ÌB'|ˆ2[ß âB©¡ÑЃu~lºZ݈ñýŒ[©Öó‘:x^ÐV=y’,7º>–RYQ¹Á&V ˜ÏL2Œëik@˜m.µO¯óÇã»;ëëë“ëb,´>¶¾~5]õ÷;r½RÝ/öÙ¨ñû…¨¢â³Â‰°oܭÈQßp1 0¶qp€žWÃëáPu4hëøu£º‹Mò]cäãz}DYù‡Ì~ûŒE¦úL&•”e™È¸¡B5²0¤m*ª×ÆÖ>öÏð;ëéðæáÛòX8ÖotPú¿q€!R×Úív¹òöžL'D…*ž_a-!Èe› †jµ±õÍõPu:¶¾¾»³‰èT'Þ‚Ûò #×ëCËŽoÙc×; SP~çäKÁ/ ão¯]U¶SB7ç=kS†n>Ýß …ÆÆÆ7wkgwwìuµúrƒïëc°Ýù$ìÌ=à;«¤íßAÉhŸÙ‡§#´ŠVݪ=fOš™9)å=§zÇjµÍÍÍÚæøîØ.Ù´º^ÝÜÙ‹ÇÆÆ¦Ã`erG$ÊÄY/‡R¯µß:\“«=â‚8,Î$Áß™n‹ÉFD¡y]Q9¥bÓ¡uDewwˆU«íÖ6ww­M Úèä$£UÈ!½bõÚýèÿÆÁ®»9·èñ¤ÀWRÏ…B¡J ûLŸ‹+ß[%Ý™í&«¶^Djcdq(@ÙE8æôÓËPŠG·1ÊüKÖáPëì×eVÙ˜W¤ß_€Ô¦’ö™×3²‘!s*aòâŇ€P¸ùùñùÙÙ­Öª¡õ £“{O_ë9Ê.ß¿ðT i±,"‚¸€ÒÑÓ¥Ô3›j¤*×åÇ-2>ŽŸ^âÇ…´Ÿþm}³Š½t:c#«üö_`錼¤PH§ÄÊéé)&²•bà¯÷NôÅÔÒéG\¥ÔyW¡ÖÇv@€ ²ü¸&-\ÝÞC 2Jˆf™GXFù—ÊG¤CyjEL­4 M!#…Lá4“J¥ åÊŒÀvüiVÈd.?}ªvÞžV)°¼ Ä‹î^O@fs»Ò©í„B‚&Drý#Gô´GqÊ¡’I§€’)g*Í•Bs®Œ|,µÈGf ÍÖv w×l Ôº“ÅÈRo骽ûëMÐÿÑ0£Ôâ,'ÚGðdv2ÕëI;,™rª|:'œŸŸžfÊåJEL¥ ƒƒ¤™´gxa¡Ù/1ˆý]”r¯½6/H›v(!S^ooÖÆÁŒÅzuZœíÑËÔäh ¨õŸ åR¡YÊ!³Òg[éf!U^) &rDUæÉ.ýw™æééÊÛß­¨B¡ Ö‚vñk:UЖq°dÁ »åò¹»Gç YÈW@R‚Ð.ÏÍe2ÕÓöùe¹ÓS ,e1e›±iþÙbKX9­®½]¦¾˜(ÕàåWoºø¾Ú%PH˜èz´:,¢°`1R)±¼µµU2Uáô´y~Þ<í4Ï·æRU1•<6‹ÌÜÌfZ…jµòËtàW”<†‹¡7·7áÕW¤gìBZO[ÛYWFŠW”Ö.×ë_üð±Zi7Á—çÒÀ¹|_aE(WÂ`ÂrìY\(´V6ªÑ ¤Ô7±±ÐNu—` mí!»@ß …FG{Ÿ*Él…V/§õ4侕t¡²%¤€÷Íf¦y¹}z¶½Ý%)‹Ë!r@¡Ÿ„”pš>æ2ç³Lù (wÕé\fæš§é•‚M°™÷rkr8•ZYé<5ôÃÛmÝ$Mv¨0¨Ÿ;¡¤¾6B+´Jˆ"<` ›·NÏá­ðlwÎæ®¶ç2 Ø\f«RI&† àŠ‹{Ø>OEЛð$d ù›«+ÒŠzÓP°·WÙ‡™whÓZZ¶"T NŸ—A5.ÌÙÜöÕvçj{ûj®|ºRÛŒ¸¢æ²œàtælþçð‚ nªÞ¬I¯'XHk–Áx­FzåJÌ01è—éÔ=PŽtóü”ýôüü¼½Ýé\u®ÎÊYõül.½’šÉ'-æG/qÉ…™ÔÀ㙤 W ñ㛵.¹º ‘–ô›Ý:3ɺ䤑‰ZMýë\nWÏ/VBçjîüê*}†°æª§)ók%Àù—I›Ó‰˜ÈCàv±Qð´ž`¿wÇBcÁ~½E)µËj1:íI‰™ °¼9—Á*_mãÊM`;q³Ë²â•HX,VHæœÖa.ŸOÚ̾ x²M0!ÖñMw3n§Õ«zµÝi’/Ò‚Pž+ƒî•;g¹ósܼ"í÷ìtζ.Óé‡kɄ٠f‚vúÍþ$ü± a,4¾) 5ƒºìJr³¶;6Æ÷1½Ê®'$_ï©ÈdÎÏ;óÎi7—m¿¹ºÓédÊUân—ÓŽœÅçã8Ÿ…ØÚ86¶[»¨¾Ùì #‹Zh¼V/­ÒÞ N· •¹­íf§ÙìlŸ‚L!²§tûª« È‚ÍN‹ÔÃú,.—4° \ÃHe³VÝÜ–vÃïÔ0”e•îv$¦3™­2Øömµ ÊqE¤ ä—ì|« <0Ìb’z ¼¬Ëë·J¤«¢F/_E4@×q=­!ØûTgº0ÊË©ÐéT›`«:ÛÛ§ârûfCçjkEXK›-'«¥º vN#ùâKcu|´eíñzh}œÐ*ø Æ“ÐÏe©Š°5wÖìt¶ç€)çÈ“ê%A† rZ­”¿0OZÌ*ÅõExºÉôý¾àì!<‡<\âøôØh(ÖÇ\· táhʧ™9A8=?Û:¿:;#ì8›Cr½‘piV_Uk;]7®|^¬÷Ÿ2ëªëÀ0dÒ~4HêळÐý]ð¹`ç„ÎÜÜé6ð¼ÛöÜv•h |™ƒ¤þ±¥¿Ïb!ó:ŠnÓGwl^iœ óc ˜ðV}£ d¨J2gïîØúQ%þl rpèlS¶»|9ÛÒå5ó¿íÕ˜qE­4¨© ÕH²ÈÀó~rc£îQ’páêGxL–ÅžX;YæË‘¼t…Þ éœ_ŸUvÎO+eóÚÃè=§Ú‚·(È”½;>¤ ™È€q`lº?Ž㓽h€É¬%kgÕj²]ÍVhn¥ÓÍ&Ø«¹í9ÀlÍÍmuP¶%.WËŸ›&;ì$Ë@ÿqwa‚Œ¢õÌ$ÓÏŽN†§Ç&G{ƒ¸Ø2¿ßïõ»4‚PVÊÂys{ûìüêü‹ƒW[W[Õ4Q”±ÓôœP5÷GúzÍ&q‘É ~V³T·ïG†ÃC‘Q†çG{'!™gÌLÝG³¯ÏYµÛ>šÍót» 7©A\I§3w–É€FL.·ÊeË&»S¡~:è†E ݱK¬F{!¥Ž0}“ H/ËÂùqLZ£áüv¸"TÁ±Ÿƒ\•Ûi0-@°Tµsº}y…èTÏE0õýæ^³ÊŽ¥yÞÎzXꦅ ™¡b___XºâE—ZMÚ€€^^–fä q)èHø«‰F¥sÙɤ·ÁÌÀw`û«â@Ú¼Ök2«V:ù#­ƒq ×»ÉÚ ,ä8úûûzU8`¯wåH1—†¥•Ã+馆`«Ùi—«§g¨HúEõüüòòrû¬ áê¶6O:•¢9dœŒchˆÒÜ@!â@ɾ§sFôN—Ååsº€X¸ô€û+ê•J`IyK‚uN/·¶NOÛJlme ö>«n¨Vª6¡ßY*(–R&Ãs0OœúÜIJîàeF–%8~»~t#SB.—´¥°Rh—3§ýTO·ÎÁR‚MÎ̵Ϸ2—[ççéJ%mÁ£'ÚU%–MØUå½ÕI®AaÕ#Ï幜GÌçGùüH>Ïi¼^µ}%Sª™ÌöDt?.ÕfgT§¼•>ÅÐå´¶õ[pÿžâ1>ñCqJs«E(YÀ#Îã ÇíÆ3Ñ:ðDh”î/;ôÑ:C”{H®Õ–,ŠKG‹íö§ÎRÎ8ßî +—”A'A9JßJZr¥?6•t%0‘ŠOåÄcl+Ñ2#ë¦8M|5>äÆ6æršrxÄw¥­ÖÙÇmñC»tvv$ü<çÓ¨¡¶p–I— OL§·WÒÖ‰[eWR+˜5¦p•¢Ói7ùh’ê°O ^§¸Õ¡wñ¡:vVÙDÏÄRéÝYûÝÕQ»UZj¿=E@$úiW¯ˆ%€SÏqKk«Pn–›)H‹2d à3¢\¯Å¬!{€^_¸ü2å?À&à_wÜgôJíöˆ%±ý0(]¾+•–ÎŽJÅÀ<ž ºh¯XIéVE¨¤Î…˜˜Š*à»!% )K"ád­&“ÏÖCŽJ#Œ~hŠ:8šj4ë÷#F£›QËå4‹ë!ÚgÒÍíöñ¤XœŸ÷»|œ—µ~¹zZ€Od*ŸŠé…BÒ+þS!õÒøÇ@.P™/äX5RñÕFc*†ý¹d‹R§öãER­³¸Z´ôþ]I³y?|“— T„B:UW°ü”.`ME5)ˆ6“xÎ.C<¤Á±rܵ=Kö€: ’q<e»VkWsxÙUwܼ¿:mÀ©Ð,h£{34kÂJª V°ÐUXd²®T9%¬UòB`p&á1³§Æäž8%Z9ãÖPcgâ03: rêGjöOKðH}‹gØ‚™]xX‹=ÑêÇßàç+•2`œ(`…H†,nØ–|8ªÉbòšpƒˆL«(£ž§ÞŒpc§Ûÿ{ £U*{h6pÒ*ár˜³6O”qNw[ü´ÒcÓR®6WVpjXXÅ•™Ô7©D®àI&ž'À¢˜¼VÒàúÞ£d°ÏR«7;!~'6ü µÖaäçÄ“î\>(ÊÒR) z°Wƒõ^·Ùˆ`®’Nƒ½|.à&²ß>œ)äf,‚á²-^"ðH¯TÊåzý–H­Ú©ñ¼ñŽ‘Cˆü“‘b±}Ò:Áu¯¥6Pk~‘4Sºb(TÊ[% S95(’R{›Ë6è4³*µ Ì:*étZ­Î½€€IíâÓt-þ9vÊuvvŠEÜûÐÆvìñÍqØ’cÅ SîD‰++i¨\*õ¸°2 »Ç:“ð'ƒf§Yå•öHÐ:½ŽQÃ/‡‡:~sñšâc ÔBpQœš[,-ž´OøNÌ/æYìî&ŽZï©üRùZ?,?Lç’O…I ær‰A‹Ï©¡ U± ƒÖé=²ë•z–:†´ê7¡}æožðŒ\n—ÙÈbpieO²K‹K‹xÓÇÑÒ2ybeyåa \øYz°Œâåñ zž³ÏYKo¯×d§»7 èt¥Žeظ)Èwñ†”0hÍ}‡V‹›Êi .‚3Y(Å,.ò{ñú*$åv{~[© ¤…ǃÃ3Ï_æfVf„A‹àtö›½¤Q Aà|¶ZN3je¥j€Ê¿9 …Ìÿ—àøåî»FF€ÍÉâRv1Ë8?°„ ‰a†eå·âÀãBþ·Baee&ýø³AÏc'k´@¸¥¡¥ñ{€dïÑ«•@2ÖNÕø75\¬oÐ3ä ð„õpù@6€í'ó¸`ÀE4Q#-“d=îÁSI=® >{Öf*-k–‹Ïn5‘ê-ó)¥Ò®sS{ ^µÐᓯ#†G £FUXˆW–@¬O€9 í~\¹£é.ZøAî¥'à™Yùæg?Ky*ɵoúgÌ, b±ÒªëÛ Ú¶3êµ^ 90þÍq-V1_#€‰[h5‹R,âÙH"twE­èyl{™ûmeø›Ä_:S?óxæ¬ÅnÒ\ëJM‘:áz èÉqcç0ÌðéÁn„â¢XäŠ#àÚGÀ4?4Ý®|Z­Ñ{ xMˆéaÜožûæÏs/Á*N:Màt½7‹‰‡]Ç*Õ:;uq|qÜHC®¼GNvØ+ q‘VVÎÏ»PÕ±kÂ{ „eÙ/š²3ÏÿmåeÁ“p‚ËZÕØ«¦¸µÈ í¨£R­¦–qÐaû%Ëè¤p’ òïrâHïw3{â펽ÙɸëcçTtæùŠ/˜ô°3þ~¿WÕ_à»ësÔ˜7ë{ÔTœLxŸ„埅Fº ‹@ÉçóÄÄ“õDÝÚë'7²±g.Ǿ|hWØ¡‹£ 7Ë+7÷mØUoÄãáȾÇÔrI¼@¾p7Èù}jd‡÷æš/îïàX~ÆÅC ëc\õü¨Ï[8ºçá˜*Àïx¼þkÃý¯ næî~œ×°ÍæKøìêë1µî"`ègsGÑø Z&{˜ñ·N¡hê;#;xÏÕ~oÄ÷#¤¡›ïQáyqõ¨ÑÀ¤U_‡3¬ŸkbÝ­LÄ-H¨ oÜ÷Ý8ëŒäÒbpÄ,@\° ¤F’_Y±ìÖ™×åÊ ‰Ÿ>|Xõøq1Öw§)-»Ya…¸Ë¤5¯ÔP=zŽ֮}„ï„A,à2–ÂøvŸ÷úDÿw/'Š÷GC8Éæøî¹&Ù´3Ò¨éÎ=à-NÔA]¿‰0o?ÒK­Hƒ+B)#¤`>ˆ˜Ïj½‘\¯çbźÛÍêYlÄ¢uß"»Q'úš^Ú7F¢ÿnßÁ({ðjÀÐ&n6^ÂðÂð0g5[¯³c°[ÖÙHÔéèSb×ñíý·ŠÏ›«%¢É¤ñ9êaïEt:æ6bËêtjn»sšI ³BbQñùL×µ>še¿òltÃì¨÷9ÔJ#£»µ)‰"Ÿ´Ì«éÚ!®e£"¢xï"àJÿ£Y˜{Ñéœ6gq9Îð¬íWI³ÕÚ½Úm ppÚýÓi'éS*õ†¯?C¹aÙ{M×KÒ4^?u/v`¾~¤|¤¥µà*[ÛgÛ¸&#…³Í¿Nø,R³޹ɧ_®ñÓæ¾>£—ÿüæ:”în44Lèõuw½ƒjq”ƒ7’q½œ ¨„ ”Oqã°eX°>L˜Í¤ Øîuïóî:¿Qÿåc~¦·_É<øÃ_\oXV• /µ4™¼*¡œFãrQæÛl*—9hÜd:§¤,Úœ%+…†QïÉ¢øP=Ñ©·Óütnúñý È5,ŒÒŒÐÒE8DCTëw²^¿K¥!KÖ@Š5®UÇùPðÇú%­“)S+¤˜XÎÀƒÌÇÙ\V³ŠTwüSõIoÊ­Â׿‰ôê±ï]'#¢*¯Ïå²à „F&".âàY‡îk9­G¾Ëè²€ÕijóæÜ0‚D"a¶âºR…2Zï­L×§y~šß˜„„¥EñyL¨…=bN§  ¥ù_…Æ•£Ø¯ñ.H±h5¡ï¥ÒD$}Þît EK2«xâ_®óüÆÚÔë2ŠQF¡“ba-›sùþ<ŒÕjÆ©~r±¥Æï§Øoü…]çPÐrúÇ‚pŽu>aö´sÕ² ÂïW6ÒÖ¨ s€Ãk~ãítø-}‰Ùì/zM@ìë]u.ÅâÏ­ŠÁ°&xC§ 1™ç†ð® ]‘êß›XM¬f„«+¡™BΧm~+vsÈ~ç§Ãë›ÓõÍ/ù œ5:È$‚Vº†ü™'¾z´\¿ì÷ù4R_†Œ x(ˆÜXx¸ýãt&=·½}*dÒÛg4_‚Ç–ÀÑvš6Nm¼Þ<ÞØYßàù/ù)~¦0‘“ý]`úã«·G•ÁÁ‚ÓiűR44,`‚:Ç=Ðx„ñ^&}v~5·._vʈÊó²ÍJÈEÓžº{ãx}÷õ.¹_:džkÌoµ:ˆSüË•|ÂÇ‘5 8Ü÷S¤Q¿;þ¢dþn!³ÕlžŸŸnŸu $›¼°‰V«ŸínLïïm†Æ^OG¦#ÿ€‡¼‰Ö…dÒ!‚~û¾ñ’ç/°@aÒîÂå)NšH=vZ-óeA˜›Û:ÝÚžÛžÃÍ"ÂðŒàL`w¹éËÏã"òÝݱ0ÇÙV ;ŸâÝW˜*hhµe¹aÅœ?éë~tÀ”S¨îH)c0|‘ÂúØÖ¨bÁSV›Í잸ùØû7Wµ‹ñõÍÝpô1‚ÜEÑ”.gÝS£#65õø“ÿŠ’RZ¼­ŽÁuyˆœ7…ÌÖœP.´šk©ÁÂs@Y_ÿŸ–ß\`‹ýe1c˜¸Ô`ß%‘ֺݫl='ø8«×z½°BÍúóÔu ,Bã¡ä$Λ[Œ¿ÖÊNŸÙ‰1ª½Â‹ªk{»ë›c±ßðŒ4öº»r¥Å®6²9qÐc1ãÚÃnj'c]¤{~Ì‚ãã¡×¡o„ŒÐÌØÁS 6áaB@MýÓ›cÏÞÔöÆñÚÞúÆk~ÔØËô1½ :éVFÓýØ yXG¯ùzã£Líru#;r&‹…vÆÇÿ¬ ,dP Ó­¦(¹™çà:¯éÚæ«ã½½g±·W;ŽÄúc´¯š¹KŒ½’ùit†IZRÛ]ÄþUÈÿ¢5Áïì…bᇶ: $†Në!*üøêÆøüÀÄñøXì_†úý‘~]ÑåÒZZífgp½¡Ã}$7¹Û픺CÝ1BÇxÎï.“(¸Ð,”Aˆ#| KÂo6Y¼Ú­Õö&§_Õvk Äý Á~ŸJ¥ú¼ù@¦v_O3†ØÎÞJûs)LÁNXœV“IùËé‰WŸv‚¯ŽÇ'&^ÇúCÑþx˜2þ€âÕ‰ÕâýŸƒqåãk ÁÈÖζ¨D )P’›Lج ³ŒÄÆê«7{áð+~süõÆ¿à #Ä·à%äR(¡ÖëÍ.§ËbòÑ·}Êã7˜„cãã@-CHÿ#ˆ‚Bª )9™ð¯ac+½Ì¿}v Û«A0yÀ’%Q€‡î‰‚@aØI–åL>i3Ð ÷5 `R«…k óF}cÇÙT2! ÏeI]¤ø»Fº»Ñx½¹Þžß`"½Ì/ž’æo샗©Õ áÎÓmD(7ßEä.Ø-Ô¼‚1 ì.,„B^ð%mVÿ ö„ŸŽmlÖ&^ï…ßnð½FæË?ftAš‘Ë®kX¬ðc“øµ"Êh\ÆW»ÒÅÃ;ãµC ×hù'ˆÊDÉþÂ6]ÀD½&1<ßilâúLïÃPå)£ëòv²`â­ôMýCfgÔLo$vM®Ðƒq~W}†×ƒÌà0¤ñ©¿ælœÙëž(Åø†!Äï…êc±ðt¤w”‰ñŒ,0DÈ­T«ì3¡£4$R¡ Ø#t÷ð$L1+ÚÔG´LÏŠzÞÀ½?ï…JúóF¯IbÆ,eŠˆ1fï2]Lä”ö)*ŠCOŸê‚èè\ÖÙ¯¾úÊú•Õªò™»÷ öE¢¶Þ^¼^·ü—Ò7ËI$ôÙEnØšü 7Iyéîú]»f9ç™Ôë£N”±WÍ(•·!Íè]¶ËŒ<€¨ÿ˜^%µzà½e‚†»ÄQåð0Ç™9 ¦åvÜúâgÙgnÒc³%n¹‘ÑR\uÍvÅÞ `Ö£SzFK€(žÞ1CáØº!dÐéž*IMÖ£±Z9JˆÊ9+² ¼gûz?ˆ8a׫hFqƒŠéºèA®Ú`“ÀeÞu8 —·+À ‡!Ž0àÕÖŒRö?›Ê7CU>3ò~/m†w±¹ÖèÖ;쥲º¹¯æ¦sŸœëËäÿ:ÿë°7ah»k”üÎ¥áÁú ÕÓ¾»Î+*n~d$;+­¬áæq'ËHèçý—NÀ†a£zib]Öe¼—\mÐ]£dêgGZx_Ÿ›)P¤|ç®!ô Ä ˜»Òæ‘Ùl6™ù*+ÝÝ}’óœ?W°Dsl«§Ò6º[ú\ÝT(ÉqðêMæ’ …VY.Ã˹G'ïO—2­*ûÿóÌ⺌™A–u¨?ï¼¹ÙxdºNÙhÙ£{úHü0êy˜|h¦h2ªŒ¬’õ%ZÛüíãà&àÕnŸt¡°~¼ÜözhîonÕ‚qŒ,ìÈy<ƒÃžÁA!A‘ ž>½ ªùàî]ƒ’1нøêî­4~Šs›KÒÅã³(c“ÐØEwo.—}÷š_´dS¶ÁµŠPH®ƒ%•<ïÜAuÆëžêz³³Kd+;ùÚ^Â)(­-]o>?Ïyíj=2]}«O$g–‡&lEnÐ=}Šë>ÀhB5KÞŠëÒ»[Óž´Ü\BÄÍ¢Æ]þôwKœ×Ó/²×C[âûç‰a$é‰ë$P¹ ‚Ì< Þ»~#Rª»k¼M†©Oº¨d¥åæÔ\¾¨¶ ûÌ‚mØšz˜JBHMICjò'8øgÎpÌøz‘ùÍ—î±$qŸ³ÿm(× ><8£DB$Õx„¬ÑS< ޽̗ÿðöKo^}óíÒ‰D2«¿;®ý·ŸïÀs [^1•¦ºK~î¨FIk.]O²#—ÿñˆÛ~¸ë9QÌJoÝ0mÄK|ÏŸæ–Ê)E·¯Õ>¹ Ž…!ûª}C°³ëM·eÉÞq—Zqݲ¥ oÖ ÚÒµAz–Ú NÚeŠî~ ¹\&—ß‘}Q’.—#ïn¶O¯Gôq=CʳdÕ Ù{s}îƒÎ @Øf…™çåT*•†”ÂmkÒ,<2Ê‹ËqUÈnK x‘ë­ð*¥k„N²_á]~»B:º$–… U†ØžDyM(W âJ3)nì£î`—Ü.áµ®xïY`ÿï=g8m…WÚá“Ëkf…™ÏÏ#*xhER_ITÒòx¡l+CÊ&¦…òiú {Ù·ŽADø°äsÃûNRíÜÔ.G:»<»¼ÄËÍàŸ È×bª–ß.ðã­”8Áõ½DÙ†®åÊZò(a+SN—ç¨î¥#×ÉP —ú\á ²ð¶Ô™èA jd y%Q ÍY¶êâ#6X þ÷ÿÐ?ÊðéñŽ˜ô/…ÂVª|ÞìœR*Åí„E.’pq/Jûì¤õ§³äú¿›%#W¸½ˆ@É.´FQõ *vÚ®Æy*ÁV4„rµœN—qø¸yzz:G6ÚßÂÉÕ}¼©•%r@®‚“¶=]I«¥€+ͬtÀ-]'æßÎÒf›@nºIÄrÙ¬–ËÛ[ˆì;@²4›½ÑviDí²„7è‘Ï€ôšGcé—NyYH³Ô²]­¤«€LjžŸoSÝ£º;/J¥•;9Y¸ePÈ5©m¼Ô7§\Kj P«‡e5.ëÄ ¶«j¦zž®¾jS˜Û¦®g_»@Äö- í¥[P®Îº·óI0ˆuÜ1 ÜÀl‘5#&j§³Uî”;¯§ØþOŽJ’áͽþ®Ùº’.4Ä5YmâȲ‹#x§…š\@›Ë{éj'EÒåój5]Ê[åêÜœ@ýÇë? E°´m‚ÃÒIö»`®ˆ  ,wÍË"ñ-¬ZMClé<È&ƒíjyÀ•·ªåfGHŸÛuK÷Ä®W¯•%Ž ¬û-(äÖ¹3É‚œ³t`˜\<6à™wÙÆÆûL‡Û…òy‡2)¾»0U^,ž`„ÒîÆŸŠ$g’ ze%Tð”°¼]Õòù6h È1¨ ¢H5á3Š ß›Íb„‚Îi!‘¢ êŒÜ8wÕ¥V£ °ú¤ÙÀ3˜ÒØÈ_=ï\¥ÏÏ‘ï Ï‘®ësó'L²Q0fÎ,qm¼°þµÊÜ,¬Cr.̓²¸ xñ@ð %]ÅN{ì·CëRéJ£tuuQ.wXLv¥’Àù‘€Ë+šÙÛT@œnxs)Ixþ²8??ï"ÒU€ÏݹB¶w„f¤Kh”&^FdBÇøäI¯¾‡ÎUJ†Œ›|1¼€pf»A$‰ñº¸œÝøa”ùE˜¢51ƒòu€\ÀéóóÎ6 "ý+¬ ‡úI3W™Ld`‘IØf‡ºPHüFf©d´®¥¥¥"(dÒçET"ÀWÀ{P“9´a Y¥J‘i£¹?[ezñ4ô)p¢¶aÄe„ /,Ü2eÑGl’䬠òp#sÛH«Î‘©ˆ°ÎÀ”.óS3YÍ€ûx…\þ=3ÞÃ`~Xœ¶¨þ1»´ )Эi ?bvb© ËÖ ‰ås¡ xà«Ä½ Y‘“µ kÓÝ©pZ«¥¾7<€ÁFÂ<üÕˆ×g³âlvÐí;¸1÷šì®aÐw@ˆ%œ‡‚!D€ñ ÕÚÙd1Ý¡§)í—èB×eÁ:<ŒÚr2;›JÚ¾j!{¾R.eÅl’³š¼,8ÁÑÉUäzz¢’`»ŒêÒk 'è%Õ;8€žÍœ’Ã#ÈþYŒçÚÂÒ-ÃLìOQ, ‹“\nÔ™CV£â᮳€o€\f+mëòEeRÑwþn‚x Yâ«álQXX°¦žsÙ…’§|'lÍ.p ^ àIµÜj5‘iÛƒ±°j­¼–† ÃÖrÇÊ©V5@Ü'þ„ÀY!/DZ賵…,ùøŸ¹R,G¬ ÃV› ¸ÐI£ÚÃoàgz /¤Ik)z`  ÁQ@§†ž Áä¸äü¯†ý~N Qö®5+d9°^fÚKîÑAŸKØïNÀ¿ãe1eõŸØÊæ2ŠWŠ 7d}φ&´,¤ *îÏŽ|•ôéXŽ3ð™\KíÒÒ¢XLþ {J5‰çòÆ‘%Q…u!AÙ‹µ²m-‘0wW5 *ª¢¯Í-°Û%™ôåÔ–Á".@=é‚ÁK¥?ç“®¦!©U‰çäÙszr ídÕlKKÛ&Ìd¿›‰þÞ.RÁðˆ&àµ"IŸßÉrÃÂ,±—h–›­ÖÒI±Xœé²Q<@¼,¬á!(x|<Ìæ0©œHƒ„á>ó5Áh`ü9øÏ2Ù¡ƒBf¶šs)§q1K|Œ”µKK"®}2›¼œ©NÓè1y$P¡…$µ‚kfâîç°H†˜bF:ðÉÀnÁÿ›ø•Ùlu²ž‡Ãhýr²Ô—Õ>ÉçEn!ÏùL&—Oâ^͆VQ’^  8ÝGaŽ3Ï(qÝ¥eXþW ‚¹žƒhmB6_˜’\`±XÌOç³~¼O3i4~Η0ƒ…ÛdläX:3û|I ß•p‘T"ñyK( €8ŸKCè¨d+¤Â“ŸE0àż8,ZóV‰ó;94^¸¬Þ–@2á/YíC F¬ÑÅîê@—“u æ¶o_u nf “K Ì/fÅ.Že·úTx)gM WáD¬à}à <ñù(b‹Á`Úl×ÒE>®ÊŒJuž¶ œ¤€ì¹†GNYä­VÎi÷B"ìâ¬8ë- Q$„‘ì.aa) dùOâšíh"ÍxÔØ<ž ­«ž¦˜ ö%àŠ Ž à4‡ç­\ ^6TsBù„ÍŠ/´Z­—…šÛ® Í*i†èšò àu ¯®ÊsÄé[%bÞËsINÌ'‘Õâ·°Àxø´ ékÛÕU °爥!ÕŒÔ)­ÑÁ&W~d§Æh vCØíÂU5äñ%ÍI+îX-N–µSs_ eëª<:`Iåme<‘‡ü¢sqÃÉ@¯YbÂÌÒUôô;|µŸ5Y±dìE…T[­(ºI@[j°<îb½^ê²/BÂxŸIÚ•c’LNA¼ªU²d CÌ䂯«Gx áðL±Øÿ\×øH™þ{¾„èd³~E6-ù|N3nÀÿ±'¤äií½§IEND®B`‚survex-1.4.4/lib/images/Makefile.in0000644000175000017500000003453214367066627014105 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/images ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_image_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imagedir)" DATA = $(dist_image_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVEN_COPYRIGHT_MSG = @AVEN_COPYRIGHT_MSG@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMMAVERSION = @COMMAVERSION@ COPYRIGHT_MSG = @COPYRIGHT_MSG@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_TEXT = @EXTRA_TEXT@ HAVE_CXX11 = @HAVE_CXX11@ HTMLFILES = @HTMLFILES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JW = @JW@ LDFLAGS = @LDFLAGS@ LIBAV_CFLAGS = @LIBAV_CFLAGS@ LIBAV_LIBS = @LIBAV_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDOCDIR = @PKGDOCDIR@ PKGDOCDIR_EXPANDED = @PKGDOCDIR_EXPANDED@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRETTYPACKAGE = @PRETTYPACKAGE@ PROJ_CFLAGS = @PROJ_CFLAGS@ PROJ_LIBS = @PROJ_LIBS@ RELEASE = @RELEASE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WXCONFIG = @WXCONFIG@ WX_CFLAGS = @WX_CFLAGS@ WX_CONFIG = @WX_CONFIG@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_LIBS = @WX_LIBS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ imagedir = $(pkgdatadir)/images dist_image_DATA = \ aven-about.png osterei.png texture.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/images/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/images/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_imageDATA: $(dist_image_DATA) @$(NORMAL_INSTALL) @list='$(dist_image_DATA)'; test -n "$(imagedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imagedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imagedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imagedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imagedir)" || exit $$?; \ done uninstall-dist_imageDATA: @$(NORMAL_UNINSTALL) @list='$(dist_image_DATA)'; test -n "$(imagedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imagedir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(imagedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_imageDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_imageDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_imageDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_imageDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: survex-1.4.4/lib/images/texture.png0000644000175000017500000053345414141575516014245 00000000000000‰PNG  IHDRÓ?1 pHYs  šœ 9iCCPPhotoshop ICC profilexÚ–wTTׇϽwz¡Í0Òz“.0€ô. QfÊà Mlˆ¨@DE €£¡H¬ˆb!(¨`HPb0Ѝ¨dFÖJ|yyïåå÷ǽßÚgïs÷Ù{Ÿµ.$O./– ™'àz8ÓW…Gбýx€¦0Y驾AîÁ@$/7zºÈ ü‹Þ Hü¾eèéO§ƒÿOÒ¬T¾È_ÄælN:KÄù"NʤŠí3"¦Æ$ŠF‰™/JPÄrbŽ[䥟}ÙQÌìd[ÄâœSÙÉl1÷ˆx{†#bÄGÄ\N¦ˆo‹X3I˜Ìñ[ql2‡™Š$¶ 8¬x›ˆ˜Ätñrp¤¸/8æ p²âC¹¤¤fó¹qñº.KnjmÍ {r2“8¡?“•Èä³é.)É©L^6‹gþ,qmé¢"[šZ[Zš™~Q¨ÿºø7%îí"½ øÜ3ˆÖ÷‡í¯üRê`ÌŠj³ë[Ì~:¶ wÿ›æ!$E}k¿ñÅyhây‰RmŒ333¸–‘¸ ¿ë:ü }ñ=#ñv¿—‡îʉe “tqÝX)I)B>==•ÉâÐ ÿ<Äÿ8ð¯óXȉåð9€¢yPÜõßûæƒâ›¦:±8÷Ÿýû®p‰ø‘ÎûçLg ù‹kâk Ѐ$È t!0VÀ87°ø`ֈɀ2A.Ø @Øö‚JPêA#h'@8 .€Ëà:¸ î€`Œƒç`¼óa!2Dä!UH 2€Ì d¹A>P ECqB¹Ð¨*…*¡Z¨ú:]€®BÐ=hš‚~…ÞÃL‚©°2¬ Ã Ø ö†ƒá5pœçÀùðN¸®ƒÁíðø:|ŸÃ³@ˆ QC â‚ø!H,ÂG6 …H9R‡´ ]H/r A¦‘w( Š‚¢£ Q¶(OTŠ…JCm@£*QGQí¨Ô-Ô(jõ MF+¡ Ð6h/ô*t:]€.G7 ÛЗÐwÐãè7 ††ÑÁXa<1á˜Ì:L1æ¦s3€ÃÌb±Xy¬Öë‡ebØì~ì1ì9ì vûGÄ©âÌp‡+Ç5áÎâq¸y¼^ oƒ÷óñÙø|=¾ ?ŽŸ'Htv„`Ba3¡‚ÐB¸DxHxE$Õ‰ÖÄ"—¸‰XAàPð4Ð407°7ˆÔô&Ø9¸$øAˆnˆ0¤;T242´1t.Ì5¬4ld•ñªõ«®‡+„sÃ;#°¡ ³«ÝVï]=iY9´FgMÖš«kÖ&­=%ÅŒ:Ž‹nŠþÀôcÖ1gc¼bªcfX.¬}¬çlGv{ŠcÇ)åLÄÚÅ–ÆNÆÙÅ퉛Šwˆ/Ÿæºp+¹/<jæý$.$…%µ&ã’£“Oñdx‰¼ž•”¬”TƒÔ‚Ô‘4›´½i3|o~C:”¾&½S@ýLõ u…[…£öUo3C3OfIgñ²ú²õ³wdOä¸ç|½µŽµ®;W-wsîèz§õµ  1º7jlÌß8¾ÉcÓÑ͉̈́›È3É+Í{½%lKW¾rþ¦ü±­[› $ øÃÛl·ÕlGmçnïßa¾cÿŽO…ìÂkE&EåEŠYÅ×¾2ýªâ«…±;ûK,KîÂìâíÚí°ûh©tiNéØß=íeô²Â²×{£ö^-_V^³°O¸o¤Â§¢s¿æþ]û?TÆWÞ©r®j­VªÞQ=w€}`ð ãÁ–嚢š÷‡¸‡îÖzÔ¶×iוÆÎ8ü´>´¾÷kÆ× E ðŽŒ <ÚÓhÕØØ¤ÔTÒ 7 ›§ŽE»ùë7-†-µ­´Ö¢ãà¸ðø³o£¿:á}¢û$ãdËwZßU·QÚ Û¡öìö™ŽøŽ‘ÎðÎS+NuwÙvµ}oôý‘Ój§«ÎÈž)9K8›vá\ιÙó©ç§/Ä]ëŽê~pqÕÅÛ==ý—¼/]¹ì~ùb¯Sï¹+vWN_µ¹zêãZÇuËëí}}m?XüÐÖoÙß~ÃêFçMë›]ËÎ: ^¸åzëòm¯Û×לּ302tw8rxä.ûî佤{/ïgÜŸ°é!úaá#©Gå•×ý¨÷cëˆåÈ™Q×Ѿ'AOŒ±Æžÿ”þÓ‡ñü§ä§åª“f“§§Ü§n>[ýlüyêóù邟¥®~¡ûâ»_é›Y53þ’ÿrá×âWò¯Ž¼^öº{Ööñ›ä7ós…oåß}Çx×û>ìýÄ|æ쇊z»>yz¸¼°ð÷„óûÉâ¯ÊgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¬]IDATxÚ ‘ËnãT†oÇw»ŽÏØ{K¦M!R'¥lÐ@ÕA‚%;–,†oÁñH¼, T d˜RÑÚfÚNÓ88Mc7±ã“c›<À÷ëÓÿ1ß|ù•ˆd{u3ŠËË—¦Â£EY€yQà cò|–fdæxhLýø½¦¨÷îmY–-@hWÿ;?¿ê]&“ÉÍ0ˆný½ëëáÍðäè ^_›á‰iÙÈs‡AprÜŒB®d]»OÆ4[ÛK‹Î³ö¾‹L@ÓÓÎáRëw³¤8 Ó˜ád#ŠÁàš+ðŠÆç%ŒPA@)¹Œ¡çg>(9×Eº*ÇI$I Cé4¡3ÂÞFœ± on"ÃR®ú¡(T’˜d K™X–8:î³Ø§q—± ȉÓYÒ üG?ûÁ‡½e$B5§Í9Q¶X^Nsš¥e†)<Ûd‹Xâr^…£ñ”â¯V7p‚Ï.N(Æšc8îª,.±Š©d i:…)?'XîÝ ¾I“á鿇/_ì¾½kéjH’„Ã~÷ö¶ŸfÅ¢»ÑþãµµõrVïÿ¹â!CSžý±V[j·÷ýîåÖö6™’ƒßŸ\_vvšËkÕŽ_¼ùÎ{ã!þá»_UÍàjëµ è½ÿª{N <=ºØ{p_ØÆ¦'K…0N§æ3N’Ækw%^ ƒHt»¢¯Ô=ÍBPTs JIF¢p .H€rž‰)NÎ.:—#d5~üÉç_|Öj­úƒc‚EšNb‘åÜ;ža¿ïtœ*7ïSÒ¬(éüË4ï@(ǘX¨RPކ9!¦¾†‹ç‹Ñu$cC7œt»W{ã×'Ïu©¨×ê–YyúסÍí ØO;»÷÷4Íê\õ~j?n.ËŸ~ô~ç·¯M&2TÄÈhœÎ$Ií>UqV9Mþ_ Êd7Ž* Ãw¨[·ºººz,\ŽÕn»Ý­´8Ë¿C±Ë;ä1ò Y±a™,#ÈÈ(ŠA˜b0X¶Ûnw×<߉Ëò,þs~ýúοøòIÏé\ß&çï—Óý¶cÚpÁT¶ë ‘dq”ýôö×8Ž<Ø™Lö-“–eÎÒœÕìòòß-ßG ­–wÄ ”Ð,Nó$ÑÎØ ÿõÇoï‚ oj5,Ê,gUýñ'ê*Ñ 6›MAËÎ?<¨ ©„ÒÂ4-J4Ð:¢Ú±×é¥gQM)P™s1ãJ( 20Y¯# °çõ„ª“õÒ„ (Öîlœ ¹ÎDXIQ…ˆHÎÅ–¡°¬Ê"\7Ù’çWˆe  ›" îÎGƒñÈŸpQC5îúm»£Õa’Kˆ6;ŽMˆ"&Z­®~üá;Í…ïOìvaª8øßX£F]/ $ÐÓ¤ÕÒ•²æª;Ø®•ÕeÞ‡›Õ»_~t»ý~_u!,ÝÞ`äm{CŸP›3eÒÆÖùïïßœ}tüˆpúí7m§E)º¹ù§¨â†e.×h8£–±½³m˜X‡{»¼è8d6÷»=Q%EÊNÏ.”$ÓÙü>N^Yä6ŒoÖëÁ–·Ø›8R¥+¢6$Û=˜‡FÅÆ÷ÇE’§IŽ11ôm¥ lò†iRX–Å –û»›¯^¾>ùüq\·ÛÖÈó…PI©8Æð.X_-¯tc¶h bc8ô°‰ò(Ñ«:]·Ûu Z’¤išÅUS÷\§ÝÖT0Ë€¬N‡D™Šóŧþt>ù`°Õä…dü³ã)ÜgOŸwÆvQå¢÷ÎqY¦’(ˆ—aeºþ|¡Kóë¯^u3;œþ'…U»›DEwfwvgg`)”.4Mh±ÑĨ‰ñ!|_ÀŸÆÄý§‰LÓšjL“ú£µ@Kc‹Øï……ÝñöæÞsï9÷œ‘ß¾y¤ô´}òãçÁ‹W5]`‚áÊ@ biú‘?±FÓËÞ Àq…sQ•hšªk&,«\)7u0ƒáíÍþ·/Ç¿A’4uÝ©=2^ØØ¨W7À×ppÕh6Öï•%”†¡ßnŸÕ¶ZF©Êòù0–ç°$¨ªëÄ%U)Õi.cÌ "0)9M`[,Qil>ÚÛ;,™F±”µÇ“È_”Ëe” /…$$¥Xñ½À™ØŽmÃ0 òÅ"ËpH] •( `ºÊðÕU·ýç”Q–å™E.!y%éâòúô¼·µóÐ0x™Øã°Û´;VJV,/©=Û-¸Ñ_>ߥ_\vçnŸ#—Ó+g£áßóíÖƒûµ2RâÿPX¶=MCqíÃm»Û®]»u6b$*b &&*Â×~>bŒ¾1!¾S£qšñ´AÝØºvëÃím»ú÷ÜÜû;ç\þÝÛ½ âk›O°ÄÑ9Á"&4†Å7¥Q –Så‚¢¨JNj¬®– ­}ÙjþÐòyžÿÿ¦7ýó¿'¿î×j‹ åR¹Ø¨× ªŽåüdbu;¿»W§`Pמ4[ÝÞYB=,kV¿__[¿Þš_ž]G<—SL,¼ù0ŠTU…™¦,Ò 5tgŽ·ÍðB•“ 0c6–Ä™m»<­Á’%*ÅR¥º²¶¼Z¯¦ T[wn–ò9ŽÙ“$%iFf3GEâ0Œ‰Íìõ{â!yY/Õ9žq¦ãåZ#Mç˜fžb$*XK„àvwTT±®)b:÷Ýç唆‚ç%8¯±?ÏlQã 9 ‚¤T®Œ ø/ã˜nïnxÞœ¦ÖÍ(މ¡KŮ׿</OE3ŠeŒËêÿøis»QY2-ûj{wgcó©Y­dàL„üˆ-””‚)I2äN7îæRœ ~^ݽN‡ƒ0_ÖD¹8kvšÍ¼Lwwžú–ŠŒ¡°›ý”ãDŸ_ô¶mB ÔÂlêxS¿Z®Âa8AJ@Ë4Aˆƒ¹’ÈÉæ`wÆœN§c‹ÖVöߨ{ýb2žþF”H,‰ຫñèþÁ¾©6j{¶5M¦I’,g}ÛrAEš[j4Ý^w ‘‰ašŽek*-rO.«bQ¦D¢Xè”XT¶’éTu¸¦Ý ;žïèú¥iXžß=‹&ñŒ·Âf·ïúž¥g?†£øßÏ_£ƒƒ»Ã(’ 2 Í àþDÖõÍö èBé< Êÿp\.½MQ¶=¿Æib×$ôI+A…h‹¨ª²`ÓŸÐ=VHü9@U%$Ä¢bÇ ‰Mµ„$4/¿=Ï8\ØÎb¤;sÏ9ßA¯^¿)ЏNæM+A+N%…€‚tš†KM6Õ& l*úgEžôzݰ´Ývå ›R8ñ=¯× òlž&3x¤$ÍG£AÍ`ÜÙÚ†›:7“Éëµ~Ôyòìíµ×ï?xzüy~tå )Ï蠧 (Ø \ AK”’ ˆBûõl‘.xÜeÎácBÁ=YbeóÙô×ôÓxÿ*þ—Ÿ‹ªö&>󇽱¼æÁ(IŒ¬/uiÔ"Ž•.q”®„Ö+‡.J°…sÿ À\z›¢(l{ì;;v켚–V…V}€ „„TvüX$Ø²ë ±«ª¶H<Ú”ÖqÒ$Ž=ñ““?0WÍýÎwL>¼[‘TžO9Ê=·à*ìLÁ2–à.Ø‚”ƒ'DqŠV4 t½*‹pü0»uÁ¶*“v»Ê´id‘jœàØ ˜ *ãÎM¯åL'áÅÅõÑÑq§Ý®×ô<ƒÕ”†Iß6ýž’A£Qf±HP4-×Ñ]Û µTUN3!t–—UN"Ya†Î ’©ˆ†£ùßpáµütU2‚›ÒÊ<}óbïßÝðûåϽÝ]R|Rœ~Ã'e#¬òñø±ß¿©ª3=—£d û«‹l•’¢µ½Á]K®L®Ùee,¦Q­˜Q÷Ýn*IË \HŠ^ÊjA#Ò,¥°ÿõß(¤…D-Š5ÖTh®S¥bÜò¼ö6ã~’*á¢øøå,ß<ñ<§NUJÒN³Ð(ãuóððàö¦ŸÄI³Õ ÂÙÍŸ»Ù<æŽ#Ér·Ós]8ïïŸ ‡ÓÁíHÌÉéé»îF½fê"Ïm ¹£­õI‘t Ãcµš\PÓêRÚs§-þ|wóU‘êW—?ž¿Îƒwz;5«‰jÉÑi¹ÅjQ&S›Ö«ç™º\&®³ž’eKI*44']eïR”y…dÕJÖe­J3ÇcìÁpðíëÕçOg''/;Ýöèáñ×ïA·Û‚†Ÿ÷¹ãA§ÃɸÑl!°µ™ˆKE"›Ï°¸²ß°mn.— ÚQÝq¼x1fÁæÖvªÙ[;%ApOT©Þ°µµL“7oŸWY³Š:ZܤEA·Å,o$Ãv²ý_¸^—èE‡1‚šá;¢Ø”U¸¸e Û?Øu\¦ë:£;”‚gÜ`\¨¢lU¶™eYc ya8wlöë÷Ÿ^ïàôÔ‹W~™F?¿ÙÒ­å´@Y'D½íá+‹TUyšDÁ]ǵ™àû¼\£weàX[µ-÷W«›Ó,k~öd4è9®¡š‹Ùµ#¾~¾uÕí÷øöÿ©Ä͵û¼®Ã‡À_.Lƒ;ˆH½ÎÒ }ˆ¹}S•ó4é8h—EÁÀûª&’á›KậKò&Žƒ8]¬«@V9Û¡|#¦w«BM•늢pÍ ”´ä>ZÁšp»¿¯vŽJ [^\†ùÓaûlrdëºØŠ‹W‘«¶¤Ì|<ô¢xuq1ìîŽ4“L»f{Þh|v2<|j ³´B†Éùùåë—WQš9³<Í’þ^ײԚ`̹ÀMÃnj<™ (7¤®XªuŒøÎ¡@¬£‘7žŒ{ƒ=T( Ò¦.¢é¬«³Îõ·éÍõõdtýõ£ÌÖwþµåNÇdÌ2MÝ04Iâ€Øªh–÷!ê×\´»»“Ë%ÔÕ;¾üôñsɧçÞÙ‡w/.F6ZÛ¤– ¶ˆ? †Þi„œC&îòtþw® °}~ë?„QÃÆÂº¬‹ª2t•Z»hèÌZIQÑû“ð_ß‘]C'Mµ©2Þœ¤*b$Á.°]÷@(Á8y´šý€"sÙq†Â°ÇŽ7·&^DÍ $ØÁ ±ãØñ°âزäذ qí˜j¦ÓvÚ´i“ØNRNòQ”óŸs¾Ï&/^>'…ñ‚lÉæ.•¡D«šSè§¥‡—Ò†PnÔÔªÆØ¡7—U0·)/µvr“0ÝÞf‡í½§Â·áAîl >a¤Ï!WÓéÅ£ÇO ©®gÓÕõT«ÝÓû6‡H‰Z‰¦²”²@¬<écà­¬º=n àH£Ju„bÂúòùÛ׿ïú>G@qãa4_®·ûƒ®ÊmUCÉ&³›ù Ë¥ÜÝy–¥i¶&¶é Üä$Óö%íp؇–Õ‚"NlT× lŒ]jû.¯w¡¸)j]õ×#m[5,n„ bUëÕWÇxŠC¡‹ ×˵Ί w»Ê.'³"ÛYDˆ06Èù{µš]þ9Ä\Òr4ž€äeºµëZ¶`—Àr€°@RÊB³“~,[¶‡Ü‚·H¯3nOÞF¿&“Éô||œˆ¤”Z¬ot¾b”…^ɱ¡Ý0t¡”ªˆº6“Õz;Wù>ô€èБ6ˆƒÔjC¯.ôsÓ¼}÷¾©÷Ïž>d.™Ï—‚ûõ0”°Û s¤ëiºn¯~@0cÐ*ÁYüS’ÀPg<ÏM ~~ÿ÷ñӇׯÞt£°7ŒG½Ñh48;½»Ï,ŠàŒíÐöÆ'W7‹e{•a™$Œ=.óë««¶“ fE¾÷COÊÀ¨ª„¹Ê²Æãó~/c×¶ÌpØw…[õ&]•º”~@Îw;x:*ƒ&" # êÍj¡Hù_ŠÌe·i ŒÂž±=ã¹ØSÛI“ªáR‰îØ€Xñ•`ÉŠWƒÏÀ¤ò,ºA@›ljíÚÎøÆÉÞ’çrξc»?Ü?"ÿ‰æk›^2޾<Ø#–ÕÄo‘Ðyµ«Ê\ª¨«é2­ X5¢£ èÐ6¯BÒ‡¼ö¤Å6ƒcÓ4îÆ Ž1ÚyÑGiˆ0ß®aÔÙù%j8•a íRç*-E®aY=ÌJ&Æ8 F‚ê}À£Œ»5ÎdPî.b³˜©ëëyÓVww¿PHORƒ‹0!ZGÇÒ&߃ËQÇcÒVçÀîê±°eiëBxN[¬áÑ[T˜P°PÏ•NSö˜:J#;Ä<¦¦„–EUÎó‡öMãÇ“¼íPÒ¶"Ô N ÛáTÚòP —®–Éyr{ûãæý»T9o_]áœ×Û‡ Ìe¸òÞé%¬ä^[WÁéG F¿˜ÍgŒóíú¾®öQ(—ËÔ $ïÆ1T¸`E)›ÿâOŸ~V bQ7UZ K{é0ùn§Ó˜5lŠÎ„ TOˆ Ï€“Ã˲}´öÙóoª 8ó˧Ï¿¾~óOË ìŽØùôjõp¿®‹.Ëî³l m6ÈR!u´Ëþ‘ÉÃá`Í€Iäsq(ÈD—PüåêÛ÷¯YÞ/­§ܘHá|¹Hal­íØC<å·®‰C#¸Û'‹y"Y°Hcj[·½m“$VZx®kâ3Ñ¿›?IšªÐ7†WõÁ…füS˜’ ½¼Ç–Ó:àCSSgª¦¬§"lÏò³wÝ鿚Oo›0ÆØÚ’ný'­·I;ïL;WÛmßnÇ]'mßaÒÎÕŽ«Ö¨iš&á1ÆN¼‡ÜP Ql¿ïóüïËíGcü7 ïÖÀO Ù}×KQ›) Ÿß%jߨf†ñj]êñ?ô£È!¾6ltðXRÖ¢J†Y²z|h6+ëîÍA£èˆVCP‚àÉ Ò9dõîÏÝà>ÝíºFÀ‘2ÇqÌ€OXuæâ¨TTv¯•6Ò÷Ép¼;£ZÕeDu£Ó8غ-†Žà¬wrõo…æêQ¸ÃÞËÐz—ÅlnM¯áï¶Cò&!¥ ò´ëùÖŒ|—úãËÚŸ[ËÂi*ä÷†ƒŽ×7 ¡eRP™‚CÿŸ¤#$oG£Ï>=Ò #¾‚¿zý²±[¨U@ô xÁ©’Ž–¶ÑÝw’]ÝMÿþºG$hPen0ŽÊIuÖÂ2kxsôl2ŸÇ̰˜pÖËqOaõŽpbÙHƒR6…´MÁ÷¤ã‚| RïN¶Ý¶mË4CÁTIZ(€±ÕIK­Óí{}˜lϴܪ†.5 ­¦¹‹/Ÿ¾n“ëããa»Í[Îå·Ÿ¸o§Û²¬Ž×ë!¥ü{0qQ©±ïƧø|¸ÛÝè6ŽcôgІà´éZGÇO...±‚çço˜IàÌÛÝÂà½F´š#Ì˚΢Fž~\Aç§Ï_àòÅ"´Z¦jd |_¦“(ø=º1ÐÉ„l:žëºiÏ@Ò‰x¥ú÷$ÐʈRÛxMƒ#Ï–¦R7(ƒcRÃɽÂl¦»pd.»Ma=¶Ç—ÄIš8—¡²` ^ƒ5k^‹e·¼ÀÊ¢ ¨”Š&ñýnÇæ”%5–ÿÿ?ç;õó§eÛŸyRà½Ý©«1# Ï7ǵ´¶èÑ>{.–Ûp‡fÀ]j0‰€ŽUpÙ”EÈÔÁ±LÒ×ð>U3a%7Œ<Í’(½X®‘G ©àQ% >Ç­IQ7®íÞÝ߇Áéý»&7‡^5˜E#Z©´˜‡‰;…s¢ùºîÿ¡8€µ>Ùœ¶E%§¿Áö¢m𬰠{æLe[ܱk]TtDvï€eqÔ5ÉõúxøÕ$SÖtÑ¡.§ç<‰ðI ÂÚßl]×CÿŸ/wW«åZˆ¦(*Îõùbºò/¡‹ u°Õ)$„~½½ý²ß¿yµ¿FÉå Uùýð'RBIe–¦"m×>ÖÇq´Ýú0D¢‰Ia†ThQÖðU!ú gË9Ńqh2“N•Á ¨BF€ðÈT&º~6›+ ƒá$ Ïéñ/ª*›ÿ€Bs[ £p’ã$;§9ijñP¤Þ¤z#HÅ7Ñ'ðMDÁßÀk)(TEŠ#c§D+±mfg&™ÉL’½]¹Ë]Ÿ•};äþ½[,ÏB¯—M²^9¹t4æy~uë¦,s¡ÖÄ$ª®ÏfóøäTZr”ŒÄe¼0 0EÍÑdK®y3»$55K­|Ç_±¬ Õ·‰ÙXuвšL›ß& Jôú›D¶Ã¶KWpóÉã§Ñå͇{@®±5•ê Å*s\×¥m<,TåŽ~³ÆÆ¹øúåóø_Ü_é¤iâx®¢Ó0]è‚N†Hñ3xÈb¦2€°Û§ÔÒ²ql)ÕìšÌÐÙ,O—èÜnä‡P³Û $ÒšäBQ©¬Ó’¸¢·4bAŠÊz™°D³¬µvŠh›Í*ÃÖi[³XTá£>—uE(@l΋|zq|2< ?¡ØÚêFü%…ÇlŒ’LÓôÙ‹ç»»wƒÀá<“E^J™ªaüˆH}‚|Ÿ»íNQ"R%PœºžkS©Fyè¡×Å.˜m‹ZÔÓMkY¾­WU–±ÔŠ6ù+[¾­¯óIøîíÅÞƒ;†^þ n‡~^‘\ŒÇé)ôÁ¢H¬¤A>ªâUDãºM’0ÁE•`ýÀäj#Š®|úø}ÿq^_[¹~íK™æZ KæÓë¬^Σ^ÿöööÁ›÷¯_½„+›Zs–qóR1ŒŽ‡k Ùáàð÷¯‘WëC¹.5D³®ˆ"ƒàÑàj4ç¢Í -!5±ÌÓ´ßßù_ë⿚ÙnÓ@†ÇÛxo‰KÛPRÒ6lm/ èHÜ "qÏû/}„Ê ð*ÚÞ€º¡6M§¶{¼Ž9¾·eÍÌ9ÿÿýã#¼xöо2xÞï»Ï_mîïíFÁÚú+Ê0ö!)”ÕH4ã\ßóL­f™µ0ð±€Y ,Ž€òS!8÷Ï/ Ó–0‘°žó%Ø1Ê3Ç©ïíì¿ä i$Š&!“Xq4c „(v8Î?}þøîÍ– Èe)rœ¤Èf ΆD^Ó r0—$IVdtDü=9ø°õviyqãéU(‚WNMZEìJ@?Ùø¢ßw‡}šG3 ‡&}CÉ¡^ðû]@Zê¥7P9ŒU+ð.®Ïµ4™‹Ørj3Íf–ç¡J@† €硠Y6ÏÊ$ˆÆÇ?^Pðx™©2q4P!@E–Fýç9^K£ÓŸß¾Ì·—9L£¦(*è™øÐzKwWfçoηnµf›à€°µ:‘ª[¸*Ú£îù€¨æáñI¯ç¶Ú4rÁ-±Œ±š-ƒgª‰’$ædØ W£gКç÷N~Õ •À•œ¤ã Q.Œ‡Øï]®<¶ÔIËKo|ºxǹ·º@“n§sÖœ½jdbj!ñà4[–¢hQHAtÓÆµ&ÑÔ$Ž E^»ÿ`u{ûýÎÎ×Í—¯mSƒtáRÎ@Wl€Y¡¬.=lKƒÍ›kÜ~´¾vvôÛívÆÃ ݨf]#:`\ÉXûÆ|(‰)âeub²,IñìlpžáæÜ5Eráx¤a}±KÚÖtCºäá8žG'ÇeÃ+¶ ±A÷q¯ãîíP¶ív;Í`;‹Âe…€45/MP^È9Ôcàÿ„%Ë—ðãæø+ YdNÛ1‰^󆉒*®„RÒÅZ+Z8Èð-GÌ+@»?ÁµëùŒ¦°©éU”L,+fE%‰w—‹d9M£çû;<»Ãé\#L”Ó4_˜t¼ƒÖʼ›¡j×Ë:¸Š¡Ê¨ $?ÊE)uˆ¹Ùíéª)àf<£ˆ- ‹*§¬* I ˜Yš*ø%o2Ìr& Øõº&äNÌš[À²©²iC#S~ŽŒ–‚\÷öÝ›íÁV¿‹XvÏéVY²Ñ[‡§k–"èàýA0Œæ7º·•–-0‘S.䪆4,]ކØÔ»O¿|þøüÙë4ºð}‰  Ôd¾%EØìo«V;©øj+^ïÚÛ»[Ñ,þôþÃõ,v}>H'«Yž~# 3sÍÐ;E©F3܆ïËÀϨDˆAƒ¨)&¹ðˆÍ€‘䆢Û‘¢Ð?(4—ݦ( Ûc;¾ÅM|IÚ$¤° aÑ Á‰RŸ€Kİç زbƒÄ² D·HU¹,JA¨¥¥ 8!‰íÄnÇ—Øæ÷Xc™9ÿ÷Í óìéË}úò¡ÖlAê˵aß2ÍAe’Xíõ†ßÿœuׯ߸ûà>t;Í,d óL¥Š¦r˜õ¤¸ü”CôQwE1fAhöú–wAŠ—Ã ×p1Þ,2]N½É$N©Egk“°²Ä0Åži¾ßÝYi)ZMÙÝ}wpxÐ鬣£3„Œú#ŠM Å&,¼¥xƒÎ2ˆ0]Ï/Žh6Ô ±!Õµ ëo¥nÌ\"Å;>1»ÚlzöË£Tr\ÇÑTÊ‚^•ãÙ ±¬æ¹OÊTŒ½þé<œ†i.ˆ*ÏKHl æ¦è^‹0öÃH’h#l1œåtg*c°(ŠH _ AÇ®;F)‹\zÓ±“ ­|î%Qq×óöÍk ©?ívÚ¶Íɺ è[·ï-©‹ò2¸ª®ù›Ë5A.âï6Ú’ZW¦Ñ,LJuI—UäU¾D./]Žãõ•œÆ¾ãr7Í¥1;蹿O,œQÂ/r¸ÂDál\b’©;˜û¡”Òt¢Äç@ÇE\šÏ ¬š²mŸ9àw‘;íµöÚ•ó³Ó­[›(¬iš_¿^i€â¨0Àæ+ëRµÂ^7êó©Ïдã8#«'ÉRNU^÷ö÷Z­Îþdz$ömoþËU>JcØ=hB׌öÕk ‹ÉÕ1ÚݘC‰µ;?ñòÕÛJmcã¦~üëˆe®¶ªþ—ùñÜýqr<´À}Rœ†²l‰OÒ‌Ê":‡eñTÑ‘HšQ´¶ƒ2 Ü(6³Ö&¢0 ŸÙçÌLf²'Mb-Õ´Z©Ås!¥(^Þ¨øÄ¯¼AðçHA½´¸Òj)ÕZµ‹I§Y:ÓÌ–ÙÇ/ÿ`Μï{Ï󜅺~óFKíY¶‚{|â|úîV×ЇaD,¯|û³õûôÌìÅK“Óõ”’MÍcàoѶý¿Û{²”‰ä¹£‹˜£» XŽb¢{p¢– ªV+‹éO)˜ÉiZÐêZ=Ý~óî뙩¹éS3•j‹YIȯ®üh·vêõjc¡Q®VÖ~®— ÅlŽV÷7HiÝ ßõ,’$åù1Ì`®D ‚N2•>ÔÕsç‰ZƒÄ…´(ŒŽf°ud%aàG™´T«ækt,ñÓ$5Ïï÷»MÝj§D¡+¾~õ¬8~¶Z>Ax,›P(ˆm Û–“Òiø§$ VˆÊ)hF`_E‘9ÌÄkth>´Í°9÷àáSC¯^¹ÖÓ»œBYPò¥ýƒöÇ/Ë ÅCÁÄDâ¸Û$ íÓX14”ŽcÓôCÃqþ À±Ùõ4 Åa¼o§íú¾ufèf¦ 43ÄÄá¯ü ziŒÞzá—@ýÞßÐ(‰7`ŒŠ‡È“±76:¶µ;][ÿ‡oО>yžßÓÿù³……%Ï ³™i:ä =Î ÚúÆfvzfnaê×â­%ΆÂÖ„Õh6>ovO®¼ƒÖR4Ý,;œàUTÊßR ÅxÛ¶S¶Í2º×G¥]çý‡ŸÏŸ}ÜøZ}³úëþ£‹‹7â–ÕƒGÀ¬õzz×Å™,HIàåÌd.—ËØIjj÷°ª)²¥'LÓ¤Y†`b2ð€hQ¤qIÁ}tº)ÅPÁÈê-# $ê¶*¥­ï;KaoÂ441ªWŠÿ*§I®<´{µJB Œ³ãԜΑeL2¿öúÅ…ùÛçg¯úÀ~>ãbðœŽsÜ볂Š$ 2¢”árÝÀ…¼ˆ(ªº#*ÍQA€žÛ€ôÉN‚ÀCyñ](ºŒ(DˆSÔñ`ÄÃqs6ðÉ_ˆÈ*œ,éÐñ†"?¢X‰’¬$ÓÉ,œ£É‚(€;t±ˆ ÷öÍxÂNŸ&C|š—$¤©‚mëŠÊ@¢‚S{žƒ›»1áØP!²AŠXMÕÜáà°uÐë9œ¨á\L^Ómšuçñ“å踕N™…ÙüÛ—+ù)ã\Ú„x.ÿÞrZ-`VcL¡è096Xèã€!Z8(“`Çp0Ïø®m…ãp<9ñtyêÍ¥ËWœÞP§,ñ ù“›­„òÈÚ¸íº¸U®=¼wwíÕ§;y©0î+˜Zß9lùQu;¥í¹üµë7—v¶¶ëZÀ!ÝH–÷š Ó6âf£sDó4CFëX”´‚’‰!†‘Ÿé<›Š¥ÿPlv=MCqïÙéËzÚžv°!H$‹ N…D%1&M¼ñ‚xë57^zÉßÀà¥wÞ™xˆ/12‰#lñ Öµ[_Öv­ÿ~‚6í9Ïóüþç9øÉæ³´¦-\]¤ª…̇»7n¯ˆçøÃÚi5}QjM½uÖ&šq³Ý5ë­¬K‘ýÆô Ýuüü¼¢P–ålß+¯iòèOggÿðÁÆÃ—Û/V×K¥[%ðak08m·x"§R©¸KˆªÊ]ì——‰>ÅŒ<ªªæ…î¸vOoƒs#„ Ê×åPŠ{Ú錒Y¾qVkL˰Mp×hþ…tËF¾Óif'‰Â†OO:åO»†^¯LN/²ŒPÒè÷úMK@êñ¯C_¤›[Û’6hãÜò@C 9Þª`pßy>†—:©4Z#îÉB¡"|Z sŽõu½™Ö´˜]\—çYY’âbƒX™ J`UI4›ÎÍ(ÿHrÙ å|ëÛÞ—Òõ…È·Ò)òãóÎÆÒ õlHwš¢¸W\[ë1v¹úsqf)ðCÇqy6‰@\àðí$QEF8ØÛö¯qçޣׯ¶xin¹˜'<«ÈI&®"È(-ËÂjw.dAº÷©â¸Ï7o^+ÎMÏ+ëëË‹+9™]-CæÍ»·’Ÿ›PmKa)®ð4¥Ê¤ëÍNrÙ\¿e… YžB®ñÐQ™ÅBˆ0«ÿl.½MA·½¶×¯Ä‰“æÑªIJ€R*¢‚ zDB‰–/ÀýPôÖÑ ^*RÕB }¥ªR‘æá<¼~¯™·=X{ïÌÿ÷ßA¯×^U+e8óPlûï×½v»ƒ50JD¨åF:GÜÀÌêó·¯3à–YáøR{ܸ  j·,±ìqÙéßÞùøùÛ“gOgçæWWžß¹wŒeµV IxÚ<ë‡fÆL$QÀK$!8­Šeåi ÆÒ4(ïhd³ñ®Òd 6æE-ˆ€ÞØhdà»À'©†Eü˜W”2b•ËVKÈŸ®\®Ð´»@8mHB<ìA¢¦ï.=TqìuD·°ãž³7—I¿ºð(3Y‹1˜{>eä=Ýw‚!§€Ÿn)ºeJ¡ïŸ4ÆÄ]Z\°¬ Çt–„q<°Ï¿l}¯Íž)À ú§’â‹<¯c3?%pÏ©6 ´\A’‘ÝË[º4Ñ…O‹Ù\ä8Ó9+eÐpH…ˆ©Žnâ\QQuc¨ýÝþÈw= 1ÃáÂ2Qtv—Oˆ-ÉÒÿwü‰|.cªAÐsÜz %|BÏÿ\xNT›©§²ëŒú#׆ã>òè‡Í­õ÷ÛÕ™:(ƒÈ±^R™£vë¢6mú£ϹÓWª§³lH#¡‚øë¨ºÃzG¾"ðN™L²Ô%^R †aŸt$E„D]==:¹ÿàq§ã¯¼X•1843$èî8òNAá“Ï\*hº6gS×??;z Ž”d_¸ž‡"Œ6!>‹NJ%S¿òFãÙ\ÎÆ’xàAðpª¤fÿ§!dô¢¬ÊIL’¢-»kʹÀtâ’lÀÓ=ùy¤¼‚í4–4ÙŠD4ôȯ³þë7o„7ïÝUR(já7êõ{—£ýƒßÖÒªå”Ç“ Ù¨^÷ö>} =wìËÖFkeFFwïoÿ8’`†û‡í`.Ô—ÖKvùúâR´jõæ€Ë2Š‚A‰PE/èű¯«`G5 ßhbÎx÷þÕó/KU5›gLš $‰hªˆiﯕ‹[[·î8·¶#lŸ ºŠS°r×›×V—+õæ·½Ý/?·:oT‹á(Mˆ‘7)e{]xÇÌ;ݾ Þ XqõÓ8éF¸âŸ\ËOÔ@Ÿ¾Ûí>K÷Q`³,à. ñâ0zÀ(gÿ5áêŸ`âÅ“7OƘxò@<£QˆGO"$@ɾºÛÝí{fê×¹6i:íïû=:ß ·ýüEàÒ±"N²ÄÏÖ–¦Œ™™™yOFMÏ”»Ðs Ja,˜&¤8 CQ4ÀÞ…¹«º>™Ëé D’€÷òÕ›úüåû›@qÒ»ˆ“xïüä, HÌ¢¢Q)•KÁí¡d5H䨃¨ºQŒ’]và¯!ëZ£6õ‚OÎÈç­®Ùî =j4Œ‚¦šSm"×…ý ê…ñÖã§77å ßñ@cçM–ûÖ€bn‚ÁÄ…β^E’”`öR/Á¯ßß/ÝZ^¹=PNKÞÐØ}Uü‘ýõó÷f}¥Z­Sà© _È«dÔ¼Pa„…jy2ͨ~gëöÚæÊÆî—Ÿ?ö>ÍVwÖV‡C»X2¥©¤7-Ëb6£¹ž§¦`uÈ¥ÊÀ›åäÿPl.¯QCQ¾ÍÍë&™LæÕLÇkkk¥/Ú… µZ”JE¡[w‚ÿ‡kݹܸð¯P¨¸q!H¡Xm±N[ç'“;y5“›x²„äæžßù¾pï_pq"eçKa#‚ßiz¥TÓdàX¼œ'31\c>…öYÓ d¬k(ÂäTê. ™¦o?}6»¾„!`.€†:˜£ŠÄ°&‘ iRÒpvÌWK’T…TÂ"¸€ÙH÷ýhH­rÕ€— ŸIšˆÆ2¯c‘ÿá²0¿ œëÇtcái6ÉF_aU±AUT‰æ×ŠžW£€ í85ÕÕý¥±(ŠÔ²];zôð9Äsëä û+Rç׌†I“‘娂z,L±  q2uA¥hv$›GºïØ®Šz9µìo•â àÞÆÐ¹Hǘ!œ Ä ]è ÃÂÐ$á¹ ˆˆ “l”Xs“—¦ VûÍ3”0 “ýý­;kó . =¤p0pÚÍö‘^Ÿö_¬È$) Ù©]UužÃv¯R Ò¹Zìƒ<5¸EàCPú9£aÛ¶€•Ú´Iˆ> ¢nÇr[Y^*” „Oßß½w“!ZMàáIã:fùõÕtsãqe®Q›­íîl|ùøõüàhóöâiïwmîέëíãVL['3×.Ã7ùôùÇ̲ÜbÞPx¥¾èy!!YÒ!87‚ÀŠbà´QŒ,„™íUUýëX]Ë Êûï¶¶ï^ŒLÝ ÛvÇéþC^>¶ÂÑ ëývç°~µÑ×ÜÅšUÅcèg¨ñL¬(I!Ÿèø¤ßõâþͽºT†â"ß$ð¡´ˆB?¸vêF‰2¯IX‘Y’™Dy€ D•纆KjùYÿ ÊÙ®Ûp4]]ÎÆ`e£!åë`1çl•¦P«ÙÑvÄþŠHSéu²¤]Ï!*ý±‚ Îñ´EäŽ)v¤ö€ ³ šW‚Û¦ÖTKsúÑ[{¿Î~œÏB𢔲©½ÇG%J?Ÿ~Oï>8xÖÞ¹3YÄ1¦Ó°â >¹·ÛíAútÎoCH×j]sH5.´\!æÀܸɮ‚ö6ÿÝ?éZM¼Õ›0M-KËkÿʱŠWE@7gÑD†Òmðþ$õ;ÆæT„@½¦—ƒx9† V° d PÛ½žÓn+‡w5C§™OçR݆ Æ Ù„²¨YM1„£—õÍõQcëëlùöý»O?,“Ø14]Ò óLý°ˆ† Z¯hŽÈžXÃÿ€csÙm£°{2Çפq“B/J[¨¢T‚—*¬X v]ð(¼¼;Vì*$Hm%Š@©TD›Ò:.všÄö8N|çw_a~Ï9çÿ‡}õæ5èËbÌkKˆ­fÑdM’”•Ö`Ô7/@T šó‚¤¨á Äk×÷€T˜2³D9Šƒ°À‚rI•Àó!Ž®:Q¥LDÌ F©©ŠV/!’GpPñÛøŠ‰‚ìåŒY4’5©1§»¾i'  j1URpÈÍà¦pÍdYj`Q)ÆÔ½·§®¸vžºÞø\Q‹a ¸Jž1VnßÕ——!`r#‰ñКés«g'¶;J»¦Þ¾¿ûõËÃçÛrkÁ¦Ôó#Ÿ†cJ/„½*ŠŽ7fAÊ ¤Ï5>~ÚÍDqÿ×Ñûw:O;uIå‚2dœôPFÓ˜ÊE³&¤¾åOlÂ3Ô5+% — áaÌ8œÅpºqó¢ßâ¢áfÎSß´ŒËó?Ó)åuEÕÕµµõ¥•v’æ2à_˜~l9FX[áñð²—Í(ÏçyLcDE|NÂ4²é`–ˆ­–T+ꋨX¦Ï…„‰O§Ð3[¼ú¥æ¿žV¯¬ßZÒæŒþÀ0ìvgEiÕt]»ãÊdž÷£{gqzÚ?ÜûÙ=ü~r¼¯I¥ZJ»Û/wêÍeóÒ…é£ÍŽ a£±Èr×bDx7K²XÓõbAaAPÇC¸[œ"Ö –û烣‹¿oßîð0µ‰3r¬Á•Yæ²Æj÷¶ôÎ~Gq4ß\lß¼Ól®Âüµ†|ýÂ&I4L9N®Ï×–r•+ÂÆæÖço{/ž=γ"”MÐI‚CxÑ£ \•®ÂÅeH<3@åÿpp-»MQÔžømÇqâ8/%QiCl„T‰Š5ÿÀˆáXòH°Gˆ¥U­*hÔZµ%)mšÄqêÄöÌøÁ>afî=«97÷âå+I,„aªë¼?@¯}¹»Š@%³À™V643Mq Ø’„×l3/€¸Ÿef˜!µi˜“ˆP$ð*XâœZ΋†s‰*é9Ðù1ò' ÜáÍUG¦‚ÄùÞhks³YsÀÌßónÎ)eë¯Àÿ9ë9N©7r9°LÁF7û{{I¥Ü­ª¥4 û- °dCoz WÞl­Å™Ž™ yF®·n*rJ£¶@1ÚÙ=xúìysiùïØ×»zgóP2Ž(è1åá ²$ã “ŒÈ²”¦i@‰&+#dëhµÓVi¯—›NÛ®V¬"4cì LcìÍç®eæOŽºoß¼^Y~ r«\G ‰EÂ!Af4œb×ëpHÍ25CѨk¬bfhžp˜Æ‘ç»,¸ÓiÏ&ýÞéþbÉ"Soëã6àMÙT’ð¼À‹Ø“dà€PA•-»d€!r1ËïѰÄÐÝ0HÉ©µòl#ˆZtŸ½h –jØV𧇽÷ï>­Þ»ë…þñɯñÐ[kw>oîŸw7Ö»G_‡ã£0<§è¢h£DÈi­¥Rë¾l6x]\‚iQó…íí58@Qu]ÄŒgv.QIE^Á˜åÇ.ûýƒþÕã'ƒë±?'8â,§Åâï³A½Tꬬ‚nÁ9»èýüÑmÔíbýæòÒº€s•r5ý?9²*UÉP1Žy•ê·/|–¬?|„´$4Å´h•8ŽíçãyFˆ$6Oÿ'ç²Û4…aÛc{<ãø;I“´´)í‚ ñ<HìØ°ã`Ï®¬€—@,@eXtƒ(U¨Z’¦iIsiâ:¾{8é~6£™óÿß悞>{îOC.ËÀü N‰šä‹sí¹F—I7ϪÓ0[\ºöGál¬9 ½~§CYÃDE,*/âÊ52”bŠsÂ#•,ŽSŸ& Kü9O©œuYeõ§íý}ŠÐƵ83ªdÈH@>–3–ÎÔ‚à”ÊP©†iæi28¿è÷ÏTYªTª¢¢‘ä:5 j`°6Ɉ#y:îÝX ·â€ ‡ñxr‹†¯[q ¦ecª_y~±ZÏPu9õ­Z%âDÏKjåÆù`Ú=éKàÑXŠ8ÐzÃ4ÊD±ƒ9T=§éêöV«Óþehl³U,`ÞµuŒù<%ù(œ\ñŠf‘c;X‚½ìlo<%5×,E×Õ„ü‰)ÒŠˆEï Ì2ŠæðjØ2uU^Ü/üöcß]Z5¬%–焚Ž[ö.»áõEky¦$ׂLÇþ´ÔXI˜ S‹[4¬AÁ‰f™VÙÆ:žýƒ‚GQ”MfÑQwÐ÷BMjU½\™œ“.¼lŽä¸#&N˜ì°BQqo7VÓ$…t'\Ý\j”j/_¼nÞ2l#ïÿœ ÿ"‘‹aå9ùä:¨¬m9¥õ?íá—ݽ•U»X²ç¡Ð>¿}·“ÍǪ"öº‡›w×E™U›µFkÙr­Éõøø÷Ái¯Ãù¢«WMÝxa6€‘ž'ÜÍÏuÌôw^½yôø pkæ`‘ „ª†26^‚`D5…€ªâÿPpf»Maö’ĉ=öıc§MhK‘ ,j%î\‚@Bâx5¸ABÜp‰J⢠UÖ’¶i›fq§^âÄã%ü~Köü>ç;š™Ã>zòŒfb#¦Ñs,˲ÍA×f‚ÔìÚ¤uÚ&‰f$š:£ÁÅÙyûâ¼Ûi‡½l&DÓŠWWã“¿‡±oyv/ Dê Q:Ч6M§ ȇÄ`ü©¤ÐjèŽc6(J"Â;Òƒö$·¢,gÒ´(ðÉ–s8?>þ32:/RócÒçÁ9<'¹[ÐE|’J$'d9AJjЍ¤’M`Â(*’¨’˜2âö§½}]CrY]©À³óe•@Šè†`Yüx:Í`U½ZÆÄ\Ï0/N{\*òïúD+.rf!Å¢ƒÃãVë!AΫ ËŒ¬‰iû'Äy4O›“ž Â6õqA®Ô®W–ªýaßuíXÈ“ ¹ó‰°,J*ÆxNSŽç;À…ÀÏ•;Žb"ñœ&á Eûrþ¯Ñ]¿»YZXù¼ÙéÏ—Q4…8¤¨²®W–—Y±`yCšã”4Ã'çZ8!‚ä3°0Æç’Ãã“g!É!D¨¸k:½á>#Ÿaal0ŸA|Ü~$†fšï¶ŒZµö`sµ\+Ý^«gÙ܃Öö×Éjm±yôýçîÎn<þÕ°°zóéË;{{·6R>³RÕ™¹vŒqIU”Z}I_Т8ø¼µÕhü~ûæ]õÚR©¤p¹Üxl¶Z'$:YŠžÿøþÃëWÏ£vjÜ_+A¨T¥e'’¶>²g…¤p2‹Äâå;XÖÁ7fãDÆAù]ÏuÇ›¸íË3H2#P„Þx¡¨5v÷=Ÿ-—ëîÔGÉ~"Õï÷ç󈦢‘aÉ’.¢‚çFÍf翜KOa†çÒ¹Ò¹ôÓ‚m¡@Q"1$¢‰;]éBþW®uçÎ#M .P£.$B*4Ø–ÚÒÒR¦—™ÎµßÌxf7«I&s¾ó>Or¾C>yübÂ÷Ñh`µ[]dYÈ5ãñD½Öù²ûKU-ej:œ«¦éDL„üÝtzz©p37· ˆ1ša£4>)H %(YÜožUÕv«|\Ô»í9ŽÑ£HOm_â¾! zF@fÀ¡µ ÑlÃð¬˜Âap#CX³ÞQ³uäÙà)—ƒs„9áZ\à+?:n[^ƒŠr´áEåäw~1“Lɮ޺6èzXß¶†ß>mgsÑBAœJRA #¬šD~˜¿éiò °QŽS©4@¼À íæ0!Ç%YŒÐ$/ÿG9NÅ…åj‰Dt}}I’¡¹Ç}-¼ÁÇPÒõV¥R=: ,Â/0¬À4Ž<`8`P<ÉrblËE.1™~h?ž¡0O) NèR¼ÎyμRççÖ¶Þm…[I¦iFéÏ¡çØ²$ÈO€´pð~ˆ<ÜS@ô;zãïY½|>ƒaܼ$Ð ™ (E³á¨1Å’Ž1b 19Zœô² ià ‚”h êP뫺>€6¸|=W­VëÆá­n÷Ãû/_¼]Þ¸•ÊŠ0~öôÁéÁa”­¾‰£àÑã‡û{?ñ€àY¦°š©·Šñð¥ó‹ ;Žå59%#ø± ‘ã굟…‹îÎnÕ2í“£}¤ ©Ôi븧 ¶NF¿|O§™¸> leÛF»Ý䆥㼠DS„dJ’‘ Íf3šœ$ZKÄF¦~wŒñ y\³æƒ³³:Xß{•í%U2á§7Ù„ê8¦dê]ô±éŽçá°/`îÜcy…"éV³b!W’¢þ™Xœ¢K0Ïá1oœŸzÎlå òìå)Æ¡fÍÎAsï}Iã®U¶`ñÄìÿhHг@íF†3ÌfrúÐÜýö}Ðíg5$£Á»ƒ^±˜qÝ7&ÞpDa¸ )÷ß-,:—x—+¥B.›ø‡Á´ß?7§}5­z'ÐCxXVã è)›¿JbQ?Y2+†Ö¨·¾ìì!¤B©êí‹ónôÓ]ÌÆúc¯ºÿöó»ÆŸVVË<{úàöÃB¹¬æ‹”ouÏjû4¬­/zç¢7ºqs½Ö<­<ºƒ%l Î6/¦U1dD’Øpp I@‘µ¨…ÑòÌz%%äYCúþ4U ©€É§´Õ¯ÕËråISjcÝ{cfA{¹ŸÉ§å´€RÇò †mdÿ€ƒ+ëi"ˆãÝíÎÝî¶{µ¥ ´$DƒD4!ú€<ƒÇ£ €w¿‰F5&Ä„Ä(Äh”ÐZ„Bé½lÛ½ïuÖÇɼLþ3ó;fòÿ%Ÿ<[7LõÃ8îÆ³¼À O7\Û0@š–­ŒC·€)]/îɆôLÄAfpèØ±îÀ–‚DM0$ÇÅÙ`(·qh{StõèÏææËóóåßµÚóçky‘›+—S$ÐÕžm‘„AQ† ¤,G ËU}ˆS¸¦©¾¥·z}^ΛçX2¢Üŵă$æÅñ³Ü[×sOOOîܞȉLœöQ6è÷mKÍK¹ãÃÊòÊ]ž"‡ÊMà9  E‰±Þ8n7›ïß}¸6?ûeÿçli²˜ç‹R&ÓÀöHÛ­ß'l' ¨VõøÇöçO{»ËVÅœTž-!¡•ô¢>c×uÌx­$ « ¶ˆÇLšÉp<ÄWSÓB% @¡én¯­\^Ú¨Ûéü][]!âDa¥$‘N€ häÿ£2NÒðšE,òØómùäˆáR«Æ]HâJùfåà[½^I‘éˆ Q¬/aÍÓlFàDèâ‹»R\Ô±YÖ #à9ž¥Ý½^SÉ2¬iª­î…¬ÞnäXfiq)Ãg}/°={2_`YA–ÕÎ¥^k´½Ì”oŒ]šá®–fnIÒ ] ³\NÓíÒô´cyG‡58¦ã$(Y÷öÆc½Ûy~Râ‹PxÐlªƒD@º™D£³ÆùÖÖÎã§ë4“(¨ü:©V¢$BÜ)_ŸË–Âq,E¥:A¿'ËŠ†@´¶ƒÝ¯;¦¥NH…NkÀÆýÍ!4Ç“Ss–f ÇeùÑHyýêÍò½û ‹ýÞ™"·¦ ~d%Âе"MƒDŽ$qÂ4ppf;mQÇv¼ÅÆ 68 „°T©”H]nzß[®¸è#¶RU©*B­(j©DU!Z–J-UB!!v¼Ä»Çéq_Àžñ9sþï÷Ìrgç%$bA€‹²ƒÏ)¤–ƒAX).Mnšq€»”‹ Ãä²Kf<àQ ´+³³ 0ÏËr)Yç].ÅPÈò¡ñØ$’ω.T˜‰³ÕÚ%öOû—V•4U…g ‚5)Þý–‹,wäLC +Çq'`ð¯oº®ëV*uµÜ(•­š§óº1D 8áT'²=K7‚З¤b¶!…\Iö£N‘:¯fò؆¢–‰£`y­Áp´9ñ1ÉB)œØŽ9FžáXêëWo–4uyµaønua¾¢•€P¹”úøîƒ@ÅÍ ¬{š!7·^ìî‚¶\Û÷&2ŸÏ6:$HÜ|Lsà’éêþ½€Q±\ÁÐÍ"'E†Ï40õ ‰MÛ¢€£„Sò-ÍÌJùÍ¥F`ê©OuÇFâ BÆ`&CÏ½ØØ„ªl 9­ž„¸;°b)öƒèç9ɰò¬Òk÷G#x¯‚}[`ˆÏ‚„8Šº¼<ß{¿ÿvïðôäB+‰µÚ\¹¬´ž>ò pÑ3ìqÆ`‚(`yˆªt{o¨µšg –—fÄ«ž­;)#ÌäE9 ÁÚs[ÛŸ¿·;ZYIãx¥^%©Ä°î!;Â(JÀ(¦VYénwô8‰ÎÏÎm+888´l}½Ùl=yþ`}ûëÑi¯?\ª¯xF4"IjJ·í)ÆØœt»ýão'ŸŽ¾_wúÝ#kxÏz Á?J†îq ‹rÓ»Qðãì§qßkn4ËZùª}Å âêÚʳ‡dàìW60 <åhAq˜ZŽõOŠÎe·i Þñ=vlÇqn$ª!ISÔJ­Äª®ú°@bû°äx•ºAAÕDA*(U.Mb'¶ãñ5æXòÒ›ýÿΧ9ӯ߼U²O6Ý8rBâbŒI‚S¢·‰Ót+KyNàƒ ô³¿nDR+?½›­Wv"Ž“0;&‘jÀ[„t'¶éϦ‹›Áߣ§GÖj6~oìVÔ sâ0[¦=þ7ª–KzÝs×ÃÛAæXA)ÖOA+³b¡PmÖ¶i¡H"Ú÷)„EØGð0J³± fs Io|²!ž¢´¢­ÉEA–ˆO®û—ß®¾ô/ûkÇ+Wë‘ Û„ÑŒ‡¶»}÷þ(W‘dxÚí½ÃýÞéÉédivº{Ï#´ü¾Mâ¸ÓkuŽ»Œ„ ›u§Ð;®œ›[ CçE&;Ȥ„彄ƒ…€SÖÖÔZŽI5´Š$© “.,3Œ¢Bɸ_. Ô z›Mè%bmc;ãã쎕TDšçâ„ #Ÿ ±ç`o}Û`D6 Ys¾¢BÈnNÍ»é´PÞ98:5ð²˜Ýs<ƒÙ$E«•‘m@ÆFA…@ƒ*…ÙbšÂvÛï6OžÄ÷zÉÌ­Ö[<§J 8|in¦”2»‡ÞëZ~aY£ñ2ˆ©JÍÈ8FQrEM®6t½Äì÷Z,_\|Lb»Ù¨®|ru}Óÿñ“åÀûÆd/HI’òb£Y—5i½ÝúÞʵ'——r!©µÄ¥uûåëg>3|¾Ÿ/«Õzo¿ÝÝoCf¸8m³¬£og?ýæ ¿7›=I˜®Ùqˆí¸×ã»ÅßÍÁ`¨•´(#‹'³Ñ0öÚí ° I@÷K ðÊxiÐA¬*yr!Ó«IXöávNò¿\ËnÓ@?Æñ;‰ójš&NÚD)­º€ìX!±ø~¿`Á†¯@°B|] BtPUm)-mCÇ8qÇosÃÌhŽÎ=Ǻ:̳'2*À8!˹,‹SÓài^Uµ4Á|^^-³¢ ŽÃ€8š¦†‡ß¿4ë àMŽcA€eqÕí.ÍÿÁ¼0&pŽëÚ,Nšz¥Ûí Œƒ™³ÿñG½ª×Ê:PÔ²…C’Z% U®5ê^˜ QÆÂÔYF´ jÉ,è}Ìä@XÞtó9áWûR”Ò>Xþp‰s<' àè÷³Éضm:Í®'ÆàøHPEQUL—L¬`£Õ¿¸²ö¿þ¼{ïÎÑÙôíë7Ÿ?mwô(Eóó“áÉáàt÷Ö. C/ò+°WaM¤Ö(ò=°û¥Š&¬ŠP t‚yUñüèïõøôx˜²»„‹ D¹\,Òt’×4H© )Ú… ] u£þˆà­ÿÁ- n´â¾ “6iÛ&™G&ÓyÝ;~#Üõå>¾9ß9÷Þ9óôÉ6¢sˆîx>ãE12 î³A”BÚ«÷£´¢ ¤ÌŽG§Ãß+­öÚj›Fdr>1 ÍvÊ¢s6æÂWžëF€ €µÜ^­×—yIùüéG¿wvïþæÞ—Ÿš-¶Ú‹¼"™†]`ÔœabÙƒ¨<#•šd×vpNÒ8E)ᘠúOæIs±Ñê´²2/ºÑZ0t‘Ù ó( Ã`bh: àÄa|DÞëÝ×oßì<Þé®ßþº÷ýå³Í;ÝíG—î®q\¯kaìë¦Ü;.4ênÝšFÌ”b²šÆjÞßý@Šle}Íóÿ¦9®®T§@ÞžcNG—½á‘ƳtIdš®®›–aT©’ƒ&ÎCXiåÔ@’Ù º%ˆ‚ø²(‡“©LVSW®£„0賂FÛl.ˆöýñ©‘ëÂU¦ñeU½£X €Wͳ2‹ Cr:×n Žÿì½ÐY¤I‰qäÉÜ—-z¾â‡^–%š©¤éUmÁ‘]‡ìèÄÓUs2Î/Î;mKàˆ&¶¢š*@„hÿס"*Žm./Ö…›eDÈ´I£AÏðil)‚,Bz‰õ%6]¾B1•{e†jn„b™šK´þ‚yÁt76nùøbz"©–b8^ä}Üý¶µõca8'9%W‡*üó¯š [ªz4RH!#¢ž\Ž+[ùnG—ß³xnØj­.J°HqØ„A¨Vωÿ/Q^bÅ0T]­*Ò,uVÇ0Çýptö¼MCQ¶}ÇIì|4qú•¨(¥Q‰ˆ‰ LˆŸÂÂ^110Š˜ª¡¢VP•ÒH´Ðb»Ní8×öµ‡s;z³äsÎû¼×瞃ž=ylÚ<ÏùgžKŠZ¯êc.cð  óy…óüóvûËæ»( Vo­^šoÑ•8mµ±1màÎÆ$/°Ùè?´¹hžœ`‘'ÌûÍO}oøâùÓ¢&÷œÀ–ºÞèt¿ít3”¬L7uÐ2ÇÑ¢žçÚ×KR.Pp•—Àz)<8üÝs7¯Ð1r£ ûà^×÷ºF'YÅšÒqß^Y{øàQ½Ú 8¼³ÖÌK¨T*Ì·ZŠŒ^®¿6~u®Îé«×—.Ïîð&Q”ál4ÐdöÍú«í·wïß+T yUãE)²‹óŠÌw‡AÉ<ÀÝåj•ãyŽ.KlËSBçÖaºíÁÜŒ´I²Õ?å%8À–S¯TÂÝH*BTK)m–K,WT¡®kz­Ü¨ÕÁxyŽÍ¦!Ç¥ˆWIÄxn MÑæ¸QA`k¢P ’þÎÖGðyËK7sLòøÜ¶ä‚Xn51NŸ¬ÉPZÌH±X@¼¢ÝX^™mNzù°±]RåˆN˜ özPªýN{çg÷àïaÏSKÝ.ói5ëúàûóf«ùlg…Sø¯GúÊÆlz¦]c–ùñwA™6qeâYùT\JdXD5Ú oH±",„±Û÷º…ìä(:³Ý¦( =c;ã-vœÅU7Ò¨j«Š¤!!Ä p‰¸â‚'Câx.;€ÊhJ!mVâÄqb;õ2æØ`ÍÅœ¾otìƒ=|AW©VÕ¢v\'MQ}§ÁóÂÒ¿Æ ¥B·nWLS„Óv»á SLРOJ&Ñ58ëÜ‚Àƒ‹ø¢ÛW £ ÉKÁD€ â8yþìµU5ꇻjQIqVªÍÖaþ=«,¦ ð' |>Ÿ«š*ð\þÓ[‚]×üЙz£^4ôæ‹Ð[@Pa{#e&¸’I‹Šš\ùg—Ç­–ùãÉ@ÀISæoæúŽn‚“Ùß ?yºЂt¾ï.˜smMçîö.ß¼ÿЛ¸/^½Ý¯o5¯·šG+–bAòÃ8Éò»H×]ˆBàMÃ`æÍóIeÑ4JD>Šýo_?þî´M*z.c˜!>‰™$Ȧ ' Xá ”#’Bà4G f’BS”Å<ŸÅ\”2pÉ)c„b2=çà—«ºÑ,7Uö•gø ˆsœ~:>ÝݽIf Šœu½O,gé.Çö3/Xñ¤ô‡8Îú=ßOO~J¼4ÞˉÃ)~ðèîÞ°_VèÑ诸f͈òw>ŒS7L®®þ™Fèú(:—ݦ( ۞؎ïNœ8Mš¦-¹TDT©TÁ $/Ç– {€`D+!¡"(UhÚ4MÓ6¾$vÆw‡3O`[:sÎ÷õÏ —ÏŸv÷¦Aè¹³7¯_å1k˜íÝÌîñäælxÕïuëusk³È ‡øíûwƒA÷àpà`O•”Ή£ÐŠ BVÔh•'Dœ4±¦qòp)DyÙ( öYŒòÖ!¨˜7œâ¹( ÀDŽÕ%´&OÈþI–çqkªd(%Y“ëur=MCÃeÈUU5JÙ³½ø mðäüäÛJ2Ï¾× HáK ŽF¿Î&g× ‰´&K÷|X¬è¥Ïžü8þúù˧Ûù5<ýbrmˆfÿÑ~§Û­Vk`ƒý~œÒ³ù¢ß鲬Às)}”¯©tµreEdIàv)sLx®5ETX3TŠ Lã0c˜"ÀI’ÐiΈŠNçøÎž†tóÂñƒ¹ågÓÚiò¢Žx(Á4Á»´‡ÃÓ•0[íªYÃÀÕÙãTÄÝö6öÛ¹\¸°FnIÌ©H“óp)ÌÐÑÒz{[`$31ŒÄûaà³JÈJN€ÌE¨”J ­µ·QÛDÐ 9¶^39¬TCS½vqM¯&°çy¨Ph5›0å¾ï/tM мuoÍnf0ÕmÛ£qvçϧíN/Π `˜1|9Å’(*¨ƒ5éÀˆ åxtúçÃLJ{uSYa› µÍf'§æÉºÑx@B#ˆ¾¡46Z ÌÇ£ Ëq޽¼øw]7Ë‘_@²$¯ã´Y)—dáô÷´i’½N³ŠDƒ£ø^¾t#Aä ^Yº¡C;s8 Þj|ucÍ]@dˆP5òuú_ŽÎe·i Ãöø2c{'ÆICÓÖmQiA*Kh·H ^„%å-K–ìx 6,Z©EUÛ¤´‰ ×÷Ëø’˜^Ážùç;3ç?¿ð~÷wç–%‹ÉUד *+ÐíZ‡‡'çç¯ß¼bŽ3N°Vwv¶™;ð‰i™ËEÄÑM'pM]@ö(Œÿ•Ć|ÏÐÙW’ʲ`-Y´Xdã²9º/Š2ËY†Y@Q,æJ+¨$Œ2i5F2æ™Ê 3…,µŠÍàÅ™ ’²æj‹2‰Ü$ÍÊ8ðÆžín¬o=Þzzz°sy<¿¶Yµ© IÍöxŽl;&IðsÁÜŠìñ§òà÷æÆò‹gÏ×7ž@ÐX²Öx‹ "é8iší½³{ã@‘KµÚ´ÄÀZÁØ0Çc™ ÄJµšRL‡,f“ÄüÃczD&90ìNDCPÓµGëÞÿÞ=8è¾xSk´ Ý™Nã釸‘qgV9Uš«Õíî’\b/t7><ü8_ßdóøâϧ£Ÿ5Uy÷ö¥$IJŤV¯ÏOx>B-øà-øŒŠ‹²|+9Ad†([!#• 2p…|šäá Älþ‡ØCË¢T»»§©—Ãim±Q©Š}ýþæï¥â˜š|žF‘À `¾6LjfYÃȃà‘_ÎÞ‡9uZRÔbšp¦d¢ÆB©À EXkOññÆf«û¬{ôõóþ^§(U,Ûฒ¤<à„¸ÝÙº¾º4ÆÚRk}{£u3Òryôëâ›>´ ™) y­ÙE¡±¢œi·}ãô¨÷|wgA%ÖÝíþ“:KØÉqÏGÌ‚¡æyqÌj’?ÈƉï2(ó,˜¥xlÒÁ@StçŸÝ[kAà=Ÿ3»9uÛX%ª)*©à•¿À ‹þ9ñRÐ ½Ä «h±5¶´Ñ4í6IÓf“M6›=ew³~ñ Ì0ïûÀ0õrë™$ËV¯ã;=¬*V×ê‚;µõfó,‰Ñ‹­çPúÂ4hŸ6ŽM‰œCQô:ž3víIèùñÔ(ßƈiHV2Îa5K#DÆ#ׂŽVRóf£É2\¡d€¤Ü0 8A/äIF­âÅ ^?‚ÈAÔ|†^ã8ŠuC¢²Ôb0¼çÄŒñ<ÌÈÿÓh¢ÐY¢HŠb¸ çTà–¢GÖöÞïÍ'OñR1NÑßãÖ—oßc‚ÅmïüôÃäæõšªjE½À ŸÃï>ý°3íîúf½yÚL½ÉãG÷ëû?EéìAmmuyù¨^_’Ùĵ³ÈK‚@ \S$]’ò<ç!Ã+X× 0!waE‚Ž]†]\à)6õgN’„ GÄѨ(Sr<»%q§óçtÿÉR–  ù²€¤“³s `È—³.'*æùÀ±¼•J\"ZÔIšu7˜yf§}pT/–r·×ªùr‘%P8‡={Ôﻓ‹0pÈ„…‰¨,üÈ ÏÏÏÚ&à*±í©íFpÓàxždɃ“¦åÚ˶,)…‚(FÕŒ„˜5dájÅÐ5g¹~ß6O.ŒR…ã¤r‘¼V‘— >¯‘›`…ô&ƒ_»;áxBs”¢ŠŒŒdÃÞM“9Aô¢³·nT O* x‘‹Ïù2*á€î"Îpб˜%´Öý½Ý{µÖ´7¯?T«TcIB ÎV«Fo`¾}ÿêáÆÉ‚ÊÈK‰s\À+W®R,×½›K‚+WŠY ÜŒA¤¢'WAˆTDy8´–Ê%b%pÿ @Ò¹ì6 Da8ãËØqí8vâÆ !MCIÕFH,X°`]‰‹„ÄÀ³ $,Ø ñ !Q‰H$Ð ­œ44Mb'¾Äw›±žåhæÿ¿3gÎOîíÝ*$$Ž=¦AjÍl¥¹ÓҴׯÞ>zü°R«"å3æx4±f ýàðB?¡“HÄßÛp寙aø·PdeEŠSÿltê8‹Éd(— DxŽç û³7¨7Û¥õ2ÀI%y¦€È :ä d¹9LüŸR‘<2á`yèF ÃÝv“ñrjLÆCÜÀf˜HséŠ&³ÿ¡¹ýÁÛa,è#£ÙîVZM‚TŽTÄJèøQY>[…jÝÍIËb)%Á—^ÿ÷ÈÜ»{ßJ©ßúZ«qçöMIž?{zïɃíV]-‹¹$ÄòcÏžIø¡±p¢(j˜8¢'Ó¥íÄÃøRÛ3˲SüÉ Ïâ§ÐñåðÛÌxI·ZW8ÄÝã*ñ½ÞùÙôFw±ŒïYÂ’'òâe­90¶lÃöÏÌѸ¤òkTJDa°éÅ–ØQænïnvºm sê!†YÎ[¸q„KI ƒlx,Sù<ˆI"(¿Rä`º œ%€D2_û¹‚Á3OçãlAKú”`( Q¦"ÕÀ%§sš;Ie †äÎ TŠÁæ ÜÆ†V¯ÛY‹WuŠt&ªt6ŸÇ£:³ùE¿Vuûà°ž/VÞRåt2Ïbv;¹¸l}ý6º:~vX¿¿]8ï´þto2FÁ]¸xÉÀµÃéMû¼U®ÖÔô L:x|îæIÞ;h(†TŽ“dµN8 —íòò_üñý‡ÐEÇÇV©ÑE_>zôð¥mÙövÓ ~µ~œ]wÇÍæîd4(—‹TƒŒA‰…¥#‡Ö«ÿpt-»MQtü¿ßvœApB¡ˆE ‰‚ÊŽJݰ…=[$>…-ˆÀ°® BµT´¡E- q;~ůáàñܹçœÑs¸§ÏvdQv!0jr–&ériu:Û;O®9ù=ì=%ÕðÅ•%` Ä®¬ZyE8N“ …gbšUÑ-ÁmÕ:æ@–:奆á”uIð˜adh¾^Œf™°uéÓ`¥4ƒ˜Ð\- J9µ ©_$¨ÃÃ#`lXde̳Ð" »bÏÛv)ÑÍ–f!|wnÊš""‚£´C²»ûqÅAП„áÍõÇoß½>8=ºÿèö­µÕžÓ¿‚ÐELæ{ªâÍ~9¿È¢ñõÞ Koâ&Í:¶“gñx2‚:›üË9}šØ,S(²P•syY>ð4Å«üøâŠO²ôÑlÞÖ°A9;ó0*ËÔ÷»Ÿ÷>aÖ¹{ça¼ŒÊ8Å5ù?i›O“„74:Ù<‰¸¼ðd½«é|C§¦–aì;¶qÅE€nޏº­«e‘HTrÔ’`rŒh„ènû–[X,Kwî~³a …‡ñäó—OíÖžm·›ÍµNw»ÕjÄ4N n7—ß ¿õ¶wvíª-Á™{Wýy}£›+•r£µ×ÙïÆ¿.î¯cæâ¯J2«iõ3`¦ï·jÜTQdBÉ*òhšèºÅ[«ô’Ýneܽ€XˆH âåb¶Xþm2ä9¨ÛŠUÆ¢”åªà‹³DêZ£ÙRHŸ9K¯LTÓÌPê¸3‰C ºõüi¹YǪˆ´œ Tр품â”xº"Ëif@fTVÙf”yN¨ªæ­i J@B#gá&ˆ&ü~”ÃoÛ›ÖÍðâL7 Z½].!´ãR±šaüûúÎ'@ Zœ$±¹º(s“gš¸Ž'H²3wFÇq¡Fmçnxß;>¯XÆVg zà#Y1 ³´ZW_¿Ÿt·‰áôåë®!‹qäC)¨˜ð´Š„„ÇñˆkjQÓàÿ<ia×›··×’œC• ¶Ù~R45xå‚HL&šNGÝÝíù|2èÿéìn~øx´sØÞ;x¡(:äjÆýþd4|Ð5Ñó–ó…ËRº T.‘ˆžœÚõýïH›#éŸYoÓ@Ç}­ïØ^M/BÐS­Š(‡T$^ú™+Á O !…§ö!¢…6$uR§qíÄ·c›Ùà•¼Ú™ùýW;ÿaÏ?¿Å¦Î}MÒ%Qòæ·£ Û;ñ}€|%N ’¨œ`Qæ [-¯ˆcÍ©š‚pæÃ`;¬ØRŒ6¶·o`cÛÂ[’¡ÐL“©¦iq–’Á# ñ»I‰u ü ¹ÕDäÝýñ«ÀýUM:ÆkøŠ‹ƒË¬aéÐ_tº[¦‰½©wsó§Z•drK©Šäº®ÀëÎ+8?Yóˆ°0°Öt2mRZ“ŒŸß¾Ÿž¾SñëÅÅúÚ!ƒ¬´VnòåÇõùÙ‡x†wÏø8ó'B4o8X+ÀãfÅúÞŒ«+@.Õ1£Àb)è•w¿`4½Ÿt¶Ÿq]z^‘d¦Ñòçn‘†;{{Ñ" ‡öÚº½Ö.ó€"SïK„h h¾€ÈâXBåÉÓ„&OH8 ļ"ò’[¦jÙ@¯%Ä"ÝÐ<Ö%‡ì?ÏÕœ„|‡3÷.OõŠª8âó1D‘þ_TS‘€á°ƒ]×Lƒ“QÞd¶ Ë(dó†&c¢²’Z EN±Ï‚xgW¿ÿ΃ïß0ˆµÛ*èùÕ²'Ñ2­ˆËE²WUŽÝOÁc%¥¬Ÿæ‘ݶ77mQÖ¯.ÇqXA±"¤ºfÕØ†<üÞö?Ê"_–e¸ðY ‘6yšnòJU±ÑRÊ2%óòÅA¿ßm>¸¼4­ù,}pý<#ÝŠ<Ôõ¦`92¨ 0@@¢®¨°T{k}w÷õñq—••ÛQx}çé¦vr؃º‘fOîd¼³Ó34‰'-¾$‹û½ý£# ›×-²ü¿]IoÓ@öŒÇ;^â%©›p!(·Þ !¸øuüÄ¿pà€h-T´YÜĉ·ñxã G_Çó¾Eß›÷äÏ}úðN‘Én¸+B1´|-ÃëE Ø,AÁV’¬éT–5Ô©¼WÉ‘Jáº5H^fX(ÖTÄ1ˆªIˆ¬7zð»XY§€T¶ XR‰E>T/¤ULÜÂÏ’ƒ¯Ÿq™ |+ËóÈp¿ë¢hZ2&šíLÃõz¼å`† (*‘Súž›¦KŒ*,k{{û†áÖÿãЯq²Šæ«óÓ .ñâïŒEË`äM'~Ÿ~oÍÛr÷öøÞÝ;/ŸìÌjzüe¨q ú8Z=KSÄÑÍÇY*šjY —ž`Ti™®‰û"‚v4ª›`ºÓ×%‰Ù¾µ ‡šª“!±I4s þ4WE× †PFbÓh;Bߨ *ó*šGD5uÓ-XËXݵ˜· úðÛaßr7¶·›BŒ|ke(œ• ؆b+ˆƒMêÌ2Qˆ"ƱުPE|'–ÇŠè.„ŠdÇlXVŸŸÏYÖÌçbkßÉÙlrÇIñóèW¶N=×=ΆC‹Òvq¶ŒkËìC*^e˜4a¸\ /.böwÆ—O’5/œ-ÀˆVŠŒe{ŠfjøÍëWOŸßeÄÆál¥»VdEÍNá`bª|ûþäèǃÇ G$B\–ãÜÒm ¬E4Ø=ÕAáû 0Ý<íÚÎPlikdX¦È@ãUL0»qÕ¯ËåÍ[;  ®Ǿ6¾¢Qd ”^4»`¬ü'EײÛ4Eí™±=~ÇŽšQHS±$v_ÀŠ_`ɆßãX ñ¥ VJ7víÄñû•áÎÞ³ñ\ÇÌ{ðÇïO‚1ádm¥y<[–å|¾@õž¨XÑÕŽ}'7:´O¤$”‰ Û©(w ‹õØ#Dááp˜ÛªÉ]lH®Ôžø¤-Ê/ÜEQ¨‡¢ïJǤ?Ú*Œ¢¼ÌUM+ªr®5MƒµP@=µ¯µ=±‰ŽD> c³þÓõ)cø!.-sEatJ V©†©A' ÃñÍíÉ $iyw÷õô̵‚¹éi¾«Ÿú鳟Ÿ?áü~‚»xóøžL¥£8d°=<-èx»^åûÌŸÍ|w†o|ˆ˜ïwyšnÃ_*4çeÌ]šM±.×cC$SÖ ™(P‹”ª¶í¨½_¯FÑèÉÐ\ÜC¬ ×¼½”%iëͺåëŠåÙ_Ið“èb¹ χ¡K“8ÙÅmiÚn šÆ²Y³tÛu¥®2`yþ$U~ÈVYH2qËÝï²ÄÆÃžÕo{K“¾f›í.«ÛôÀC//.–HŠ,»¼|u~4UmcJæ¡gÔŸ¡›D‚íhÔLdÙ’DMoê\]]¿|ñZU•ëß?Ò}ë;gN|ÓÄÔ yQ.Ÿ.ú®ª²ÕÛwoTu `‰˜hXº(Œn¶Åe»*Úü“É(Œ½åLeŒªî°|~n͆‘&¶àöG¡@2e>h èm›Ƴ+¯ó2uèÄY”ÊñIÎÚ 7HŒŽš‚à‚@‚Šó ;¢èi|(œ)[X2dÉ`ƒ’eÝÇOWHB/ž<—ŽYŒÞBü”zH@$Œ›ÿ×mÛ79©;+IÛ®ûpw«`-™/ÀêdeN‡<ŽféâÔ÷§††ÐMR¬Vß4c8M_ÒjÅ®êˆY‡ŠSí–¡º¨šÍ.t\4Ô–3íJ6h²¸41ÖÙQ¡]¾^ eAþn¯>|6—±;ó•§©¦á8&­Ú‘ô*ßLk°žB´ù~ûð ð,À–våòé…„šå©º_¡RËTäLôiÜg›ª;˜Sh½¨ºm?ð{3¤ºÚçÛ»¬Ü@¿ùú‡œ,Sl៫##&‡¡f”[Äÿ"”ÐuU¾ÙþY³±Å ñ½,V¢8iðQLÒÝY´Ï«õ#2Ï\ °ž;ÛãjU¹‡oÊ¡.9о(€¶ûÇûèÀ > ÓTv¦ëÍ.Šç³ "¿¼|¦áqõëZø¹Û°%%D$Em*BæXØžÀcbÅá‘R®zX·/9Ô‡dÓo²C’˜7õâ0*‹ââu´\lÌDÅúc?¤ŠîÄWE}{¿ùþõ‹¢éY¶êɲíóó3°²2OVL3´í¹nù;¾- LiÒSD+‚q,á® IÃvdaî£*+Þ½}¿HúØSË»›j÷ÛrßwÁÄba$L]‡’þŸ]ÉrÓ@Õ6#$k³âØg!"Ü(NœùTø¾âNQT¨\œ`Å’-k±¥‘F3¢‡Pié~ýž¦ûµþéã D4°N»Åùé|9uÃ¥1:'Ñk¨”¡ œi¦+O8 #H@4;H7ÀqÍ€L ªŽ iòŸ\|wŸ<þÎn®¥…‰-H¶ƒ\«š€'Ba¬o¥¶•+9•ƒ4‡b J0žŸ/&l€@dÎgrQ=¼"cbÊ1TéAt¨+.€1sÁÛÙ©wyqKòHG#.BTÀ}u,²ýËÝ/KcgË“4½×´üìò žsFtÎëÝvýHäO¢r_.>\C¼Hw"¯ÈsÞÔ¶Tß–£Ñÿ©Éq_þüþ ØpÇéÉ[b…ûl´òR1ýå|q‹|»j;PùAàƒÖlšF¨b_dÑTnHÒg;¥mâL|Y@Ž5¦2Ç3µÝlQ3–³&‹CÿòÂv™(w¨o‰!!–ìRÐ]bN0jv›ôiÕ‰!Ë ¦Œ]C±f¬“¤ÌŠ(Žû–É#3^}ùúYöpªâÏóêaõ\ó±îèöáÞv½7ïÞ—lÈŠƒãÛ9\jèÃÐéºz—î6ÉÞsäô¥tì’ÎÓÁ{Þ"5wŠû´œ9r±VN–}×ÔÕ~è²Al³*M×H­f3‹Ø€áDäØ,Sú–6”*Óèb ÔÄc{Žc7e|¨ë¼jª<×›ûÞ+?¾®ŠîPzªŽÂõmˆú4Ùiæ:‚"4b{ V Mn4F=žMló°yúáO´SlÅ‘«kc4›‚[ÿ]Ñö8ô²Eð?(:³Ý¦( {Ioñ;6qL+E)¢\pÉKð\ðŠ<U©U ªÚ¤qRïËx{8ó–fæ,ß?gŽÿíë{é‚kÇ>m3Ìtt2'Ë ŠUR1LGPmÆÁB~;²´ÒÃÒ-X¼vÏœv]ó¼e ”é®tß_*’<Òæ%úË8TGư1ÉÍ)½ï&ù+_%ú„x¶îۖ㺢±)ʲG7°Á!ÃÜ\ØŠljªpYU5¦£é]EZü¾½oQ°Ô7É™©Ò>K"K‡#êé,ú.²ÔöfkÎDåèpJÖÛO¾÷ár¾1Åù 3N)‹NÔݤjß]mq‰Wš#1³âã‚Öuç'J«Ó+Á¤mRØ/os¥¯mÃQˆŠ4Ç  8ÒpDTd\Öè”pŽe«Iš1·eY—,;ªè©žµ,äÉ>ͪs( &$jÜ2€‚rʪ®­eÃ$" ªÃF°Û¤(g þ&зA˜Å@;“ÁðÊcËö¢a,Zœõ]Œžå¡í²ãФò\‚³ƒÌ0§ŸÞzçx3.1ãØM÷,ôÂÖ4K§ —*‡ÿ|Á9 Þ3æLg3ÈÔ­(AÆ ¢É.­{Ãæ¡F4Yi 2Û´‡.mj ü24ð]ž¯6ëÕ㯲”‹|XeŽËGã€{N¯*`ÇA«Û£ìÉ8´wnótû(°^UA~Çš&×TØt8BAîvw¸¹ù©",?à+Œõ¦SÛ^Ú;Ñw ñà>“ýß¼\Y&ýüéËÛ7ïvû“Š4/àËøAAÌvG@ß#ÜõVñR·ÅóWá§WCr_$I“†WóóéÜùÿ”jUVàÑ!Q% ¥²˜À¥4=±‚Q4#¦.´&K3ÑT”邨y×:aD3îZÔê‚ú†áSl3ÃózÓ96&½j,ãX'TGˆ¦=ÚVF,`3´Ò ²kcU«ÍïPJèŽ0Q¨Úx¬îln2ÛJî×ûx4¼t(“"H¸Cà¾çÏ./^úÁØó¢4¯âxm°ÀçItÆù˜óÉùâŠ??šWËC–µ‹ÅÅÅå̱õ¢ÊB/rM&Mþ$ ©}/äÛÆ§R?¸ˆÎcY„ 'Í© ~맪M’m^¤T7=g¢M¬ëë×!„ª70Ùõqç1â²Z4Èž‚Ži6k†qÌ+ÇU Ù¶“ðl1œ„ëÚw·?@øÐt*+um‡×²6 tÀœùÜv\ëþñIþº„òõæál2*Žû¶H¬p¦}ÿöÕŸ¦“a QÏ<¨¶§¢* ÿ€£3醰“‰8ûd’ÎÒ2LK…z!õ7 .ܸ"ñC+q‰DJ7ÔigËbg$ž¹çä<¿÷}/ñsïÓÇ÷²ŒË|¿«j©Í݉#ƪÇé^îL i¤HãESGÍ.[EUÍxÎòºh•ö÷>~‚x Ëó7çÔT1Ä5¬•‚ò¬Š£p~õ§Ê`Ò¶}¬õu£¬¢@ËU$ Ô@©=Ü -b¹ ãyÓéT· jèPCAÄP‘WO–«+0·ïPLôöâóEUâ·ï>l–<äÅ®EPzë8˜î¾}ø•ó-}iýðäŒgYÒ¥öÀQ¨˜ ‹-×Ö„š˜½a{vÛ‰ëm@ÑA¸·q亨$›eÆK¬ <‹å½ãàx)Û ð!¨‚*Eº‹°)Q‡x#ÕéGÑ3ž©FPJ4—5wx|» ÷£ÉKÖ ýUTµã%â?¥†ÙDl q3Ù®¢Õ‚¥gé?8º’ݦ0oñ{¼$m“4!iKáŠú<wî¼'„ÄPUªJ$.½!J—Ð$8ñ8^Çcó gËÿË·ÌŒÿQÞ¼~e›¾Ì4Ê厰ù¼¦F·‡Ç¿Ò(ÚmÛ¶‡*i8«K4ã;{{Ãýáó£Īš§Ç'´9zÅ`ó+º‹%V.oo«x{2=ìA›¢m4Àÿ܈ /*I3ˆnôkÙ& wƒ@ÃØ¢=îƒÃÃBÜ4x“®ÖkÆËåú©}qö½ku»† Ú•»]e óôŽ)W5Oœp8>9#þÆ Åº4«Û 5„hä™dXA«²Ñx æ…Ÿ1 ß*êþäÉ`´/kÊ6ZŸy^79+r ¡œ'ë–eŽfàdA˜dÒTö 4·¬$uPr;J¤¾?•å>jûòêË|>q‰ÉØ"R܈ÔímQÚqÊ`ˆ$N|×<@]ëI ö³ªJQ*¡/d1 ¬`À{ñ2 úp§Š˜Á§{–nM¦s1ŸH†(-lWŒ§ÎŤD\GG·Õ²¨ÛŠ9„@ØÜÜÜ^_ÿ4 ±Ù²I#U‘‚¾gkäó§‹Ë‹«Åâqñð°ù»i CwtÈBøŠÝ@]Õü ·¸¿ržÝA\‰_`JiuÿÔ=oÜiÕ߿7ѳÙéoßgO5»²]ù ŽmUY?þY~xûvÒ­øÄ#;š%4Þn &á:“þ †I8od•K–"®fÖS10œ•%]-–e¹½^@Ü–ïÎ?¾·mÅÒñ‚*^©/Óâh6Q4 9(k·‹"ÎÒu–ÿàèÚ–“†¢hî$„ÜiZ‹µc}ïø>øYþ‚ú ::S§â¥ÓÔ¶PB*)HN.'Ä}È$g_×Ú9{oöÅóg¢$N0.£mkÇ“òÒÕõÐkuºGa$J¡K‰bxQ’ ˶Œ: £ŒÚ6ýéÛ§OHA•)ÊoèŒÁ)[bÇÑQ€Ì£VåAˆ‡›aVJU±&K›Eë(\˜Š”%ë’¡½ÖžÝjWt…'?"´’4kŽfKHÑD‘QTD^ˆ³TÚÞu÷c²#–#÷ê+²ªZõ*â<·]¹Ò<Y«kuW—é¿]ÙnÓ@µg<Þc'u¤iÕ¦¢}Cª„à#@âøK^+¥‚‚´P¤’&]BDZã}¼r§OójŽï9gtî½øÃÇ÷YIjC|ʺ$6y…u6d%Õ¥›lÜr¹*œ bB_P,‚qÊÙ„3¬`o¬Žq<8‚ÂÆ±eZµ'ërM( 4¨Uy¸ J8šŠâ(oKDp"øp\Íú)ë8kø¯ŸssPv¡üA²òüù|á8®,*ƒýãáámv×\•;…kvÔ®eQ’ƒm~ºŸ.þ^ÝÝŒ4ÝØžÑZrüLÑõEJ ¼SsvŽÍMZôNöO•ÖôµVIspmYšÿ{l›vpTCÛo>khÕV ãNÆ¿ãt“æ‘çlØÔ®ýâ%Ñ-ð;e^Œnï'4ñ’¨ŒB_Ä9ècŒ¸«ïýˆ`0q „ç@’« q—.bëE«gu{6á1x<.ØÈ)T"ɸÐT×Ô[84e=H’•Då Ë2#nmLXÇ&‹š’͇k%E•¤Åóî ™ t*×yrVKgróëËzë´ÚšnJ Ü'wSIJŒÆãUP_½>J²p~>Onã,òã`¶,jðÇPü¼¾¾¾º¼üjîØ=»ï¬ý8¬ç³| ÕÕ ßÛ#`xg¾½{û†CþÉÉ–Ë]«ËT3ÀßZ©è–ƒE[àR¤Ê<·È=j[ºw°å¶dvšM<Ó»3¿¸\µÈ—)M§Q{y­e¥L%0t6ü3ýïßöX‘©5Èp§Ñ4“y¡W“SË0bþdÒaÕ Qøu ͈ER¬H­fÃ©ÙÆ´Ädµ¡*ì«lX†ªËü¢FÜmÛ{2ßŸŽ£'{§ç4HB/flÆoB•e„ „iÚ0¥âhì¦YßY]w.^@ºùõ×Îö ß½Ô˵<Ç`G3¦0?N€¢ ùøï.éæ­;eÓü¹»}x< )IÌ3ÄŸ‚2°u”UW¯®^ êï÷÷úw˜<}ò6KÌEgm¹³vyeµÝ¢¯•m8®^·sÞ¶´´¼ÔYlCjÌûá(†ÞIèmln7{'ci½nY+oxTçÌWt]˜„“f£]2Å8|úòáÅëožÝpûÞûզE ,aœŒh`,Ï»÷ŸUft{]ÍÂx\3×o\߸vÓàe‡%–qs +!é–PHà 5EìÿÞyùêyœ+¼ÍÁ 99ost¸×°­gŽ—¨¥ØôkÖA¨fFâàÇð#¿"–x§žpte»MQÔÛx×nö4iܦ)"P€— | ÁêˆDðT!ª@¥©(¥Kœ¥±gìØÛÜÉXcÝ{Ï™sf¹#¿~ù8 —ØÐ:N' ¨&j9øR1_l|¡ýï§Õ½pg0éZ˜K¸”R‘ÅYA¦ÁghP«üzŠG#ºØ‰—³ „IF7-EWCK‹ÁT!Yøq?ÉdY°­o¦GcÞt&*U…êöh kFµRD§ŠX>#ÐaÊ…¾·úïÏqD|ðq0³m \ñîç7­«£3×.ËåZÄ€Î3À³‰ÒJ‰Ìb`UǦYo6gS²·wÐ^__.YÀÜ|ñ‡ÃWb3DI:ñ])k |çlæý#½,é­h˜…*S©J©dçj1„}DI–„Rî—Ë’Yä iŒx·çp¥R[«;JÆOîç°×e¾t-àw8ælÎØÑñ!µToM.aÀ`²Ro ÏÎdébŽmÀ†aG¦iA¼€(º7n‚/8ìGa$k´uÂDñËÕñ\ñæ!XË"¶T~LVZi:4Hzw¶w^¼Ú¾û ×»](Uúáá`ÉÒ°Í›Ô1ÆÜó1ü!ñ§ï?¼sÝózQ\m7½®·¯¬:NiÙÞì´z·¶:[N’Ñð¢³ÑråÙ^sjÕªž³o?¡8È‚ñÓgž?”’-! ^ñ·´ÓÓI¿ÿKQ 5Åk›[ãÑèð÷{ïך sB|àuˆ O¼8É.ÁkÌCµÂxX)ë×»©wòu÷íÏþ„kš™ zdj,‰’,ø~B€RCJ$)ç×ù±ž‹òdx"kÆ2bL‘ÒÿPt&¿MQŽÇv<ÞÇI³@•¥=P$XN,Bqâ!Qà P/l E¨mJ¥m–¦MÄ{b›ßøà«å™yï}ßHo†öô±¢èÖñÈ:<ΫE¶5ê‚\E ‚Ø»Õz#t¹‚iˆ‚/ÅPS_â ¢!«+ÏßõÕSe¦£"A¼c.¥¢‚Rˆx’¨A`džˆ€îÌc‡Mq¬ißóè(ÙRL^’4ÃèáßzÖÀúˆ!+Él‚3vâS\ˆÕ¿³·íX#Ðy¡`ò1‡Q¸rõæµÛwz]QUÀ¶ë{;ÎÏ4 >Oyº–9{f)‰9Çm;,WêKK玬Ë;¢º6‹8ŠG¦lWÞ‰ºýØ8=¶&‰ „<ò’–ŸãtÒÞíX¡_]8íÆ•ØaQ®çËÉ,Cù¬‘ò=kÐâBOxUÑÍbºEE$ ÉÈfÙ5hjž „OmFñØv`ìš5CÒ²ëO /ÆD`mŧ^­Ji`/Pà!)Èié|±êØÁÆf+—~fø˜JMÍ…ì2ÆhØwDEFè“Y ¢…犵ò‰F¦PôQ Gn·7øþëçüBmùâ²LéÖÖöæºç{­õuχŸ*¥IÚCkùÂr©¶òêŃû÷.]>¯è|w¿ÓÚÜT5Õ÷] w6«íïümom4_¿[{»òðÉ£[w¯7kl¾¢©¦f)k_ýñÔ±gýñŸß»óEU¦&`_Ä´(ËJ*ІƒAóó·µf3,ÐJxZfÍiaŒ<9IïË×÷ªJê's¥ŠYš3û½öêêËÝíÐTޤ4-Ïç%ÖZ˜†d#Ww;½€% ×sÝ‘;ĪËhI< yŒÿ(º–ݦ(êØc;~ÕŽqZU!ja[Bª@‰@ .رä?`Åg°`?€„”¢Š¦­š4©ó°Ó8×ÛáÌÊk_Ýó_–çç§ýÓv¸oûmCw5Óª¶bQ”{{N+}ÓtS +VÐF´Ü2þ½¬ñùÓ—^wÿÉÑc"ñ1>šÊ×¶U Øµ&e``¡žO'ù* þŸN³&[š¯)å{eˆ$)ªaY;`~Ô©}ÍΆ7¿Ýγ”Šßõ¯ MWŒÀ¶2T¡ ÍïxûTeOýøj9¾fpW—U”_QdÐÄ ùÙÜ©µü½Ý®¢(ÑÊâP0ÑTÄ8~c‡Èg’h;ºÂî„hºðMÉ”…’.håtU²lEùÆÒ•dµfeQ04®(°fš®A2Ir{ú÷Œ¹†–ÞrìÀsÛ¬±áj×i¦k¬ ÙòS9<6E¡›¦ë‡DÕé&›ÜD—ÃÑÕX7tÐ0-$ã$^!° BµSuDz ³ÁDFËx¾ž-VÄ0ùp˜ˆ›<ƒ’ØŽ…7c›F3à“þ‰Ty6<ƃûÞÃGO'ÃYFËÑåèÍ»·ŽÛ‚¹ŠÆÉt²ˆ&³É8 ½Î‹ç/=Ç¥·ëŸß¾‡A»ç4=o®w»½ Ô¬x¸Îi–Ö|m&|¯$ÎæSÄ™¦®õ®Ç#BÔŒfqœ8-/Í ã{×tš2a–Ž­5C¸î²UÛG¢D/¨ÏŽ^ÙÞ½~ÿßû9QD…OWrV,fKð»Ý/蘖%ò™î[´ÆÃ$:VL–É(:³Þ¦( {ïqlgiš6-¡EPx¯@¼U‚–?€ø‹€@¼"UUU)P Ú’ÕÙ/±ã±Í¿[–ÆgÎýŽ5¾W|ùâùh8ƒ–±;7n%k6›ä¹€¢ é$I*2]óãÑX²9ÊHœ‚·z}èìɳÇHrUƒ› ¬&B¾¢¨È i‘-ýǫ̈ßÍÖ‚:”åÁ*ò“eÁelŠ$¬O/ë“ÎfRçš;šŸœ;5çîÁ²áDÈ…)Y@)ÇþàÙèOÜ“¬§õ:÷þ :¿ºWÍpßr¬f³³ƒæei_3aª«$"²\©¶­³é, Û©àÑgÞ¼ý`;[ŸN~÷'Á¥;v¬ Myð[³Vst€qˆ¡±ÑiQ–$ÆTSLôt]—r5ñ¤`¾¬WESÍ—ÓièN(Á"O Uæ-‚håNÝÞ°ÓïyžßØÞ&lm‰µo…@EE€Hê:r’gزTŽFQì2Ø·° Hë-}È©aùüEO:¦ÝïtQî !ÀeÀTóêõ»†S•Mx®R©8ÏÛ¦…`¸X¥[ÍRIÇ eK+äÞrùùäkoàÒx…UŽÀ(mmo¢jüør~çöÞîNmï^çÚݪïÜlï[ìÂHºƒ1›¸lWàîÞtnÈ20ŒÆëÃG‡Oß?|z¤5T¹l`I…LY-|Ýtà¸Vi™'FbGBüÝvSWå0ôÊËõúߟßRšo6ëívªµìš@¤þõåÕõ¥ïÍÁêž2®Á’´’ªÙa:VãìûéýG¬ 6Ò¡® ‚Ä R33&„}ä—Ól¹V­:†jà†3×Lþ @Ò¹¼F Äq<Ïf“ìì#»­•¶ê¢­‡¶ -DEÁ»ÿ€ˆ7þ!*xêÁ›W/^¬"-JÁƒÅG¡BE­Öívͦ›ÝìnÞ™Äïà-·dò›™ïç“&âÜ é[Ѫsg8Nn5šê æ“8²ºn·ÇKÚö—]R.“©JŽèQÄ‚Ãã~üºk»îí[×.?Qo@/ü ªsÃ8ô4'ìKgÆ~w%p‚GäÙ&­ß:ïØd›RÀc”%Aº¸pA×—J†¨}*œ°…ŒÚDÑl…ÏWÂa×±NØ'Y¬ŸOùôÒꕈ†N焆ôÕË ÌåÕ•ˆ¦¶ëçH9ÄÿGC‚·H©8pQ®ìÙÚãõ×ß6ö?m>¿s÷aDo×ß_½¼Â%^ëàO§}„lLÔìžK‡ó Nà)¼¤~ƒ™úcþTâ=9ÛÌ«2 ¿ûsË´l÷ìt:ˆÁ»àc ­Xì<ÅrŽ~{·dš9ÕP;ýþÇÏÛÇC÷Ë^ûƵ›r¥Ñ?xæ,¯5V/‰Lèä¸ÑÙ¾ëµð¸×XY™â»Þ’Èhè8>!ó/fÁ$H¢‰©ézŽÒvùV .ÐDU¥b©:Á!%ª.Æðc‚@²H‹@ôç ²Q„z?¬`•É4rÕt¬\ÕÈæËÅ¢ªÊFàc1“ÔêuYÖ¼ DYÏå¡`7ò¶. P¶‚]´Lë„Ü·$ÀN•ÅZÙ&– ÉÐuD:|™¾;¸.5Ŧ!z†£á àâ×ïóš†yÎ&)ïÞnšùl¥l+ÊBµvÁóŽþþþú§¹ÅQžçu9Ax¾ñòÅ«7Û;ŸZ­ý¥åz½ZríNëGûpgx|x¥Z}ððQŒØ9% d2™œ3l¹ÍoßE•*6B‰Y2èdBCáBÏ\|¶ßüµº¶®å´“n§Ó9`ÙTÕôdæÇI¤¨<<:¸µ¸Ç¡iišô_ãaq|«Óò{ÁÂâš‚áWñ” ’'‡ÚüQ¡ÿPt.­MDQŸçͼ’ÌLfòhÚ¤mڔ⣪,t© ݸÓ"ˆ~¿‡› ºs%º¬T´¦­ØXKÛ„t:3ɼg2™xæ+œsîÿþ\îÿ÷ïݾڜ_YY®–ÕéÙ9©Pʼn¡™¢¬òr†æñ0Žö÷µå檕x TÄ;Øw6n–¦*Pt@ã¡ë ß…›Ü'nœ£¸*“`0Íø¿^ß¼¼Z“¥:M”ÃH4-|8ă0S«/Ë¥˜§i\Ì|!Ç¥IÖ,€æÀÒ 7M%ã8Ë€$@i칞MP8ÍÐy"}åÇ«»£gB\ z¡ùaMוRQ(ÉH;ú¡(eæú'Çë¹Öê\Qäôî! Üõ‚:ûâùë¥ÖÂrsF “ät~JÍß{jBp>‘*.”•™©÷o¶ºÃ°Ò¬ù˜]Páù‘§ÐŽV&œœ Œ¶ÕÙEŽRM©ÏœLøÐOŽö Þ|¡êÛ>ÑJ¥S”îjë­¥¹‚0+'9”u=2 ³žGhàDÃn¥H‘ëX Ÿ1 .Ö Û¢°›f®×Õ„tñ;çÙÖi§ƒðH¨®éé=†!êLÓ.¶T,1¼@ÒMI¡‚ß…þ *ÎòIY<ªÅ îD¦?¶~üüøásC\ÜývšŒ{ în|cíÌÜQçÏööוÖ¥l¹RYðÚ8"ýâå³Ç¯ž>ºûäáÚµ[5Q¹<]j(,=²3(ŸI¥ ”Ê!Ÿî0ñ ·xû˜óeçÁÑ‚(G¶ó½ÍrÒpˆâb„“Ó^2‰Á¹¹¾ç!›W ïl†!÷ ¬íB1'ˆ#Ê7Ì¡Tœi·ÿn½}÷`ss<²H”í †:ìôÏûùœDR¤142%p¸©¯Ÿ³é—4¡$MaÒ‚¾†Ô8:—ݦ( Ûžø6¶c;±“4M›4´ªÚ rY "!!±G<+Äó°W@H ÁÄ ©b‰ÔÒBÔ4÷8vûÑ“¤Õp0i6Žšu±+oÈz=‘º³É,QŒãƒÙ°KVS£j™Æz¢báÓç¯^¿yöôI±Â¹ô/YÞî ˜,kÀµXÖWa° VMN('¤)·ŒØy°òj­ZÞ±­² Ù^AcyåêzØíß”Šù[ U<'8ÎL5)3,AÓuG@qWí.¸_œ@¦lŠh’Úfyòªi×w÷P.[Ô^¯î¡F^3¹˜Ä)!ÑÿJ>.ͪZ%¸Nb1Œ‚¹7uY$¢$ö½ðbü݃¦ fA'K|xâôZ­}½¤¶'NDYm¶Üô}zûÑãý;÷ôênÞ.cNÒøœe("^ÔŠÊî¡¶…eœõö <']䘇­@kŽ ªfø~0ç®W«í¥®Óù K ì{t|÷âü' Ë EÕÒllW ëEÈb6´5wèþÉ&$©’‘ôû÷ƒáìôÁé ài{i_þÊ:b%‚ŒO×"€ 'ý¡ëX²Á0n k6ââ §ÈþvvþOŽÎî§i( ãk»n;m×­k»uÀ@ÂDå Å /ŒF/¼RÿDï¼3H"/c"D Ø÷G·µt]Û­]}ÿÂÉ{ž÷ù½ç<çP¯Þ<%Λ»MŸTj ƒ(_=§ j0<%¾}ý!Hi|åЖ Ûæ`øàR‹ _ã<ò<À ,Ã4æT@´ÈÛKDà'€Ýêšs‚Vy qN”ŽCxÌ™b›˜ö0F¤”lÎ6£;JÑôFy=—‘ep‡õ§Þpd#ʉ’8ß #Ûxó(ŽðÓøü“tk—§yUbeŒºœ(øÀ=AôyçÓ‡»/^¿$ÈZèºýöð²ÚÚù~ôåàüº5|öbûѽâæýU¨K{ì6šuÜçñ‰Ç”œ…$Bëªcõõ‚šæ@Œ|!M„AȤ¹’®,ÞÑÆ~GÖÕˆˆÜ‰ÇPJóæÊé5ÀŒG°¦å”ã“¶7K&QaqÕAÓó rnæŒAG&¾ L<ö›‚â‚^ZZ’DÅìOÀ)²Š³2³ú5Ç#Nä†F¯Ó6@{£ÕÐqöŽ5 Ë1"“«T.nGVy½ ¶ct *1 ÕƒÒ¢Ô,ˆwºŽ{ë’ñ˜‘EKÒ‰F­‰èØÓ­'kwËS /–äyTÐeEc弯VÈ.Xqú·îÍœ¬n>Þ4=“+Hˆu[Ç?÷Áú.,¯¤•^[-…gZ I@›`™]Ï¿]wb±|¾}ÓlÕëE?XßÐä|a©$¤y³?ˆðÿ#æÙŸßs?Ü|¸¥«Åó³S|PþÑhÈ`¢ «Õêѯ˦Íïíî©õÝÛ÷Gû‡7•«êEÍyÙl¾X\\Y^ã…l»Õ;88ŒÍ¶bôü“ãsAlËg9ÜgÐ`ÄôPtm;mAtíµ×ר±½Ä$D@)¨Hm•úííCÕZ¡¢ªâ¢"’Ø9„$^_Çqw`fÎÌ™3Ú™N_åÕ<\àf×ÝÕ äE6ù¬D I³Ì"šE[-ëãé8h»[:-{ ^…õbËvžBR·˜îHó´‚lî°=\Ͳ'ö¿šÀÕ¢EI™êÙœ¯T„6  ãˆI*ô6zU‰*Reõ>œØ¶CÝË6ãf¬gM3 £RÐ/…²|öÿΉÖÍíǴƃaïcO’ø<™}:ÿöõ ÜÀ¶Û=>>—¤¥긫Ÿ¿úýó½îñßp>!­¦›fÙ$x±Ͷ÷4vìÿpt.»MQöÝã[ìÜÓ´j›Ò”4uņJ !!žxlx(VH¬Øˆ¦UST¥—$N|MÜıÇüÃÎòÊ3sæ?ÿ§Ÿ#~úð‘¦ðöˆ§Q¯^ ~Cqab`‚¦ó‰ñ— æ¦¡è£Û žš[­Eš on$`Ê]a^ÀJ*ø‚·J%ÃÒ, ›,WØ¥(Ãf¥(ÍÁ°V"«Í„·Xäeš©k3ÉŽ¸ Û$$Ï)Ô´^k˜: È™ |´Zбpö÷üüøð ‡RA(4Í äV£ g“ØŸ%žw=š¦ØÞÞý_%`À6<;=¥tcQÉi[ö®ó^$4[í4O5³bWá°a~œ]½|ñ|4Ÿ aá»%bØ{ì­}™XšS;Š¢]’ÌÚÇÂI¦€É)i«_rÀ!Ðݨ”f«T +D°xà$"#T”LÌÂ(¢H÷¬ò%]÷2ø§˜O.å2Lç2â^Ò‚5¦‰× ‚[#†F‚¨õŽÖšæ2‘ÏoA¶ëevYJàÖ¬pÓ¦Rµ%dÑÊ•*G‚dmD—ÙÕ Y»Þà|°³];9y\vÈd|›óÉÏïߺýÞÛwïKVyntb)œ®¨‡ÝÎ2vM]=î®Â,O Ÿu:{Ýãl‚Dt¢—8ÕäÙoéê*åò '°†ïB‘m¢`úÓÑ?uÇZÝqÃÐY)lYÔ «ºˆ#¾ ý~¿R¶“dqöç××/Ÿco‘sˆ›Íø~}k4w:ûÝV{'ð]í“§=½tµº¿»ïÕ›×N­Ù£9…¤ <Æ­Uí–¾X̯.GNÕ‰×îýl8^„±ÐÙV¤"ŽÝpt-½MAØöú•ØMâØ‰óF¢m ¥ÔrC=qàÆÿåQª¢VTH•P›8Móhwýˆ½~0ƒä“e[ÚÙïóÎ|C>¼{ÿëìRÕ´ºiB|ÊYд­2vKǼð€p় {.ýôùKïI·‡‰µäüÇF¹<èwx]³[v&À6J"ìá%à¨2Q±;|@ÖEœc…çêYRÀ]g„¨>z*-xñÿYUæSJ£ß”Ê)VÛð·Îà¯o®ïÇ7vµ,ð Y‰"¤°F îq½Šã`µt’È7*UàŽ5”ÏO4I½wFØBÞ[Ã3,ŽÏ¾ìô'÷›Ëë…¤ô7JÃìK¼Q¯i5»íúëýáÑ«ýJ…ôìvÓÔýÈ…([z,Ëó„ŸÆ,•ŠŒˆ4åsÙÒ‘“5¯°¥;/Irì{±·¬kb>–ÔŒÀ%ETd«akF hœ^±`IM§sØ(öžír˜‘æ¬Èã”…©;[s©Àv‚ÐTqrçŒG£4xHÈš†% :€õÙƒ«”µ;»;€ӢȒh|{ãÑÅÓí>Ø`ÕXNiXéë‡Qk†Ùé´UŲÀ‚Æ+¨¿š.g‚½ÜG¡>ßÝB î ¢Ú,fžç)Uu½qà¸[B©&™¦&AUS[zID¡š_N8ŽH"‡ê9I¢Å"‰°Õà#„K3MÑtÝ„±7[v¿×æ¸üìô[x:s”†ŒO~…wƒeÖ;Ý6\x„ŸÇΰÏÕt>ói4r&W~/fãšQu—+ YçââüøÍq»× b nÉò,ci+µJÓ‚Xb [»þÛ““0ž·»ÆóƒÃ.,Z4,ÿ'GW²Ü4DµÌh³âE^¤ÄNRpEX@…åÀÏå'¨¢ n.–¢NLË–-{´Œ¶áM:©jjªÕÝï½Qwþâù“\ðZU ËìAq ×…ŸˆHdlUm Y&®zÞ8ÞÄg?¾=ºŒø˜ýž@V¤·wùæ²ÝÒ• œ•<©e'».'Tµ,É\Ìç¥,ÍRT-EÍÐÂ#4"`56âBŽḵÿFIsNMZ‰†ZXTûðñýbvþôáÑô×wÓÑ[Žm—fSi”ó(Ë× '}èoysµÔr…T|Á;›Uxúî­ëôÆGo‚ýã´Pþ\oR®',½w705®U™V2ì —°¢»ƒlV›²UyRr…v•.¨QšD9Ÿ^(zf±hèÏ÷á©6\€-‹$ºÂªPk,]Ó'¶#›Rq“5Jo¸¬3UmèõžN—%¤"VÏoÛH4¢6-e~]¯fÖ À `·ÕßÄ|Ö<ÝÎÒˆbÛnoo'N.çSU)ˆÕlÙÒ¤¤ Ë+fË«ÙB $†ì³[³›Å²àéÅŵTפWó¦Ì//ÿâÕjvüãuyxÙþüå4èûµ(oBô%^ßí u¥îv½¦(ˆŽo—ò'´† 'ÿ Vi¬ÂjQ¨ôLd’óµbµñdBeG—GêtÛˆÕ4Ù:€Y¢VExb›(Z…ž× ‚ààðp´Û‡¦‡yvòräûl›@æžÏfþhru³‘‡5f«jD7p!΄ßÒî¸Ô :}ÙôŸîŒîÍóBЀ¿mÓñ‘zF• †Z·_–$àI@hšܰŸ¼÷ñÍÛ3ÃÔ9•Á¶ñtáõápÿŸÛnÓ@†÷èõ)Î:qL =)P*$Eå®T<‚Á3´!¡RUiHš¦ÎÉçµƾñí®wÿæÓzvè§:~ïéî3N¸M7 ÑÙðg®”18 &¼PËë[.{ýþç¯_ ]wròûfzúë6_Ý×%Êf«’â€}e¥ª* .(ŲÞê»7áÙÛêIé!ÈCÏób¦ <_aX"j1ÅŽ¬PóhZò\à,¼Š_>çÈIC¨‘™£¦×"B‡|éßíäövÔ´Œ8\^ ‡ã‹éøììÛåõÏRȦ³ŒâÎöÑøNMftk÷Ð÷÷ŽßÞ\¿?~µÿøÙ¬‹kÀxf£0šcKG_-óŠºâv¼Ïi’¤Q*—ópk¸Â•a‘[MRëVÃ¥ÍIB1®ÿU.ÌQ²ÑßH‹h9Y'uKóº•h» w¢d K‘&kÕç3u#´Í`ûovc­È«$QËÅšs}ÿÀïøvYf&0¹ÃKp}m£ Üõe]$‰©ÐŒù4(2¼ÜíéÊÐHÇoÕ%w ¨ÈÏm4–Ùu7-ÒD9óûdp½<Ʀøs=Ë2üd§k;Ñ|^7$ ú/ú“ñp=Ëyå€Ð,G¸]½ ó8^¬Bø¶”]F4¿£Œ‘ "=ÄÄL|û1Û¼{Xز%ý®áy̵ˆÎÃà>¼+Šàx®+!xR®'i–— €¦†³…©ŒWÕ2 mGAÌÖËïçR6ÃÆÊõ,kéµM†™šô‡ëCO‚7FÚÛý^¼¢—ç%>Ö(˜yíî‹Óÿpt~?mBQç×½p¹Ðb[jmã¬Zm6c²,{Ú»ûçŸãË|1j²lÙ⃋+ ‚P —ò›ä x!s¾çóιâ—Ï3Iª©¦ÌwuŠª"†pÚõ)„„ÀšµÝ/J6G6aîž~ÚŸ¶ÚeÁ³gÿÉ0’Ul‰R6è•--j;“"¾}Å”JLß6(|„È<ÄIûÝ,ÈA2;›"ƤÁ%ÊG5BÊš 6T tqQä…K,Ç& 4킯èà–•ë«w‹ûÉîŒ(zYB¸C£··»¿|x¸½¾|ô7⟛‹¼ˆ{æxh¨XëÏ û/äâчùéÉ Óx­ßß®9Zå¼ï,ÌÆãyS‹¡ëë˜HZÍ£J+J!>ó×W«æ3Pt…S(ÖÓdCÀ÷ªŠL!Ìø5ˆ¢2¶¾ûýË^þM¦ªfä,åx©(ââúª à ¥ÄVŽg[)`€Þq-ü£ïyyYRÐ ŒY;s«Œ"¶f c ì8ˆYßìô{=ÇqA%­Ûãb€¾îj*ØI8úð§Ntˆ¨ª®À•"¤N&{Ãí®UÂjWþ¡® UÕäj›¹4E¸,ó’“m;üv~þõììŵ.¿_ Íq‘® móàÝÎÁ‹L÷§~`Ïæ‡"æê[«U îTo“;A¸@ò%@ cQB¼œ¥YÊbÐ@%ëÅ¥D,¶c<„¦®ž‹"MD gmslW#•+'Õå‘PêPiÁðÌ¡‚Q´Ž;†¦Àéúæ‰òññ‰90è:Þõ¶ •¹î׺PT ×¢mÚ?Íáø+Ï_¯‚Ur{õ3K2ëÙ»_8~¹YzÏÿàè\z›¢(œß㤉“´%IESŠªJ¥¯]Wü¶ü=ØÃ‚+¤Š ºh%U¨ܤ‰Iâ·ÛáLÀȚѽ÷œOòœ‘^¾8¹½ù^”1 ™ÎÑ‚²¢ÖÐ#çoFؤbšË‚È0%jžeN€ MC«ÝYË¢ÉÛÛ=Z.dRèÕ– :zÞ4R”J³-2àçÑ,I„É’C[&ÿ"/Êu£VF1!4 ‚M¸Îšµ~vÌÆˆ¥ÈEIÒ˜ÜÙ-8í Çú L¢¤«ëÝ­§i,ÝÉ|¥ ÿµ’¢(eƒ•ùÕÙùæÚÖ—ÓS«Nzý~àeµj/TÒŸ/÷öŸËVÛÖÛ÷ï®ý±[ÍÒ+E*•‚ @xœ‹—Z)#èU©jQJbM_ê^\1$É¢[µÛ@Ö©?‹#[W@  …ÛËæ° Ü£VôT|Äb„‰;â…D(e¶+¾ç‘‚h™Uq 륥ŸŠ°KˆŒi‹¬µŽ]³4ˆªã¸ºÁuE·ªe–ƒRc/Td@Z¥e·ë¨„êÊzo%7OÊÍÇO@…â¦<Ä X•‹F)4áõ«7墘MÜ‘ã8ðßß²”F£elo÷Æ£»ƒý£–ÝÉK kµÑ\»üø‰smì:›;;"¼>˜¬©’¡*\&LbÀÆâ!é@V%~NUTÈ>Á©E]’v§§+*ý }œ¹÷swÚít›m ŒË4mΛYÈ&à 𓠘RF@³“4Uþ}3ÐàÜâðþ~þìàPÄ/TÊŸƒ¯£ñíáñnš†Ìà†ƒÆ1vŃ×YPæ ¨CéPrqy匆0ͨï0egç×ß?NŽÿ @Ò™ôF Cq<‹³w²ÌtÑ)TÓ*AH±}Ž•¸p¤ŸŒ;$$.!P9P,j‹h™™6“L’Iš8ž,æî>Øzöÿÿ{²ß³¸óðÞ,žØ¦£8•ì³j^là`—sÂîµ R€höJ7ÖcMà“_Wi¶9%ûè{„SPF=Mš8Äaq@N”﹬¢ ÈÃÔØîhŽfHY7¼$dykS·°ÏÓ‡$•À{€@:ê²ÌšçYë³øòõ§ï¶·o™Žýó¸NƒJ–ÃápQâñé‘*£¦Z Ú¼zscóæèÛ¾j§•PŸA.‡¨¹uû šA|ñôùëÝÇL»;Ã,Pq1û3®hë¸6¡©¨PQëÀ2dÄé GòÅYúE–/*Eh¸4 ‹²¤´z̦Sð‰Õâª×¶¼ÕKpž²tÖh½–]Áj଄W\*Nu ^æU*/wÝé$$–Uˆ Â$d¸Ås=·ï!Ö°™BPk¸0-K…XÕ@šª:ù†Æê‰pNtU°äÅŸF/^¾…É/÷ûÌÒ‚•ËH(’ó *qÁ¾q64MFööTNI£t<޾þx¿÷lw÷ €Œe£ûîX›RÎqõsBîÃéÚÚŠÀÞRá_'i–éJ’Æ |Å ¯ìÎó4K笄‰£|ÕSI¤M K`c²¸"¤£/%Šä邵I¡²cK ú}rÜ,{ƒ®,ƒ4Š H ·_½²r6ö «7®c|áOF?¿¬o\»:”5‹ggR[“y<ûßýßÎ÷? Có6¯^ïö>:ø3ìß{óöõîî§ííwÝ%´¼dŽ€ÀZÙêúÑÅ©ï_nl<ä¦Muãºeq÷ùœå”wuùRó7&s¡QÖü•kª »µaáÝCKŒ(­R?ò¸¸, ”“nwè«lš„·ÀÔòJ¢·ÍÃeñ·*DR³"ÜV B©Ï"àÆ>œl:Ï.G¿ûƒþ`0˜h!¬J í ^šŸeuUƒãå$ÞÙ9zÿác¯÷äéãMCC6^¸;ì=X,//î}9ù/G×Öœ4…sÝÍæ¤¡P@Z*Ž#£}ÐgÔGßüêOµuÔ§´Š…@n„$ä†g;ÉSò²{2ç;ß—Ùïþë—oZ£#ct>&¨†ßB:»8v€¼ªºâÙKØši˜kË v9§a¬êdôlèúÎt~ßnJד Ú'¦A :€ƒ1íÚ” J²,ÃÒáσ8[BVC\(^ù~TW€) ôÀ3H&æ€81=d舄ù>Û'SܦÈOz­•ç°%ÔKyaÏzŽª5@ˆ"RË,뺦R£¤ɽýµO–‹Õb¹Ý÷?ž¿|‡ZFÿ´½ÙY¶kM&7ð!îîþ,7^?ç‹€¯Òm`7ÏzÄ :k *ð*‰6,TRjŸâ¨«TœÄWy, L³ÓjvÚ€aû(b‹2ÝG°KA¤³× ÉYŽ•SÓ­ÞS0©’Ø¿Z#—¥Ù&Úy<¦ý>‹¸ìw|ßFÒd«aÖˆfºžw7ºŽÑÓ4U1uúÿW£çãë À‰^bZg·›­ã:·³ûÁðÈÎ.I»=í”?¶r±ê‡¥g'ž—‹õI2EB¼U«‡nh[!P§OŸß¯íí›·¯þÍg†!‡ýìq–3‡JËš¯WÃÁ ýêP>=í“x¬Aâ±p•åòa–Æ;"IP¼³"óV$ ?È ¸y–±6+­nèÇt&û” «zœ y…Õ•^Ñ^8.–qVåËÙ4Ï™Ò4ì–)d§Jz ð“%2<q,QÔ£ùtYud?¯~›Ç]é×íËËÉ÷«Û$•Æã‹³óÑÅø…¡é * d6Ó2yÒý/GçÎÛ4Åq¿âøíØq’´¢hHH, Vv$T¤.0°3U°±±t@°ò‘*ñRE-­”¦$íÔ‰Ô{¯ó |}î9ÿóûK÷ÞÃ>{þB7ÀѶ‹B¬Âê‹”Øö Jæ Ì󉇓¬¼V¾Oã‚w}¨¶ÛîéA†ö˜&èB³m†"ªu³8:uQ‚Á„þ ~_Q€%Äã¢ÞÆœú8M©¢Ñ ®”›•ˆÆÝ£Ù ™&Yt>vÒ9´ÀÀ¼7ø–}×cD@Ó’¤På:è(YÓhh¢üÚ@ ÏÝ£oóÂï^»úéó0ˆk‹ë7õ•6´·`îïÿÚŽT1¼²lI<âùÅöÅå%dO¹ž«ð´ÄQ˜„sr.U9Èû3wÔﶺ ‚ ˜ÃV¬è:/V1BÞ©ã †žç¯^ºGØ÷ÐZQª ¢áý©ã U‘òe¹˜¾ãþOÍÊX"ðAŒrXf£='þ9Y︿vy]×Ôf³ E­×Ä.ˆ‹Uã8JHx(DM0 ¡“&(*Ï(ÒB§ÛÑ 0WÕAòÁ§Êåóˆ\Öƒ0„^T$Mµ 0¿–j袼¿ûûëÎ÷VÇz²ùÈõœ½§Žk+r5ËÈŸƒc¹¢O£gE¢œ¤fÓ\\^P5…ä¨ àáÊ4†ŠëŽOø* "}æÚЗ+àvóòªI ˜«òº¦Ñ4a¬‰/JÓ ¨@(î0DŸ‡ÁÄsŽ÷€8¢hÆÓŒ,ðIq,Ó°`£©Á±½²º¦Öª„Dþ (CW#š¡“ž÷ãËÑë­Ûï¶%uéÖ{‡vòæíûW/7)ëþã‡nß½ÞYj¥y< ìyxvO² ˜ԨÕÿ Àѹì6 Dax_âK;©ë¤¥¥ H,`‡`RÙ°çزe…@B°ä x6ˆ'`PAÚÒ´j«¶i“8ñ=¶ÇöxÌ™J^Z²Æ>>ÿÿÍåþÍÛwªj¨štÀCfxDŠ0ðê[¯õ}ß0º e´ÃžŽÜe¨èf{¥:½ûwᆺfऀßÚ y ‡?âØé˜Bª=óTE-I>ãž;yž£*:;=¸¼8WáôäHQ£)ë-­ª³i×`q‰ì™Ý3Wït­Ëß{¬òs[¯+Õ·ï_¦6$4øµß¿¹¹·{ ²ÇB‚)×™“%áÊ,¸Âþ©$rIyÛú9÷ï=ZÙº}r< 朲,„Þ]7bEXžä…‚äiÁDôÜT¦|-'\#Ue$VTaÍœhšDG7nõy!ŽÖ2 àoÏŘнXë›ÛË(sý¥XoBÀÑ‚k[k“9eë1ºÜéù9Ÿ z¯ŸSÌ”µQŠ˜‘ƒyƒ(/«Èì`Ùäk’6¨cÔ QWX…øn^×g3¦<ÛE I€€ç»ŽôXæ„Rº±µ À7H²PYf)WQÅK(+C-ˆ¢nÀjQ˜Ti9ŒþýÇÈh rA§ðÌÓ'Ë0<::¹Ûã«…ãå“èªÞëZ¦iˆD €Ð¤VÌ¶èæ²H"×xz –&)ð¬Õ½ÁšÄ—%\'Éj»q}·D91›fä{sožq¬©MEB’Gîü<ò'k«mI I`³þe@Ó’°ÝïÚŒ/IAM«GùœU=D2†Q GÎ ©¾{ðyçÙ‹Ó×? ¾ž=xþêý‡—VK˜úž½˜„-µ$®ö$s™bxuÿàè\v›¢0l{|Çvâ&±Ò©H--@»„[$ž v°äx$V,k**$^Q‰rm‘ iÒ&Nb;Žo“ql÷˜½—gþó}Ÿ3h}ý”>DJ!|| â±QРÙIË4ª–8. ¡kì~˜èæí;~ìI · è_EÕZ]¯7jÓ4´¬Vç¸Y6Jïßnij*&a"0Æáጩ¤"Pêæï_'ƒ½Ÿ{ŸW/Ÿƒ8È©_LûÄw|]ã3Nø&ãˆKÄ•¥³«în¿#~_)öp"M¯‹Hl}ÿruqy|`If-Ž)ñ(>jíÐ` šV a[²^3ðt+k×®‰Õ´»ùd,GŽ‘ÄfŽLÕø»Û<ú×Ý|ñZ©™>íq)r±Œô¥ó+z£¬*›aß¡9ùÿâ·"””©‚{àôŽ- ×£ˆé÷n}‚o¡1Amd|êýŠ!k3§ñ¢¹Ä‚T5fjbi#­ÎÐî[ÝJEúúãMHÍL<¿×}ÛÞyôøáýw¦]'±ìȶ©sB1¯å4Õ1´RŒ˜ìT–În§i0Œãýn··ÝÖn][e  ‰&j Ä B伸 ϸoA8ð=QÁPaal³+k÷Õõc]»ú¼ÄKx?Òçÿ{û<ÿ?½±±DØc/‚(‰Æ¦iõ\OVJ«EO|‘ƒå  6ÑDÑõ™éÙGµzËâèX'¯Ï l&mš®Û®T*š~ûò¢¡ªz§c:N·¤–Œ²\,Ñ~Ø CK‘yŠgTE8:Â~y³nõ{Ø.*aINÊ]wìÓ“ª¦–+S²Ùhý:Ú]Y}F`KŸ1I§Y Ȇ§ÆU£z^=à#ðíÆñ~>#À] Ó1”8"Yšg)ÑýÐÓæ*/_-_6¾}Ùž7ÊCÓ¼<<ûðñóÛw[Eñއ_­„¯{?Ÿ>Y¬×¯çÞ¼§C(¾€í»aØ%pŸNÀ#”¤dÛvhÏØV7žPé¹9Ëg)N«µFêÔƒ™Ù‡1-x®ßw¬úï3!CW9†ÈË¥Œ¨ò\.ñ'p€ZÏ{õ{œŒE1ë\›}œk—né<Ç{ýîWªH Ëük·Û *¢@óÂÉ1ÌÀ^X(Èd*$ 8ÆphØH$†Sn8ÈãŒ6úÓîÁ•éhJ¾qI`'A<°ý½?Õ+ž‰^¬<Î)(ŽŒÍÍ7ÏW—Ú¶•AœâÙšiNëÆÂÜ]œÝëXJr':P“8&9ÜÐ&¢¼ßÚ>9ü®zŠ›2°ë,;ŸRÔÿqA Š%‰cYìé<ì„Çâp˘㤈ˆ†¾—•ò§'Ç?ö¦§î§ È+IE–ç­f#Ë‘e]-(ÆhœÒØ~9tŒC!EÊ.Γdb×|(”eummy}ãõÒâBœ½¾3 æyEE‰FÙDÌ$š|ci0ý€£³ûi ÃøÖõc]»¶kÙ‡Û`c ùŠbœzg$\x«7JŒ‰‹ñÞ[ÿC$1FnL0bˆd¢ œì£0¶•uý ëÚ®¾‡ûæ¤9çôyOzÎó†î–ru84£j±2e;`Ý.Œ¾Ò=¥‚tqß?­vûdå×ÉòƒUŠÖ76vw~à–ËgúæÉÑÉ~§S›ž¹~Þ>‹ÇéT–Î0 U0B0x½~ˆäo¨ö놕JÄaÅ1¨ò’aZÀ¨™L: •‡ÇGj·G!-¡÷*ß ÅøT>ú_sŒ90è;3;GF"–c9ZçFqª{T9ßß4(,0žƒ'£^Hú{|æZ ð,>™Kç³Ú@ ^öš?¿'fz­Ö»ÍÏ+÷®¬>É OŸ½È¦Ò<ý¶³Wï´ˆaB¾k¸®F‰à„ÈÛC««´B$GÑ’‡„Ö Že ¢4_wrzþTµ.ìÁ‹À>á÷û²çªKåe"€_vÛ,Ì…”eå_­Eù¾¨ÇùlÄ¢³³(5t4rEIЉ<fÏMÃÐ]Û–›2Øx 'hØk .ò96EÓPL¨ô#ŸÄÃ=u€ò=‡¤IàAà†w¿Ýë[Ž gë\]º9?WÌijs­‡=ìí›÷>=_[İÒéÜZ,ݹ_ò®ÒÇ>|\Ϥ“ãÙ4æÚ©¤Ûs{k»Ójs±h ÝÇ%ao»#µø¶-U³ì:'ˆìX2e92¶.Ñ⪣ `’íH’JŒO’€âx‡ÃD8&æz^ÏД ð ¢Üîý®¤³³×²Sžç‘§ëšÈƒ’žjÇÍx"‘lµÚ0uwäÃk«†îm~Ù*•ʯ_½|ô¸¼x{|­ìT°{Åö ô=QÈéȮԔžŽXF¸HCèRáÍ=!N¼xÓÜ”'03U*‡cC…‘j!„º>$&ô!ê$'$ }Ë14 6ñ©§ãS³bZÒ<ú¨\–åI’N`̆£á}l°¿º6ÈŽ~o4Ëfgï?¼—•Zjŵ ÏÄ¥Œ¸¸°ô½´-OM“QzáýâÄkmµÃ1왪b¥ÕzI§)>cXV­©&¥‚ãB@á$<›Ç-¹cÛEY€›Lò4Ï&H ÒU¥Ôª5]ÓÀmACÆææc)}Ciìüàú9®l\4&™StÚl‰|8_íÛÎúÚZ«êPÞ 0ÏŽf_w‘…dBL™¦·S*GÂÐ @Ò…µ8ˆôz¶e:‘‚áXˆ—¸ÞèÈ¥œ$êYè,â9õF»ÝÐ?}|€òôɳùÏ#QŸá[[[Þ( Ôë‡33ÓŽÙ­VªM†–ÛC ¬È‰R"V»ÝüÛ6kÕoë«eå(Ÿ¿‚é±0<Èð4V"Ëè¦ AÄ üXS²¾_úƒ=s"…í§åYV$ËÆ)ïÌ®²k»^ϰöÐg²ƒÅËÅ[ê¹öæÕËãZ£yÒ°ÎÆ×åŸ+Ë?¾l¬|^Ÿý6Ì8/NbŽ‘âÈ¥1ùúÔ»sR&~FHQ>”>Pu “I:•Œ†Á¸ÙcÈëÕª ì‡áΚ‹Ls©þOŽ®¥·i 'vbïÆÏÄv¦)iBISE}*~„T8ð»7N \ZŠ@½µHTAUZÔGÇNb;ÎÚIœ˜q÷¼§Ñ÷ÍÎÐÏŸ=ÉJY6¢rœì’8r6ÍDÑD¥œÌc&ÁD!ñ<2gËUU/î~ÚÙÞÞº÷`£4'çdä’°ÿùùé­Ò" Ò,þÕä%0cì(‚Uq\³IIdwmÒíx³3ºž˜‚bOú# íe¸q¼C©¤$pVχÓre’òøïÙéÉ4ƒ\®€ž¦3!—×ÄtÚÝ‚6‹9ùû—íâêýGŸž_7]/ÈfÁìžS^\ÕDQ(&ÃŽ³q÷aùÎò JÅãßWÖY~Ng1sxðÙ4/jÕ{ßv_ˆ0ñEI”kÕ•Žåú$DXâ²z0Iu=ÿf† @D¼qK $Ͳ} ;A¼5W*UªAŸœþü¥òªÙ°šÿŒ®ë(ªZ.-†S,i/†ãA>/OYÊëÇ£½o ¬ºÂl>ÞÑÂ`"7 '@Ò^ )Šw]ƽ¢ìxzŽƒPFÏÏÒItÿ[—rª (2@\‹"zRq ωœˆX <¶²Ý€s‘ˆ"âø{_÷_½|?µ3™¥•µÚúFÝêš²@Ñõú :®c„þMQ¦ÕT2¨gõÚ­.ƒñpHçš–ÙhŒ óZ\{Š¢+K êØ·Ò©€xñfè4šãˆ8 ˆe´:–Ñn7Œæ•ݳü¾gÛ6 |Ëhl½}á™qH1iéèÇÉáÑŸõÕúÌ|ɲ¬Žiì|7 XÍóùÛZ¥¶¹ùb}uMÓ º^TTÈ­çO Û3ìAÅ,‰t<åä_èGš*ƒLo4q‰ ¡ú¡o´LÀ²ÿpt.=MDažûå̵3SZÚBµÔÁ˜¸#Æcdc”±[#î\ùSÜ™øLŒ;7Bt'Á¶ AB¹¤´t¦sŸÎŒßáÌIÎùÞïyÏœózýõÛÀœŸ ¤¨ª .\®GçÑ8BT02FßûÛ¶J³P÷…ÍÉP¿‰5î] a7›M‚ î.úNEY^~<²OÒÌ7-ŠD”rp*®ë´÷÷'™ÈC·æg@ÓÁS02‹œáÕö^W¡Uêœ$¢ óˉ2ňÕr¥Ùo›ß³,)W«@õú­‹þe§½]»ÿ`iåÅK¶™«K*‚c;õÛ `qUÑ/Îúš 2+ëªëEã(0K³•éÆ×/ŸÍJ©8c{•Æšg»»ÿ¯æçßo|xójýzà¿ ’ÁŠrÂ0}Û§I®6Û؉ˆ”Ça³i–¤%«Œ*‹9•tv*ƒÃ?ãxJBÐ.rŠNIÓLNÖ´Ò5d•kˆ¢R0 !™Hó›;¬®F`¹b1Í'žç»¡TMP8ùMàx¬íq¬ª*¬r’ GC»\®rˆ‰?'&8ØŽ0 ¼(ÁGÝaÝŒð¡:®GÛ¿>n|Šã­µµw­ÖêµÓ÷gw¯]š†êã÷tÍ´Tl²íb¦Xÿ½Óýst”â§" àØÍÒTyNù‚ZH¡;ã3ZºÞƒÂñy$Ë`E@±æ’8„ïŠx§ˆd9Æ*–’üt4Í=rè ¹R¯ÎõNzÎáÖχKKÍfõ´wfZ5™SÓ ËÏZž·ž¬¾|º²" %=NÒ  ñ$¡¼÷ë…É(Hr_z€žÌä$è[÷ sz~¬)H—µðúx*9#@øÍ»·ùâüñQ'5ìY'‰B§àA Ï=\´œñx¬(šï .!È^ÿÔ²ç&r›3*1Çq4۬EH(„B©èLí.°|“__wö÷ö¤Œ)ŠZÞ´/BÆL¸p8òA¤ûý!¤›–Ŷ;jü-X3¥òE˦)éô;+«gÝ›òI·}>qåÒ’”ÁqèQÂNägeÃ4ë?¿¿~õÂ.V QxD*ËaD>|ù„R˜»ddµ~O|òøQ­v9?¯Û¶I‰^<Á˜Y»0ÃAø@£“Sd(3hÊ0]±fžãQ~q±Âî°%SyÆPM‹ínàtŒÒ˜!Çé9Ð3®?bölFMý‹Q± q7¸6ÍÅ”*A…E“Š ˜éìøø„c E(<ÁÃ!sÒŒ™É.OÅÂd, iKIIñà˜ôqçóËçÏ6n?(^Z¹{o­^¯¿ßÞáÓè굊ckÀ:­?„¢¥…ÒúÚ;g7ÿ~ÛþÑ –oÖ¨‘Å÷º.¤G»um°KÕT.âàãEmìï&Ó!tÒ(÷N[ƒØa^™l§}ä ÌJ2—Ó ñ®ëðO°y9%NÎQÂÍ•J›7W×o˜†\©ÖŠåªã̯ߺ_®^—ôÙ#×Ûý½ï“fJA9±ÉÍtJ©ÜwÏm4@±à¹(  ZD@H¥@T括©*õŒ  %Dÿ/Eç²Û4Ðñû5NüHÚ4Ä! jKii©Š›"uW±dÁo±è‚O€`à XÑ*¡Äy7¶ã8~›;?`Ë3wî=GßËœ_ptV1•4ZÎ>ÜÀq†PIËðHŽÍÂ(E¨Û·¯ûƒN§ãûÑõÕ½}3´í0j·Ûí]ß(eþÙþÁx4‘yÕ[®[m28ŒOóXeSû/k¨€3))¢ajÍ0&—Ø äÔêM£²™S¬ˆUß ~~ûzx´?œœ V@1iáOÏFrX$™7÷PÓE¬`ÖqG½»¿jdM´ììî|ùü±ÕÜãiJ£Ì‹ÅÔ£lYV¹„ã4€l€U¥ Ò’®ßÇ oõüåkkӉݨ7EµÝ›Ì]=sÖn4&9=}!àШéý»ÛúV¶«:Å"ÒË 4SgÏ ¦¹Iƒä‘ÝR–Öš§±b™ãJ‹eì­‹‚W9UÃ*İšçLNKª]Œç ˆ¤ú(„Û¬Â5éYà’>XŽÒl<öînA‹›­6y‰G[VaÅj–F@wPiJšƒkBôC)r¼{, ²Q~²Ó¬íù®¦ÊCMʱ"T«º•§È™JX`˜,ô]ƒüY…“$™N‡ù¤#§*Á —$%$ߤ䧂×ÐÚÞ;x{qq|òj{ø%]¡ù8B³i†ÃJÅå4{šƒ'©ç-ãdM.¥Æ!ù™Î÷A½ªUÝ_‘ñwÀï ð`œŠX7Çy6[h¸"ðµ2°Ž‚£ÿ @Ò¹ì6 DaØ—I|;v’&¡¹µ¡R%,¨*±BHðHìy6$İ©ˆŠª]PhÓŠÒ’*mÇ—ØÛcs,ž`43çòÒœØçÏ^@é ÆÅ©^3•ßÜ@rØsy±xzYÿ~ð TßãGO+jiïˇ×/_5ÚkAh_]ž¡Ë'G'¶åö;]à%w‘; Ö›๒T%i!&EÇK.GŽ“kêZ š<¡e@!Ls© #Ntf·@·Õ;„¡dU(ȼ½ôü¥¯2¦5]UkšÙ*Sb¶ô­•:÷F³ëõN›IYžb?¿{ïXÁýÝ'1#drѱm:ðUQ¼YÌq–ÅÐ7@Ò \†ý öªÝzyM+éR»×•d £¥ÑªDM•šûÃÃýcÏæh¶ª ÆÏ£1•²Þ:›!‚ƒ²BÑ%¹Hѱ3[X lMRE½Ä4„|¨…̧. žK`¸l憇~Œ–Qd‡®H%ùœKà!¯(´¦ÊZ%w¾Ç8=>=ÚÐj ÝÌ]°ó÷yŸd/ü? 8 ø8O‚ Ý4E¥‚a4WÑV÷¬B_(Š ¨ÀIŒ(×›;7@\œ­U»ÞßÞ˜uã‹“kP‹^»Ól ’ª ñ=<ÿew/.gãÛù*ñD](¼\Îi:5$QâŽÉu£ÝßTtÍOb(KÇgý¯Ÿvî´Ú-"TUi&æžNÇA¢<…D"r>f[&ˆ!(‘%±¢UÞ~|ãFasskëÁN­Óµ#|6ù}5yØÃnâÛ°÷˜ÎØ’^V4È/$æ/lˆ’Ûn?˜#Ęz%Nh×ÅÕPArƉŸ`€Ô¾…¾[âX” ps].¬ G‘c“D>ÿOŽÎe·i Ãc;vì$vì\›K‹z¡‹–ÞÔ"ZQ$*ˆE×¼+6¼  b¨ T„Tn­ ¡iBc×NâØ“ø2¶9FòÂ뙣ÿ|ßXÇÃܺwŸ°ìÐĉŠRÈ+9Q‰§´8=½Ýí4häy‹õ7ûïëµéb¡²~ýæÎΕµ››;9y‚Ê”= í½xuÔ<¹»»»ÿù%XL¨.!%y™ãx ›¸ðØØ×m$"Äñ~ ”áž9ÁÂt}nnÖ¶ìÐ÷#?Âæ( é™ÚdNVf®”ƒÀo¶O«¥ŒØ©U¦â1EšYýV³Ñéœ{8XZ[×t£7p[Çz<{Ônž”ŠY"ÄÐòXµ{B¡Š„ò8`\ÊÏWe¥"V¥‰0€€LÁ§S©R­º±½1 Ç=Ë[ÙZ=üÙh]vå’HÃê‹" ˆyÞAN/ +µšƒ|J•Æ.¨<£ÆÊ6„8G$ýìë–i`C7À/õ~¿,*vÆ£a«u&; RÙ"&¸‹œ1@ÅŒëzÇßO´®öÿ·Þ®ïÏõ 郸$W*–…ø¸Hôâ¥u­MÓñG•|.W0Ž(_gŽH/Ø<:tFÐÖõ£o_/.óWç_¾~¾¹µº´…I8Àx8Æ$€xõxžS²“Ê&2"ÀýZžÝ·‡–ÑiNåTüöÕÅ7Ë/?¼7ŸŽ7÷w=]ÓŽHeÓq*q\„¢…Tj:ŠÓa„˜¸È© U?æX½íhÍ.f\àšÁqLkëë_$•¥äȶ¢4Æ1QŠ…ü~° % Qmmo+çÎd¬ªÅÅ¥Ež%[Š{r&Ås1oâa‚£h'p …°@¢)ègIJM{žúCAÌñâ¿CâAשWK™´¸›m”‹¿v¾Ý½scõÅÊ\6{ùÂÓš?&ÐÉ]LQð{g€1ðBFÇc•ãµ¥ëƒ~ºA Ì0×OuIÊGîØT+…TF²¬¾ÄÓî¨gu›œ‹ñlw€Yo10(.ธ jÍ?_?¬ém‹›ÉŒ –÷EA@$“üØhZËèt»½nF–8.ßçŸ_kÓPÆOÓ&M–¤mº´Ùº¥«-uUçÜpâÆÐà•· ‚x·[oüú D/”ÁÀ ¼SÎ7í6©ÕµM×eM›õä4I“%õä+œ÷¼ïóü.ž÷`øõ°¼†‡a­å(ÈA½×n…ýA ¡P{Ãz`á—…hxëöj,Õ{§ï6ÛG½|î<„D!){x^Vž4Ld9¦.6•µBá¬ZÇE„¼–Ú7Œa¡0ÉJ=¬éÆ)‚I’ˆMê›õ¼x)çR¤5 öò45M2V$ç2€ ῆÍP[N¿ŸÒÍ>a!=J˜)ó_?˜•¹)Kb5Ò+_.­—fKOŸ¼p3ÂàFek‡UǵÅQ±§k¶å4¥¥F­†ñ·Z­âNHÄã’$©êq6ψR¸ÛèP±Lë°õ.˜™™æ„ !VÊQxüsœ}F¸Žúðèo…$øú´öp5•/Èò2éij&$éˆí…¾míçòӵʫgo×ÝŸHåñø8Ö¢ÆGy‘µ{ŽÝUŽ!´«û•×ÏË»_ægAyw§¶—€b)y>–.fä BÁéš(ÝÕõ8`" лN»™›’¥|ûHc±7 ¹ÿàèjwš†Âp×ïvëúµne]ÇG2pù¸d1Ñ„¨Ñx ÞÞ&Þƒÿ !1% Ø$’#Œ2÷Õ–õcíÚÕS’sïûžó<Ï9ç}äÕÖk<ösÁ-Óú¶óÁ©êH|<ÀãøpÏó=9_>þÙé »TÝÜ\_©. =Ã~ówƒ%Ç›$Ò¹by5Di’Íb)ÁpB7ÄÁ ¼Ø:3 C€°ÝŽgµZ9”š£12îŽsmOÓ)’dçrºaO£0ESBF¬”ËËÅŒ ò<S†i£! <Ï }(°´ycwT*åãù8{¸whhmµ %ñ›JZ“Ý2D1Ii~õá“úV~aÙAgçz¦ØÏÛwï¥BXoÊŒ\ K("¦¶KC輬èzßÕGo^¼l5Žþ]_L,À ûõg[W­ƒ½&‚ ÉŒ@h:`áy%çGàSwê&šE3ÉÈ<+¥âö ’]¸·X,eîšH-UUºF¥d’´ÆNàÃAU %E- ³1m%W¼5oÏZ'¼¢‚¦Rñ ²Ë3«]wîþ×Ä»z|EC¬Ïæ¸BA¹3· ƒD¢ ¨é4çz>†xS{puyJÑpûÛõÚ†ÄÐ$J䥼˜ÍßtÍí_(ÎÉUÍ2®?Ž¡˜MmZ©¬À0dŽqõ ¿˜˲@‡Š¢@'œÄ õ^Q]„AŽ1J–2@ctn4ñ`[ʲ92ÛíóÆÉQ³yû$zE’Þ|ðôùça„N3"F%eeÀ—1v¯þéÕÕjõúãûkkî4èuŒ¡vK:Å×C³;òœÉic÷ëîǟΛßÅ,Ãñ”¬ÖZíÁÒò£Êz‘Š=ûìhúȈÝÄÔ÷#ŽO‚²vÇK3†’8áeeYZçò¿[OÓ`Ç·¶[ߺ­]»3&c(A$!»ñp!‰$^xéWÐcŒ ^yÆ ÑĘh<Ä0 èbÀ±;ÀF·µk×míëSúš>ýÿ~oÞçyȹùEPløH%m°³û+㣺fÛŠÝ<À£rS­ZÓÆ’=~¸ýgC˜ÝB‚8rKs©KSŒûVsèH]¾\$í´*ŠKϟΦÓ}°…7t4Äò"Êj%-¤—ò½%K§­6˜'KËÃ÷1~¯ïl?å¤IM±ìÿ«ª’æBNJ ðȾ ú›Ê‰/éæÙ+µ6nž´Ï†¨Ò7q¿ÄXÂÇq\0$ÄÍIèŒR¯ëŠxýâsÙ£áQ|ßUmô¥Hh­ÝPõjé÷³‘`È‹XÐMÂF#»ûÝë· úÓéËCc)>Ïæ³ù¢ xÀ[År%“ùH"Ë=ä°A¶zX&Èðp„õ{í.ÈËöß\6wðbeu3“¹z%Í ¬ÜS«¥ie“¸8Æ´EG„¹¸ÕJMlXÝNs eÎwÈìç+ðÔÊ-±ER„¦jõz‹çC<ï·#ózÔ`«¦lí›Fî6p›Æ2ƒ´•åg,Ï劤ʼnl}ß™‡’Ÿ?­}Xý ïÇídzƒÎÉq…vàÑĨ¡S¯^¾¹qsŠ ÈXëö(; Éñ‚"IåJ¥qÜàa`°Žª#Ú‡(ôL`½{;[#±Çåìˆãò9™ú¨Uu¯½ÏÙø‰ðä´†<§íŽØ–dÝëXl»¹"Ô°¬t«ÕFêü9!ÄÐæáŽì¶bø“#ËÍš&‰„¥'lj<9;3uçÞâí»‹Éñë ·Ì/ÜOÍ\‹&&ÝlÀÀÔúúŸ›¿©¥v»¯“fÿÙ‰lƒêh¥ ÌÒí˜Û,úÿàè\~šâ8¾»³¶Û.mikYŠÚ´¥‚ñ ˜ÀÝx4ñàÅ«‰ˆÿ7/êEÆp#*Ac ( E ôí–vÝn÷ýp–ë~‡ÉdæóÉÌü¾àÉãg¸ÿèݰUÅ6ûš5Ñ¡h$Ž\‹ðP©WÊ +?w«*Š>ñôäìøý§7­N­´X‰'“éÌLe©è8*@ ×2Æ#N–¸ÆÙñR1·PÌ뎆 &‘H€ˆ0œˆ#ÙÖdô:aÒ×¥0&ƨpS74­¯ßÉd 9ÖÕ4Ôu{=Ì–†HœqÕšºMx(‘ €£—ºƲlJQ%€PŠhúý;óß×;¿Oi€+N†‚)ɘªy¤%ô»¨|xù¶to}:“¦hÒAu ψŠ)‰ÔÝvÎÍÐ.æ=ð÷¼gç–W׿Ü_{øˆ€ü1w;WÊ›€:¬kr?„ß?nªWò Y3˲¡@ ~Þªž¥1Ç‹ ÿ£Œºõe×­»•ÂÆê —:bÕ'¯_½3mÒµ ’˜r’aâtÃÁ)ÇÄEÏfoÎfYÇò>om›‹P€¡ˆßÒóHÂ+çùQ4À+Š<ÇõI‚äú|t*©Y1¤ËBë¨úÕrõäì-H8Ü%w¸¿wVÛùW?‚¶K3!¨š‹Ë9aÐ̤üäf2„[ŽL]g3ÆâÓù|^3Æ$‚Ch¶ŠÁ²…r ’ d¦‰FLËŨX,Iá4b»½n»^; ôH yYü9ø¦JWáõc{ó×á ²²Ž„“éré¨×ʱ‰f»Ùîr–í9.2¤N·Ç‹;s#•Š’2G¡àDãaè¼ÜS-ÞÆ&69 "Áp0˜I'‚4þÕˆ¤¸‘HÂt!Z£‰¹_­îìíAZ¹ºè•ç P´t]>cZtwÝ4Ä‘àøËÕÄA࿜;oÓ`…Ç÷kì$NC“¦¢”DÐ%b„ †&$6&f&VÄ/`Fbb‚!$ÔJLTtiUŠŠ(m.MSÛ©ÕĉíønÇ|éø–÷|ç}ÎðžôÓgÏ]× áûœÀšl% m˜ž908’'ÓøÐWë7¥êôn¶0;³¹½Np'úh¥|à OšC`ŸŒI_tqQå’„!Qï\³©ß¹ÝhHŽaIôdM5CSƒ!ìcŽ.‹2$̳)K|ÏÞ¥  h†H ÅÝÒ%šã$å‡C/ G†—!Ðêå+ò©Ò=Q(’**Þ £__?ekfi‘,MË6ûc•,ÝèØ±ÝVcïÇîò½×µÅ\‘ ¹0E^£e)° ù\.dz8Çk}ýÖõzVË è‰guÚ§jׇ’ÔêÝeÇ=ýæCs?TGˆ•³Áx÷ÏßVGi¶”­Ÿ[kŽd Ñ\ž«•˜ÓÝ09:úgÜå•z&è=Õë=µ1à׎aEb-c¬ãÑ’;nàg% ŸÀ9>›•rº®Gq#hÛ@na8Ô÷ ¼€xûîKíZUY’Å}ÓUÏT'ö1†•rs’ik[;{•‚CÉÂÒŠ˜§],rÒÞ¶ìž:h‰YZD€v/Ô½IØU4 p™¤NÈNÁ5Ié†ö"9q‹¥BC@pœ«Ì=‹2^Ÿoî«Ç õ¤%÷Uµ×Ùßø¶Þ8 Ç6Mkç÷!ø„•R!ÈͳÓ6Ë Í®¦ø §ZaˆùIÔ2€ˆy)+JÀŠ3E÷AJIFbò¢[¨T*Î×J‹ó†`(e»‘7=ï„€ä¢8N£C³Bþ Àѵí4EÑv®éL;§ÚNi©€ZjÀK‚£¢üB?ÅŸŒã%š D,¶Ü춤…–v¦™v¦SÏø'9ge­½ö>{oôÎô}E’4Õ˜°' ²IGqʘYGÑ$ç Y'ãpS¬EÕŠð¤kåS¼‹òï«—ï "Ç'qÒb´Ã˜Í„጑³Ô“ɄҒû€«&6y¯¯RiH¢ÚTÌ™Ô Ã £#ƒ(Žæ‹ùZ½)À-5M#Iaüï„àÑ1™WV7©cï6¶+Y3”޵{Ý©tþ0•±2œ"vœ Ïåp#&T¨%´:81EsœÖUJÙœQ¢>«â€m«ê×÷KÕteòÞõXlËwa˜¦Y3fëq8yŸNæÒ™, ØvSF»ˆN!û‰„Ôlw;”,aÛÛ™õƒpèr<–gm¯Ç?ïò÷ràÑã…R1µ¹?J¤j‚$*­™™éHh4<ì÷ðþ ”Ó&„#~·‹ƒpÿ²² ]½2IX0¬œéèúÇOË¼× #šÅl€•¡Õ†b]/— $E¹ksØ!㟠Vš! bQ7!0òFŒb¯eíÛNCjÞ¼q­¥©HWË&R…b2( ¥É?d³‚l!·µósnn¥¸¡áàxdBÕÔòiièâèüõ-ZòRd¼!6¾ÿXÓUÌØ=l2Ùí o´_Û!ÄDQÂ02B úNOoŠo[q¹É£=©\&P¬=>øó;—Ù‡^l<$6„ť̳çO?¯—Þ¼}=;ûÄÓçÙF{Ÿ’æS’Bã×öÞâ‹óîÙ$  ×cñD>ò7)@ô¹zXçXÜÎ0i|õiŠ"ô±P4¬CǯEt`³*-qecõö­)/ß‹#h§c.ÏÎkU AÀБ$)GÛŠR«‰ÿàè\~šˆ¢8oPŸ˜í¾@І ô$ÎÀ[-÷ÑÈ0­f³óiwðƒ¡8Mz¢:¤Cá(Ç‘ ˜Ó6woŽMÍÆ¦g‡ÝΠÑ^²uU–}ØÕÙÙmåÂF5/á{þjó£a>2`þÈ×¥R»ÚèÞ¶<ÏEX§»ºÞìÊ$½,õŠÛïsÏ6ž®®A?6Ä„ä­iZf9#‡ùŸqŽ7=ô9z?ã.€ A»‰x¼h­u>—ž^^žç¸0†¹»!W=&pªvS•†R2‘Td"CétºQê¶Á¸ã„„Aá÷±1§î¤L!qª/ôlÇÎ -†Âèÿø¡±jÁó3™•ÛFuÖ]79E&ahÓÍ„h¡ß£( OŒbùæËþDáf§Þ®Wéy~zB38E°.a•|ÞÙ)/,Ò€"Š ±Ðõ'ºå.wÊ:YZXIÝ)Ÿ‡ñ#QI‚))Àë[µZùÃÚÆâÞ×Ý—¯7ƒ€ýñ½@àÁnÛ¸¸6 ½±žÍnm½Á¼ÜHUó¿N ù#–õF%‘džd¾Ûþ¸›½ËÏßO%éæ¶žŒ‡ãq2…h%‚ï>hVnƒ”û¿ÄBMÝRTSE&ˆ<9xº üýñE>7ïºþH7G OâäØt–ÚÓhŠa"Œm# CD8ºÓQÊ•ÛTpoA9¶E…‘'XÁõˆ9Fy@Âó‰ A0ÁÀòà"½þ±Cq1ûáå«™ü&$øÒ·ËDjþóÏ—«;;žëÚòM±ÓüU,\´Zµ¹l:-%Ë nU8©Þ8ÑG(°I"ÞØÌ;n¨T–߆Ñu22Y«4ž½x~ðh7™™0Å2QŽqŠŠÐcjWc œÇ)=0¿6 ©[ÀöÍ—+$pˆ@u>v\½? Sœ®•¶:Œy>†"ˆ ì.̑ˋ™ÇGK Ó4KPaŸbq¹Z¶À]½Õì)Oö·V×f!ö¶•ŠeÃq¡C>$h¿©T‹rAUë$åQ¨ÝQ†­VÛ±}ËòÞ¼=òmtûÁCI’@8¥§3S8îkšŒ1\œ87(WJÿ èÜ^›Ã0Þ4m“&mzZ×Cº6=níÎ Ñ‹ ·1ÔDA/†þ_âW‚^:Ê@e «ìÔ5=$MÒæÐ4GßüyÃ÷}ÏóüøàùЧûÏê¢1Ÿš– ž2–'°ñBá¨6³ Èv:]8n²,øÃ(Iu[M²ð5Ž¥—훵$íJBOS¥@À¼óZ¢‚^ãs*™Ä Ÿã˜ŽÁJêõºp š+`Ð)bOo):'‰ìLç0ÜÀ1üRç¢kͽ %ðå,Îd Ö• `nÎrôä¸Açäo<®Tò†%›¶„ ì ¿?ÆÐ ± (¬cÚd2¯ÏQE³Ô)  ¥”¡æ&¼‡vè"3f/g3~óîCŽïÿ9ù•Ϥcª)â÷ïö_ï:(MÐ×L6nšæÉÙe1›_]­‡B( vOO£xpçÆZÿêG±X â H`hfù Ûk>L$ÔS*÷üüLš ¶W?§»¶izWÚ£ÏFH̳­°÷p*Nìƒ?U1ænÅÒé4°æÅyLIUœ Ó…¥'£‰•V«\ÉZ&jÚ°1ÄHÜÅ HªÏ²‚Àç²y0Ï0A|Ϋ×/KE:±üt÷ö^£RÿY®52™œå8Gßõ*LNÔÛßÚÙÛÞ»óùà=M–› È#ÂX I\”Ä/Ÿ¯Ø,ÃT¦Fà‘ÉD2$Uãy¡7¨–ŠÇ¿§cD³C©|³À´t ¹²;÷n‘1ßbÇ6Úíëë×Öªår²Ý®.Uhˆ|TâX ah«YõUmÓ%0RÓu †ØBÌEй2—$Ñ´õÿPtv=MCaïVúº­íº±ë(ëœT '^à­W^éMôFcü\~‰1DQ‰ :‰”—°±®ogmi·µ>ýÍéyùÿÿä<ÏÁ_¾y}é÷mÇȈiÈa.•ûõûÈózW l§R”YÊM Õë³Ã]pgO_9Aøk¿áÇtÛ?‡oÙ®-ˆ)ÍR/zMä ‚ h€#Iš…´iè0q\*`n.¹¸8÷ïàÏÞþ~©T„à_»µ°µU¿hõ8–î´:— â1†$ݾMàØ 01<€¼)ˆ °’"ApŒºiI;.Á l‘Ë—fè8ü›E¯F £wæA´NaËNW ©öQ0ôÛ§Ài+÷*s×TM³*+ÕæÉßíõ·ž¼KÍ´ØTÊò¼® d’¬-ÍC"Òt}oïHXÀÊÍJ0t»jÏd㪷kÕÓ“o£>Hº°§#;êÚâ¹!6ä…Ä¥kžuŽI*Ò 'D­}ß(äy>‘ÍsÓRtWÙšÖkwº­ùyXý…0ìühllìD-àHÖõ£þQm-Iµ:íɉüTA†ÃFÄ© µï Â1gÒõú1  ³t«±û›I|*†cÍfçKýÓ0°ï®®š¦¹¶ö•g«§»È]Z\F†c#w{³>%I­5ä1çò8AäbA–É$h§ç;ÙŒÈ0TQ.‚±dDaJŠî{~üðþçç­I1=²ØÐQ8>ÑÇ:>³zïþfý»j´o,€aÉxTÏM‘L­v!0DM©dgg –ïu=2äÖÞ­ŸuУÇÏ/c ÃçU/H¹«U'ƒöù¬xŽ0˜yšj]œšî4žÉ‘1\`9(_?L&Hß³i/—%¥2aTKo·[]–åi&9ð‡3J9ˆÑqœUÎfyåÊô8º–Ö&¢(<ÌLf’y&“LššÆ$µà¢ Ô…Áµ¸܈¢?À•‚kAAÿ„‹n­›ºQ+­Tª´MÓ&“×ä5Lf2“¤žñ®ï…Ëážï—ïà?±†:XË A!(†ƒN¶íQÇ9†žÇ4…ÓT#€R&$Fk ¶ßºy[?{1[µj?¥¤/¯]ÝÚú^,.T¾ll ÷Ê¥ëÝî@Óúƒž5—Λº×jðje1æØN³ÙÓKñÜüY‚¿yû¡t.½²œ×:6ñ3©GÓA4I l]%ôUêVàÛuùŸœ;ãŽaùI>- J­Òèõ¡å€Y„úòR$ bÚµvSkªñ´l{uP# Ù¡J«kŽçÕ«êÞÞoÇF†¶›ˆç2™EœdB;%(×GúŽO†0C·öþî£ 0Ôfæk½ÉTmV†Žn º$ :6ûupñ3{Ú¨6´žùíç.ÁÐb\ i|`öÔƒ1#$¦‚ Cš‚¶J°´ÂIP$IF‚³¾‡pÑD.Wûf¾˜–cüî¯?`ö²Ù¤2¯`§³z­Ö1zÇ'U:ø‘=QÛ}Ýj5{,' (DÑR8 Ÿ§ÍÁ0‹—.u}´¾¾ùêõ{×íß»{GmU¶:Ež£1r4òyN x ÃQpY†a‡æ¨V¶l3žˆöQÕÊÿ‘ºÖ):¥™0eµV6­~ÿñõ#ꛋY… yåÏ+¥‚‹‚ž~úòÝÃG÷#€d,ÔÛÏâK‹«qY^ÈÀ VÕ6ÜùüR‰²ûå“N«½½µóiãG¶§$YG‚,ðœœâYx0/HÌöžD9£ë`(£ˆó %U+Mg4$Üãa¹FS@˜ pÇÕ'SØW–‘ÔãV§7d¢BÏö\$diºœàS ÉPt6;MDQŸ¹óýݙδ¥´ŒXÅ&$&ê77¾† EŸÁµÑn\Ù@%”2Pl;@¡íÌt:ÓùòÞ'¸‹sî9¿î¹çO|øø‰cp!2Pci¼M0P -¨¢$q<²2ðxÐí2B>äŸ?vRo›7õ­o_>]]«õaôa~ÎÌT9çyxà“†f”+÷Z6[ÿt£Œ¶¦ÒÈšMUÉó]ÏÞÈ©¼Âì7öŠ%u~¦@`qNSiõrRÖÙÉ9TÀ,x)o`qHœ2ÍK«smYý)"/c<!‰"@B„=ßj5»)Ì—$òC×ÝD‘ß:9œŒÑhÐÊÓgË«µæá¾ëƒöÅù‹×ïŸé¨eóF¾¤¨JT‚„x!GgQRU™"@u¹4W‘6j÷½ ?žö9á%ÀO±2¯NœñeëBdY£Tv£PtÆÐDE–ež"!›Ð›o¯!";‹…‚¾€Å’ï8f<7rìc4€Ëá”Ï(y’wÚ—¦nhK‹åÛ;ÌW4‰Áæ`¶»4Au­ÞбÅL†ã˜¶>„bô9>&@"Ih2Äs\XÑ9šµ]·^ßNÒ^Ç*Ïg77ŸCþÚÙÞþýý×úÚje¶Ä±|cï°Z}„¬¨1¡d Šã$E<9ý;´œîN\´Ž¤#gÇaóô*E¥r9Àl´6ù&œ®<©­g )ðŽ;Ýv¯ýæí;‘,R»P”çŠY5O3<ô³Vgwèì›XJ·w‚éˆ"ã¥Å9}Vaþ՜ŰaPÌë0¬”b =zÇ%e…-PP¥2ËJû^S³,êÍ£~àpI,\õl«ÓÿSß*V qLÆ!A0PS‘yeßEhÝ/áÌãê(±þ @Ñ¹ì´ DaØŽ=¾Lß'Mœk DU j¥TêEê¶/ÐEÕw¬Ä¢í¢*4…$¥'lÇ×Nv³™YÌœ9ÿ÷ktæP?–ŽðpÌÀÀ‡bÆ1 ãQ¡TH³ØÚ±—'WúeÐ8ÈyþbíøwÇ%ˆ£ƒŸË­÷o_5ˆpt;9W³’"çÛÇЬàtŠ“"Ï$EQJ 2Såb¹þ¸‚yqŠf~Ì ‹£ÙÌÔt0$ZifnõEEN¥œëÞt!ù`£Ã£?øcϸˆ€–L ÛšPs²aV"ê¥ú¨¡ÿ5vwöWŸ¬Ž_ÚR1_Ð0qlœâ‰fK=mïddÉs]¸øãÃnïÇ—o/×70ªµr©R-ת)HOot¤ë +Èù4úæÃ0ô{:ó\ÐjB” ?À·~îÍo‡×¥²*‹\Î{½±aÙç—ç8Òù4´P¼·ßq]¶”+i%ÍóçÃÑ`4»žÃq´ïE9Mlð_ŠÎ¤·i( £_ì8±ã!sKšF”ÐI-P¨  ı‚¿ ±dÛ=›vA+Úª Š6)U±Iâ8‰&csýžôÎ=ŸÞ}÷’ï?¼í÷}Ü™¢t2‡RÉÁØ‚ãg,Ü`Ò?šÆ`2Ôîu¥V{ðtG)Ȉ£–ë[ŽãŸ|ÝÛûòx÷YŠ,jS}üÜë™ívëððˆO JË|> Ƀýï •yûæu:I7õ{+õµõ¢YPQ¾lþ&z{s “S ‰\/Êð †A ‚æ8ð•ÂxÚÙÉÏ›áÑŒ5³KåI–Ɉ€¤QTdQ”9‹Â©1ÔâI\7Ì!DL&Æ‘ç‚(áFtçÆ˜y8†èl!'Ébâëëkºn€†xnÜeÏ‹R¼§Là œ\Ȱ äý€£sym"ŠÂøÌd&óʤ“d’&m^m¥&­•øØXAÔ¢ª[Å ÿ[Áw‚àRÐMqãÆm¥’ "%QûJjiÒ¼;ÉÌd2™;Oït{wßý~—sÏ绿¶Êœ¥Éö:š$©µÃ bšÉ`T!Øv_“ L1ãñÄÅ+—“©iqØÓ-•"}ÁGn^[í‹v*‘{óú}>uåîCŸrQX6ͱ´±$e¶Þ=i‰=ÛµR©L8®×S AÆD‚ä4½Ù9ŒÅ‚ÙL"žàZ­cQêºZ*o‡Â^ÈI»ÁñÌùù,ϳ°q?æÃß;,NY³5ŸNâ`H˜@ê)—‚ÑK‹9Ç”q› b†¡ì~NÕG‘D‚ªËðGõfaù:ˆðç Ç›¨KñTH8[¾"Žì°-Ý£ì¤ðáí»òæå¥%/ù Q4:r~fÐíï–w~·– ò=i Hœ;ªtõSÃô™4º„kCAå¼ V˜—â8ˆ÷¨u<´mà<“IQ„ƒØ¦ehã±3à­ÁñÞ*^Y•j]‘ Hž¡ ßAÍÉɈŸ„mY‰E¡>a>\jC °´—º‹ñ|€ÖùÙÓç{û?_¾z¡Î÷ͯB,à ê­•£1R*—ø³öà<_Xœ÷6ð´8¨±L ÝiïÿÙ-*#¥Z=(nmsdœ „³é¨ GÏë_ò ùÙ¹L¹\üw¸?7—¹½ru]qÐëŠýÓ~ãÛÆ“G†…µx!­xXEIˆ–ƒÓ‰ÓÊxÃs”÷o— P¥½4`étj" A.":¥ èèú’tJÀÂÚtHUÕÊ_of £$]—´>P%ÛÏD§"Ÿ»Kf2gm8?}\ŸIB-¨7[.ŠzcÕ.–Lgãñ8Mø)´ÉêH:›Ð&‚0 o6»É¦;Ùf󳛘fKÛDôb©PDhéÍÞ,ˆ'ôêQñäUzZ/ ÅŠâUP {°­bmšÓÖÝf³Ûd²¿³ëDï3 ÌÌ7ßó3ï]¼¾ˆá˜mA–åÑ 'ÊQ2Ëz1ò¸«9ñ¸!¨l6ÍPP†Aèþ¡x¤*Ë!8‹ŒÇß¾Z}tiþê¼ï[+/–n Âc•óe¤Dû¶[\i{~KEV*ç@bx(1°Ìl7ì£Ó™ •ÿPw§±»õiýý¸Àç¹Ü©ªˆJ³Tà=Çé©ÚŸÖQG–C §@÷BS·O{â½<&F \Óhz(ˆjAˆø%i¿Ùè;¶iõR,…VÑèHJFð@Óµƒß¿ÍV£Õ*æ 2櫊Ò7]MÓÚƒBR}+9°¯ÄÅŽ|,ŠaPOzø_ù 4[†ø±ØföÑX4x½¶úqãÝÛw&ƲLŠVõ“òDùâôÔöÎ÷µ7Ï<¼çA™Ë'j“ÕÕ—O£“¤cÛ kš²¾ñ¡¾¿@æÆâ­Zm:Ëf\ÇÃ`¸üìIŒ´¸PÕý™™ÙQA@1Û툇ÇM¹ÝñÂ5›››Íd²§jWí™TmkŠJµ¥®iAºÞ=U=h±9¦ïs.M]@Q])¦Ò™õÆ0—Àò#™D€…VOS¨¡8L[êÀ:ÄýRY€$Ònn„€DN(¦yÖ5-I’¿lïhº‘cÓ{{õ­¯;““U.3økÖQzF¹RiηÆ<ìåÙe0‚($}”׋ò”{õ¬¦Â™nGÂÁJ¥ŠÙë©WåÊQñdéÅ3ÈéK¥S››P^¹Ö†!ÓM$qœðⱂq7&­B3Õ­µä#í^Ìk\©Õ}Œ·Û¯­o|„ÑB©ÜËH¤$ÅÅp HÌøc…'&”[ÝêÕÅlvv`Œ®–Z¸ƒ`¶cZ}™¦öûOAúS¹iVNϽ8"EâØÞU»@>ÌýY íÁ9Â0 Z6 ziBpëú@íÜöÇ3‘ÇÜ%p¨SoTg²ÛTšœ»„«á£¡ÓÉ;{Û-¹‘¼3Éq<ØA§ÝÄq_ÏýjÀ°4™¡Þ}e˜rCÑzÆ­>`†¥ÉJébãë:MéÈtL¢é¨ÕhLJMfvö~ EÒµÚy>Ÿeh|r«éçá`ŒÀi]¶ä6<>âô ·ëz»x²ßRQ)Ì‹ì­ÕŽs¡¹»3C­}ßzûæ]~þÉ Ç2JZš®zGàXÊÇv”nùª^©Õ³Ùd:5áçÙÉD4‹J#ä–,»76èzσA¡^¿¡ ˆki}”D&+_Ör³÷P’G@¨˶úš®ü€¢+ùI# ã0ÌÂÀÌ€à†ˆŠ –ÄzÐÄôÐå/h¯M{ë¹IÏÞziÒSÿ„L{h<ÔØERµKbbŲÊÀ8UYfa˜­À{yyù~[ÞË÷¡ÏVVÀ±áƒ+ ±†&=ÆRä0h6Ä!¥ÓâK×Õ¢iê΄ãc±T:¹èÙ?ŒŸËníÏV×V“Éip»ï××Ý&V©€ªiœàBd¥œgBK7þÔ»QpmNÇìlêßõ¥ 2Á«™¦sáö\í¢^,•Ä:m%6’HŒ%®Ä–nu%YE1y<ˆµ qëÛOÛíD_†j¦ÕÒTºÐ*êª$g–æIš¨7*OWž¿ü°¾yk*k¶ƒ ×íÄäܯƒ“ÏŸî./qQC5˜Pý¤×çsf϶Q r˥ظºº=Õ‰"’¤Ÿäq Á ZÓìÜéi¿¢Ô{f"îºP×µn¹Ê·ù L“íg8ÔI(DUÜž rŒ§ÔþjU…•vO“òGGéd2DY†AÏŸ B“¦¢,;^'®pp€Ä¹}§Ç'§´žÕ‘%ÃU¶k‚É¡“ P–mäöüKùj|qa1dÂùãB‰îf·«çU¥MÁ‘bñ˜Ç…mÉîï>yúÂ2\NÄì·û›'ùÃøäÄ£‡ß¾y÷uó·®é4T…Û›™Ï¸]ƽËãÑAVn›gÅB©ÄÆÐþœ+Ÿªk$N&I˰]n¯ µþ¢îtX¡Üá€t‰„˜™I§f¦ûS» 2äg»šzÎ7>n|õzmï0GHXè³[ŒÓAú ­««]PQÇý;K´×§6;¨Öà í)ˆÜ²Z—ÝFM2 >Ô½+K]IMM'Ã{%мP7ú_Ȇn:Úµ¬¢nË$9Yþ/Gç÷Ó4Åñ®]»ÚvŒuëÖŽnŒ‰ †ÈO ¯¼Ÿ$šøH4&þxõÅD|3&¾©‰¾I‚FŒ&2eŒ±_ýµv?Ûo}½9o÷œ{¿ŸÜ{ÎY]}ÐmƒCÅ ñäXí;ªÅ²xRlÊ¢V¯Yº ÍR‚@><ÄÐ,ÏA°k<1ùêåëwo>k¡'žY·n­€+òÞ§ñdÊìµ=¤ìD»˜Ë 1ÌáBkÅ’®«&`àV ¶-•-Ë„Ø ‹ÀÈæŒ$AØäÔx|tXkÈ•órþXà#aÚï›LMØ“Z<ž®Ñ?)”[;Ùu q> Kþû=tù¬!Öœ*6rM)Éñé9_(*«%’©«O=f™àí•Áç`…á”p|òðþÝÜî6 ò™ð.Ûjˆ° Øž¡s£Ô Ù3,€þa0šYÿ.dþp ‡“®­Ìþ§k§çùù3¦³Ëð¢G‚P—´‹ìó²‘HŒ &Kš=¦³¬èzÈwGD¥Òl7,­‹†Ç®D[ íov'æÁF@8›EêªJ:u}(1z4IVÎ[‡¹rr*I¹éfÛøÞC0Ôî•q£á0ïc&ÐC&8nÏ÷²±TB–§Ã<ßjYÏŸ½¸¹´\,”TY÷úbÛ;;©€BŽå­1œÈçö °ùBž²z£ýíKzaqifvÌëu#N ÒÙ¹…~ßt®Èê¯ÍtµZw^0ÀÀ(Jz(/í_ßø:Mà$ÑÑ; ÌþªŠH±[5ûÍÔDû€Ó4£.j@oB0V¥Ù…ÅšZ{ûþÃÜtbyi^ªí¦·¢ÑáÁAO d‹iaˆƒ*…­Î…T­I•Ê©pdÝK¶©–+ós#›Ýôz€L„~oîà Ü?¤*v§o<™ð³lürL¬WC¨¬×¶í@‰þ€¢sëi ãøºuu]»Ckwfë‚0“Š¢A¯ˆ&!áÊÄ+â…:Ã7ð¨—&&^b¼#(YFÂA¢0‡elŒ­ëºn]»uøö¼Íûæyžß¯ÿG3ñlB£†4(&›.ò Ø¤<ÇØ[‡é´°ú,™ª ŒÝIf“‰´,EVH˜ettxlt\â©™Ù´íV[gÇŸèžËcüdXs¥ÂdW¶6¾p¼½£QC|•ka@aÑ"®X‡"*R:“[ˆÌ_äB¡×W <²ø“-äµJŒ=ï°Ù9AÒë0ÊJXÐÍe×"¦þÛý—¥ZÎÆ÷6Ùl\yj’x-$é}€,ëy`1ˆQ/TøäþÚËWS ^‰´: fr!<]]M¿~B0ËçS;;±¡ÚïAtH©\Øç‹|¹ƒ‘e3¢ xã[ÄO_£Ú¼á_‘øn:ØÙìiføœÇM'Á%Ú㫊ÐRdûè0ã÷ùŒ&²È &UAuQ,ÖçËù\Iœþëé ¸í¾ØîîæÆo‡ô45%I‚3D‡ƒI룷Qo›™™íx馆,‡ÃÑ¿±toO;ŽbÊšÐTUª³Tª& :­Š‹|a=ºU)2Ÿ>¾{øhhbüikk³Z©o²·û^札VÄÁ‘•ærvîëääíq}ùüž¢¯ŸNî9]^Ú×Â8`¨÷ÊRâÅÝ¢Å.›×÷÷ÁÖ`­ |e ¥“ãÔúÊr¥ÌvwÝÔc¸Õꊬ‚!Yɱ+ñ<Ç–eaŒ|AÔ8ønå¿ ^—TLQ8Mfør-v¬«µ¤Åj ÌJÌŠ<è»Qá ÛÑÕ¹ ^ÚèVCˆZÙ¥Cõ“c%‰…|© ÖeÀê†ÕÐÑù{±s÷NÀ‚ ªUÉnuë•è>(:«Ã©ÃÑDüH¯…6ò4_\^s9^ÐdÂ@Q ƒ‘Îr%…ÃEÔ,Aº|xmõ9L4ðÊÓçs±x~u}»$"ú;{ì¤ Ç`CW%˜¨JR"Åð"†S›[‰?[±ááQ.™ÿnžÛß6eE#Ý=îžðtulïí»ƒí­AÕ˜d ÒéïÖÌ6R/-®×«ÈýGÇÆÃ>?­4„î›/ü{õâõòÒ’¬bíþn5óBJƒêͲA3~”Ȭlü]ˆ.Sΰ ™‡ÆÚüžX" ÏŒÂ†ÜæuööÌ<˜1ø™`{Ekp¹¥h|-‘;{i¢ŽSE±O'I¼¥vm|¬ÇÈ$‹§|Í H·ÄS¹\1ïf¬ˆY110í .ZR„p/ò „H‹©aˆŒËDÛà|1}R.ЀZ„Rºl¨p&žÈsœËíî¬ïyûÒåÆË•r:“3¡Hï`ßòÊ7\,ë1T!u¼ýÆÍ,—›{òìñìl ®IS,©{3wç?~°PžªP·¶ÀñÔ³âêòÔô$ÀKÒ†•0¾ôõç\w´z"ýçœîNœp"­É@õ˜/+{À‡;|!Šb‘æéjº^Ó!Á  |úJ³ ¡V­yYV×TAÜŒ¤Œ" ÀÕ¼,;N^øeµ{.O†K§YÀ¨®N à„ Òl¥ç³À²†j£[€+@°¡J¼Ñ¨rÙUŒ´è&ÜèMe‹ªf´X Ü™Bb$]àx±¦ØNEÕ$^¤ITC Œ@ÿ ÀÑÙõ4 Fq¼k×®{)Û::¶nƒ ¢âdˆJTD£FcÔõo¼ðxgôÚhŒQ¿‰Þ¨ ™ÑLI˜lÝ` u[G;ÖuoíZŸúÎyÎùýÏsžÿƒÜ¹s{Ÿ¯Â£ßëݶÀþiëV 88‡5¶šMŠž6£.1ËŸý"|§›8Я(íÝÍѱ:Ø5Ÿ…õËüô݉[=´‚x %(2ôêáã=EZOgE†=NªQ‘Ø|h¸Ï Ÿ@ ;09sö,fÅGGO(jýõÔ›ØÈ Õíl"ŠØÒw¿HOH[ )}á^©^Õ`59˜ÜHÍ¿3ë¿å §Ôx.ŸÝf6²©Uý¶ÙÑIú(*ès¸H¡R~ñü©ÛeŒÉF\·u­V£ÃÇÆ.œ×ÚMžÛÁpµ"HW9:T©ì?ö2™Í„ºaÏ[û™-ÅÅÄ:'db‘S3³“»ÛkÁϱ¡ˆg_o¿î‹Æ3ü„Íä®\½l³›æÝäLªR¼7q‰/ï~_J ÓVÇLjò× U…’)FM¥Áò&Œ0Á\6cÖdƒM±æK{[if(õ¸H@ÂB©èó\„¢¶¦g>"¡”ç@›¦½ÝIù»½f‹¹\æ§§Þú®îC°º˜ˆKb5ÜߺG"± ´š×n^ÇL(ýFct¨§&IVË·þ²xüäi+Nd™ôò¥-†Ãqoo0Ò’ ßVv ¹sÓ±àöØHÊžfV,]\œ½8~cüÜx—× éEVkÈJ³^EàËæiŸO–[:Ê›Q}†ôͦoSã¦z­a6ëÿ|í ŠíNDi‹&\ŰvµQÚH¯Bp+äïìt:4€  ¤jR“°ÙIwd0¶5Yw €`‹Å$/Ž °5¥b]Q–Ur9~-ÉR.ºUÓÊ|½Tæ)ä½l2aL:µÍî†Ã=¤nRLx<Žpt.¡MDQNf&™L2ÉL&išé$Í£/û¦ÔÚb[¬ØZhB…¢î|,¬àRðŠˆ.Ä…P,"ˆP¡+©Ý˜V[”¶Ô¤5}D“6™LšI¦óHn¼qWçþçœÿ;8èÕë׊EŒ"é@ Öݯ•¡äB‘¤i è %¤"½chV¯#4Eÿâù”ÃYÑØVY[=9Ô_BT;ce*ˆèv¸’")°Žs#ƒ~;‘ ïA [ ÔtvìÒV,1÷é³%XÖ믮e*U\5ÀðtZÊ€|Yø²XTŒcçÇ‘‚Ydµ·9¾¯ml É=Þçñ06þºÕB %°ùuûæ„Åàl©©ÜUnV“dœ0¹`°Êw­]¸……~â gÞÏž…žAF`¬a»`.ði]ùв”J%r)é²¢Èy¹¦¦†žã»Ñ•Çî|˜™‹ïŠ­õÐV=|ò,)„{:´þÂøÉúF ì@ZŽÿI,/,¿yýn3íê훼1ÙÚp„s2.§ÍÊšîߺÒÞèû^îj®Íð‰ª )iétÊH¶v¢IA€ŒuaÅ1Úˆe¶7‹bFúÅù%cÑr˜)Q&÷«©·ùŒš”ýô>t¤µ´‚…°°¬Ëëó’åq[éJ&ùœ(NO?=1ÐÛÝÝþmiúcÝ=ËßCå Jñ€²Ù=, ðq%IšWWVhÊFQŽØöÞbè‡Óá^Š®Ó÷ÒÆf…¿éc(Ör´»÷ÔðËÙ¯*¾8qy5²n·Ûå|(‡C#ý}ƒc-ªò¡’ËŠ|>Ÿ5à¨$‹ñýD]cÝ¢(™MÄÿ)™ÂÛîߘ¢¨Šªò™4,µÿ 8¡ú"¢•t‚ÀÊü¾Ö–f° Ã1Q©äA{[‡‡óݽ÷Èç ¢¨‘çÓ„ÅÑQ• ʨR>OìîlE$Ñ b¨‘ÊI€±;h]žPPSÏ٬Ц™ív ²ÙŒz8'L!›…„åãŸÛOÓPÇ×vëºu]Çî[‡c7Að‚B`4ú`Œ‰ˆ0ñFbüO|1†ð‚ˆ€b¢Üà%™t°MX…)°±Žk»Õ³à<ürÎçs¾ùåüR~¼îÃØŒBEð¢(H„ "f L†áˆTÁ‰òLͨB¡%Òt*[‹uuußjnÔÄðPß´ïSnä<Ïôz;e•B¨×Uìu{ ¼¿“HqœQk}Û³¹Á:y­N‡Íj\Zð/,~c˜í©‰é¶'OÛŸuô÷¼~õ2A󔜈#ÝZZÞõF‚¡P8\ê.sÛy¤VdŠd5¸ Åß«á|gQuyʼn“GH\‹¡j«ÙÎe`†Ý×-¾‰Å‘Á¹¾~_ H¯ü‰}ýòÙhÉ ü P@L†§÷¸½\'UÊà]v—K ìB9¡QHB’xI±«¦¦’gTsãKáè|QÑ+/qrvàÞýúKõ—m6›Ë]h'Æjßesó=oܾ{­ñº†P› &%¦œž˜îíékjº*ò’hdUIP`ñûýN—ópY9Eå—–•8=ÊæÊ L*$4¡–ãrm4Õ) [ô–o|öyG{>@…ÍŒ· ¬_[§[[ÛšïÜL%€¶ZY¡)ÊœrxÿâÌÙÓYˆ5™ô”…R«TýýoŒF³Ãáðz‘e½^›û ‘K1Iw¡wx`äTÝy…‚•RBOÂ2 –â õ UU#§Ø}EdÇŽVëLæ±Qß?:>3þ½ª²¶®îI歯ёÕ%\‰‚ƒÈ$zƒ.7S(Ë{<®d’o%øL®SÀ•€S`榄ˆÚˆY@¤Z…¢$$‘³,Ë¥[AµPX9é üXÕÖT?xøxxhê ×“æ(÷¥(Ìó‚Rí¤˜_‹þííM` ŽÁÊ ËÄSuVÕýæFt9H21ƒÕ’ÎpñÍd’Q`àjc1[ ó‹óÑ0 ¼ô_ŠÎ¤§‰8 ãi§¥Ò½0@7ö%" ´‘Æh@ hŸ@ÏÆ„Ä‹@ãE^·DcT"Š PÒ²•¥L[ Ë”.3´3¶þùïáyžßïôJ2Ý^œÕ›«Í%ÃÑg2ÀdÐx¶ðé«WäTµÅl6©e6™ 6]®·Û‰Èa§³ƒÀq°þË‹ÿhzO§59ìM”ÙÁÄ…¼€(d‰ ¯QèµÀÅ‘Ñ4Ç(+pHÂðMl/ÍD1èÚÐùs½ÃìzÝü»ÂÁoßìôÊþV­tÀÓžŒ®~ŸŸ™yë÷˜0¥˜:ˆesÓS?P„­žT‘yVnG€zª ”V¥Ä½Öh–Ò×G²_¦~ˆok· _…¤Àî0\N„è=†‰q\6•N3‡i¹D„ÓU ÆüWa¨Íbkjµvi`3ÌÃ'÷õjØ,Ú±±ÑP4 XS¡GqÒ`2·4µöõ÷Zõ6®ˆùüQ<]*"Qñyò›ÉGvBVÊ¢Óè @o¼h±ÖŠE¾ÎQ_.6ë¢(Ê1à\Àµs~ÿ_ŽKåcár.¡7¼s“^¼s÷–F_zöæqmM£oeíÕë÷Þ?‹=žnÁ`0JE±žÞn ÙãマžÁë7†Ô¤ª¦¶:O.Ì/hµ Œí­§ÃZ­!­+pÒ#&9Ü]òÎÔTYvƒ»Z­Ùn¯ënkIGQ±<6rSƒ·' ÜÁÙ®†§Ï_R”ik;¸»E/yW]nwsc³©’*–Ó«ÕJ^Ì*Ôæp@ ‡öâ±$ÃH$R ÊG@ÿÉd¶Øm¸“+deVâ*ŒÄN^Ì ,“eÓå,+„’¾Â Å@ÆÈ> —ËI¡Dœ©sØ®\¾ä÷m`(&@f0Ð$Ç.,Î}›üà쌎 Ù>½W^mˆf9Àñd*ÅjiÅZ AJ™ K§ÉT„çSyŒS‘ôÜÁ@x+ʱyÆPQ@Ò¤ª8¹ÏÒÅ”0ÝG €°*ýà€Cá# BÖåö”é³Õ ÆDÑXÀ³þ¡Ñv5“áX–-¢ fgç¶úxž¦‰õu÷†Ï¯‰Ñ#‹ÑH‘J@]î‚"…°y!§{߬2U7Ô×ÉURšVg÷9¿?"—‹kjÌP'³P8mFc±ø(:—ž&¢0 ÏL;3½œ¹ÐËÚB±Z,„´”r)©”V&î\ˆþWnE.ÅãÂ5ÄE7"F0`@®J ´Ð™NKÛ¡í´ã™ŸprÎù¾çÍwÎûj¦>ŠnnïÆŠ‘pˆ¢i-¢¡h #jž¯\CJ¥Š‰&ÌÏÅy ÃýÝí ­#:Tœhq’®–jjU&Ý Ô7¹öãOf÷Ž zÛ=ÕZekmÑëu„\V géX£ãr³ .ATÓ£†dp=‹ê.´ÖÞÄ]òÛÜ>½ÍS¦èI¯4¤¿ïøäèÈhÐëi^Zþ5÷ñk± :ƒÝ­þÍ»çÑäbÐܽ?no1û¼¡›}·'ƒW;œ¾Î¶{Ó"·Â¡pO_o —Ó! SåÕì,V.r+ŽtŠžd˜3HD8QÖ’]¬šªêQ[%¥Ì¹P©–1‚à, d н¾±•WÊË’:õ}OâäôßæÎQRÐZOQŠšãŒë XçäXrWFÏ=­¶Ý?WZ9+» ´sÞÆ@é@"/I$†;Í ß?}¾àÏF{‡~¯F—WųC=ã²ÈÛ…orº92qÇî¼^È §eh8466Þåï/ä r©<1¹ê˜yú,œšš>Ø¥S§4MAHHÆE`¤E!—Jñ40žçayN¬®¬ÅöË2¤ÅtM‘ú†´8‰$ÐÓýåÇH§4½„˜ƒ‚öºê§¹‚†û¯ž-Ÿ@iE«³ÒªRÞÝ>HmÇ÷v¬äÒªeÄY ³Ÿ;zÏÂÑñvU;%îpÚ<~Ÿaâ.®ža$š²š¦Õ¨PZ…Ò #ÝE“Ñp¶pY×ʨ.ï¼ E6ŠbXÊ^´A<hü8óîÕë—éTiúó×Á¡þ'“ž½xÚÕ GüŒ«Vµ­‘§hÕzıLÈïAZ0íDn ·ªñàá½[7Æ| ¾jÉ$!KóœRÒí¢ÀºD@£TÉçÐ(,ë†AJàEYÎ@ÚúþíÔúÏc7G¿±¹Yª]Û©fe¥P0ê=~;Å–-:D†QDgGgÓµáËÁ ¸[ˆÆ–$ŽC Ó×Ó—Oçþ$‰­­¼œ;ÜÝÿ637ÿf*¹Ï.Çò± Ã#Œuôe³…LÝûwC­'ÇýL[í0ÒÊõµMsÞ‰„3¹ªv2z}Ä-¹sò Ф²ad3™ãüi‚DüWr'‰:#ú}yvn6-§uu'ìêêÝ,ðHj€*JÁçöj'JQU¾Î/NŒÞÑ£_]]¸˜¤ÏÓìd¼tmÙ=TT³ŠÙ,„†¬ŒçM€•Ôâ—Å…‚ª´’Ði“°Ø(ÒBÖQNXÔkÇ=…ÖV”Ø!nÁ‘-€3Š›|üÜï ¶Ÿkw‰¢œÍž*9Žc£ëÑx<Õw±w9EŒp±û•K= ¬²´¸²±¶NÚð@“£öa$ØÌ88w“4¹·¿í’\§Õ+ åôc­nýN¶„Ân‘x´µ„P‘Ôþ_A²ÃÿPtn«MDQžÙsÈÌ$“™drlÓCÚØ4FLck´¶¨•^)*ˆ àâà…á#ñD Šh‹‚ í…‡–šžRSmš&™d&3ÉœÝóöfýÿÇ¿ÖÚØÃ Wæs7¯Nă8C˜v[n•”£ÒøÙ!–¦!¸ím¤{ç'çBA et“ÛmHJ½\/ÖÔŸé¾Z¹¶þmÓKpþÖS™s6–JEg{º"áXܰq¿¿[Ä`à †ZˆŽ˜š£¹1!jŽJÛbKÒ¦¢+2…OXnnFk ª‚›Áøx![zóaæò­îÔÐíû=y0>;Ú2Š"ªÕ h* a6®uÐfU;9á–×Q©ìÑk8a|,xÓs3ËkŸ ¹º¹cSôÊ—•ñ©´ª~G›õª$×eµJ  „X—½$Û›H%ûO½xµ´0á¯ëÝÛ冨dRJ·×Ûñs<(ÐÕÀë àûä¢$J ±¾læ|[ÅÞ¿þºúq#„ÍÕíÏ¿#¨ˆHE§²Âè…ÓcÓ“Ld˜~|o`êʹžÄ쵋î´táÇb…PðL^pXÙó ;–rèŽj‹XŸ/—ÏBëT:ÜËç³P`ñÙsŽéÖ4ûÇ÷ýZM*l—L“ŽG{Y6®›¾ÁÁ†ò…Ý’eá±X²¯?mZèöF'ØH8Ár­£ra·"ø†}šÏMø¹͇ˆ>õˆT„@Ù´k´WdUi´%©JÚmCK$ãÁ(£j"p·€#½LÈÍÈ06øш…ëM`´èÂV334¤¨ªæÜEÉ vmµê)?]|y÷Îõ|þŒ‡Fu«Y¯üÛÙ-k–Ã…£U±SC4ì!Ô‡:÷\‹MøXЩÿ4]ÓÆeÜ\ùécß?{*JB¾˜ò|W7Ì©¢v›M×ÔË› ;!š‹K†¡MSw]_°v´›WªåæJå‰>k¶Ú,+æKõŸõ݇µ””½á\?@Ã0ƒnÇÉt2帋³¾å›òîý~qy}g{çðË!᥸HSTˆ¦ÇQçAá°¡[Š2õúàóXŠ]|Æp«ÓÉõÉñ7ˆ¹1Õßâr2U**ºŽ³±¥â–”+ª›9 ǹlTtðáÀ¶Üb¾`Z*€ä&Ð\TÁU§¤D£Õ¸n+rJv]×Ð4Œ$²rÆ2‰ª©]UŒA$îWÊ…æåÙƒ»£a?“–lßjuþÈIùââñ°ÏŸ>B"ëµ{õú‘m[žì _©ÞwªÝ‚5—²KNé3˜ µh õ\uÔmXºcÞé  ü xq1z~vá…Jµ2›éo÷ßDc·W ë®Dœ¤‚Ð<ÂQà4AŠŸž6‹ù|¥Z²Ó\\B¾ÿ¨§ÓÁâ1ñðøìëѯÚöÚãÚ½lŠ=^t}44¯:¹9D}d¥?w,á¯MÕÆùp:V¸pPJB¢]oñ|EBfã2·vG :IZr*êÌMBi˜ÁQèÔþ/GçÖÓDÄñm÷~ë.•6ÝÊ­*- .Ñ•CÀï§hƒÆÄ'cÕg/ˆ‘'Ä …¶´¥ÝÝö,{;ÝÖY¿ÀÉÉœ3ÿ™_æœrëñ¦ ò¶D‰‘ãã3QV—JÅ?Õºaœ’˜Éfcœ X­žšH~E–}7$ÕAØ!Ã/h^  œ^¶piåÞE£W\ZššÔâ"ñ(†`Ö‰Áɳ’¢"Û‚Ë à§w;¶ëðÄÀ'# `q€GÉôø(ð=Ô‘ÑÅXT•7ï?0’°¾¶&ËÉ`’b W±îu r8T¥°êÂS´çx@Zîµκ¼‘d…±Î•XÔT„¦‰ø^«ÓO%2ÇŸí½€Hޏ\7|Òű¶m~Ñ4`5E èã“£b±S”F­ÏçIŠª¼}7?7 WU–%×ñþ6ëI‚`Þêæÿ&_T~DÀìúEzË幄Æ×õKÐâ¦oéNf ¬œvQŽ‹ªÔ¼üÝ®Õ,u::MD³™éùðÚÁˆ­€sÃÃös šnf“cáHµQAðùã§J¥2¡iŽa¶.Îs ÚÖöƒR¹°ºzËFÝë~w*¯ML&Ö×ÖÍn’õÃÃï߾쓻8Wøz°¿P\ °Rtçöý'»OYZz¸½ÓÐõ!M7Zmg`KqY?í¶kÁ´›f(M¤ä‚Ò8=ݨ+±˜ÄpáGg’Éå–óó%NRÂá·DÄöQ³Ý€PÉ<Ò dD7Ûìî=ߨ(K"õêõËjµºR^é÷­?ÏNº½G›w§Òã…éL³^÷ûÈF=2Uã±™lš¢ˆ«Î…ªðÙtêfn6<AdRRÈá$Q)BXNÅ–ãcØ„-²µTR”d<"tM1¼aöÿ @Ñ¹ì´ Da8ñø~͇ءˆP ÑÒEW-ÊU}Ž®ª¾B»êSô¶è3´j $Ä h+ ¥¨ ÍÅqì\ˆ“8މíôxëÅÈ:sæÿÿOöÌ /Ÿs=™Øð* +åJûf|wmUÎçM(¹äeè6ÛZ–Éó€&ÍnÇÈ)2ÀœÌhŠb…p³$¥5Íëô¢ßÏ5ëÖY_]ÊÄ¥¤Èõ,zËúá¥Éî¨Ð|˜!"L\cn›ú°B!0Ž\$%Ñ ÂI2#ˆH8Ó: Š@<áþ"”©÷»ÆÄÓ™O#c}@[{0‚ahš`E̶ÕîE0RNH8ÉN¦žÑ3«zCd¿ÛéŽ\׿XúçÙù5=—´ì¡©tFÍæ«¦Õ¦A Å$1.€=«ªº¿wpxx”/¨.¯Zf;“N†qyùÛ…tÌ2וrS׎O'’à”‘ð#ö¬©Õ{íKã :íæ£­]¥PZ\¾_,=\{°9´§©99ü&Î’¾3/§!øÎ¥’’ èZãêì´|uaöMŠBV¯»_ÒµD*í3S7ëÿj-½$JQ”í@“ 0 «W«÷– äm>yì­¶Y/”ã£%'§”ð0nˆpïÞ~xõúÍÞ—ýÝgàÍ—WVœÉèë·Ï³œœ†Óíí-ØÇ ýâ !)²vßìv …*-9›Çà¡Ú,:-•Šj^‘a¾(&&©€-É;ŽÏô­ãà4¸ª^ÿ…ÀqƒBPøøþS€úOŸî@~‹ÞæÆD(£~]”9E¢FÞd½T<ÿqLÆ ƒ ¿¢@xäÕ,"#"Ç ùñØžÏBõ ¢DùžÛh”IŠ€¥÷ ×ÃK–¢‰XdŒBpàa à #ö¿]OÓPÇû²öôe}[·±±±!nSˆ¼¸€ÉÀø9¼à;½áÊ oEcbbôR0‹ FHÜK·µ¥ŽžuëºúÔÐ&ç<Ïóÿÿþ'i½³ó’xBOÆXD’D£Ñ (±\)íz!õpkƒ¢CÇj§9›ÕðpMœŸË þÿGSHG±†ã~¯cö‡—^Û¹¬…‡…´tcõèÀeÚbED\»O`(G¾Ï@¦cv¡G˜ ý`<mÀX¹& f@¢Š…Ó f9¸máã_—®G$´ôRµª(êØ D·Œþ²¤«ªa0êt¯z²¬¤’ÚdŒÁDhDX(¨eܸþϳ“Àž$är…é4öíûùÖVm³¶>^ =©EBmB;!g0èš}Û¶ƒpºÞï÷ã’ ÄõW{¯ëõúv½~zzfš×"€pŒ•t žê4[M#ÚïC1°ˆ4Œ«o7; ñ2[­°H«VÖf³%×MÓ91аôß<ÀêÂ02UUö$‰ÍÓÉÌìÉc»›µˆþ\uÀÁ]@"3$9“IõºÝkË–$©X,Š‚°º¼,ªˆ„±SxÕóÝ'K+÷*‹•ƒÆ»êâjÏ0+åj}ûѳ§»£16m‹˜÷_?§³Éͦyk¡T®”Á˜Ä:ŽRâ¶Ñúôñýí…ù‘‡ß¾ùp÷N2\ßì¾Ü{±~©\*AÔ%Â0ÏÊzAKåq€Ú$’ ãÄBŽ¥dUñ=¨¢cº.¯m¬Fk&¥×j/ì}9<)ÎÍ‹š£ý…s cJù M·½¸:o5/9Ž×»Ž]Ê=Êåó4CDÀži;q1AâÄ'¡.éŒ ¸´6y>P9Çó¦sÍ#îŸËSÓPÆÓ›wÒ&%MÚ´´ãè ÒÇ™2J…… {îý«\º7²Æa!¦‘—ô™gÓ´MÚ¤žxÿƒsïý¾ûû÷üÝ›·ý>°ë|]ÓcÏeçY HpI–Md’B2† §ktCS) b(:jFµë ×qzøßþzè#þÕëŠa‚ÎÖç¦ÖCö¼)™Cƒ£(‘t„Xˆx‡4‹ˆÅà,‘8ÈkGa,Œ¦™ z½Ñm§«;þpJ±ñT¢™D¢gÙF /ËQ_:ǺíÛW4aM›gÅȱ°É˜dùt¾Ï€¦ÆŸæÍí-+JÊlf2õ&—Õ÷ 8تš}úì ý³$ñh´3Ò»ºfý‘«iV³Ca[këFÌUS—×`ÿ•µUlÛÜÚZYÉfÕúÕM1IN§!oá4àAìïí³G"RJ)Š”KòqµÆ02ϧ)]«ž)éY80Žeñ¨ƒÐñEcÍà C3-Ýq,‚DóóóùBQÍå ù|»Û† ¤ºÙh÷,7ðÍ …òjy®·4K€}áù‡dT•dh …4ω²¢™úáÑÞû¯ÿ6%7{Ãþhm£²ø¸4…lîWítq¹4#Ê;»?_¬­Ó ­f$JHB%²ÀcÞàÇîÎFå¹Ý³¿ln•Ëe’[­ŠF³yåN±xö»Ò¥É$ɨ!‘üôùÛö÷*çxžäxÔw:6MÍH>”Ö¶LÃn6ñ8wtzR¯×¡º`‚Ÿ9öhyiåÞÝûµóKx«+ ¦Ù ¨0!°wdtL슢8ò‡–iT–J %È{Ö¥ëö+Æ–Q!H€ Ca¤އ¶­(À±pÐs£ùj¢ÌëŸ$ÝoÒ`‡ûA? Æ„ŽB]a#¸éÅb0Î[¯Ì¢Ñø÷¹ÿÀ 31Ù.¼[22u€Æ¹,À0dcd…®”¶´oëi¼{/z÷ž÷9¿§ço67m°XÀs¼¡ªRLx:õl]+cÐq)Æ<Û55gÌ ¤7Nÿ@c”åL8éuÿb(rc‡¿[‘³‹àåa‡èaOG Œ`긋]]]"¸eþ)÷ñÃví¸ñâù«Ãò/9#'âIá’”.Tgy:¥-kŸ›%i\Â_Yd¯úƒ‰ªsL$-¦–óGPFY('„ÐRm¬VCÇ çq,"Èù¿L J×Å)ørÈ?(:“ߦ¡ Œ;ñÇñ’…,nšµÚ†¶ªº„r@BªX®!àõÀ TåˆJPRBBBšÛqlÇŽwÆWKïà÷fæû~o¤7èƒGOlӂ¬ÍuAšÅ¸„8µ™xbfZ™å"¥üÐ"‚Ù,؆ŒÑQ"@; !†n8: » Å 1žK6oÞØÝÛyzüìî­º« ˆ§jªLÒl*½” šl˜ ‚ù} …ô2l°þ|B," ü¢6:¦«ëºmÊNqŠá 4Jÿ›©’"ƒ1®”ùdŠf‚iéæïÁ™ªÀ)75ùo&‘ƒµ!_§2q.¿P w AŒ‰àHÌâ€=$uºp Љ±lz0˜†|Ò0´ÁpNãèN¯ŸÊ$T°J œ‘©¬yN>—K/çY’(b!¼~Pït;‚$\Û¨M„ Èf”¢R|šV`˜b©Ôíw^Ÿ¼qû kØ»h5=?~!Ê“‡ïß¾w¥‰óv«Õüvekm¢(¦ïë` ÂD±²"‰š,Š€?8áÁu»ƒ÷ï>¬^^2oÿ< z·Dl4oïìCõúÑlW«¥ba©R®¬T«|úÒúÆÚõúÁh8æó|gøçèèðÙTVÃÊç‹1Ž¡(æÕË“R¹¼¹¹£#d”üÔh€ œ~>­VªðGçíïµ­Ýng¼4 ع©04;—$Sïƒ Y¯Õzƒ¾n:ûkž»Ä XóB¡„·ôXâ|a›b³o-¡]…]9Ü[µÌ9…»8ŠÂ>cÉg²à'c‚òË×óþp–ËfWV« Ó^æ—SÉôèb²”Lîl]õ< %ý…“?ƒÕ„O‘4ñ¼"ÎÉŠ1ºû^˜Ïƒ™EI {t”Dh0'Y6N’ìl¦9® ë5 …À‡‚õ_ŠÎµ§i(Œãíº–¶»´ÝÆ®‚ƒE_È-"&1‘ßßø¥Lü~_„± †ˆc¨ŒmôÞÒv-=½xúÎùçùÿþçœç9ØÚ»÷¾@µŸw …ñl6'êúhô”ϨÝ-µ/^œ¦¢6@¥0Ԫʫ¢¹ª6êqô¼Sq}Ÿ¦’¦©Õw›?|hí¶€,ã~ éb»B*Á’•JéèøÄs’F¢±-¶Æý2t" ÛghƵ ðpJPêÀ:C[… Fº’Ñîñ¢ ×"`Ò±B:pmè(’èð•±Q]ξzüÐw Œà.8¤®Â0$FÞMbT†L!~Ü€Í⤠"uc@ Ñkºzxt6U»1>Ž‘½ËžaJ ÃlBB,A!pß(\׿ÚyŠÕ£'\Z¶îcv±RTá 8µ{@kô[}뮆ONN $é¸Óº’ÏW^-NÏN/¯,wû}X6 Ëdˆ¢ ›žÍ¤!âuNŠ9莀ò dŒÙù¹ýæÌQ¥rUW`¦Jð¼¸þeÃ§ÏæÆÆª»6¶6$Cc³ÜDmj§±-ª¢cÇ1ìüv~ŠB^¾^I0dH†33ó‰$¡(×ÍÆÎv}§ßVWßšîûÞ“åÖË5Þ¬­¦9º“ÚW(:–ä‚ÒdêñÒ=Ýì•+™‡ª¾ã z"K—'ÆQq6›©P8ÉØLE–¯›{—ÿ®?}®O׸Z­Ì D…eAâ.D µaçâŠãr ‹3ôHªÕlçØ"—Éz¡ÓØ?Xßl¼x¾¤jJ>Ïq\ ¸EC+"Sf’i˜ Ñ(šj‚:Ð4'âI*–fÒÑ9¾"·ON£žü smHÓy]wnEp $É@³õ‚вÿPt.;MDaŸË™Û™v:Óv¦- @ bE¡%qk4¾ƒLH|W>À•àNB|\ƒ"ÐR¤@oÄÒv¦3ítnǯopr.ÿßÿ·˜ùØ7›oMÓ #²´TˆÅäF« @Óh:—»fè9 þñ˜®7™¼jš" Á¶,Ëò’¸{•T“¢(›=;›‰ʱ½©ÜlϬ!äߟK3Œ ®#ð|­öw2E‘a¡œ¡ïgtƒ§ C@I‘¡ÃÝ6[MÄÄ•¤D ‘ã†,0U #ºÝêÐ>µÉa–'#_”°"‰v¯ÏކsZîÑ¢̉ÍzÍì¶' ²á‡5U„š©`‚Ø ¼ÀxÔ·zœÈÅÕ8ˆÃL~Å{^)WON_> q´…ó¶éôàŽM³¨( 2)-«§úÝîb~ó,ñ†Óc*“&×m7Êû¿÷®Ë£Ý3¯?n_A°g1)έ¬_¿Ú˜›õý s×O½n4àÀ–z¸*cIÂ"Ƙ3 Xa†F°7ùü}˾»¼<*sº­¹Xx` †[[ …ÇóùÅÚÕeN½RýõóÇ|>&_\ScwŒÚî·ýƒã“wï7q’ˆ ùôù£íähZî÷½}И»®©%ŒÕ'kŽ|ÝÞ†5\T«=³¿¾±nèzë´ç\>ûC#ŸáB×ÖëuB!UÓÏäX2¦fνÑÈòƲžŠDG|¥rs~Ñ.­.?{ú<3®Õ‹ Äêÿ ‰ƒ17r-†£´” ¡‰eÅH犥"(¨‘ÕU5~sÓ¢”J(_vvÖJË® 1“̰,èMËg'§ÐdÚ­–9°J+EÚhìa(LޤR©¡cC…fèä^ÀéN§ï Ý´qO’„H€[^€6 Åþ€¢sëi ãxÛµk»²u‡î cŒ¡9Œ3ßÀDôÚ‰ŸAŒÞxíÇðRˆ7$ —j¢¨qKe=leíÖõà³»Þ4}ß¾Oþïïwó<ž¯aâ ÎÌÎì”tݹ›¿×¸¾Œp †C4D~fèA#öžAziwÐç‡ ¼f·ï‚8‚üºÅÂãù‰—o±x»-E¢Þ*ºº8ˆËqRÅq¸\‹¡|²$ô4!I´oé·ªMàí– ‚ä8¥Ù¤™Üw @W ¯|Ìø~n2“!ÒëRš&«²¨7%ܲ'†G 6Í›† ` "öâ¢FøXÖÆÖ…ë ŒŠ5øåó…c\8!pI¡ˆÝ‹rwàqw÷sqn9`”–²¹õa<;†£Xcq*ÝáBl&§0|o¯¯º•ãòÛWÁÛÕ´Ÿ_¿|Í1ÍóòÙ»ÍÍ¿MÙššœ]þteuÁqºÉlfai¹ÓÑÕfR£ktwvv²ƒÖ¬Õ· dç$8%µÅÂCÁðMW söÜt<H1.éÅÃáx0ÀU΄êE] ’8+•JýœÍ=xø(ŸÍõ–æÁ¼Åb!ÀÖŸ=N%|ªzšM²€„s´'ÿöëïŸ#‚ f‹K‰hºP˜ÞÞþ¨È…ÅyþZX{²5$Šb×Ð)‚lJš‹¸™á4†¢ªÚœð‘Cwd,‘LgÇø¥©Œ?51ÄÆˆ¨?rpxR*U ã-Q™Ê§)Äl7®†ü} ³m×›‚ítý~*—K¦âµºh[X¹\}¿õiyeºÓ»M'R¥ÃÓ£e ÐÕÚ áAÝÁìo‡&©ÎM2AP‚òÎçâ4Í P B¼kê8Ù€$]¢¨OFi†Bð¡Ú¥ÐP@[]ïô Œò„B,j»©dâ¿]OÓPÇO»u[÷Ö­cL&G7 1!på…1^™˜8‰?Ÿ€ðô.L¼11^`â…c â !1_"FaÓ2Ø nk»ÓÓ–úÔÛ&½hÎéÿùýzšü]·ïÜã\§[9*Ö› ¨Ï¶Ñc þ.3òýèkXÑuBˆ±Bˆå÷ó±šícˆ-Ž÷a“žB S9¨%ã}…ÑÂÊÊ1Kìô$’ŽÎ¹yUÑlH€V“AL$ªWä ïMˆ=ÝË…ïk7ŽY›ÕTSêvþ|òz8¯fé{åò»÷ŸFƦQ‹Jo«`^– û=–sÓ<ª” éH…‰Dzàóö6  äôUaC£6c± lÁ{€¨ívN>tð°¡ÑÅ…Å.aŠW¯ @ñÁ蜰,7œ´ld`s4?¢«¥ûHK{ój}mu3è ŽOOÙ”¾\}^’d$ÇÅò™üøÙdºÿÊÜåù…y^à1Â{‡û‡rµÖ¨T*zG†Õjµz&› ‹NQx·kA°Á ©iZTŒrŒïÛ×íJâ½b¬7³€~ “µ°P•Õ·ëÖ^l={¼aRš—²Rnxâ\Ü=ÀóÉToíèè@Ÿ¡³wç>nnŒå2§û‚<üÕ8׿g³_÷¾# Í©³U0ˆ;;ï‹Ù<á‰ñ©­w[OÞ<-­-Ìd§—Ö+›o·>Z/Ý_Vï•À拹Í×Ï­kãóþŸ H62ŽÀ G`g‚9tLDÓÉp ð ‚pY@øç’ç]p‹F¯ÙÑ)â®Slcàñí–¡çí~מQ3+Õh’ʃÍxMŠy1Îúð1– sÙ¹zýħ­µjeäwA/º¸+³ÒìÝùù…Å×'Æð«gНÕNqŸ×WWËRBüypP®”qØåÜã£ÑA¿ßÔ4¸ž(ìbö!E$b,Ó˜kœ] eÔ hÉÔÄ oŒ‹9¦ R®yÖúý§^^YVDñö8 É•‡¯(Ä%Ñï™4Ã(ò¸(†šÙ0S!áÞUÏ¢„ƒc–içr9> A’¢4 ÎÊÐE7ÝÔZ3lñw‡íŽ®ªª"ß —Õ3¤cšíV‚‰€-|O”äp„Žy^ÊÓ“wFv@Iy 6Ây‰–mÿ€£ëéi"ˆ£³;»Û]v»ôϺ­ÕvKm %!Ô£'M<˜¨'¯Æ`ôbbâÑ“W?€ãÐp4hšBƒ‚”?`Ë–ín·íný­×É&3ï½y/󛳨i“ùO …bAÓ2@zŸ©†®#Æßq{]šbIÇ‘#5°A]«Óþ½¿Ãq|~@‚>ñX ŒÅ™iîý9¸6•ó|´´´219666<=3µ»½õap £­ªq¾‰tFû>EŽÁ0¹°Æ6È£qfñöaø`,ÔºÑ0/gŠé¸c%Þ¶u€†<oëÒ3[¶ ‘a‘Ë´ßá132úeq¹\OkI-¥§ D×Á;›í#§yubzõûÆógO7¶çº’ŒåGGòb-/ƘêÔ)¯V«a¿}?‰¯_½, A_#碒f” ™¶Â°v6ôÜúºžN¦êH_YùšJ&‡3¹õ[ pÅlîD‡ &Ò´oœé õªú„ˆ¨Eñ„Fݲ[dVU!·mnV†† @Ö®çÊ‘>Ø~–ÞÝÛaeKEˆï“ä(P5aØ5Eåß;yòø…–ÑÖ6×hÎ)].—Ë,ÇÍ/,\¿s£' ñÍ£SÚ§X¹Ÿ’¥ƒ“ÃTF¼u{¦òmqµòsjòfËB©‹‰´–ê‰øîý{-'øØ#¤Z­bß¿T(¶½´'ƒlŒv´?š¿Tد \×)/• Ç Šª9e¢Ä=|ÈÙ¶½w¸í4êÝåh_7<9x1[¢ppO¬iº]Ç=ÖÁú‰.ˆ¡ ©D8.ªJ¢RÝÐÉiVË.`Š¥M³ÞõZ—‚ïßI[Äì@Že BRŽC/’ÈQìÿ7 CÁåb†é§h^?1YÆ;ŸHìÿÚA=¶ Ã!×m‡Á'•h$úOŠÎœ·i0Œã>ÛubÇGì¶¹JB© |è@©h§Jê’……Ð/ƒÄˆll • RÚR‰¡´ qMêûˆÏð¼žmË–^?ÿßÏïE>z¼s3ªŠlþ3eIi·[¦1ü Â²PZX†'iÎ÷ ¦ ʨ2 CQÕ¢ ð‚”D"'ŒU_äX.ËKIPt]ýHhÔ ¤wzÀ?_>}ô»’ÔК€¹WŅ̃ðз±,#I„à9äÖŒD”¤bNÆ`ë$¤©ÀÉöÔùyü+I²µÛ«n̯Ֆ–Z|]ÄÓ´CãbºÎÄ4Ðl‹‚ȃ(6/ÐXÕûðñýöÞ.Uf4’Ñ‚&K*†Ñ׆3¿¾Ø¿1¬µ³½¹µ³Îñ¹¢ÐÃáˇ÷g±§é['MküâùîpøjQ*UÌvÑ"Yz»…4êaÊ à#ÍÁü8MlÍÁcpîÛ×C©®ý9Ÿ$a˜äØP)š'ÀT––AÎ0¼d Ì™ ô¿À—8Z¼X–D=‚e»½ %×umŽÐ…mË, WøN¯¶w|z:þ;~½¿è'ˆüõõ¥Ü<}¶wïî*Iáï¶žlÊŠÀ¡±xÑœà’œ¨6ðT€Ú4))ª 5::ÛØx°¾¾&(|góºéØ6ÖJwÐ`NåIæ)êÑš:¼Cž¥ƒÁªåù—cÓr\?‚‡çŒ£€¢ÙFCNËäûᓳµÉy…§BƒPR KæÕkÂíåA@´À…Ž[–(Øïwº+y5sµXÄaàa’¥ùÁÁáÞþ}gÛyþòÅð諸뒸<}´ßrª1ñajˆ"Èvgo;IðãÓ“|Ñ9]×D™·6m†ÈI”QG§g ‹ºêÀî3,ïŽÁË×ïÞ¾?>9ôqÌ H’JF­ ì^¹ à*YBÁÄ&³Y/ÏA’hj5%Ä›Œ[ö¦]o¶¶ƒ>4l@)Íz½7è@Üêæfè“_5·~ýî”% ú›óóž(ñ~0×´l ÎÙÙ÷’$=8ʦSÇ03¼@ `tV*k’QaŠ…|Éöºà Okþt¾{÷ž½Ñ@)•laÐr‘­2à ’¤!Ù’Lª…Þ¯¢V@ŽI’®æ[ûÇ¥;ìôf¸Zç.ƒ^¿—3œ7ºqÿ]ó@²@d±Øl˜’Z%¡@ÿ‹a‚ùc<Mâ4Ž–Q0£8ü L“©×íöa‹ ñ ôœÓ{‘Y*åƒ2¨ 1U«ÁË&qøS$:(S‘–B>Zs¦^×´:ðâE’ªnXÖF«µ<„dÂE؈$+:Éœãþ @Á™óF DØÇÚ3c¯¯õÞ#$Ù„H”„”Š&- ÔT) å_ð((R  $D$ˆ"ŽH% ä`7f³>×ãuÆËs7åÌ›™÷¾Osˆëëêõt"Ë8¬’œƒ}žN§LøÒT<x$Š&‘M\’TÆ£ P/æ2š°âY—¨ MSÿNâœòH Ød§·[mÕó‹ÓÞ§×w×në|tÖß+þvž½<çtwvü>.Ž“ V8Ãð2ßÝ?Ù#¶“å<%ÿÎ<·™ÚmM•M]eÓl¡bX<%Ê@£ bóÍFEÁ\âgY_Ò}wxèž¹¶Õ~þôÙê­µ–Q³ ‡P»Âršf‰r•ËÀ=yüpùÆÆŒ ™$§iè…SÆ×mV® SËÆ›ÍMÐýzÝ1ˆ¥«6 ™7”0E8=D%SѪŸ?n'i¬ë£“ÅnçÚõK/6®®Ì¿z¹Ù„eÛ­AVîüRZ¨®¨_P”$…ã%Ì …|Ê@4Q(Q? Ï+–cèÕƒý#,#kk¦aÊ*΋‹F̬ZÐTR¾¹º`;uÛ˜=>ô?¼ý2Iéý÷,KÆeØÒvª, N³¥+÷è|kkïëvïôô_ëRwieyaqi4ŠÅâ÷RFP­š9â±ðîý÷ˆf͹Ën†1Omvf´"n>L·xžC4ß»ÒÓ4„Kœ"# ðÉØ›íâf*ÏR/¦‚iVu³&k˜æy@ÓëA’VUø>|M/œäD.އ¾7È/¨©’–¥q2À 1‘’8`‡äräQQ•ÎùQe@ò ÆñÅýqD€€C/Ïb’o~Z3Í$'4[LÒ4òÝPx—Qöréý€£sëm ãx·¥ åÐÒmíÖÕÎÚÌ9u7êGðÒø•4^ý&zé…šxHôÂÄÌ-™‰YãNk--x¡øÇ;BHxÏóç÷ò<ùwpiä9³Eâ.³@’0Œ¯È‹jÞJà-xÙå2Ç0WDeUây>cX?—±ö3¤Qþ›çÕ  ²š.¼½ÝZÊ1›Ì!ÛeÂôÓóãcFŠ$LÜ1)r1@Ûkµ•ÎÖ¬ÀMÝYa‘ÒE4´ öà SÇㄊ¢luP*“R™}ºÑ4ÃëQ4› „¬5º&³ë”8¥wkÛþ;€)LÒË1Ív•×di¯^¾>8/× £³y£X"Ð~((Râçúe‚£ßcr§§ÐhÅE,b Iâ¦\³½uøO„?2øðà×Ñ^;+€™‘ê‘çë–%KbB©3-_æ…`î!}²4ÆjOÇ8=ªy½Õ,qÜWLú²¿ÿ³ÝÞ{جäTœã`P S ÿ] /3Ù”,ÀOmmmîÙ_¿ÿàx±XÒ0Î ‡fš 2Ú>òžVfX–L†JhÛÍçF>*-k°;C|p²¢‚õ7ÆF·{^ðå‹g˜ŠONOÒ(eˆ ön;3Ç™]]]#¯Vëñ‚ÎòùÉÄá8PÝ%Ó˜bŠþvpyr|ô¶ýÎ4G¶çF¡w3º.(FkµÞ<:4ÖÖ˜sxxq=˜P˜ùõ[gXùùÞ›G[۹ºÿôV©®Öµrµ%±cO!$!imØhÔ·¶Z‡€¾œùÈú ¶ÛíÝjU¶¬~³¥­×¥À¹™+CQ¤¸x!LÝ7I!,R=€ˆÊ®hNȨŠÜÜ$?õkZUà¸Á@ÏT)'öz]ÐÓIjSÊ ߟ÷/:q®ol’Á¯8©mh°¹éî<ÙUUUEˆþ³³Spϰ˜4Ì ÇæíÌ ¦“¹¬¨4‰ïë)À—–Šª¢Z#+ôO@·†ƒPà"ßãü°J§Q Ï_щWàâ„=^ëPèv?ÿè÷7šÆÞ£ý|‰‡(|úx¼ÕÚ5áˆC:ìZ…êV½Õn :„= ªÏM²•²±½ÝB7N†Ö|²–e­$p¨¨!VâZ&ñ£bQ7Ö7ÓL<¾»¹»{N‚Ê·-»ZÛìžî¶ŸêZÃùë¿}ÿæÝ]Úlîî·vvŒ MÈ1yÎ3|`…¾âxþæzP”d£ZÎÍc²Z9KÛ“e^ ‹žNçRAÖ4Tq.+¬ÁÃ@‚©Â ZšîâÁ^¹tQóùt"¬ ’{;$¨Ö5Qà‹Å`8B(I‘kõš®W ÷Eÿ˜ŠŽíY¦ƒÞ„VÚ9é\œŸM'³8‰Gã?$rž=9霖Å0Ö'wSÓ²GãYœ Ý/=/ŽêÍÆ¯+ a¿ö¯`õööwÚ–9»è]õ¯)X2lû`oïºÎpô{2›@û«£Å¤‰iÝÏ—?¿ Ù,”!¼„ªBM-€Š4–žæb ’:'äDIFã—åbšÐ]-–¥G~Q¢S¾!]|×^.¹|IÕõ¢Vg LÏh4ʵjû•J¹X”ºçvÑÙ T’úP ºÌ8¶…Ì(ªÆóÃñæ†x$ŽLPœ$–k’„«`5ßÇ!£)ï—×,mŸem¾œ*j9S¤” UuEVÙ4ƒ€Àð?8:—ݦ( ;±g|ÇŽÓÜÚ4 i¢¦ê¦•…'`Ï/ÀS°á•XÁUÙT*6JëÒ\ÜÖ—ŒíØs¦o0·sþïÍ™#>{þ"#¬‚güÚ€$-è#YÁXÍÌ[g„¾†€T‹®çà ³,–yÂ’ ¹‹ `üh âÁw—Þõf«²(“Ä–U•’³¤'ßNgöEg³Ü\Ó)‹…tz[g/ÀøQ–ÜžÚý~¿3¼‡ #4›ÏE~ee墩k%ЋóIºr½v½^ÉãÄ»¹]ZÑJÂ*Mƒ°f6„8Ã@*2,×Y"†4FHMv<>joí~9¿|õúð÷å 2xüä)in˜µ5I‚ ‰©¬é$b RT ê- œMu_BüÎp¸÷ýÇdµö÷v@ øÃZö"ÂÀ÷ bÀŠü^F1Ä?’(õ§Wççö¼Ý6ÈÀ@E¡Q­zžìÔhµÛÛà>ﺃ%SgjfU+ºBXÎè’~=9 ‚YÉ £0Üí>|pøµ¿µ ééÓç£Ñ¨ÛÝpéu¿ßCX;;»êö€Ñp¸Ãåòo]€ìnë ‚U”s\{?>þp0~4Úo6›…BnÏ.'&LH`´@†wÍÂ0IJ¢%„ v{\0°ÉbêQ?©UA»Yø–QÓ o,+!E)Œ‰*$Ä4cH$ŠJ £Œ u6ûÇ œïr½Ixß]-c‰ãÌ£4Š’È´ÌõF‡ËÀ’ |ÔòÝÛ7åŠÙé´dÃBñ*.°o|ýäbéesá,Nžœ:”kœLð™ ¼ÂÁjÞ¡m;EQ‚]]QÊ D…¥"/HÙbá‚}­˜L~å‚ð_’®e·i Šzü'~Öy˜¸n„Ò”*ªº M%@bþ ±Fˆo@ý 6ݰ_€Ä†R(*BM©D¨Ò†ÖIÓ8O7ñ̘;ðךsÏ=gF×Gzþòôœ(! d£Á&,.ËzÌ—õgýèŠQêÚ½¾ìuÁETÊþhx)œ”ÂtIŬ$…Ó Ñ°Ù ™F³DOE= ̳x2Ëê Žâ˜üøJÞ¼ùè`º¦çG1lbWæì©ÄˆÈ&À‚O ßZíjµ"ˆâpn¾±²\ƒÏéQ[]Y‚cN"ƒ"á"˜**W>)•‘ŠT(æód#bèÚ+÷>5ª·*®c|eÌøE¸"Y†nØ.H/BIØí^ x¨:ý·DÐgPöx( «ºE­à™‹>À4Oá,7êw××j¿OuÏø"K?|ü\¾Yú[¯×eEÏÃËþ™m£ÕêR³õËpœ½/¯wÞn­Õ67ÖÀq¶@õ: [~ñÍtUÂÖ³Pçðèç>Pd¾X¤d>&˜± –mR:+x ¹®À„þ`3 "Lª$IýáÿËv0ÖD!ôxÂð´deJ˜›+(*ƒõŠ¥’ï#Ye¢ó³S6§*_/Tºðý»7[[÷¼EǶŒñtÄ]•ªƒ3i6›$a’Ž};ø®blåc*¤‡GÇðþb¹ÓµÂÊrUæ¹RW  3X$ý Thÿ9-y˜^$1Û1þ ÀÑû6 Daü;Ž/v\|Nš´QBA´*1P‰&XbbdeF!±0±[V„„@H)mÓ$m“¦ˆc;çÄ— vxæ/ðùÞ{ß÷ý¤;Âs”h!É 1u¨¦á9ˆv ¬0˜Üw`ƒ´™(`Œ(iYÍb*ÉÓ DÉqÜ©Ôw, ¶¿¼yûêwíëR• ‰‡}îµOÅŸþÑ~ÝÌj}ÆŠÅ\ζ#áþøÉw{k«7!fˆX’£¸ÞìD2†„×x?íÛ¹Šnå ª4ÚóÕeÐ]0¯(ôÒñijêÌwOŽ;Üñi’5YÈ.Oä89³'˜šÍäË¥•+­zýÖƒÛlý΋÷Û÷•ÂÕò"ÉaÛ‚"ñXC„X3¬'²‹…˜Ç#7 °aû¬å14æ¨Bë̓N;(•UódÙD‘ û˜Ñ±5)Òú§ ñ@ž”,U­TÇïŠggžˆÀGššFòD8r2™ãÑ÷†ÐRàý0X¹nWËȶMŸÄˆ @Øê6·^¾ÞܼŽG=”Q¬üÍÖ¾µ%Í×jß <™òî]Rfãs¶%ï§Žv›×××Ú–¡N½¾õü©©cjÓ¡? s9…è œª*›º ?íuæË”’Më®$îÍÆQ?…Q–äÏÎNR# î†c'éÀ(9ÁP˜–•g]×!¥¼ãöÒZ”ZÉú‘¤^¼r dà€h³4JŠ)çT gøßw]æÛV©fâ:nÆà@ߟ<ƒÜ±·×üŸ¦dBÉdjYà3­*@{ØdŽòpÔ=nMX€fzïPpŒ `véòùÆÆÆj§“.‰˜{t<ƒnf¡iå‚ቚ¥ŠŒþ Àѹì6 DaØöøZ'©rQ!¥­ZA%”ª"¤vÁЬx ^Ø€Ø .$(”KhÓ6M]“¦µ_bÇcÇœá ÆöÎÿý–Îp€§P9›îeÓ‡„¦À'qL2 žH‡…¢PDNÕT …¤ ¡ ¤ õ'¡šY=Xû{'½ßÛ[ÎÖ»7_ÖÖÖV1ªuËî÷‡]7t’T:8„&qKU²OÛï_½x¾²²ºµù`ïϯ×/ŸmÜî >WX7«"/eAüùÃÛ»w6¸l&Ao7 ú ARÙI43v,@ü ¡SÎ|œ!Å¡}ÚsÜ!ä—ÑYì»K××O‘a­Ñ#\^]}ØiŸÛûB)Ö¹”E‚”—H¹b†1¼Û˜®•=ßq¼¾ªV=Ïm7Y–¼¦i 0–㡘FC # úB7ÎÎõío–1L°t}м0$Qœš©#dHÀ½4¥†¢º3 $QžŸ«ƒsÚú‚%š«™]”<óÍV;ð¥Vv=‚fú÷G„vw7Í^Û´O±Ø‰£´tºL“²X8‡«ÓåÇÄ™KSgÎòòux?(í®1øûçPHÙ |ßë™EA#žçä¤ã"†È€ƒƒ˜ifxDP”nö•e0Ï´tß· E>Z¨/uZG<‘DôO’Îm7‰( Ã3{ÌyÔ[¨uŠÑx㾇‰Þ{ã…SŸ¡WMÔ˜LMÖÛÒƈôSæÐ¡@‡qm}€9­µ×·ÿÿbþͼ|ñœÿ˸Ðw§çþ¥ Æx0pÄú¡Qt!ÅDh Œc8ÉGù“È^!fåüÌn5¾ìW·w÷êî–ž<}–Ê$:ƒb1†ÓJeç}ùÃÖëŠiÞ*¿Û\[{Uûñµº÷íÑÃÇ#øwQº]Ê l ÁG£ÄS š­æÛ7wîÝ•4ŒÄ•ôòÒÒÂ|&ð¬í-§w<ö‡0àq,‹1Q`% »¬ÎèPIê$.¡ó¼lY–¦èœ¤z®o®¬’¿pÝn;©ˆFB*•Hðˆ9úõGÍ&g‹è ΆAI0GÂ…«X¥x4™Ò‚„m/ g #ƒ¹$ ¬ž\ŽÇhà–ï¹@šŒI$ð E1‰Ý­Ôíá°¸šgyVy6%DŒ®Ö$Qˆf¡mÛ°­!†û»Wù¼_«b5>™À\’R†‘ËåÉŸû¼V.ÌÀh Õ>mnÍ_[d´ŒûÝjÿl6®›ÅUsVæÀ±fÎˆŠÆXÍ‹íö!¸m¬âƒjd€‘ºÊ±@UxufyVÏ©Õ'­þI§ß9ì¿Â8~@×q&“áNSÑi× |h{DŽóžL`‡hØH>bx#¥¯¯oF;çÞp¬*I xäùž*Ë7K&Ær«Ùè÷OaÿqËõºXãT•Cˆ£ ](MVF¾ÇqTӨ䴯̜AÊêÛÿL5—ËÍ1 ?Ðî`Ì/º§=EÂý®{NkµïPFxŸÁÀñ(¦`IÅqÇ…LnzËÀ=…Ä ý€£3ÙmŠÂ°ÛuÛqì87tTÄ !Ýð EB‚kxˆ'QŠX V¢¢R:©¥éDÒ$ž’`ûÆŽùoÞÀwøÏùþ«s޹—/žƒ!ÿ ?è¹®¬ó´½+§D¢ݲ’¬ÖgmAqÄAQÊö–ˆ"Ì%禤=¸¹=€ËþøigmõáÆÆSd©Ãã½¹3î“‹ÓówoßÓÆ…aøæõ+6,/YØÝZÕXYYRTÅéuY+(Z8š:<½`ø)ݪ=7¿ºÚî:†iyí\ “FñU!«›ºÊå’hØ8øíÞ¹†6(‘ìêOó䬓TS*²lÀ©i%kszE•scP£œŸ ‘;œ»,‹6!Ã>¢ö> ÈaãÈíöä‚„0Ô)ªzÉÒai›­&Ò½÷/j^µD©Øq<»ZÔ40í0MR‡¢0Æúº­›“£³Y{&‰“¿­[°àίUäÝŸˆ žmnN:¨Úø @z¼$MFÛwíd”â¼ùIx\ƘF¶ uö’B»FDE`xÈöÖ7QÖÖéŒo×qœž§(¼ø@5£4}e=‚Ï_>T õÁòBëú2 =p‹}¯þøÑ“ß÷øœ˜—Ʋ"Y5ëß°ßé9>Vd×aØOÎvvvÁiK‹Ë“‰û&Ø3ÃÀOD âàD6—$¸S´4Øq!pw¶n›ÔR.é¡Y+ðÉñc B§ãt»®ÈËzÁè÷£N;˜®XLšs»<=Î.$!.å×í­£ÆþõÕy¹\®Õ*`˜ÐѱÍËs€JŸüãùÅ…rÅøÄP¬$æGqjUìý½_¾ÎT몚ŸTÚ±øBhÀõ|A*” þa‰NÈD2ðU]Ótƒ¶4\· <./ÿ€£«ùiÃíú½®-ƒuÛP„áØ¦h Š11*ÞÔ£?B"Ñþ5ÞŒôàÅÆÄƒw!Á ˆ&º(n FÇÖ¶õ»Ýê[{j{è¡}Ÿç}ž¾ïï÷bóÒO„­Þ¾i’4†” 1ßuPÒÇX/ñ —oH£¢1Ÿ¡}Š6-·]iu«M”è^¼pAøWo6î4ÇNƒy¹ÔâãŹëמ<š¿{ÿNbˆÍ^­üÉ …ɉ8µ-]à„1×ï#VÛ×––ÞÞº}ÅHÇÞ½ÿ@QŠàG½~©[ºf·ø(ÁÿoNb¢|”Úª®nÄEÉñƒµå›ä‡†#a5×#dt$%1K;ø¼ºŒ·Û²£k`-ß@r1„gê˜ <Ç Yàu06 I°ßöÚ“w :2$‰ZóÇ«Ýjp'J(AöLä’@ÊŽ@ÔòÃÙ$‰#É”0YÈŒµÍ2áDGËöÃæá`zÇpË?C²$-6záE3¸i–«3TØ‚ñmû{1Äáú—í©³S³³³™tzäDúGyK„™™óHàÖ÷ÁUæòã á›òógOA çNçK…ÃÑ»«õzåɽýN¢à:l»“¥ ˆ4e¹ï¢ŽÈuRn*‘ÒKG!~i‚]ÊfÖÖ¿–Š…D"¾F?Ò ÝÀ"IGÉßéuÚðlÁåþ€£kÙmˆ¢vÆoÇqœÆ©Kš¶T-¨mh% DwÖˆKV€Ä‚_á7XwC ÔMÅAQ…6mJ;Û“‡íÄ6Ç•,ïFš™{Ï=çH£{Éóg/pÚYÊ ”ŽòYãŒld.¬  'ö,u'Ž7€oDÞ›Ži2 £ ìõ˲L‚&(FqïÃû—¯ßI²¤ŠB‡ûŸ>·ìö›·¯.ì¦=è]´;‡‡úÎÃÕÕ…ŸG_i߆‡®X5Âä‚09o]º’ïî>* è“»·ï”4=gc΢º¡£nŽ|—çX¥A×£®cÃ@ò(¢"²Ã)œ¤ä‡ÈQêaÛ,ŸóÇ.n6ŠFa4䈫 ýIY×T‰•HÈ “"™æZ‚ü´4N€,De9ò9kNâ¹T"¸˜bÅœ',óåã7ê_¢JMÂX° ˆÂ¡(Ë+KKLÊä^ÀÃ3F» úç¸u|ÖJ‰Óõ]EU!j‘Ç´;í«.‚ ”b6ÄŒ1ža5-O}zpp€?ÐhüZ»¾¾X­ãÈëû£¡¯¨ia˜-˪XeǶQ}»­Îâµek¾¾¶®’¬Û3Ã’ÇOžnloƒ)öööÜ¿‡ðÍ™¬9$7áx={WËv»½ßYÞª×K†.)ª&4}@û)\N s&q: §À¤’õOŒ9Tö®*Î娽ӓCO6Ц$°êïÉï`êºRÐ…ªY¦£^ûò  zuàv²>ù‚V(ݼq+ ’­ÍÍ:õÆ­f³Z]ÍœIà"¾®Ûá‘X@DH<iÑ€›IÙp¹V“xkrÖ<Á·¼ºÖ<=ï9Ýêb Ìét°-LZÙ4Qla\UMëõ]ŸÆZ¾’ãøÿPpv½IƒQ/}]¡-¥°Žd¼Œ8Ýfpš¨‰&n»Ð[M4óF?‚Ñb¢ßÃÝ(—‹ÉŒÆda.:_ÆFsÀ /t¥”–ÒÖÓð<Ï9ÿÿç`wn­‹R† Wbãðlƒ å%ËúdlÃ-„ózÚ(âãÉ< Ð7±,‚#%h3mbc´1´Û¹rywÿ{>·\¹¶ôöÍ;gl4ZíâbùÕë—¶ž-¯®qqIw"á4yFÕå.˜Ò¿F}ìLöjµ_‡‡7ïî×¾‹¥À[##˜ø¶’¼0t½æÙ©ã¼ ›o‚˜#§ÝÚ³LE=™‚e¹ã"v€ùÙìeM‘Í?>â§D‘‰Çq:Š’¸”pfˆ)Žz `¦Þ#P—‰!$b“¨ lÝÐ ×®ÑWäž6Ä12Å †jýlñLºsÚã¢d¹pIòï··¯./ZC A0"Ì‹Liн ÏA¦áTR¹Q±]ïo½yÜ8//^âã † øª¢²,þ­ H±Õúy¯çض¬ªY)É,T«ªÕµýƒÍÍ|®”ÎHBBÀPúó—¯@µÖÇ–Ñí÷–ÊW8ˆ53±ãßG½nÿñÓ'@'ØÔ5uåÓNíö½ûb6ÇrlZ’®¯­D£«#äwpSsŠ"ÐÛ¶¦šõãpéÂBŽ#ŠsýpÌØäyH}:‚…ÿAFAfŽ! ÊqíÄ5 ‚|p¡tºg¥R>‘àÛîÎÎî‹ç[ÉTÁŒdŠœŸ‡®€ÊDí ^¢c¨#‹ŠsÙ”ÁQdÅwpEò‰äÊJ…§Nê'¦aƹ$ËóºyWJQ¸ÁêêM8#.}@_¡-eY ãHMédróCåÇÁálZ*ä ­fÐÑrð«Àw’³¼ Œ µàeÀ T6[Ùý/Gç²Û4…a{<žñ-Žã:iÜ$4-U„ ]±«à X#±aŠŠÊ¢+ž† $Ü$v°(EuÑE´ªV•Jš´IÓ\ß=æ˜ðh¤9ç?ß?ã9#l<¡çM’”eíoÂ0©±Âb1ðÃôá³ æ?£”©ºù¬AG¼ïy¬‰Q—U1°É§wjåÆÎÎ)'ÔÖ×ÖúãY/?^FÍ¢U®gÍîu;‘š·Ó¹aY³EkokáfýîêêÇ÷?–oÙ7´’m ` d ÒDB0DV’mOa)й³¿–Û•Z”ÄëîÈR”£Z9‰4¬˜s•¥¹rýêìlعôšIÚs³yœI†äÍB€â”d<]i#Êš@‹¾«¿}¹»·Û'|Ž€8`°CωÙ/?¡W)Ï`.Ýqu^/YÚÑáÉÎ÷¯ªŠfKyžï&óÙ-òF±&‘UF­Råõ«7  …]U`õ̼ah†À ᔥÎ4e]ƒgtK%!Ÿ›`‰<Ý|²¾±¹¼²‚$9§Ÿ··÷¶WïÝ?øsê)U•Ã㣠b*X*ýþùëËÖ·¦2jvÏeÝjµ§Ò|“iÈT®MàÌ‚JEÎOâ 0qV­Ð`0jeUнj:9WÚôº6¥"˜ÏFc‰!Ö_ê¦õÊÑe÷Êñ\YÂö95/ðciìLC§oæô4ND,Vж ¸Ï°,IY3Ä˪œŸ±ô‚å!ŸŠV© xâOÂéÀ’>:Žã‘ÿ“ @8NŽ#]õGÙÅÞ² ¦Xh¯7Q‹*0Z*kT’0c@Z»ÕlŸwïÜ^.–ŠÝÌVù¾3^ÌÞª,ÛÕjœ0`~ š H%j‚GlµZ£áøŸ;lÓP†m_Çvl'qië<¥*%”¨ª‚Ù)¯•ÂÈÀÔ™`(ˆ¥u„PQ%¤>x´¨)mž˜$MÛ×ÏÚæxó`ûʾçøÿ?]ßsÐòòcßËÄàöAäyŽÌû˰4/Ša@è:†˳m×áFt„±e;@çà<ÊŹ 1ðŒieêɳçÙqriéN’µÚK U%Wu¢üGþ©¥™ªªvOz®k¶›uŠæôž–Éœ)W«?÷ŽLmX®Ì@~Åq m¤ÃÝ*•ó’”7G‚Ýg8˜:Çwy„(V°\¤cÀ!Îö¦HP–O¦…ÔÔÌ´RPô‘ºùiÕó!²tĉäËÁ§.ÚµÌ~ûȱœRº}ÝØ}úæõ83¾pe^ÈD<›¤Ù¼Úâ›\ÇÑ–ghÚˆEtyöl£Õx»òráòE€]H¦d2ùLàÆ{Št@ž:2†ØÁ<ºwÿ.“ ÁëÇÍž) cóý»µµÕõí­Á@ýµÿ½V;˜”'"°îŽQèQRä|ÜnÑ©´¸õmóæµ[¦áù¼ÑiæsòÇëc¹r®ÚØ?xõbe÷ðøúÛ ˆºj§ÑnO‚IãtŠâ¢êÈ÷â¥|˜5^Ig³2A'½)Þæ`O•J]q#¡¤ØlýÍŠÇÍzçŸZTJQDš×ëÏñ‹Ñ„eYŽe>lïlŸzþâÕÅ\>Ë2 pð½~×;µÿÔ‡:€²W:Æÿ.â .x)24K'¤( / 4MÊ»ž×ïÆM}òr $^©"“¢Ç ±-®I 1€(4jo÷wyö†”‘@]›­f±T I_Ì3¦²2`aìûà)†C;{žœ›Ÿû/GWÖÓD…gmgíB—iK¡- ZHÄÄGCbLŒ&Fž4„¨&FÅ !‚@YÊÒ¡í´ÌÚÅé¬×3þ‚›ÌùηäÜ{†Ü~·…“<'P!Ḟ¥™Ša å¢ÈÊ—Ï_£×ÚùÉ‚º:Ž?û?‰rLS³‰52Ó,™“¢Ç­ƒ_?1”ª•/_?›yø÷ýÖæãU øÇšI‰9pŒIPütv<.)p”e~ûôqkë•”.„1ïÇÞïXŒ©-WLÝrìp¾¼XŠ˜)ŒÇ©^OV5 Î…$ŽJäyD±¶OÉwºÜ·lŸ¬®4K u„у±­Îxl¸ïJRi¾$îVîI)DøÔS óåØÅÅ¢3Š<}ñæy®˜ÌäP]ïô]JÑȲ G)ý^´0¸(á˜ŸËæÎZçà(šëòMO×1"¨.|%×›+ÍPG'Ghw÷Ë’²‡†Ò•oŒ‰ºT«TkµU!ÉLÆ::†¦"Ëòu¿×Z®/ã~pÝn5Vê™tG^Z(Äu®ûíóÛËö‰ÈPZW-fËû{GF/Ô›o·ß?yº)$â1 ŸŒÍT:EÒÄ\Š_Z,“4ÎrqÀ5°g£üh¤°qöòª åäENÊFÛìq¿jß·À =\}¤éFGîT«R©´È‰Î,èÉýœ”Ïd²³ÈÝàÐùŒ ëÍf.—ýsx  '¢yöEà€~‡à.55ÆÐ,KÃÞu»yfžo¦÷Æýéy+$£iàP¨†J‡È³mÀÕPQ|/´GS4Ê…²,áƒÖú@ÂÑ/´s†©ª÷úéÙÕbu)^à*FZâo3á¥8û ¯ªß¾Cô*Ëê†Ö¡¿D>PõÙÉi…L*2 õÉ5”Ð #VÌÇX¬iÝš¦5»ˆi„Iâ4ç.KYØlžCCŸ‘ë[’¼öû×Oµ¢!yK„Ì Y7 cý²Ó€¬PJÜÜîe„ìøz<7›Í²ª€;H…|²Kñ$DtÚ"ÏÞ\ý=<<H=þsÜnï(jƒnå{3KwT¯½½¥æ—£#9¿þpðèâòäêfˆ1#…Nûv¿ß‡·W«%M«kš¶{zw™Îˆ.fqâ¹ski;ŸÞ ö£Ðxné˜@ uõàÇ篇TnÝÙdSÜ›oq’ßÛTjÕ­»öœî–õIPR*Ås‚”%%ÀžÁ:‹ã4JRŽc†9K…B¥Và®›:ý£‘DgTa»Ý„pš“2¶mOL[VJ˜^§`[Ö,/Ñ›~„ŒH¢%ð/¢®OXðsiŽa´è=%Y:Z(к‘bäO2ÐYªªZ,•4º©‘Ë ô‰k5¹\:9=›Í§Ö|!& ›ìÜÿ£€0P"Ó<QV3b—=I ™d ߎ߼»÷ÁðdP–³~¹kÈ ,(ŽÁƒ¸Ûž @¶,3,*[w›Dß¼¹8ª¢ø0-ÀIêïØùúåT©®Á°¾ ßÚÙ¼·³%©½ÕÕµ£_Ç[7|íäôIJ©­g)gZÑÄNšM9NPhÃèÌràr€ãDÇ@@Eïh ÞÊëÆ?,kÔ꺡Í*Š…¡Pº£i™?þÇüe XøÝßÛk5Î[«‘È}Þm©]¹¼ÇEBõzË ƒcwô¦éiŒ¡¬XÏ‚ U5%Ejö«õM5“±ŠyAp‡ƒþ—íï¾'Z… J©eb…1ÏbF8ÿxèQyHœ,Îòû!Ûy¥$I©¨°i¶$ÏG2 Ǭ™,æ¼8ä% yЫgH3-ø¨†fDIúôÙÎó­×ï°,/¯LÏ™fAS)\„å,]65ŠºöÈwQ¾hº#×nwΞ[š,Aƒ¯=™šž5Ì”1¡—ED*•?î?Z{xïÎí»ËçˈóO.A¡³‰NIæ9¡Zý r…Ù  ÕÓ0”>Ié/_¬[¹l­v³¬ÍÍ +IÑ9êÂãer阓lZ“ÓÛŸvV¯_Z<973_д<è¤?vK¥ù¶ F¢bMÍs\šè Õ_‡Å™HRÚM°àCøcÄa$ÉÌ™ @+Û@§^à9Ç=à÷AªT•íÂÊŠÈòšþöÙ&Þ(I$¡±;¤)0?¶À <õæ³Àމ‡ªû$¥vmÀ ãf«å¹ðÇ®t&8Nßa#~PÀ|àÅz‹!Òï6êõÀw?~xwÌ%¤|fIVäjíG³ÝŠXRIBÕ @Ø0D@´À! þ¬{É>úºû \.¸8ø3q˜Í[Ú1›•Œl. ÃÁ˜%kAI BBŸÈ€ý«ìU`ü€¢sÙmˆÂ°=q:¶cÇvâÆI›¤¡ ,ÚB BHU¹HlX€`„-BPX€¸,¸hTµ…‚€E©*m’¦‰“ºNâÛØqÂñÌŸóÿß/yfb‹ K0:+éàp}ŽåŽÊrJL€&%¢ëý8!ÌØ SÐóè½<âÊ G³áææo£é¯<{~õÒ…å+³4¢¾¬ÿ]ž›9=­úV§¹_¸P0rÜè—ž!ôcÈÙ ó<ß r¶`^¿XQs|¾ jÚtéŒi„=ÁŽhŠŠ6Ñ÷õãŽÙ7¦¦‹j6-)“Z¶À³iD³ 6 < ˆç˜Ý67Æ$œÕëƒÇ )¥e˜=/@Æ$>ºC×ZÈg'&Vœ?ÿòÓÎÇJ%îSó ‹—´\c¨Ñ¡QöI`ž!÷lʳ#ÙK ¢’RFÔÀ쥩™–®ý\¹~ã,È8ßÖÿhýÙó‹—Ο9›¡DÂu½ìæ÷íÝì ï.-.ŵ±­­½e­­½Z¼°|÷åÛs§3édlf:×ç˜"KLN$žºuœ¾‹%“‰ýƒÝƒüïD|¬gºû9ß§*8å ˆn·~Â'ƒ((w,åÂ`š†®Ž@?và¡JC=:)ógV÷{û¯a((+Œ [HäýÇO×Çnò~etGp»‰!:ÑÖZŠÖ:- †Pu¥\/7[m‚b( —dÈ—T ˆb'ïuσťRÉÅ¿¦ÓñDüþ½™çO_L\½ýùÝüÝé)„¶Î[ ²@n?ËÑ!bÚŽÙÔ- `f#»¿—(úXÁqY–~­.‘º“ÝŸä!·-³C‚´¸Çrtf#=1y£¯TP­¢Í&Fƒ¹Ã-ÁÂ÷ÅsógŸdvÁÞgîŒ]»Büé¿M³QÅPp墪•Š’^ʬ¯|À0õT_,™Š­¯nÁ"„yS è_>…°AØüt…[°pÐ×¶ ÔFv3ùfÃIö'À‰ ÍRãü°´^ªÀ;c±6Ò‚rƒF{I±S"ÜÁÿWkj€ÖÔëfM{-KÃpLe ³ªƒÑ4,¤nÚJï`×Åá˹³ÜÜœñÕMÍã§›¨Ê)îá}¨Š¦ªJµÎq|8"®¬¬3läð(ïçéxëPª®þÝÞöùxÄFd©«¿oÒÏñq®PÊq:è'džz:cÑÿPtv½Iƒa†òÑB?hK;è …:·9ã‰;™‰3[L<ñÄÿà‘?AÆ_¡G:Ï<˜qñÔ—³85Û"Ó Ü€QÀ•òÑRhñî_xÞûyîûJß>oäÁý{Á7gŒCFf iÜ€ÞMK<ËÑ–uŠ$Šñ Õ4F"ØQÅÂ&^ðžãÀJiáÛ½X2ª¿îîõ"e"õfó­<3 +T²:Að!EXóßêÙþ÷ýéØ1ŒÓœ*ÿÙ_XžƒQ))Q䘶itmkkûƒªk4CBh~¯Š’hu»Ê¬÷ÈåJ>zñôì”öWQ¤Jµúñý§[k+¥ùy{DIñå»­çŸUÌRa¶”“y*dד†ë°*ˆ6Ò³lX:y¬ÝôÀ‡C§ö⪪¡¼¢$`ž{Þ$ê®$~¦D S©]dÂ'D’L¢ÝºèõGŽí4›ÍŽÙ¦3šì¡Õïý.Ûΰ ip¹p8ø™½^k^˜íx,zzz¢_Ê/_YÊf³‚Èç²95_Iƒ=ŽÊÕZYQ2Z!O3‚,¦VAú—Cã0KÒÃ/m@C­¶ŽG‰4U=9® 6))šà8™×0zRJaè4 CgF®[þUÒ ½º´À&“!Ÿø/Eç×Ú4†ñ&Íi“œ49iš6M×MÙÔjçp‚ÌO0ñRd‚wcwÞz#ègÝ…^Èñ¡(N‘á¬ëº­úg­msšæO³øæ#ääyŸ÷÷œóNüÎÝ[žçXÆŠb )¥z1¤ßs,z’Ï¥< Z‡L±òÌì4‘ˆžIø" *8ç!`'c>Z߸·û{oâ‚ç¡û ­-_½" Q öˆcb’ë³i 2ºúâù¦&ó‹K³^@Gnçøï^†Ÿ"±¤oÛ{µê§;!ƒJçæ¸d‚Q%XWèef³qT‹O&€E#kúˆžÒ®ã ôŒÌ„~‚;9$‹©èÚ²7TÀ¤ÕïH2ÑÔ,²tÆg¸`H¢^¾Þú^©Ô{‡¬"!Á°qŒ (  êMÓ@5ÑߪmûÝnHÝ < /DÛ¢ÀèÎè .N„Ÿ˜7x´ ’ŒÞ¥Ö›­wkk·=ÇmÈ ®×Eb"UI¦`šzNÓu |]ÄâŸý}g++מ>{23sˆ"%Éß¾îÔ½Û_.•ÊÕê!‘åâôX@œ ¡Þ––K¼ Xz^½¹zãúÜÖç£b6=¥°I>B†D`a„wžãˆ‚¨jiÁ«ß=i c>Ùiþ;8¨åòF§Õn4@«ƒaèîý‡mžgËåR«ÝL $‘Õ¾EsYß0•JuóÕÛ~oÄD §iMKaŒXÆ «5,J…¬!ä{–A°˜Š©;z>9mÙ´N¼häÌ<²+û¿.–/Ì/œ&~ŠOÍä‹ ]꫼DO†v—öš}¨´èvp2 ‡®çþÜÝMä „if//pˆs£q7…X ‘—Á#{Üî (hˆ—–çç4•Dg^Vÿ¿ÏOÓ`Ç»­ïÖ•–­í~ÙÄ% HTÀ„1‚zñFŽšx2êÅ«ñ`âU $^5†› QFȱC˜0WÖ­?Ùºþò©ÿ@›÷}Ÿçù~?ïÏÐýsÐ5î»L"u"{ò¨)+ºfè „ ä=†µ-ÿ¬‡¶kÖkÕrY86,×_Œ‰•ÃêÞâÂÒèÈÍ…Œ$ÕÒŸ¿X˜ž»:~gââd_>Ëg€´H@,äï[¦ã¸ç˜JSÝÛ=ägã1H¹nãòw:&ãPqLSóGˆ!“@8ž‡éþоä˜Íç—¹næòÔ¨Ù³´¶ðÀè…<æ$ÞbskS×´h™H$Μ$) ·c™¥íŸÎx^¸Vm D-/\ùüéÚõóóoƒv„’Ú„²ÐW臯7¤—¯^Ïܼ5p6§v0­åÍÜè÷aeuõëøØ`å· ÙúuÍhA—!Èrt6 Æzž…‡‚¥¢D7ueÚó­NƒÆã•ý}‚áá!¹yá“ÏšMÈ-—;µôöýã‡O„]yâÒh2 F?¨(²iÚ4óœ`:Ñ“NgêRZ–u0Ò†îTEàÉ–Ù) »ª"„1ÔÖÿùTܶL†£Dñ •b#ˆ5”ãµµï;Å_ªášC¤S1®' ££(ª Vb¿"ŠuH…‘ çq÷žK¼›å>JÆ òBcƒà‚N]’Žà˜_³{âñp$€…Lìpt~=MCQ¿Ýíÿ•®í lccC‡,1ÆèÐèhDüCbˆÆø¨ÁodD1YLÄ("’"0ÝÝîV·¶ôß<õ­Mï=çü~7÷œÒ>0²?²AֻÉ –¿f›L¤uŠŠ‡x î‰bˆÑ¡*“§&+È,ö„„ÌcúÞÒ2|²ŠÊÅb­¶ûbõñË7o_¿zÖn7X‰¥ÎAôþy”AÅhèXÄl_®ÌõߦIÒz è0®SEv0jìþÜ0¶?b—†­¨è¼Ñ8Ì!Ñv<…ÈfÁ:Tà³(§æ¨ô g”,Mc5DF½¡Ê*ŽïQ$÷Žö1¦`W¹¼¿«Iš¨Ä·šF#A§3…õõ­`­=ÏOéÅl®àGT?×Ðl¢\ÎøpÞ:Þ \«4}ãqR¯H« ʦŒ‰‘7ãV^†Eˆ˜§œ,z¾MEAùBÞõ£Ï_¾¯¬ÜZ[{~çî2 X¿çn˜ÌŒ»NbÕq-à!2è§ ¤×û?†?4šMm--Ý$ÄÙøPOíÁ¼ë„ïß­?\y´ùíë“§«ü¶¶ÌW*‹‹W@å1®ÃRQÔök)Kí:ÑLa 3hˆ£ûnŸuȧ*=B¿6w€*KJ¬²2p ðë_ÛÊOMªªœLî-,,°q7£dÛuë‡G„¹Ê%.dÍdrÙƒƒ#A4Mιqý*B6ÆÑjÏΖ$IjFVwÈq¼$HýN?>õœ=Šï/’®}z2¨ÿ©“N3Ÿ×#= † 53É x §RåY5flW«S…,>«ÛÍ–fÊó*äà(¡)Y!ŠÜd;­V“ãÄâÌt»Ù"}°<{‡·Æóq“*ÃŒÀè-â ú]ÏGº68¶iž7˜›Ut ÓÂ?8º–Þ¦ ìÄNb;±ÄŽIó Š* ¥ˆ¸ôÐ+ü…R$‚R)¿€.œ ~C9 (R/”’T­D[Ú$mJçåW¼v˜?°»öÎ~Íh_{‘w:îëHÕF½žV©4 MO_uzí‘¶DíõÚÇS”ïì´ÚÔ©aXr».ÒM …õ›s÷v¶·sÙÜ ?|¼²œúüÉ㼦j8áÌ_EÈ5brG±ä£0i{qœ¥áœ^'cèFnŽü|hóË×ïŵýÎüü"î¡go-DØãÆ:­3Ë0&.› IŽãnd¢bµêéÐ/ĉ¢*ÉdÚï Ô š 2¡`ª×Ç ö„rÑDΘÇð Q¤…—¯^w›k׳ñ„Ä‹|0Ä K룢S; u2™lD”a÷aÀÒР{,„c”Óæ !SƒÝ„‹ccËÂòçÁîÆçâÉÉá ß©` †¤›-{kkçþƒ%§FHé;ÉÛ†Oø7LµQ¯ŸTAÿDÅÄŸæA¸Mû/¼°w [Z-9OË]umu•‰—…XÖDæú»ªfÞ½³0•JkC™å||8† ÏþÞïÌåt<•ÊN1†eRéÏ4ë5E~øììL,%ÙìãF±'Ë~.TOÓþ1š”K¥Ûss,ËÚc°Ù0ô2d9VâyÒ)g»]¹Z­ÎÌÜô…°¨7Î?m~{–_YZZL%£ª1H¥4ITŽŽhÚwÞlW~Ù¦¹·»ûþí›r©Ü:mw;ÅB¢¼ñ˜”¼”Ï`Y(Äó/¿‘Öï€öz‰ˆ(Lð°¦[¹Ü)*ªšâ¦p4VÁÎY¦›uêäÅñÄ’aÌÿ3;™ÝÐ%)¦«z©¼gZúÑÁ¡e{Âa Ü¥3XnƒCŒ„ØŽ …h:ðOŽÎd·i( öoìxHì¸i38˜š1I€Š„ذ`ƒX´€x6P ©ê Ä; „ö-H”.ÒM¡¥¡-š6vb»¶c;ŽsÜý•îâÿÿìsÿ‹–ž>DA8í{˜Ý÷7Ìe¥´(¢rl¼=‹kº¡vUÛö ù)8Çî I‘‰~ú‘‡­šáÖ{íÒæ¾(HoÞ¾{öüÉòòj0$Ôîéuï†ä‰ ÄP4²\Í…¶é^d’(Œíï5¸(Y 5[Ý3*·]Ú¹ÿà¡áh“ùt†ce¥ž›.DMˆQBHÅHÆrÝc¥‹;ntq8ô±a4Œ¾oþ¬îêFSrOËŒg9’¦B$rb€Xè»¶£#ÛõœŸ>¿ÿøeqñŸö™Dj²p&F£cS¤ªAGùû«æ9C8›(Ó À`Ëkãù"i2{…õE!Ql(Ïr z¿(rÓ“RèYF¯+Ð$Э…{«++[[› w,Ó€ê·LÄZv:H3wq¾+÷ÀîggËåŠíè€+®êš!å¦ú޵¾öµZùýòõ Êêèpg{÷öÍ;vßeiáøH!Q¼VÝö]”æÏ®¯UþÕ;cã9)ãiÌVívãàÒüPHÍ0sRî ñ§×“Á¿çŠÀâàëõöÁÞþµ«W¤BEϱ šÍ¦ÜQ¢4ôT'0EV@‡3ù]‹æbD©´5W<¿´ø˜åâÃz«US\VÊ0”/¦â­ön¥ú]ÕZÞHïäryýÇÆF­ö­0Ã_¿qYL Y)x­©:ŽpÏt:JWS†—a8-¹#ð8PŠaô)ŠÒUs|LäYx ª?=&‚#Êçó$I9D©|áx=‚Ä’<àßȉ^°Æ%Iâ¼aº° ª B&䟛™HrÅ‚VLÓü/GçÒÓD†áÎýLÛétJ;t„–4‰$ ÀB®ÝH£QC4lÆè/Э t£1&„…‰,Œ–j´¤A„v˜¶ÓÛ\:Ðæâwü“L&ßy¿÷Éä¼/³±±8Ëó‰áŒ@@Z¶Óª m'µ£¸÷<Ïl™ ¦Š’ã&\H7Mû=PæÆ’¥Å[/ž¿ÔëÞý[Û›—ôì¢ÑxäÀÔ(0 +,#PH€…žˆE´?&E•¹TÇÓ4gvÛöE{j* s…mcˆO›ƒ/+ËÓžþ#3=Ë ¢VœžŸŸ6ôRùª(JVwàƒyÄ^2 œ&àË 0-$/ÀµE)+¦Ó¤<Ù4 ã¤ZC3!)!‹ÂÈOŠ0ß@Û(ÆïíÖ:=¿¡ÿªÜ¹],•,«Ç!?çme)5•ŸµúŽ^o¹ɽ!©Â’Œýа:=Ï_!e”DJù¹¦Î0tɲ,+'å8¢ü1ŠùˆÕÓŽEûvv÷öçççŠäÇYñHž`9xŠæ“ñô×oЬ„AdvLÏe”4˃·þüéãÓgO>ª,,]K{ÖÒÁÌV*ë…B±zxüjçýÖæã7;ïÎôîdn®Óö~þ>þÓè¾~{°¸Pâ(–Ää:°ËÖÐQTõ" šÍ¿“ªZ.—):1€¸^×ój~ùÆuÇv,Û†‘jµ[ð&ð> 5hÙrasª »†ã)l¤ñ½z¸º¼Êqð=ûÀ”…¢f-).Lfùz½ÖëëÚ• p¦aàÌÌä×ÖVîÞ»©„Ùò ³›ÏiNßeH_Ëÿ¢œ1Tc)ÄYŠŠ€?s-—U耡ÊÈÒ“R쌳&œÒK|É#¶V»cú‘éº}ì0ê'ªª†x‘&ñ›2W»kÒ4–S¬’ çÑCšJ¢Pt.½MA_?ׯĎí$>hK¡-!„àB‚·Áñ‘¸qŽ+Ä $¨HT µ¨-M•<ØuÇo›ñg˜Ùÿüþ³;;ÔËW›Cöûa8#eh–=ð§“`Å~“ÆÑÅÕ9Ç'»»iZ G§5ô;ÿgוêòûwo^Ø’çkbQd Rìgù®["Ìc7'ö8s˲À¤„ÀP h>I!–@Éòˆ “ž=âEigçg£ßªÍ¡mÞ¸yK×µ³P9>θ?GíÁ(Hýˆˆ| íü w”PqÌD>™$,Q§¢\È›=‰Ú¤FÅÚëZ"RV C”(š~uíòóûû»Ÿž>y°°T˜Ç4›äÌ W„3™M«|Èüâ¹…%Ã-צÈU„¬ ÍÇÆJE­9}ÐV:¿É¥tÛ¾k—+ ÏQC“(+T^¤¯_{ôqë-Ëj›/¤‹hOâòYSˆAo’ú©eöiÆÓtz{{[V¥’Âg(„(7ÚŸ¿|}üðÙiä˜Îàoý¨guS*\¾0ÛhïÂVÛ2 ¬WðÁþ·©ß(•EÛ±t5²Q¯‹¼4ñâ8¥8±8c@EÌ×uæ›oÁÀ$qUU‡ƒÓpÞ½sÏl8¶öÐ7ÝñXÕuY)ŽPYàŠŠ¬`—d¨Ýìö~ÿÚ%·²²æ8“¾Îî¨à:9©ZÛùþƒÌüK«ç³r¹"ºÓ&è8`´²2£ë?weý6ÐA·ÓÐt4"=¹$éªBÑ Ø3Dxàí\HSÒvN-à‚ÄuS'ÌFiñŽ\ÏEÒôR§ß.H|¥¬H"³D.²€@˜¤ÆPpOÇž×ÛMË2:chÅ‚è•à¥y£ð¿,]OÓ`ÇûÞ>íºµkKÇ6%"((|ùÆÈAÂ=ßÀÏà…zELŒÞø-¼–Ę(Aa„+MK`°v뺶{ëžÖó?AÓóœóœÿ¯9=vccêà×AíªÙfi¨Ý »Lf¸q'pD‰/–m•,SbŒËv±× úQ ddL²¢éåòöö[-¼yýâå«÷Ëwn'ãD׌a ðуÔHè$ Q-]‹û£ÁpÀ²Ò0Æ)M!„°3ŠÃ°Û9=;Ÿ´ìÝo_ =³¹¹¾ûåÓÂâƃ[ýØYAaEÑo·!­šJÉöFpN’Æ,ÆœãÝ.6s–ijÝn‹…òckÂ6ÍÒy£ÁÏ ¼”ßõ y4/(£®>[uš—WÎ…n˜ Ù%È‚²#Ó0‚ÍB=ªêµÿGJÓ ÄAY• A$Œšò™ÃãZDIû¾wP¼i+ ¥Ilù¨çKHà€Œ1å(±Ð­”æ[-‘c“µçk½~ÉâRÔ ŸxnZ¶ç]J ý`eqv~Q’D2zé¶ìíx÷ñé“õÙ¹™>„"Œ {TÊSÕJ0–JÈM|o©0}k"_N–Ź»7—Ïÿ=;ÚÚZ‡LÕˆu}n¦Z­Vnðœ@Œ£’DC–¡êguË0îï†ïá£åÐkÕ~•jºí‘¢(#Ÿ¿v°Žsù,REYüÀ¯í|Þq\§2=kZFÓuñ8Œ)Zù©©R¹TrZç®SG  ”F>1yÁ¢çöˆjeFó÷Wp ²ø'PT) 9 EªXvN ž8Œ‡¼ˆ ŒO§[mŸì  ©F£¡äCö4¯[8PüpaQÉr€ü]'æ,³êƒaY RÌŒcêääO0ð|îÿž*žì=­Ÿ¶]÷Ÿ]ËnÓ@õs<‰ñ#vܦ4•ÒB…Ha ÖýÔ+¾±¨++þ€±â±)[Ú¢4´U›Ð¼œ8IýšÄv¸FòÂi4öÜ3sΑfîewvž²ŽAŸ ¾~Öx³ûj{ûÉò²yuÕ…ÕNÈÄzST“sŽhÁ¶WTÅŒÓiß­Y¦QáËo¿Žz»/_úá×Ïß?ª&džRL»})X/Z„,é.O‡ø2šàDa–‚Wt©”xÞ°Q¿X²`×<®ÜP}ÿvwëá=/Å<Â’سŠ„ñŒ¢êQ0 "‚xvˆ LœwÙM S¶ ßÓâ@Ë^P4cìGÇÓ‰1³öâQ‰ð(¥¨€ÒR5‰S;qb;ñóÚæÜ‰X¶ï9g¯mén“õú}µ;:?sY‹ïw¿Ü¾³zíJ™¢"ß7Q`QqHư€›$ÇËWs"N±q¢-Í66·ÝÇžl>¼÷òÅë»k5:wOJ…œ˜edYŠ@›y¬u<áļ¢Ò®Ÿœvµýƒƒ9ÀåªÚê7o¬|x÷v¶¬¬®­l¿yU­.äÎMƒ@Ñ´ÀC1¹!LnjÇYÆ¢T'!ßGŽ$å¹@‚ðéZëô ±ià­õ†§jŸÏO„®îØ&‘DÐÐ,ÍC5Ó,ßîôfKÓE¥ôëçÚÒ2L6“QY&üØÇv‡ ! ãß´m8r‚˜&èÁØWº6ÐXR$¾'¢y¦ª5ÄÙ^œÓÅ„ŒDð%Rò-Ñ =Ó”éÅ$áJåUåy$ ¼ceW—»o^=Lúº*¢BÜÞÚ’Äå'\Ì(5%'%É\Í1÷óY¶¤­… ¸Îo¼Uš‘‰xŽI I®iª,K9C;žŸQlSÝHWp݆`blé;žçù4Wlm¶A. n¥'©e›QDª«\ùá[8˨%°obáxfb±zM“TYl žÅÁ£\-)õ:÷Rƒ°¦XÆñØ7ƒEÑ€ØR%ÓñÝÑñ‡$ŽÒ8Íâ xEÑ“»ÑååÅv¯N¦ŽKÖʼnùìììää3Ʀ®77ÚºÈË Ó»ît:=ÿ}~xp8 ¿~ùÞëi;»[‚TtCl>wƒíô¶‹\àéŠ,Û2ÑÙ\ß÷VU(–³<däY4èßøn˜@–ÅÛ}@RPžãrˆ#íð<Š",v"øã_¥V%RÅEdhFÖ¯àU–ëÃ$iÐÒÛ4ÅŒ‰ï'rUñãÔq1h`²ßškâ's>Ÿ…Õ¶*ÉeÀÜ2±„©7Užá2‹“¤*‘åyš¥.Ç|I0Œ±ïz¢X~²æ^€~c8  G¬AàŸ}ªÝµgŸã4]><ŒáN„°»øó·û²[¤áD¼^·k›Ö‚¸ùAV4ÿ Àѹµ6q|/gï—6»I6MIHÝ5š‚ ¾‹¨ è'ð]ü⃾õ;¿ ø`ÁBAl©Å VâÚHmš´¹l6Ùìf“ÝlÖ9²_àœ™33¿?ÌÎÐ7oߘSÓÝý½wo7‘LsúårÁé´Z'ßË¥<“Ìêµo9-»”+p,í \‡-Î)Õ¬^{¶¾ÞiW¬çOŸ|Ü{ýêš®/plrÜøƒ¨‚5Üõ% º.ÕÇáŒ@©3‡IJç$™ƒ\$à1ã”,+;^¾zýøÑÃ(,ñigËÈ,©‚*Ç4 Æcx{4ˆH”Ž„Ù bx$JŒ¬ÈxQs­iÚ¤^ Cx[ÎÀ5Œ¢À/´»} -£¥”E¸]8rÁʪ ª‹Èg D‘+«åzýhLNIv„ðÚÀ˜ˆðï*q‚»y¥¯»Ÿ-kMËfâù„'ÉÉÓÔažÇ#¦uÊÞ€yP4¨˜:x›9ÇéfWWËpY»o7›-EºÝón…ó¹eÛ¶)(%³¤b]ÙÞÞ²¬ªišÉgçÍv§IÑâÅrùÁý{o67Ï[g•jŲÌËŒǬ\°ÝN«ÝfŒâ/ûµ[wîÏû¿ÒÐ_”ÐZÕäªÙ8”%µVûús-žþu¦ž€hMTš$@~@NDßî÷¦cÒóÂããf*•)J…â ω½^ÿàç=ji#¡:XI–$üû ¸Š•}?t½@U`†Å]ÆÑ$jœü‚`*æ.‡!ÍÌó†–ÄÀŠò"–ª Y)•Rý1þPÌŽý‰çº@¡‘8é\T /1à ¦xh"@¯I Þ”1p»¢*ä—‹ T'aH$d»orvl·T*z#¯þû(›ÉâR$íAI'Épt%½MQ8ã=±Çž8IÝ&6]¨=@‹Ä‰3T‰W8òÃ8qáÂ…;‚–ÐTtIÝVu¼Äc'^â…g®#Y#½å[¬™yì³çhhù±ýøÉÞýûÃaEªÊ‰|N4ôŒ3/wןž;öð¶Jú2|ùúÍ´]“ÚOw½zù*euÐ+j) ¦,‹¦¾G%LZP¿¨H(µHkE& ä­@YÖÎÎ@²¶®‘Fãz<ùñûüí»×¨˜c ˆÈÑbèUÒ@’úi˜5VW‚$ªžieÒ ˆ“VŒeE‘fñLdv¢© 0(ò–câZ¯ÀE\ËÒZßèàÓZ<*ÙdQ焦JfQðçð眆£áÑ› .U /é-V„úç‹´¸¼¸‚½$IB¦e( ¦i*tzÝ(pÒ¹‹ëB]bô&Š .Û³<¶D¦9A<0\Må—ê<¶ ”j^Xw6Â`^;Ee’.€R ëvvîyn( jàårSV䯇÷÷ßìC¶8 "ÛïuNŽíh;Ž;¸½º¹¹í;t}uÀ€Œ˜qñÛ»»Z«ÒâÓçïRÍè¶7·în% P¢H!øÿ³!8Å¡?®Î_¯õ×~ 5ÅÐõeEh BâÒdáz¶ÑƒÀâ©ç‚ÏÆÚðS‚d8o¥ÔóíÑè”åXkTÜ^ä„jln>OqYrDë\_Ù§MñÛ ‰$”7¦«7¸Ýo7DE³(+ÁÂ×Y^¶;ºªcJ'œ/"Ï4«i:y1›X7Ýþ Ë2 2, +²ê”³¦A0ÛÝŽ‚Uèxg:ÞN“\–0xô2)yËÓ`ÖÔH'`kC?°\'ÏÓpt¶=MCQ¿[×víÚ®Û€Á&  F Æ¡¾Ð/à'“!†ÄćÄÄFãDÐ…È l°§n]·u]·µ×syßí='çüþ͹ÿC­¬.'Réµ;hJ9-¶Ž‹­ÀÞ˜}šÁ™ì¬Ãœ¨ ޤ¦’Q]sÈ]5•N𢈻ÒS‘Ãÿ«ueà#þü-ùýìŒñ¯ü‘i÷oæ¦GAF®"A©Â…½o¹…[¬&¨3ÓB2ÙG 1UEæ%FˆVi–‹**LjØ’Á¶S—ÉÏ ¡P«Õ†º¥ˆêx„«C«Û±¥sv"æ×3™é­¼È¯nl^–ËÞ½ÍÌå—§ghIÈ?6ÌzžïÎÐŒS¡ø%5]´NwC3„ú¾ã‚^¢)L÷{n>Ÿy.ÏÁ¹ÑD «4ñmŽN%I¾»± {~Q¶Ú¦¦«f£qU¾ÅèÙiÉs‡AZXÌnï¼|ôð €ÓIñ˜ìÚàÃ_|^Z\ß~¾»´¼X©Ö¡3©øïƒÃ±?Š+ºn¨ŒQbÚþAÁ2ýÛ¹•û÷Ö1…€d€ˆ ±-Z,Um]q%eÄ÷¿|j[Mà9Û®çæçE.B Ä·±Sd7 u4j #ŽÌ)k 1êòžÛ99+iép€¢ ×yry2¸ª^>eÙÎÀ‘FA:®­­/ÍÏYVÅjš²4™L¤!š¦Hë^ïàIMNq,mÙ­ËJ‰#æeŒ¦‹qCîv›¦mê$)ŽæËõ²¡ë40#âø\DZÍ=ÂíöF³!̾6›¶®Åz=ÓvɼÙxèef2d¢¹^}ÿúÍ÷½Ÿv·ù_ŠÎl·i  c=¶ãlv\œ4 ¡„Ò¤ o<ñ@Õà‘ŸBTâñ Q „X¤ª*-‚¶%&KëlÞ·‰¹þ…™¹÷žs5s‡³ÝðVJ†ÃùÇ¿ÍéªÓî-oŒ£³>øg£¹KÓ\»Ûƒh.ÕêÚùüWB朘³Gó·ï.-öé³'íýßàŒá#Ë5â@à}‹AQÁ A×ÜAÈ ê¦½ôü™+'aYΓº­ÔØR,d sªm7öî¶Ô¢tr4àèüžªd{¬qco`D–K p™gc`Úy¿V) '¾—$ ŒÖó-ð8ÉMñh<ªW70&•Š»Ë`sêÚºšÃ¼š“8vÜÙXÓÖ@¦·í®7·åª¾Öé¾9xÙyìÜÙXg’ÕÌ1ʹ0³(ÉæzŨH§çåbNÑ Ì(áÄØãiÌCج؅¦¥r ”bÀ£#CH³› _ÖÊOÅ”/1ì<›Wp… Y³Z ÜiÂ:WFÿÕëO/ž¼?<üþõ‹Ë%×Sÿô+¡Òêgbųó á\¼‰x/1-Qv¤Ô­™W>¡D«ñ6ꯎPáÍÏ“‰ƒÛîÖ‹[:J²í›Íž(XqY“åìw&ÓÍ®*‚$4îu{¶åKnY²Ö ‘¢(êÿùûåó·ýý=Š‚™`q 3å|¥…©ã…“@M T‹²VM×ì´(õALN. ÓVëíûŠHÓñâb&—“ño]!EôxÔOÅùˆ…¤È°4¾Á°Žca³×?19vB®V㠞₦¬ t±Ÿ-B!Èu¯Ãȇ²ù?ûûÞô͸”~¶Ö2t Ât½¾¹:>8â©ÎVŽxÿánê5uêa./¯À§ôõÛÎF{gåiëÓÆÇç«kó…³óÞŸ‹ËÇ‹s‡‡Ýïí­îQov~±ZinouOºæj«%Wä²\’ÄB¯ßŽúÙ:´=ÛsšÍKKÍNg“O (ŽSÕ†™Ft„xQ.— ^´T2‘³ñníØn±X‚†ðy½½·w—еZMÊ$±¯0<¢àëòïµ9±cÍ÷A ¸¶¡{®í˜“ÝÎ/CÓ!E3e9p=¥,WÀ NR ÕxÁÛ(‚·mà Û½ Tš ýüN'È M”_–+¨Ç5Òx·7å{ÓáXhZ19<á…$¢`nÚðVQÊ ‹—ú‘ç†@»‡ýÁéÙ¹ RCŸ(jEQrÿàèjz›¢`v;þŠ'Žûh•¦­H!Á$ ·âÊ/C.(H ¢œ8´)%´¥¤i×Ië$Ží5o{_Ù–×ï½íx†Y]}бâ¹Ñ|¥êúN°ËÁn¸+++“z…ed*2ʤ;]Ã=íOÏÜxöbãùóo!zóúe«ÕÚû{RPˆïú"T}.*sä¡5eT(&#ަÊ|œÞ¥ñ<=@ÃA*¥X.åáÑÑ! Ô‰a,HCoþúéCyJÕ”ÂÀéÿØü¼Ð¨ó¢$䋘ã9!t ¸?|Í)ŠTf3< ÂÁ@Y;¶ü( BŽy†Ë b1¯†#j`äp½s‘¼"ÃÖʊ⸞qÒ%ha±Ò\Àñú»÷ •*”c†eÒÔ®€ñ©°w)Y–ŰˆÅ¬š/0T#RÑ0f$V€åˆÊ¡³¾ ­ §¨%]7Œn©8ã»A{ÿ4ÑÍ»·Êå‰`4´Ì.'¤³rÀÀaÇkk¯êËõkÆÜÕŠ ìÕ÷%IYûÑóGíƒ??1ÌÎÃûÚ‡&FøÞÛ(!;ÍýFýzû /g5EÑ7¾ü’dM×ôRiòûfS+”´bž\”EE+ÕéœÊw;®37;ëùÞôÌ”À Q|1”/­5Ë@Ÿšœ˜ [ »ãRŽl7ŸšõZ­\¾"𢮀äaЬ9³ú=ÛQUËà0€ŽqAÝú“¤wþÏàØIç³òRµº8?¯Ê9x‹ÃG"Œd„¤˜À]€­ #†i±$>iÛ=;">€%š×” Ë´ ›F3îDI!$µÛjw×4šT`–Ð?D!nÑP›1UMÃöyá ·š;ž±´\ÃŒ²µ½÷_Ž®æµi0Œ¿é›¼M›.5mÖti»ÚVætàÅ 7ÿ/¢xOâÑ?@Oï‚xQ<émàYD"”Í9¶i»µicÓ$ÍçÛ7ñ‰¹BHòäù}$¼Ïw\©ˆÛ¤ÄƃÅdhþÜ;Ê#vïþ°ê¹Df,ZX£y–eógÔ¯Þ{Éú»o[ºHøàùë—?¬$f 8*A[`ƒ*Ùr=Yæ#°fÓlš'M¥<ð—9ó½ NSȼt65AªÙ·6Ûa'àë¥Bº½}ñ|WsÆÃþþ¡a éÿq@£ 3Û†s(ñÙÍ ‡GºÞ”ËU†ÑÁ¯½eÞ¤Ô6'†¹¤8KHoÑÐÍfD²Èù;c§§o¹Ø±=š®Qæg¾kÏçWkú¹öÙÙØ9¤¬( †¡´Yá %®ë†a’¶Fà}R"k] ÏJÀh AçÔMcÐ<¸¦®M&£v«GDìH%àÆ„!¥RNÓaMU¡äR),+–c®ˆÂl8ü}28îv{.m0Å&‹„›×oôûwvîܾ«Ýª÷w”W4Û%¹´¦5_£]½v%=cdõ6S­¦¯7›~Œ9ïí?{ú†* z£Ñévç–µ¿{ùÑj¥.pù X0–ÚV I)s†rþ’RcôE©`LÍ…#Ã\Ó«u°ô*èØpîÌ¥BF|ûÁ™{rµÜîuC{Ö¦ˆP(„"öíëwpÏ(åMó4òãl‡”õüe§sùŸËNÛ@†ÇÛ‰¯‰ƒ7)@‰ -ìºë®‹Š-ê UêKT•ú ¼ Ë´ÔV¨\D…(…’„$¦vÇ8¾Äãôx;Ë™s¾ùæüsX^VD¦9<99¾ºúýnëíËÕµJynйÍhzä[‚öîÎŒëîÅiôíà`w·Ùº½„ø@ôÃÇorì¨Ä dš9°ƒ:Ñtà¤Uä|@D(Ÿ“´CyQbØ6«¦$£È‹i ˹ì¸?8<ÜÊT­ªÿ½¾Y|V ‘¨~ÿ2L(Ã4j¹J! -ky¬´»NGŠ¢1lp~v®ëõi˜Y&š9 Èt r¨óýë©mkõÕåFj §iÍžÕUK’?"“‡yµøoxQ&}‡O‹¨½½½/Ÿ?MÜG‰/ ŒŠÎË(x(ù¼’öÜòØ`@[:)Ôʤ¿Z@HG¾—Àn«*Ÿ!hj†%IgSÐ…²"®­¿à%޲ǀþ( =c¥ÑýÄ3o2ˆÆ–ãØ.%[#ÃN‘JÚSŠ&NTÒ—‹Ñ û½É¨š!ØÚnJ^I‡Œ$È÷§Tj¶kÕ—jƒaYoº¾¾:_žµº?ŽŽ›µÊëÍ͵ÿptnOMCAîÉåääÒ¤i!R´€‚€ð£Œ £ò¢0>ð7êŒ2cÇW_y©:ãŒ\†1UZE ¦·$-iÓÓ\ÜÃyÏmw²ûmödüÆ“u#»|ttüej:{wÆ´@©^ΔÛõ?µÊWEñ*?÷úgéô£=»´½þòùÆ}Cí›r@¸ë$pƒ® Qƒ5<JdA’Ä^çºÓðä´ŒÄ>Eq ï<—b{ïPÃq)G€?à ^N¡aÐeûcß0UŒ$̉|7£¥…ÙÅe¡Ë«FÙ>nµ\Ö²ñÈÔ£aŠGøñÓM@‘Ë‹+HèSw¦ü>xšËh DîaD‰B²fŽÉÇÖ«J:?V]ûLÞKVUžõf¸öU!YÑ2 `f”*•>íl¾x¦§e·N ÙLð›ÅF0 B¾2˜øq‡k„d5$ ps2_¸mA ™Ê%SZˆÙDÝžU^‚Ý–S±OÛîàÕÎ6¤…>áòõŒ>–ËI¡¨cEIÈTG™¾jáû7Û.Ÿlm½ à8ôpmícñ!„A³Úåû‡¥…ù[@#¦•{óvwqif¢ g ibbòÞÜôiùla)ïtë:! }(¾s=G B×IÎ/šp›Çž×bbŸÌ4MUñÍV( ¸VÛuày­q+Œ(°¢&ë:¤Z+geÇ£˜™Ê‚4Ä~Á¢C,bCÏ&l> AX%ªH$Uc%Põôï¿óйa¦9QüU­ÒQWÙ}_ÄDãx±zRE‰cBYï6ÝfÆTæf­Ëó`WÖê8¯çG⑦Ùf³sv^Ï3鈨[Àp4Ÿ£ñ¦i`Úž¥gB1pµÏ÷Ÿ>Úzùê…ȇ±ØtR.ªE§•Ífñ EŽåŽ@m³Ù< „ã@[ á2ÓÖ/>As·$‰§A¬ÿíÒ°Ý©'Âës…òµ’Ùó€5+Ų525µÒïu8ÁÐwaq¹Z]¢̯£“Óã³ÓãóúïÖÊÚÆ½¥û{;ïp_X¸ ‹X & ê»é„Ž7éô†F¨å ÐÁ‡Oï9LUÕk“(,–4ÇN¿38'‰E’e ÝÈÊ H3ŒTó¼–fŠÇJ›°,ÓwÞX|$C'|B’ŒíCeŠÓë>Ñ4Œ±´{ ‘` C1/¶.š,bÀø!¡XQªÕ\+Êìòú /–„yEÇ̫ΘΠDIèÌÕÛþéI bµPP·ßîž7Ú@®ÀÖµúÙܼvçöìÁÁ÷/û‡ÓIèMzÕycÅo‡?mkâvuñ&9)*þ÷uÿpëñb„ŒN£Ùl€&º¶»¹±éOcIŒž®–åµõÕìÿ‡"é7M¯…Žç@”¹¶ [ÜXþÇQ]‘ ÍiÏÚ­N·3DlÚ^‡Å‰'é™1…0ŒDˆ‹§‰ç8ý9ƒø #̈ â¹æeÝJO¸‚ʬ¶³»÷fûõ“gÏÿ4[=9Aêö¯,ÓÆ Ûƒ˜YÄÀ»4핺xGfP$(Å 1«–J%Óò]7D¦H(-<†“nú‡Xè§ïµÅyY–r¹ËöE…†~‰E,£‚ƒeç¥|×èêíÖ?8º’ݦ¡(ê§±“8“3–¦Ò&eRMZ¨ÔJ,vtOYWBHˆ RY#v¬ø™ªb-jB[”B9iâ:ƒçØŽØÜ×/°ß}÷œ{ýÞ=äöËíÊÝ* ûA¢l*‰ÇüôÔ`ÐæZgAŠ!ö¬vR(>~ýéó³§OÞÜñ³^WítÎÛšb‘Aš Tp°[ÁØé ¦DQÁ6X4ƒHÑŒ‹ÐÐÆ·§¾ž‰zÜPdè ¢Ìå'Ê ÒlÅò–ÎÌ俀A™ #‰"ßæ@MlO1LÊO±‰t"žXª¬­¬®¬ñzš¨ú~-?}¥Z‘ \Z¦¦©>DX¦OWmh*ƒÐĆö›ˆEØp˜­íþº¿¶†jµ:¼ P5Èž¶Ð©.¯®»Ùh4øN{sóùQí{(ÅÇn‡F:ÆÿÅ\7™ÂB=G8.CSPÊ=ÛA°BÐÐŽ0™ŽUζiŸß±&¦¤ß×%‡k^Ù¦‚ÐÊSTvräȱd2•f%Uy÷æÕÛ³WóÙlnnz¦×—ÑP.7Í0´oŠP´Ád<}‰Ä Ì¡$C I’YV.ßXªVðÀ?gx6a˜4ÞÞÄ4 YÊŽ;Š2 ñHF`8,Ólr-Ž;Uua±4?v¼£úq‹k-oÿ€¢k÷mãîÙŽÝÄqçå&m“Ò¤¢M«!&¤‚˜ªŽHl*±ó_ &$&X-¢ÐR‘JD”ªR“¦Í˵ã8ŽçŸÿ€»“}÷ýºû¾¼ï!Ä!vŬ¨ªúÎÎÁ\¹„m×V­Ji9I"2þæÝÛÅ¥âæÓM‹°”¶\ÝÚ5À|ðD»°°Ñš]ÛþÉ(“:ç-I ©)ä^ªO¹A1wÄ…0%v\šuü ³šm8HE~2 ⸣H­–‡T&iÆ&BÑ8AøãÃÖÌt –¼¡h`$d“W®®|Ùÿøõûþ£ÇO,G³½!D6ÝhŒ¯7ŽrÓ¢”&v)áÀ S ó/ž=¿³~7qÎr½v—%ÉT2E!ÃÆ)1Ͳô§Ïïë=žŸ*^Šz^ þ,<”Ôïúã kͳzËÇ@a8²¸¶v‚†„ÏQ¶«;þÐ#Àaò°¹Sñèúµ•Úß?1>­éÞáïcøºx"eb'Ë8DPQ³Óm‡ÙÈÖö·Ùbiuõ–Ün/TÒË‹|"®åói {ö‹¦«ÕÚÆƒ´«á¾_Zš)Ò\„>>9¯7z'Í‹|^lJç£.1S¼Ôlª®Åit½/ÀÙi“z!F¬WµÏŸ¾}’CÏB°h`W]ofrëù ½V»ru¶R)…ƒd"¾²¼üìùâîÆÁÊÊ»ºVÛÝÙ»tùúiñtxdœãyÃ0€î8„ÎJ*¨^ÓLB¼®²BEÓXvÎtšÀô6<,ÌŽgŠ~¨¡ÿ…»‚z\´Ìî—ï_g¯ÍNûC¡µÕuȘ>¿|v¦¦³ H±Z4Œº$òù<Ãú¦§&^.¾P’ñ7ç²ÙŒH--½Zýx411]«•t}7èç§fæX$…BÉV›žŸŒD˜LvLÿhr 8Ãxýéd³Ý‚Í(ý)e0øŽß"ErEƒv(ר7‘¨4Ý!3¿lÏcŒ9Ž‘û8Yúåâä¸V=¬JëʉZ†ñé‹EIÉÀÒ HIþH,3¤ f»É±N_ÜÏ€“F¨\.ýØÞ|:ÿIJ,PhŸ(xØGBØ…Ì©¹=—J&,³c»¶^o÷GlB 0“d¹K58ü®Žœ´ðòQ ‡ÇêQ<MÄÂÀd¦é@Ü"ÅŒyZ«Ÿ}ùü㢥ÿ®7%Až¿=UšÑÍk’Ù?:)MOßOœk÷¼º?¡¨d %‘a ýJï§âˆÄ‡Añ²6=ÏK"2D¡?D^ei‰Êh>1ȃ? “/ºÙù›I¹(`‹Gs,‰£ ƒe8Òu\Ó p‚¤4M¡žcZMCo!Š2,'È"‚†Ù,ŸùþÀg‚¢FN->\ôlÃOn0 a哬.XÛ\–¿hž'Ç.¨4,,f Úäú‹—KËÔqå`wïíÆ«õ7ïÔÙ)y²\m,/=^¾{ïVž;¨Ó85óƒ"áîÎLªkÛ0?kzG‡ÕN—Ëðq;Ž.Øx`Óø† }φ[Vã ^Ø2P§J¥œü®Áñï?l·ÿØÛÛ›«kkJ>ç•J¢þh†ÎBÛ†¹ùñÓ˜Zè4®ë›àÅ\,ç²B1€ó™•1J¥Ea¼öëüø¸Ñ „•••Ó“« 7RýYÛúö'±nKùŠÐÉçìÑúi£×ó+å œ_σe´//aÅŽ bF1>ì'Ù¬À¬®ë…©ªtIâIã,ðŠ¥£A”ÍI…Âlý›k¿èæ(޽nG8çÌ+Ã6lßw‰_¸3sPýª¢jãÏž?ÛØx-HB»Õ2l I¥|ÇC¸V?J“XI+È’¢i™’a¯mÓól†á {@šÆrÆà 7l; ú|$ùÝs¸†Þ©7pDILÏL—«uÐ…¿6Š?¿þ¹{ÿ†2Ç…$^‰*í–YÖöÕâ¨[†€± ¬M1Ôv¡ðlq¥Ù`9¸e˜½ŽOtã‰$huµ¨-¾x?vb$žˆom©´ÇÆâ‘ÍÍ&âH‘À¥‹gE’ãÆb«¿«é—dSdÀK’±¹˜¢a\*•âÊ€^ÛŸãy„;á=|@Ó䦬çgiq»P©h DÇFOÉHA¢,ˆaßf–"±ÑdV±¡®iƒøéu:AȬ×ö=ÚËfcCã Oæfç&&'6Ö×»àAI”Œæs)ŒÁ‹š°±Ý6P’eò«g“p´ ß3 ¥WZ_>7»=½Ú`\>ÌUöê<+ºÞXûM{4ø=† xž <‚ü‘n»äp«y•»]Т±´EÙßVW3éÜ?Hº¶ž¦Á0¼vêq[[vr ‰ !à Aœb ¢7šýoŒ—šà­Æ¿`Œ&ÆK£b4‘;CÔ€1JbÔlë&cc0Ü¡£+=úV{פmú½_¾çyÞ~oßËdn$û↡¼]xwóV¦'D¼^xƒB$\šòöÆ„}‘ðƒ;ó³Sg†Q»€C^ÜG¢QŠ:6â!B4JÐ^µ±®ÜÞnÔ$¥£`¸ -Êó’>@5²´¶&+JO$ÜÃð˜SlìÁQÔÁr¬va™¸v;šj¸`ž¾ÿü8jïéðÌc§Væ/\žóA:€»H /îx5«Š‡ð´-?{òtöÜYÑa]ÁøqÂÆÜŽ%†cÏdê*IjõFSõV#:/f/]½rxh4,›[ŸÄJARãÖ@%+ݸ„~K’œö'{‡å8ÆêÍfa™ôôÙd2¬×:m™eXÐ:š®hšð{ H÷1ÛPÒÓ0ËE9Ÿ«-.. NLœø¸òõÑã‰hâÈØÐÌÌ”a´Ù aš*°V£)µšm—¤R©b¡À2ôç/Ëlˆ}bHµ²ómu=ÌG4KU ulø CR­¦T(‰}Óé)6@Ü¿÷°7A-ú0g†ôûÓ§OzÜî÷K+0"–fS}þòÕääqËÔ«Õ²(Š4 Ä.•Ê C£¶ÊÛ´¬Ž,›Îf+¼—S…I8ë*še›„Ÿx8!û#ß¿¿sšdÚ͆´YÝF]嵪€Ü@õ¹lnk£688ŽÅïÞžŸ»xþZæºX-gÇ>À¸ ®k±XŒ¢˜ßE1—Ïâÿ ùÿ¿Åó…¢v,K«ÕË•b‘"Ž rA \}£TñùHÓùþlËM…"x]ź»jKr6·6ën—ßF¦'/žìMD£q@ µyŽÞm+ éLz›†¢0êyz“ftBš†ª¡c °€lØÄ¢AÅ?c‡Ä`EU@”$"@H¥:¦Mˆc'g°Ã5¬½y²¯Ï;Ÿå{yïþC›~ý\›/§4o6ÏšÇËk—‹seŽ¡g$íåó7æWfc™ÜlR¥B1‡d„81ÇÒœg jò4iš¿'«¦EŒÃIž’™¢¤*1ަ,³WÄÔ¿q| €%ˆ œàÑhm¶!,ND(\»Ëö:ãŸûY=gÚ^¦XÐóútÔë¿@}{üô‘¢ÅÚf[’Å[7¯—ŠIŒð½¾%«h4™]ç¼ÑÚß;(/VÀÈwvª"UMTcœe·66äõôÇjmeíÒÎníjåb:1ãõ|–#fK`­óF»µõj«kU*å­ígwnßõÇXã¼³û¾FÑÔÒÂ\*/èY¨þRA›+-ì}ÿ¢È¢€x(>MÕNêQÈa8x/3Pøèäê Lɘâÿ>óñ¨Ñl¨¢èi³}Þ8ª_ˆk±~ß;<úáy]«ÛA”¿~¥œÍ¨é”Œc°x”œ‘Æ# 1+#–ÎÉEgà¦eRÀCÄuþ8¬_[œL¦cè¹d2_[^íü¿Ptv¿MBa/å›C¶tëê:\×®ëêj6­šhâüHüS¼6þAÞîÚ¨11‹Ñ˜hœ[ç…Yœv[?W逶´ _¸HxÞç<¿Ã ß©>âXŠ&£1‘ýy|tö§¶y³œ/nd•UŠd÷^íQ3÷öv9.’ãÒ„oöZõ“ÃöÙÉd<‘E`x"& +z*IQ"lLB’$Ë™gü÷,w¬k ‰M”©õ}ÈæÍ,ðHÓ‡Õæž544Ì÷Š{@·2³æVOUUˆRw«OÞ¼þ—„µu… \šöY.ºU)"Ï,ÈùÂJ_oî>¨Î0 F­c¾{¿AÔº0ŠùÕûÕǵƒc}9ýÕ¾QZ½³½™^H‡r§É¥Eá¢1Ð4ýë÷/›åT:„fž—Ãÿ×34b9A”–RÇ9³yÇzW=]Qâ¬Ñ±§® ÷ AÌ&ÚU¿ ùíóÇ·©TÄ‹E!ÜBP1t}ÿSvy¹°QúvPš£gOwa¼ÿ{Zgx²€$ 4K†Žù¸(&æxj]’4©þÓÃ,!ÊÛ•Še;õz=|FвXÌeådh@²ðdݹcÛ6À7Ì04ÃúaÙ‰=D@ ’ˆñfÛÖmŽÒ Ï´`}µŸ”äÿpt.»MQvìÄ·\ìıC’&mš¦*-” ¤¾[¼/Ñ –<@[±€ª%@ïR“ô’›SÛñÝã1gýöœ9ÿ÷ÏÌ™Ãìî¾á8¢è„ãYc6Þénmïlg³bõIíàà°ÝÖrJ«æDl¦—`køg_€¬˜&;£%Ié–¥Û¾åA²DQÀ³¹41÷EÓG`>°‡A‰©ÄÛ'g¤¼‘nÌ-š¡˜??°AŒ D‹„T÷FáÃý0ÏG‚î SgÁ1œR”{¿áÛ7çUu)ÏÁDiÆM·í XÐ Æ÷ö>w»Ïé£ gò%±Rn'EÈð‹8ÎøÆr­\Vã$ÞßÁÃáŒV®Œ9T€=NÜùøîô!Z©¬ø.~tlV+Õ:Š1  Ø]Cd4š+Ö˜Ôz%ŠZÎK% $/tq±&'É© =Lâ³i¡XÒLc1苪¼ù¢ƒ»Z“Qâ‹D@¯p£^ÊÖÃhtvq!IRYn}ýòíã§·³ÙÃÑÑþæV‡Ï²½“Ÿ'ßÛ«€Ü[Ï6 …9ŒÃq‰E85™ZO;k†¾Hbš~I‘,3¼ÌëÝͼ(j˜›……õv¯wzqu & F™¢a‘nœ`,@ÇTUåF•ÂØ"Q\Û9™ÚaÊç´Á`–"KmYcîø^ JáR]Y˜ãË˯º/§“þj³–8äúêº?¸]_ëÈŠò·÷ëüêìÃûwjY¡yì)¼ÿÛ+¥c@L?öÒyiÏ€gR‚CÈ2MZ•a ©€  Ä¡$Ì©ª ¨´Ææ*Ǫ°,H²„ØGs<#ˆ RhT…Q¼ÖÙÜ>u××Mu%’ äærTd^ìÃNœö¢€t ÀóÆ ±Žhb H*@Î.‡vW¨± NŒ}?ÛN–Gÿ†×£Ý02œ®.XŠîüLóyïÞÖ÷“oY¯™–$©§§gÛÝûQÉZcäβ”IÊâä÷ŸÏýãçÛmY‚¼Ï6uͶ'¶•¤ÙÎÃÞþþ³4 ‡Wý½Gž7ËsrO–IKyÏ÷¬–©µ‡ç  Æü [x¤ÎŠXJ´s ‘ä[HÈxƒ‹X¯ol¶…:ÔHÓ3wzyq²uçngLÅMo=]®ãhKÊŠðäõß½}ß2 w¶(3Ø2 $"ò×|\Ô4tŠÆc[’ExòßóAQTpŸ4?Çåd<¡ç ¾ÌCØ<†4ª²áÄ È÷³0J­µNZR®3R Ñ¥ŒTŽ€UÌHÑ.oÛ·p­(r ²3Ã1æX Æ¢ï%ÿàèLzšÃ8>û>o (ºhD@–“qiü^Hò§ÀBâQ–ýÙ|âEù¡VùÝL"ͳלœ¦…¢ÀÌ¿’Ì7Â)Xd¨(²8v! Œ7ÁªV ,è4‹à­é˜—ŠU£I+)•¿NûÖúæúæ°× ½ Ñj©º—¥H“¹kÉ ».X¹s5¾êöS…8õyŠy–JãŒ"¬”wïûÐôHR@Z%YX£ P›¦Ìâpim)£œ³£ÆÓùýI²y‰aiÐ$ðú—)¨ó…$ $#H(›ËMààÐqæx"°$͈ ©Ö,µ]:øò÷á‘çLš†YVJïÞ~òh« q÷ïÝAˆißhUªåqß’5åå«—»»wvFíîíÝŸ¶×· ´@ø~´·÷åáÎã¯ßöõJû¾$ò,Ãé%¥@‘) GÓ㳵f{ksVŸŸž!†É‡†-»Õj_sâ<)Œà¶†ç' ùwßzMUT1‰#܃ÁðûþišIBJZil9ù4Œ=E°W­fšËØÇ#ûêÍÛ×ÏŸ½øuxe‡ý£^•‹"Ȥ.EStMu1î÷.i2X™Pi·.Ýj¯0ˆ>>ú³ººU,ªÑ<êuÿµÌÆZÛ,iÕOå{ ù†IšdŽƒcpÆšºÓ ¸ôÜÓÎ…3¿Æ3×ÕE¤)Bç¤ãC*bø¡+Ípaò_ŽÎd·i( ö¯‡8vâ©Iœ´)mU+¥ÙÀ‚5{6°e×ð2K„  ¨(¨ƒÚP27Áñt=;œËÒ;[:Ã÷_Ÿû´Û»­ª:To'κýmßÁŰe6Â4>½ëªÒm8˜éM]¬7µÖµöÖvUæ‹d/†LNŽñyµÖÙ²¼$œ‚,—ÅS¼ÈÒ¥Í:À’"C¶@aà@ ¹€¸ T”hY0Îr†’9PNMfblÇtZíïG¿~lmvæWv·ÛëïÞd­"«Qæi¦™-‘dh‚Dl×K$¬[Ö»O¯Ö׺žã´;kª®ý¶ÇWØ{ÿí˪¾Z% |‚ÓãcwîݸÙÌõQ<›ü9?‚(ø’Ø­„d£%Æ1CUAQXQ¤Ðøä'S¯%AȯTyÄn®m ’¬ E²yjdN*yÐþt4L’Ú:¬Æˆ‡_!ñDÈì7š:t¹¸døºj6̦±B1´ó«ghú›—o ®¸w÷NYf4]º¾kÛÓ뽃ƒŠNFnŸ<~ÁUÔ½½ûgg'E™Ù£‰3 “¨x½ÿÙ]D8ÈÈÌæ’5›fàxˆáç€{ ¤9MOG³ÐK€‘ ÀØ!S,2‡žTªµ(J9–»¼¼`¹¥¦iä7&M§~­€žÖ‰ž=ý›çôn¿O6åäùà|P'ɲnèdˆŽG wþü鳇´ÌV–R–µCn–ѹem×Õ:9ðHSHƒ8Ê¡Š§EBÞ1£ñšC«Ù‘¥*C!(1Š¡üw1ÉÌ•z…#Ž˜öði’‘+(T Õ§XÒ>Y”-Q%oÏ‚éÄïõ6Š¢ô|Œ£„«p"¤nÛë«\²PqçnždØñgã«Pt&»MCQöt‡Ø‰;N‡´¤@A…R„"ž€g`Ç“Ð=¼ V 6H4ê®+@-•Jiu SÚLMÝ4¶ã!¶9÷léèžóÿß¹º÷\±²³Û^?<=>hµÎ\ß çh§ íè»÷(¦ q‚8Lg²`/Ã0©hÁwÿNÙ©wÏCj.?3J<Oeæ8h¥€ÝÙÜo º ÒˆW$÷0 È´tÙÀè¬!MÓš*q˜ÆˆJK‰s3¸ê 2*Æ z€8âã“=ØãbK´X˜§47‚dWEWÝ0ÚÜù}{ö>j!PâP±þ¢ÂD¸Ñª;>(ФŸÓò q¦Ÿ˜šN¸¸0iìW~yýV~|ŒJȃó‡šRù 1…L6ƒ®ÅXœ7e.‚dõ‡1µØŸ¤å´€ÛpX–؉¿0ôy`ÓAR#Ä£„G¼c{’(¬.¯H£ÑÜÌ´ªêøSþ¾ö©|¸öó¿]]OÓP>]ײu_´ëV¶Q7À£É"‰è…‰?Å £¿ÀÄxë­Á½’Äx¥b‚lLZ Á}²®íJËÚ³úÏÕ¹;_ïûžç9ÉyžàËG\õxÿWåuô­Š2 ¬òÙÖ“þÈPSáž—Üo »þ9åz€˜Âz´˜ÈJ GûAÓöü˜”»Á!Ægñ[†ñ_)¤‡<‹&Ó7[µA{yñ.QEA—ÜOOE€ÂYŠÅ9~â6aO$IÀ¾gM¢”ÄRžå÷{ž¦kêÏ­ÍçÞ˜R•æür‰ #gˆ[gŽÔòÃòÄ%JÐŽCl”Ó¢8ì÷VW×··?ÁÌ!ýZç*Olk' TÉß’ƒ3¬_ƒv±0k!仈!ÚÛØ1âqAÌN etYñõ:fCT8î{¦fãï{;BV–6B'¶cŒ—¥}À{ Á¤kCÇ…b1&*x±ÈbŒòãQZÎ EYúøþCóiùÅëW³ò¼¯›õŽ&$¦áFrl#“A8T¿êÐQª0'„¹X¯£m>.å[P§(²GIA*-¬eg–~ìTæò2ìsµ¢žVÎ7î/íí¨çµÅÅ"/pgjEž“Ö7–²b‚ãØÛ )*è3,Ö5 Ü••’”Ë‘‡Á1NJÒ5#†ˆø…s= iQNDâ‘(Tò”OfiÝQ&›Û”eÀêè8Çaò —¯žÔ²»€üPT%IÎ2¼·oÞA¿ÙèÜ»C+Т鰯öÆL,.Ó »£ð‰$F@X<­œÔŠó…7ŸØÄx,ùà÷1/’©À¡¤Ó¼¥ëÄ{ý¤ä`Šf½e[¸Û踶ӫ׬A›í_èûWYDZw÷Ëç]”˜IEDá«açÓI˼|P^›Jy7%7Æ?8:·Þ¤Á0Ž÷miKK´FÙ@Ý“nl$âXLôÊ?„ñ³ø)ôjŸÀ/3Í–lÎi4sÙÆl B[(‡Ö§Þ½—}Û÷ýÿOò<ÿ¯ßlÌ©(—¢²Y1Ÿçr‘|*ݼ*-§úppuv”ͬ‚X—nZÚÝÄЋq í—¢ˆ“-Žgê¼ÂJˆä›mm†{qŒ›3g‚x#ˆÜp’vg‘X¸¤Cº£!$N(’L¸ØÔsˆU²A4=ˆ *½·ü`åíö»Ã/û÷Óë´/¦‡;8íº& „1Õ·Á0™HÓº‚{û_Ï.~&âqeçŸ:‡²b!ª6[íêM­P(*aÊSÝÒ^½|¶_ð“Å¥9Ú‹¾ý˜W4gƒ| ~¯1ìï~ÚY_ÏŠ(5²F { ÇÓ“Ó?ß9VL§“ölâ8–=ó>S4†¡«ËJ¿gK×M ›ù|ð¥¨v·¥éZ0¨pn6Ûðûãήe,$“˵ÛÚæfÎÁfpÄ£ðÄó Ϲùzåry:udQÑÝ65ý‚k¸ËMÕc؈‡¸( ÍéõõGkIxŸ¶ãæ2|óo_«V«àò¢èïvºåò5×ïã_½ÛëL&& z,J<Üâ’kôÓÙÌãXÈßM%„ؼ’ì°ªÀ¾€S#iÕ– oÿ'GgÒÛ4†a;Þâ5‹—$Žiš¸…BWD¨ŠÔŠ¥¿ŸQA9ô‚*– Ä¥P JÓ–RhÔVI³ÖŽ=ñxlÆÜç43ï¼Ïûiæ*SÐ2ê¢aÖóêMÍXTL5’ÀÜÝ奕U–Žo,L§x(ʈg³…b­ Ïø€ù˜8ôjyFËXÈ͇ž@¡´Ì)±7G"š”JÖ$‹WNûçþŽãö¬b)Jú‚ÅÀ‰<²œ ‡øà˜Ü=ç„4#°1K:P¼$rJ`/r ùåó;ž©’§'-‰V¯ïxN.úÞß”àpiÆõ ¢Nw@ó¬¡C·[\RH%±A— ‚ 5ÎOH˜BnHÁt÷¢úe†Ëeù2Cq©ÄÂkžþú}„S MC–`“Å^C°ªfí~Ûž~§ûÇàqLA iü©êº—£~7Jþcä0Žaô¤1?#JLå]Çax~nrvëíëçÛŸn<¦¡Q,Ô@ˆ£°ç{kPaùí­WËÖ†9K·×žl¾xxÿQãàÔžž[__ÝØ|V›Ò4]ˆS଻cÏXe3W_Y|óþåü’=1iPéPΈ"B"®ß[eÆÁQI GŽAÇ‹vGUuCg”Ϩ³·®Ó4‘ɈI?À¸ý礙T›V”"1㛼 !’DXðŽ…©Ý,ìªM3Ipƒ>˜0¯íîhºÒ`aÓ%³äzC… GK ‚^ØÆÈÕ¼©­jk#§ÌXšãRü˜Qîtº‡Ç^°,[”d`G^`“$†xL-{02dv!òfxÖ‘M¦vèùc˱¬;ì³D@&då¼¼®-ÿì_={ÿîøË“Ýí­‡­jE ¼ ˜¯ß¾y´¿zct¢dÂñy½¦·Z-Ó4gÄñJMo¸n²×Þ=<:ÊR‡dˆ 8á z§½ÿûò: ÒjePXU+’¨¡âI›#ûêÏu!ã] ;’L3tse¥ws;²F{{m”¥cˆéS’×âh ÜMÓDˆ©CRx  3ÍJ–˜æT/Õ¾@!B]»¼¸2 cdZ^àÍÍ«kòB¾¶¾F ;Å78 QбŒëûÞâÒÂïßNN>`ÛÛÙ¶ D„H Š:è1†"ÕRFN.:çc³_)U67·¡iL§@áph†MŠgç½Zµ¹Úl&Y®ÖJµºe½iy0„Îéó4]‚xP‚© ‚L^jˆBí¶3[^Øú/G×ÚÓ4†×v]·µ]»¹­LØdÃ1ä&’bÄø«Œ‰Ç£‰š`øBDÄ4FA ÌáÚ]z[Ûí¬ëm¾‡ï=çÃ{ÚçÒ¼çy©™Ú„b(r›¦ÑéuË1íÈïýF‚i*þæåËÉÊdŒºòè ¾šK‰Bö`í @¦i‘N Ã}m7… ¼XŽcS䈈…ñɧA#ô|;ΘXÀ7c“‰² ‡'::É —á£á¨{ÚØE–â `ñ4F è# »ªFbòµ¾±õeiéAuf^ÌãÀ,üWw ø.B mA÷ÀŠv³éãp!Çñ8 UÕäÎU[³8ŽÃw彞b§ª“Ãεý4³(v67ßfÄB t4Ç!7è´µGkó¾‡\•ËÕR±öFÕ……ÅÝÝï>lÉ2:<8ZYYxòôáíñ,IxÕ»Ó Ó©³Tm„ÜlNø/GgÒÛ4ÅqÏx·³/MRgkÒª JU[Š ˆ ÑOÈ…OAOìBB*eQ¹P*ÊÒ$´ÙloubϘ7\}šÑÌû¿ßÿç ¿¹]ítº–I/{&«_ò´Y¶ûxcãÖtêÁàš¶*‰Þ<’Xδø%¼"F„ºŽ¨€8 I“mÌË’ S1™r„¶oÇ\ˆÐWˆòˆÄ ¬8 *¡"I5!7‡Ñtb Œ…äÿ÷5‘;==ùøîpmÕxðpIøéËçÙ|±Þl€ý´gk«õÕVVç’J$ıçÚÏkYMcv6>Aû%^¶FfÌaËó fEØþÞF”ÊŠT©U’é$†OÈ Ù³³?3©”ˆ49NJµ„–á9jMß QñêMª´xc}«X¯žÝ“JÈ Ð$ Bˆ¡R¹4›ÏÆÖHV”"°I!OXÑ„°,ÍX³)–†ýÊíLüéP×Éνõf¾üãìäíáë˜g÷#ò…æùÅdײœ\¦\)6}ûèè8œ¡ñx²Òn_oTjÏîïÝl-•e‰5ÏçÒ­fkØ·RÉ,ȯsA ÚÙÜ>&¹ºŠ×®­¬´—ƒ èü¾]{`¥ó£jDd®é¬;Õ‡ÏïÓ=©°¾ÂŸ<¹{ç6Pªk°XŠ,ljŽ(g»n¯;–Åt.[:ÿ5"+Š‚±`¥DJõœ‰;sííÖ«Õ¯ßN——ÛîÔæ%”øàÁD±×íû}€áÁ CQØX2d‘€‹äy\¢‰ €g` MËx±XÉ À÷„ÕyÆAªª¨y6»øîùà'ƒ¿N¾5ð*$×ñ—O0#MS‘0ï Î0â€P=Ÿ:þ(Û ‚Å…*h$êÑÔ bóŸ]KoÓ@vâ:±³¶ã¼“¾Ú¤é»UÒR!T ="¸Âà•À•KÜ‘8Á ‡V@{ˆK[µ)IÓ4‰4¶×ØfÜë^v=3ûÍ÷Í®gɧOKÒq&>^^«CŽeËpYˆs!3],­¬W¥?5=üüZëËÝøÒ/ûk ÔPH®ÿ¢ŽmØÄ—ÍNÀ =ð[¶£A°)ÏsÚMÍ Ñp¤®²Ù1!ô‰‚5QþQ¼;6š¡LPAÓ6þ6jß|ÍMÄJsùhœ§n%Ò¹ÒÂâLqÖ2ˆ%C¡!Ú5p7–N¢hÂ$\ìa›ÀƒÕ¬7\Üÿ§Á²aìX4bb f•Õëfëʹl6è‚V!häÔÒÙÑÚch‚ñ ÂV±ƒµ‘(ÍExM3^¾z3_ç— mÞ¿wѾ =—g˜¡Š{}…¸`eöæ·"à9Nœ=Ï…Á³<ËF–ú|¬vG—$lš!©¸éY©\´¼^Ö”Á—oŸ>|ÿîíî³ÏÙ00J ú¤u%OŽæÓ™àëba6›­ÕZ•Û+n‡Â^·ß¦é,7ÎŽb“±Ô©ºµ½eéõµÕf«žiœ_>غþù½ÿëVµz’â£b~ dA UU“•¶ÝÕ4Y ×XÏfÒk•2|Ãø'V~¹È¶Ý4U—»ª ¤é02MÔp»Ù‘¤q2 ð]¯×NO¥é|fª jØÞ?8ˆ Æñࡪ6„X(º$BHV®<Ò™-ÎÀÈZOÑ Ö{׃tÁïËMë}¬ê˜O"ˆcÂs ÍD {sW5òï¼vxxÒQÚ°«pF–W …yM³w÷ªË«Ë©¤ (rí¼Þl]nlÜåwÑì@BÏODMX.¤ Pí1!µ³ózn¡ô_ŽÎ­'j Šã½Òvz£³Ûnw ˆB`ÅÄžŒ~ý ¾ñ‘|1¾£ÆbP#<@—UwUX.Ûei»e{ÏðÞ¦mæÌ9¿ÿtæüùµÕ¦ã.öÿ è½VM \ƆfßÄÙÊÚJɑީ¿0‡9ŽþÃ* PÐÝí.(EZ2i i£bH‘,uª¡ÎËŠœR0æÀ4£Kà >è1N,òŠ”œ@qœ¤“i>I!6r]L×#"Ðþù4Žoºý.ÇäÛÛœ@R6*…g,YÀwJ gÁ=8>´E»äØ ÚÞ/™ÝŸý kØ-n‰Pð²€€Ï Ózc‘`:"ÔŒ¼bXîdV] ³“Û™¼P¡bU™Êð*ÏGAP%u7¦Nâ ¼<@ïéõðÅËW£0øüåÜk× P¿dûó3 @?@…Û| ÙrΛ×avò ¢H"Ó„§UUåwŽÃëq«åei ÑF;ódiËkÞ"äb¨v„ƒÓKjd-ƒ®˜eXÒéœìî¾ÃÈÐÄ#ÿ=I®¿Ûg*D +µÛí®7›Î‘ïBž?{ „l[ „T —Ç›[éHÑ5m6Ë™pÂ’±u=º­ R'uSÔbi¬lÈ(Âà ã®a¶ó,£ÃN'ùäZXÛ´A‚rFoQÔI¹‘çb‘<{²Ñ]œNEMÛ~ùÊÔÙØk€8uÅÐ ¬Éªu€pjÓ`ÿþõ]VÚ«H³ÑÕe4ýKxîð`OWe€Fw2¦t‰%J'T×lÇ1¨é,ö®¯ïî~Úy»ïy×LÃK¢EébÅ0ξUnY‚m;'?FŠJ³*Ñ tó²¢*g''ûï>Å” %X©«êûõ›_~¶›9²±ñxìºg§£0Lá”fWé‚7O<Òv23€kÏ8 {:CD ¾X,!êŽcH"æÂùd0°+ö,œ02œ—úöÖæSÛ±ª ú.^®TEev‹ó¿mpgáãZiøN­ÞŠÃH+lX…ë‹NÌèþÞFF }äÖ;<|Òéô z½VjÉ"¾°{rr WÀñŠ¿XMG]p«ðÉð&Ë1;÷vìéLDŒª@aðà€!?¸<§(’;¿M 0ÕžN‰ŸÈ@AדÉÀ0Õ½½»³››­ZéøËÇ,[½xùÔÐ÷}šU.þôÞ¼a5 <†aí@ ¯‡ÎÙ¯®®k Ë £(ÎYÏóâÂKÀ™†qÌe–52á°†ìp¹F¶g5[Aöz—dhÆ›ƒÝÕ5ËETœÙ0ÆÚ.Í}·÷·ÿþÓ·zS;:zV-oÙÓ ÙÜ-êAREY%kÈü[Y‘A]U$BÃÊR*J‚tn=MQßm÷~¡—-…îZ@J-`5QÄ ú裉/~câ—01ÆÄ'üFˆÆ„`ˆH´mJ)È¥í–]Øv»÷«3ñ Ì$gfÎùÿf朓ܨ=JS)è×ãY®ënCîT—5õJ9“ï3ÀÂt—!y@~ª2ð‘(WȈoy` ¬°8^ì>‡¹°€[“ ̈2ºõMÃ'`DGH<ŽÓFƒ §8pXü‚Q’Àmij‡Í£ÝÁè/ÆùT ƒ#&LXg;bØ, ,AJù|§y±µ}´óåó¸ß©V+S¢8WÓ0£ )"–J%”§Q†Î ™ Oë­ëv×P”P×ნã% 'dØ´(ܱâÑ`¨teÛð?½ÝœYÚ(ܘs½õp‡ÚrtAËËùÉ(IÚa€ÉóÀ×8‘@€Óƒ¥Ò&X.—É@Ïú!›Dï¬åZ89ž©0ž¦š£ã KÒ¬›é“Ÿžˆ=3KQ«ób퉴X&ÒÌÙ{Þ;Ý7F]í²ýmë磕ûï­YšYœšF‡BñùÙ"‡cª¥´#e 7êß}x³ù¾rse½öÔCFc5Ÿ[¦ˆÔ¯z3Ž@<ŒtÃ>¾8z¸^Ö†‡šÒ÷l C…L:‰ÉÒ¦©•f(>Ù“Ï#èÈY'¤Ç`ì¨}â¹fQÊ„Ñð÷Áv­¶ŠÃ"(ÔÎî¾$JÏ_<ãX®Ùè">oGÈbå–$\ÇûÓhxꌑþŵn›AJ3³Šõ 8i˜Õ4DãAôÌeÜÖ`”Õ±ÜzÜn}ÿºBØœív߰݃æµÚm!·PoɶÉMf—.ûò@7¶:»{{ÞþêõËâl IP•jçp#0œbxz}¥kŠëZ,¼ocB/„fÐèŸ][OAÞݶ۽v—vKé]‹5êƒ)ú ê‹>}ó?øôÍøHLôÉ7LŒ!F^ˆB4BÀRh±Pº@)lK/Û–în÷†3¼Ïd&3ç;óœsæsÍÌ< G®$“)p‹­nWívQK‰¾[ÈmݹžfhüB×X)i€9–i˵Zw %ÇÇ]¤· Ót40À¶pøLqzn›²€€<`á•úYµ­ :è[Œg9†©”X#<ÀµØ1<V¯7U]_^]º±8C ¯inkµ¬’T[ÛÌç Û˜Û úˆ•Å÷FqqéK(ʙ΀¥øƒÕÅÀÇzÌj5eØFà …£˜Í“~Qµ•¶|rT*îd7V¥ƒR­Y;¬UËBqú¬­”d.!Š™{aq£‚BxŒ¤#=먗KTÚœ?ü/ 9%ØŽo8$t{=”;¢Ü(ÕëéåýCÜmnnà8’LF …œmê^‚Ú.v^¯+?l¬$í…Ų € ²—ÝÆ†a5[Iªj†CD<C <‡ ŒvAé½€ªo ¹Þh¶Š Âä é#Iznn^*ïÇ¢á­ÜžmYéÉD€w—+ÙÝâñ‰k£ð‡÷~0À¢ˆ™Ïçöv ¼àýæM3Šrîñàí®R=­8n˜³Sûç$îZE€¿<'øXìÓ¶ÿptv­MCq?Mš—Ó¤IÓt}›ëÖéj}…±)N”© "ÙGê7ðÂ?†z!^îFðf*Nt*›Šs¯[Y»lYÒ¤'=mRÿÙÎ9ÏóüBò¢¥‘sñ¸²ºY%mÓ&¦ˆÙÑ‘R6ŸYßX/Ÿå%åÀ¢1‚SI "¢˜TÓM¯µkÚX–³‰°,üyš¶ÓíPÀÓ.„A†ÅœŒhLIEAdÜõðSi§élÛú´”ã¶lNàpóQ)¥c§i/ÿnœ9yqcÝÄ‚j-­ì--Õ ù$ñÝÊpå<£NnÝIÊV]¬sZ^CÑHèQÀ)Q ‘ âGÂjìY¶…E¥çupLÏI›P/¬2ðÀïÄÇù.•8>©© sã‘MŽXJ Ûµöj´E Å2eçךcXÌp˜RM€•³ B”º°|žáÒôQ/œ0°Á[µjø? B.¡é4È5䡺S ›äºR /CÞ4½Á¢/3HQçüØ—"5Fã†7}Š2) ÊË@+?—ÿÈ÷ôù“S¥«g§}Æ™œš¸7x]—$û ¡‰qYI=˜¹“.¦^¼~Eý^>[þ»º¼µµ’Îð”I29=}»^7Œ}{êÚý´ÞÿæåÇmëݵÏI\æ…˜ÚØwP8‘g±Þ8Üܪ銌2PÌh ®íîZ­|ygÛ*žžŸÿ26~©/“µìº@HÆ/,V*#,ËYG;žo ¼_ʈ¸A®(úžç~øôþûoS7¯LŒOÆdöëâÏË…|")kZ‹¬G68žØÔéH’î;õi¶ Xÿ/I×ÚÚ4…›Û›&o’7—6é½u®«Û2œˆÂÀ àGAöÁŸ&"âÐÂ`à>ˆd·vÝÅvIÓÜÚ&m=¯æ¼ÉÉÉyžçsîÙóCDW.f›[[NÁ.Š€: ×€l-©çõ,·Ë@MÀŠ©ŽYj*z‰“ ]zªêt®(#4CÁx|zzÌÀE{ZlžnF@‡’fE‡àÂ$Ì¢xÿÄ•À é"•$nÔ´Ï 5”n£z¹¼ñŠJ§j §ž_oµ–ÒÙ XÉÒelkdº{¯_íì<͵PlÄ µèspŠ>B²"«#ÀÛ„\¤+â’˜cYàiúù"Ó©Î’ír¥±¾-ð8Hç—Áïã^’ÍÆ“Ø <¯ÿ+q/|÷,ËØÚßÌ|c{g˜{÷=l)­õ6'cW ˷לzvYð-…Š ‹¼Ìpó:Å©G*ˆ²´T×¾i‰ŒçEˆ§ÕÐ( ‚r5,†áD/]Ø^:‰qž@©ä'!1ÂHUd¢“úxšÛ³].àŠ®èDÕ7×n4ÔFXÔ.Óïÿ^]ÑW{rZ^ñØ2µÙ?çí›wOŸ9>Yo¯•E긼 ߟƒ@%à"!QûÁ÷½oHŽÀ«p·š$•ÜÑÂL Å­F5 b6Ìu•”âÎaoöú « ‹Bd¤,OçA*—xÑàð°R5D‰«ÙKgçgÃK@œŸ¿vÁ‚ÔŒ¯®úƒ?+­¦ªs7óü¨×ÝÚèlöî?еŠeÙšf\_ŒÂ8Rdiÿàwÿè°Y¯W žnäÌ~R¥Øn,©+8ƒÜŒä`mïþ Àѹó6 …a8ö±ûøçž4mh£BS T, Ä ÿ‰…•_ÅCÄý"*u jC  Q;Žc;¾›÷°z²¿Ë{ž×>þyüä)jQ3L?d…¶á-kaÏgÓ"JZuƒ„¨”%9II<QߺèÀ‘"@ž#à¶ ÉQ˜¤Ì'«hé­M¡Ü/ü4£5. ¸¡V­±Ñížž¯hÂB“¤>UÑWÅüÒ²l+ŒW ¤ªÑ ™úwlÏ&ÖÃG‡›ª¦hÑ—ëÔ[Ç_Nm·Ôî÷?Z8¶i¨û†%ó„Ê@‚)j„®×àsWF?]×Gn°¬xÞPž¬Óó‹|C¹Bw8d€¢~&ED47û!Cl¤¹”ædg°e‘½°öÛáù+v†TŽÂ˜íõ–$”ʱM¯1{™¯ÓŠ)SZî,,EÕ`€-k'!ÒP7ô"I{ME¼•͹ª(aÝkvOªUM*²Ã× ÍU¹}9c! ƒ¢¿ueoo‚'³m˜zD(KKº®üÆ Ç…Ÿ>¾>9ù&ËühtÝ1L:ØÝšLæ£_§ßOŸ¿xÇÁÒs­ú`wPaïòÞF‡ˆ|ˆ´R‘粊NÑݶãhªJgO§ÍNíìüÇäÏï[wîQº?¼ eYÌá¯TÍúeT*AwK¥¢R©9?.­Y`¨¦¤ãñøà戂Qt`’F#×Ò bW®Åìwj„ (Ôí©íN ¢Ú0o¸ ÷ÕË7íæn¿Ûxq¹Œe‘&a&ðåF£}tôöó×ãûî}xÿn{{çðàöðêu6æ”—·6ÌáðZ­¡f€Œ°ƒç’!XµZ3̲pt.»MQß2¾Ä®ÓKœ¦—JU*î Êâ‘Ø°á…`U±bƒ¢…¨È•ZJC’¶i­ÜÆŽc33œé XcùÌÿ¿çøX{ýæ-T àrR€c"ǵ Ì(›Ä ì~h®1PJEÇ#ì8`ÍBU<·Ø“‚Ȧ¹~¤²B¾Rã©®—äP‰ €nT°(Nä¨Æä £Ðá±9æ\çC(ŒÓ"NšÎà)^]EB΂ÎTîªwqž…‡íW/o»eíøä_ÔKkÁú˜¤dÏÍûáiw)F@—¹((ORˆ× ÏT•9²uµL9¬ä+ǦíÂúUùé×bµVä3EçØÇÉtÔ*²‘ŠcŠMäY붸m0ÎÎ;7››$îƒìR;h´‡M³[(‘çÄ F}ʹHkÏÉßF8¬)¢ìz²Å|—1C—'"Ím J@ â•.Vƒ4&CH£êÈ4íÉ4EBv_ LŒb4C”ûº·Wñç6·š`n J ‘%#ˆxH¶4')ÔN–€þtÖo_q>Φ¤ycÜcíè0üôùgëïÙΓíZma÷ý‡Ýw;—ý…åyB Íézc¸ S×*õzm.fÞR`^OŠ®W—!“ìï)º÷èAxrÑnõ|oÑ@×#AYáyšQ*È€€Y¹Žî“þ%!ƒŒŒªLVV‚ÆZ=IɘŒËõ’Öívh<ÙyúЫ8­Öñy»»Öl†Âß!Òâè²ßju£«hëέZ°¶±q°´"O¬²»põíûÁÁ_p¹?áiµ^~ñìù˜ŒáùÞß~ UÛégTD½3laH}–cz A¶ï¹¾çWTÃX©¯þ€£kÙmˆ¢ž™ÚÛc'~Ð6i)PR Ú¨R%Ø€~6lXð/,ùú,€îÚUÙ B¢´U¡´Ð@Ɖ;I?¹Ó/°Çsç<¬{ç§ÏžË¼ëvÝŽ¬&³$„ €Â¥|D_QåÕ™çˆg«|bj Wú}XÛ¤Ø`,¢$KBЀpZä™MP .S„Ò³9ÍÀüÚ£D9OœÁS€F¼žëýóËãAKq:ðÂÊbõF}¡ÂY°^mï|úà>yü°^/Õjf‘Ü ?wþ «˜–n±ìу†FKyÌ¢i)ÊËÃT ‰Ë6¢z”Ì\¯; ßêr…Z&¸PQå>€õTW€`,‰‚èv{Á8@Éy¡ñЂÀPE§ÊÐmƒ1ƒ-àœ%&àá®úUÊtø Ò9ãCÏ™-RJ®®ÀLÁQ®è†ð©-]Ç9«9‹©?NŽy4j½~÷vëî&UQeÁBbI–Œ^·5ö™7dR–Îò$¸4DÝÝÜúu«q[ÂR#¾|õú⢫jB•½Á·‘ØJJ’PÓ*Nøq>7D1¯çŠ`å$Š“`æ»ÎÀ²‰3ÂÇ)€€K U²-M=˜M½ âG /Jx6CŽ)‡€Å³„“¸0™ASu«‚p0¸.?íŠ"É¥DÖ`pYOµ"›¦ köâù­ K¹Ñ•“ÑY}»Æñ¾.Äe³È °úÃGÛãYv>üâ‡Ê¢ž$”Ýî‰È&9ýKoòÛ2á lØ÷_?¡¦ËÕÊ<š^wºÁh8îuo—Éø&«¡š¥`f«@R@•ËYJßí$i( ¬IË£”gó9â‘JáEâG#lؾ"PRÅðš3P2Š»i™ì•? APÒ”Ë8ñ¬}îOÃõÍÕ…<ÒI--Ø»R¡Ñ4P%ÅR-ðQhÆY»åœRy¹yzrôã»ëNÇé21 MD¥áD>K]×í_ö »à·‚©!»o­mÚ¥Â烷µ;µã‹sçfªH…žÓ—¸{!åê{[ûûÏJv§¿ÕÆ{b,ʼ6öâw‡vï[ã$ô¥ÃFËq¼ÝÝf³™Ó l能»Î°Ûh|ýðñ èÙb†œcíŒP‚ë±ïŒ~ošæœÓç¾®¾œ‡òô˜¨ ˜^’‘T*…5)fùêY/à”°šŒÅG0XÓ„Ä$)ÔµšJT`ûô!ñ°&ï¢ZÛüë{SÛg0·G_¹ñ!N&Y–e@·# Æ1,méJ,ÉôÃá>Q®˜-‡6ÛBàÊÕÕ燻_æ–—@ /_¬¥3êbaÊök?¿~žÌæÖ>n[ÎpæÖ¤;d»w8zã±ôÁSЪÕ9žÕ‰ÞiÑ®w9âÛ=ßrG¥ã®ëÞ]œÛÜÚ¼p؆ÑCÑ’žî—qÙw=ºódör… b4éï8{ÞðpŠª —88,J Öæi­ÙlÊ’’Ô Ï÷`³¢0Øÿ¾‘Éæ!xS7§+§ÅÝòí1Ws³…ÂCN”‹–?R´˜p)X]ß¶}9"„AùWéõ«OùkÓµªÝh­ö@ ƒCccÆÖæöèè•WOOŽM«A4…h†ãÿœˆ ;‘Ö;Õ*ñG)&«©¸>3“#QÑÐÔñìX"N0߯7`yÝD"Æ ™VÓDŠbDÇßÙû¶r©xppÞèÇ8˜5Rd~ᎬŠñ$Ñ uåÁ=E–JGåL6îÚÛÛ™/\_X¼½¾þ6ŸË@f8 pq®¾×Ñ“IÃÈ@žPO®¨ãÐ6À|8,ü€¢óÛM"ˆÂø0³;°ì?–.,Xj±¶†ØZƒÔDMÄ;_ËĤ^hú^è…^xј4mZ5š” Kh[v»Àvÿ1‹g^`“|ç;ßo23G˜GsCW0AléZ…N;e]ʉ3ts$í‡kç¢[¾Sˆ™ëùÁÈ£ÁHÀÇ@ÜlÁb€*ÑœF ùXEÉòHò„bDÇl6 øðJ|Mv—øôß$†žÂx†MÔé%mŒój cï¡P¸ÍøtðêåsSAßOŽE7[»Íæ“Ï_æ•d*Kù…pTMýi2/­ ü[ä%!rZ·÷ÃÐhà‡àEEÓôgý0¸\ª=ƒE㉣êRä+¿gŒ…21"~M>q\pàÅ¿ñÍruÝ0*|oäEû ªyÂf@ÓADe]U4†º\b;?ïUKVšË`6ƒj‚ÎÖë¶ÁÅÁ#ýã"ŠíNwå^de²©?ô¸€ @cÌe%À„c>‹ñ ¯bP²¬ 4 MüÏÉ©Y*AsíözÆÃ‹ÑÀî_´ZMKžyNß½îl=}qÕsJÕõÁµåÍÝ2vâ‚Rkl4­²yt¸gè`»¹,Uí¾Mr¡¦’/۶̆ùvïPÉ<'´¬¢(RÛ¾¶í j­©K¥ko¼³¹3™þQûàÛq­nüòÝÄ#ó "`Y/[ £²e&8†D r)ªÙ©ëj˜ ÒLR©–êõJœÄ ½×oöZÍ­ N·Ï·7%é "lµ^­Ý5‡§—FÉÔRßÊê Bt0à4Ù~|–øýþ;뎂ùìl@3†7Iµ‚I³ü­A ¦áÀOÄ0Â0a9~pÿ€£³çmˆÃ¸ÏŽí³׎Ý&--/)S+±wâ+À„„Hàk0"13w¢ˆ¡]ØC_\5š8I›4Ž_Î>×oÇßý'ëoûy~Ïtðê훼¬ÏD!0Wœ\Ÿieh{–BZcÁ¼ðr³Àå ÀŠfÕ”zX÷ÅöàFÎá$+rTꦩÛV[*…¡XߨŒ³¤R4Þb\Áò,ÉrP2BÓ˜¦°JQx”±§¨ ­^q’Ê@À÷÷¾O&­#fé—ï?îõ3Mê`«c­<Øy¾˜š¦<ù…ã®,ÙºŒuž¡2HBãº:–GðA˸CbtêŒmlAMR°¬…ÂS€2«%µ4‰¯ž…½f¥_&^Œ%.f91LÅ›Ot]5mKl4½»™NšuÙ¯9H_Ä"fè×¾0¥ú0HÆ +”]Œ•õmR¡Êófðç‹BÝ5­,aÆgŒÏ»›šÖ×6¦!˜¤Œ@² CÀT 1àj¶pÂÀsbJ–Ìðm]7D ð‘/¯Úõ†µ$ΣPùå¶”WDWÕ‰;Lc$4tÀ-Êy2j’8ñâø|x5:î%ïv_b ßù¸.à ‡‡£«Ë×»/únÏ&ÛÛUOó@UÀLyïÖ¿¹Y(¶˜0ê‡>úŠÿlsëïÑ¿Îé·ýß—nPpè¤?àälݲJ`¦>¨3רdUi‘Âszg§NoîÇ?iMÛÍ9`I™_ßXÏK–ÒŒ¤•ŠmƒËÓÙmàGóY0uµ ( X{êœÈrútóI»ÝîtÖ¢ürÖ2Ìn·k/›×ã©ëŽÛíUC3Š’»ßŒŽËŠâ¿$]K‹ÓPÎã&i^MIÛgÚy Puá€àÊ…àÊ¥‚ Eü ®ÿ€"(ø]Š+óðŠ2£”A‡Q§¶Îdš6i’¦y4ñ\]B9÷žs¿ï»÷Üsè‹—/ÁrŽ\øTA$8¸R0¾£àE S}?ŸÓ€Á'ø ÷¨A¢Yfsè4!Er£„`œó#ÀËÀÃ-S};êèú¿–SÈèÚ4âð­[â ‚¢hÞ°£P'iE€\ Xž$r‹7 ©de€ãë×nhüI*’}‚š*·[æNÃ{½¾9Q.©Z®ï·nß•IÕgã`8@†¢ÎJy2©½²¹N¡.=x’¨»itÚ‚À·ÌžÑ5 …‰ÇG¤Bœ(=X³mžoƒu’xlG‚†pÀ0õzÇÚ®m[IF±@‘urˆ&B ´0rèÖ12œßÙ®p`È¡«"I‘d\ц8ÐÛÿ¶Ëå¥RéÁÌÕ@#ª–‹Anü0IÒðS*-!±oš … àãg¦m׫ln!>óýÛj¡x¶8===[p}ÎîR©-3q«tGÐsÍ#«½3ˆi¿Rû{pP½y©xjlìk¹üyuEÖðmØjðy¿,¯Àâž,Þõò)ÈžÙvÚ·ïç îž›»wýÚ»çsç/–æN/Ü.ÎæÙ™Q$úlµ»·¾vôãÓ¦Ñ0¨N·sX«W):œš¹<5yeye­²Û\X˜Qrº‚$„~XÓyowx>þ 8ä“ÅŸœû¦Ú]­UƒÀSµ Jƒ»V¿Ó÷ð|rà8ùõz“e9šæHš®×x/ ì ÞJÑ8:—ž&¢(ŽÏôΓv:N;-Ŷ´¥©($ê†èÇpaܲðË¸ÒøXEbjLТ¬|,­í0ma¦3W=—õÌfî=çþÿ“¹ç {î§TY–%ñTZá'@Óáx²qõÂ÷c4Ž€qCÛ!B¨‡¸v+• úOE¤K„$KY*/ (@‘( ׆ԱH0€ÐêôÀýr‚ß *L2‰]`ßc; ؆—íCiÖÇn:¼lwç’YŽß·™oÛ_Â" êòòB&›Ïç'aåo/ëJ2±ùîýÌLMà¤q@., rß'äYAFYžÑ?'OËÅÏ\—Çh \Ÿ¨T§Ìþ€bPVMeK ÏÁ¦)PYÈ@X0;6´††ï_°™+Mî5öM#yÊ8kŽœaMŸóñoU.‹ë¡$4X6?pqÕ˜ÁüÒô˜ÂW ·æÄãóú=áaJ#QR&˜ìi»›™À-û ¯‡e+¤e$ˆ9|MXÆmxD’ \Ø…!¨‹ê åh†$íš™´—‹EU£k’`.Ü!E­–©ëµJ©Oýüm˜mÒšš/.z!k[±T¾òôÅ3¡8_šÓÇìþiyãN˜Å\š€LÓîßÝýz¹ÊPì?³ÓëuëõÙÚlµqø}¡^jŸl¼\¯_U—ò7nÍÏÖ—2…jŒÏôœ0ue*W«æ*z¼PLÏ•§K…zÚ8Úßøº·µýêÃúëû<\}¸zçÇ'íÇOÞìlmè×®¯=zÞ8ø¼²rSfg|ûø©‘ÍN#$Øvd;±‘KÀÁoœõ;íË±Í“ÖæÛ-UM@Èj)QV$IA=”à3ƒ¾ßn†ˆîk\öÜÄNT’@›pÖ“ÿ€¢óéiŒãxût]»vÝìÚ‚n°¨ C” 1 Žœ<é0_‰õ@âAcâA¹™/ÊEƒ ̃mm×®Ûú´ëºÖßó ž?}~Ï÷ûyúäù26Ã"OÔÒz$ÛPp@“ˆ¤g: ¹<ÄDä ÑP‰(¦äi†¥4x$À`MË‚8’d®xŽBphäÐÇá=ˆ¶×i# ŠÈ¥c!„6̰@1<ŠYŽE`Ü“°ç³˜¡IZVFä4¼Dw©Ï{?²Ök››O‚ â‘Ú¨ƒSgWo.î|û9W,Ï”Š49ÉËFƒâst»ãØ–iž×“¨¯·NBϽž/rôXU¹´0Â.ò=•'&§kÇCϧH~( tÊB ‡ˆC™ä0—AWÑØËgïWÖïËc“ú®åM!Žà£dxv¤·t˲zgFݰÚ¹ØÇ:¦™„†ŠôŸ—T6£pb.Š© Ó*”f”ñ±”˜€¹|”Ëðõœ _ètMr„>Ô«F 63ú&¥¡.o€ÐÞå§ò‚’Ýû³šSeIÎRšK¦,£b¯P˜ìã _¥zØ£Ô(•µ»ø¤vTYYý´µ³p{nm}Íè§Ï¿|=î¹6ïŽÆe•ç9Bÿ^¯0­.-/B/šz«R¹WY½+É)ð|øøæÁÃårqª­sÚÄ¥PBŸHW·üQ€’$NNÊda\”ÛÍ]ÓÊ òÊòeÕ«ÕÝïÕm*Vv^l¾ÞÚÚžÎ+K·v÷çËSz­uv~üí»W-Ëž-Íþ:<µ»î¿ú¹… ÇÙÿ[5Û]Üq<§E‘a.ŒÓ¦'„$1”‘Àœ¼š“ÀËÄÒ˶MCÊJÙL€ÖîX1ùG\ÿ€¤sëi"ˆâx‡½tw»Ýn·e·$€b‚D4ú à«‰ úŒ!1ñ‰¼$¼™ž0H5$" B m¥¬]ØíÞŸ`“Ù9çÿÿÍÌ9‡x¾üŒÀ6b×Ä ³x8!ìrrð«†eê(IŠp_Ò4ö<|všÄDx¸è rNuDãç `bþס{^R«×ñµx4‰«ÀLÛÀ4Q&È^&Aºf蛦Hž…ÀÈ‚n0xp(K躸uŸXäAÞ½ýøæÅKZº<2^º77¶øà"÷š­N¯c{î^óôáâ}Ë4Ó&é„$ð£5°{jçTíÊ ?qUAp3.¸ó’P§I h;Ä—ÎaŽ%NLÇÝ=Úmw»õÅ<î òyNà8 Âa(Í ²a„ð½ï¿3î²5™â*…üØŸö…þ–Çêk=[W]CËø> $ñx’ÈÁâÄl„Ø4 &9†ÿ@ïŠÍá>$‘Ïåò GJeÔr=׈`š@ Ñj·ä²|®õSPŽ0dò'/äÀê7‡•úèØ¤Ð…e©"¤¡ŸÛ;µjµÛi+e—©qœqv¡õµ+£#Ý“ã/›Û-ÏqÅbÉGôÀ0µž•Ä”m;´X\ZZ 7\ÌYöksãöÜÔ­Ùi¹ª .`®+Ü×­oº:˜Ÿ ‰¥;¶éôOû¯WWž>y|}j¨S,UðEiY„Üð«yÜX§²À(e„²¬(õ4µÀKBN(I…—jluuíý§õÖιÚh6Ô£Ôiê³×&÷?@îø¡­¯¬½%ya~Þ²’À§4=<ëY7g'“\‰o»>Å2œÀû(ƒ€¦H"Jp¯n ód†´¢ó†65ÜÝßëëç`³Y y°@CâîÀÄÿàèJz›¢ðŒ—ñZ;Ž”†U©!!*ŽˆCÏår‚+g µ¨ ¤M ¨-…4Øñ¾/¼áli~ï}ïûfÞÂnl<ôjšÑC³’¤òˆ@x€Ö@e× Ø¦Èó(McÄ`¶YìZš.ÒÇ–) ÀNHôÝŠæe€ŸF«†‰mωΗqæn–…’ÊH<Æÿ+Ƭ–.óBx©ÈMÑúP$Šª Š-MžÙþîîhøi{}ýIï é.’Îö‡c†çz}ƒ¨-Í4/oøaLû¡–{Ю×ï–R¡ÜK ¢iu=;%‚")rbœ/ãcÐÀsy¨:t†ç%IPÊ’©j¶FYñqÝ8YèÔÉ­µÛàÍk"Fàiµ,í‘[€X14ø³‚Èy¤Ê¢,\°¹¤ž/‰´£“1'(ÖÕezñU” ¬ ú}AÒÀmhcšm7àþS±ÂÏŸ{:ݨ¬cg£‰1ÝZƒH„O``:®†“¢~,ùçñädº@ßöÆ›ƒå•{7œœ>^{ÌaoóÃtòõpgkôöàÕóןßÀ/uY²C¯fùûï25ùùÎþið¯$©]¿pç`ÊÙäLÆ€NtF2­#ÃMÛ09†þ'GײÛ4EÇ'¶ãgœFŽó¢*¥…BU*!¤.Ø”JlX²` |Àž€„ÄÐ ¨‘ªŠŠ>RQÒ44i”4I“&MlÇvüwðÌÂsïyŒfÎÅoß¼Cˆ.ŸWghÚÿÿ@É„dB0üt=zÒŸróª£é©l:ÒÙ¶-róÁœÄ˜X"!wÛ×r6>µ-—Œ^°]´GTdúП1,ÊæÔ¤Ä9Æmàù2™PÈûŽ‹C6´ëƒv껎#yl¨Õn¸ .0ç Z`c«²[Ïׇô,ŽïÞŸŸÏçžM&¤BFç8L"‚‘CÆ‘ù˜çA°ÄôGÔŒ± „ºY¿Žó ¢°aƒŒô 3–›ø90×?ô(ËñLbD0 |HL€š‘†ÃI«u-ª¢®© mzµ\BX ¡®kùÅ…¹LZ˜S8A  _Ñ0šË L÷¬RϲnN‘9¡b¼jX^”Qظ"&R²œRSòhì^u&4Їa()+2ra#¡öŽN–ï­ÀEcÊuÛqÈuqyµß8Ó ­Ý>9.ýö-þöh0b+äsÕ¿•êù©®Hæ=×9<ØÃt ĹF£’ÏE9É0 F*¤N.m¿~õò¼RßßÝPîÆúRVK·ÛFõ¢«©*´a±¸»õbÓ'TÔ‡ªÎ芬°Ív÷Ùæª1DQ€µ×ë1|Œ$„NC£D¶tR¾huž<ݤ\ˆã¦5M° <IJš¦µS$!•HÕÈÚ|zi9¹¢¥²‘0ÃÌdËHÕâk —½Ë›ßýüÉú¹}[ÛAFÉ«í AYBõQëøûá—ÆÁÎé¯âíoõR³^éÒ™›Þ”’¬œ¬5oÎ.:½á˜'6I Ó MLÞ·_™ä ~úOŠÎ¶'m(Šãmïm饅Ry¨(R‹KÆÍl‰Ë¾É>Ÿ¯ö-öFÍf²eî…™ÑÌM` Ø‚j)¥OìÜopsï=ÿóûß{rË«dÁ•“„¶Ý‡È¦•màIé÷– 60baX ëż&HršÈ€ø˜åio[š%ZÊ/%ÃGˆBÄ´L›y 1É ø¬O'ÎÁË%Q¸ G 4SÑ$¼ "±a¸ð‚H@<`·ŽÑŠdÂ75wöQr 7üùÅå¹·P÷÷v+å" È –¶QœGöTÏ‚µÅ®7Íä4œàl{ê.h‡6€:Z^È¡Ÿ~?ÛÙݙˋD!~ J!©Ú:\LÏA©ÃMâ@XË©ÃyQ F¤ÙjÆžÅLn¸ñkuÌÞi\}­5Þ:œÚ·feL`"¥#Aá %$+¹„æòJÃõP¹Gk“Ž>Tª¥¯§'Š 9Å0zÃû^*)µ÷š.¬$ÀÚÞÝFˆs6æéHê¯|×øgÔêÍ¥ëÅ“ÙßË›÷û-}Cûyv¥7t]¸»ÌÓóVûü×uŒÆ[íÕÕ5Ýqf‡‡ŸÞ½ù Þ{‹X,l¨ˆCO>H¢Šó`úp‚Ï*­ˆ5¼pñûŠÇXå¡áXÖxbS«3‚‘Ë™T­^æ1gö¯‹›yØ2b4?ÑùóYµŒâæUce³&qŒ%gpv%tîç?N@èBHó¾±^ñíKǺÁSЯP°ú³îý#bÈJJEirk?Ö·ÚHðf÷.´­‰­—J° ÿàèÜzšÃ8ÞóÚ®¥Ý˜0Œà&ƒ È)Q/¼5^ú±¼1ñ3xåWhb0*q*Ê8ŽA8ȶ¶kûöÜú¼|€6iß<ÿþÏóöÿÒOŸ=cœa¯[¸yD’L‚·'D®àÿ`y`„´ #Ç©T¦Iüòé+/ ížC€‘Mê´u…' ¡R³`!Lï N‘ úP¡$­  Áè‡øèŽçDÎÏ­Š"‚©\¿‚à #’Œ"9ß÷Ö–VdUNãS–”ª“3pÜ1t}†$8Š “pM¤Ÿ“±%ȸG–œ¦2*,½ÕjAAŠ2#°\©PQB%­d²JŸÜîh¦eÚ®M'4è"ÏH+’,€­‚êLB&î±NG+t¶ü­‡¾çDý›[G7-g†ÒJÞqqÜŠfù’œ§é´i‡Wׯõ”,‹ ˜.%“E¥þ»›BK%ÀT>êïÞ~ËÊÙlN@ž«™OâHSx¬Zmë²Ëî8¨ Ž ˆ‰¦8AR☄å°z|ÌÀ¹Y¨óâå+)ÍJ}œav¹5Všø§]Hªú`yªËñÝ¥Õ‡–ë·šQJ7›Ç×m]”ä…{w-O˜Þ¼^Ÿ›-v ]³œ›9CXÛþ±ña£Õ8STº:=º¸0[žd™H×Ο<~Ûð’*!‘ÕûC3¢aû.O;ÃùQ*¤M ]õƒºmƒù€Hi=/!eFRó…’Žüáñ1äa" ½wÒÉæòƒ¥‰êüJu~öÎj¶rÿöÔRuqy†UþÖˆÏ+\®ŽWö´6¢ù˜ Źry­Xœ,Š]žéü®~qòóýæçïwv×»ÃÚá澟˜>²}Ý3ÚKã|HŽîû/GgÎÛDÅñ]{¯ìåcw_q;N¢€"RDJAÄW@|Z *¾%=}$$ÚtI…‰ˆp²!Á$Æ·{/ï½^Ǽ¥˜v4šyó¿ÿÌÓLôù‹— aÅø>Ì5éyUu Ý3LÏ´Û PgYVŸáy_—eY §YE5UÙm†>9tT+¢ËçšFV¸›à–`¶}”$"qŽˆ>x‹¹VêS—¤ †±ý@7-QŒ£QPÕœMlÀXÃehr>·Ùº½±f™8þgv×i/çXF*ZŠ%OFŽjº= ±ýépÄ0°É<ðî¹Â€ ;Ôôp×(®LV$3YÑ1=š ƒÿÿl:žO`È•”‚ÜâÊÓ8E 0 IŠX áMŒPµûÀ®,µÀhæ„$ŸÞíÊî’ϯ•6P.«Ujî²Q–| ;·ÝW®n…”À%`ŸzžE¾gAƒ5P§,‚>ûúöý›““ÚÉÇO߯/{ÊÀq°ÕŽí*5Ð >¾daêÓNg¢ê®O$5«Ú·óÊãtRâÛ£áÁáþÖÞv<)¡Ñ°.r· åøxê€Ø_ÒLRÊlD0*Æ ÿOŽÎ¬µ‰( Ã3'³e&³e_bk±i))Ö”‚Þûü^xQðªà… ˆˆ`/ĔЦkhíjÓ¦Mšmf2ûrüÆ?pnÎá}ßçð-‰'ëϾXœ’L–éZ v@`/È’D%¤ÎCN4=­¤5³ûýPJ¥âZç¥bÁ§À„BMëù1wAÏ\ CŠ¥ã‚Ø`0»!öãqú—ƒÐüŽG¶mãÁàš8‘WŠ%n86†CCÍHGG×<(UËÕÉÈÕõ ÚÚdÐ7 ÔÇPeÜ#WHñVÀÓ’¥{–ø.bàbÀ[„J‚W¡Eñ”RYJaŒ‡ \ÎG‚¸Ô9ÞƒYðcÅÍ‘:]!i#=3ôq02z]Âå‘Ï&Š·8ž¹û_Nk¹Ú½éYð@÷q’„X߃‡à„–‡I1,Ê‹TŽ@15[.V•õ9åÑJm}ž_®×ÖžÖ™öü°r箚/þ€¢+ÙmöDZc[Žíì%KKKZºPT¤Šn .ÜàxÄ•Wî‰Eê Ä µE¥4mê:¡qlDZãe›ß0‡ù5ó-úg¾?õèñXøI@ÿ¸ÔYö´EÒ«Š£$Ta ¢¨ÓV\/yÓ¼ÿ«ÝSý››[%ùÁ…çßø8Õœ±¶x¥•rQv’ÆQØcžâ2xqÐK Ž®#@÷½x¤Ùd”.JÌÝœ’›Ë–í«:@°fù’ b›€?c@(‘sÔPx: Ç}¥¯žuÙLDRãdî.Øî07²Ï9NN‚þ¢PלT6Oz€¾!52,Ïñcn3E,CÒ…½î'ò4 ©ŽŠ>¢¬¯—d|µàQÄÉ@TE7=†¯N44Ne?™u€È?¿-­-å%Q3¬SUI1™êLy› %ñäÓt¬GX “e üôÜ4ì:_È¿~û¦¢-ØiškUšë…ò‚\½Ê–¤\)wcûÖÊæ'‰i:ó_ŽÎ&·i ÃñïÄŽãØ©7q’¦-d•Ø qÔpˆE`Y ±`W‰JÀ‚BÛ¨ 6´IÛ8q'®í8vÌgàÍÈó¾Ïãñ̯߾1ŠQfþp²p¢5 DlêrµÂÎQ s,ŠžÏ' Û™Ú“Éñ·/?~}9ã©ç<î¶j¦,‹àÃé†ÎÅɬµUi[Úåï’ ‡ö „ ôØ(H¼™´ê¸ã™7¦xŒÄÖîtD)*Ra,üY†%$…'xEDy^ µUæ:® 1‰¦H/Ót¹LàUZ“ŠÈ1, \$”HáIº²ïœ #Àéœ)<4^Æ¡P x¥¡ ååøáÄ}¸í_Mì£1xlŽ&±‚ÈI0]Ÿì=WU}]À@vuÃØê4Y¾8Ú£[ÿzpŸÓ Rzç}YÒ¦žvzž$x¯wÓÞÙµÚ5`0‚À*…aËÀîàE‚'UMf,³Ôg!ùb­È¶‚˜„`¬-POœÍç~D–ŠÌmn zætê…$晪Ý2.Æ2Ï®ÀõXŽª¾ 0=’¢ÛZåm¸Û½Zf$_F¾ŠLMÍhä”›.BG¦A8Îi*J¢,èëýmˆ$Žg§³ª“c!Zrigã8ÎdVÕ?®i¬IH§?›…¿Ï/Î~žû!𙣖$QÇjÉ–E¹B‚¬D«㪠IµoÍóýõÁèbœåÔvÚ‹…ïy—´,eU^1yÃt( ‡·6·|¯ŠŸÝÝÛ±më:d$I½vÛ´LÍ0Áô·OŸçÓàÍëSʰí¶ËKhÅf5Doߺ1¸bëŠ@@ªDÊ˧¯öïô?¼}—œýÊƸّ¯©J·¾woGT•F{Íh €%Ó‚©Þw‚‰K¢Á¯(C˜«yQZ  ‘fœ¨™†Óu{}p-¶›qÙd9w:¢$QxäÔí¶$7DÅõæÞðrÒê 8¡`‘D)—¦¹ï/?žœhn7­Ãã­eéA”âzÝu[ƒõž$¡¬ $UMc xZòR‘Å0 ’jÇ·t–Ðkœ(V¯tT$ ÿ è\zÛ¢( f0 ocÌØqh";VÚ$juÕFÝU­ògÓ}ÕMU©‹î¢tÓGMÓÄÆ±ó2zÙ¢BÌ=w¾3‚3ÂÓ£C Ñ2îPN¿¨ò.7iÆCgÄXÐ*I¢¼âdU×Á+‹öœ¼zCú»o\ß@›nù·÷ ×áTà:óØÒÛ4a글n«8‹ "».‘/ Ðdæ/U°mÁì(<—qÍË~:õgË àY Ú‘%Ñ{Ò7 ƒÕMÎ~7!*"<·¦! à»®Js\[äÅv 5"4þ²U²Ø”±,ó–‚ÈâhA\«fE›9dÜñaL©†Å$a W1MÁÞ`PJˆ­AóÁ2Œò—|B¡àðHí¹= jlµe5e6õ­É³×)“«Z œ}‚P­iô󧔤ç¤qŽUKÂ2PAœmQqúdðP=Ï!߸ºÚ›ìl{MJ†­éÀ`1FÀ:š©ŽF»îîž¼ØñvMÓ%°Š¢jf×ê8–Õäs‰M½n„axùûÊu‡§ïß>Îg¤ģ³Õ*p]§Ûí›âÃÙÙýtš&ÅÎxüpG¿~ùö8¿šÏýºÎÄŽöFýÀæavqñ‹·¢žÝÞ>ò¶^Û£ÁÉé;`â›·obËðˆÑÕ5ÝpˆÓ€8ÕÔ["ʲÀÐô2+è‚F”‹ØkTJ-,°[6[Xqv}>X4±\Ð5%,‡,¿ôÿÒ5È æS\çÏ7!Q‹ étÝ?¿÷ÇQnŠ|²?*ªÚD³•W2âB£co6õaZPeFGÏ«uKd Œ,M›o™¹–Ò¤„’l€™Åæ02h%ÿ èz~Ó†¡°‰‰“`'Á! mAšºµjÕ´]¦*M;í¾Óþ×]÷[ê**ÔMTJG›Œ¤Iœìù)Ògû}ï{ö{_µ’ZjJÃùCY/¯†–)…ÐeUH%/+ ®¼dûîü-DGøÏp8ó£²Ã@ý=ˆµ—ƒÑÑa×á4Y. Nå³´b­ëÒ!FÓòÇ`.òÒæZï›:J’{²2EIæAˆ‰§*Ân9Š4ÈȼN é ˆÇvLÊ–²‡˜é5´ âFÃÍ6iQ•}6ŒiÒ/ †Íˆ•¤I&bÿa,ý‰þIÇóš éJa3JõrêLÎu,@uä"m94\ü…Ý”eb½I¿^Í:‰Õ’Py=ìaëÔpZ°î>SÊ ¬{?½Ñ-ƒ°Vß* Ôjªë²ÓÓcÆ8w]LjU£^·m¬Q Àß,×+»i«ÆWQP’^õºœª‘Ä#Ûâ†kÊB}Yþ%ãÛY£N³<шÍdÏ4òý-V«T£iËžžD(v=92vQõ/??MÆÓ£çm9œ"/¾ý„3»½‹öŽÚ¬ûëõ‡ï/~4~÷ú=EÃ÷óé¯ÁçÑðO0¹í˜búòõ¡¥cÇîá†8:9|¸e¿yµËˆw}}sÐ?¦ô0XLjz‘dQ*Ö&Ǩˆ©…̰Œ“q»[ßß?ˆ6«ÑïïÒúˆ5!Ïý,σCê®ÐËÁ Xl™µ÷èÇXGn³F`IÕŸGÜhÉÅòbBLzv~ÖÙiRiº;‘|l†å ¯IAmh@¥”Uàö†ã Ž Î'³ñ·‡5=Z¬¯ym Ûlãpµ.6êl¶ÜÊÚ/ú/GgÓÛ4„áµ7^{cÇñ&nÓ–¶jSQ5*@‰VHpäŸ̡¡zê(-jB’Ú&vl¯×_Ìò,ÙóÎÌ3ë™Ù††ÑÅù7°V†Ñ:#šãDàf‚o-'‹0ÝÙzJJ,R±¶²Öëõ¢$œŽ¦E R¼÷ü¿›¶¾ŒGŸ¿œ¿>V6<0[î.–$U—¬Ó(j;šDÛVë@d^àûŒµ@âqžTØN‹˜°®¨¦iò^RÄ©Êå7Õf6ÁD“%€üøáÄÁ°¥* ë­BT+Š:.Q&¢¬^ÕcÏ+H™ˆeúÕc xÉí´ ‹Îƒ¦†¸šа S%zUåÉŽ €Êš·Ç{ÀZ¦Rû"BU¢ÛÝ8·¦‚X†á‚Ûå€qšûìx/ðgW—ßMCSƒ†úüÅp6õÇ÷:s%•*G)R^É­Ê‘踌 rýóv£Çöw7Wœ¦ÈSU-ÙÊŒäÊŲ†â§‚Ô‹P*òØ ±#ûSÀ'D™PÜäà÷yïEÍv.#Á³8·‰y ŠEœƊ¢–q8Ÿ>„Atw=ìÉ«‘°6~Œ·¶íþáá`°¾±Îáƒ.W—'ïÞ(ðt1Ç6&A¡¦Ûmv7QÉÃ8ì¹­£á«8Ôoo&†ÑðƒÅnƒÕy‚óºk›¤¡Q¥)ê® kNfXöK$ÿ:ºâÜ~Ë5¨iLýìôëé§Óßÿ¸üuvvsp0¤„ú~¸‚';¨íz’Žkõûl:ŸÆœw@ºÞvL¥ŠKà„BàÞ²VKT'¢Ñ Ú¦reè: ‡}—uf³ÉpÐW€U›4Î8U ÛBž¾è¨íÿ ÀÑ¹í¶ aXŽ6ádlŠsŽÒV½ˆú•ò¶•zÛ‹ªP¥j'1q¼€,‹w9t¶wHܰ0‡ïfvÕy ‰1½©—#Ú2J*ˆ%Ã-ÖFVU™Oó2Å’§/Ãäq½]==#-$ËYnŽ$Mù.ÎŦÈou¾HAŒŒà”ˆ!ùž{.xjHI'ºèô/ ¸¹Cê ‚EL„xÛÝ›"iâ@dK¤øMQI=j`‰ït™‚ eâ§îT•=ßçu©Ö·Ô^–À²² »²pV@¸Q¹b€¯ï×¾k†‡€ÈúkZáuúùæ¢Å¾yDˆSmy0Eù$«)i›RÓ²fOÊ]A‰˜3'ÆÉ§3\n4Y÷ç~¹«xó¢X6æ®jÂÓÇ_¬Ê5ÑÑ-ìk†Ò²Zm©+ÑÑ‘3ɨ‹¶µ< mk·z š%Y6Ò[]‹ ½YÒ€ Ó :|QPK-ƒ 4EÀÈ[Êjº•ñú%§ Õ…X–•™9qè3ÈáÙ¦X=<Ò:¶6î% ºEè>­î€Ì—ǧ9 ŒYɾý¦©ÆÞ‹Õø±£%.^^“Ó%éHð.¤ÜŠŽ®Nâëªj_ØÞ´­ë:Ë‘ª½®–aÏEÅÕöøü:}ÆV?W÷/M{v{û%ÇzUF‘ÎZPЈs…×Ei;î"Šú~àXhÒx^ÿ¥4¿¸¼xÝn?¾¿¦¤¤á0Ž\ß½úp†ñ†¼e¿ïÖ±ÐM2ÒdjWc¢<34± P(àcú‰ëú !á"õ¾“Y2 x])=í;JDÙ8 \ÂE84u,‰/¶‚ B€¹–þOŽ®u·i Çiâ$Nì8Í¥MÖ±±ýâ àEø½ÇEBª€´M¥…%mnÍýÂ1ÊøØù.öñçÅÝÝ; î‚Ð,ÚR+:$ü8TkÞ¶5à´é0Âm| p¡¢uô 2Ll¶Ñ5åíÕµ!à EÄ…Ïó¨-ÔaœÁ˜š˜ ¿¤q÷°ªNƒTŸ§ªëFƺ­[ àPy6±§;–9Hž0ƒÂy*—Q×eÜÖñ½Á0åºQê§ýœ ÌÀu’ðÐöœµ`»Ýá~û˶)!X4ºM¨móü´W¥šê²£RD„e †QÌ·m[äèFÀðçR¼§vd“®hPÛº¨’øxJ2c›ÚâÜ¥¯Æ.ûñ}ëù¡õE¨ë†ï?“$ =˜gÉŽ_ÝX¦\)­Ò½$7íÐü|8” ^º©é@¦qæy~xüf…*°‚%îzn°’.abzÄ[:aql>ܾ}ó:\y L‘Á> geÙw³¸€ yH6  uÕSjÅñ>zy‘çi–ýÐM‹Ó€PœÔO»øÅuôßÊóV¡7Ë9·To½t–Ü2À¸Z”:‚ÃÙbºÍ|Ó`+'³±¹¼½ÜD:þߊ(Â6z‡šÀùPI°H͈ʪe©ƒTÖT.ö)úË ú'EW¶5 EØYÄÙ'3m)¼ ¾ƒøÔ/ä‰>‚"!(2 Ñ¤0Ó™,ÎâÄ\Aûê,ʽçâëë×Xõ*UÝ«`¸€¶± :`?RP§†´ÀäY¶ˆGÁËòÁQ1IýÑÕJ(5íh›UUeï›Ã01­®CÔb ®T+%®+ÆáÐÔ§c÷öÍ»¦¼±Í.]„QF#×c#UF¶Í&ôâ ÖÝÓßRò¡¯ÄúëÚ‘¨cD%v‡yª§±û]hYcõïîîVNÓŸÍ/¾ß=e4fÔõÓèléúŒï;Ü€HàH?"ãcË(˜CÇ@cB pfQÄóÐÚÔ:rñùÃÇá°K™a£9ñ™ eî3˜Hí›"Xm[¶QMPIž‚9O³lsû3Jbb™?Öëbµ:ÖhëbµœõŠ· ¼î³|b‘ÚÙ4@ÛíC± à =¿zæ%ÑÙù‚fIa_^-mœD˵ÞP`“9?^®ŠÇrC¦úâ|9ÚÚ4Žss{b¦1³l# vá§÷7‡Ãáå«3Ò¢0òÕ_2¨_Ç$𬆮)€ógP)pIé2áöU]øÇö ÆnG³Åå“‹S[ Cû)¥^ž`Þz09Buå` žšÖÂ*’ƒÐ"D‹â$úd«Zqc:í‰wõÐóÚ6§®Ù¼×TЧ–ey„ÆÀ.€’£ê?ÿ è\rÛ†0,Ф(’)[ÇAÐ3M{Œ.Ú ¶è6èºmÑM»)¤œ—mÅòCÖ“R‡Z 4Î|rþÁ?}Pvü“A€+vÇ7‹ºÚù~‹œ#,ÊТí¼6¦;®W68T¼æm½žíÂÝ&Ž'\xå>¢àñîï0ggñü"™&á$QÔ €Íàú>xN¹yZÆÙ”ºÎvûË2?S›]YíŠúh…«FVUºúlãŽPÉå¯ù ²™Ve¿n}¿^›¥3Î"F”1ìT9m‡V›òPÖ‹Ç—Öi 2¶·Ìúõç{v!!Rh@ÂÓ¡úªØ®¸ëªŠ#3Tà&€ýü\+8|HcXDÏ©O­Ôt/‹»ÅÍf°MšÆ™L½Lc;£=Ûž@ò „ˆ¯=.£(ÖSíŒÎ©:†r-3nÖÏîo·>LX{Ä8Ô^¿¨•ú%ÔÛ&ß?—!LÖ›|,Cw½÷¢öbä/‹f‰ýFëý’gš‘¾)¨‡[HiñDÓV÷Ë8õ_ó W±%4œ ªlï/W*ɸP„ ê2À§©ÂJ»œJœÕ*_.ï/¯Þ‡ÑdÄ,ЦeÕH?´'è[9‚t¤Á·F4~þrýô¼yûî’KŒq‹°z¢ÂPC¶Œî P• ¦è èišalûÞ0ŸZ½DŠ;@Ô— Âsw6ÏT ðãi–ÉU)'ð…Àj£flÒ'†}øóÇïH%Ò*fx§j6µ-DØêº†¬ñm>ÅPv]{ò¿$]KnÓ@öû1öxüJâ:MÓ4m) ¸°AˆS'àp Ä‚- 8›ŠK T „ Qä4mœñ#3¶ù'ì¼ðÆóÏÿ=Æöÿ©/_½…±ã-,.o%V³¢Ê]_OB$r»Š™†"+g;.ro²LWÄ×)Qd¦}_ë¶JÇGÓã"_çwKÏw¦ç§Ã4âjT×ôú÷Õj9ovUÅ(€60LÄ`h†aË’A©8­vü8ˆù†n•e Va[ê:Y–ác¸Ù CºÉ ÎÕ8JY!´QÅQ9šgÛYv‹<‘>q4éi–$³êl?{þèÉÓǤß?»÷wí"Ë;ö\bBLKÝ(騳ZÁÊö’ÐÅ–†À«r]Q/Î&›ÂÑ4<$äèt:šž4mC+jÈ”º3‚[ÍÖ ÌØÊ×7³Ù0E€ÜJ§…1Ϲ¨ªM±Ï¯kUWÀŸ@£€8–\—+/r‡ÃQ˜&2—›%“j¸ xÙÌg‹Ë¯_²ù_Mü¢Ð `+ì9Ä+|Gs‚Ul—±öÃÇOîŸ: ‡¦Š¡kËëu¹œ\ †‰®U¸Á(Hzš)y6ÿ“-æ¬ôz ívq[ðtK ¦ê|ÿöóp|Æ)¸…B„òv‘¶i·’³ümÛ|mëaÒ½{ÿùÍÛ×È1Àòy„ì£BtñB¦.Y]üŸ"£(HŽVîˆãª’²' »¦á®ãDý~¿w0H|À¹Ø†½¡:®”²¾Y#˸ñ"éB€P4TpÃÝ1PãizÚÁ'qÍ:ÆäãñX³Ä¬ÿýÀOiåZ9«eŽ,Ú›Õ´mø†RSÿàèÜv›‚0ìÝul'ñ9vÓ¤mP-\!*®Aâ8ˆgDHÜ¢¾BmUµ¥…¶"qíÖ§8¶×üÃ¥/,­wgæÿFãï>½—§xèâ¯ËKPÇÁÁÞìñØ&Gí õ~s?ÜÔÔ°4YÜ^ÿ9 ‚þÎvÐÉbZE±¼½>oM6½*]ß,Ò¥à†–ÑÜG e`+)+ýŽŠ4{´ûD×tÛõéöS'@ ²SˆÑÏȆƒDù°‹£œÖe 2M?ðLò§<$™PTÄ!wèˆÛ8Þ…ÌVµŒï²Qhù£åãÅäfþíË×?O§O“‡^+°äØ=¦ ÑÔýJÃÀr}Hœ¤Ê‡å¸í¶+òLp¨ß¶šM[qµ3«£Öä)"Ôª©³"ÂÒ{ÕSú57°h¨fÈ›«SÖ1pÿÈ™¡Uõ:JÓ¶ZÎã8…2ÎÀÀ°¡6wËpOQ¬tôÁçU¨w»`J-ÎÎ/¿¿~óöÅËWXnˆ„‡ZÕpÜ<-†CË5­ì!§»y²Ïž¯WÍÑŸºjœ{ã`¾? ‚Sz^¸I¹¢ hÈm|í˜& ¨‹PDÅ•u™'Ë…lKà×d:UÂñM80ÂDEÁ’û¶O ±Ë²¥Ê¨d¬£æ`}ªÌ/þž"N=Ûߺ(òû<„ÆéWÕ¬ÄwHÙt]½A×5]¡cÓ,æʡàd$88§¨Ò²L7ƒPÓ5léØÏó¥Ôˆ¨A 495£™g†çŽÂÑt]5°2¸Áîl¾5Q®.àþÔ¸§Â'×MG XYÇ4®®©éΗiC!k…ý€£kYn†¢R[~ÅJ»IÓ’4´Ó ;~ƒE ¾„[þ‹30<$%ÎÃr'Ž-[uéåÇÑyÈÖ½íwïßêÈ®(`˜e©ªË»ÉõÕè,Oã.\CT­aSÚ”Å?ÿ,—³ét0yQÈà˜0Ém‹À3|ÿö™{½»û{dÖøq£>Q]ó ˆô­Ã‰S—2ìãéÄóõïÅá°ZÅEQ½‰8«ûÌ·™SÕM"R‘j¶çÃcñJÝTµÐ4j&øÜƒs¶H³K¤»³GÞµ†~?°]Þ„Áßßñ zöêåë¯_„ÈØdú¢Qˆ Ä1%EÄÐM… BJS7@(õçyW¤)>(9´)on';PºˆÁ|ºb¶YóÊ ±¼‹ûƒ-ìP¸/¹?5†‰”ÖáújH‹¶ªX²M±ODte)v{y¾º¼„¾Í~ÍK¸SߪUã;á|±Ìò=2–êÔÁ“o`6ÿ­DÛv ¼…R¦ËÑYÀ=ý|8ô‚n4Œމ p >aÚFT‹ëúFºò3! Z˜8(yQÈ?=<¼Ù®×á ßÈJ/'KµY' @‡Ñå@ì£Õ3:TäÍêiþ¸a$IºÀp×Ó±«[$@­HwµlÀ}c¶\›€…‚j¡¤…LÔ㬪m*ÀôÜïãõÄ[™W§Íî|‹lžˆí>ÙEAµ|»ã1Ãi"·-£eÿ é\v›¢0ìñxÆã[b§NÕj¤ÒTˆŠ!ž†G€Ç`ˆw@ìÙÀŠ-Hˆª -ÐKÔ6µi°ãŒí1ÿ)ëH‰=>>ÿ÷ëäœÃŸ>y &¶is#n¬K@®Ž \¾Ÿh‹ÙaCÍOÍfG? ÕãɘYŪ˜G=ßî*š‰SŽ’þ0…ˆ6u \³X¥¼F·¹$ÀV:sµl«@¶°fBàºý <ØŸ"èR­að”Ö 2ÎEcš«*wÇ®j«j¹ê´V>’]½jt¥›«-9\ŽÅ"/ºÐ_±y}Ø#Áäáïù£îÏ¿Oóñön:Z‡°€z¸ßAL÷c@¥œš6¥®p âÿŠ_©eÝñtOIÞv+H`ÐtK*ÑH8dTpr4ËÏ›(´Àãצ¦©¢NI‰i"^o‡ú‘Ü@Q™Lºø¹*/ÓA ú« ^:Ò±„}g÷ÖÅŸ3 £ê•Þß;˜ŸÎ •¸a/ ¨óÛq”'×áúÚûòí+²Ù D ìh(\7;;65h”Œf½¤DÖKƒãu:§* K"€ÍÅYÉEÛ\²Åxk{ëæÎ¢X¦ÃuÛØ.ºâ~8PÑÚh´9èo()¦Šz`¼Ø¢§Ãí¸¯ùÆ¿4}_N&·ß¿ûøêõËÉÖÎý{waU/ÉÏ-Û¦Â×M‹Òó®‡Ì 0Ž¥-Ë º,Ä2­ît Q¯¯Èâ8ÈwÈqMÓÑö5ªoñÀ#ûi¦¿ý0^Òè›Ð÷c!¼bY¶m— SpÚÁáɳç/²Œ¿yûáÓçéÚèZÒ‹³óâÆÆ†ú¬:j©É ÒŒ£Ë4øOŽÎe¹i Êï¶ÇnKJ[Z«n`Ã0 OÖ ;^€%ìX²‚aX”aÓ¦…¡’”¤²(–-Ë—Èá¨?€,ý:çûeéHëŠÜØÔ랣®SÕ9Û”V€Ã»{Y؉Ûoéõ a/‰˜‚S- ~õ7™¥I„X{^°ï HzsyyÎË+ámíõÞÃ5uëÀ´†¹0ÚЂÇÙ¿,繯߼åU ã$‘Ì`,9#d.[‰]/»Šm gˆ‚ëZªU}—3ª«r›2cqVP‰*È3`™Ã`0:<ÿ:”e¼,š®Õ?z‚tsÇ–cLn’Ó³‹« Æ-€·ê"MºÓ¸¬ŠN‡ÐÖ5=ÈZà«¶µdÏ®‘Ìë"]åiFÐÑ0JHÊ%IK‘=­\Ðv½Æ@±AÄ¥ðÔÄH³DÝU²”ˆCŠhyù[1¤Š7öš²ŽÛw"“ ¡€Ó—q!˜¥tµP»Ÿ)°ÁpgékJDZwvT¥|ÎØKÏîËd$ q6;š`wo÷Nè)øÔ)¹úó{6½&SMë Bpeïï÷W”}ùz6'‹§ÏžŽŽE.!˜3&è²deóãç…àUžCû  zÀ¹VdRv{ûAu{Ü3­(tÛ¶ð0:yqÏô¦Ù"óUÅ™ú—Q¥‹|Ïq4-MæjW=g¶‰¢¨ü¢Œ 4¸öÁׄðõ•h”ðCËG‡LdÂŒ5nK^f)dz2¨îyÍFŸŽçñͶý{ûG–á$`ôû˜rúþ—ë¿{õ2êiÑ~øø$ØÔ«ñäû·³O u×2¤hôµ´šÍX:—ݦ( ûî8¶çR@•J]°C$V A‘è†m%xÞŠ ¯€Ä6H .¥µ.IC'JâŒ=¾Œã ÿTÌrdéŒ43çÿ~yæŒüêðPoiµªÑœÅifúÕaÏ´´ªŽSHR¥cjTD4$Än·g¾çûBB+gÓéh4&«åÎÞm–±™çcþlÓÅ&„À©sOÊ/áÁêt’$ÿãž‚FÇ;ÿûöÍë{÷B@‹J I¬R­ a_B24®$$¤1Už%"BèŠÔr%Èeœ²0b=»Ûµ]ç'¶S±<9ad4><4e2d><6587> LanguageID=$0404 LanguageCodepage=950 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;TitleFontName=Arial ;TitleFontSize=29 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=安è£ç¨‹å¼ SetupWindowTitle=%1 安è£ç¨‹å¼ UninstallAppTitle=è§£é™¤å®‰è£ UninstallAppFullTitle=è§£é™¤å®‰è£ %1 ; *** Misc. common InformationTitle=è¨Šæ¯ ConfirmTitle=ç¢ºèª ErrorTitle=錯誤 ; *** SetupLdr messages SetupLdrStartupMessage=é€™å°‡æœƒå®‰è£ %1。您想è¦ç¹¼çºŒå—Žï¼Ÿ LdrCannotCreateTemp=無法建立暫存檔案。安è£ç¨‹å¼å°‡æœƒçµæŸã€‚ LdrCannotExecTemp=無法執行暫存檔案。安è£ç¨‹å¼å°‡æœƒçµæŸã€‚ HelpTextNote= ; *** Startup error messages LastErrorMessage=%1%n%n錯誤 %2: %3 SetupFileMissing=安è£è³‡æ–™å¤¾ä¸­éºå¤±æª”案 %1。請修正此å•é¡Œæˆ–é‡æ–°å–得此軟體。 SetupFileCorrupt=å®‰è£æª”æ¡ˆå·²ç¶“ææ¯€ã€‚è«‹é‡æ–°å–得此軟體。 SetupFileCorruptOrWrongVer=å®‰è£æª”æ¡ˆå·²ç¶“ææ¯€ï¼Œæˆ–與安è£ç¨‹å¼çš„版本ä¸ç¬¦ã€‚è«‹é‡æ–°å–得此軟體。 InvalidParameter=æŸå€‹ç„¡æ•ˆçš„變é‡å·²è¢«å‚³éžåˆ°äº†å‘½ä»¤åˆ—:%n%n%1 SetupAlreadyRunning=安è£ç¨‹å¼å·²ç¶“在執行。 WindowsVersionNotSupported=本安è£ç¨‹å¼ä¸¦ä¸æ”¯æ´ç›®å‰åœ¨é›»è…¦æ‰€é‹è¡Œçš„ Windows 版本。 WindowsServicePackRequired=本安è£ç¨‹å¼éœ€è¦ %1 Service Pack %2 或更新。 NotOnThisPlatform=這個程å¼ç„¡æ³•在 %1 執行。 OnlyOnThisPlatform=這個程å¼å¿…須在 %1 執行。 OnlyOnTheseArchitectures=這個程å¼åªèƒ½åœ¨å°ˆé–€ç‚ºä»¥ä¸‹è™•ç†å™¨æž¶æ§‹è€Œè¨­è¨ˆçš„ Windows 上安è£:%n%n%1 WinVersionTooLowError=這個程å¼å¿…須在 %1 版本 %2 或以上的系統執行。 WinVersionTooHighError=這個程å¼ç„¡æ³•安è£åœ¨ %1 版本 %2 或以上的系統。 AdminPrivilegesRequired=您必須登入æˆç³»çµ±ç®¡ç†å“¡ä»¥å®‰è£é€™å€‹ç¨‹å¼ã€‚ PowerUserPrivilegesRequired=您必須登入æˆå…·æœ‰ç³»çµ±ç®¡ç†å“¡æˆ– Power User 權é™çš„使用者以安è£é€™å€‹ç¨‹å¼ã€‚ SetupAppRunningError=安è£ç¨‹å¼åµæ¸¬åˆ° %1 正在執行。%n%n請關閉該程å¼å¾ŒæŒ‰ 「確定〠繼續,或按 ã€Œå–æ¶ˆã€ 離開。 UninstallAppRunningError=解除安è£ç¨‹å¼åµæ¸¬åˆ° %1 正在執行。%n%n請關閉該程å¼å¾ŒæŒ‰ 「確定〠繼續,或按 ã€Œå–æ¶ˆã€ 離開。 ; *** Startup questions PrivilegesRequiredOverrideTitle=鏿“‡å®‰è£ç¨‹å¼å®‰è£æ¨¡å¼ PrivilegesRequiredOverrideInstruction=鏿“‡å®‰è£æ¨¡å¼ PrivilegesRequiredOverrideText1=å¯ä»¥ç‚ºæ‰€æœ‰ä½¿ç”¨è€…å®‰è£ %1 (需è¦ç³»çµ±ç®¡ç†æ¬Šé™),或是僅為您安è£ã€‚ PrivilegesRequiredOverrideText2=å¯ä»¥åƒ…ç‚ºæ‚¨å®‰è£ %1ï¼Œæˆ–æ˜¯ç‚ºæ‰€æœ‰ä½¿ç”¨è€…å®‰è£ (需è¦ç³»çµ±ç®¡ç†æ¬Šé™)。 PrivilegesRequiredOverrideAllUsers=ç‚ºæ‰€æœ‰ä½¿ç”¨è€…å®‰è£ (&A) PrivilegesRequiredOverrideAllUsersRecommended=ç‚ºæ‰€æœ‰ä½¿ç”¨è€…å®‰è£ (建議é¸é …) (&A) PrivilegesRequiredOverrideCurrentUser=åƒ…ç‚ºæˆ‘å®‰è£ (&M) PrivilegesRequiredOverrideCurrentUserRecommended=åƒ…ç‚ºæˆ‘å®‰è£ (建議é¸é …) (&M) ; *** Misc. errors ErrorCreatingDir=安è£ç¨‹å¼ç„¡æ³•建立資料夾“%1â€ã€‚ ErrorTooManyFilesInDir=無法在資料夾“%1â€å…§å»ºç«‹æª”案,因為資料夾內有太多的檔案。 ; *** Setup common messages ExitSetupTitle=çµæŸå®‰è£ç¨‹å¼ ExitSetupMessage=安è£å°šæœªå®Œæˆã€‚如果您ç¾åœ¨çµæŸå®‰è£ç¨‹å¼ï¼Œé€™å€‹ç¨‹å¼å°‡ä¸æœƒè¢«å®‰è£ã€‚%n%n您å¯ä»¥ç¨å¾Œå†åŸ·è¡Œå®‰è£ç¨‹å¼ä»¥å®Œæˆå®‰è£ç¨‹åºã€‚您ç¾åœ¨è¦çµæŸå®‰è£ç¨‹å¼å—Ž? AboutSetupMenuItem=關於安è£ç¨‹å¼ (&A)... AboutSetupTitle=關於安è£ç¨‹å¼ AboutSetupMessage=%1 版本 %2%n%3%n%n%1 ç¶²å€:%n%4 AboutSetupNote= TranslatorNote= ; *** Buttons ButtonBack=< 上一步(&B) ButtonInstall=安è£(&I) ButtonNext=下一步(&N) > ButtonOK=確定 ButtonCancel=å–æ¶ˆ ButtonYes=是(&Y) ButtonYesToAll=全部皆是 (&A) ButtonNo=å¦(&N) ButtonNoToAll=å…¨éƒ¨çš†å¦ (&O) ButtonFinish=å®Œæˆ (&F) ButtonBrowse=ç€è¦½ (&B)... ButtonWizardBrowse=ç€è¦½ (&R)... ButtonNewFolder=建立新資料夾 (&M) ; *** "Select Language" dialog messages SelectLanguageTitle=鏿“‡å®‰è£èªžè¨€ SelectLanguageLabel=鏿“‡åœ¨å®‰è£éŽç¨‹ä¸­ä½¿ç”¨çš„語言: ; *** Common wizard text ClickNext=按 「下一步〠繼續安è£ï¼Œæˆ–按 ã€Œå–æ¶ˆã€ çµæŸå®‰è£ç¨‹å¼ã€‚ BeveledLabel= BrowseDialogTitle=ç€è¦½è³‡æ–™å¤¾ BrowseDialogLabel=在下é¢çš„è³‡æ–™å¤¾åˆ—è¡¨ä¸­é¸æ“‡ä¸€å€‹è³‡æ–™å¤¾ï¼Œç„¶å¾ŒæŒ‰ 「確定ã€ã€‚ NewFolderName=新資料夾 ; *** "Welcome" wizard page WelcomeLabel1=歡迎使用 [name] 安è£ç¨‹å¼ WelcomeLabel2=這個安è£ç¨‹å¼å°‡æœƒå®‰è£ [name/ver] 到您的電腦。%n%n我們強烈建議您在安è£éŽç¨‹ä¸­é—œé–‰å…¶å®ƒçš„æ‡‰ç”¨ç¨‹å¼ï¼Œä»¥é¿å…與安è£ç¨‹å¼ç™¼ç”Ÿæ²–çªã€‚ ; *** "Password" wizard page WizardPassword=密碼 PasswordLabel1=這個安è£ç¨‹å¼å…·æœ‰å¯†ç¢¼ä¿è­·ã€‚ PasswordLabel3=請輸入密碼,然後按 「下一步〠繼續。密碼是å€åˆ†å¤§å°å¯«çš„。 PasswordEditLabel=密碼 (&P): IncorrectPassword=æ‚¨è¼¸å…¥çš„å¯†ç¢¼ä¸æ­£ç¢ºï¼Œè«‹é‡æ–°è¼¸å…¥ã€‚ ; *** "License Agreement" wizard page WizardLicense=授權åˆç´„ LicenseLabel=請閱讀以下授權åˆç´„。 LicenseLabel3=請閱讀以下授權åˆç´„,您必須接å—åˆç´„çš„å„é …æ¢æ¬¾æ‰èƒ½ç¹¼çºŒå®‰è£ã€‚ LicenseAccepted=æˆ‘åŒæ„ (&A) LicenseNotAccepted=我ä¸åŒæ„ (&D) ; *** "Information" wizard pages WizardInfoBefore=è¨Šæ¯ InfoBeforeLabel=在繼續安è£ä¹‹å‰è«‹é–±è®€ä»¥ä¸‹é‡è¦è³‡è¨Šã€‚ InfoBeforeClickLabel=當您準備好繼續安è£ï¼Œè«‹æŒ‰ 「下一步ã€ã€‚ WizardInfoAfter=è¨Šæ¯ InfoAfterLabel=在繼續安è£ä¹‹å‰è«‹é–±è®€ä»¥ä¸‹é‡è¦è³‡è¨Šã€‚ InfoAfterClickLabel=當您準備好繼續安è£ï¼Œè«‹æŒ‰ 「下一步ã€ã€‚ ; *** "User Information" wizard page WizardUserInfo=使用者資訊 UserInfoDesc=請輸入您的資料。 UserInfoName=使用者å稱(&U): UserInfoOrg=組織(&O): UserInfoSerial=åºè™Ÿ(&S): UserInfoNameRequired=您必須輸入您的å稱。 ; *** "Select Destination Location" wizard page WizardSelectDir=鏿“‡ç›®çš„資料夾 SelectDirDesc=鏿“‡å®‰è£ç¨‹å¼å®‰è£ [name] çš„ä½ç½®ã€‚ SelectDirLabel3=安è£ç¨‹å¼å°‡æœƒæŠŠ [name] 安è£åˆ°ä¸‹é¢çš„資料夾。 SelectDirBrowseLabel=按 ã€Œä¸‹ä¸€æ­¥ã€ ç¹¼çºŒï¼Œå¦‚æžœæ‚¨æƒ³é¸æ“‡å¦ä¸€å€‹è³‡æ–™å¤¾ï¼Œè«‹æŒ‰ 「ç€è¦½ã€ã€‚ DiskSpaceGBLabel=æœ€å°‘éœ€è¦ [gb] GB ç£ç¢Ÿç©ºé–“。 DiskSpaceMBLabel=æœ€å°‘éœ€è¦ [mb] MB ç£ç¢Ÿç©ºé–“。 CannotInstallToNetworkDrive=安è£ç¨‹å¼ç„¡æ³•å®‰è£æ–¼ç¶²çµ¡ç£ç¢Ÿæ©Ÿã€‚ CannotInstallToUNCPath=安è£ç¨‹å¼ç„¡æ³•å®‰è£æ–¼ UNC 路徑。 InvalidPath=您必須輸入完整的路徑å稱åŠç£ç¢Ÿæ©Ÿä»£ç¢¼ã€‚%n%n例如 C:\App 或 UNC è·¯å¾‘æ ¼å¼ \\伺æœå™¨\共用資料夾。 InvalidDrive=您é¸å–çš„ç£ç¢Ÿæ©Ÿæˆ– UNC å稱ä¸å­˜åœ¨æˆ–無法存å–ï¼Œè«‹é¸æ“‡å…¶ä»–的目的地。 DiskSpaceWarningTitle=ç£ç¢Ÿç©ºé–“ä¸è¶³ DiskSpaceWarning=安è£ç¨‹å¼éœ€è¦è‡³å°‘ %1 KB çš„ç£ç¢Ÿç©ºé–“,您所é¸å–çš„ç£ç¢Ÿåªæœ‰ %2 KB å¯ç”¨ç©ºé–“。%n%n您è¦ç¹¼çºŒå®‰è£å—Žï¼Ÿ DirNameTooLong=資料夾å稱或路徑太長。 InvalidDirName=資料夾åç¨±ä¸æ­£ç¢ºã€‚ BadDirName32=資料夾å稱ä¸å¾—包å«ä»¥ä¸‹ç‰¹æ®Šå­—å…ƒ:%n%n%1 DirExistsTitle=資料夾已經存在 DirExists=資料夾:%n%n%1%n%n 已經存在。ä»è¦å®‰è£åˆ°è©²è³‡æ–™å¤¾å—Žï¼Ÿ DirDoesntExistTitle=資料夾ä¸å­˜åœ¨ DirDoesntExist=資料夾:%n%n%1%n%n ä¸å­˜åœ¨ã€‚è¦å»ºç«‹è©²è³‡æ–™å¤¾å—Žï¼Ÿ ; *** "Select Components" wizard page WizardSelectComponents=鏿“‡å…ƒä»¶ SelectComponentsDesc=鏿“‡å°‡æœƒè¢«å®‰è£çš„元件。 SelectComponentsLabel2=鏿“‡æ‚¨æƒ³è¦å®‰è£çš„å…ƒä»¶ï¼›æ¸…é™¤æ‚¨ä¸æƒ³å®‰è£çš„元件。然後按 「下一步〠繼續安è£ã€‚ FullInstallation=å®Œæ•´å®‰è£ ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=最å°å®‰è£ CustomInstallation=è‡ªè¨‚å®‰è£ NoUninstallWarningTitle=元件已存在 NoUninstallWarning=安è£ç¨‹å¼åµæ¸¬åˆ°ä»¥ä¸‹å…ƒä»¶å·²ç¶“安è£åœ¨æ‚¨çš„電腦上:%n%n%1%n%nå–æ¶ˆé¸æ“‡é€™äº›å…ƒä»¶å°‡ä¸æœƒç§»é™¤å®ƒå€‘。%n%n您ä»ç„¶è¦ç¹¼çºŒå—Žï¼Ÿ ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceGBLabel=ç›®å‰çš„鏿“‡éœ€è¦è‡³å°‘ [gb] GB ç£ç¢Ÿç©ºé–“。 ComponentsDiskSpaceMBLabel=ç›®å‰çš„鏿“‡éœ€è¦è‡³å°‘ [mb] MB ç£ç¢Ÿç©ºé–“。 ; *** "Select Additional Tasks" wizard page WizardSelectTasks=鏿“‡é™„加的工作 SelectTasksDesc=鏿“‡è¦åŸ·è¡Œçš„附加工作。 SelectTasksLabel2=鏿“‡å®‰è£ç¨‹å¼åœ¨å®‰è£ [name] 時è¦åŸ·è¡Œçš„附加工作,然後按 「下一步ã€ã€‚ ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=鏿“‡ã€Œé–‹å§‹ã€åŠŸèƒ½è¡¨çš„è³‡æ–™å¤¾ SelectStartMenuFolderDesc=鏿“‡å®‰è£ç¨‹å¼å»ºç«‹ç¨‹å¼çš„æ·å¾‘çš„ä½ç½®ã€‚ SelectStartMenuFolderLabel3=安è£ç¨‹å¼å°‡æœƒæŠŠç¨‹å¼çš„æ·å¾‘å»ºç«‹åœ¨ä¸‹é¢çš„「開始ã€åŠŸèƒ½è¡¨è³‡æ–™å¤¾ã€‚ SelectStartMenuFolderBrowseLabel=按 ã€Œä¸‹ä¸€æ­¥ã€ ç¹¼çºŒï¼Œå¦‚æžœæ‚¨æƒ³é¸æ“‡å¦ä¸€å€‹è³‡æ–™å¤¾ï¼Œè«‹æŒ‰ 「ç€è¦½ã€ã€‚ MustEnterGroupName=您必須輸入一個資料夾的å稱。 GroupNameTooLong=資料夾å稱或路徑太長。 InvalidGroupName=資料夾åç¨±ä¸æ­£ç¢ºã€‚ BadGroupName=資料夾å稱ä¸å¾—包å«ä¸‹åˆ—å­—å…ƒ:%n%n%1 NoProgramGroupCheck2=ä¸è¦åœ¨ã€Œé–‹å§‹ã€åŠŸèƒ½è¡¨ä¸­å»ºç«‹è³‡æ–™å¤¾ (&D) ; *** "Ready to Install" wizard page WizardReady=æº–å‚™å®‰è£ ReadyLabel1=安è£ç¨‹å¼å°‡é–‹å§‹å®‰è£ [name] 到您的電腦中。 ReadyLabel2a=按下 「安è£ã€ 繼續安è£ï¼Œæˆ–按 ã€Œä¸Šä¸€æ­¥ã€ é‡æ–°æª¢è¦–或設定å„é¸é …的內容。 ReadyLabel2b=按下 「安è£ã€ 繼續安è£ã€‚ ReadyMemoUserInfo=使用者資訊 ReadyMemoDir=目的資料夾: ReadyMemoType=安è£åž‹æ…‹: ReadyMemoComponents=鏿“‡çš„元件: ReadyMemoGroup=「開始ã€åŠŸèƒ½è¡¨è³‡æ–™å¤¾: ReadyMemoTasks=附加工作: ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile DownloadingLabel=正在下載é¡å¤–檔案... ButtonStopDownload=åœæ­¢ä¸‹è¼‰ (&S) StopDownload=您確定è¦åœæ­¢ä¸‹è¼‰å—Žï¼Ÿ ErrorDownloadAborted=å·²åœæ­¢ä¸‹è¼‰ ErrorDownloadFailed=下載失敗: %1 %2 ErrorDownloadSizeFailed=å–得檔案大å°å¤±æ•—: %1 %2 ErrorFileHash1=檔案雜湊失敗: %1 ErrorFileHash2=檔案雜湊無效: 必須為 %1,收到 %2 ErrorProgress=進度無效: %1 之 %2 ErrorFileSize=檔案大å°ç„¡æ•ˆ: 必須為 %1,收到 %2 ; *** "Preparing to Install" wizard page WizardPreparing=準備安è£ç¨‹å¼ PreparingDesc=安è£ç¨‹å¼æº–備將 [name] 安è£åˆ°æ‚¨çš„電腦上。 PreviousInstallNotCompleted=å…ˆå‰çš„安è£/ 解除安è£å°šæœªå®Œæˆï¼Œæ‚¨å¿…é ˆé‡æ–°å•Ÿå‹•電腦以完æˆè©²å®‰è£ã€‚%n%nåœ¨é‡æ–°å•Ÿå‹•電腦之後,請å†åŸ·è¡Œé€™å€‹ç¨‹å¼ä¾†å®‰è£ [name]。 CannotContinue=安è£ç¨‹å¼ç„¡æ³•繼續。請按 ã€Œå–æ¶ˆã€ 離開。 ApplicationsFound=下é¢çš„æ‡‰ç”¨ç¨‹å¼æ­£åœ¨ä½¿ç”¨å®‰è£ç¨‹å¼æ‰€éœ€è¦æ›´æ–°çš„æª”案。建議您å…許安è£ç¨‹å¼è‡ªå‹•關閉這些應用程å¼ã€‚ ApplicationsFound2=下é¢çš„æ‡‰ç”¨ç¨‹å¼æ­£åœ¨ä½¿ç”¨å®‰è£ç¨‹å¼æ‰€éœ€è¦æ›´æ–°çš„æª”案。建議您å…許安è£ç¨‹å¼è‡ªå‹•關閉這些應用程å¼ã€‚當安è£éŽç¨‹çµæŸå¾Œï¼Œæœ¬å®‰è£ç¨‹å¼å°‡æœƒå˜—è©¦é‡æ–°é–‹å•Ÿè©²æ‡‰ç”¨ç¨‹å¼ã€‚ CloseApplications=é—œé–‰æ‡‰ç”¨ç¨‹å¼ (&A) DontCloseApplications=ä¸è¦é—œé–‰æ‡‰ç”¨ç¨‹å¼ (&D) ErrorCloseApplications=安è£ç¨‹å¼ç„¡æ³•自動關閉所有應用程å¼ã€‚建議您在繼續å‰å…ˆé—œé–‰æ‰€æœ‰æ‡‰ç”¨ç¨‹å¼ä½¿ç”¨çš„æª”案。 PrepareToInstallNeedsRestart=安è£ç¨‹å¼å¿…é ˆé‡æ–°å•Ÿå‹•æ‚¨çš„é›»è…¦ã€‚é‡æ–°å•Ÿå‹•å¾Œï¼Œè«‹å†æ¬¡åŸ·è¡Œå®‰è£ç¨‹å¼ä»¥å®Œæˆ [name] 的安è£ã€‚%n%n您想è¦ç¾åœ¨é‡æ–°å•Ÿå‹•電腦嗎? ; *** "Installing" wizard page WizardInstalling=æ­£åœ¨å®‰è£ InstallingLabel=è«‹ç¨å€™ï¼Œå®‰è£ç¨‹å¼æ­£åœ¨å°‡ [name] 安è£åˆ°æ‚¨çš„電腦上 ; *** "Setup Completed" wizard page FinishedHeadingLabel=安è£å®Œæˆ FinishedLabelNoIcons=安è£ç¨‹å¼å·²ç¶“å°‡ [name] 安è£åœ¨æ‚¨çš„電腦上。 FinishedLabel=安è£ç¨‹å¼å·²ç¶“å°‡ [name] 安è£åœ¨æ‚¨çš„電腦中,您å¯ä»¥é¸æ“‡ç¨‹å¼çš„圖示來執行該應用程å¼ã€‚ ClickFinish=按 「完æˆã€ ä»¥çµæŸå®‰è£ç¨‹å¼ã€‚ FinishedRestartLabel=è¦å®Œæˆ [name] 的安è£ï¼Œå®‰è£ç¨‹å¼å¿…é ˆé‡æ–°å•Ÿå‹•您的電腦。您想è¦ç¾åœ¨é‡æ–°å•Ÿå‹•電腦嗎? FinishedRestartMessage=è¦å®Œæˆ [name] 的安è£ï¼Œå®‰è£ç¨‹å¼å¿…é ˆé‡æ–°å•Ÿå‹•您的電腦。%n%n您想è¦ç¾åœ¨é‡æ–°å•Ÿå‹•電腦嗎? ShowReadmeCheck=是,我è¦é–±è®€è®€æˆ‘檔案。 YesRadio=是,立å³é‡æ–°å•Ÿå‹•電腦(&Y) NoRadio=å¦ï¼Œæˆ‘ç¨å¾Œé‡æ–°å•Ÿå‹•電腦(&N) ; used for example as 'Run MyProg.exe' RunEntryExec=執行 %1 ; used for example as 'View Readme.txt' RunEntryShellExec=檢視 %1 ; *** "Setup Needs the Next Disk" ChangeDiskTitle=安è£ç¨‹å¼éœ€è¦ä¸‹ä¸€å¼µç£ç‰‡ SelectDiskLabel2=è«‹æ’å…¥ç£ç‰‡ %1,然後按 「確定ã€ã€‚%n%n如果檔案ä¸åœ¨ä»¥ä¸‹æ‰€é¡¯ç¤ºçš„資料夾之中,請輸入正確的資料夾å稱或按 [ç€è¦½] é¸å–。 PathLabel=路徑(&P): FileNotInDir2=檔案“%1â€ç„¡æ³•在“%2â€æ‰¾åˆ°ã€‚è«‹æ’入正確的ç£ç‰‡æˆ–鏿“‡å…¶å®ƒçš„資料夾。 SelectDirectoryLabel=請指定下一張ç£ç‰‡çš„ä½ç½®ã€‚ ; *** Installation phase messages SetupAborted=å®‰è£æ²’有完æˆã€‚%n%nè«‹æ›´æ­£å•é¡Œå¾Œé‡æ–°å®‰è£ä¸€æ¬¡ã€‚ AbortRetryIgnoreSelectAction=é¸å–動作 AbortRetryIgnoreRetry=è«‹å†è©¦ä¸€æ¬¡ (&T) AbortRetryIgnoreIgnore=ç•¥éŽéŒ¯èª¤ä¸¦ç¹¼çºŒ (&I) AbortRetryIgnoreCancel=å–æ¶ˆå®‰è£ ; *** Installation status messages StatusClosingApplications=正在關閉應用程å¼... StatusCreateDirs=正在建立資料夾... StatusExtractFiles=正在解壓縮檔案... StatusCreateIcons=正在建立程å¼é›†åœ–示... StatusCreateIniEntries=寫入 INI 檔案的項目... StatusCreateRegistryEntries=正在更新系統登錄... StatusRegisterFiles=正在登錄檔案... StatusSavingUninstall=儲存解除安è£è³‡è¨Š... StatusRunProgram=正在完æˆå®‰è£... StatusRestartingApplications=æ­£åœ¨é‡æ–°é–‹å•Ÿæ‡‰ç”¨ç¨‹å¼... StatusRollback=正在復原變更... ; *** Misc. errors ErrorInternal2=內部錯誤: %1 ErrorFunctionFailedNoCode=%1 失敗 ErrorFunctionFailed=%1 失敗;代碼 %2 ErrorFunctionFailedWithMessage=%1 失敗;代碼 %2.%n%3 ErrorExecutingProgram=無法執行檔案:%n%1 ; *** Registry errors ErrorRegOpenKey=無法開啟登錄éµ:%n%1\%2 ErrorRegCreateKey=無法建立登錄項目:%n%1\%2 ErrorRegWriteKey=無法變更登錄項目:%n%1\%2 ; *** INI errors ErrorIniEntry=在檔案“%1â€å»ºç«‹ INI 項目錯誤。 ; *** File copying errors FileAbortRetryIgnoreSkipNotRecommended=ç•¥éŽé€™å€‹æª”案 (ä¸å»ºè­°) (&S) FileAbortRetryIgnoreIgnoreNotRecommended=ç•¥éŽéŒ¯èª¤ä¸¦ç¹¼çºŒ (ä¸å»ºè­°) (&I) SourceDoesntExist=ä¾†æºæª”案“%1â€ä¸å­˜åœ¨ã€‚ SourceIsCorrupted=ä¾†æºæª”æ¡ˆå·²ç¶“ææ¯€ã€‚ ExistingFileReadOnly2=無法å–ä»£ç¾æœ‰æª”案,因為檔案已標示為唯讀。 ExistingFileReadOnlyRetry=移除唯讀屬性並é‡è©¦ (&R) ExistingFileReadOnlyKeepExisting=ä¿ç•™ç¾æœ‰æª”案 (&K) ErrorReadingExistingDest=讀å–一個已存在的檔案時發生錯誤: FileExistsSelectAction=鏿“‡æ“作 FileExists2=檔案已存在。 FileExistsOverwriteExisting=è¦†å¯«ç¾æœ‰æª”案 FileExistsKeepExisting=ä¿ç•™ç¾æœ‰æª”案 (&O) FileExistsOverwriteOrKeepAll=å°ä¸‹æ¬¡è¡çªåŸ·è¡Œç›¸åŒæ“作 (&D) ExistingFileNewerSelectAction=鏿“‡æ“作 ExistingFileNewer2=ç¾æœ‰æª”案比安è£ç¨‹å¼å˜—試安è£çš„æª”案還新。 ExistingFileNewerOverwriteExisting=è¦†å¯«ç¾æœ‰æª”案 (&O) ExistingFileNewerKeepExisting=ä¿ç•™ç¾æœ‰æª”案 (&K) (建議é¸é …) ExistingFileNewerOverwriteOrKeepAll=å°ä¸‹æ¬¡è¡çªåŸ·è¡Œç›¸åŒæ“作 (&D) ErrorChangingAttr=在變更檔案屬性時發生錯誤: ErrorCreatingTemp=在目的資料夾中建立檔案時發生錯誤: ErrorReadingSource=讀å–原始檔案時發生錯誤: ErrorCopying=複製檔案時發生錯誤: ErrorReplacingExistingFile=å–代檔案時發生錯誤: ErrorRestartReplace=釿–°å•Ÿå‹•電腦後å–代檔案失敗: ErrorRenamingTemp=在目的資料夾變更檔案å稱時發生錯誤: ErrorRegisterServer=無法注冊 DLL/OCX 檔案: %1。 ErrorRegSvr32Failed=RegSvr32 失敗;退出代碼 %1 ErrorRegisterTypeLib=無法注冊類型庫: %1。 ; *** Uninstall display name markings ; used for example as 'My Program (32-bit)' UninstallDisplayNameMark=%1 (%2) ; used for example as 'My Program (32-bit, All users)' UninstallDisplayNameMarks=%1 (%2, %3) UninstallDisplayNameMark32Bit=32 ä½å…ƒ UninstallDisplayNameMark64Bit=64 ä½å…ƒ UninstallDisplayNameMarkAllUsers=所有使用者 UninstallDisplayNameMarkCurrentUser=ç›®å‰ä½¿ç”¨è€… ; *** Post-installation errors ErrorOpeningReadme=開啟讀我檔案時發生錯誤。 ErrorRestartingComputer=安è£ç¨‹å¼ç„¡æ³•釿–°å•Ÿå‹•é›»è…¦ï¼Œè«‹è‡ªè¡Œé‡æ–°å•Ÿå‹•。 ; *** Uninstaller messages UninstallNotFound=檔案“%1â€ä¸å­˜åœ¨ï¼Œç„¡æ³•解除安è£ã€‚ UninstallOpenError=無法開啟檔案“%1â€ï¼Œç„¡æ³•è§£é™¤å®‰è£ UninstallUnsupportedVer=這個版本的解除安è£ç¨‹å¼ç„¡æ³•辨識記錄檔 “%1†之格å¼ï¼Œç„¡æ³•解除安è£ã€‚ UninstallUnknownEntry=解除安è£è¨˜éŒ„æª”ä¸­ç™¼ç¾æœªçŸ¥çš„記錄 (%1)。 ConfirmUninstall=您確定è¦å®Œå…¨ç§»é™¤ %1 åŠå…¶ç›¸é—œçš„æª”案嗎? UninstallOnlyOnWin64=這個程å¼åªèƒ½åœ¨ 64 ä½å…ƒçš„ Windows 上解除安è£ã€‚ OnlyAdminCanUninstall=這個程å¼è¦å…·å‚™ç³»çµ±ç®¡ç†å“¡æ¬Šé™çš„使用者方å¯è§£é™¤å®‰è£ã€‚ UninstallStatusLabel=正在從您的電腦移除 %1 中,請ç¨å€™... UninstalledAll=%1 已經æˆåŠŸå¾žæ‚¨çš„é›»è…¦ä¸­ç§»é™¤ã€‚ UninstalledMost=%1 解除安è£å®Œæˆã€‚%n%næŸäº›æª”案åŠå…ƒä»¶ç„¡æ³•移除,您å¯ä»¥è‡ªè¡Œåˆªé™¤é€™äº›æª”案。 UninstalledAndNeedsRestart=è¦å®Œæˆ %1 的解除安è£ç¨‹åºï¼Œæ‚¨å¿…é ˆé‡æ–°å•Ÿå‹•電腦。%n%n您想è¦ç¾åœ¨é‡æ–°å•Ÿå‹•電腦嗎? UninstallDataCorrupted=檔案“%1â€å·²ç¶“ææ¯€ï¼Œç„¡æ³•è§£é™¤å®‰è£ ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=移除共用檔案 ConfirmDeleteSharedFile2=系統顯示下列共用檔案已ä¸å†è¢«ä»»ä½•ç¨‹å¼æ‰€ä½¿ç”¨ï¼Œæ‚¨è¦ç§»é™¤é€™äº›æª”案嗎?%n%n%1%n%nå€˜è‹¥æ‚¨ç§»é™¤äº†ä»¥ä¸Šæª”æ¡ˆä½†ä»æœ‰ç¨‹å¼éœ€è¦ä½¿ç”¨å®ƒå€‘,將造æˆé€™äº›ç¨‹å¼ç„¡æ³•æ­£å¸¸åŸ·è¡Œï¼Œå› æ­¤æ‚¨è‹¥ç„¡æ³•ç¢ºå®šè«‹é¸æ“‡ [å¦]。ä¿ç•™é€™äº›æª”æ¡ˆåœ¨æ‚¨çš„ç³»çµ±ä¸­ä¸æœƒé€ æˆä»»ä½•æå®³ã€‚ SharedFileNameLabel=檔案å稱: SharedFileLocationLabel=ä½ç½®: WizardUninstalling=解除安è£ç‹€æ…‹ StatusUninstalling=æ­£åœ¨è§£é™¤å®‰è£ %1... ; *** Shutdown block reasons ShutdownBlockReasonInstallingApp=æ­£åœ¨å®‰è£ %1。 ShutdownBlockReasonUninstallingApp=æ­£åœ¨è§£é™¤å®‰è£ %1。 ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 版本 %2 AdditionalIcons=附加圖示: CreateDesktopIcon=建立桌é¢åœ–示(&D) CreateQuickLaunchIcon=建立快速啟動圖示(&Q) ProgramOnTheWeb=%1 的網站 UninstallProgram=è§£é™¤å®‰è£ %1 LaunchProgram=啟動 %1 AssocFileExtension=å°‡ %1 與檔案副檔å %2 產生關è¯(&A) AssocingFileExtension=正在將 %1 與檔案副檔å %2 產生關è¯... AutoStartProgramGroupDescription=開啟: AutoStartProgram=自動開啟 %1 AddonHostProgramNotFound=%1 無法在您所é¸çš„資料夾中找到。%n%n您是å¦é‚„è¦ç¹¼çºŒï¼Ÿsurvex-1.4.4/lib/fr.msg0000664000175000017500000004207714312174554011704 00000000000000Svx Msg þÿ D+©Mémoire insuffisante (%lu octets nécessaires, non disponibles).Une version %s ou supérieure de Survex est nécessaire pour traiter ces données.Impossible d'avoir une visée entre deux stations anonymesavertissementDans le fichier inclus depuis %s:%u: *prefix n’est plus utilisé - employer *begin et *end à la placeLe caractère « %c » est interdit dans un nom de station (cf *SET NAMES pour modifier la liste des caractères autorisés)Ce champ ne peut pas être videOn attendait une valeur numérique, on a trouvé « %s »Vous avez écrit « %s » ; on attendait « PRESERVE », « TOUPPER » ou « TOLOWER »Bogue détecté dans le programme ! Veuillez le signaler à l’auteur.Commande « %s » inconnueLa station « %s » ne doit pas être déclarée égale à elle-mêmeLa valeur de l’azimut ne peut être omise, sauf sur les visées verticalesFin de ligne non videIl y a %d avertissement(s).Ne peut pas exécuter la commande externe : « %s »Erreur lors de la lecture du fichierTrop d’erreurs, j’abandonne*DEFAULT est obsolète - employer *CALIBRATE/DATA/SD/UNITS avec l'argument DEFAULT à la placeLecture d’azimut donnée sur une visée verticaleEND sans BEGIN correspondant dans ce fichierBEGIN sans END correspondant dans ce fichierImpossible d'ouvrir le fichier « %s »ROOT est obsolèteLa station « %s » n’est pas exportée depuis la topographie « %s »« %s » ne peut être à la fois une station et une topographieOn attendait un nom de stationRé-utiliser un même nom de topographie est obsolètePremière utilisation du nom de topographie iciVous avez écrit « %s » ; on attendait « EQUATES », « EXPORTS » ou « PLUMBS »Vous avez écrit « %s » ; on attendait « ON » ou « OFF »Une seule station dans une commande EQUATEQuantité « %s » inconnueUnité « %s » inconnueLa commande BEGIN correspondante n’a pas de nom de topographieUnité « %s » incorrecte pour une quantitéMémoire insuffisante lors de la lecture du fichier « %s »Instrument « %s » inconnuLe facteur d’échelle doit être égal à 1.0 pour DECLINATIONParamètres « %s » inconnusClasse de caractère inconnue « %s »Pas de données topographiquesNom de fichier « %s » relatif à un répertoireLes relevés topographiques ne sont pas tous reliés à des points fixesStation déjà déclarée fixe ou équivalente à un point fixeImpossible d'ouvrir le fichier de sortie « %s »La déviation standard doit être positiveUtilisationVisée avec 2 extrémités identiques (« %s ») - erreur de frappe ?Lecture de clino supérieure à %.f%s (en valeur absolue)Vous tentez de rendre égaux deux points fixes distincts : « %s » et « %s »Rend equivalents deux points fixes égaux : « %s » et « %s »Commande FIX sans coordonnées - fixée à (0,0,0)Station déjà fixée aux même coordonnéesstation anonyme*EXPORT doit suivre immédiatement « *BEGIN »Année non valide (< 1900 ou > 2078)Lecture de compas suspecteLecture de longueur négativeMême station fixée deux fois sans coordonéesLecture de longueur inférieure à la différence de profondeurDonnée « %s » incorrecte pour le style de données « %s »Trop peu de données pour le style de données « %s »Style de données « %s » inconnuLa station « %s » est déjà exportéeDonnée dupliquée « %s »FLAG « %s » inconnu" manquantLa station « %s » n’est mentionnée qu’une fois, avec un nom de topographie explicite - faute de frappe ?Les stations topographiques suivantes ne sont pas attachés à des points fixes :La topographie n’a pas de points fixes. Par conséquent j’ai fixé %s à (0,0,0)Point fixe non utilisé « %s »Système résolu par réduction - pas d’équations simultanées à résoudre.Résoud un système de %d équationsEn supposant que l'année à deux chiffres est %dLa valeur « %s » fait doublon avec une ou des valeur(s) précédente(s)Résoud une équationLecture de longueur corrigée négativeLa date est dans le futur !La date de fin est antérieure à celle de débutCouleur par &longueurSection spécifié sur une station inexistante « %s »Les mesures de CLINO et BACKCLINO doivent être du même typeCouleur par pe&nteMois non valideJour du mois non valideLes versions de fichiers au format 3D de %d à %d sont pris en chargeOn attendait un nom de topographiefichier .espec pour contrôler l'extensionaffiche les coupures avec les visées de surface en sortieLes lectures verticales CLINO et BACKCLINO peuvent être dans la même directionerreurLecture de longueur ne peut être omiseCette fonctionnalité n’est plus utilisée ; les utilisations ultérieures ne seront pas signalées%Les mesures de TAPE et BACKTAPE diffèrent de %sLes mesures de COMPASS et BACKCOMPASS diffèrent de %sLes mesures de CLINO et BACKCLINO diffèrent de %sNom de stationFichiers CSVproduire une sortie CSVOn attendait « F » ou « M »« *data %s %c … » est obsolète - utiliser plutôt « *data %s … »Lecture de données - veuillez patienter…Mauvais fichier image 3d « %s »%a,%Y.%m.%d %H:%M:%S %ZDate et heure non disponibles.Erreur lors de la lecture du fichier « %s »Erreur lors de l’écriture du fichier « %s »Erreur à l’écriture du fichierLa lecture du fichier .err a échouéIl y a %d avertissement(s) et %d erreur(s) - aucun fichier n’a été produitLe fichier « %s » a un format trop récent pour que ce programme puisse le comprendreNordÉlévation sur&Vue en planÉlévationImprimer et quitter (nécessite un fichier 3D)Calcul des statistiquesOn attendait une chaine de caractères dans ce champtrop peu d'argumentstrop d’argumentsFICHIEREnlève les séquences terminalesConnecte les séquencesCalcule les séquencesCalcule les séquences terminalesSimplification de réseauCalcul du réseauVous avez écrit « %s » ; on attendait « F » ou « B »Longueur totale de la topographie = %7.2f%s (%7.2f%s ajusté)Longueur totale en projection horizontale = %7.2f%sLongueur totale verticale = %7.2f%sIntervalle vertical = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)Intervalle Nord-Sud = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)Intervalle Est-Ouest = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)Il y a 1 bouclage.Il y a %ld bouclages.Temps CPU utilisé %5.2fsTemps utilisé %5.2fsTemps utilisé non disponibleTemps utilisé %5.2fs (%5.2fs temps CPU)Afficher le &journalLongueur originale %6.2fm (%3d visées), réduit à %6.2fm (%5.2fm/visées). Erreur %6.2f%%Erreur N/Agénérer une grille (%sm par défaut)hauteur du texte dans les étiquettes station (%s par défaut)affiche cette aide et quitteaffiche les informations sur la version et quittetaille des marqueurs station (%s par défaut)OPTIONÉchelleinclure les éléments exportés par défautproduire une sortie DXFPour en savoir davantage, essayez : « %s --help » produire une sortie Skencilproduire une sortie PLT Compass pour Cartoproduire une sortie SVGAucune donnée de terrain à proximité de la zoneDéfinir l’endroit pour les fichiers sortisAfficher seulement un bref résumé (-qq pour les erreurs seulement)Ne pas créer de fichier .errchanger les avertissements en erreursFichiers pos SurvexTraité le %sVue en plan, azimut %s vers le haut de la pageCoupe projetée azimut %senregistrer la sortie dans un fichier .logspécifier la version du format de fichier 3D en sortieLa topographie contient 1 station,La topographie contient %ld stations, connectées par 1 visé. connectées par %ld visées.nÅ“udnÅ“udsLa topographie contient %ld composants connectés.trier par facteur d’erreur horizontaltrier par facteur d’erreur verticaltrier par pourcentage d’erreurtrier par erreur par viséeremplacer le fichier .err par la version assortie&Recalculerargument numérique « %s » hors limitel’argument « %s » n’est pas un entierl’argument « %s » n’est pas un nombreOn attendait « DUPLICATE », « SPLAY » ou « SURFACE »On attendait « NOT », « DUPLICATE », « SPLAY » ou « SURFACE »La station « %s » est citée dans un *entrance ou *export mais n’est jamais utiliséeCoupe développéeBEGIN manquantLe nom de topographie du END ne correspond pas à celui du BEGINNom de topographie manquant dans le END( X (est), Y (nord), altitude )Profondeur d’affichage : %d bpp (couleur)On attendait une date, on a trouvé « %s »ne charge que la partie de la topographie avec le préfixe*UNITS : le facteur doit être non nul&Copie d’écran...Pas de données topographiques dans le fichier image 3d « %s »Directionrembobiner le fichier et le lire une seconde foisÀ propos de %sSélectionner un fichier de topographie à afficherFichiers de données 3D SurvexTous les fichiersOutil de visualisation de topographies&Fichier&Rotation&OrientationAfficha&ge&Commandes&Aide&Présentationéchelle (50, 0,02, 1:50 et 2:100 tous signifient 1:50)FICHIER1 FICHIER2 [SEUIL]Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; version 2 de la licence, ou encore (à votre choix) toute version ultérieure.&Ouvrir... Ctrl+ONon datéeNEWLINE ne peut pas être la première valeurNEWLINE ne peut pas être la dernière valeurDonnées sur plusieurs lignes, mais pas de NEWLINELa donnée « %s » doit apparaître avant NEWLINENEWLINE ne peut être précédée que par STATION, DEPTH et COUNTOn ne peut pas étalonner les angles et les longueurs en même tempsJournal d’erreur de %sTous les fichiers de topographie&Exporter...Rotation &automatique Space%d/%d↑%s 1:%.0fDirection &inverse%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0fPe&rspectiveTe&xture des paroisRendre floue les ob&jets lointainsVue vers le &nordVue vers l’&estVue vers le &sudVue vers l’&ouestDéveloppée 1:%.0fTout afficherMasquer les autresCoupe &développée...Vue en &planÉlé&vation&TiretsVisées &dupliquéesFormat d'exportation non spécifié et inconnu de l'extension du fichier de sortieFormat d'exportation non spécifié&Restaurer la vue par défautLes fichiers FICHIER1 et FICHIER2 peuvent êtres des fichiers .pos ou .3d Le SEUIL est le changement maxi. ignorable le long de n'importe quel axe en mètres (%s par défaut)Éléments%d pages (%dx%d)Une pageAzimutNoms de stationCroisementsVisées souterrainesAngle de basculementBordures de pageLégendePages blanchesFICHIER_D_ENTREE_3D [FICHIER_DE_SORTIE_3D]FICHIER_D_ERREUR [NOMBRE][FICHIER_TOPOGRAPHIE]&Noms de station Ctrl+N&Croisements Ctrl+X&Visées souterraines Ctrl+L&Superposition des noms&CompasC&linoCouleur cle&fBarre de controle des éch&elles (non utilisé dans la vue en perspective)Temps : Sens &inverse Ctrl+R&Annuler la ligne de mesure Escape secs (0 = auto ; *6 = 6 fois auto)VueCoupe projetée azimut %s, tournée de %s&ÉlévationRéférence à la station « %s » depuis la topographie « %s » inexistanteÉchec à l'initialisation du système de coordonnées d’entrée « %s ȃchec à l'initialisation du système de coordonnées de sortie « %s »Couleur par &erreurPas dans la boucleSegments de topo en s&urface Ctrl+FCouleur par &profondeurCouleur par &dateMettre en surbrillance les &entréesMettre en surbrillance les points &FixesMettre en surbrillance les points exp&ortés&Grille Ctrl+GLissage des segments topographi&quesI&ndicateurs%s : l’option « %s » est ambiguë Le système de coordonnées en entrée doit être spécifié pour « *DECLINATION AUTO »%s : l’option « %c%s » n’a pas d’argument %s : l’option « --%s » n’a pas d’argument La date de topographie n'est pas spécifiée - utilise 0 pour la déclinaison magnétique%s : l’option « %s » requiert un argument %s : l'option nécessite un argument -- %c %s : option « --%s » non reconnue %s : option « %c%s » non reconnue Nombre ou « AUTO » attendu%s : option non valide -- %c &Nouvelle présentation&Ouvrir une présentation...Enregi&strer la présentationEnreg&istrer la présentation sous...&Marquer&Lecture&Exporter en tant qu'animation...&Bordures du cadre Ctrl+BSélectionner un nom de fichier de sortiePrésentations AvenEnregistrer la copie d'écranSlectionner une présentation à ouvrirErreur de formatage du fichier de présentation « %s »Fichier Compass PLTFichier CMAP XYZPrésentation modifiéeLa présentation en cours a été modifiée. Perte des changements non sauvés ?Recherche infructueuse.Fichiers svx SurvexFichiers MAK et DAT CompassExporter le filmChercherMasquerMasquer les %d stations trouvéesAltitudeVous ne pouvez afficher qu’un fichier image 3D à la fois&Vue latérale%.2f E, %.2f NDepuis %sH %.2f%s, V %.2f%s%s : %s, dist %.2f%s, azim %03.1f%s, pente %s&Métrique&Degrés°áµGaleries &tubulaires Ctrl+T&Préférences...Dessiner les paroisEstimation heuristique des dimensions de galerieMarquer les stations d'une croixMettre en surbrillance les stations marquées comme entréesMettre en surbrillance les stations marquées comme points fixesMettre en surbrillance les stations exportéesAfficher les stations par leurs nomsPermettre aux noms de se recouvrir (affichage plus rapide)&Mode plein écran F11Afficher les visées souterrainesAfficher les visées de surfaceCouleur de la topographie de surface en fonction de l’altitudeReprésenter les visées de surfaces par des tiretsAfficher une grilleunités métriquesunités impérialesdegrés (°)gradesAfficher les distances enAfficher les angles enInverser le sens des commandesAfficher l’échelleAfficher la barre de profondeurAfficher la boussoleAfficher le clinomètreAfficher le panneau latéral%s : H %.2f%s, Azim %03.1f%s%s : V %.2f%sTopographiesPrésentationEstNord&Imprimer... Ctrl+PConfigurer la &page...&Exporter sous...Exporter&Masquer le clinomètre&Masquer l'échelle&Masquer l’échelle des couleurs&Masquer le compasCacher la &fratrieMémoire insuffisanteSystème d’information :Le facteur d’échelle doit être non nulSéparateur dans le nom de la topographieSectionsParoisGaleriesafficher la date de la topographie (si présente)Mauvaise commande *aliasAperçu avant impressionImprimer&Imprimer...Exporter en tant que :Impossible d'écrire le fichier « %s »Segments de topographie en sur&faceÉditer un waypointCette version de %s a besoin d’OpenGL pour fonctionner, mais il n’est pas disponible.Visées l&atéralesMas&quer&Obscurcir&AfficherFormat d'exportationFichiers DXFFichiers EPSFichiers GPXHPGL pour traceursFichiers PLT Compass à utiliser avec CartoFichiers SkencilFichiers SVGEntréesPoints fixesPoints exportésOrigine au centreCoordonnées complèteskmmcm milles millepipo&Pourcent∞PlanAntipodeSystème de coordonnées inconnuSystème de coordonnée impropre en sortieÉchec de la conversion des coordonnées : %sLa projection est définie en entrée mais manque en sortieLa projection est définie en sortie mais manque en entréeLes coordonnées ne peut être omises quand le système de coordonnées est spécifiéProjection des coordonnéesIl existe déjà des commandes FIX sans coordonnées pour la station « %s »La station « %s » est fixé avant l'utilisation de la commande CSSystème de coordonnées non valide : %sFichiers KMLFichiers JSON&Enregistrer le journalFichiers journauxCouleur par &topographieTerra&inCou&leur parSélectionner un fichier de surface à visualiserFichiers de surfaceOuvrir un &terrain...produire une sortie EPSproduire une sortie GPXproduire une sortie HPGLproduire une sortie JSONproduire une sortie KMLproduire une sortie POS Survexazimut (90, 90d, 100g, tous signifient 90°)inclinaison (45, 45d, 50g, 100% tous signifient 45°)vue en plan (équivalent à --tilt=-90)vue en élévation (équivalent à --tilt=0)segments de topo en surfacevisées latéralesentréespoints fixespoints exportéssectionsparoisgaleriesorigine au centrecoordonnées complètesmarqueurs stationétiquettes stationvisées souterrainesCollé au solcollé au solLes unités « %s » sont obsolètes, supposant que ce sont des « gradiants » - voir le manuel pour plus de détailsCouleur par erreur &horizontalCouleur par erreur &verticalCouleur par st&yleExpecting quadrant bearing, found “%sâ€Declination: %s, grid convergence: %.1f%sinfoconvert MOVE and LINE into LEGproduce Survex 3d outputDéplacement de (%3.2f,%3.2f,%3.2f) : %sAjouté : %sEffacé : %sLa station %s n’a pas été trouvéeVisée %s → %s non trouvéDébut à la station %sExtension vers la gauche en partant de la station %sExtension vers la droite en partant de la station %sExtension vers la gauche en partant de la visée %s → %sExtension vers la droite en partant de la visée %s → %sCoupure de la boucle à la station %sCoupure de la boucle à la visée %s → %sChange la direction de la coupe développée à partir de la station %sChange la direction de la coupe développée à partir de la visée %s → %sApplication du fichier de spécification : « %s ȃcriture de %s…survex-1.4.4/lib/en.msg0000664000175000017500000003274114312174554011674 00000000000000Svx Msg þÿ 5Í©Out of memory (couldn’t find %lu bytes).Survex version %s or greater required to process this survey data.Can't have a leg between two anonymous stationswarningIn file included from %s:%u: *prefix is deprecated - use *begin and *end insteadCharacter “%c†not allowed in station name (use *SET NAMES to set allowed characters)Field may not be omittedExpecting numeric field, found “%sâ€Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€Bug in program detected! Please report this to the authorsUnknown command “%sâ€Station “%s†equated to itselfCompass reading may not be omitted except on plumbed legsEnd of line not blankThere were %d warning(s).Couldn’t run external command: “%sâ€Error reading fileToo many errors - giving up*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT insteadCompass reading given on plumbed legEND with no matching BEGIN in this fileBEGIN with no matching END in this fileCouldn’t open file “%sâ€ROOT is deprecatedStation “%s†not exported from survey “%sâ€â€œ%s†can’t be both a station and a surveyExpecting station nameReentering an existing survey is deprecatedOriginally entered hereFound “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€Found “%sâ€, expecting “ON†or “OFFâ€Only one station in EQUATE commandUnknown quantity “%sâ€Unknown units “%sâ€Matching BEGIN command has no survey nameInvalid units “%s†for quantityOut of memory trying to read file “%sâ€Unknown instrument “%sâ€Scale factor must be 1.0 for DECLINATIONUnknown setting “%sâ€Unknown character class “%sâ€No survey dataFilename “%s†refers to directorySurvey not all connected to fixed stationsStation already fixed or equated to a fixed pointFailed to open output file “%sâ€Standard deviation must be positiveUsageSurvey leg with same station (“%sâ€) at both ends - typing error?Clino reading over %.f%s (absolute value)Tried to equate two non-equal fixed stations: “%s†and “%sâ€Equating two equal fixed points: “%s†and “%sâ€FIX command with no coordinates - fixing at (0,0,0)Station already fixed at the same coordinatesanonymous station*EXPORT must immediately follow “*BEGIN â€Invalid year (< 1900 or > 2078)Suspicious compass readingNegative tape readingSame station fixed twice with no coordinatesTape reading is less than change in depthReading “%s†not allowed in data style “%sâ€Too few readings for data style “%sâ€Data style “%s†unknownStation “%s†already exportedDuplicate reading “%sâ€FLAG “%s†unknownMissing "Station “%s†referred to just once, with an explicit survey name - typo?The following survey stations are not attached to a fixed point:Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)Unused fixed point “%sâ€Network solved by reduction - no simultaneous equations to solve.Solving %d simultaneous equationsAssuming 2 digit year is %dReading “%s†duplicates previous reading(s)Solving one equationNegative adjusted tape readingDate is in the future!End of date range is before the startColour by &LengthCross section specified at non-existent station “%sâ€CLINO and BACKCLINO readings must be of the same typeColour by &GradientInvalid monthInvalid day of the month3d file format versions %d to %d supportedExpecting survey name.espec file to control extendingshow breaks with surface survey legs in outputPlumbed CLINO and BACKCLINO readings can't be in the same directionerrorTape reading may not be omittedFurther uses of this deprecated feature will not be reported%TAPE reading and BACKTAPE reading disagree by %sCOMPASS reading and BACKCOMPASS reading disagree by %sCLINO reading and BACKCLINO reading disagree by %sStation NameCSV filesproduce CSV outputExpecting “F†or “Mâ€â€œ*data %s %c …†is deprecated - use “*data %s …†insteadReading in data - please wait…Bad 3d image file “%sâ€%a,%Y.%m.%d %H:%M:%S %ZDate and time not available.Error reading from file “%sâ€Error writing to file “%sâ€Error writing to fileCouldn’t parse .err fileThere were %d warning(s) and %d error(s) - no output files produced.File “%s†has a newer format than this program can understandNorthElevation onP&lan viewElevationprint and exit (requires a 3d file)Calculating statisticsExpecting string fieldtoo few argumentstoo many argumentsFILERemoving trailing traversesConcatenating traversesCalculating traversesCalculating trailing traversesSimplifying networkCalculating networkFound “%sâ€, expecting “F†or “Bâ€Total length of survey legs = %7.2f%s (%7.2f%s adjusted)Total plan length of survey legs = %7.2f%sTotal vertical length of survey legs = %7.2f%sVertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)There is 1 loop.There are %ld loops.CPU time used %5.2fsTime used %5.2fsTime used unavailableTime used %5.2fs (%5.2fs CPU time)Show &LogOriginal length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). Error %6.2f%%Error N/Agenerate grid (default %sm)station labels text height (default %s)display this help and exitoutput version information and exitstation marker size (default %s)OPTIONScaleinclude items exported by defaultproduce DXF outputTry “%s --help†for more information. produce Skencil outputproduce Compass PLT output for Cartoproduce SVG outputNo terrain data near area of surveyset location for output filesonly show brief summary (-qq for errors only)do not create .err fileturn warnings into errorsSurvex pos filesProcessed: %sPlan view, %s up pageElevation facing %slog output to .log filespecify the 3d file format version to outputSurvey contains 1 survey station,Survey contains %ld survey stations, joined by 1 leg. joined by %ld legs.nodenodesSurvey has %ld connected components.sort by horizontal error factorsort by vertical error factorsort by percentage errorsort by error per legreplace .err file with resorted version&Reprocessnumeric argument “%s†out of rangeargument “%s†not an integerargument “%s†not a numberExpecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€Station “%s†referred to by *entrance or *export but never usedExtended elevationNo matching BEGINSurvey name doesn’t match BEGINSurvey name omitted from END( Easting, Northing, Altitude )Display Depth: %d bpp (colour)Expecting date, found “%sâ€only load the sub-survey with this prefix*UNITS factor must be non-zero&Screenshot...No survey data in 3d file “%sâ€Facingrewind file and read it a second timeAbout %sSelect a survey file to viewSurvex 3d filesAll filesSurvey visualisation tool&File&Rotation&Orientation&View&Controls&Help&Presentationscale (50, 0.02, 1:50 and 2:100 all mean 1:50)FILE1 FILE2 [THRESHOLD]This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.&Open... Ctrl+OUndatedNEWLINE can’t be the first readingNEWLINE can’t be the last readingInterleaved readings, but no NEWLINEReading “%s†must occur before NEWLINENEWLINE can only be preceded by STATION, DEPTH, and COUNTCan’t calibrate angular and length quantities together%s Error LogAll survey files&Export...Au&to-Rotate Space%d/%d↑%s 1:%.0f&Reverse Direction%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0f&PerspectiveTextured &WallsFade Distant Ob&jectsView &NorthView &EastView &SouthView &WestExtended 1:%.0fShow allHide othersE&xtended Elevation...&Plan ViewEle&vation&Dashed&Duplicate LegsExport format not specified and not known from output file extensionExport format not specifiedRestore De&fault ViewFILE1 and FILE2 can be .pos or .3d files THRESHOLD is the max. ignorable change along any axis in metres (default %s)Elements%d pages (%dx%d)One pageBearingStation NamesCrossesUnderground Survey LegsTilt anglePage BordersLegendBlank PagesINPUT_3D_FILE [OUTPUT_3D_FILE]ERR_FILE [HOW_MANY][SURVEY_FILE]Station &Names Ctrl+N&Crosses Ctrl+X&Underground Survey Legs Ctrl+L&Overlapping Names&CompassC&linometerColour &Key&Scale Bar (unused in perspective view)Time: &Reverse Sense Ctrl+R&Cancel Measuring Line Escape secs (0 = auto; *6 = 6 times auto)ViewElevation facing %s, tilted %s&ElevationReference to station “%s†from non-existent survey “%sâ€Failed to initialise input coordinate system “%sâ€Failed to initialise output coordinate system “%sâ€Colour by &ErrorNot in loop&Surface Survey Legs Ctrl+FColour by &DepthColour by D&ateHighlight &EntrancesHighlight &Fixed PointsHighlight E&xported Points&Grid Ctrl+GSmoot&hed Survey Legs&Indicators%s: option “%s†is ambiguous Input coordinate system must be specified for “*DECLINATION AUTOâ€%s: option “%c%s†doesn’t allow an argument %s: option “--%s†doesn’t allow an argument No survey date specified - using 0 for magnetic declination%s: option “%s†requires an argument %s: option requires an argument -- %c %s: unrecognized option “--%s†%s: unrecognized option “%c%s†Expected number or “AUTOâ€%s: invalid option -- %c &New Presentation&Open Presentation...&Save PresentationSa&ve Presentation As...&MarkPla&y&Export as Movie...&Bounding Box Ctrl+BSelect an output filenameAven presentationsSave ScreenshotSelect a presentation to openError in format of presentation file “%sâ€Compass PLT filesCMAP XYZ filesModified PresentationThe current presentation has been modified. Abandon unsaved changes?No matches were found.Survex svx filesCompass DAT and MAK filesExport MovieFindHideHide %d found stationsAltitudeYou may only view one 3d file at a time.&Side Panel%.2f E, %.2f NFrom %sH %.2f%s, V %.2f%s%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s&Metric&Degrees°áµPassage &Tubes Ctrl+T&Preferences...Draw passage wallsEstimate LRUD readings based on heuristicsMark survey stations with crossesHighlight stations marked as entrancesHighlight stations marked as fixed pointsHighlight stations which are exportedMark survey stations with their namesAllow names to overlap on the display (faster)Full Screen &Mode F11Display underground survey legsDisplay surface survey legsColour surface surveys by depthDraw surface legs with dashed linesDraw a gridmetric unitsimperial unitsdegrees (°)gradsDisplay measurements inDisplay angles inReverse the sense of the controlsDisplay scale barDisplay depth barDisplay compassDisplay clinometerDisplay side panel%s: H %.2f%s, Brg %03.1f%s%s: V %.2f%sSurveysPresentationEastingNorthing&Print... Ctrl+PP&age Setup...&Export as...Export&Hide Clino&Hide scale bar&Hide colour key&Hide CompassHide si&blingsOut of memorySystem Information:Scale factor must be non-zeroSeparator in survey nameCross-sectionsWallsPassagesshow survey date information (if present)Bad *alias commandPrint PreviewPrint&Print...Export as:Couldn’t write file “%sâ€Sur&face Survey LegsEdit WaypointThis version of %s requires OpenGL to work, but it isn’t available.Spla&y Legs&Hide&Fade&ShowExport formatDXF filesEPS filesGPX filesHPGL for plottersCompass PLT for use with CartoSkencil filesSVG filesEntrancesFixed PointsExported StationsOrigin in centreFull coordinateskmmcm miles mileftin&Percent∞PlanKiwi PlanUnknown coordinate systemCoordinate system unsuitable for outputFailed to convert coordinates: %sThe input projection is set but the output projection isn'tThe output projection is set but the input projection isn'tCoordinates can't be omitted when coordinate system has been specifiedCoordinate projectionAlready had FIX command with no coordinates for station “%sâ€Station “%s†fixed before CS command first usedInvalid coordinate system: %sKML filesJSON files&Save LogLog filesColour by &SurveyTerr&ainCo&lour bySelect a terrain file to viewTerrain filesOpen &Terrain...produce EPS outputproduce GPX outputproduce HPGL outputproduce JSON outputproduce KML outputproduce Survex POS outputbearing (90, 90d, 100g all mean 90°)tilt (45, 45d, 50g, 100% all mean 45°)plan view (equivalent to --tilt=-90)elevation view (equivalent to --tilt=0)surface survey legssplay legsentrancesfixed pointsexported stationscross-sectionswallspassagesorigin in centrefull coordinatesstation markersstation labelsunderground survey legsClamp to groundclamp to groundUnits “%s†are deprecated, assuming “grads†- see manual for detailsColour by &Horizontal ErrorColour by &Vertical ErrorColour by St&yleExpecting quadrant bearing, found “%sâ€Declination: %s, grid convergence: %.1f%sinfoconvert MOVE and LINE into LEGproduce Survex 3d outputMoved by (%3.2f,%3.2f,%3.2f): %sAdded: %sDeleted: %sFailed to find station %sFailed to find leg %s → %sStarting from station %sExtending to the left from station %sExtending to the right from station %sExtending to the left from leg %s → %sExtending to the right from leg %s → %sBreaking survey loop at station %sBreaking survey loop at leg %s → %sSwapping extend direction from station %sSwapping extend direction from leg %s → %sApplying specfile: “%sâ€Writing %s…survex-1.4.4/lib/checkshortcut.pl0000755000175000017500000000340114141575516013763 00000000000000#!/usr/bin/perl -w require 5.008; use bytes; use strict; my %menu = (); my $srcdir = $ENV{'srcdir'} || ''; $srcdir .= '/' if $srcdir; open I, "<$srcdir../src/mainfrm.cc" or die $!; while () { m!(\w+)->Append[A-Za-z]*\(.*\(/\*.*?\*/(\d+)! && push @{$menu{$1}}, $2; } close I; #for (sort keys %menu) { print "$_:".join("|", @{$menu{$_}})."\n" } my $exitcode = 0; for my $lang (@ARGV) { $lang =~ s/\.msg$//; # allow en or en.msg my $hdr = "Lang $lang:\n"; # .msg files could be in srcdir or build directory when building outside # the source tree open L, "<$srcdir$lang.msg" or open L, "<$lang.msg" or die $!; my $buf; read L, $buf, 20; read L, $buf, 999999; close L; my @msg = split /\0/, $buf; for my $menu (sort keys %menu) { my %sc; my %let; my $bad = 0; for (@{$menu{$menu}}) { my $m = $msg[$_]; my ($item) = (split(/\\t/, $m))[0]; my ($acc) = ($item =~ /\&([\x00-\x7f]|[\xc2-\xdf].|[\xe0-\xef]..|[\xf0-\xf4]...)/); if (!defined $acc) { print "Lang $lang : message $_ '$m' has no shortcut\n"; $bad = 1; } else { $acc = lc $acc; if (exists $sc{$acc}) { if (defined $hdr) { print $hdr; $hdr = undef; } print "Menu $menu : '$msg[$sc{$acc}]' and '$m' both use shortcut '$acc'\n"; $bad = 1; } else { $sc{$acc} = $_; } } # Tally available letters while ($item =~ /([A-Za-z]|[\xc2-\xdf].|[\xe0-\xef]..|[\xf0-\xf4]...)/g) { $acc = lc $1; next if $acc eq '…'; ++$let{$acc}; } } if ($bad) { print "Unused letters: ", grep {!exists $sc{$_}} (sort keys %let), "\n"; print "Not-present ASCII letters: ", grep {!exists $let{$_}} ('a' .. 'z'), "\n"; $exitcode = 1; } } print "\n" unless defined $hdr; } exit $exitcode; survex-1.4.4/lib/id.msg0000664000175000017500000003614514312174554011670 00000000000000Svx Msg þÿ â€Tahun tidak valid (< 1900 or > 2078)Pembacaan kompas yang meragukanPembacaan pita negatifStasiun yang sama tetap dua kali tanpa koordinatPembacaan pita kurang dari perubahan kedalamanMembaca “%s†tidak diperbolehkan pada model data “%sâ€Terlalu sedikit bacaan untuk model data “%sâ€Model data “%s†tidak diketahuiStasiun “%s†sudah dieksporDuplikasi pembacaan “%sâ€FLAG “%s†tidak diketahuiHilang "Stasiun “%s†disebut hanya sekali, dengan nama survei secara eksplisit - salah ketik?Stasiun survei berikut tidak melekat pada titik tetap:Survei tidak memiliki titik tetap. Oleh karena itu saya telah memperbaiki %s di (0,0,0)Titik tetap yang tidak digunakan “%sâ€Jaringan diselesaikan dengan pengurangan - tidak ada persamaan simultan untuk menyelesaikan.Menyelesaikan %d persamaan simultanAssuming 2 digit year is %dPembacaan “%s†duplikasi pembacaan sebelumnyaMenyelesaikan satu persamaanNegatif yang disesuaikan pembacaan pitaTanggal ini di masa depan!Akhir rentang tanggal sebelum memulaiWarna menurut &PanjangPenampang yang ditentukan di stasiun yang tidak ada “%sâ€Pembacaan CLINO dan BACKCLINO harus dari tipe yang samaWarna menurut &GradienBulan tidak validHari yang tidak valid bulan ituFormat berkas 3d versi %d ke %d didukungMengharapkan nama survei.espec file to control extendingshow breaks with surface survey legs in outputPlumbed CLINO and BACKCLINO readings can't be in the same directionkesalahanPembacaan pita tidak dapat diabaikanPenggunaan lebih lanjut dari fitur yang ditinggalkan ini tidak perlu dilaporkan%Pembacaan TAPE dan pembacaan BACKTAPE tidak sama %sPembacaan Azimuth Kompass (COMPASS) dan pembacaan Back Azimuth Kompass (BACKCOMPASS) tidak sama %sPembacaan CLINO dan pembacaan BACKCLINO tidak sama %sStation NameBerkas CSVmenghasilkan keluaran CSVMengharapkan “F†atau “Mâ€â€œ*data %s %c …†sudah ditinggalkan - gunakan “*data %s …†sebagai gantinyaPembacaan data - mohon tunggu…Berkas gambar 3d yang buruk “%sâ€%a,%Y.%m.%d %H:%M:%S %ZTanggal dan waktu tidak tersedia.Kesalahan pembacaan dari berkas “%sâ€Galat saat menulis ke berkas “%sâ€Galat saat menulis ke berkasTidak dapat mengurai berkas .errAda peringatan %d dan kesalahan %d - tidak ada berkas keluaran yang dihasilkan.Berkas “%s†memiliki format baru dari program ini dapat memahamiUtaraElevasi padaTampilan P&lanElevasicetak dan keluar (memerlukan berkas 3d)Menghitung statistikMengharapkan bidang stringargumen terlalu sedikitterlalu banyak argumenBERKASMenghapus trailing traversesConcatenating traversesMenghitung traversesMenghitung trailing traversesMenyederhanakan jaringanMenghitung jaringanDitemukan “%sâ€, mengharapkan “F†atau “Bâ€Total panjang dari kaki survei = %7.2f%s (%7.2f%s yang disesuaikan)Total panjang tampak atas kaki survei = %7.2f%sTotal panjang vertikal kaki survei = %7.2f%sRentang vertikal = %4.2f%s (dari %s di %4.2f%s ke %s di %4.2f%s)Rentang Utara-Selatan = %4.2f%s (dari %s di %4.2f%s ke %s di %4.2f%s)Rentang Timur-Barat = %4.2f%s (dari %s di %4.2f%s ke %s di %4.2f%s)Ada 1 putaran.Ada %ld putaran.Waktu CPU yang digunakan %5.2fsWaktu yang digunakan %5.2fsWaktu yang digunakan tidak tersediaWaktu yang digunakan %5.2fs (%5.2fs waktu CPU)Tampilkan &LogPanjang asli %6.2fm (%3d kaki), dipindah %6.2fm (%5.2fm/kaki). Kesalahan %6.2f%%Kesalahan N/Amenghasilkan grid (baku %sm)station labels text height (baku %s)tampilkan bantuan ini dan keluarmenampilkan informasi versi dan keluarUkuran penanda stasiun (baku %s)OPSISkalainclude items exported by defaultmenghasilkan keluaran DXFCoba “%s --help†untuk informasi lebih lanjut. menghasilkan keluaran Skencilmenghasilkan keluaran Compass PLT untuk Cartomenghasilkan keluaran SVGNo terrain data near area of surveyset lokasi untuk berkas keluaranhanya menampilkan ringkasan singkat (-qq hanya kesalahan)tidak membuat berkas .errmengaktifkan peringatan menjadi kesalahanBerkas Survex posDiproses: %sTampak atas, %s halaman atasmenghadap elevasi %skeluaran log ke berkas .logmenentukan versi format berkas 3d pada keluaranSurvei yang mengandung 1 stasiun survei,Survei yang mengandung %ld stasiun survei, bergabung dengan 1 kaki. bergabung dengan %ld kaki.TitiktitikSurvei yang memiliki %ld komponen terhubung.urutkan berdasarkan faktor kesalahan horisontalurutkan berdasarkan faktor kesalahan vertikalurutkan berdasarkan presentase kesalahanurutkan berdasarkan kesalahan per kakiganti berkas .err dengan versi dipulihkan&Proses ulangargumen numerik “%s†diluar rentangargumen “%s†bukan bilangan bulatargumen “%s†bukan angkaMengharapkan “DUPLICATEâ€, “SPLAYâ€, atau “SURFACEâ€Mengharapkan “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, atau “SURFACEâ€Stasiun “%s†dimaksud pada *entrance atau *export tetapi tidak pernah digunakanElevasi diperpanjangTidak ada yang cocok BEGINNama survei yang tidak cocok BEGINNama Survei yang dihilangkan dari END( Timur, Utara, Ketinggian )Tampilan Kedalaman: %d bpp (warna)Mengharapkan tanggal, ditemukan “%sâ€hanya memuat sub-survei dengan prefiks ini*UNITS faktor harus non-zero&Screenshot...Tidak ada data survei di berkas 3d “%sâ€Menghadap kememutar mundur berkas dan membacanya untuk kedua kalinyaTetang %sPilih berkas survei untuk melihatBerkas survex 3dSemua berkasAlat visualisasi survei&Berkas&Rotasi&Orientasi&Tilik&KontrolBa&ntuan&Presentasiscale (50, 0.02, 1:50 and 2:100 all mean 1:50)FILE1 FILE2 [THRESHOLD]Program ini merupakan perangkat lunak bebas; Anda diizinkan untuk mendistribusikan dan/atau memodifikasinya di bawah GNU General Public Licence yang diterbitkan oleh Free Software Foundation; baik versi 2 dari Lisensi, atau (dengan pilihan Anda) versi yang lebih baru.&Buka... Ctrl+OTidak bertanggalNEWLINE tidak bisa menjadi bacaan pertamaNEWLINE tidak bisa menjadi bacaan terakhirBacaan yang disisipkan, tapi tidak ada NEWLINEPembacaan “%s†harus terjadi sebelum NEWLINENEWLINE hanya dapat didahului oleh STATION, DEPTH, dan COUNTTidak dapat mengkalibrasi jumlah sudut dan panjang bersama%s Kesalahan LogSemua berkas survei&Ekspor...Au&to-Rotate Space%d/%d↑%s 1:%.0fA&rah Sebaliknya%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0fPerspekti&fTekstur &Dinding&Obyek Jauh PudarLihat &UtaraLihat &TimurLihat &SelatanLihat &BaratDiperpanjang 1:%.0fTampilkan semuaSembunyikan yang lainnyaElevasi Di&perpanjang...Tam&pilan AtasEle&vasi&DashedDupli&cate LegsExport format not specified and not known from output file extensionExport format not specifiedKembali ta&mpilan BakuBerkas FILE1 dan FILE2 bisa saja .pos atau .3d THRESHOLD merupakan max. Perubahan dapat diketahui sepanjang sumbu dalam meter (baku %s)Bagian%d halaman (%dx%d)Satu halamanArahNama StasiunSilangKaki Survei di Bawah tanahSudut kemiringanBatas halamanLegendaHalaman kosongINPUT_3D_FILE [OUTPUT_3D_FILE]ERR_FILE [HOW_MANY][SURVEY_FILE]Stasiun &Nama Ctrl+N&Silang Ctrl+X&Kaki Survei di bawah tanah Ctrl+LNama Tumpang Tindi&h&KompasK&linometer&Warna Kunci&Skala Bar (tidak digunakan dalam tampak perspektif)Waktu: Memuta&r Ctrl+R&Batal Mengukur Garis Escape detik (0 = otomatis; *6 = 6 waktu otomatis)Tilikmenghadap elevasi %s, kemiringan %s&ElevationReferensi ke stasiun “%s†dari survei yang tidak ada “%sâ€Gagal menginisialisasi masukan sistem koordinat “%sâ€Gagal menginisialisasi keluaran sistem koordinat “%sâ€Warna menurut &ErorTidak di putaranKaki survei perm&ukaan Ctrl+FWarna berdasarkan &KedalamanWarna berdasarkan &TanggalSorot &Mulut GuaSorot &Titik TetapSorot titik yang di&ekspor&Grid Ctrl+GMerap&ikan Kaki Survei&Indikator%s: pilihan “%s†ambigu Masukan sistem koordinat ada harus dicantumkan untuk “*DECLINATION AUTOâ€%s: pilihan “%c%s†tidak mengizinkan argumen %s: pilihan “--%s†tidak mengizinkan argumen Tidak ada tanggal survei yang ditentukan - menggunakan 0 untuk deklinasi magnetik%s: opsi “%s†membutuhkan sebuah argumen %s: opsi membutuhkan argumen -- %c %s: opsi tidak di-kenal “--%s†%s: opsi tidak di-kenal “%c%s†Angka yang diharapkan atau “AUTOâ€%s: opsi tidak-valid -- %c Presentasi &BaruBu&ka Presentasi...&Simpan PresentasiSi&mpan Presentasi sebagai...&TandaiPut&ar&Ekspor sebagai film...&Batas Kotak Ctrl+BPilih nama berkas keluaranPresentasi AvenSimpan tangkapan layarPilih presentasi untuk membukaKesalahan pada format berkas presentasi “%sâ€Berkas Compass PLTBerkas CMAP XYZPresentasi dimodifikasiPresentasi saat ini telah dimodifikasi. Abaikan perubahan yang belum disimpan?Tidak ditemukan kecocokan.Berkas Survex svxBerkas Compass DAT dan MAKEkspor FilmCariTersembunyiSembunyikan %d stasiun ditemukanKetinggianAnda hanya dapat melihat satu berkas 3d pada satu waktu.Panel &Samping%.2f T, %.2f UDari %sH %.2f%s, V %.2f%s%s: %s, Jarak %.2f%s, Arah %03.1f%s, Gradien %s&Metrik&Derajat°áµLorong &Pipa Ctrl+T&Preferensi...Menggambar dinding lorongPembacaan LRUD estimasi berdasarkan heuristikMenandai stasiun survei dengan silangSorot stasiun ditandai sebagai mulut guaSorot stasiun ditandai sebagai titik tetapSorot stasiun yang dieksporStasiun survei tandai dengan nama merekaBiarkan nama tumpang tindih pada layar (lebih cepat)La&yar Penuh Mode F11Tampilan kaki survei bawah tanahTampilan kaki survei permukaanWarna survei permukaan berdasarkan kedalamanMenggambar kaki permukaan dengan garis putus-putusMenggambar gridunit metrikunit imperialderajat (°)gradsMenampilkan ukuran padaMenampilkan sudut padaMembalikkan arti kontrolMenampilkan skala barMenampilkan bar kedalamanMenampilkan kompasMenampilkan klinometerMenampilkan panel%s: H %.2f%s, Brg %03.1f%s%s: V %.2f%sSurveiPresentasiArah timurArah Utara&Cetak... Ctrl+P&Tata Halaman...&Ekpor sebagai...Ekspor&Sembunyikan Klino&Sembunyikan bar skala&Sembunyikan kunci warna&Sembunyikan KompasHide si&blingsKehabisan memoriInformasi Sistem:Faktor skala harus non-zeroSeparator pada nama surveiPotongan melintangDindingLorongMenampilkan informasi tanggal survei (jika ada)Perintah *alias burukPratilik CetakCetak&Cetak...Ekspor sebagai:Gagal membuka “%s†untuk menulisKaki Survei Per&mukaanEdit WaypointVersi %s membutuhkan OpenGL untuk bekerja, tetapi tidak tersedia.Kaki Leba&r&Sembunyikan&Pudar&TampilkanEkspor formatBerkas DXFBerkas EPSBerkas GPXHPGL untuk plotterCompass PLT untuk digunakan dengan CartoBerkas SkencilBerkas SVGMulut guaTitik tetapStasiun dieksporDi tengahKoordinat penuhkmmcm mil milftin&Persen∞Tampak AtasTampak Atas KiwiSistem koordinat tidak diketahuiSistem koordinat tidak cocok pada keluaranGagal mengkonversi koordinat: %sProyeksi masukan diatur tetapi proyeksi keluaran tidakProyeksi keluaran diatur tetapi proyeksi masukan tidakKoordinat tidak dapat diabaikan saat sistem koordinat yang telah ditentukanProyeksi koordinatSudah memiliki perintah FIX tanpa koordinat stasiun “%sâ€Stasiun “%s†ditetapkan sebelum perintah CS pertama kali digunakanSistem koordinat tidak valid: %sBerkas KMLBerkas JSON&Simpan LogBerkas logWarna menurut &Survei&Lahan&Warna menurutPilih satu berkas dataran untuk melihatBerkas-berkas dataranBuka &Dataran...menghasilkan keluaran EPSmenghasilkan keluaran GPXmenghasilkan keluaran HPGLmenghasilkan keluaran JSONmenghasilkan keluaran KMLmenghasilkan keluaran Survex POSbearing (90, 90d, 100g all mean 90°)tilt (45, 45d, 50g, 100% all mean 45°)plan view (equivalent to --tilt=-90)elevation view (equivalent to --tilt=0)kaki survei permukaankaki lebarmulut guatitik tetapstasiun dieksporpotongan melintangdindinglorongdi tengahkoordinat penuhpenanda stasiunlabel stasiunkaki survei di bawah tanahClamp to groundclamp to groundUnits “%s†are deprecated, assuming “grads†- see manual for detailsWarna menurut Eror &horisontalWarna menurut Eror &vertikalColour by St&yleExpecting quadrant bearing, found “%sâ€Declination: %s, grid convergence: %.1f%sinfoconvert MOVE and LINE into LEGproduce Survex 3d outputDipindahkan oleh (%3.2f,%3.2f,%3.2f): %sDitambahkan: %sDihapus: %sGagal menemukan stasiun %sGagal menemukan kaki %s → %sMulai dari stasiun %sMembentang ke kiri dari stasiun %sMembentang ke kanan dari stasiun %sMembentang ke kiri dari kaki %s → %sMembentang ke kanan dari kaki %s → %sMematahkan putaran survei pada stasiun %sMematahkan putaran survei kaki kaki %s → %sMenukar arah diperluas dari stasiun %sMenukar arah diperluas dari kaki %s → %sMenerapkan berkas spesifikasi: “%sâ€Menulis %s…survex-1.4.4/lib/fr.po0000644000175000017500000027315014211753457011533 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2020-07-09 23:39:00 +0000\n" "Last-Translator: Wassil Janssen \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&Fichier" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "&Rotation" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "&Orientation" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "Afficha&ge" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "&Commandes" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Aide" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&Présentation" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "Utilisation" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "Mémoire insuffisante" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "Mémoire insuffisante (%lu octets nécessaires, non disponibles)." #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "Mémoire insuffisante lors de la lecture du fichier « %s »" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "Une version %s ou supérieure de Survex est nécessaire pour traiter ces données." #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "info" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "avertissement" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "erreur" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "Dans le fichier inclus depuis %s:%u:\n" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "*prefix n’est plus utilisé - employer *begin et *end à la place" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "Le caractère « %c » est interdit dans un nom de station (cf *SET NAMES pour modifier la liste des caractères autorisés)" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "Ce champ ne peut pas être vide" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "On attendait une valeur numérique, on a trouvé « %s »" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "Vous avez écrit « %s » ; on attendait « PRESERVE », « TOUPPER » ou « TOLOWER »" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "Bogue détecté dans le programme ! Veuillez le signaler à l’auteur." #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "Commande « %s » inconnue" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "La station « %s » ne doit pas être déclarée égale à elle-même" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "La valeur de l’azimut ne peut être omise, sauf sur les visées verticales" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "Lecture de longueur ne peut être omise" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "Fin de ligne non vide" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "Il y a %d avertissement(s)." #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Ne peut pas exécuter la commande externe : « %s »" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Erreur lors de la lecture du fichier" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "Trop d’erreurs, j’abandonne" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "*DEFAULT est obsolète - employer *CALIBRATE/DATA/SD/UNITS avec l'argument DEFAULT à la place" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "Lecture d’azimut donnée sur une visée verticale" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "END sans BEGIN correspondant dans ce fichier" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "BEGIN sans END correspondant dans ce fichier" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "La station « %s » n’est pas exportée depuis la topographie « %s »" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "Référence à la station « %s » depuis la topographie « %s » inexistante" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "« %s » ne peut être à la fois une station et une topographie" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "On attendait un nom de station" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "Vous avez écrit « %s » ; on attendait « EQUATES », « EXPORTS » ou « PLUMBS »" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "Vous avez écrit « %s » ; on attendait « ON » ou « OFF »" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "Une seule station dans une commande EQUATE" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "Quantité « %s » inconnue" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "Unité « %s » inconnue" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "Les unités « %s » sont obsolètes, supposant que ce sont des « gradiants » - voir le manuel pour plus de détails" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "Système de coordonnées inconnu" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "Système de coordonnées non valide : %s" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "Système de coordonnée impropre en sortie" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "Échec de la conversion des coordonnées : %s" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "La projection est définie en entrée mais manque en sortie" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "La projection est définie en sortie mais manque en entrée" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "Les coordonnées ne peut être omises quand le système de coordonnées est spécifié" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "Le système de coordonnées en entrée doit être spécifié pour « *DECLINATION AUTO »" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "Nombre ou « AUTO » attendu" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "La date de topographie n'est pas spécifiée - utilise 0 pour la déclinaison magnétique" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "La commande BEGIN correspondante n’a pas de nom de topographie" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "Unité « %s » incorrecte pour une quantité" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "Instrument « %s » inconnu" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "Le facteur d’échelle doit être égal à 1.0 pour DECLINATION" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "Le facteur d’échelle doit être non nul" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "Paramètres « %s » inconnus" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "Classe de caractère inconnue « %s »" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "Pas de données topographiques" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "Nom de fichier « %s » relatif à un répertoire" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "Les relevés topographiques ne sont pas tous reliés à des points fixes" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "Station déjà déclarée fixe ou équivalente à un point fixe" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "Impossible d'ouvrir le fichier de sortie « %s »" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "La déviation standard doit être positive" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "Visée avec 2 extrémités identiques (« %s ») - erreur de frappe ?" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "Lecture de clino supérieure à %.f%s (en valeur absolue)" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "Vous tentez de rendre égaux deux points fixes distincts : « %s » et « %s »" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "Rend equivalents deux points fixes égaux : « %s » et « %s »" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "Commande FIX sans coordonnées - fixée à (0,0,0)" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "Station déjà fixée aux même coordonnées" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "Il existe déjà des commandes FIX sans coordonnées pour la station « %s »" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "La station « %s » est fixé avant l'utilisation de la commande CS" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "*EXPORT doit suivre immédiatement « *BEGIN »" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "En supposant que l'année à deux chiffres est %d" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "Année non valide (< 1900 ou > 2078)" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "Lecture de compas suspecte" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "Lecture de longueur négative" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "Même station fixée deux fois sans coordonées" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "Lecture de longueur inférieure à la différence de profondeur" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "Donnée « %s » incorrecte pour le style de données « %s »" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "Trop peu de données pour le style de données « %s »" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "Style de données « %s » inconnu" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "La station « %s » est déjà exportée" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "Donnée dupliquée « %s »" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "FLAG « %s » inconnu" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "\" manquant" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "La station « %s » n’est mentionnée qu’une fois, avec un nom de topographie explicite - faute de frappe ?" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "Les stations topographiques suivantes ne sont pas attachés à des points fixes :" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "La topographie n’a pas de points fixes. Par conséquent j’ai fixé %s à (0,0,0)" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "Point fixe non utilisé « %s »" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "Système résolu par réduction - pas d’équations simultanées à résoudre." #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "Résoud un système de %d équations" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "La valeur « %s » fait doublon avec une ou des valeur(s) précédente(s)" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "Résoud une équation" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "Lecture de longueur corrigée négative" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "La date est dans le futur !" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "La date de fin est antérieure à celle de début" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "Section spécifié sur une station inexistante « %s »" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "Les mesures de CLINO et BACKCLINO doivent être du même type" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "Les lectures verticales CLINO et BACKCLINO peuvent être dans la même direction" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "Mois non valide" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "Jour du mois non valide" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "Les versions de fichiers au format 3D de %d à %d sont pris en charge" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "On attendait un nom de topographie" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Impossible d'ouvrir le fichier « %s »" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "Impossible d'écrire le fichier « %s »" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "Cette fonctionnalité n’est plus utilisée ; les utilisations ultérieures ne seront pas signalées" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "Les mesures de TAPE et BACKTAPE diffèrent de %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "Les mesures de COMPASS et BACKCOMPASS diffèrent de %s" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "Les mesures de CLINO et BACKCLINO diffèrent de %s" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "« *data %s %c … » est obsolète - utiliser plutôt « *data %s … »" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "Mauvais fichier image 3d « %s »" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "%a,%Y.%m.%d %H:%M:%S %Z" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "Date et heure non disponibles." #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "Erreur lors de la lecture du fichier « %s »" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, c-format msgid "Error writing to file “%sâ€" msgstr "Erreur lors de l’écriture du fichier « %s »" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Erreur à l’écriture du fichier" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "Il y a %d avertissement(s) et %d erreur(s) - aucun fichier n’a été produit" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "Le fichier « %s » a un format trop récent pour que ce programme puisse le comprendre" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "Nord" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "Élévation sur" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "&Vue en plan" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "&Élévation" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "Élévation" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Plan" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "Antipode" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "Calcul des statistiques" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "On attendait une chaine de caractères dans ce champ" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "trop peu d'arguments" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "trop d’arguments" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "FICHIER" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "Enlève les séquences terminales" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "Connecte les séquences" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "Calcule les séquences" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "Calcule les séquences terminales" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "Simplification de réseau" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "Calcul du réseau" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "Vous avez écrit « %s » ; on attendait « F » ou « B »" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "Longueur totale de la topographie = %7.2f%s (%7.2f%s ajusté)" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "Longueur totale en projection horizontale = %7.2f%s" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "Longueur totale verticale = %7.2f%s" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Intervalle vertical = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Intervalle Nord-Sud = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "Intervalle Est-Ouest = %4.2f%s (de %s à %4.2f%s jusqu’à %s à %4.2f%s)" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "Il y a 1 bouclage." #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "Il y a %ld bouclages." #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "Temps CPU utilisé %5.2fs" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "Temps utilisé %5.2fs" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "Temps utilisé non disponible" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "Temps utilisé %5.2fs (%5.2fs temps CPU)" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "Longueur originale %6.2fm (%3d visées), réduit à %6.2fm (%5.2fm/visées). " #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Erreur %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Erreur N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "affiche cette aide et quitte" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "affiche les informations sur la version et quitte" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "OPTION" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Échelle" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "échelle (50, 0,02, 1:50 et 2:100 tous signifient 1:50)" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "Pour en savoir davantage, essayez : « %s --help »\n" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "%d/%d" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "Traité le %s" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "↑%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "%s↔%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "%s↔%s ∡%s 1:%.0f" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "Développée 1:%.0f" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "Vue en plan, azimut %s vers le haut de la page" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "Coupe projetée azimut %s" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "vue en plan (équivalent à --tilt=-90)" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "Coupe projetée azimut %s, tournée de %s" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "vue en élévation (équivalent à --tilt=0)" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "Coupe développée" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "La topographie contient 1 station," #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "La topographie contient %ld stations," #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr " connectées par 1 visé." #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr " connectées par %ld visées." #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "nÅ“ud" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "nÅ“uds" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "La topographie contient %ld composants connectés." #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Enregistrer le journal" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "&Recalculer" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "argument numérique « %s » hors limite" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "l’argument « %s » n’est pas un entier" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "l’argument « %s » n’est pas un nombre" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "On attendait « DUPLICATE », « SPLAY » ou « SURFACE »" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "On attendait « NOT », « DUPLICATE », « SPLAY » ou « SURFACE »" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "On attendait « F » ou « M »" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "La station « %s » est citée dans un *entrance ou *export mais n’est jamais utilisée" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "BEGIN manquant" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "Le nom de topographie du END ne correspond pas à celui du BEGIN" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "Nom de topographie manquant dans le END" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( X (est), Y (nord), altitude )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "Profondeur d’affichage : %d bpp" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr " (couleur)" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "On attendait une date, on a trouvé « %s »" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "ne charge que la partie de la topographie avec le préfixe" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "Imprimer et quitter (nécessite un fichier 3D)" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "Définir l’endroit pour les fichiers sortis" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "Afficher seulement un bref résumé (-qq pour les erreurs seulement)" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "Ne pas créer de fichier .err" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "changer les avertissements en erreurs" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "enregistrer la sortie dans un fichier .log" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "spécifier la version du format de fichier 3D en sortie" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "fichier .espec pour contrôler l'extension" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "affiche les coupures avec les visées de surface en sortie" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "*UNITS : le facteur doit être non nul" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "Pas de données topographiques dans le fichier image 3d « %s »" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 msgid "Facing" msgstr "Direction" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "À propos de %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "Sélectionner un fichier de surface à visualiser" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "Fichiers de surface" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "Aucune donnée de terrain à proximité de la zone" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "Sélectionner un fichier de topographie à afficher" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Fichiers de données 3D Survex" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Tous les fichiers" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "Tous les fichiers de topographie" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Fichiers svx Survex" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "Fichiers MAK et DAT Compass" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "Fichiers CSV" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "Fichiers DXF" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "Fichiers EPS" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "Fichiers GPX" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "HPGL pour traceurs" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "Fichiers KML" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "Fichiers PLT Compass à utiliser avec Carto" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Fichiers Skencil" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "Fichiers pos Survex" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "Fichiers SVG" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "Fichiers JSON" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "Fichiers journaux" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "Outil de visualisation de topographies" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; version 2 de la licence, ou encore (à votre choix) toute version ultérieure." #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "FICHIER1 FICHIER2 [SEUIL]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "Les fichiers FICHIER1 et FICHIER2 peuvent êtres des fichiers .pos ou .3d\nLe SEUIL est le changement maxi. ignorable le long de n'importe quel axe en mètres (%s par défaut)" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "FICHIER_D_ENTREE_3D [FICHIER_DE_SORTIE_3D]" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "FICHIER_D_ERREUR [NOMBRE]" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "[FICHIER_TOPOGRAPHIE]" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "Non datée" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "Pas dans la boucle" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "NEWLINE ne peut pas être la première valeur" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "NEWLINE ne peut pas être la dernière valeur" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "Données sur plusieurs lignes, mais pas de NEWLINE" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "La donnée « %s » doit apparaître avant NEWLINE" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "NEWLINE ne peut être précédée que par STATION, DEPTH et COUNT" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "On ne peut pas étalonner les angles et les longueurs en même temps" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "Mauvaise commande *alias" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "Journal d’erreur de %s" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Exporter..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "Rotation &automatique\tSpace" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "Direction &inverse" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "Vue vers le &nord" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "Vue vers l’&est" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "Vue vers le &sud" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "Vue vers l’&ouest" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "Vue en &plan" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "Élé&vation" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "&Restaurer la vue par défaut" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Vue" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "Éléments" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "Format d'exportation" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "%d pages (%dx%d)" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Une page" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "Azimut" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "azimut (90, 90d, 100g, tous signifient 90°)" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "Nom de station" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "Noms de station" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "étiquettes station" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "Croisements" #: ../src/survexport.cc:140 #: n:474 msgid "station markers" msgstr "marqueurs station" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "Visées souterraines" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "visées souterraines" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "Sections" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "sections" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "Parois" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "parois" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "Galeries" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "galeries" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "Origine au centre" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "origine au centre" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "Coordonnées complètes" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "coordonnées complètes" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "Collé au sol" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "collé au sol" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "Angle de basculement" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "inclinaison (45, 45d, 50g, 100% tous signifient 45°)" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "Bordures de page" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Légende" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "Pages blanches" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "&Noms de station\tCtrl+N" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "Galeries &tubulaires\tCtrl+T" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "Terra&in" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&Croisements\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Grille\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "&Bordures du cadre\tCtrl+B" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "&Visées souterraines\tCtrl+L" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "Segments de topo en s&urface\tCtrl+F" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "segments de topo en surface" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "&Superposition des noms" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "Cou&leur par" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "Mettre en surbrillance les &entrées" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "Mettre en surbrillance les points &Fixes" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "Mettre en surbrillance les points exp&ortés" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "Entrées" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "entrées" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "Points fixes" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "points fixes" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "Points exportés" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "points exportés" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "Pe&rspective" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "Te&xture des parois" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "Rendre floue les ob&jets lointains" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "Lissage des segments topographi&ques" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "&Mode plein écran\tF11" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "Couleur par &profondeur" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "Couleur par &date" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "Couleur par &erreur" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "Couleur par erreur &horizontal" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "Couleur par erreur &vertical" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "Couleur par pe&nte" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "Couleur par &longueur" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "Couleur par &topographie" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "Couleur par st&yle" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Compas" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "C&lino" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "Couleur cle&f" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "Barre de controle des éch&elles" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "Sens &inverse\tCtrl+R" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "&Annuler la ligne de mesure\tEscape" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "I&ndicateurs" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "%s : l’option « %s » est ambiguë\n" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "%s : l’option « %c%s » n’a pas d’argument\n" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "%s : l’option « --%s » n’a pas d’argument\n" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s : l’option « %s » requiert un argument\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s : l'option nécessite un argument -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "%s : option « --%s » non reconnue\n" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "%s : option « %c%s » non reconnue\n" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s : option non valide -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "&Nouvelle présentation" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "&Ouvrir une présentation..." #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "Enregi&strer la présentation" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "Enreg&istrer la présentation sous..." #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "&Marquer" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "&Lecture" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "&Exporter en tant qu'animation..." #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "Exporter le film" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "Sélectionner un nom de fichier de sortie" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "Présentations Aven" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "Enregistrer la copie d'écran" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "Slectionner une présentation à ouvrir" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "Erreur de formatage du fichier de présentation « %s »" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "Fichier Compass PLT" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "Fichier CMAP XYZ" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "Présentation modifiée" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "La présentation en cours a été modifiée. Perte des changements non sauvés ?" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Recherche infructueuse." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Chercher" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "Masquer" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "Masquer les %d stations trouvées" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "Altitude" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "Vous ne pouvez afficher qu’un fichier image 3D à la fois" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "&Vue latérale" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, c-format msgid "%.2f E, %.2f N" msgstr "%.2f E, %.2f N" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Depuis %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "H %.2f%s, V %.2f%s" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "%s : %s, dist %.2f%s, azim %03.1f%s, pente %s" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "&Métrique" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "&Degrés" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "&Pourcent" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "km" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "m" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "cm" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr " milles" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr " mille" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "pi" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "po" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "&Masquer le compas" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "&Masquer le clinomètre" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "&Masquer l'échelle" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "&Masquer l’échelle des couleurs" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "°" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "áµ" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "%s : H %.2f%s, Azim %03.1f%s" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "%s : V %.2f%s" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "Topographies" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "Présentation" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Tout afficher" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "Masquer les autres" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "Cacher la &fratrie" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Est" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Nord" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Ouvrir...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "Ouvrir un &terrain..." #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Afficher le &journal" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&Imprimer...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "Configurer la &page..." #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "&Copie d’écran..." #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "Coupe &développée..." #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "&Exporter sous..." #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "Exporter en tant que :" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Exporter" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "Système d’information :" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "Aperçu avant impression" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "Imprimer" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&Imprimer..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "Segments de topographie en sur&face" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "Éditer un waypoint" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr " (non utilisé dans la vue en perspective)" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "Temps : " #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr " secs (0 = auto ; *6 = 6 fois auto)" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "Cette version de %s a besoin d’OpenGL pour fonctionner, mais il n’est pas disponible." #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "Séparateur dans le nom de la topographie" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "station anonyme" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "Impossible d'avoir une visée entre deux stations anonymes" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "Visées l&atérales" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "visées latérales" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "Visées &dupliquées" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "Mas&quer" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 msgid "&Fade" msgstr "&Obscurcir" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "&Tirets" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Afficher" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "Lecture de données - veuillez patienter…" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "La station %s n’a pas été trouvée" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "Visée %s → %s non trouvé" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "Début à la station %s" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "Extension vers la gauche en partant de la station %s" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "Extension vers la droite en partant de la station %s" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "Extension vers la gauche en partant de la visée %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "Extension vers la droite en partant de la visée %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "Coupure de la boucle à la station %s" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "Coupure de la boucle à la visée %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "Change la direction de la coupe développée à partir de la station %s" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "Change la direction de la coupe développée à partir de la visée %s → %s" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "Application du fichier de spécification : « %s »" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "Écriture de %s…" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "trier par facteur d’erreur horizontal" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "trier par facteur d’erreur vertical" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "trier par pourcentage d’erreur" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "trier par erreur par visée" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "remplacer le fichier .err par la version assortie" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "La lecture du fichier .err a échoué" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "Déplacement de (%3.2f,%3.2f,%3.2f) : %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "Ajouté : %s" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "Effacé : %s" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "Ré-utiliser un même nom de topographie est obsolète" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "Première utilisation du nom de topographie ici" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "ROOT est obsolète" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "rembobiner le fichier et le lire une seconde fois" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "afficher la date de la topographie (si présente)" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "Échec à l'initialisation du système de coordonnées d’entrée « %s »" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "Échec à l'initialisation du système de coordonnées de sortie « %s »" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "Projection des coordonnées" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "générer une grille (%sm par défaut)" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "hauteur du texte dans les étiquettes station (%s par défaut)" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "taille des marqueurs station (%s par défaut)" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "produire une sortie CSV" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "produire une sortie DXF" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "produire une sortie EPS" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "produire une sortie GPX" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "produire une sortie HPGL" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "produire une sortie JSON" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "produire une sortie KML" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "produire une sortie Skencil" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "produire une sortie POS Survex" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "produire une sortie PLT Compass pour Carto" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "produire une sortie SVG" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "Format d'exportation non spécifié et inconnu de l'extension du fichier de sortie" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "Format d'exportation non spécifié" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "inclure les éléments exportés par défaut" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "Erreur dans le format du fichier de police de caractères « %s »" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "Surface s&olide" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "%d trouvée(s)" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "&Préférences..." #: n:348 #~ msgid "Draw passage walls" #~ msgstr "Dessiner les parois" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "Estimation heuristique des dimensions de galerie" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "Marquer les stations d'une croix" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "Mettre en surbrillance les stations marquées comme entrées" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "Mettre en surbrillance les stations marquées comme points fixes" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "Mettre en surbrillance les stations exportées" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "Afficher les stations par leurs noms" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "Permettre aux noms de se recouvrir (affichage plus rapide)" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "Afficher les visées souterraines" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "Afficher les visées de surface" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "Couleur de la topographie de surface en fonction de l’altitude" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "Représenter les visées de surfaces par des tirets" #: n:361 #~ msgid "Draw a grid" #~ msgstr "Afficher une grille" #: n:362 #~ msgid "metric units" #~ msgstr "unités métriques" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "unités impériales" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "degrés (°)" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "grades" #: n:366 #~ msgid "Display measurements in" #~ msgstr "Afficher les distances en" #: n:367 #~ msgid "Display angles in" #~ msgstr "Afficher les angles en" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "Inverser le sens des commandes" #: n:369 #~ msgid "Display scale bar" #~ msgstr "Afficher l’échelle" #: n:370 #~ msgid "Display depth bar" #~ msgstr "Afficher la barre de profondeur" #: n:371 #~ msgid "Display compass" #~ msgstr "Afficher la boussole" #: n:372 #~ msgid "Display clinometer" #~ msgstr "Afficher le clinomètre" #: n:373 #~ msgid "Display side panel" #~ msgstr "Afficher le panneau latéral" survex-1.4.4/lib/el.po0000644000175000017500000023655514205617674011537 00000000000000msgid "" msgstr "" "Project-Id-Version: survex\n" "Report-Msgid-Bugs-To: olly@survex.com\n" "POT-Creation-Date: 1999-08-26 12:23:58 +0000\n" "PO-Revision-Date: 2014-01-15 22:05:08 +0000\n" "Last-Translator: Olly Betts \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" #. TRANSLATORS: Aven menu titles. An “&†goes before the letter of any #. accelerator key. The accelerators must be different within this group #: ../src/mainfrm.cc:988 #: n:210 msgid "&File" msgstr "&ΑÏχείο" #: ../src/mainfrm.cc:989 #: n:211 msgid "&Rotation" msgstr "Πε&ÏιστÏοφή" #: ../src/mainfrm.cc:990 #: n:212 msgid "&Orientation" msgstr "ΠÏοσανα&τολισμός" #: ../src/mainfrm.cc:991 #: n:213 msgid "&View" msgstr "&Όψη" #: ../src/mainfrm.cc:993 #: n:214 msgid "&Controls" msgstr "" #: ../src/mainfrm.cc:1005 #: n:215 msgid "&Help" msgstr "&Βοήθεια" #. TRANSLATORS: "Presentation" in the sense of a talk with a slideshow - #. the items in this menu allow the user to animate between preset #. views. #: ../src/mainfrm.cc:998 #: n:216 msgid "&Presentation" msgstr "&ΠαÏουσίαση" #. TRANSLATORS: as in: Usage: cavern … #: ../src/cmdline.c:168 #: n:49 msgid "Usage" msgstr "ΧÏήση" #: ../src/gla-gl.cc:258 #: n:389 msgid "Out of memory" msgstr "ΑνεπαÏκής μνήμη" #. TRANSLATORS: "%lu" is a placeholder for the number of bytes which Survex #. was trying to allocate space for. #: ../src/message.c:77 #: n:1 #, fuzzy, c-format msgid "Out of memory (couldn’t find %lu bytes)." msgstr "ΑνεπαÏκής μνήμη (%lu bytes)" #. TRANSLATORS: %s will be replaced by the filename that we were trying #. to read when we ran out of memory. #: ../src/img_hosted.c:34 #: n:38 #, fuzzy, c-format msgid "Out of memory trying to read file “%sâ€" msgstr "ΑνεπαÏκής μνήμη: “%sâ€" #. TRANSLATORS: Feel free to translate as "or newer" instead of "or #. greater" if that gives a more natural translation. It's #. technically not quite right when there are parallel active release #. series (e.g. Survex 1.0.40 was released *after* 1.2.0), but this #. seems unlikely to confuse users. "Survex" is the name of the #. software, so should not be translated. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:2298 #: n:2 #, c-format msgid "Survex version %s or greater required to process this survey data." msgstr "" #. TRANSLATORS: Indicates a informational message e.g.: #. "spoon.svx:12: info: Declination: [...]" #: ../src/message.c:1221 #: n:485 msgid "info" msgstr "" #. TRANSLATORS: Indicates a warning message e.g.: #. "spoon.svx:12: warning: *prefix is deprecated" #: ../src/aven.cc:467 #: ../src/cavernlog.cc:662 #: ../src/message.c:1234 #: n:4 msgid "warning" msgstr "Ï€Ïοειδοποίηση" #. TRANSLATORS: Indicates an error message e.g.: #. "spoon.svx:13:4: error: Field may not be omitted" #: ../src/cavernlog.cc:661 #: ../src/message.c:1238 #: ../src/survexport.cc:455 #: n:93 msgid "error" msgstr "σφάλμα" #. TRANSLATORS: %s is replaced by the filename of the parent file, and %u #. by the line number in that file. Your translation should also contain #. %s:%u so that automatic parsing of error messages to determine the file #. and line number still works. #: ../src/datain.c:107 #: n:5 #, c-format msgid "In file included from %s:%u:\n" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:667 #: n:6 msgid "*prefix is deprecated - use *begin and *end instead" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/readval.c:209 #: n:7 #, c-format msgid "Character “%c†not allowed in station name (use *SET NAMES to set allowed characters)" msgstr "" #: ../src/readval.c:395 #: n:8 msgid "Field may not be omitted" msgstr "" #: ../src/datain.c:1653 #: ../src/datain.c:1688 #: ../src/datain.c:2037 #: ../src/readval.c:397 #: ../src/readval.c:445 #: ../src/readval.c:475 #: n:9 #, c-format msgid "Expecting numeric field, found “%sâ€" msgstr "" #: ../src/commands.c:1879 #: n:10 #, c-format msgid "Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€" msgstr "" #: ../src/debug.h:45 #: ../src/debug.h:47 #: ../src/matrix.c:352 #: n:11 msgid "Bug in program detected! Please report this to the authors" msgstr "" #: ../src/commands.c:2428 #: ../src/extend.c:456 #: n:12 #, c-format msgid "Unknown command “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/netbits.c:442 #: n:13 #, c-format msgid "Station “%s†equated to itself" msgstr "" #. TRANSLATORS: Here "legs" are survey legs, i.e. measurements between #. survey stations. #: ../src/datain.c:1194 #: n:14 msgid "Compass reading may not be omitted except on plumbed legs" msgstr "" #: ../src/datain.c:1832 #: ../src/datain.c:1953 #: n:94 msgid "Tape reading may not be omitted" msgstr "" #: ../src/datain.c:383 #: ../src/extend.c:461 #: n:15 msgid "End of line not blank" msgstr "" #: ../src/cavern.c:382 #: n:16 #, c-format msgid "There were %d warning(s)." msgstr "" #. TRANSLATORS: %s is replaced by the command we attempted to run. #: ../src/cavernlog.cc:431 #: ../src/cavernlog.cc:476 #: ../src/mainfrm.cc:1586 #: n:17 #, c-format msgid "Couldn’t run external command: “%sâ€" msgstr "Η εκτέλεση της εντολής “%s†απέτυχε" #: ../src/datain.c:85 #: ../src/datain.c:93 #: ../src/datain.c:128 #: ../src/datain.c:150 #: ../src/datain.c:167 #: ../src/datain.c:872 #: ../src/extend.c:690 #: ../src/sorterr.c:80 #: ../src/sorterr.c:97 #: ../src/sorterr.c:240 #: n:18 msgid "Error reading file" msgstr "Σφάλμα ανάγνωσης αÏχείου" #: ../src/message.c:1254 #: n:19 msgid "Too many errors - giving up" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:1760 #: n:20 msgid "*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT instead" msgstr "" #. TRANSLATORS: A "plumbed leg" is one measured using a plumbline #. (a weight on a string). So the problem here is that the leg is #. vertical, so a compass reading has no meaning! #: ../src/datain.c:1164 #: n:21 msgid "Compass reading given on plumbed leg" msgstr "" #: ../src/commands.c:761 #: n:22 msgid "END with no matching BEGIN in this file" msgstr "" #: ../src/datain.c:859 #: n:23 msgid "BEGIN with no matching END in this file" msgstr "" #. TRANSLATORS: A station must be exported out of each level it is in, so #. this would give "Station “\outer.inner.1†not exported from survey #. “\outerâ€)": #. #. *equate entrance outer.inner.1 #. *begin outer #. *begin inner #. *export 1 #. 1 2 1.23 045 -6 #. *end inner #. *end outer #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/commands.c:1119 #: ../src/commands.c:1121 #: ../src/listpos.c:104 #: ../src/readval.c:332 #: ../src/readval.c:335 #: n:26 #, c-format msgid "Station “%s†not exported from survey “%sâ€" msgstr "" #. TRANSLATORS: This error occurs if there's an attempt to #. export a station from a survey which doesn't actually exist. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/listpos.c:112 #: n:286 #, c-format msgid "Reference to station “%s†from non-existent survey “%sâ€" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Here "survey" is a "cave map" rather than list of questions - it should be #. translated to the terminology that cavers using the language would use. #: ../src/readval.c:306 #: n:27 #, c-format msgid "“%s†can’t be both a station and a survey" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/extend.c:259 #: ../src/extend.c:278 #: ../src/extend.c:325 #: ../src/extend.c:369 #: ../src/extend.c:413 #: ../src/readval.c:205 #: n:28 msgid "Expecting station name" msgstr "" #: ../src/commands.c:2215 #: n:31 #, c-format msgid "Found “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€" msgstr "" #: ../src/commands.c:2221 #: n:32 #, c-format msgid "Found “%sâ€, expecting “ON†or “OFFâ€" msgstr "" #. TRANSLATORS: EQUATE is a command name, so shouldn’t be #. translated. #. #. Here "station" is a survey station, not a train station. #: ../src/commands.c:1078 #: n:33 msgid "Only one station in EQUATE command" msgstr "" #. TRANSLATORS: A "quantity" is something measured like "LENGTH", #. "BEARING", "ALTITUDE", etc. #: ../src/commands.c:485 #: n:34 #, c-format msgid "Unknown quantity “%sâ€" msgstr "" #: ../src/commands.c:389 #: n:35 #, c-format msgid "Unknown units “%sâ€" msgstr "" #: ../src/commands.c:400 #: n:479 #, c-format msgid "Units “%s†are deprecated, assuming “grads†- see manual for details" msgstr "" #: ../src/commands.c:2049 #: ../src/commands.c:2125 #: n:434 msgid "Unknown coordinate system" msgstr "" #: ../src/commands.c:2147 #: ../src/commands.c:2175 #: n:443 #, c-format msgid "Invalid coordinate system: %s" msgstr "" #: ../src/commands.c:2133 #: ../src/commands.c:2154 #: n:435 msgid "Coordinate system unsuitable for output" msgstr "" #: ../src/commands.c:893 #: ../src/commands.c:1710 #: n:436 #, c-format msgid "Failed to convert coordinates: %s" msgstr "" #: ../src/commands.c:896 #: n:437 msgid "The input projection is set but the output projection isn't" msgstr "" #: ../src/commands.c:898 #: n:438 msgid "The output projection is set but the input projection isn't" msgstr "" #: ../src/commands.c:852 #: n:439 msgid "Coordinates can't be omitted when coordinate system has been specified" msgstr "" #: ../src/commands.c:1696 #: n:301 msgid "Input coordinate system must be specified for “*DECLINATION AUTOâ€" msgstr "" #: ../src/commands.c:1688 #: n:309 msgid "Expected number or “AUTOâ€" msgstr "" #: ../src/datain.c:1005 #: n:304 msgid "No survey date specified - using 0 for magnetic declination" msgstr "" #. TRANSLATORS: This message gives information about the range of #. declination values and the grid convergence value calculated for #. each "*declination auto ..." command. #. #. The first %s will be replaced by the declination range (or single #. value), and %.1f%s by the grid convergence angle. #: ../src/commands.c:743 #: n:484 #, c-format msgid "Declination: %s, grid convergence: %.1f%s" msgstr "" #. TRANSLATORS: Used when a BEGIN command has no survey, but the #. END command does, e.g.: #. #. *begin #. 1 2 10.00 178 -01 #. *end entrance <--[Message given here] #: ../src/commands.c:791 #: n:36 msgid "Matching BEGIN command has no survey name" msgstr "" #. TRANSLATORS: Note: In English you talk about the *units* of a single #. measurement, but the correct term in other languages may be singular. #: ../src/commands.c:413 #: n:37 #, c-format msgid "Invalid units “%s†for quantity" msgstr "" #: ../src/commands.c:477 #: n:39 #, c-format msgid "Unknown instrument “%sâ€" msgstr "" #. TRANSLATORS: DECLINATION is a built-in keyword, so best not to #. translate #: ../src/commands.c:1661 #: n:40 msgid "Scale factor must be 1.0 for DECLINATION" msgstr "" #. TRANSLATORS: If the scale factor for an instrument is zero, then any #. reading would be mapped to zero, which doesn't make sense. #: ../src/commands.c:1669 #: n:391 msgid "Scale factor must be non-zero" msgstr "" #: ../src/commands.c:1778 #: n:41 #, c-format msgid "Unknown setting “%sâ€" msgstr "" #: ../src/commands.c:522 #: n:42 #, c-format msgid "Unknown character class “%sâ€" msgstr "" #: ../src/extend.c:700 #: ../src/netskel.c:93 #: n:43 msgid "No survey data" msgstr "" #: ../src/filename.c:52 #: ../src/img_hosted.c:39 #: n:44 #, c-format msgid "Filename “%s†refers to directory" msgstr "" #. TRANSLATORS: At the end of processing (or if a *SOLVE command is used) #. cavern will issue this error if there are any sections of the survey #. network which are hanging. #: ../src/netartic.c:387 #: n:45 msgid "Survey not all connected to fixed stations" msgstr "" #: ../src/commands.c:1008 #: ../src/datain.c:788 #: n:46 msgid "Station already fixed or equated to a fixed point" msgstr "" #: ../src/cavern.c:287 #: ../src/filename.c:55 #: ../src/gfxcore.cc:4201 #: ../src/img_hosted.c:35 #: n:47 #, c-format msgid "Failed to open output file “%sâ€" msgstr "" #: ../src/commands.c:905 #: ../src/commands.c:919 #: ../src/commands.c:931 #: ../src/commands.c:1833 #: n:48 msgid "Standard deviation must be positive" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #. #. %s is replaced by the name of the station. #: ../src/netbits.c:339 #: n:50 #, c-format msgid "Survey leg with same station (“%sâ€) at both ends - typing error?" msgstr "" #. TRANSLATORS: %.f%s will be replaced with a right angle in the #. units currently in use, e.g. "90°" or "100áµ". And "absolute #. value" means the reading ignoring the sign (so it might be #. < -90° or > 90°. #: ../src/datain.c:1085 #: ../src/datain.c:1098 #: n:51 #, c-format msgid "Clino reading over %.f%s (absolute value)" msgstr "" #: ../src/netbits.c:457 #: n:52 #, c-format msgid "Tried to equate two non-equal fixed stations: “%s†and “%sâ€" msgstr "" #. TRANSLATORS: "equal" as in: #. #. *fix a 1 2 3 #. *fix b 1 2 3 #. *equate a b #: ../src/netbits.c:468 #: n:53 #, c-format msgid "Equating two equal fixed points: “%s†and “%sâ€" msgstr "" #. TRANSLATORS: " *fix a " gives this message: #: ../src/commands.c:862 #: n:54 msgid "FIX command with no coordinates - fixing at (0,0,0)" msgstr "" #. TRANSLATORS: *fix a 1 2 3 / *fix a 1 2 3 #: ../src/commands.c:1012 #: ../src/datain.c:790 #: n:55 msgid "Station already fixed at the same coordinates" msgstr "" #. TRANSLATORS: Emitted after second and subsequent "FIX command with #. no coordinates - fixing at (0,0,0)" warnings. #: ../src/commands.c:871 #: n:441 #, c-format msgid "Already had FIX command with no coordinates for station “%sâ€" msgstr "" #: ../src/commands.c:1932 #: n:442 #, c-format msgid "Station “%s†fixed before CS command first used" msgstr "" #. TRANSLATORS: The *EXPORT command is only valid just after *BEGIN #. , so this would generate this error: #. #. *begin fred #. 1 2 1.23 045 -6 #. *export 2 #. *end fred #: ../src/commands.c:2442 #: n:57 msgid "*EXPORT must immediately follow “*BEGIN â€" msgstr "" #. TRANSLATORS: %d will be replaced by the assumed year, e.g. 1918 #: ../src/readval.c:539 #: n:76 #, c-format msgid "Assuming 2 digit year is %d" msgstr "" #: ../src/readval.c:544 #: n:58 msgid "Invalid year (< 1900 or > 2078)" msgstr "" #. TRANSLATORS: Suspicious means something like 410 degrees or -20 #. degrees #: ../src/datain.c:973 #: ../src/datain.c:982 #: n:59 msgid "Suspicious compass reading" msgstr "" #: ../src/datain.c:1660 #: n:60 msgid "Negative tape reading" msgstr "" #: ../src/commands.c:857 #: n:61 msgid "Same station fixed twice with no coordinates" msgstr "" #. TRANSLATORS: This means that the data fed in said this. #. #. It could be a gross error (e.g. the decimal point is missing from the #. depth gauge reading) or it could just be due to random error on a near #. vertical leg #: ../src/datain.c:1349 #: n:62 msgid "Tape reading is less than change in depth" msgstr "" #. TRANSLATORS: a data "style" is something like NORMAL, DIVING, etc. #. a "reading" is one of FROM, TO, TAPE, COMPASS, CLINO for NORMAL #. neither style nor reading is a keyword in the program This error #. complains about a depth gauge reading in normal style, for example #: ../src/commands.c:1351 #: n:63 #, c-format msgid "Reading “%s†not allowed in data style “%sâ€" msgstr "" #. TRANSLATORS: i.e. not enough readings for the style. #: ../src/commands.c:1532 #: n:64 #, c-format msgid "Too few readings for data style “%sâ€" msgstr "" #. TRANSLATORS: e.g. trying to refer to an invalid FNORD data style #: ../src/commands.c:1312 #: n:65 #, c-format msgid "Data style “%s†unknown" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #. #. Exporting a station twice gives this error: #. #. *begin example #. *export 1 #. *export 1 #. 1 2 1.24 045 -6 #. *end example #: ../src/commands.c:1173 #: n:66 #, c-format msgid "Station “%s†already exported" msgstr "" #. TRANSLATORS: complains about a situation like trying to define #. two from stations per leg #: ../src/commands.c:1376 #: n:67 #, c-format msgid "Duplicate reading “%sâ€" msgstr "" #: ../src/commands.c:1038 #: n:68 #, c-format msgid "FLAG “%s†unknown" msgstr "" #: ../src/readval.c:489 #: n:69 msgid "Missing \"" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train station. #: ../src/listpos.c:122 #: n:70 #, c-format msgid "Station “%s†referred to just once, with an explicit survey name - typo?" msgstr "" #. TRANSLATORS: Here "station" is a survey station, not a train #. station. #: ../src/netartic.c:405 #: n:71 msgid "The following survey stations are not attached to a fixed point:" msgstr "" #: ../src/netskel.c:138 #: n:72 #, c-format msgid "Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)" msgstr "" #. TRANSLATORS: fixed survey station that is not part of any survey #: ../src/netskel.c:961 #: n:73 #, c-format msgid "Unused fixed point “%sâ€" msgstr "" #: ../src/matrix.c:123 #: n:74 msgid "Network solved by reduction - no simultaneous equations to solve." msgstr "" #: ../src/matrix.c:134 #: n:75 #, c-format msgid "Solving %d simultaneous equations" msgstr "" #. TRANSLATORS: This is an error from the *DATA command. It #. means that a reading (which will appear where %s is isn't #. valid as the list of readings has already included the same #. reading, or an equivalent one (e.g. you can't have both #. DEPTH and DEPTHCHANGE together). #: ../src/commands.c:1440 #: n:77 #, c-format msgid "Reading “%s†duplicates previous reading(s)" msgstr "" #: ../src/matrix.c:132 #: n:78 msgid "Solving one equation" msgstr "" #: ../src/datain.c:1124 #: ../src/datain.c:1338 #: ../src/datain.c:1534 #: n:79 msgid "Negative adjusted tape reading" msgstr "" #: ../src/commands.c:2339 #: ../src/commands.c:2361 #: n:80 msgid "Date is in the future!" msgstr "" #: ../src/commands.c:2366 #: n:81 msgid "End of date range is before the start" msgstr "" #. TRANSLATORS: e.g. the user specifies a passage cross-section at #. station "entrance.27", but there is no station "entrance.27" in #. the centre-line. #: ../src/netskel.c:1049 #: n:83 #, c-format msgid "Cross section specified at non-existent station “%sâ€" msgstr "" #. TRANSLATORS: In data with backsights, the user has tried to give a #. plumb for the foresight and a clino reading for the backsight, or #. something similar. #: ../src/datain.c:1148 #: n:84 msgid "CLINO and BACKCLINO readings must be of the same type" msgstr "" #. TRANSLATORS: We've been told the foresight and backsight are #. both "UP", or that they're both "DOWN". #: ../src/datain.c:1173 #: n:92 msgid "Plumbed CLINO and BACKCLINO readings can't be in the same direction" msgstr "" #: ../src/readval.c:555 #: n:86 msgid "Invalid month" msgstr "" #. TRANSLATORS: e.g. 31st of April, or 32nd of any month #: ../src/readval.c:566 #: n:87 msgid "Invalid day of the month" msgstr "" #: ../src/cavern.c:236 #: n:88 #, c-format msgid "3d file format versions %d to %d supported" msgstr "" #: ../src/readval.c:203 #: n:89 msgid "Expecting survey name" msgstr "" #: ../src/datain.c:504 #: ../src/extend.c:685 #: ../src/img_hosted.c:30 #: ../src/mainfrm.cc:412 #: ../src/sorterr.c:146 #: n:24 #, c-format msgid "Couldn’t open file “%sâ€" msgstr "Δεν είναι δυνατό το άνοιγμα του αÏχείου “%sâ€" #: ../src/printing.cc:657 #: ../src/survexport.cc:451 #: n:402 #, c-format msgid "Couldn’t write file “%sâ€" msgstr "" #. TRANSLATORS: If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:540 #: ../src/commands.c:645 #: ../src/commands.c:669 #: ../src/commands.c:1326 #: ../src/commands.c:1762 #: ../src/readval.c:92 #: n:95 msgid "Further uses of this deprecated feature will not be reported" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "0.12m" or "0.2ft". #: ../src/datain.c:1821 #: ../src/datain.c:1942 #: n:97 #, c-format msgid "TAPE reading and BACKTAPE reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1037 #: n:98 #, c-format msgid "COMPASS reading and BACKCOMPASS reading disagree by %s" msgstr "" #. TRANSLATORS: %s is replaced by the amount the readings disagree #. by, e.g. "2.5°" or "3áµ". #: ../src/datain.c:1225 #: n:99 #, c-format msgid "CLINO reading and BACKCLINO reading disagree by %s" msgstr "" #: ../src/commands.c:1323 #: n:104 #, c-format msgid "“*data %s %c …†is deprecated - use “*data %s …†instead" msgstr "" #. TRANSLATORS: Perhaps the user tried to load a different type of file as #. a Survex .3d file, or the .3d file was corrupted. #: ../src/img_hosted.c:38 #: n:106 #, c-format msgid "Bad 3d image file “%sâ€" msgstr "" #. TRANSLATORS: This is the date format string used to timestamp .3d #. files internally. Probably best to keep it the same for all #. translations. #: ../src/img.c:43 #: ../src/model.cc:393 #: n:107 #, c-format msgid "%a,%Y.%m.%d %H:%M:%S %Z" msgstr "" #. TRANSLATORS: used a processed survey with no processing date/time info #: ../src/model.cc:386 #: n:108 msgid "Date and time not available." msgstr "" #: ../src/img_hosted.c:40 #: n:109 #, c-format msgid "Error reading from file “%sâ€" msgstr "" #: ../src/cavernlog.cc:837 #: ../src/filename.c:79 #: ../src/img_hosted.c:41 #: ../src/mainfrm.cc:374 #: ../src/mainfrm.cc:1511 #: n:110 #, fuzzy, c-format msgid "Error writing to file “%sâ€" msgstr "Σφάλμα κατά την εγγÏαφή στο αÏχείο “%sâ€" #: ../src/filename.c:82 #: n:111 msgid "Error writing to file" msgstr "Σφάλμα κατά την εγγÏαφή στο αÏχείο" #: ../src/cavern.c:377 #: n:113 #, c-format msgid "There were %d warning(s) and %d error(s) - no output files produced." msgstr "" #: ../src/img_hosted.c:42 #: n:114 #, c-format msgid "File “%s†has a newer format than this program can understand" msgstr "" #: ../src/printing.cc:1145 #: n:115 msgid "North" msgstr "ΒοÏÏάς" #. TRANSLATORS: "Elevation on" 020 <-> 200 degrees #: ../src/printing.cc:1170 #: n:116 msgid "Elevation on" msgstr "" #: ../src/printing.cc:451 #: n:117 msgid "P&lan view" msgstr "" #: ../src/printing.cc:453 #: n:285 msgid "&Elevation" msgstr "" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. neither from directly above nor from directly below. It is #. also used in the dialog for editing a marked position in a #. presentation. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:921 #: ../src/gfxcore.cc:2157 #: ../src/mainfrm.cc:162 #: n:118 msgid "Elevation" msgstr "" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly above. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:821 #: ../src/gfxcore.cc:2151 #: n:432 msgid "Plan" msgstr "Πλάνο" #. TRANSLATORS: Label used for "clino" in Aven when the view is #. from directly below. #. #. Try to keep this translation short - ideally at most 10 #. characters - as otherwise the compass and clino will be moved #. further apart to make room. */ #: ../src/gfxcore.cc:835 #: ../src/gfxcore.cc:2154 #: n:433 msgid "Kiwi Plan" msgstr "" #: ../src/cavern.c:341 #: n:120 msgid "Calculating statistics" msgstr "" #: ../src/readval.c:508 #: n:121 msgid "Expecting string field" msgstr "" #: ../src/cmdline.c:212 #: n:122 msgid "too few arguments" msgstr "Ï€Î¿Î»Ï Î»Î¯Î³Î± οÏίσματα" #: ../src/cmdline.c:219 #: n:123 msgid "too many arguments" msgstr "πάÏα πολλές παÏάμετÏοι" #: ../src/cmdline.c:178 #: ../src/cmdline.c:181 #: ../src/cmdline.c:185 #: n:124 msgid "FILE" msgstr "ΑΡΧΕΊΟ" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:180 #: n:125 msgid "Removing trailing traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:239 #: n:126 msgid "Concatenating traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #: ../src/netskel.c:437 #: n:127 msgid "Calculating traverses" msgstr "" #. TRANSLATORS: In French, Eric chose to use the terminology used by #. toporobot: "sequence" for the English "traverse", which makes sense #. (although toporobot actually uses this term to mean something more #. specific). Feel free to follow this lead if you can't think of a better #. term - these messages mostly indicate how processing is progressing. #. #. A trailing traverse is a dead end back to a junction. #: ../src/netskel.c:782 #: n:128 msgid "Calculating trailing traverses" msgstr "" #: ../src/network.c:82 #: n:129 msgid "Simplifying network" msgstr "" #: ../src/network.c:540 #: n:130 msgid "Calculating network" msgstr "" #: ../src/datain.c:1642 #: n:131 #, c-format msgid "Found “%sâ€, expecting “F†or “Bâ€" msgstr "" #: ../src/cavern.c:443 #: n:132 #, c-format msgid "Total length of survey legs = %7.2f%s (%7.2f%s adjusted)" msgstr "" #: ../src/cavern.c:446 #: n:133 #, c-format msgid "Total plan length of survey legs = %7.2f%s" msgstr "" #: ../src/cavern.c:449 #: n:134 #, c-format msgid "Total vertical length of survey legs = %7.2f%s" msgstr "" #. TRANSLATORS: numbers are altitudes of highest and lowest stations #: ../src/cavern.c:456 #: n:135 #, c-format msgid "Vertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #. TRANSLATORS: c.f. previous message #: ../src/cavern.c:459 #: n:136 #, c-format msgid "North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #. TRANSLATORS: c.f. previous two messages #: ../src/cavern.c:462 #: n:137 #, c-format msgid "East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)" msgstr "" #: ../src/cavern.c:428 #: n:138 msgid "There is 1 loop." msgstr "" #: ../src/cavern.c:430 #: n:139 #, c-format msgid "There are %ld loops." msgstr "" #: ../src/cavern.c:363 #: n:140 #, c-format msgid "CPU time used %5.2fs" msgstr "" #: ../src/cavern.c:366 #: n:141 #, c-format msgid "Time used %5.2fs" msgstr "" #: ../src/cavern.c:368 #: n:142 msgid "Time used unavailable" msgstr "" #: ../src/cavern.c:371 #: n:143 #, c-format msgid "Time used %5.2fs (%5.2fs CPU time)" msgstr "" #: ../src/netskel.c:747 #: n:145 #, c-format msgid "Original length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). " msgstr "" #: ../src/netskel.c:750 #: n:146 #, c-format msgid "Error %6.2f%%" msgstr "Σφαλμα %6.2f%%" #. TRANSLATORS: Here N/A means "Not Applicable" -- it means the #. traverse has zero length, so error per metre is meaningless. #. #. There should be 4 spaces between "Error" and "N/A" so that it lines #. up with the numbers in the message above. #: ../src/netskel.c:757 #: n:147 msgid "Error N/A" msgstr "Σφαλμα N/A" #. TRANSLATORS: description of --help option #: ../src/cmdline.c:138 #: n:150 msgid "display this help and exit" msgstr "εμφάνιση αυτής της βοήθειας και έξοδος" #. TRANSLATORS: description of --version option #: ../src/cmdline.c:141 #: n:151 msgid "output version information and exit" msgstr "Ï€Ïοβολή πληÏοφοÏιών έκδοσης και έξοδος" #. TRANSLATORS: in command line usage messages e.g. Usage: cavern [OPTION]… #: ../src/cmdline.c:170 #: n:153 msgid "OPTION" msgstr "ΕΠΙΛΟΓΗ" #: ../src/mainfrm.cc:166 #: ../src/printing.cc:391 #: ../src/printing.cc:1207 #: ../src/printing.cc:1256 #: n:154 msgid "Scale" msgstr "Κλίμακας" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:128 #: n:217 msgid "scale (50, 0.02, 1:50 and 2:100 all mean 1:50)" msgstr "" #: ../src/cmdline.c:194 #: n:157 #, c-format msgid "Try “%s --help†for more information.\n" msgstr "" #. TRANSLATORS: N/M meaning page N of M in the page footer of a printout. #: ../src/printing.cc:1915 #: n:232 #, c-format msgid "%d/%d" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly indicate that #. the date which follows is the date that the survey data was processed. #. #. Aven will replace %s with a string giving the date and time (e.g. #. "2015-06-09 12:40:44"). #: ../src/printing.cc:1956 #: n:167 #, c-format msgid "Processed: %s" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a plan view and what the viewing angle is. #. Aven will replace %s with the bearing, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1870 #: n:233 #, c-format msgid "↑%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an elevation view and what the viewing angle #. is. Aven will replace the %s codes with the bearings to the #. left and right of the viewer, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1881 #: n:235 #, c-format msgid "%s↔%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is a tilted elevation view and what the viewing #. angles are. Aven will replace the %s codes with the bearings to #. the left and right of the viewer and the angle the view is #. tilted at, and %.0f with the scale. #. #. This message probably doesn't need translating for most languages. #: ../src/printing.cc:1894 #: n:236 #, c-format msgid "%s↔%s ∡%s 1:%.0f" msgstr "" #. TRANSLATORS: Used in the footer of printouts to compactly #. indicate this is an extended elevation view. Aven will replace #. %.0f with the scale. #. #. Try to keep the translation short (for example, in English we #. use "Extended" not "Extended elevation") - there is limited room #. in the footer, and the details there are mostly to make it easy #. to check that you have corresponding pages from a multiple page #. printout. #: ../src/printing.cc:1910 #: n:244 #, c-format msgid "Extended 1:%.0f" msgstr "" #. TRANSLATORS: This is used on printouts of plans, with %s replaced by #. something like "123°". The bearing is up the page. #: ../src/printing.cc:1151 #: n:168 #, c-format msgid "Plan view, %s up page" msgstr "" #. TRANSLATORS: This is used on printouts of elevations, with %s #. replaced by something like "123°". The bearing is the direction #. we’re looking. #: ../src/printing.cc:1183 #: n:169 #, c-format msgid "Elevation facing %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=-90 #: ../src/survexport.cc:134 #: n:462 msgid "plan view (equivalent to --tilt=-90)" msgstr "" #. TRANSLATORS: This is used on printouts of tilted elevations, with #. the first %s replaced by something like "123°", and the second by #. something like "-45°". The bearing is the direction we’re #. looking. #: ../src/printing.cc:1190 #: n:284 #, c-format msgid "Elevation facing %s, tilted %s" msgstr "" #. TRANSLATORS: Don't translate example command line option --tilt=0 #: ../src/survexport.cc:136 #: n:463 msgid "elevation view (equivalent to --tilt=0)" msgstr "" #. TRANSLATORS: This is used on printouts of extended elevations. #: ../src/printing.cc:1199 #: n:191 msgid "Extended elevation" msgstr "" #: ../src/cavern.c:414 #: n:172 msgid "Survey contains 1 survey station," msgstr "" #: ../src/cavern.c:416 #: n:173 #, c-format msgid "Survey contains %ld survey stations," msgstr "" #: ../src/cavern.c:420 #: n:174 msgid " joined by 1 leg." msgstr "" #: ../src/cavern.c:422 #: n:175 #, c-format msgid " joined by %ld legs." msgstr "" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:185 #: n:176 msgid "node" msgstr "κόμβος" #. TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." #: ../src/listpos.c:187 #: n:177 msgid "nodes" msgstr "κόμβοι" #. TRANSLATORS: "Connected component" in the graph theory sense - it #. means there are %ld bits of survey with no connections between them. #. This message is only used if there are more than 1. #: ../src/cavern.c:439 #: n:178 #, c-format msgid "Survey has %ld connected components." msgstr "" #. TRANSLATORS: Label for button in aven’s cavern log window which #. allows the user to save the log to a file. #: ../src/cavernlog.cc:769 #: n:446 msgid "&Save Log" msgstr "&Αποθήκευση καταγÏαφής" #. TRANSLATORS: Label for button in aven’s cavern log window which #. causes the survey data to be reprocessed. #: ../src/cavernlog.cc:779 #: ../src/cavernlog.cc:784 #: n:184 msgid "&Reprocess" msgstr "" #: ../src/cmdline.c:242 #: ../src/cmdline.c:261 #: n:185 #, c-format msgid "numeric argument “%s†out of range" msgstr "" #: ../src/cmdline.c:244 #: n:186 #, c-format msgid "argument “%s†not an integer" msgstr "" #: ../src/cmdline.c:263 #: n:187 #, c-format msgid "argument “%s†not a number" msgstr "" #: ../src/commands.c:1052 #: n:188 msgid "Expecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "" #: ../src/commands.c:1054 #: n:189 msgid "Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€" msgstr "" #: ../src/datain.c:757 #: n:103 msgid "Expecting “F†or “Mâ€" msgstr "" #: readval.c:421 #: readval.c:443 #: readval.c:453 #: readval.c:465 #: n:483 #, c-format msgid "Expecting quadrant bearing, found “%sâ€" msgstr "" #: ../src/listpos.c:82 #: n:190 #, c-format msgid "Station “%s†referred to by *entrance or *export but never used" msgstr "" #: ../src/commands.c:759 #: n:192 msgid "No matching BEGIN" msgstr "" #. TRANSLATORS: *BEGIN and *END should have the #. same if it’s given at all #: ../src/commands.c:795 #: n:193 msgid "Survey name doesn’t match BEGIN" msgstr "" #. TRANSLATORS: Used when a BEGIN command has a survey name, but the #. END command omits it, e.g.: #. #. *begin entrance #. 1 2 10.00 178 -01 #. *end <--[Message given here] #: ../src/commands.c:805 #: n:194 msgid "Survey name omitted from END" msgstr "" #. TRANSLATORS: Heading line for .pos file. Please try to ensure the #. “,â€s (or at least the columns) are in the same place #: ../src/pos.cc:102 #: n:195 msgid "( Easting, Northing, Altitude )" msgstr "( Ανατολικά, Î’ÏŒÏεια, ΥψόμετÏο )" #. TRANSLATORS: bpp is "Bits Per Pixel" #: ../src/aboutdlg.cc:174 #: n:196 #, c-format msgid "Display Depth: %d bpp" msgstr "" #. TRANSLATORS: appended to previous message if the display is colour #: ../src/aboutdlg.cc:176 #: n:197 msgid " (colour)" msgstr "" #: ../src/readval.c:531 #: ../src/readval.c:552 #: ../src/readval.c:562 #: n:198 #, c-format msgid "Expecting date, found “%sâ€" msgstr "" #. TRANSLATORS: --help output for --survey option. #. #. "this" has been added to English translation #: ../src/aven.cc:70 #: ../src/diffpos.c:57 #: ../src/dump3d.c:49 #: ../src/extend.c:480 #: ../src/survexport.cc:126 #: n:199 msgid "only load the sub-survey with this prefix" msgstr "" #. TRANSLATORS: --help output for aven --print option #: ../src/aven.cc:72 #: n:119 msgid "print and exit (requires a 3d file)" msgstr "" #. TRANSLATORS: --help output for cavern --output option #: ../src/cavern.c:121 #: n:162 msgid "set location for output files" msgstr "" #. TRANSLATORS: --help output for cavern --quiet option #: ../src/cavern.c:123 #: n:163 msgid "only show brief summary (-qq for errors only)" msgstr "" #. TRANSLATORS: --help output for cavern --no-auxiliary-files option #: ../src/cavern.c:125 #: n:164 msgid "do not create .err file" msgstr "" #. TRANSLATORS: --help output for cavern --warnings-are-errors option #: ../src/cavern.c:127 #: n:165 msgid "turn warnings into errors" msgstr "" #. TRANSLATORS: --help output for cavern --log option #: ../src/cavern.c:129 #: n:170 msgid "log output to .log file" msgstr "" #. TRANSLATORS: --help output for cavern --3d-version option #: ../src/cavern.c:131 #: n:171 msgid "specify the 3d file format version to output" msgstr "" #. TRANSLATORS: --help output for extend --specfile option #: ../src/extend.c:482 #: n:90 msgid ".espec file to control extending" msgstr "" #. TRANSLATORS: --help output for extend --show-breaks option #: ../src/extend.c:484 #: n:91 msgid "show breaks with surface survey legs in output" msgstr "" #. TRANSLATORS: error message given by "*units tape 0 feet" - it’s #. meaningless to say your tape is marked in "0 feet" (but you might #. measure distance by counting knots on a diving line, and tie them #. every "2 feet"). #: ../src/commands.c:1583 #: n:200 msgid "*UNITS factor must be non-zero" msgstr "" #: ../src/model.cc:403 #: n:202 #, c-format msgid "No survey data in 3d file “%sâ€" msgstr "" #. TRANSLATORS: Used in aven above the compass indicator at the lower #. right of the display, with a bearing below "Facing". This indicates the #. direction the viewer is "facing" in. #. #. Try to keep this translation short - ideally at most 10 characters - #. as otherwise the compass and clino will be moved further apart to #. make room. */ #: ../src/gfxcore.cc:807 #: ../src/gfxcore.cc:2138 #: n:203 #, fuzzy msgid "Facing" msgstr "ΣτÏαμμένη" #. TRANSLATORS: for the title of the About box #: ../src/aboutdlg.cc:62 #: n:205 #, c-format msgid "About %s" msgstr "Σχετικά %s" #. TRANSLATORS: "Terrain file" being a digital model of the terrain (e.g. a #. grid of height values). #: ../src/mainfrm.cc:1466 #: n:451 msgid "Select a terrain file to view" msgstr "" #: ../src/mainfrm.cc:1460 #: n:452 msgid "Terrain files" msgstr "" #. TRANSLATORS: Aven shows a circle of terrain covering the area #. of the survey plus a bit, but the terrain data file didn't #. contain any data inside that circle. #: ../src/gfxcore.cc:3164 #: n:161 msgid "No terrain data near area of survey" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. File->Open dialog: #: ../src/mainfrm.cc:1437 #: n:206 msgid "Select a survey file to view" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "3d" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1414 #: ../src/mainfrm.cc:1565 #: n:207 msgid "Survex 3d files" msgstr "Survex 3d αÏχεία" #: ../src/mainfrm.cc:1429 #: ../src/mainfrm.cc:1461 #: ../src/mainfrm.cc:1982 #: ../src/printing.cc:627 #: n:208 msgid "All files" msgstr "Όλα τα αÏχεία" #. TRANSLATORS: Here "survey" is a "cave map" rather than #. list of questions - it should be translated to the #. terminology that cavers using the language would use. #: ../src/mainfrm.cc:1411 #: n:229 msgid "All survey files" msgstr "" #. TRANSLATORS: Survex is the name of the software, and "svx" refers to a #. file extension, so neither should be translated. #: ../src/mainfrm.cc:1417 #: n:329 msgid "Survex svx files" msgstr "Survex svx αÏχεία" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so should not be translated #: ../src/mainfrm.cc:1425 #: n:330 msgid "Compass DAT and MAK files" msgstr "" #: ../src/export.cc:72 #: n:101 msgid "CSV files" msgstr "CSV αÏχεία" #: ../src/export.cc:75 #: n:411 msgid "DXF files" msgstr "DXF αÏχεία" #: ../src/export.cc:78 #: n:412 msgid "EPS files" msgstr "EPS αÏχεία" #: ../src/export.cc:81 #: n:413 msgid "GPX files" msgstr "GPX αÏχεία" #. TRANSLATORS: Here "plotter" refers to a machine which draws a printout #. on a (usually large) sheet of paper using a pen mounted in a motorised #. mechanism. #: ../src/export.cc:87 #: n:414 msgid "HPGL for plotters" msgstr "" #: ../src/export.cc:93 #: n:444 msgid "KML files" msgstr "KML αÏχεία" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated: #. http://www.fountainware.com/compass/ #. http://www.psc-cavers.org/carto/ #: ../src/export.cc:100 #: n:415 msgid "Compass PLT for use with Carto" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated: http://www.skencil.org/ #: ../src/export.cc:105 #: n:416 msgid "Skencil files" msgstr "Skencil αÏχεία" #. TRANSLATORS: Survex is the name of the software, and "pos" refers to a #. file extension, so neither should be translated. #: ../src/export.cc:110 #: n:166 msgid "Survex pos files" msgstr "" #: ../src/export.cc:113 #: n:417 msgid "SVG files" msgstr "SVG αÏχεία" #: ../src/export.cc:90 #: n:445 msgid "JSON files" msgstr "JSON αÏχεία" #. TRANSLATORS: Log files from running cavern (extension .log) #: ../src/cavernlog.cc:827 #: n:447 msgid "Log files" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. This string is used in the about box (summarising the purpose of aven). #: ../src/aboutdlg.cc:90 #: n:209 msgid "Survey visualisation tool" msgstr "" #. TRANSLATORS: Summary paragraph for the GPLv2 - there are translations for #. some languages here: #. https://www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html #: ../src/aboutdlg.cc:104 #: n:219 msgid "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version." msgstr "" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:265 #: n:218 msgid "FILE1 FILE2 [THRESHOLD]" msgstr "ΑΡΧΕΊΟ1 ΑΡΧΕΊΟ2 [ΚΑΤÎΦΛΙ]" #. TRANSLATORS: Part of diffpos --help #: ../src/diffpos.c:267 #: n:255 #, c-format msgid "FILE1 and FILE2 can be .pos or .3d files\nTHRESHOLD is the max. ignorable change along any axis in metres (default %s)" msgstr "" #. TRANSLATORS: Part of extend --help #: ../src/extend.c:553 #: n:267 msgid "INPUT_3D_FILE [OUTPUT_3D_FILE]" msgstr "" #. TRANSLATORS: Part of sorterr --help #: ../src/sorterr.c:127 #: n:268 msgid "ERR_FILE [HOW_MANY]" msgstr "" #. TRANSLATORS: Here "survey" is a "cave map" rather than list of questions #. - it should be translated to the terminology that cavers using the #. language would use. #. #. Part of aven --help #: ../src/aven.cc:169 #: ../src/aven.cc:208 #: n:269 msgid "[SURVEY_FILE]" msgstr "" #. TRANSLATORS: Used in the "colour key" for "colour by date" if there #. are surveys without date information. Try to keep this fairly short. #: ../src/gfxcore.cc:1180 #: n:221 msgid "Undated" msgstr "αχÏονολόγητος" #. TRANSLATORS: Used in the "colour key" for "colour by error" for surveys #. which aren’t part of a loop and so have no error information. Try to keep #. this fairly short. #: ../src/gfxcore.cc:1205 #: n:290 msgid "Not in loop" msgstr "" #. TRANSLATORS: error from: #. #. *data normal newline from to tape compass clino #: ../src/commands.c:1424 #: n:222 msgid "NEWLINE can’t be the first reading" msgstr "" #. TRANSLATORS: error from: #. #. *data normal from to tape compass clino newline #: ../src/commands.c:1465 #: n:223 msgid "NEWLINE can’t be the last reading" msgstr "" #. TRANSLATORS: Error given by something like: #. #. *data normal station tape compass clino #. #. ("station" signifies interleaved data). #: ../src/commands.c:1488 #: n:224 msgid "Interleaved readings, but no NEWLINE" msgstr "" #. TRANSLATORS: caused by e.g. #. #. *data diving station newline depth tape compass #. #. ("depth" needs to occur before "newline"). #: ../src/commands.c:1364 #: n:225 #, c-format msgid "Reading “%s†must occur before NEWLINE" msgstr "" #. TRANSLATORS: e.g. #. #. *data normal from to tape newline compass clino #: ../src/commands.c:1415 #: n:226 msgid "NEWLINE can only be preceded by STATION, DEPTH, and COUNT" msgstr "" #. TRANSLATORS: e.g. #. #. *calibrate tape compass 1 1 #: ../src/commands.c:1626 #: n:227 msgid "Can’t calibrate angular and length quantities together" msgstr "" #: ../src/commands.c:697 #: n:397 msgid "Bad *alias command" msgstr "" #. TRANSLATORS: %s will be replaced by the application name ("Aven" #. currently) #: ../src/log.cc:32 #: n:228 #, c-format msgid "%s Error Log" msgstr "" #. TRANSLATORS: The text on the action button in the "Export" settings #. dialog #: ../src/printing.cc:569 #: n:230 msgid "&Export..." msgstr "&Εξαγωγή..." #. TRANSLATORS: "Rotation" menu. The accelerators must be different within #. this group. Tickable menu item which toggles auto rotation. #. Please don't translate "Space" - that's the shortcut key to use which #. wxWidgets needs to parse and it should then handle translating. #: ../src/mainfrm.cc:824 #: n:231 msgid "Au&to-Rotate\tSpace" msgstr "" #: ../src/mainfrm.cc:826 #: n:234 msgid "&Reverse Direction" msgstr "&ΑντίστÏοφη κατεÏθυνση" #. TRANSLATORS: View *looking* North #: ../src/gfxcore.cc:4361 #: ../src/mainfrm.cc:829 #: n:240 msgid "View &North" msgstr "" #. TRANSLATORS: View *looking* East #: ../src/gfxcore.cc:4363 #: ../src/mainfrm.cc:830 #: n:241 msgid "View &East" msgstr "" #. TRANSLATORS: View *looking* South #: ../src/gfxcore.cc:4365 #: ../src/mainfrm.cc:831 #: n:242 msgid "View &South" msgstr "" #. TRANSLATORS: View *looking* West #: ../src/gfxcore.cc:4367 #: ../src/mainfrm.cc:832 #: n:243 msgid "View &West" msgstr "" #: ../src/gfxcore.cc:4387 #: ../src/mainfrm.cc:834 #: n:248 msgid "&Plan View" msgstr "" #: ../src/gfxcore.cc:4388 #: ../src/mainfrm.cc:835 #: n:249 msgid "Ele&vation" msgstr "" #: ../src/mainfrm.cc:837 #: n:254 msgid "Restore De&fault View" msgstr "" #. TRANSLATORS: Used as a label for the surrounding box for the "Bearing" #. and "Tilt angle" fields, and the "Plan view" and "Elevation" buttons in #. the "what to print/export" dialog. #: ../src/printing.cc:356 #: n:283 msgid "View" msgstr "Όψη" #. TRANSLATORS: Used as a label for the surrounding box for the "survey #. legs" "stations" "names" etc checkboxes in the "what to print" dialog. #. "Elements" isn’t a good name for this but nothing better has yet come to #. mind! #: ../src/printing.cc:361 #: n:256 msgid "Elements" msgstr "" #: ../src/printing.cc:366 #: n:410 msgid "Export format" msgstr "" #: ../src/printing.cc:424 #: ../src/printing.cc:807 #: n:257 #, c-format msgid "%d pages (%dx%d)" msgstr "" #. TRANSLATORS: used in the scale drop down selector in the print #. dialog the implicit meaning is "choose a suitable scale to fit #. the plot on a single page", but we need something shorter #: ../src/printing.cc:396 #: n:258 msgid "One page" msgstr "Μία σελίδα" #: ../src/mainfrm.cc:158 #: ../src/printing.cc:431 #: n:259 msgid "Bearing" msgstr "ΑζιμοÏθιο" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:130 #: n:460 msgid "bearing (90, 90d, 100g all mean 90°)" msgstr "" #: ../src/pos.cc:93 #: n:100 msgid "Station Name" msgstr "" #: ../src/printing.cc:479 #: n:260 msgid "Station Names" msgstr "" #: ../src/survexport.cc:141 #: n:475 msgid "station labels" msgstr "" #: ../src/printing.cc:475 #: n:261 msgid "Crosses" msgstr "ΣταυÏοί" #: ../src/survexport.cc:140 #: n:474 #, fuzzy msgid "station markers" msgstr "σταυÏοί" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:461 #: n:262 msgid "Underground Survey Legs" msgstr "" #: ../src/survexport.cc:137 #: n:476 msgid "underground survey legs" msgstr "" #: ../src/printing.cc:495 #: n:393 msgid "Cross-sections" msgstr "" #: ../src/survexport.cc:145 #: n:469 msgid "cross-sections" msgstr "" #: ../src/printing.cc:500 #: n:394 msgid "Walls" msgstr "" #: ../src/survexport.cc:146 #: n:470 msgid "walls" msgstr "" #. TRANSLATORS: Label for checkbox which controls whether there's a #. layer in the exported file (for formats such as DXF and SVG) #. containing polygons for the inside of cave passages). #: ../src/printing.cc:507 #: n:395 msgid "Passages" msgstr "" #: ../src/survexport.cc:147 #: n:471 msgid "passages" msgstr "" #: ../src/printing.cc:511 #: n:421 msgid "Origin in centre" msgstr "" #: ../src/survexport.cc:148 #: n:472 msgid "origin in centre" msgstr "" #: ../src/printing.cc:515 #: n:422 msgid "Full coordinates" msgstr "" #: ../src/survexport.cc:149 #: n:473 msgid "full coordinates" msgstr "" #: ../src/printing.cc:519 #: n:477 msgid "Clamp to ground" msgstr "" #: ../src/survexport.cc:150 #: n:478 msgid "clamp to ground" msgstr "" #. TRANSLATORS: Used in the print dialog: #: ../src/printing.cc:441 #: n:263 msgid "Tilt angle" msgstr "" #. TRANSLATORS: These example input values should not be translated. #: ../src/survexport.cc:132 #: n:461 msgid "tilt (45, 45d, 50g, 100% all mean 45°)" msgstr "" #. TRANSLATORS: used in the print dialog - controls drawing lines #. around each page #: ../src/printing.cc:527 #: n:264 msgid "Page Borders" msgstr "" #. TRANSLATORS: As in the legend on a map. Used in the print dialog - #. controls drawing the box at the lower left with survey name, view #. angles, etc #: ../src/printing.cc:538 #: n:265 msgid "Legend" msgstr "Λεζάντα" #. TRANSLATORS: will be used in the print dialog - check this to print #. blank pages (otherwise they’ll be skipped to save paper) #: ../src/printing.cc:533 #: n:266 msgid "Blank Pages" msgstr "" #. TRANSLATORS: Items in the "View" menu: #: ../src/mainfrm.cc:854 #: n:270 msgid "Station &Names\tCtrl+N" msgstr "" #. TRANSLATORS: Toggles drawing of 3D passages #: ../src/mainfrm.cc:856 #: n:346 msgid "Passage &Tubes\tCtrl+T" msgstr "" #. TRANSLATORS: Toggles drawing the surface of the Earth #: ../src/mainfrm.cc:858 #: n:449 msgid "Terr&ain" msgstr "" #: ../src/mainfrm.cc:859 #: n:271 msgid "&Crosses\tCtrl+X" msgstr "&ΣταυÏοί\tCtrl+X" #: ../src/mainfrm.cc:860 #: n:297 msgid "&Grid\tCtrl+G" msgstr "&Πλέγμα\tCtrl+G" #: ../src/mainfrm.cc:861 #: n:318 msgid "&Bounding Box\tCtrl+B" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:865 #: n:272 msgid "&Underground Survey Legs\tCtrl+L" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:868 #: n:291 msgid "&Surface Survey Legs\tCtrl+F" msgstr "" #: ../src/survexport.cc:138 #: n:464 msgid "surface survey legs" msgstr "" #: ../src/mainfrm.cc:893 #: n:273 msgid "&Overlapping Names" msgstr "" #: ../src/mainfrm.cc:906 #: n:450 msgid "Co&lour by" msgstr "" #: ../src/mainfrm.cc:909 #: n:294 msgid "Highlight &Entrances" msgstr "" #: ../src/mainfrm.cc:910 #: n:295 msgid "Highlight &Fixed Points" msgstr "" #: ../src/mainfrm.cc:911 #: n:296 msgid "Highlight E&xported Points" msgstr "" #: ../src/printing.cc:483 #: n:418 msgid "Entrances" msgstr "" #: ../src/survexport.cc:142 #: n:466 msgid "entrances" msgstr "" #: ../src/printing.cc:487 #: n:419 msgid "Fixed Points" msgstr "" #: ../src/survexport.cc:143 #: n:467 msgid "fixed points" msgstr "" #: ../src/printing.cc:491 #: n:420 msgid "Exported Stations" msgstr "" #: ../src/survexport.cc:144 #: n:468 msgid "exported stations" msgstr "" #: ../src/mainfrm.cc:920 #: n:237 msgid "&Perspective" msgstr "" #: ../src/mainfrm.cc:922 #: n:238 msgid "Textured &Walls" msgstr "" #. TRANSLATORS: Toggles OpenGL "Depth Fogging" - feel free to translate #. using that term instead if it gives a better translation which most #. users will understand. #: ../src/mainfrm.cc:926 #: n:239 msgid "Fade Distant Ob&jects" msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/mainfrm.cc:929 #: n:298 msgid "Smoot&hed Survey Legs" msgstr "" #: ../src/mainfrm.cc:935 #: ../src/mainfrm.cc:942 #: n:356 msgid "Full Screen &Mode\tF11" msgstr "" #: ../src/gfxcore.cc:4431 #: ../src/mainfrm.cc:896 #: n:292 msgid "Colour by &Depth" msgstr "" #: ../src/gfxcore.cc:4432 #: ../src/mainfrm.cc:897 #: n:293 msgid "Colour by D&ate" msgstr "" #: ../src/gfxcore.cc:4433 #: ../src/mainfrm.cc:898 #: n:289 msgid "Colour by &Error" msgstr "" #: ../src/gfxcore.cc:4434 #: ../src/mainfrm.cc:899 #: n:480 msgid "Colour by &Horizontal Error" msgstr "" #: ../src/gfxcore.cc:4435 #: ../src/mainfrm.cc:900 #: n:481 msgid "Colour by &Vertical Error" msgstr "" #: ../src/gfxcore.cc:4436 #: ../src/mainfrm.cc:901 #: n:85 msgid "Colour by &Gradient" msgstr "" #: ../src/gfxcore.cc:4437 #: ../src/mainfrm.cc:902 #: n:82 msgid "Colour by &Length" msgstr "" #: ../src/gfxcore.cc:4438 #: ../src/mainfrm.cc:903 #: n:448 msgid "Colour by &Survey" msgstr "" #: ../src/gfxcore.cc:4439 #: ../src/mainfrm.cc:904 #: n:482 msgid "Colour by St&yle" msgstr "" #: ../src/mainfrm.cc:970 #: n:274 msgid "&Compass" msgstr "&Πυξίδα" #: ../src/mainfrm.cc:971 #: n:275 msgid "C&linometer" msgstr "&ΚλινόμετÏο" #. TRANSLATORS: The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/mainfrm.cc:974 #: n:276 msgid "Colour &Key" msgstr "" #: ../src/mainfrm.cc:975 #: n:277 msgid "&Scale Bar" msgstr "&ΓÏαμμή κλίμακας" #: ../src/mainfrm.cc:951 #: n:280 msgid "&Reverse Sense\tCtrl+R" msgstr "" #. TRANSLATORS: Please don't translate "Escape" - that's the shortcut key #. to use which wxWidgets needs to parse and it should then handle #. translating. #: ../src/mainfrm.cc:918 #: ../src/mainfrm.cc:960 #: ../src/mainfrm.cc:966 #: n:281 msgid "&Cancel Measuring Line\tEscape" msgstr "" #: ../src/mainfrm.cc:976 #: n:299 msgid "&Indicators" msgstr "" #: ../src/z_getopt.c:712 #: n:300 #, c-format msgid "%s: option “%s†is ambiguous\n" msgstr "" #: ../src/z_getopt.c:762 #: n:302 #, c-format msgid "%s: option “%c%s†doesn’t allow an argument\n" msgstr "" #: ../src/z_getopt.c:749 #: n:303 #, c-format msgid "%s: option “--%s†doesn’t allow an argument\n" msgstr "" #: ../src/z_getopt.c:810 #: n:305 #, c-format msgid "%s: option “%s†requires an argument\n" msgstr "%s: η επιλογή “%s†απαιτεί ένα ÏŒÏισμα\n" #: ../src/z_getopt.c:1182 #: n:306 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: η επιλογή απαιτεί ένα ÏŒÏισμα -- %c\n" #: ../src/z_getopt.c:851 #: n:307 #, c-format msgid "%s: unrecognized option “--%sâ€\n" msgstr "" #: ../src/z_getopt.c:862 #: n:308 #, c-format msgid "%s: unrecognized option “%c%sâ€\n" msgstr "" #: ../src/z_getopt.c:923 #: n:310 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: μη αναγνωÏίσιμη επιλογή -- %c\n" #: ../src/mainfrm.cc:840 #: n:311 msgid "&New Presentation" msgstr "" #: ../src/mainfrm.cc:841 #: n:312 msgid "&Open Presentation..." msgstr "" #: ../src/mainfrm.cc:842 #: n:313 msgid "&Save Presentation" msgstr "" #: ../src/mainfrm.cc:843 #: n:314 msgid "Sa&ve Presentation As..." msgstr "" #. TRANSLATORS: "Mark" as in "Mark this position" #: ../src/mainfrm.cc:846 #: n:315 msgid "&Mark" msgstr "" #. TRANSLATORS: "Play" as in "Play back a recording" #: ../src/mainfrm.cc:848 #: n:316 msgid "Pla&y" msgstr "&ΑναπαÏαγωγή" #: ../src/mainfrm.cc:849 #: n:317 msgid "&Export as Movie..." msgstr "" #: ../src/mainfrm.cc:2059 #: n:331 msgid "Export Movie" msgstr "" #: ../src/cavernlog.cc:830 #: ../src/mainfrm.cc:365 #: ../src/mainfrm.cc:1568 #: n:319 msgid "Select an output filename" msgstr "" #: ../src/mainfrm.cc:362 #: ../src/mainfrm.cc:1981 #: n:320 msgid "Aven presentations" msgstr "" #. TRANSLATORS: title of the save screenshot dialog #: ../src/mainfrm.cc:1497 #: n:321 msgid "Save Screenshot" msgstr "" #: ../src/mainfrm.cc:1976 #: ../src/mainfrm.cc:1979 #: n:322 msgid "Select a presentation to open" msgstr "" #: ../src/mainfrm.cc:436 #: n:323 #, c-format msgid "Error in format of presentation file “%sâ€" msgstr "" #. TRANSLATORS: "Compass" as in Larry Fish’s cave #. surveying package, so probably shouldn’t be translated #: ../src/mainfrm.cc:1421 #: n:324 msgid "Compass PLT files" msgstr "" #. TRANSLATORS: "CMAP" is Bob Thrun’s cave surveying #. package, so don’t translate it. #: ../src/mainfrm.cc:1428 #: n:325 msgid "CMAP XYZ files" msgstr "" #. TRANSLATORS: title of message box #: ../src/mainfrm.cc:1604 #: ../src/mainfrm.cc:1954 #: ../src/mainfrm.cc:1970 #: n:326 msgid "Modified Presentation" msgstr "" #. TRANSLATORS: and the question in that box #: ../src/mainfrm.cc:1602 #: ../src/mainfrm.cc:1953 #: ../src/mainfrm.cc:1969 #: n:327 msgid "The current presentation has been modified. Abandon unsaved changes?" msgstr "" #: ../src/mainfrm.cc:2293 #: ../src/mainfrm.cc:2304 #: n:328 msgid "No matches were found." msgstr "Δεν βÏέθηκαν αντιστοιχίες." #. TRANSLATORS: "Find stations" button tooltip #: ../src/mainfrm.cc:1067 #: n:332 msgid "Find" msgstr "Αναζήτηση" #. TRANSLATORS: "Hide stations" button default tooltip #: ../src/mainfrm.cc:1069 #: ../src/mainfrm.cc:2336 #: n:333 msgid "Hide" msgstr "ΚÏÏβω" #. TRANSLATORS: "Hide stations" button tooltip when stations are found #: ../src/mainfrm.cc:2297 #: n:334 #, c-format msgid "Hide %d found stations" msgstr "" #: ../src/mainfrm.cc:246 #: ../src/mainfrm.cc:1691 #: ../src/mainfrm.cc:1767 #: ../src/mainfrm.cc:1819 #: ../src/pos.cc:92 #: n:335 msgid "Altitude" msgstr "ΥψόμετÏο" #. TRANSLATORS: error if you try to drag multiple files to the aven #. window #: ../src/mainfrm.cc:722 #: n:336 msgid "You may only view one 3d file at a time." msgstr "" #: ../src/mainfrm.cc:977 #: n:337 msgid "&Side Panel" msgstr "" #. TRANSLATORS: show coordinates (N = North or Northing, E = East or #. Easting) #: ../src/mainfrm.cc:1689 #: ../src/mainfrm.cc:1711 #: ../src/mainfrm.cc:1713 #: ../src/mainfrm.cc:1818 #: n:338 #, fuzzy, c-format msgid "%.2f E, %.2f N" msgstr "%.2f Α, %.2f Î’" #. TRANSLATORS: Used in Aven: #. From : H 12.24m, Brg 234.5° #: ../src/mainfrm.cc:1731 #: ../src/mainfrm.cc:1776 #: ../src/mainfrm.cc:1840 #: n:339 #, c-format msgid "From %s" msgstr "Από %s" #. TRANSLATORS: "H" is short for "Horizontal", "V" for "Vertical" #: ../src/mainfrm.cc:1853 #: n:340 #, c-format msgid "H %.2f%s, V %.2f%s" msgstr "" #. TRANSLATORS: "Dist" is short for "Distance", "Brg" for "Bearing" (as #. in Compass bearing) and "Grd" for "Gradient" (the slope angle #. measured by the clino) #: ../src/mainfrm.cc:1893 #: n:341 #, c-format msgid "%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. "Metric" here means metres, km, etc (rather than feet, miles, etc) #: ../src/gfxcore.cc:4419 #: ../src/gfxcore.cc:4446 #: ../src/mainfrm.cc:979 #: n:342 msgid "&Metric" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Degrees are the angular measurement where there are 360 in a full #. circle. #: ../src/gfxcore.cc:4375 #: ../src/gfxcore.cc:4396 #: ../src/gfxcore.cc:4448 #: ../src/mainfrm.cc:980 #: n:343 msgid "&Degrees" msgstr "" #. TRANSLATORS: tickable menu item in View menu. #. #. Show the tilt of the survey as a percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/gfxcore.cc:4401 #: ../src/mainfrm.cc:981 #: n:430 msgid "&Percent" msgstr "" #. TRANSLATORS: abbreviation for "kilometres" (unit of length), #. used e.g. "5km". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1369 #: ../src/printing.cc:1248 #: n:423 msgid "km" msgstr "" #. TRANSLATORS: abbreviation for "metres" (unit of length), used #. e.g. "10m". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:341 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1376 #: ../src/mainfrm.cc:1680 #: ../src/mainfrm.cc:1742 #: ../src/mainfrm.cc:1762 #: ../src/mainfrm.cc:1811 #: ../src/mainfrm.cc:1844 #: ../src/printing.cc:1250 #: n:424 msgid "m" msgstr "" #. TRANSLATORS: abbreviation for "centimetres" (unit of length), #. used e.g. "50cm". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1384 #: ../src/printing.cc:1253 #: n:425 msgid "cm" msgstr "" #. TRANSLATORS: abbreviation for "miles" (unit of length, #. plural), used e.g. "2 miles". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1397 #: n:426 msgid " miles" msgstr "" #. TRANSLATORS: abbreviation for "mile" (unit of length, #. singular), used e.g. "1 mile". #. #. If there should be a space between the number and this, #. include one in the translation. #: ../src/gfxcore.cc:1404 #: n:427 msgid " mile" msgstr "" #. TRANSLATORS: abbreviation for "feet" (unit of length), used e.g. #. as "10ft". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/commands.c:342 #: ../src/gfxcore.cc:1150 #: ../src/gfxcore.cc:1242 #: ../src/gfxcore.cc:1412 #: ../src/mainfrm.cc:1685 #: ../src/mainfrm.cc:1745 #: ../src/mainfrm.cc:1765 #: ../src/mainfrm.cc:1816 #: ../src/mainfrm.cc:1849 #: n:428 msgid "ft" msgstr "πόδια" #. TRANSLATORS: abbreviation for "inches" (unit of length), used #. e.g. as "6in". #. #. If there should be a space between the number and this, include #. one in the translation. #: ../src/gfxcore.cc:1420 #: n:429 msgid "in" msgstr "ίντσες" #. TRANSLATORS: Menu item which turns off the "north arrow" in aven. #: ../src/gfxcore.cc:4370 #: n:387 msgid "&Hide Compass" msgstr "" #. TRANSLATORS: Menu item which turns off the tilt indicator in aven. #: ../src/gfxcore.cc:4391 #: n:384 msgid "&Hide Clino" msgstr "" #. TRANSLATORS: Menu item which turns off the scale bar in aven. #: ../src/gfxcore.cc:4414 #: n:385 msgid "&Hide scale bar" msgstr "" #. TRANSLATORS: Menu item which turns off the colour key. #. The "Colour Key" is the thing in aven showing which colour #. corresponds to which depth, date, survey closure error, etc. #: ../src/gfxcore.cc:4444 #: n:386 msgid "&Hide colour key" msgstr "" #. TRANSLATORS: degree symbol - probably should be translated to #. itself. #: ../src/commands.c:344 #: ../src/gfxcore.cc:789 #: ../src/gfxcore.cc:879 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1734 #: ../src/mainfrm.cc:1857 #: ../src/mainfrm.cc:1880 #: ../src/printing.cc:88 #: n:344 msgid "°" msgstr "" #. TRANSLATORS: symbol for grad (400 grad = 360 degrees = full #. circle). #: ../src/commands.c:345 #: ../src/gfxcore.cc:794 #: ../src/gfxcore.cc:884 #: ../src/gfxcore.cc:1214 #: ../src/mainfrm.cc:1737 #: ../src/mainfrm.cc:1860 #: ../src/mainfrm.cc:1883 #: n:345 msgid "áµ" msgstr "" #. TRANSLATORS: symbol for percentage gradient (100% = 45 #. degrees = 50 grad). #: ../src/commands.c:346 #: ../src/gfxcore.cc:870 #: ../src/gfxcore.cc:888 #: ../src/mainfrm.cc:1878 #: n:96 msgid "%" msgstr "%" #. TRANSLATORS: infinity symbol - used for the percentage gradient on #. vertical angles. #: ../src/gfxcore.cc:864 #: ../src/mainfrm.cc:1876 #: n:431 msgid "∞" msgstr "∞" #. TRANSLATORS: "H" is short for "Horizontal", "Brg" for "Bearing" (as #. in Compass bearing) #: ../src/mainfrm.cc:1749 #: n:374 #, c-format msgid "%s: H %.2f%s, Brg %03.1f%s" msgstr "" #. TRANSLATORS: "V" is short for "Vertical" #: ../src/mainfrm.cc:1782 #: n:375 #, c-format msgid "%s: V %.2f%s" msgstr "" #. TRANSLATORS: labels for tabbed side panel this is for the tab with the #. tree hierarchy of survey station names #: ../src/mainfrm.cc:1124 #: n:376 msgid "Surveys" msgstr "" #: ../src/mainfrm.cc:1125 #: n:377 msgid "Presentation" msgstr "ΠαÏουσίαση" #. TRANSLATORS: In aven's survey tree, right-clicking on the root #. gives a pop-up menu and this is an option (but only enabled if #. the view is restricted to a subsurvey). It reloads the current #. survey file with the who survey visible. #: ../src/aventreectrl.cc:362 #: n:245 msgid "Show all" msgstr "Εμφάνιση όλων" #. TRANSLATORS: In aven's survey tree, right-clicking on a survey #. name gives a pop-up menu and this is an option. It reloads the #. current survey file with the view restricted to the survey #. clicked upon. #: ../src/aventreectrl.cc:376 #: n:246 msgid "Hide others" msgstr "" #: ../src/aventreectrl.cc:380 #: n:388 msgid "Hide si&blings" msgstr "" #: ../src/mainfrm.cc:244 #: ../src/pos.cc:90 #: n:378 msgid "Easting" msgstr "Ανατολικά" #: ../src/mainfrm.cc:245 #: ../src/pos.cc:91 #: n:379 msgid "Northing" msgstr "Î’ÏŒÏεια" #. TRANSLATORS: Aven menu items. An “&†goes before the letter of any #. accelerator key. #. #. The string "\t" separates the menu text and any accelerator key. #. #. "File" menu. The accelerators must be different within this group. #. c.f. 201, 380, 381. #: ../src/mainfrm.cc:787 #: n:220 msgid "&Open...\tCtrl+O" msgstr "&Άνοιγμα...\tCtrl+O" #. TRANSLATORS: Open a "Terrain file" - i.e. a digital model of the #. terrain. #: ../src/mainfrm.cc:790 #: n:453 msgid "Open &Terrain..." msgstr "" #: ../src/mainfrm.cc:791 #: n:144 msgid "Show &Log" msgstr "Εμφάνιση &ΚαταγÏαφής" #: ../src/mainfrm.cc:794 #: n:380 msgid "&Print...\tCtrl+P" msgstr "&ΕκτÏπωση...\tCtrl+P" #: ../src/mainfrm.cc:795 #: n:381 msgid "P&age Setup..." msgstr "" #. TRANSLATORS: In the "File" menu #: ../src/mainfrm.cc:798 #: n:201 msgid "&Screenshot..." msgstr "" #. TRANSLATORS: In the "File" menu - c.f. n:191 #: ../src/mainfrm.cc:801 #: n:247 msgid "E&xtended Elevation..." msgstr "" #: ../src/mainfrm.cc:799 #: n:382 msgid "&Export as..." msgstr "" #. TRANSLATORS: Title of file dialog to choose name and type of exported #. file. #: ../src/printing.cc:633 #: n:401 msgid "Export as:" msgstr "" #. TRANSLATORS: Title of the export #. dialog #: ../src/printing.cc:303 #: n:383 msgid "Export" msgstr "Εξαγωγή" #. TRANSLATORS: for about box: #: ../src/aboutdlg.cc:141 #: n:390 msgid "System Information:" msgstr "" #. TRANSLATORS: Title of the print preview dialog #: ../src/printing.cc:680 #: n:398 msgid "Print Preview" msgstr "ΠÏοεπισκόπηση ΕκτÏπωσης" #. TRANSLATORS: Title of the print #. dialog #: ../src/printing.cc:300 #: n:399 msgid "Print" msgstr "ΕκτÏπωση" #: ../src/printing.cc:564 #: n:400 msgid "&Print..." msgstr "&ΕκτÏπωση..." #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: ../src/printing.cc:467 #: n:403 msgid "Sur&face Survey Legs" msgstr "" #. TRANSLATORS: Title of dialog to edit a waypoint in a presentation. #: ../src/mainfrm.cc:131 #: n:404 msgid "Edit Waypoint" msgstr "" #. TRANSLATORS: Note after "Scale" field in dialog to edit a waypoint #. in a presentation. #: ../src/mainfrm.cc:170 #: n:278 msgid " (unused in perspective view)" msgstr "" #. TRANSLATORS: Field label in dialog to edit a waypoint in a #. presentation. #: ../src/mainfrm.cc:177 #: n:279 msgid "Time: " msgstr "" #. TRANSLATORS: units+info after time field in dialog to edit a #. waypoint in a presentation. #: ../src/mainfrm.cc:181 #: n:282 msgid " secs (0 = auto; *6 = 6 times auto)" msgstr "" #. TRANSLATORS: %s will be replaced with "Aven" currently (and #. perhaps by "Survex" or other things in future). #: ../src/aven.cc:296 #: n:405 #, c-format msgid "This version of %s requires OpenGL to work, but it isn’t available." msgstr "" #: ../src/readval.c:348 #: n:392 msgid "Separator in survey name" msgstr "" #. TRANSLATORS: Used in place of the station name when talking about an #. anonymous station. #: ../src/labelinfo.h:83 #: n:56 msgid "anonymous station" msgstr "" #: ../src/readval.c:122 #: ../src/readval.c:138 #: ../src/readval.c:156 #: n:3 msgid "Can't have a leg between two anonymous stations" msgstr "" #: ../src/mainfrm.cc:883 #: ../src/printing.cc:471 #: n:406 msgid "Spla&y Legs" msgstr "" #: ../src/survexport.cc:139 #: n:465 msgid "splay legs" msgstr "" #: ../src/mainfrm.cc:890 #: n:251 msgid "&Duplicate Legs" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are not shown. #: ../src/aventreectrl.cc:378 #: ../src/mainfrm.cc:873 #: ../src/mainfrm.cc:886 #: n:407 msgid "&Hide" msgstr "&ΑπόκÏυψη" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with less bright colours. #: ../src/mainfrm.cc:879 #: ../src/mainfrm.cc:888 #: n:408 #, fuzzy msgid "&Fade" msgstr "&ΞεθωÏιάζω" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, aven will show such legs with dashed lines. #: ../src/mainfrm.cc:876 #: ../src/mainfrm.cc:887 #: n:250 msgid "&Dashed" msgstr "" #. TRANSLATORS: Item in the "Splay Legs" and "Duplicate Legs" submenus - if #. this is selected, such legs are shown the same as other legs. #: ../src/aventreectrl.cc:379 #: ../src/mainfrm.cc:882 #: ../src/mainfrm.cc:889 #: n:409 msgid "&Show" msgstr "&Εμφάνιση" #: ../src/extend.c:588 #: n:105 msgid "Reading in data - please wait…" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this station, but we didn’t find it in #. the 3d file #: ../src/extend.c:274 #: ../src/extend.c:293 #: ../src/extend.c:340 #: ../src/extend.c:384 #: ../src/extend.c:428 #: n:510 #, c-format msgid "Failed to find station %s" msgstr "" #. TRANSLATORS: for extend: the user specified breaking a loop or #. changing extend direction at this leg, but we didn’t find it in the #. 3d file #: ../src/extend.c:320 #: ../src/extend.c:364 #: ../src/extend.c:408 #: ../src/extend.c:453 #: n:511 #, c-format msgid "Failed to find leg %s → %s" msgstr "" #. TRANSLATORS: for extend: "extend" is starting to produce an extended elevation from station %s #: ../src/extend.c:265 #: n:512 #, c-format msgid "Starting from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:286 #: n:513 #, c-format msgid "Extending to the left from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:333 #: n:514 #, c-format msgid "Extending to the right from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:307 #: n:515 #, c-format msgid "Extending to the left from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:354 #: n:516 #, c-format msgid "Extending to the right from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:421 #: n:517 #, c-format msgid "Breaking survey loop at station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:443 #: n:518 #, c-format msgid "Breaking survey loop at leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:377 #: n:519 #, c-format msgid "Swapping extend direction from station %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:398 #: n:520 #, c-format msgid "Swapping extend direction from leg %s → %s" msgstr "" #. TRANSLATORS: for extend: #: ../src/extend.c:682 #: n:521 #, c-format msgid "Applying specfile: “%sâ€" msgstr "" #. TRANSLATORS: for extend: #. Used to tell the user that a file is being written - %s is the filename #: ../src/extend.c:706 #: n:522 #, c-format msgid "Writing %s…" msgstr "" #. TRANSLATORS: --help output for sorterr --horizontal option #: ../src/sorterr.c:53 #: n:179 msgid "sort by horizontal error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --vertical option #: ../src/sorterr.c:55 #: n:180 msgid "sort by vertical error factor" msgstr "" #. TRANSLATORS: --help output for sorterr --percentage option #: ../src/sorterr.c:57 #: n:181 msgid "sort by percentage error" msgstr "" #. TRANSLATORS: --help output for sorterr --per-leg option #: ../src/sorterr.c:59 #: n:182 msgid "sort by error per leg" msgstr "" #. TRANSLATORS: --help output for sorterr --replace option #: ../src/sorterr.c:61 #: n:183 msgid "replace .err file with resorted version" msgstr "" #: ../src/sorterr.c:81 #: ../src/sorterr.c:98 #: ../src/sorterr.c:170 #: n:112 msgid "Couldn’t parse .err file" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:159 #: n:500 #, c-format msgid "Moved by (%3.2f,%3.2f,%3.2f): %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:196 #: n:501 #, c-format msgid "Added: %s" msgstr "" #. TRANSLATORS: for diffpos: #: ../src/diffpos.c:219 #: n:502 #, c-format msgid "Deleted: %s" msgstr "" #. TRANSLATORS: The first of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl ; <- second warning here #. 1 2 9.45 234 -01 #. *end crawl #. *begin crawl ; <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:4: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:619 #: n:29 msgid "Reentering an existing survey is deprecated" msgstr "" #. TRANSLATORS: The second of two warnings given when a survey which has #. already been completed is reentered. This example file crawl.svx: #. #. *begin crawl #. 1 2 9.45 234 -01 # <- second warning here #. *end crawl #. *begin crawl # <- first warning here #. 2 3 7.67 223 -03 #. *end crawl #. #. Would lead to: #. #. crawl.svx:3: Reentering an existing survey is deprecated #. crawl.svx:1: Originally entered here #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:638 #: n:30 msgid "Originally entered here" msgstr "" #. TRANSLATORS: Use of the ROOT character (which is "\" by default) is #. deprecated, so this error would be generated by: #. #. *equate \foo.7 1 #. #. If you're unsure what "deprecated" means, see: #. https://en.wikipedia.org/wiki/Deprecation #: ../src/commands.c:536 #: ../src/readval.c:86 #: ../src/readval.c:90 #: n:25 msgid "ROOT is deprecated" msgstr "" #. TRANSLATORS: --help output for dump3d --rewind option #: ../src/dump3d.c:51 #: n:204 msgid "rewind file and read it a second time" msgstr "" #: ../src/dump3d.c:52 #: n:396 msgid "show survey date information (if present)" msgstr "" #: ../src/gfxcore.cc:3043 #: ../src/gpx.cc:71 #: ../src/kml.cc:70 #: n:287 #, c-format msgid "Failed to initialise input coordinate system “%sâ€" msgstr "" #: ../src/gfxcore.cc:3052 #: ../src/gpx.cc:76 #: ../src/kml.cc:75 #: n:288 #, c-format msgid "Failed to initialise output coordinate system “%sâ€" msgstr "" #. TRANSLATORS: The PROJ library is used to do coordinate #. transformations (https://proj.org/) - if the .3d file #. doesn't contain details of the coordinate projection in use, the #. user must specify it here for export formats which need to know it #. (e.g. GPX). #: n:440 msgid "Coordinate projection" msgstr "" #: ../src/survexport.cc:152 #: n:148 #, c-format msgid "generate grid (default %sm)" msgstr "" #: ../src/survexport.cc:153 #: n:149 #, c-format msgid "station labels text height (default %s)" msgstr "" #: ../src/survexport.cc:154 #: n:152 #, c-format msgid "station marker size (default %s)" msgstr "" #: ../src/survexport.cc:155 #: n:102 msgid "produce CSV output" msgstr "" #: ../src/survexport.cc:156 #: n:156 msgid "produce DXF output" msgstr "" #: ../src/survexport.cc:157 #: n:454 msgid "produce EPS output" msgstr "" #: ../src/survexport.cc:158 #: n:455 msgid "produce GPX output" msgstr "" #: ../src/survexport.cc:159 #: n:456 msgid "produce HPGL output" msgstr "" #: ../src/survexport.cc:160 #: n:457 msgid "produce JSON output" msgstr "" #: ../src/survexport.cc:161 #: n:458 msgid "produce KML output" msgstr "" #. TRANSLATORS: "Skencil" is the name of a software package, so should not be #. translated. #: ../src/survexport.cc:167 #: n:158 msgid "produce Skencil output" msgstr "" #: ../src/survexport.cc:168 #: n:459 msgid "produce Survex POS output" msgstr "" #. TRANSLATORS: "Compass" and "Carto" are the names of software packages, #. so should not be translated. #: ../src/survexport.cc:164 #: n:159 msgid "produce Compass PLT output for Carto" msgstr "" #: ../src/survexport.cc:169 #: n:160 msgid "produce SVG output" msgstr "" #: ../src/survexport.cc:397 #: n:252 msgid "Export format not specified and not known from output file extension" msgstr "" #: ../src/survexport.cc:402 #: n:253 msgid "Export format not specified" msgstr "" #: ../src/survexport.cc:151 #: n:155 msgid "include items exported by default" msgstr "" #, c-format #~ msgid "Error in format of font file “%sâ€" #~ msgstr "" #. TRANSLATORS: Show the terrain as solid rather than transparent. #~ msgid "Solid Su&rface" #~ msgstr "" #. TRANSLATORS: number of stations found matching search #, c-format #~ msgid "%d found" #~ msgstr "" #: ../src/mainfrm.cc:946 #: n:347 #~ msgid "&Preferences..." #~ msgstr "" #: n:348 #~ msgid "Draw passage walls" #~ msgstr "" #: n:349 #~ msgid "Estimate LRUD readings based on heuristics" #~ msgstr "" #: n:350 #~ msgid "Mark survey stations with crosses" #~ msgstr "" #: n:351 #~ msgid "Highlight stations marked as entrances" #~ msgstr "" #: n:352 #~ msgid "Highlight stations marked as fixed points" #~ msgstr "" #: n:353 #~ msgid "Highlight stations which are exported" #~ msgstr "" #: n:354 #~ msgid "Mark survey stations with their names" #~ msgstr "" #: n:355 #~ msgid "Allow names to overlap on the display (faster)" #~ msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:357 #~ msgid "Display underground survey legs" #~ msgstr "" #. TRANSLATORS: Here a "survey leg" is a set of measurements between two #. "survey stations". #: n:358 #~ msgid "Display surface survey legs" #~ msgstr "" #: n:359 #~ msgid "Colour surface surveys by depth" #~ msgstr "" #: n:360 #~ msgid "Draw surface legs with dashed lines" #~ msgstr "" #: n:361 #~ msgid "Draw a grid" #~ msgstr "" #: n:362 #~ msgid "metric units" #~ msgstr "" #. TRANSLATORS: Miles, Feet, Inches, etc. What they call "English units" in #. the USA (rather confusingly now that England has largely gone metric!) #: n:363 #~ msgid "imperial units" #~ msgstr "" #. TRANSLATORS: Degrees are the angular measurement where there are 360 in a #. full circle. #: n:364 #~ msgid "degrees (°)" #~ msgstr "" #. TRANSLATORS: Grads are the angular measurement where there are 400 in a #. full circle. #: n:365 #~ msgid "grads" #~ msgstr "" #: n:366 #~ msgid "Display measurements in" #~ msgstr "" #: n:367 #~ msgid "Display angles in" #~ msgstr "" #. TRANSLATORS: reverses the sense of the mouse controls #: n:368 #~ msgid "Reverse the sense of the controls" #~ msgstr "" #: n:369 #~ msgid "Display scale bar" #~ msgstr "" #: n:370 #~ msgid "Display depth bar" #~ msgstr "" #: n:371 #~ msgid "Display compass" #~ msgstr "" #: n:372 #~ msgid "Display clinometer" #~ msgstr "" #: n:373 #~ msgid "Display side panel" #~ msgstr "" survex-1.4.4/lib/el.msg0000664000175000017500000003516214312174554011672 00000000000000Svx Msg þÿ :^©ΑνεπαÏκής μνήμη (%lu bytes)Survex version %s or greater required to process this survey data.Can't have a leg between two anonymous stationsÏ€ÏοειδοποίησηIn file included from %s:%u: *prefix is deprecated - use *begin and *end insteadCharacter “%c†not allowed in station name (use *SET NAMES to set allowed characters)Field may not be omittedExpecting numeric field, found “%sâ€Found “%sâ€, expecting “PRESERVEâ€, “TOUPPERâ€, or “TOLOWERâ€Bug in program detected! Please report this to the authorsUnknown command “%sâ€Station “%s†equated to itselfCompass reading may not be omitted except on plumbed legsEnd of line not blankThere were %d warning(s).Η εκτέλεση της εντολής “%s†απέτυχεΣφάλμα ανάγνωσης αÏχείουToo many errors - giving up*DEFAULT is deprecated - use *CALIBRATE/DATA/SD/UNITS with argument DEFAULT insteadCompass reading given on plumbed legEND with no matching BEGIN in this fileBEGIN with no matching END in this fileΔεν είναι δυνατό το άνοιγμα του αÏχείου “%sâ€ROOT is deprecatedStation “%s†not exported from survey “%sâ€â€œ%s†can’t be both a station and a surveyExpecting station nameReentering an existing survey is deprecatedOriginally entered hereFound “%sâ€, expecting “EQUATESâ€, “EXPORTSâ€, or “PLUMBSâ€Found “%sâ€, expecting “ON†or “OFFâ€Only one station in EQUATE commandUnknown quantity “%sâ€Unknown units “%sâ€Matching BEGIN command has no survey nameInvalid units “%s†for quantityΑνεπαÏκής μνήμη: “%sâ€Unknown instrument “%sâ€Scale factor must be 1.0 for DECLINATIONUnknown setting “%sâ€Unknown character class “%sâ€No survey dataFilename “%s†refers to directorySurvey not all connected to fixed stationsStation already fixed or equated to a fixed pointFailed to open output file “%sâ€Standard deviation must be positiveΧÏήσηSurvey leg with same station (“%sâ€) at both ends - typing error?Clino reading over %.f%s (absolute value)Tried to equate two non-equal fixed stations: “%s†and “%sâ€Equating two equal fixed points: “%s†and “%sâ€FIX command with no coordinates - fixing at (0,0,0)Station already fixed at the same coordinatesanonymous station*EXPORT must immediately follow “*BEGIN â€Invalid year (< 1900 or > 2078)Suspicious compass readingNegative tape readingSame station fixed twice with no coordinatesTape reading is less than change in depthReading “%s†not allowed in data style “%sâ€Too few readings for data style “%sâ€Data style “%s†unknownStation “%s†already exportedDuplicate reading “%sâ€FLAG “%s†unknownMissing "Station “%s†referred to just once, with an explicit survey name - typo?The following survey stations are not attached to a fixed point:Survey has no fixed points. Therefore I’ve fixed %s at (0,0,0)Unused fixed point “%sâ€Network solved by reduction - no simultaneous equations to solve.Solving %d simultaneous equationsAssuming 2 digit year is %dReading “%s†duplicates previous reading(s)Solving one equationNegative adjusted tape readingDate is in the future!End of date range is before the startColour by &LengthCross section specified at non-existent station “%sâ€CLINO and BACKCLINO readings must be of the same typeColour by &GradientInvalid monthInvalid day of the month3d file format versions %d to %d supportedExpecting survey name.espec file to control extendingshow breaks with surface survey legs in outputPlumbed CLINO and BACKCLINO readings can't be in the same directionσφάλμαTape reading may not be omittedFurther uses of this deprecated feature will not be reported%TAPE reading and BACKTAPE reading disagree by %sCOMPASS reading and BACKCOMPASS reading disagree by %sCLINO reading and BACKCLINO reading disagree by %sStation NameCSV αÏχείαproduce CSV outputExpecting “F†or “Mâ€â€œ*data %s %c …†is deprecated - use “*data %s …†insteadReading in data - please wait…Bad 3d image file “%sâ€%a,%Y.%m.%d %H:%M:%S %ZDate and time not available.Error reading from file “%sâ€Î£Ï†Î¬Î»Î¼Î± κατά την εγγÏαφή στο αÏχείο “%sâ€Î£Ï†Î¬Î»Î¼Î± κατά την εγγÏαφή στο αÏχείοCouldn’t parse .err fileThere were %d warning(s) and %d error(s) - no output files produced.File “%s†has a newer format than this program can understandΒοÏÏάςElevation onP&lan viewElevationprint and exit (requires a 3d file)Calculating statisticsExpecting string fieldÏ€Î¿Î»Ï Î»Î¯Î³Î± οÏίσματαπάÏα πολλές παÏάμετÏοιΑΡΧΕΊΟRemoving trailing traversesConcatenating traversesCalculating traversesCalculating trailing traversesSimplifying networkCalculating networkFound “%sâ€, expecting “F†or “Bâ€Total length of survey legs = %7.2f%s (%7.2f%s adjusted)Total plan length of survey legs = %7.2f%sTotal vertical length of survey legs = %7.2f%sVertical range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)North-South range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)East-West range = %4.2f%s (from %s at %4.2f%s to %s at %4.2f%s)There is 1 loop.There are %ld loops.CPU time used %5.2fsTime used %5.2fsTime used unavailableTime used %5.2fs (%5.2fs CPU time)Εμφάνιση &ΚαταγÏαφήςOriginal length %6.2fm (%3d legs), moved %6.2fm (%5.2fm/leg). Σφαλμα %6.2f%%Σφαλμα N/Agenerate grid (default %sm)station labels text height (default %s)εμφάνιση αυτής της βοήθειας και έξοδοςπÏοβολή πληÏοφοÏιών έκδοσης και έξοδοςstation marker size (default %s)ΕΠΙΛΟΓΗΚλίμακαςinclude items exported by defaultproduce DXF outputTry “%s --help†for more information. produce Skencil outputproduce Compass PLT output for Cartoproduce SVG outputNo terrain data near area of surveyset location for output filesonly show brief summary (-qq for errors only)do not create .err fileturn warnings into errorsSurvex pos filesProcessed: %sPlan view, %s up pageElevation facing %slog output to .log filespecify the 3d file format version to outputSurvey contains 1 survey station,Survey contains %ld survey stations, joined by 1 leg. joined by %ld legs.κόμβοςκόμβοιSurvey has %ld connected components.sort by horizontal error factorsort by vertical error factorsort by percentage errorsort by error per legreplace .err file with resorted version&Reprocessnumeric argument “%s†out of rangeargument “%s†not an integerargument “%s†not a numberExpecting “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€Expecting “NOTâ€, “DUPLICATEâ€, “SPLAYâ€, or “SURFACEâ€Station “%s†referred to by *entrance or *export but never usedExtended elevationNo matching BEGINSurvey name doesn’t match BEGINSurvey name omitted from END( Ανατολικά, Î’ÏŒÏεια, ΥψόμετÏο )Display Depth: %d bpp (colour)Expecting date, found “%sâ€only load the sub-survey with this prefix*UNITS factor must be non-zero&Screenshot...No survey data in 3d file “%sâ€Î£Ï„Ïαμμένηrewind file and read it a second timeΣχετικά %sSelect a survey file to viewSurvex 3d αÏχείαΌλα τα αÏχείαSurvey visualisation tool&ΑÏχείοΠε&ÏιστÏοφήΠÏοσανα&τολισμός&Όψη&Controls&Βοήθεια&ΠαÏουσίασηscale (50, 0.02, 1:50 and 2:100 all mean 1:50)ΑΡΧΕΊΟ1 ΑΡΧΕΊΟ2 [ΚΑΤÎΦΛΙ]This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.&Άνοιγμα... Ctrl+OαχÏονολόγητοςNEWLINE can’t be the first readingNEWLINE can’t be the last readingInterleaved readings, but no NEWLINEReading “%s†must occur before NEWLINENEWLINE can only be preceded by STATION, DEPTH, and COUNTCan’t calibrate angular and length quantities together%s Error LogAll survey files&Εξαγωγή...Au&to-Rotate Space%d/%d↑%s 1:%.0f&ΑντίστÏοφη κατεÏθυνση%s↔%s 1:%.0f%s↔%s ∡%s 1:%.0f&PerspectiveTextured &WallsFade Distant Ob&jectsView &NorthView &EastView &SouthView &WestExtended 1:%.0fΕμφάνιση όλωνHide othersE&xtended Elevation...&Plan ViewEle&vation&Dashed&Duplicate LegsExport format not specified and not known from output file extensionExport format not specifiedRestore De&fault ViewFILE1 and FILE2 can be .pos or .3d files THRESHOLD is the max. ignorable change along any axis in metres (default %s)Elements%d pages (%dx%d)Μία σελίδαΑζιμοÏθιοStation NamesΣταυÏοίUnderground Survey LegsTilt anglePage BordersΛεζάνταBlank PagesINPUT_3D_FILE [OUTPUT_3D_FILE]ERR_FILE [HOW_MANY][SURVEY_FILE]Station &Names Ctrl+N&ΣταυÏοί Ctrl+X&Underground Survey Legs Ctrl+L&Overlapping Names&Πυξίδα&ΚλινόμετÏοColour &Key&ΓÏαμμή κλίμακας (unused in perspective view)Time: &Reverse Sense Ctrl+R&Cancel Measuring Line Escape secs (0 = auto; *6 = 6 times auto)ΌψηElevation facing %s, tilted %s&ElevationReference to station “%s†from non-existent survey “%sâ€Failed to initialise input coordinate system “%sâ€Failed to initialise output coordinate system “%sâ€Colour by &ErrorNot in loop&Surface Survey Legs Ctrl+FColour by &DepthColour by D&ateHighlight &EntrancesHighlight &Fixed PointsHighlight E&xported Points&Πλέγμα Ctrl+GSmoot&hed Survey Legs&Indicators%s: option “%s†is ambiguous Input coordinate system must be specified for “*DECLINATION AUTOâ€%s: option “%c%s†doesn’t allow an argument %s: option “--%s†doesn’t allow an argument No survey date specified - using 0 for magnetic declination%s: η επιλογή “%s†απαιτεί ένα ÏŒÏισμα %s: η επιλογή απαιτεί ένα ÏŒÏισμα -- %c %s: unrecognized option “--%s†%s: unrecognized option “%c%s†Expected number or “AUTOâ€%s: μη αναγνωÏίσιμη επιλογή -- %c &New Presentation&Open Presentation...&Save PresentationSa&ve Presentation As...&Mark&ΑναπαÏαγωγή&Export as Movie...&Bounding Box Ctrl+BSelect an output filenameAven presentationsSave ScreenshotSelect a presentation to openError in format of presentation file “%sâ€Compass PLT filesCMAP XYZ filesModified PresentationThe current presentation has been modified. Abandon unsaved changes?Δεν βÏέθηκαν αντιστοιχίες.Survex svx αÏχείαCompass DAT and MAK filesExport MovieΑναζήτησηΚÏÏβωHide %d found stationsΥψόμετÏοYou may only view one 3d file at a time.&Side Panel%.2f Α, %.2f ΒΑπό %sH %.2f%s, V %.2f%s%s: %s, Dist %.2f%s, Brg %03.1f%s, Grd %s&Metric&Degrees°áµPassage &Tubes Ctrl+T&Preferences...Draw passage wallsEstimate LRUD readings based on heuristicsMark survey stations with crossesHighlight stations marked as entrancesHighlight stations marked as fixed pointsHighlight stations which are exportedMark survey stations with their namesAllow names to overlap on the display (faster)Full Screen &Mode F11Display underground survey legsDisplay surface survey legsColour surface surveys by depthDraw surface legs with dashed linesDraw a gridmetric unitsimperial unitsdegrees (°)gradsDisplay measurements inDisplay angles inReverse the sense of the controlsDisplay scale barDisplay depth barDisplay compassDisplay clinometerDisplay side panel%s: H %.2f%s, Brg %03.1f%s%s: V %.2f%sSurveysΠαÏουσίασηΑνατολικάΒόÏεια&ΕκτÏπωση... Ctrl+PP&age Setup...&Export as...Εξαγωγή&Hide Clino&Hide scale bar&Hide colour key&Hide CompassHide si&blingsΑνεπαÏκής μνήμηSystem Information:Scale factor must be non-zeroSeparator in survey nameCross-sectionsWallsPassagesshow survey date information (if present)Bad *alias commandΠÏοεπισκόπηση ΕκτÏπωσηςΕκτÏπωση&ΕκτÏπωση...Export as:Couldn’t write file “%sâ€Sur&face Survey LegsEdit WaypointThis version of %s requires OpenGL to work, but it isn’t available.Spla&y Legs&ΑπόκÏυψη&ΞεθωÏιάζω&ΕμφάνισηExport formatDXF αÏχείαEPS αÏχείαGPX αÏχείαHPGL for plottersCompass PLT for use with CartoSkencil αÏχείαSVG αÏχείαEntrancesFixed PointsExported StationsOrigin in centreFull coordinateskmmcm miles mileπόδιαίντσες&Percent∞ΠλάνοKiwi PlanUnknown coordinate systemCoordinate system unsuitable for outputFailed to convert coordinates: %sThe input projection is set but the output projection isn'tThe output projection is set but the input projection isn'tCoordinates can't be omitted when coordinate system has been specifiedCoordinate projectionAlready had FIX command with no coordinates for station “%sâ€Station “%s†fixed before CS command first usedInvalid coordinate system: %sKML αÏχείαJSON αÏχεία&Αποθήκευση καταγÏαφήςLog filesColour by &SurveyTerr&ainCo&lour bySelect a terrain file to viewTerrain filesOpen &Terrain...produce EPS outputproduce GPX outputproduce HPGL outputproduce JSON outputproduce KML outputproduce Survex POS outputbearing (90, 90d, 100g all mean 90°)tilt (45, 45d, 50g, 100% all mean 45°)plan view (equivalent to --tilt=-90)elevation view (equivalent to --tilt=0)surface survey legssplay legsentrancesfixed pointsexported stationscross-sectionswallspassagesorigin in centrefull coordinatesσταυÏοίstation labelsunderground survey legsClamp to groundclamp to groundUnits “%s†are deprecated, assuming “grads†- see manual for detailsColour by &Horizontal ErrorColour by &Vertical ErrorColour by St&yleExpecting quadrant bearing, found “%sâ€Declination: %s, grid convergence: %.1f%sinfoconvert MOVE and LINE into LEGproduce Survex 3d outputMoved by (%3.2f,%3.2f,%3.2f): %sAdded: %sDeleted: %sFailed to find station %sFailed to find leg %s → %sStarting from station %sExtending to the left from station %sExtending to the right from station %sExtending to the left from leg %s → %sExtending to the right from leg %s → %sBreaking survey loop at station %sBreaking survey loop at leg %s → %sSwapping extend direction from station %sSwapping extend direction from leg %s → %sApplying specfile: “%sâ€Writing %s…survex-1.4.4/lib/survex.lang0000644000175000017500000003512314141575516012757 00000000000000 text/x-survex *.svx ;