diff --git a/COPYING.hispavoces b/COPYING.hispavoces new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/COPYING.hispavoces @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 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 Lesser 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 Street, 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 Lesser General +Public License instead of this License. diff --git a/festdoc-1.4.2.tar.gz b/festdoc-1.4.2.tar.gz new file mode 100644 index 0000000..3355ee2 Binary files /dev/null and b/festdoc-1.4.2.tar.gz differ diff --git a/festival-1.96-0.7-fedora-siteinit.scm b/festival-1.96-0.7-fedora-siteinit.scm new file mode 100644 index 0000000..f29c697 --- /dev/null +++ b/festival-1.96-0.7-fedora-siteinit.scm @@ -0,0 +1,20 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Site specific initialization file for Festival +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Note that many configuration settings are better made in +;; individual ~/.festivalrc files. For example, if you want to +;; enable ESD audio and do it here, it'll break screen reading +;; on the login screen. Instead, put the (uncommented) line +;(Parameter.def 'Audio_Method 'esdaudio) +;; in your individual initialization file. + +;; You can change the default voice with something like: +;(set! voice_default 'voice_nitech_us_awb_arctic_hts) + +;; If you want to install voices into a non-default location, +;; see sitevars.scm for the appropriate settings. + +(provide 'siteinit) diff --git a/festival-1.96-0.7-fedora-sitevars.scm b/festival-1.96-0.7-fedora-sitevars.scm new file mode 100644 index 0000000..af18f8b --- /dev/null +++ b/festival-1.96-0.7-fedora-sitevars.scm @@ -0,0 +1,21 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Site specific variable settings for Festival +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; The system-voice-path is an additional path in which to look +;; for voices. If you install voices not provided in the form of +;; rpm package, you should then set this to match. The default +;; provided here, "/usr/local/share/festival/lib/voices/", is +;; probably a good choice. You could also set this in +;; ~/.festivalvarsrc, if you want to use a voice not provided to +;; the system as a whole. + +(set! system-voice-path '("/usr/local/share/festival/lib/voices/")) +(set! system-voice-path-multisyn + '("/usr/local/share/festival/lib/voices-multisyn/")) + + + +(provide 'sitevars) diff --git a/festival-1.96-alias_cmu_to_nitech.patch b/festival-1.96-alias_cmu_to_nitech.patch new file mode 100644 index 0000000..9fe757d --- /dev/null +++ b/festival-1.96-alias_cmu_to_nitech.patch @@ -0,0 +1,57 @@ +diff -urN festival.orig/lib/alias_cmu_to_nitech.scm festival/lib/alias_cmu_to_nitech.scm +--- festival.orig/lib/alias_cmu_to_nitech.scm 1969-12-31 19:00:00.000000000 -0500 ++++ festival/lib/alias_cmu_to_nitech.scm 2007-03-14 23:31:43.000000000 -0400 +@@ -0,0 +1,39 @@ ++; ++; This file is trivial and I make no claims of copyright. However, I should ++; certainly credit Nickolay V. Shmyrev, who sent me a snippet of code on ++; which this is based. ++; -- Matthew Miller ++; ++ ++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ++;;; ++;;; Make aliases for cmu_us_*_arctic_hts voices previously shipped with ++;;; Fedora which are now replaced by the nitech_us_*_arctic_hts versions ++;;; of the same voices. ++;;; ++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ++ ++(if (and (member 'nitech_us_awb_arctic_hts (voice.list)) ++ (not (member 'cmu_us_awb_arctic_hts (voice.list)))) ++ (define (voice_cmu_us_awb_arctic_hts) ++ (voice_nitech_us_awb_arctic_hts) ++ 'cmu_us_awb_arctic_hts)) ++ ++(if (and (member 'nitech_us_bdl_arctic_hts (voice.list)) ++ (not (member 'cmu_us_bdl_arctic_hts (voice.list)))) ++ (define (voice_cmu_us_bdl_arctic_hts) ++ (voice_nitech_us_bdl_arctic_hts) ++ 'cmu_us_bdl_arctic_hts)) ++ ++(if (and (member 'nitech_us_jmk_arctic_hts (voice.list)) ++ (not (member 'cmu_us_jmk_arctic_hts (voice.list)))) ++ (define (voice_cmu_us_jmk_arctic_hts) ++ (voice_nitech_us_jmk_arctic_hts) ++ 'cmu_us_jmk_arctic_hts)) ++ ++(if (and (member 'nitech_us_slt_arctic_hts (voice.list)) ++ (not (member 'cmu_us_slt_arctic_hts (voice.list)))) ++ (define (voice_cmu_us_slt_arctic_hts) ++ (voice_nitech_us_slt_arctic_hts) ++ 'cmu_us_slt_arctic_hts)) ++ +diff -urN festival.orig/lib/init.scm festival/lib/init.scm +--- festival.orig/lib/init.scm 2007-03-14 23:26:07.000000000 -0400 ++++ festival/lib/init.scm 2007-03-14 23:32:44.000000000 -0400 +@@ -128,6 +128,10 @@ + (require 'voices) ;; sets voice_default + (require 'languages) + ++;;; Aliases for the CMU voices previously shipped ++;;; with Fedora (now replaced by Nitech versions) ++(require 'alias_cmu_to_nitech) ++ + ;;; Some higher level functions + (require 'token) + (require 'tts) diff --git a/festival-1.96-beta.tar.gz b/festival-1.96-beta.tar.gz new file mode 100644 index 0000000..1bf80da Binary files /dev/null and b/festival-1.96-beta.tar.gz differ diff --git a/festival-1.96-bettersonamehack.patch b/festival-1.96-bettersonamehack.patch new file mode 100644 index 0000000..db78824 --- /dev/null +++ b/festival-1.96-bettersonamehack.patch @@ -0,0 +1,33 @@ +--- festival/speech_tools/config/rules/library.mak.soname 2001-04-04 07:55:32.000000000 -0400 ++++ festival/speech_tools/config/rules/library.mak 2007-03-16 14:13:59.000000000 -0400 +@@ -103,14 +103,14 @@ + ########################################################################### + + lib%.so : lib%.a +- @echo Make Shared Library $* ++ @echo Make Shared Library $(*F) + @if [ ! -d shared_space ] ; then mkdir shared_space ; else $(RM) -f shared_space/*.o ; fi + @(cd shared_space ; $(AR) x ../$< ) +- @echo Link Shared Library $* +- if [ -n "$(PROJECT_LIBRARY_NEEDS_SYSLIBS_$*)" ] ; then libs='$(JAVA_PROJECT_LIBS)' ; fi ;\ +- $(subst XXX,$@.$(PROJECT_LIBRARY_VERSION_$*),$(MAKE_SHARED_LIB)) shared_space/*.o $(PROJECT_LIBRARY_USES_$*:%=-L. -l%) $$libs ++ @echo Link Shared Library $(*F) ++ if [ -n "$(PROJECT_LIBRARY_NEEDS_SYSLIBS_$(*F))" ] ; then libs='$(JAVA_PROJECT_LIBS)' ; fi ;\ ++ $(subst XXX,$@.$(PROJECT_LIBRARY_VERSION_$(*F)),$(subst YYY,$(@F).$(PROJECT_LIBRARY_VERSION_$(*F)),$(MAKE_SHARED_LIB))) shared_space/*.o $(PROJECT_LIBRARY_USES_$(*F):%=-L. -l%) $$libs + @$(RM) -f shared_space/*.o $@ +- @ln -s $@.$(PROJECT_LIBRARY_VERSION_$*) $@ ++ @ln -s $(@F).$(PROJECT_LIBRARY_VERSION_$(*F)) $@ + + ########################################################################### + ## ## +--- festival/speech_tools/config/compilers/gcc_defaults.mak.soname 2007-03-16 12:43:31.000000000 -0400 ++++ festival/speech_tools/config/compilers/gcc_defaults.mak 2007-03-16 13:30:11.000000000 -0400 +@@ -78,7 +78,7 @@ + SHARED_LINKFLAGS = -fno-shared-data + + ifndef GCC_MAKE_SHARED_LIB +- MAKE_SHARED_LIB = $(CXX) -shared -fno-shared-data -o XXX ++ MAKE_SHARED_LIB = $(CXX) -shared -fno-shared-data -o XXX -Wl,-soname,YYY + else + MAKE_SHARED_LIB = $(GCC_MAKE_SHARED_LIB) + endif diff --git a/festival-1.96-etcsiteinit.patch b/festival-1.96-etcsiteinit.patch new file mode 100644 index 0000000..8e21ace --- /dev/null +++ b/festival-1.96-etcsiteinit.patch @@ -0,0 +1,55 @@ +diff -ur festival.orig/lib/init.scm festival/lib/init.scm +--- festival.orig/lib/init.scm 2004-07-15 19:03:04.000000000 -0400 ++++ festival/lib/init.scm 2007-03-15 11:58:09.000000000 -0400 +@@ -55,6 +55,10 @@ + (if (probe_file (path-append libdir "sitevars.scm")) + (load (path-append libdir "sitevars.scm"))) + ++(if (probe_file "/etc/festival/sitevars.scm") ++ (load "/etc/festival/sitevars.scm")) ++ ++ + ;;; CSTR siod extensions + (require 'cstr) + +@@ -98,7 +102,7 @@ + (t ;; can't find direct support so guess that /dev/audio for 8k ulaw exists + (Parameter.def 'Audio_Method 'sunaudio))) + ;;; If you have an external program to play audio add its definition +-;;; in siteinit.scm ++;;; in ~/.festivalrc or /etc/festival/siteinit.scm + + ;;; The audio spooler doesn't work under Windows so redefine audio_mode + (if (member 'mplayeraudio *modules*) +@@ -135,9 +139,13 @@ + ;;; + ;;; Local site initialization, if the file exists load it + ;;; ++ + (if (probe_file (path-append libdir "siteinit.scm")) + (load (path-append libdir "siteinit.scm"))) + ++(if (probe_file "/etc/festival/siteinit.scm") ++ (load "/etc/festival/siteinit.scm")) ++ + ;;; User initialization, if a user has a personal customization + ;;; file loaded it + (if (probe_file (path-append home-directory ".siodrc")) +diff -ur festival.orig/lib/voices.scm festival/lib/voices.scm +--- festival.orig/lib/voices.scm 2005-05-02 10:20:37.000000000 -0400 ++++ festival/lib/voices.scm 2007-03-15 12:00:19.000000000 -0400 +@@ -45,12 +45,12 @@ + (defvar system-voice-path '( ) + "system-voice-path + Additional directory not near the load path where voices can be +- found, this can be redefined in lib/sitevars.scm if desired.") ++ found, this can be redefined in /etc/festival/sitevars.scm if desired.") + + (defvar system-voice-path-multisyn '( ) + "system-voice-path-multisyn + Additional directory not near the load path where multisyn voices can be +- found, this can be redefined in lib/sitevars.scm if desired.") ++ found, this can be redefined in /etc/festival/sitevars.scm if desired.") + + (defvar voice-path + (remove-duplicates diff --git a/festival-1.96-findspeechtools.patch b/festival-1.96-findspeechtools.patch new file mode 100644 index 0000000..cb827f5 --- /dev/null +++ b/festival-1.96-findspeechtools.patch @@ -0,0 +1,11 @@ +--- festival/config/config.in.orig 2007-03-15 16:16:24.000000000 -0400 ++++ festival/config/config.in 2007-03-15 16:16:50.000000000 -0400 +@@ -10,7 +10,7 @@ + ########################################################################### + ## Which speech tools to use + +-EST=$(TOP)/../speech_tools ++EST=$(TOP)/speech_tools + + ########################################################################### + ## Where the festival tree will be installed. diff --git a/festival-1.96-format-security.patch b/festival-1.96-format-security.patch new file mode 100644 index 0000000..144de47 --- /dev/null +++ b/festival-1.96-format-security.patch @@ -0,0 +1,24 @@ +diff -Naur festival.orig/speech_tools/siod/siodeditline.c festival/speech_tools/siod/siodeditline.c +--- festival.orig/speech_tools/siod/siodeditline.c 2004-04-30 18:56:51.000000000 +0200 ++++ festival/speech_tools/siod/siodeditline.c 2014-05-12 19:00:37.491000000 +0200 +@@ -151,7 +151,7 @@ + symbol = el_current_sym(); + infostring = siod_manual_sym(symbol); + putc('\n',stderr); +- fprintf(stderr,infostring); ++ fprintf(stderr,"%s",infostring); + fflush(stderr); + putc('\n',stderr); + fflush(stderr); +diff -Naur festival.orig/speech_tools/utils/cmd_line.cc festival/speech_tools/utils/cmd_line.cc +--- festival.orig/speech_tools/utils/cmd_line.cc 2004-09-30 14:53:37.000000000 +0200 ++++ festival/speech_tools/utils/cmd_line.cc 2014-05-12 19:08:57.577000000 +0200 +@@ -460,7 +460,7 @@ + fprintf(stdout,"%s", + (const char *)full.filename()); + +- fprintf(stdout, (const char *)ts.get_upto_eoln().string()); ++ fprintf(stdout, "%s", (const char *)ts.get_upto_eoln().string()); + + while (!ts.eof()) + { diff --git a/festival-1.96-kludge-etcpath-into-libarch.patch b/festival-1.96-kludge-etcpath-into-libarch.patch new file mode 100644 index 0000000..e69e870 --- /dev/null +++ b/festival-1.96-kludge-etcpath-into-libarch.patch @@ -0,0 +1,35 @@ +diff -ur festival.orig/speech_tools/main/siod_main.cc festival/speech_tools/main/siod_main.cc +--- festival.orig/speech_tools/main/siod_main.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/main/siod_main.cc 2007-03-13 00:49:35.000000000 -0400 +@@ -224,10 +224,10 @@ + cons(flocons(subminor),NIL)))); + + EST_Pathname etcdircommon = est_libdir; +- etcdircommon += "etc"; ++ etcdircommon += "etc/"; + +- EST_Pathname etcdir = etcdircommon; +- etcdir += est_ostype; ++ EST_Pathname etcdir = {{HORRIBLELIBARCHKLUDGE}}; ++ etcdir += "festival/etc/"; + + // Modify my PATH to include these directories + siod_set_lval("etc-path",cons(rintern(etcdir), +diff -ur festival.orig/src/arch/festival/festival.cc festival/src/arch/festival/festival.cc +--- festival.orig/src/arch/festival/festival.cc 2007-03-13 00:41:42.000000000 -0400 ++++ festival/src/arch/festival/festival.cc 2007-03-13 00:47:55.000000000 -0400 +@@ -349,10 +349,10 @@ + proclaim_module("mplayeraudio"); + + // Add etc-dir path and machine specific directory etc/$OSTYPE +- char *etcdir = walloc(char,strlen(festival_libdir)+strlen("etc/")+ +- strlen(FTOSTYPE)+3); +- sprintf(etcdir,"%s/etc/%s/",festival_libdir,FTOSTYPE); +- char *etcdircommon = walloc(char,strlen(festival_libdir)+strlen("etc/")+3); ++ char *etcdir = walloc(char,strlen({{HORRIBLELIBARCHKLUDGE}})+ ++ strlen("etc/festival/")+2); ++ sprintf(etcdir,"%s/festival/etc/",{{HORRIBLELIBARCHKLUDGE}}); ++ char *etcdircommon = walloc(char,strlen(festival_libdir)+strlen("etc/")+2); + sprintf(etcdircommon,"%s/etc/",festival_libdir); + + // Modify my PATH to include these directories diff --git a/festival-1.96-main-shared-build.patch b/festival-1.96-main-shared-build.patch new file mode 100644 index 0000000..d424c7e --- /dev/null +++ b/festival-1.96-main-shared-build.patch @@ -0,0 +1,37 @@ +--- festival/speech_tools/config/rules/defaults.mak.orig 2007-03-16 12:39:12.000000000 -0400 ++++ festival/speech_tools/config/rules/defaults.mak 2007-03-16 12:39:19.000000000 -0400 +@@ -69,15 +69,21 @@ + MADE_FROM_ABOVE:=$(N) + endif + ++ifneq ($(SHARED),0) ++ LIBTYPE=so ++else ++ LIBTYPE=a ++endif ++ + ifndef PROJECT_LIBDEPS +- PROJECT_LIBDEPS = $(foreach l,$(PROJECT_LIBRARIES),$(PROJECT_LIBRARY_DIR_$(l))/lib$(l).a) ++ PROJECT_LIBDEPS = $(foreach l,$(PROJECT_LIBRARIES),$(PROJECT_LIBRARY_DIR_$(l))/lib$(l).$(LIBTYPE)) + endif + ifndef PROJECT_LIBS + PROJECT_LIBS = $(foreach l,$(PROJECT_LIBRARIES),-L$(PROJECT_LIBRARY_DIR_$(l)) -l$(l)) + endif + + ifndef REQUIRED_LIBDEPS +- REQUIRED_LIBDEPS = $(foreach l,$(REQUIRED_LIBRARIES),$(REQUIRED_LIBRARY_DIR_$(l))/lib$(l).a) ++ REQUIRED_LIBDEPS = $(foreach l,$(REQUIRED_LIBRARIES),$(REQUIRED_LIBRARY_DIR_$(l))/lib$(l).$(LIBTYPE)) + endif + ifndef REQUIRED_LIBS + REQUIRED_LIBS = $(foreach l,$(REQUIRED_LIBRARIES),-L$(REQUIRED_LIBRARY_DIR_$(l)) -l$(l)) +--- festival/config/project.mak.orig 2007-03-16 13:01:40.000000000 -0400 ++++ festival/config/project.mak 2007-03-16 13:02:24.000000000 -0400 +@@ -84,6 +84,8 @@ + PROJECT_LIBRARY_DIR_Festival = $(TOP)/src/lib + PROJECT_DEFAULT_LIBRARY = Festival + ++PROJECT_LIBRARY_VERSION_Festival = $(PROJECT_VERSION).0 ++ + # Libraries used from other projects + + REQUIRED_LIBRARIES = estools estbase eststring diff --git a/festival-1.96-nitech-american.patch b/festival-1.96-nitech-american.patch new file mode 100644 index 0000000..2f4a57f --- /dev/null +++ b/festival-1.96-nitech-american.patch @@ -0,0 +1,213 @@ +diff -ur festival.orig/lib/email-mode.scm festival/lib/email-mode.scm +--- festival.orig/lib/email-mode.scm 2001-04-04 07:55:20.000000000 -0400 ++++ festival/lib/email-mode.scm 2007-03-13 12:14:01.000000000 -0400 +@@ -40,7 +40,7 @@ + (define (email_init_func) + "(email_init_func) + Called on starting email text mode." +- (voice_rab_diphone) ++ (voice_nitech_us_slt_arctic_hts) + (set! email_previous_t2w_func token_to_words) + (set! english_token_to_words email_token_to_words) + (set! token_to_words english_token_to_words) +@@ -67,13 +67,13 @@ + ((and (string-matches name ">") + (string-matches (item.feat token "whitespace") + "[ \t\n]*\n *")) +- (voice_don_diphone) ++ (voice_nitech_us_bdl_arctic_hts) + nil ;; return nothing to say + ) + (t ;; for all other cases + (if (string-matches (item.feat token "whitespace") + ".*\n[ \n]*") +- (voice_rab_diphone)) ++ (voice_nitech_us_slt_arctic_hts)) + (email_previous_t2w_func token name)))) + + (set! tts_text_modes +diff -ur festival.orig/lib/festival.scm festival/lib/festival.scm +--- festival.orig/lib/festival.scm 2005-10-21 08:34:01.000000000 -0400 ++++ festival/lib/festival.scm 2007-03-13 12:15:13.000000000 -0400 +@@ -507,8 +507,11 @@ + double quotes + (tts FILENAME nil) Say contexts of file, FILENAME should be + surrounded by double quotes +- (voice_rab_diphone) Select voice (Britsh Male) + (voice_ked_diphone) Select voice (American Male) ++ (voice_nitech_us_bdl_arctic_hts) ++ Select voice (American Male) ++ (voice_nitech_us_slt_arctic_hts) ++ Select voice (American Female) + ") + + (define (festival_warranty) +diff -ur festival.orig/lib/languages.scm festival/lib/languages.scm +--- festival.orig/lib/languages.scm 2002-04-19 17:47:23.000000000 -0400 ++++ festival/lib/languages.scm 2007-03-13 12:17:15.000000000 -0400 +@@ -58,11 +58,12 @@ + + (define (language_american_english) + "(language_american_english) +-Set up language parameters for Aemerican English." ++Set up language parameters for American English." + +- (if (symbol-bound? 'voice_kal_diphone) +- (set! female1 voice_kal_diphone)) +- (set! male1 voice_ked_diphone) ++ (if (symbol-bound? 'voice_nitech_us_slt_arctic_hts) ++ (set! female1 voice_nitech_us_slt_arctic_hts)) ++ (if (symbol-bound? 'voice_nitech_us_bdl_arctic_hts) ++ (set! male1 voice_nitech_us_bdl_arctic_hts)) + + (male1) + (Parameter.set 'Language 'americanenglish) +@@ -98,11 +99,12 @@ + + (define (select_language language) + (cond +- ((or (equal? language 'britishenglish) +- (equal? language 'english)) ;; we all know its the *real* English ++ ((or (equal? language 'americanenglish) ++ (equal? language 'english)) ;; it may not be the *real* English ++ (language_american_english)) ;; but at least it's supported without ++ ;; non-free add-ons. ++ ((equal? language 'britishenglish) + (language_british_english)) +- ((equal? language 'americanenglish) +- (language_american_english)) + ((equal? language 'scotsgaelic) + (language_scots_gaelic)) + ((equal? language 'welsh) +@@ -113,8 +115,8 @@ + (language_klingon)) + (t + (print "Unsupported language, using English") +- (language_british_english)))) ++ (language_american_english)))) + +-(defvar language_default language_british_english) ++(defvar language_default language_american_english) + + (provide 'languages) +diff -ur festival.orig/lib/sable-mode.scm festival/lib/sable-mode.scm +--- festival.orig/lib/sable-mode.scm 2006-07-07 17:24:55.000000000 -0400 ++++ festival/lib/sable-mode.scm 2007-03-13 12:25:04.000000000 -0400 +@@ -222,35 +222,38 @@ + (xxml_synth UTT) + (set! sable_speaker_stack (cons sable_current_speaker sable_speaker_stack)) + (cond +- ((not equal? sable_current_language 'britishenglish) ++ ((not equal? sable_current_language 'americanenglish) + (print "SABLE: choosen unknown voice, current voice unchanged")) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male1) +- (set! sable_current_speaker 'voice_kal_diphone) +- (voice_kal_diphone)) ++ (set! sable_current_speaker 'voice_nitech_us_bdl_arctic_hts) ++ (voice_nitech_us_bdl_arctic_hts)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male2) +- (set! sable_current_speaker 'voice_don_diphone) +- (voice_don_diphone)) ++ (set! sable_current_speaker 'voice_nitech_us_rms_arctic_hts) ++ (voice_nitech_us_rms_arctic_hts)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male3) +- (set! sable_current_speaker 'voice_ked_diphone) +- (voice_ked_diphone)) ++ (set! sable_current_speaker 'voice_nitech_us_awb_arctic_hts) ++ (voice_nitech_us_awb_arctic_hts)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male4) +- (set! sable_current_speaker 'voice_rab_diphone) +- (voice_rab_diphone)) ++ (set! sable_current_speaker 'voice_nitech_us_jmk_arctic_hts) ++ (voice_nitech_us_jmk_arctic_hts)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male5) +- (set! sable_current_speaker 'voice_cmu_us_jmk_arctic_hts) +- (voice_cmu_us_jmk_arctic_hts)) ++ (set! sable_current_speaker 'voice_kal_diphone) ++ (voice_kal_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male6) +- (set! sable_current_speaker 'voice_cmu_us_bdl_arctic_hts) +- (voice_cmu_us_bdl_arctic_hts)) ++ (set! sable_current_speaker 'voice_ked_diphone) ++ (voice_ked_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male7) +- (set! sable_current_speaker 'voice_cmu_us_awb_arctic_hts) +- (voice_cmu_us_awb_arctic_hts)) ++ (set! sable_current_speaker 'voice_kal_diphone) ++ (voice_kal_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male8) +- (set! sable_current_speaker 'voice_rab_diphone) ++ (set! sable_current_speaker 'voice_ked_diphone) + (voice_ked_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'female1) +- (set! sable_current_speaker 'voice_cmu_us_slt_arctic_hts) +- (voice_us1_mbrola)) ++ (set! sable_current_speaker 'voice_nitech_us_slt_arctic_hts) ++ (voice_nitech_us_slt_arctic_hts)) ++ ((equal? (car (xxml_attval "NAME" ATTLIST)) 'female2) ++ (set! sable_current_speaker 'voice_nitech_us_clb_arctic_hts) ++ (voice_nitech_us_clb_arctic_hts)) + (t + (set! sable_current_speaker (intern (string-append "voice_" (car (xxml_attval "NAME" ATTLIST))))) + (eval (list sable_current_speaker)))) +@@ -467,7 +470,7 @@ + "(sable_init_func) + Initialisation for SABLE mode" + (sable_init_globals) +- (voice_kal_diphone) ++ (voice_nitech_us_slt_arctic_hts) + (set! sable_previous_elements xxml_elements) + (set! xxml_elements sable_elements) + (set! sable_previous_token_to_words english_token_to_words) +diff -ur festival.orig/lib/soleml-mode.scm festival/lib/soleml-mode.scm +--- festival.orig/lib/soleml-mode.scm 2001-04-04 07:55:20.000000000 -0400 ++++ festival/lib/soleml-mode.scm 2007-03-13 12:25:48.000000000 -0400 +@@ -51,7 +51,7 @@ + (define (voice_soleml) + "(soleml_voice) + Speaker specific initialisation for SOLE museum data." +- (voice_rab_diphone) ++ (voice_nitech_us_slt_arctic_hts) + ;; Utterances only come at end of file + (set! eou_tree '((0))) + ) +diff -ur festival.orig/lib/voices.scm festival/lib/voices.scm +--- festival.orig/lib/voices.scm 2005-05-02 10:20:37.000000000 -0400 ++++ festival/lib/voices.scm 2007-03-13 12:31:07.000000000 -0400 +@@ -322,25 +322,19 @@ + A variable whose value is a function name that is called on start up to + the default voice. [see Site initialization]") + ++; This list has been reordered for Fedora, since we want to have the option ++; to only install a smallish voice by default. And the slt voice is nice. + (defvar default-voice-priority-list +- '(kal_diphone +- cmu_us_bdl_arctic_hts +- cmu_us_jmk_arctic_hts +- cmu_us_slt_arctic_hts +- cmu_us_awb_arctic_hts +-; cstr_rpx_nina_multisyn ; restricted license (lexicon) +-; cstr_rpx_jon_multisyn ; restricted license (lexicon) +-; cstr_edi_awb_arctic_multisyn ; restricted license (lexicon) +-; cstr_us_awb_arctic_multisyn ++ '(nitech_us_slt_arctic_hts ++ nitech_us_awb_arctic_hts ++ nitech_us_bdl_arctic_hts ++ nitech_us_clb_arctic_hts ++ nitech_us_jmk_arctic_hts ++ nitech_us_rms_arctic_hts ++ kal_diphone + ked_diphone +- don_diphone +- rab_diphone +- en1_mbrola +- us1_mbrola +- us2_mbrola +- us3_mbrola +- gsw_diphone ;; not publically distributed +- el_diphone ++ cstr_us_awb_arctic_multisyn ++ cstr_us_jmk_arctic_multisyn + ) + "default-voice-priority-list + List of voice names. The first of them available becomes the default voice.") diff --git a/festival-1.96-nitech-fixmissingrequire.patch b/festival-1.96-nitech-fixmissingrequire.patch new file mode 100644 index 0000000..80d4056 --- /dev/null +++ b/festival-1.96-nitech-fixmissingrequire.patch @@ -0,0 +1,36 @@ +diff -ur festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_f0model.scm festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_f0model.scm +--- festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_f0model.scm 2006-12-26 01:37:36.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_f0model.scm 2007-03-15 14:16:01.000000000 -0400 +@@ -35,7 +35,7 @@ + ;;; + + ;;; Load any necessary files here +-;(require 'f2bf0lr) ++(require 'f2bf0lr) + (require 'nitech_us_awb_arctic_f0clunits) + + (set! nitech_us_awb_arctic_int_lr_params +diff -ur festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_f0model.scm festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_f0model.scm +--- festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_f0model.scm 2006-12-26 01:40:32.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_f0model.scm 2007-03-15 14:16:09.000000000 -0400 +@@ -35,7 +35,7 @@ + ;;; + + ;;; Load any necessary files here +-;(require 'f2bf0lr) ++(require 'f2bf0lr) + (require 'nitech_us_clb_arctic_f0clunits) + + (set! nitech_us_clb_arctic_int_lr_params +diff -ur festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_f0model.scm festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_f0model.scm +--- festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_f0model.scm 2006-12-26 01:41:26.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_f0model.scm 2007-03-15 14:16:06.000000000 -0400 +@@ -35,7 +35,7 @@ + ;;; + + ;;; Load any necessary files here +-;(require 'f2bf0lr) ++(require 'f2bf0lr) + (require 'nitech_us_rms_arctic_f0clunits) + + (set! nitech_us_rms_arctic_int_lr_params diff --git a/festival-1.96-nitech-proclaimvoice.patch b/festival-1.96-nitech-proclaimvoice.patch new file mode 100644 index 0000000..004013a --- /dev/null +++ b/festival-1.96-nitech-proclaimvoice.patch @@ -0,0 +1,102 @@ +diff -ur festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm 2007-03-08 04:26:04.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm 2007-03-14 23:39:40.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_awb_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_awb_arctic_hts ++ '((language english) ++ (gender male) ++ (dialect american) ++ (description ++ "Scottish-accent US English male speaker AWB."))) ++ + (provide 'nitech_us_awb_arctic_hts) + +diff -ur festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm 2007-03-08 04:26:34.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm 2007-03-14 23:40:06.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_bdl_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_bdl_arctic_hts ++ '((language english) ++ (gender male) ++ (dialect american) ++ (description ++ "US English male speaker BDL."))) ++ + (provide 'nitech_us_bdl_arctic_hts) + +diff -ur festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm 2007-03-08 04:27:07.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm 2007-03-14 23:41:36.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_clb_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_clb_arctic_hts ++ '((language english) ++ (gender female) ++ (dialect american) ++ (description ++ "US English female speaker CLB."))) ++ + (provide 'nitech_us_clb_arctic_hts) + +diff -ur festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm 2007-03-08 04:27:43.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm 2007-03-14 23:42:14.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_jmk_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_jmk_arctic_hts ++ '((language english) ++ (gender male) ++ (dialect american) ++ (description ++ "Canadian-accent US English male speaker JMK."))) ++ + (provide 'nitech_us_jmk_arctic_hts) + +diff -ur festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm 2007-03-08 04:28:15.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm 2007-03-14 23:42:46.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_rms_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_rms_arctic_hts ++ '((language english) ++ (gender male) ++ (dialect american) ++ (description ++ "US English male speaker RMS. Not that RMS."))) ++ + (provide 'nitech_us_rms_arctic_hts) + +diff -ur festival/lib/voices/us/nitech_us_slt_arctic_hts/festvox/nitech_us_slt_arctic_hts.scm festival/lib/voices/us/nitech_us_slt_arctic_hts/festvox/nitech_us_slt_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_slt_arctic_hts/festvox/nitech_us_slt_arctic_hts.scm 2007-03-08 04:28:41.000000000 -0500 ++++ festival/lib/voices/us/nitech_us_slt_arctic_hts/festvox/nitech_us_slt_arctic_hts.scm 2007-03-14 23:43:03.000000000 -0400 +@@ -176,5 +176,13 @@ + (set! current-voice 'nitech_us_slt_arctic_hts) + ) + ++(proclaim_voice ++ 'nitech_us_slt_arctic_hts ++ '((language english) ++ (gender female) ++ (dialect american) ++ (description ++ "US English female speaker SLT."))) ++ + (provide 'nitech_us_slt_arctic_hts) + diff --git a/festival-1.96-nitech-sltreferences.patch b/festival-1.96-nitech-sltreferences.patch new file mode 100644 index 0000000..6887a96 --- /dev/null +++ b/festival-1.96-nitech-sltreferences.patch @@ -0,0 +1,135 @@ +diff -ur festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm 2007-03-15 14:18:02.000000000 -0400 ++++ festival/lib/voices/us/nitech_us_awb_arctic_hts/festvox/nitech_us_awb_arctic_hts.scm 2007-03-15 14:20:37.000000000 -0400 +@@ -101,10 +101,10 @@ + t + ) + +-(set! nitech_us_slt_arctic_hts::hts_feats_list ++(set! nitech_us_awb_arctic_hts::hts_feats_list + (load (path-append hts_data_dir "feat.list") t)) + +-(set! nitech_us_slt_arctic_hts::hts_engine_params ++(set! nitech_us_awb_arctic_hts::hts_engine_params + (list + (list "-dm1" (path-append hts_data_dir "mcep_dyn.win")) + (list "-dm2" (path-append hts_data_dir "mcep_acc.win")) +@@ -160,8 +160,8 @@ + (nitech_us_awb_arctic::select_f0model) + + ;; Waveform synthesis model: hts +- (set! hts_engine_params nitech_us_slt_arctic_hts::hts_engine_params) +- (set! hts_feats_list nitech_us_slt_arctic_hts::hts_feats_list) ++ (set! hts_engine_params nitech_us_awb_arctic_hts::hts_engine_params) ++ (set! hts_feats_list nitech_us_awb_arctic_hts::hts_feats_list) + (Parameter.set 'Synth_Method 'HTS) + + ;; This is where you can modify power (and sampling rate) if desired +diff -ur festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm 2007-03-15 14:18:03.000000000 -0400 ++++ festival/lib/voices/us/nitech_us_bdl_arctic_hts/festvox/nitech_us_bdl_arctic_hts.scm 2007-03-15 14:20:43.000000000 -0400 +@@ -101,10 +101,10 @@ + t + ) + +-(set! nitech_us_slt_arctic_hts::hts_feats_list ++(set! nitech_us_bdl_arctic_hts::hts_feats_list + (load (path-append hts_data_dir "feat.list") t)) + +-(set! nitech_us_slt_arctic_hts::hts_engine_params ++(set! nitech_us_bdl_arctic_hts::hts_engine_params + (list + (list "-dm1" (path-append hts_data_dir "mcep_dyn.win")) + (list "-dm2" (path-append hts_data_dir "mcep_acc.win")) +@@ -160,8 +160,8 @@ + (nitech_us_bdl_arctic::select_f0model) + + ;; Waveform synthesis model: hts +- (set! hts_engine_params nitech_us_slt_arctic_hts::hts_engine_params) +- (set! hts_feats_list nitech_us_slt_arctic_hts::hts_feats_list) ++ (set! hts_engine_params nitech_us_bdl_arctic_hts::hts_engine_params) ++ (set! hts_feats_list nitech_us_bdl_arctic_hts::hts_feats_list) + (Parameter.set 'Synth_Method 'HTS) + + ;; This is where you can modify power (and sampling rate) if desired +diff -ur festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm 2007-03-15 14:18:03.000000000 -0400 ++++ festival/lib/voices/us/nitech_us_clb_arctic_hts/festvox/nitech_us_clb_arctic_hts.scm 2007-03-15 14:20:50.000000000 -0400 +@@ -101,10 +101,10 @@ + t + ) + +-(set! nitech_us_slt_arctic_hts::hts_feats_list ++(set! nitech_us_clb_arctic_hts::hts_feats_list + (load (path-append hts_data_dir "feat.list") t)) + +-(set! nitech_us_slt_arctic_hts::hts_engine_params ++(set! nitech_us_clb_arctic_hts::hts_engine_params + (list + (list "-dm1" (path-append hts_data_dir "mcep_dyn.win")) + (list "-dm2" (path-append hts_data_dir "mcep_acc.win")) +@@ -160,8 +160,8 @@ + (nitech_us_clb_arctic::select_f0model) + + ;; Waveform synthesis model: hts +- (set! hts_engine_params nitech_us_slt_arctic_hts::hts_engine_params) +- (set! hts_feats_list nitech_us_slt_arctic_hts::hts_feats_list) ++ (set! hts_engine_params nitech_us_clb_arctic_hts::hts_engine_params) ++ (set! hts_feats_list nitech_us_clb_arctic_hts::hts_feats_list) + (Parameter.set 'Synth_Method 'HTS) + + ;; This is where you can modify power (and sampling rate) if desired +diff -ur festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm 2007-03-15 14:18:03.000000000 -0400 ++++ festival/lib/voices/us/nitech_us_jmk_arctic_hts/festvox/nitech_us_jmk_arctic_hts.scm 2007-03-15 14:20:55.000000000 -0400 +@@ -101,10 +101,10 @@ + t + ) + +-(set! nitech_us_slt_arctic_hts::hts_feats_list ++(set! nitech_us_jmk_arctic_hts::hts_feats_list + (load (path-append hts_data_dir "feat.list") t)) + +-(set! nitech_us_slt_arctic_hts::hts_engine_params ++(set! nitech_us_jmk_arctic_hts::hts_engine_params + (list + (list "-dm1" (path-append hts_data_dir "mcep_dyn.win")) + (list "-dm2" (path-append hts_data_dir "mcep_acc.win")) +@@ -160,8 +160,8 @@ + (nitech_us_jmk_arctic::select_f0model) + + ;; Waveform synthesis model: hts +- (set! hts_engine_params nitech_us_slt_arctic_hts::hts_engine_params) +- (set! hts_feats_list nitech_us_slt_arctic_hts::hts_feats_list) ++ (set! hts_engine_params nitech_us_jmk_arctic_hts::hts_engine_params) ++ (set! hts_feats_list nitech_us_jmk_arctic_hts::hts_feats_list) + (Parameter.set 'Synth_Method 'HTS) + + ;; This is where you can modify power (and sampling rate) if desired +diff -ur festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm +--- festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm 2007-03-15 14:18:03.000000000 -0400 ++++ festival/lib/voices/us/nitech_us_rms_arctic_hts/festvox/nitech_us_rms_arctic_hts.scm 2007-03-15 14:21:01.000000000 -0400 +@@ -101,10 +101,10 @@ + t + ) + +-(set! nitech_us_slt_arctic_hts::hts_feats_list ++(set! nitech_us_rms_arctic_hts::hts_feats_list + (load (path-append hts_data_dir "feat.list") t)) + +-(set! nitech_us_slt_arctic_hts::hts_engine_params ++(set! nitech_us_rms_arctic_hts::hts_engine_params + (list + (list "-dm1" (path-append hts_data_dir "mcep_dyn.win")) + (list "-dm2" (path-append hts_data_dir "mcep_acc.win")) +@@ -160,8 +160,8 @@ + (nitech_us_rms_arctic::select_f0model) + + ;; Waveform synthesis model: hts +- (set! hts_engine_params nitech_us_slt_arctic_hts::hts_engine_params) +- (set! hts_feats_list nitech_us_slt_arctic_hts::hts_feats_list) ++ (set! hts_engine_params nitech_us_rms_arctic_hts::hts_engine_params) ++ (set! hts_feats_list nitech_us_rms_arctic_hts::hts_feats_list) + (Parameter.set 'Synth_Method 'HTS) + + ;; This is where you can modify power (and sampling rate) if desired diff --git a/festival-1.96-server-script-typo.patch b/festival-1.96-server-script-typo.patch new file mode 100644 index 0000000..d8cbf94 --- /dev/null +++ b/festival-1.96-server-script-typo.patch @@ -0,0 +1,11 @@ +--- src/scripts/festival_server.sh.orig 2013-03-02 09:54:57.126436666 -0600 ++++ src/scripts/festival_server.sh 2013-03-02 09:55:10.529140080 -0600 +@@ -119,7 +119,7 @@ + (set! server_port $port) + (set! server_festival_version "$festival" ) + (set! server_log_file "$server_log" ) +-(set! server_startup_file "$serer_startup" ) ++(set! server_startup_file "$server_startup" ) + + ;; Marks end of machine created bit + ;--- diff --git a/festival-1.96-speechtools-1.2.96-beta+awb.patch b/festival-1.96-speechtools-1.2.96-beta+awb.patch new file mode 100644 index 0000000..30906c7 --- /dev/null +++ b/festival-1.96-speechtools-1.2.96-beta+awb.patch @@ -0,0 +1,1227 @@ +diff -ur festival/speech_tools.old/grammar/ngram/EST_Ngrammar.cc festival/speech_tools/grammar/ngram/EST_Ngrammar.cc +--- festival/speech_tools.old/grammar/ngram/EST_Ngrammar.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/grammar/ngram/EST_Ngrammar.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -306,7 +306,7 @@ + // not right - just print out, then recurse through children + // change to use 'backoff_traverse' + +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + for (k=p_pdf.item_start(); +@@ -373,7 +373,7 @@ + { + + // recursively delete this state and all its children +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + for (k=p_pdf.item_start(); +@@ -456,7 +456,8 @@ + + void EST_BackoffNgrammarState::frequency_of_frequencies(EST_DVector &ff) + { +- int k,max=ff.n(); ++ int max=ff.n(); ++ EST_Litem *k; + double freq; + EST_String name; + for (k=p_pdf.item_start(); +@@ -1585,7 +1586,7 @@ + // remove any branches with zero frequency count + + // find children of this state with zero freq and zap them +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + for (k=start_state->pdf_const().item_start(); +@@ -2324,7 +2325,8 @@ + backoff_representation->print_freqs(os,p_order); + else + { +- int i,j,k; ++ int i,j; ++ EST_Litem *k; + EST_IVector window(p_order-1); + + for (i=0; i < p_num_states; i++) +@@ -2665,7 +2667,7 @@ + function(start_state,params); + + // and recurse down the tree +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + for (k=start_state->pdf_const().item_start(); +@@ -2696,7 +2698,7 @@ + { + // and recurse down the tree if we haven't + // reached the level yet +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + +diff -ur festival/speech_tools.old/grammar/ngram/EST_PST.cc festival/speech_tools/grammar/ngram/EST_PST.cc +--- festival/speech_tools.old/grammar/ngram/EST_PST.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/grammar/ngram/EST_PST.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -71,7 +71,8 @@ + // Base -- print from pd + EST_String s; + double freq; +- for (int i = pd.item_start(); ++ EST_Litem *i; ++ for (i = pd.item_start(); + !pd.item_end(i); + i=pd.item_next(i)) + { +@@ -98,7 +99,7 @@ + EST_String s; + double prob; + os << get_path() << " :"; +- for (int i = pd.item_start(); !pd.item_end(i) ; i=pd.item_next(i)) ++ for (EST_Litem *i = pd.item_start(); !pd.item_end(i) ; i=pd.item_next(i)) + { + pd.item_prob(i,s,prob); + os << " " << s << " " << prob; +diff -ur festival/speech_tools.old/grammar/ngram/freqsmooth.cc festival/speech_tools/grammar/ngram/freqsmooth.cc +--- festival/speech_tools.old/grammar/ngram/freqsmooth.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/grammar/ngram/freqsmooth.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -74,7 +74,8 @@ + EST_Ngrammar &ngram) + { + // Build all the backoff grammars back to uni-grams +- int i,j,k,l; ++ int i,j,l; ++ EST_Litem *k; + + for (i=0; i < ngram.order()-1; i++) + backoff_ngrams[i].init(i+1,EST_Ngrammar::dense, +@@ -110,7 +111,8 @@ + { + // For all ngrams which are too infrequent, adjust their + // frequencies based on their backoff probabilities +- int i,j; ++ int i; ++ EST_Litem *j; + double occurs; + double backoff_prob; + +diff -ur festival/speech_tools.old/grammar/ngram/ngrammar_aux.cc festival/speech_tools/grammar/ngram/ngrammar_aux.cc +--- festival/speech_tools.old/grammar/ngram/ngrammar_aux.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/grammar/ngram/ngrammar_aux.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -117,7 +117,7 @@ + + void make_f_of_f(EST_BackoffNgrammarState *s,void *params) + { +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + +@@ -138,7 +138,7 @@ + + void get_max_f(EST_BackoffNgrammarState *s,void *params) + { +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + +@@ -158,7 +158,7 @@ + + void map_f_of_f(EST_BackoffNgrammarState *s,void *params) + { +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + +@@ -184,7 +184,7 @@ + + void zero_small_f(EST_BackoffNgrammarState *s,void *params) + { +- int k; ++ EST_Litem *k; + double freq; + EST_String name; + +@@ -204,7 +204,8 @@ + + void frequency_of_frequencies(EST_DVector &ff, EST_Ngrammar &n,int this_order) + { +- int i,k,size; ++ int i,size; ++ EST_Litem *k; + double max=0.0; + + // if ff has zero size, do complete frequency of frequencies +@@ -302,8 +303,8 @@ + + void map_frequencies(EST_Ngrammar &n, const EST_DVector &map, const int this_order) + { +- int i,k; +- ++ int i; ++ EST_Litem *k; + + switch(n.representation()) + { +diff -ur festival/speech_tools.old/grammar/ngram/ngrammar_io.cc festival/speech_tools/grammar/ngram/ngrammar_io.cc +--- festival/speech_tools.old/grammar/ngram/ngrammar_io.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/grammar/ngram/ngrammar_io.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -281,7 +281,8 @@ + load_ngram_cstr_bin(const EST_String filename, EST_Ngrammar &n) + { + EST_TokenStream ts; +- int i,j,k,order; ++ int i,j,order; ++ EST_Litem *k; + int num_entries; + double approx_num_samples = 0.0; + long freq_data_start, freq_data_end; +@@ -407,7 +408,7 @@ + save_ngram_htk_ascii_sub(const EST_String &word, ostream *ost, + EST_Ngrammar &n, double floor) + { +- int k; ++ EST_Litem *k; + EST_String name; + double freq; + EST_StrVector this_ngram(2); // assumes bigram +@@ -734,7 +735,8 @@ + // awb's format + (void)trace; + ostream *ost; +- int i,k; ++ int i; ++ EST_Litem *k; + + if (filename == "-") + ost = &cout; +@@ -831,7 +833,8 @@ + if (n.representation() == EST_Ngrammar::sparse) + return misc_write_error; + +- int i,k; ++ int i; ++ EST_Litem *k; + FILE *ofd; + double lfreq = -1; + double count = -1; +diff -ur festival/speech_tools.old/grammar/wfst/wfst_train.cc festival/speech_tools/grammar/wfst/wfst_train.cc +--- festival/speech_tools.old/grammar/wfst/wfst_train.cc 2005-07-26 18:37:36.000000000 -0400 ++++ festival/speech_tools/grammar/wfst/wfst_train.cc 2006-12-11 17:36:10.000000000 -0500 +@@ -315,7 +315,8 @@ + LISP *ssplits; + gc_protect(&splits); + EST_String sname; +- int b,best_b,i; ++ int b,best_b; ++ EST_Litem *i; + int num_pdfs; + double best_score, score, sfreq; + +@@ -390,7 +391,7 @@ + // Find score of (a+b) vs (all-(a+b)) + EST_DiscreteProbDistribution ab(a); + EST_DiscreteProbDistribution all_but_ab(all); +- int i; ++ EST_Litem *i; + EST_String sname; + double sfreq, score; + for (i=b.item_start(); !b.item_end(i); +@@ -522,7 +523,7 @@ + EST_DiscreteProbDistribution pdf_split(&wfst.in_symbols()); + EST_DiscreteProbDistribution pdf_remain(&wfst.in_symbols()); + int in, tostate, id; +- int i; ++ EST_Litem *i; + double sfreq; + EST_String sname; + +diff -ur festival/speech_tools.old/include/EST_simplestats.h festival/speech_tools/include/EST_simplestats.h +--- festival/speech_tools.old/include/EST_simplestats.h 2004-04-30 12:56:49.000000000 -0400 ++++ festival/speech_tools/include/EST_simplestats.h 2006-12-11 17:36:10.000000000 -0500 +@@ -47,6 +47,8 @@ + #include "EST_TKVL.h" + #include "EST_types.h" + ++typedef size_t int_iter; ++ + /** A class for managing mapping string names to integers and back again, + mainly used for representing alphabets in n-grams and grammars etc. + +@@ -249,7 +251,8 @@ + /// Add this observation, may specify number of occurrences + void cumulate(const EST_String &s,double count=1); + /// Add this observation, i must be with in EST\_Discrete range +- void cumulate(const int i,double count=1); ++ void cumulate(EST_Litem *i,double count=1); ++ void cumulate(int i,double count=1); + /// Return the most probable member of the distribution + const EST_String &most_probable(double *prob = NULL) const; + /** Return the entropy of the distribution +@@ -265,17 +268,18 @@ + /// + double frequency(const int i) const; + /// Used for iterating through members of the distribution +- int item_start() const; ++ EST_Litem *item_start() const; + /// Used for iterating through members of the distribution +- int item_next(int idx) const; ++ EST_Litem *item_next(EST_Litem *idx) const; + /// Used for iterating through members of the distribution +- int item_end(int idx) const; ++ int item_end(EST_Litem *idx) const; ++ + /// During iteration returns name given index +- const EST_String &item_name(int idx) const; ++ const EST_String &item_name(EST_Litem *idx) const; + /// During iteration returns name and frequency given index +- void item_freq(int idx,EST_String &s,double &freq) const; ++ void item_freq(EST_Litem *idx,EST_String &s,double &freq) const; + /// During iteration returns name and probability given index +- void item_prob(int idx,EST_String &s,double &prob) const; ++ void item_prob(EST_Litem *idx,EST_String &s,double &prob) const; + + /// Returns discrete vocabulary of distribution + inline const EST_Discrete *const get_discrete() const { return discrete; }; +@@ -288,11 +292,13 @@ + accordingly. This is used when smoothing frequencies. + */ + void set_frequency(int i,double c); ++ void set_frequency(EST_Litem *i,double c); + + /// Sets the frequency of named item, without modifying {\tt num\_samples}. + void override_frequency(const EST_String &s,double c); + /// Sets the frequency of named item, without modifying {\tt num\_samples}. + void override_frequency(int i,double c); ++ void override_frequency(EST_Litem *i,double c); + + /** Sets the number of samples. Care should be taken on setting this + as it will affect how probabilities are calculated. +diff -ur festival/speech_tools.old/include/EST_Track.h festival/speech_tools/include/EST_Track.h +--- festival/speech_tools.old/include/EST_Track.h 2004-05-29 14:34:40.000000000 -0400 ++++ festival/speech_tools/include/EST_Track.h 2007-02-13 00:12:53.000000000 -0500 +@@ -61,6 +61,7 @@ + tff_htk, + tff_htk_fbank, + tff_htk_mfcc, ++ tff_htk_mfcc_e, + tff_htk_user, + tff_htk_discrete, + tff_xmg, +diff -ur festival/speech_tools.old/include/EST_TSimpleVector.h festival/speech_tools/include/EST_TSimpleVector.h +--- festival/speech_tools.old/include/EST_TSimpleVector.h 2006-07-06 08:57:24.000000000 -0400 ++++ festival/speech_tools/include/EST_TSimpleVector.h 2006-09-27 09:19:35.000000000 -0400 +@@ -60,6 +60,9 @@ + EST_TSimpleVector(const EST_TSimpleVector &v); + /// "size" constructor + EST_TSimpleVector(int n): EST_TVector(n) {}; ++ /// memory constructor ++ EST_TSimpleVector(int n, T* memory, int offset=0, ++ int free_when_destroyed=0): EST_TVector(n,memory) {}; + + /// resize vector + void resize(int n, int set=1); +diff -ur festival/speech_tools.old/include/EST_Wagon.h festival/speech_tools/include/EST_Wagon.h +--- festival/speech_tools.old/include/EST_Wagon.h 2006-08-11 18:39:02.000000000 -0400 ++++ festival/speech_tools/include/EST_Wagon.h 2006-12-02 11:44:48.000000000 -0500 +@@ -239,8 +239,7 @@ + extern EST_FMatrix wgn_DistMatrix; + extern EST_Track wgn_VertexTrack; + extern EST_Track wgn_UnitTrack; +-extern int wgn_VertexTrack_start; +-extern int wgn_VertexTrack_end; ++extern EST_Track wgn_VertexFeats; + + void wgn_load_datadescription(EST_String fname,LISP ignores); + void wgn_load_dataset(WDataSet &ds,EST_String fname); +diff -ur festival/speech_tools.old/lib/siod/siod.scm festival/speech_tools/lib/siod/siod.scm +--- festival/speech_tools.old/lib/siod/siod.scm 2003-03-31 09:28:24.000000000 -0500 ++++ festival/speech_tools/lib/siod/siod.scm 2006-12-11 17:36:10.000000000 -0500 +@@ -209,7 +209,13 @@ + (defun append2 (a b) + (if (null a) + b +- (cons (car a) (append2 (cdr a) b)))) ++ (begin ++ (let ((x (reverse a)) ++ (y b)) ++ (while x ++ (set! y (cons (car x) y)) ++ (set! x (cdr x))) ++ y)))) + + (defun rplacd (a b) + "(replacd A B) +diff -ur festival/speech_tools.old/main/wagon_main.cc festival/speech_tools/main/wagon_main.cc +--- festival/speech_tools.old/main/wagon_main.cc 2006-09-10 17:33:18.000000000 -0400 ++++ festival/speech_tools/main/wagon_main.cc 2006-12-02 14:46:44.000000000 -0500 +@@ -2,7 +2,7 @@ + /* */ + /* Centre for Speech Technology Research */ + /* University of Edinburgh, UK */ +-/* Copyright (c) 1996-2005 */ ++/* Copyright (c) 1996-2006 */ + /* All Rights Reserved. */ + /* */ + /* Permission is hereby granted, free of charge, to use and distribute */ +@@ -39,6 +39,8 @@ + /* */ + /* Added decision list support, Feb 1997 */ + /* */ ++/* Added vector support for Clustergen 2005/2006 */ ++/* */ + /*=======================================================================*/ + #include + #include +@@ -111,6 +113,54 @@ + return 0; + } + ++static int set_Vertex_Feats(EST_Track &wgn_VertexFeats, ++ EST_String &wagon_track_features) ++{ ++ int i,s=0,e; ++ EST_TokenStream ts; ++ ++ for (i=0; i\n"+ + " end (inclusive) channel for vertex indices\n"+ ++ "-track_feats \n"+ ++ " Track features to use, comma separated list\n"+ ++ " with feature numbers and/or ranges, 0 start\n"+ + "-unittrack \n"+ + " track for unit start and length in vertex track\n"+ + "-quiet No questions printed during building\n"+ +@@ -256,36 +311,53 @@ + else if (al.present("-track")) + { + wgn_VertexTrack.load(al.val("-track")); +- wgn_VertexTrack_start = 0; +- wgn_VertexTrack_end = wgn_VertexTrack.num_channels()-1; ++ wgn_VertexFeats.resize(1,wgn_VertexTrack.num_channels()); ++ for (i=0; i wgn_VertexTrack.num_channels())) ++ feats_start = al.ival("-track_start"); ++ if ((feats_start < 0) || ++ (feats_start > wgn_VertexTrack.num_channels())) + { + printf("wagon: track_start invalid: %d out of %d channels\n", +- wgn_VertexTrack_start, ++ feats_start, + wgn_VertexTrack.num_channels()); + exit(-1); + } ++ for (i=0; i wgn_VertexTrack.num_channels())) ++ feats_end = al.ival("-track_end"); ++ if ((feats_end < feats_start) || ++ (feats_end > wgn_VertexTrack.num_channels())) + { + printf("wagon: track_end invalid: %d between start %d out of %d channels\n", +- wgn_VertexTrack_end, +- wgn_VertexTrack_start, ++ feats_end, ++ feats_start, + wgn_VertexTrack.num_channels()); + exit(-1); + } ++ for (i=feats_end+1; i 0.0) ++ // printf("%d ",i); ++ // printf("\n"); + + if (al.present("-unittrack")) + { /* contains two features, a start and length. start indexes */ +diff -ur festival/speech_tools.old/siod/slib_str.cc festival/speech_tools/siod/slib_str.cc +--- festival/speech_tools.old/siod/slib_str.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/siod/slib_str.cc 2006-09-27 11:54:29.000000000 -0400 +@@ -268,7 +268,7 @@ + LISP l_matches(LISP atom, LISP regex) + { + // t if printname of atom matches regex, nil otherwise +- EST_String pname = get_c_string(atom); ++ const EST_String pname = get_c_string(atom); + + if (pname.matches(make_regex(get_c_string(regex))) == TRUE) + return truth; +diff -ur festival/speech_tools.old/speech_class/EST_TrackFile.cc festival/speech_tools/speech_class/EST_TrackFile.cc +--- festival/speech_tools.old/speech_class/EST_TrackFile.cc 2006-09-10 16:32:14.000000000 -0400 ++++ festival/speech_tools/speech_class/EST_TrackFile.cc 2007-02-13 00:12:53.000000000 -0500 +@@ -522,7 +522,6 @@ + // } + + if( ascii ){ +- + for (j = 0; j < num_channels; ++j){ + tr.a(i, j) = ts.get().Float(ok); + if (!ok) +@@ -1254,6 +1253,11 @@ + return save_htk_as(filename, tmp, HTK_MFCC); + } + ++EST_write_status EST_TrackFile::save_htk_mfcc_e(const EST_String filename, EST_Track tmp) ++{ ++ return save_htk_as(filename, tmp, HTK_MFCC | HTK_ENERGY); ++} ++ + EST_write_status EST_TrackFile::save_htk_user(const EST_String filename, EST_Track tmp) + { + return save_htk_as(filename, tmp, HTK_USER); +@@ -2097,14 +2101,14 @@ + + EST_String EST_TrackFile::options_supported(void) + { +- EST_String s("Available track file formats:\n"); ++ EST_String s("AvailablE track file formats:\n"); + + for(int n=0; n< EST_TrackFile::map.n() ; n++) + { + const char *nm = EST_TrackFile::map.name(EST_TrackFile::map.token(n)); + const char *d = EST_TrackFile::map.info(EST_TrackFile::map.token(n)).description; + +- s += EST_String::cat(" ", nm, EST_String(" ")*(12-strlen(nm)), d, "\n"); ++ s += EST_String::cat(" ", nm, EST_String(" ")*(13-strlen(nm)), d, "\n"); + } + return s; + } +@@ -2137,6 +2141,9 @@ + {tff_htk_mfcc, { "htk_mfcc" }, + {FALSE, EST_TrackFile::load_htk, EST_TrackFile::save_htk_mfcc, + "htk file (as MFCC)"}}, ++{tff_htk_mfcc_e, { "htk_mfcc_e" }, ++{FALSE, EST_TrackFile::load_htk, EST_TrackFile::save_htk_mfcc_e, ++ "htk file (as MFCC_E)"}}, + {tff_htk_user, { "htk_user" }, + {FALSE, EST_TrackFile::load_htk, EST_TrackFile::save_htk_user, + "htk file (as USER)"}}, +diff -ur festival/speech_tools.old/speech_class/EST_TrackFile.h festival/speech_tools/speech_class/EST_TrackFile.h +--- festival/speech_tools.old/speech_class/EST_TrackFile.h 2004-05-29 14:34:42.000000000 -0400 ++++ festival/speech_tools/speech_class/EST_TrackFile.h 2007-02-13 00:12:53.000000000 -0500 +@@ -111,6 +111,8 @@ + static EST_write_status save_htk_fbank(SaveTrackFileArgs); + static EST_read_status load_htk_fbank(LoadTrackFileArgs); + ++ static EST_write_status save_htk_mfcc_e(SaveTrackFileArgs); ++ + static EST_write_status save_htk_mfcc(SaveTrackFileArgs); + static EST_read_status load_htk_mfcc(LoadTrackFileArgs); + +diff -ur festival/speech_tools.old/speech_class/EST_wave_io.cc festival/speech_tools/speech_class/EST_wave_io.cc +--- festival/speech_tools.old/speech_class/EST_wave_io.cc 2006-01-12 10:37:51.000000000 -0500 ++++ festival/speech_tools/speech_class/EST_wave_io.cc 2007-02-13 00:12:53.000000000 -0500 +@@ -173,7 +173,7 @@ + + current_pos = ts.tell(); + if (ts.fread(header,NIST_HDR_SIZE,1) != 1) +- return misc_read_error; ++ return wrong_format; + + if (strncmp(header,NIST_SIG,sizeof(NIST_SIG)) != 0) + return wrong_format; +diff -ur festival/speech_tools.old/stats/EST_DProbDist.cc festival/speech_tools/stats/EST_DProbDist.cc +--- festival/speech_tools.old/stats/EST_DProbDist.cc 2004-09-30 08:53:36.000000000 -0400 ++++ festival/speech_tools/stats/EST_DProbDist.cc 2006-12-11 17:36:12.000000000 -0500 +@@ -46,6 +46,39 @@ + #include "EST_TKVL.h" + #include "EST_simplestats.h" + ++/* We share ints and pointers for two types of probability distributions */ ++/* The know discrete sets can be indexed by ints which is *much* faster */ ++/* the indices pass around a pointers but the lower part contain ints in */ ++/* the discrete case */ ++/* On 64bit architectures this is a issue so we need have some macros */ ++/* to help us here. */ ++ ++const int est_64to32(void *c) ++{ /* this returns the bottom end of the pointer as an unsigned int */ ++ /* I believe this is a safe way to do it, we check the bits in the */ ++ /* 64 bit int and multiply them out in the 32 bit one */ ++ /* there might be better ways, but I think you'd need to think about */ ++ /* byte order then */ ++ long long l; ++ int d; ++ int i,x; ++ ++ l = (long long)c; ++ ++ for (i=0,d=0,x=1; i<24; i++) ++ { ++ if (l & 1) ++ d += x; ++ l = l >> 1; ++ x += x; ++ } ++ ++ return d; ++} ++/* #define tprob_int(X) ((sizeof(void *) != 8) ? est_64to32(X) : (int)X) */ ++#define tprob_int(X) (est_64to32(X)) ++ ++ + EST_DiscreteProbDistribution::EST_DiscreteProbDistribution(const EST_Discrete *d, + const double n_samples, const EST_DVector &counts) + { +@@ -109,7 +142,13 @@ + icounts.a_no_check(i) = 0; + } + +-void EST_DiscreteProbDistribution::cumulate(const int i,double count) ++void EST_DiscreteProbDistribution::cumulate(EST_Litem *i,double count) ++{ ++ icounts[tprob_int(i)] += count; ++ num_samples += count; ++} ++ ++void EST_DiscreteProbDistribution::cumulate(int i,double count) + { + icounts[i] += count; + num_samples += count; +@@ -257,6 +296,21 @@ + + } + ++void EST_DiscreteProbDistribution::set_frequency(EST_Litem *i,double c) ++{ ++ if (type == tprob_discrete) ++ { ++ num_samples -= icounts[tprob_int(i)]; ++ num_samples += c; ++ icounts[tprob_int(i)] = c; ++ } ++ else ++ { ++ cerr << "ProbDistribution: can't access string type pd with int\n"; ++ } ++ ++} ++ + + void EST_DiscreteProbDistribution::override_frequency(const EST_String &s,double c) + { +@@ -274,6 +328,14 @@ + cerr << "ProbDistribution: can't access string type pd with int\n"; + } + ++void EST_DiscreteProbDistribution::override_frequency(EST_Litem *i,double c) ++{ ++ if (type == tprob_discrete) ++ icounts[tprob_int(i)] = c; ++ else ++ cerr << "ProbDistribution: can't access string type pd with int\n"; ++} ++ + double EST_DiscreteProbDistribution::entropy() const + { + // Returns the entropy of the current distribution +@@ -305,70 +367,70 @@ + } + + // For iterating through members of a probability distribution +-int EST_DiscreteProbDistribution::item_start(void) const ++EST_Litem *EST_DiscreteProbDistribution::item_start(void) const + { + if (type == tprob_discrete) +- return 0; ++ return NULL; + else +- return (int)scounts.list.head(); ++ return scounts.list.head(); + } + +-int EST_DiscreteProbDistribution::item_end(int idx) const ++int EST_DiscreteProbDistribution::item_end(EST_Litem *idx) const + { + if (type == tprob_discrete) +- return (idx >= icounts.length()); ++ return (tprob_int(idx) >= icounts.length()); + else +- return ((EST_Litem *)idx == 0); ++ return (idx == 0); + } + +-int EST_DiscreteProbDistribution::item_next(int idx) const ++EST_Litem *EST_DiscreteProbDistribution::item_next(EST_Litem *idx) const + { + if (type == tprob_discrete) +- return ++idx; ++ return (EST_Litem *)(((unsigned char *)idx)+1); + else +- return (int)next((EST_Litem *)idx); ++ return next(idx); + } + +-const EST_String &EST_DiscreteProbDistribution::item_name(int idx) const ++const EST_String &EST_DiscreteProbDistribution::item_name(EST_Litem *idx) const + { + if (type == tprob_discrete) +- return discrete->name(idx); ++ return discrete->name(tprob_int(idx)); + else +- return scounts.list((EST_Litem *)idx).k; ++ return scounts.list(idx).k; + } + +-void EST_DiscreteProbDistribution::item_freq(int idx,EST_String &s,double &freq) const ++void EST_DiscreteProbDistribution::item_freq(EST_Litem *idx,EST_String &s,double &freq) const + { + if (type == tprob_discrete) + { +- s = discrete->name(idx); +- freq = icounts(idx); ++ s = discrete->name(tprob_int(idx)); ++ freq = icounts(tprob_int(idx)); + } + else + { +- s = scounts.list((EST_Litem *)idx).k; +- freq = scounts.list((EST_Litem *)idx).v; ++ s = scounts.list(idx).k; ++ freq = scounts.list(idx).v; + } + } + +-void EST_DiscreteProbDistribution::item_prob(int idx,EST_String &s,double &prob) const ++void EST_DiscreteProbDistribution::item_prob(EST_Litem *idx,EST_String &s,double &prob) const + { + if (type == tprob_discrete) + { +- prob = probability(idx); +- s = discrete->name(idx); ++ prob = probability(tprob_int(idx)); ++ s = discrete->name(tprob_int(idx)); + } + else + { +- s = scounts.list((EST_Litem *)idx).k; +- prob = (double)scounts.list((EST_Litem *)idx).v/num_samples; ++ s = scounts.list(idx).k; ++ prob = (double)scounts.list(idx).v/num_samples; + } + } + + ostream & operator<<(ostream &s, const EST_DiscreteProbDistribution &pd) + { + // Output best with probabilities +- int i; ++ EST_Litem *i; + double prob; + double sum=0; + EST_String name; +diff -ur festival/speech_tools.old/stats/EST_viterbi.cc festival/speech_tools/stats/EST_viterbi.cc +--- festival/speech_tools.old/stats/EST_viterbi.cc 2006-07-07 17:26:11.000000000 -0400 ++++ festival/speech_tools/stats/EST_viterbi.cc 2006-09-27 09:19:35.000000000 -0400 +@@ -165,7 +165,7 @@ + return (a < b); + } + +-static void init_dynamic_states(EST_VTPoint *p, EST_VTCandidate *cands) ++static int init_dynamic_states(EST_VTPoint *p, EST_VTCandidate *cands) + { + // In a special (hmm maybe not so special), the number of "states" + // is the number of candidates +@@ -175,6 +175,8 @@ + for (i=0, c=cands; c != 0; c=c->next,i++) + c->pos = i; + init_paths_array(p,i); ++ ++ return i; + } + + void EST_Viterbi_Decoder::set_pruning_parameters(float beam, float +diff -ur festival/speech_tools.old/stats/wagon/wagon_aux.cc festival/speech_tools/stats/wagon/wagon_aux.cc +--- festival/speech_tools.old/stats/wagon/wagon_aux.cc 2006-08-20 13:02:39.000000000 -0400 ++++ festival/speech_tools/stats/wagon/wagon_aux.cc 2006-12-12 10:45:19.000000000 -0500 +@@ -422,16 +422,19 @@ + + #if 1 + /* simple distance */ +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) ++ for (j=0; j 0.0) + { +- i = members.item(pp); +- b += wgn_VertexTrack.a(i,j); ++ b.reset(); ++ for (pp=members.head(); pp != 0; pp=next(pp)) ++ { ++ i = members.item(pp); ++ b += wgn_VertexTrack.a(i,j); ++ } ++ a += b.stddev(); ++ count = b.samples(); + } +- a += b.stddev(); +- count = b.samples(); + } + #endif + +@@ -440,26 +443,37 @@ + /* worse in listening experiments */ + EST_SuffStats **cs; + int mmm; +- cs = new EST_SuffStats *[wgn_VertexTrack_end+1]; +- for (j=0; j<=wgn_VertexTrack_end; j++) +- cs[j] = new EST_SuffStats[wgn_VertexTrack_end+1]; ++ cs = new EST_SuffStats *[wgn_VertexTrack.num_channels()+1]; ++ for (j=0; j<=wgn_VertexTrack.num_channels(); j++) ++ cs[j] = new EST_SuffStats[wgn_VertexTrack.num_channels()+1]; + /* Find means for diagonal */ +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) ++ for (j=0; j 0.0) ++ { + for (pp=members.head(); pp != 0; pp=next(pp)) ++ cs[j][j] += wgn_VertexTrack.a(members.item(pp),j); ++ } ++ } ++ for (j=0; j 0.0) + { +- mmm = members.item(pp); +- cs[i][j] += (wgn_VertexTrack.a(mmm,i)-cs[j][j].mean())* +- (wgn_VertexTrack.a(mmm,j)-cs[j][j].mean()); +- } +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- for (i=j+1; i 0.0) ++ a += cs[i][j].stddev(); ++ } + count = cs[0][0].samples(); + #endif + +@@ -476,11 +490,12 @@ + for (qq=next(pp); qq != 0; qq=next(qq)) + { + y = members.item(qq); +- for (q=0.0,j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- { +- d = wgn_VertexTrack(x,j)-wgn_VertexTrack(y,j); +- q += d*d; +- } ++ for (q=0.0,j=0; j 0.0) ++ { ++ d = wgn_VertexTrack(x,j)-wgn_VertexTrack(y,j); ++ q += d*d; ++ } + a += sqrt(q); + } + +@@ -562,7 +577,7 @@ + + /* a list of SuffStats on for each point in the trajectory */ + trajectory = new EST_SuffStats *[l]; +- width = wgn_VertexTrack_end+1; ++ width = wgn_VertexTrack.num_channels()+1; + for (j=0; j 0.0) ++ trajectory[ti][j] += wgn_VertexTrack.a(s+ni,j); ++ } + } + } + + /* find sum of sum of stddev for all coefs of all traj points */ + stdss.reset(); + for (ti=0; ti 0.0) ++ stdss += trajectory[ti][j].stddev(); ++ } + + // This is sum of all stddev * samples + score = stdss.mean() * members.length(); +@@ -597,7 +618,7 @@ + /* a list of SuffStats on for each point in the trajectory */ + trajectory = new EST_SuffStats *[l]; + for (j=0; j 0 && ti 0.0) ++ trajectory[ti][j] += wgn_VertexTrack.a(ni,j); + } + ti = l1; /* do it explicitly in case s1l < 1 */ +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- trajectory[ti][j] += -1; ++ for (j=0; j 0.0) ++ trajectory[ti][j] += -1; + /* Second half */ + s += s1l+1; + for (ti++,n=0.0; s2l > 0 && ti 0.0) ++ trajectory[ti][j] += wgn_VertexTrack.a(ni,j); ++ } ++ for (j=0; j 0.0) ++ trajectory[ti][j] += -2; + } + + /* find sum of sum of stddev for all coefs of all traj points */ +@@ -640,12 +665,14 @@ + stdss.reset(); + m = 1.0/(float)l1; + for (w=0.0,ti=0; ti 0.0) + stdss += trajectory[ti][j].stddev() * w; + m = 1.0/(float)l2; + for (w=1.0,ti++; ti 0.0) ++ stdss += trajectory[ti][j].stddev() * w; + + // This is sum of all stddev * samples + score = stdss.mean() * members.length(); +@@ -824,25 +851,27 @@ + int bestp = 0; + EST_SuffStats *cs; + +- cs = new EST_SuffStats [wgn_VertexTrack_end+1]; ++ cs = new EST_SuffStats [wgn_VertexTrack.num_channels()+1]; + +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- { +- cs[j].reset(); +- for (p=imp.members.head(); p != 0; p=next(p)) ++ for (j=0; j 0.0) + { +- cs[j] += wgn_VertexTrack.a(imp.members.item(p),j); ++ cs[j].reset(); ++ for (p=imp.members.head(); p != 0; p=next(p)) ++ { ++ cs[j] += wgn_VertexTrack.a(imp.members.item(p),j); ++ } + } +- } + + for (p=imp.members.head(); p != 0; p=next(p)) + { +- for (x=0,j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- { +- d = (wgn_VertexTrack.a(imp.members.item(p),j)-cs[j].mean()) +- /* / b.stddev() */ ; +- x += d*d; +- } ++ for (x=0.0,j=0; j 0.0) ++ { ++ d = (wgn_VertexTrack.a(imp.members.item(p),j)-cs[j].mean()) ++ /* / cs[j].stddev() */ ; ++ x += d*d; ++ } + if (x < best) + { + bestp = imp.members.item(p); +@@ -853,7 +882,12 @@ + { + s << "( "; + s << wgn_VertexTrack.a(bestp,j); +- s << " 0 "; // fake stddev ++ // s << " 0 "; // fake stddev ++ s << " "; ++ if (finite(cs[j].stddev())) ++ s << cs[j].stddev(); ++ else ++ s << "0"; + s << " ) "; + if (j+1get_int_val(wgn_predictee); +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- { +- b.reset(); +- for (pp=leaf->get_impurity().members.head(); pp != 0; pp=next(pp)) ++ for (j=0; j 0.0) + { +- i = leaf->get_impurity().members.item(pp); +- b += wgn_VertexTrack.a(i,j); ++ b.reset(); ++ for (pp=leaf->get_impurity().members.head(); pp != 0; pp=next(pp)) ++ { ++ i = leaf->get_impurity().members.item(pp); ++ b += wgn_VertexTrack.a(i,j); ++ } ++ predict = b.mean(); ++ actual = wgn_VertexTrack.a(pos,j); ++ if (wgn_count_field == -1) ++ count = 1.0; ++ else ++ count = dataset(p)->get_flt_val(wgn_count_field); ++ x.cumulate(predict,count); ++ y.cumulate(actual,count); ++ /* Normalized the error by the standard deviation */ ++ if (b.stddev() == 0) ++ error = predict-actual; ++ else ++ error = (predict-actual)/b.stddev(); ++ error = predict-actual; /* awb_debug */ ++ se.cumulate((error*error),count); ++ e.cumulate(fabs(error),count); ++ xx.cumulate(predict*predict,count); ++ yy.cumulate(actual*actual,count); ++ xy.cumulate(predict*actual,count); + } +- predict = b.mean(); +- actual = wgn_VertexTrack.a(pos,j); +- if (wgn_count_field == -1) +- count = 1.0; +- else +- count = dataset(p)->get_flt_val(wgn_count_field); +- x.cumulate(predict,count); +- y.cumulate(actual,count); +- /* Normalized the error by the standard deviation */ +- if (b.stddev() == 0) +- error = predict-actual; +- else +- error = (predict-actual)/b.stddev(); +- error = predict-actual; /* awb_debug */ +- se.cumulate((error*error),count); +- e.cumulate(fabs(error),count); +- xx.cumulate(predict*predict,count); +- yy.cumulate(actual*actual,count); +- xy.cumulate(predict*actual,count); +- } + } + + // Pearson's product moment correlation coefficient +@@ -437,34 +437,35 @@ + { + leaf = tree.predict_node((*dataset(p))); + pos = dataset(p)->get_int_val(wgn_predictee); +- for (j=wgn_VertexTrack_start; j<=wgn_VertexTrack_end; j++) +- { +- b.reset(); +- for (pp=leaf->get_impurity().members.head(); pp != 0; pp=next(pp)) ++ for (j=0; j 0.0) + { +- i = leaf->get_impurity().members.item(pp); +- b += wgn_VertexTrack.a(i,j); ++ b.reset(); ++ for (pp=leaf->get_impurity().members.head(); pp != 0; pp=next(pp)) ++ { ++ i = leaf->get_impurity().members.item(pp); ++ b += wgn_VertexTrack.a(i,j); ++ } ++ predict = b.mean(); ++ actual = wgn_VertexTrack.a(pos,j); ++ if (wgn_count_field == -1) ++ count = 1.0; ++ else ++ count = dataset(p)->get_flt_val(wgn_count_field); ++ x.cumulate(predict,count); ++ y.cumulate(actual,count); ++ /* Normalized the error by the standard deviation */ ++ if (b.stddev() == 0) ++ error = predict-actual; ++ else ++ error = (predict-actual)/b.stddev(); ++ error = predict-actual; /* awb_debug */ ++ se.cumulate((error*error),count); ++ e.cumulate(fabs(error),count); ++ xx.cumulate(predict*predict,count); ++ yy.cumulate(actual*actual,count); ++ xy.cumulate(predict*actual,count); + } +- predict = b.mean(); +- actual = wgn_VertexTrack.a(pos,j); +- if (wgn_count_field == -1) +- count = 1.0; +- else +- count = dataset(p)->get_flt_val(wgn_count_field); +- x.cumulate(predict,count); +- y.cumulate(actual,count); +- /* Normalized the error by the standard deviation */ +- if (b.stddev() == 0) +- error = predict-actual; +- else +- error = (predict-actual)/b.stddev(); +- error = predict-actual; /* awb_debug */ +- se.cumulate((error*error),count); +- e.cumulate(fabs(error),count); +- xx.cumulate(predict*predict,count); +- yy.cumulate(actual*actual,count); +- xy.cumulate(predict*actual,count); +- } + } + + // Pearson's product moment correlation coefficient +diff -ur festival/speech_tools.old/.time-stamp festival/speech_tools/.time-stamp +--- festival/speech_tools.old/.time-stamp 2006-09-27 10:59:11.000000000 -0400 ++++ festival/speech_tools/.time-stamp 2007-03-14 11:18:07.000000000 -0400 +@@ -1,2 +1,2 @@ + speech_tools 1.2.96 +-Wed Sep 27 10:59:11 EDT 2006 ++Wed Mar 14 11:18:07 EDT 2007 diff --git a/festival-1.96-speechtools-linklibswithotherlibs.patch b/festival-1.96-speechtools-linklibswithotherlibs.patch new file mode 100644 index 0000000..69a30f3 --- /dev/null +++ b/festival-1.96-speechtools-linklibswithotherlibs.patch @@ -0,0 +1,14 @@ +--- festival/speech_tools/config/project.mak.orig 2007-03-13 15:27:53.000000000 -0400 ++++ festival/speech_tools/config/project.mak 2007-03-13 15:29:12.000000000 -0400 +@@ -99,8 +99,9 @@ + PROJECT_LIBRARY_DIR_eststring = $(TOP)/lib + PROJECT_LIBRARY_DIR_estjava = $(TOP)/lib + +-PROJECT_LIBRARY_USES_estbase = eststring +- ++PROJECT_LIBRARY_USES_estbase = eststring m ++PROJECT_LIBRARY_USES_estools = estbase m ncurses ++PROJECT_LIBRARY_USES_eststring = m + PROJECT_LIBRARY_USES_estjava = estbase eststring + + PROJECT_LIBRARY_VERSION_estools = $(PROJECT_VERSION).1 diff --git a/festival-1.96-speechtools-ohjeezcxxisnotgcc.patch b/festival-1.96-speechtools-ohjeezcxxisnotgcc.patch new file mode 100644 index 0000000..e3d1627 --- /dev/null +++ b/festival-1.96-speechtools-ohjeezcxxisnotgcc.patch @@ -0,0 +1,13 @@ +--- festival/speech_tools/config/compilers/gcc_defaults.mak.orig 2007-03-13 16:28:39.000000000 -0400 ++++ festival/speech_tools/config/compilers/gcc_defaults.mak 2007-03-13 16:28:59.000000000 -0400 +@@ -39,10 +39,7 @@ + ########################################################################### + + CC=gcc +-CXX=gcc +-ifeq ($(OSTYPE),Darwin) + CXX=g++ +-endif + + COMPILER_DESC=FSF gcc + COMPILER_VERSION_COMMAND=$(CXX) -v 2>&1 | tail -1 | sed -e 's/^....//' diff --git a/festival-1.96-speechtools-rateconvtrivialbug.patch b/festival-1.96-speechtools-rateconvtrivialbug.patch new file mode 100644 index 0000000..91d08e0 --- /dev/null +++ b/festival-1.96-speechtools-rateconvtrivialbug.patch @@ -0,0 +1,12 @@ +--- festival/speech_tools/base_class/rateconv.cc.orig 2007-03-13 15:13:21.000000000 -0400 ++++ festival/speech_tools/base_class/rateconv.cc 2007-03-13 15:15:15.000000000 -0400 +@@ -384,7 +384,8 @@ + } + fir_stereo(inp + inoffset + inbaseidx, + coep + cycctr * firlen, firlen, +- outp + outidx++, outp + outidx++); ++ outp + outidx, outp + outidx + 1); ++ outidx += 2; + cycctr++; + if (!(cycctr %= up)) + inbaseidx += 2*down; diff --git a/festival-1.96-speechtools-shared-build.patch b/festival-1.96-speechtools-shared-build.patch new file mode 100644 index 0000000..b1ea85e --- /dev/null +++ b/festival-1.96-speechtools-shared-build.patch @@ -0,0 +1,11 @@ +--- festival-1.96/speech_tools/config/config.in.nonshared 2007-03-09 15:43:02.000000000 -0500 ++++ festival-1.96/speech_tools/config/config.in 2007-03-09 15:43:26.000000000 -0500 +@@ -61,7 +61,7 @@ + # VERBOSE=1 + #DEBUG=1 + # PROFILE=gprof +-#SHARED=2 ++SHARED=2 + + ## Directory specific selections which override the above + diff --git a/festival-gcc7.patch b/festival-gcc7.patch new file mode 100644 index 0000000..0c16e46 --- /dev/null +++ b/festival-gcc7.patch @@ -0,0 +1,21 @@ +diff -up festival/speech_tools/siod/siod.cc.me festival/speech_tools/siod/siod.cc +--- festival/speech_tools/siod/siod.cc.me 2018-01-31 11:15:01.148463177 +0100 ++++ festival/speech_tools/siod/siod.cc 2018-01-31 11:25:15.737355203 +0100 +@@ -459,7 +459,7 @@ char **siod_variable_generator(char *tex + matches = walloc(char *,siod_llength(lmatches)+1); + for (l=lmatches,i=0; l; l=cdr(l),i++) + matches[i] = wstrdup(PNAME(car(l))); +- matches[i] = '\0'; ++ matches[i] = NULL; + + return matches; + } +@@ -498,7 +498,7 @@ char **siod_command_generator (char *tex + matches = walloc(char *,siod_llength(lmatches)+1); + for (l=lmatches,i=0; l; l=cdr(l),i++) + matches[i] = wstrdup(PNAME(car(l))); +- matches[i] = '\0'; ++ matches[i] = NULL; + + return matches; + } diff --git a/festival-spanish-voices_1.0.0.orig.tar.gz b/festival-spanish-voices_1.0.0.orig.tar.gz new file mode 100644 index 0000000..21fda49 Binary files /dev/null and b/festival-spanish-voices_1.0.0.orig.tar.gz differ diff --git a/festival-speech-tools-pulse.patch b/festival-speech-tools-pulse.patch new file mode 100644 index 0000000..49894b3 --- /dev/null +++ b/festival-speech-tools-pulse.patch @@ -0,0 +1,319 @@ +diff -up festival/lib/init.scm.pulse festival/lib/init.scm +--- festival/lib/init.scm.pulse 2009-09-29 02:05:53.156687751 -0400 ++++ festival/lib/init.scm 2009-09-29 02:14:18.911692694 -0400 +@@ -77,6 +77,9 @@ + ;;; Some default parameters + (Parameter.def 'Wavefiletype 'riff) + ++;;; default to pulseaudio ++(Parameter.def 'Audio_Method 'pulseaudio) ++ + ;;; Set default audio method + (cond + ((member 'nas *modules*) +diff -up festival/speech_tools/audio/audioP.h.pulse festival/speech_tools/audio/audioP.h +--- festival/speech_tools/audio/audioP.h.pulse 2004-07-15 19:03:04.000000000 -0400 ++++ festival/speech_tools/audio/audioP.h 2009-09-29 02:05:53.353695375 -0400 +@@ -40,6 +40,7 @@ + #define __AUDIOP_H__ + + int play_nas_wave(EST_Wave &inwave, EST_Option &al); ++int play_pulse_wave(EST_Wave &inwave, EST_Option &al); + int play_esd_wave(EST_Wave &inwave, EST_Option &al); + int play_sun16_wave(EST_Wave &inwave, EST_Option &al); + int play_voxware_wave(EST_Wave &inwave, EST_Option &al); +@@ -49,6 +50,7 @@ int play_irix_wave(EST_Wave &inwave, EST + int play_macosx_wave(EST_Wave &inwave, EST_Option &al); + + int record_nas_wave(EST_Wave &inwave, EST_Option &al); ++int record_pulse_wave(EST_Wave &inwave, EST_Option &al); + int record_esd_wave(EST_Wave &inwave, EST_Option &al); + int record_sun16_wave(EST_Wave &inwave, EST_Option &al); + int record_voxware_wave(EST_Wave &inwave, EST_Option &al); +diff -up festival/speech_tools/audio/gen_audio.cc.pulse festival/speech_tools/audio/gen_audio.cc +--- festival/speech_tools/audio/gen_audio.cc.pulse 2004-09-30 08:53:35.000000000 -0400 ++++ festival/speech_tools/audio/gen_audio.cc 2009-09-29 02:05:53.354687890 -0400 +@@ -89,6 +89,8 @@ int play_wave(EST_Wave &inwave, EST_Opti + { + if (nas_supported) + protocol = "netaudio"; // the default protocol ++ else if (pulse_supported) ++ protocol = "pulseaudio"; + else if (esd_supported) + protocol = "esdaudio"; + else if (sun16_supported) +@@ -111,6 +113,8 @@ int play_wave(EST_Wave &inwave, EST_Opti + + if (upcase(protocol) == "NETAUDIO") + return play_nas_wave(*toplay,al); ++ else if (upcase(protocol) == "PULSEAUDIO") ++ return play_pulse_wave(*toplay,al); + else if (upcase(protocol) == "ESDAUDIO") + return play_esd_wave(*toplay,al); + else if (upcase(protocol) == "SUNAUDIO") +@@ -246,6 +250,8 @@ EST_String options_supported_audio(void) + audios += " netaudio"; + else if (esd_supported) + audios += " esdaudio"; ++ if (pulse_supported) ++ audios += " pulseaudio"; + if (sun16_supported) + audios += " sun16audio"; + if (freebsd16_supported) +@@ -286,8 +292,10 @@ int record_wave(EST_Wave &wave, EST_Opti + { + if (nas_supported) + protocol = "netaudio"; // the default protocol ++ else if (pulse_supported) ++ protocol = "pulseaudio"; + else if (esd_supported) +- protocol = "esdaudio"; // the default protocol ++ protocol = "esdaudio"; + else if (sun16_supported) + protocol = "sun16audio"; + else if (freebsd16_supported) +@@ -306,6 +314,8 @@ int record_wave(EST_Wave &wave, EST_Opti + + if (upcase(protocol) == "NETAUDIO") + return record_nas_wave(wave,al); ++ else if (upcase(protocol) == "PULSEAUDIO") ++ return record_pulse_wave(wave,al); + else if (upcase(protocol) == "ESDAUDIO") + return record_esd_wave(wave,al); + else if (upcase(protocol) == "SUN16AUDIO") +diff -up festival/speech_tools/audio/Makefile.pulse festival/speech_tools/audio/Makefile +--- festival/speech_tools/audio/Makefile.pulse 2004-07-15 19:03:04.000000000 -0400 ++++ festival/speech_tools/audio/Makefile 2009-09-29 02:05:53.355692417 -0400 +@@ -44,7 +44,7 @@ LOCAL_DEFAULT_LIBRARY = estbase + H = audioP.h + CPPSRCS = gen_audio.cc nas.cc esd.cc sun16audio.cc voxware.cc \ + mplayer.cc win32audio.cc irixaudio.cc os2audio.cc \ +- macosxaudio.cc ++ macosxaudio.cc pulseaudio.cc + + SRCS = $(CPPSRCS) + OBJS = $(CPPSRCS:.cc=.o) +diff -up /dev/null festival/speech_tools/audio/pulseaudio.cc +--- /dev/null 2009-09-29 00:23:01.118964058 -0400 ++++ festival/speech_tools/audio/pulseaudio.cc 2009-09-29 02:05:53.357688202 -0400 +@@ -0,0 +1,134 @@ ++/*************************************************************************/ ++/* */ ++/* Centre for Speech Technology Research */ ++/* University of Edinburgh, UK */ ++/* Copyright (c) 1997,1998 */ ++/* Red Hat, Inc. */ ++/* Copyright (c) 2008 */ ++/* All Rights Reserved. */ ++/* */ ++/* Permission is hereby granted, free of charge, to use and distribute */ ++/* this software and its documentation without restriction, including */ ++/* without limitation the rights to use, copy, modify, merge, publish, */ ++/* distribute, sublicense, and/or sell copies of this work, and to */ ++/* permit persons to whom this work is furnished to do so, subject to */ ++/* the following conditions: */ ++/* 1. The code must retain the above copyright notice, this list of */ ++/* conditions and the following disclaimer. */ ++/* 2. Any modifications must be clearly marked as such. */ ++/* 3. Original authors' names are not deleted. */ ++/* 4. The authors' names are not used to endorse or promote products */ ++/* derived from this software without specific prior written */ ++/* permission. */ ++/* */ ++/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */ ++/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ ++/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ ++/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */ ++/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ ++/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ ++/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ ++/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ ++/* THIS SOFTWARE. */ ++/* */ ++/*************************************************************************/ ++/* Author : Michal Schmidt */ ++/* Date : November 2008 */ ++/*-----------------------------------------------------------------------*/ ++/* Optional support for PulseAudio */ ++/*=======================================================================*/ ++ ++#include "EST_Wave.h" ++#include "EST_Option.h" ++#include "audioP.h" ++ ++#ifdef SUPPORT_PULSE ++ ++#include ++#include ++ ++int pulse_supported = TRUE; ++const static char *err_prefix = "Pulseaudio: "; ++ ++static int transfer_pulse_wave(EST_Wave &inwave, EST_Option &al, int record) ++{ ++ short *waveform; ++ int num_samples; ++ int err, pa_ret; ++ int ret = -1; ++ pa_simple *s = NULL; ++ pa_sample_spec ss; ++ ++ ss.format = PA_SAMPLE_S16NE; ++ ss.channels = 1; ++ ss.rate = inwave.sample_rate(); ++ ++ waveform = inwave.values().memory(); ++ num_samples = inwave.num_samples(); ++ ++ s = pa_simple_new(NULL, // Use the default server. ++ "Festival", // Our application's name. ++ record ? PA_STREAM_RECORD : PA_STREAM_PLAYBACK, ++ NULL, // Use the default device. ++ record ? "Record" : "Speech", // Description of our stream. ++ &ss, // Our sample format. ++ NULL, // Use default channel map ++ NULL, // Use default buffering attributes. ++ &err); ++ ++ if (!s) { ++ cerr << err_prefix << pa_strerror(err) << endl; ++ goto finish; ++ } ++ ++ pa_ret = record ? ++ pa_simple_read (s, waveform, num_samples*sizeof(short), &err) : ++ pa_simple_write(s, waveform, num_samples*sizeof(short), &err); ++ ++ if (pa_ret < 0) { ++ cerr << err_prefix << pa_strerror(err) << endl; ++ goto finish; ++ } ++ ++ if (!record && pa_simple_drain(s, &err) < 0) { ++ cerr << err_prefix << pa_strerror(err) << endl; ++ goto finish; ++ } ++ ++ ret = 1; ++finish: ++ if (s) ++ pa_simple_free(s); ++ return ret; ++} ++ ++int play_pulse_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ return transfer_pulse_wave(inwave, al, 0); ++} ++ ++int record_pulse_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ return transfer_pulse_wave(inwave, al, 1); ++} ++ ++#else ++int pulse_supported = FALSE; ++ ++int play_pulse_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ (void)inwave; ++ (void)al; ++ cerr << "Audio: pulse not compiled in this version" << endl; ++ return -1; ++} ++ ++int record_pulse_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ (void)inwave; ++ (void)al; ++ cerr << "Audio: pulse not compiled in this version" << endl; ++ return -1; ++} ++ ++#endif +diff -up festival/speech_tools/config/config.in.pulse festival/speech_tools/config/config.in +--- festival/speech_tools/config/config.in.pulse 2009-09-29 02:05:53.045693311 -0400 ++++ festival/speech_tools/config/config.in 2009-09-29 02:05:53.358687421 -0400 +@@ -79,6 +79,9 @@ OPTIMISE_sigpr = 3 + ## NCD's network audio system, This is recommended. + # INCLUDE_MODULES += NAS_AUDIO + ++## PulseAudio sound server ++INCLUDE_MODULES += PULSE_AUDIO ++ + ## Elightenment Sound Demon, for KDE etc. + # INCLUDE_MODULES += ESD_AUDIO + +diff -up festival/speech_tools/config/modules/Makefile.pulse festival/speech_tools/config/modules/Makefile +--- festival/speech_tools/config/modules/Makefile.pulse 2004-07-15 19:03:05.000000000 -0400 ++++ festival/speech_tools/config/modules/Makefile 2009-09-29 02:05:53.359687618 -0400 +@@ -41,7 +41,8 @@ RULESETS = efence.mak dmalloc.mak debugg + psola_tm.mak editline.mak tcl.mak \ + freebsd16_audio.mak irix_audio.mak linux16_audio.mak \ + sun16_audio.mak win32_audio.mak macosx_audio.mak \ +- mplayer_audio.mak nas_audio.mak esd_audio.mak ++ mplayer_audio.mak nas_audio.mak esd_audio.mak \ ++ pulse_audio.mak + + FILES = Makefile descriptions $(RULESETS) + +diff -up /dev/null festival/speech_tools/config/modules/pulse_audio.mak +--- /dev/null 2009-09-29 00:23:01.118964058 -0400 ++++ festival/speech_tools/config/modules/pulse_audio.mak 2009-09-29 02:05:53.361688082 -0400 +@@ -0,0 +1,9 @@ ++## Definitions for PulseAudio ++ ++INCLUDE_PULSE_AUDIO=1 ++ ++MOD_DESC_PULSE_AUDIO=PulseAudio support ++ ++AUDIO_DEFINES += -DSUPPORT_PULSE ++AUDIO_INCLUDES += -I$(PULSE_INCLUDE) ++MODULE_LIBS += -lpulse-simple +diff -up festival/speech_tools/config/project.mak.pulse festival/speech_tools/config/project.mak +--- festival/speech_tools/config/project.mak.pulse 2009-09-29 02:05:53.104720729 -0400 ++++ festival/speech_tools/config/project.mak 2009-09-29 02:05:53.362687372 -0400 +@@ -60,7 +60,7 @@ MODULE_DIRECTORY = $(TOP) + # List of all known modules + + DISTRIBUTED_MODULES = \ +- NAS_AUDIO ESD_AUDIO NATIVE_AUDIO MPLAYER_AUDIO \ ++ NAS_AUDIO PULSE_AUDIO ESD_AUDIO NATIVE_AUDIO MPLAYER_AUDIO \ + EDITLINE \ + SIOD WAGON SCFG WFST OLS \ + JAVA JAVA_CPP JAVA_MEDIA \ +@@ -109,6 +109,7 @@ PROJECT_LIBRARY_VERSION_estbase = $(PROJ + PROJECT_LIBRARY_VERSION_eststring = 1.2 + PROJECT_LIBRARY_VERSION_estjava = $(PROJECT_VERSION).1 + ++PROJECT_LIBRARY_NEEDS_SYSLIBS_estbase=1 + PROJECT_LIBRARY_NEEDS_SYSLIBS_estjava=1 + + PROJECT_DEFAULT_LIBRARY = estools +diff -up festival/speech_tools/config/systems/default.mak.pulse festival/speech_tools/config/systems/default.mak +--- festival/speech_tools/config/systems/default.mak.pulse 2005-07-17 09:06:49.000000000 -0400 ++++ festival/speech_tools/config/systems/default.mak 2009-09-29 02:05:53.364688115 -0400 +@@ -61,6 +61,12 @@ NAS_INCLUDE = /usr/X11R6/include + NAS_LIB = /usr/X11R6/lib + + ########################################################################### ++## Where to find PulseAudio ++ ++PULSE_INCLUDE = /usr/include ++PULSE_LIB = /usr/lib ++ ++########################################################################### + ## Where to find Enlightenment Speech Demon + + ESD_INCLUDE = /usr/local/include +diff -up festival/speech_tools/include/EST_audio.h.pulse festival/speech_tools/include/EST_audio.h +--- festival/speech_tools/include/EST_audio.h.pulse 2004-07-15 19:03:05.000000000 -0400 ++++ festival/speech_tools/include/EST_audio.h 2009-09-29 02:05:53.365689290 -0400 +@@ -43,6 +43,7 @@ + #include "EST_Option.h" + + extern int nas_supported; ++extern int pulse_supported; + extern int esd_supported; + extern int sun16_supported; + extern int freebsd16_supported; diff --git a/festival.gcc47.patch b/festival.gcc47.patch new file mode 100644 index 0000000..2fee844 --- /dev/null +++ b/festival.gcc47.patch @@ -0,0 +1,92 @@ +--- speech_tools/include/EST_TIterator.h.orig 2012-02-25 12:09:30.926212818 -0600 ++++ speech_tools/include/EST_TIterator.h 2012-02-25 12:10:32.981099676 -0600 +@@ -101,7 +101,7 @@ + + /// Create an iterator ready to run over the given container. + EST_TIterator(const Container &over) +- { begin(over); } ++ { this->begin(over); } + + /// Copy an iterator by assignment + Iter &operator = (const Iter &orig) +@@ -109,7 +109,7 @@ + + /// Assigning a container to an iterator sets it ready to start. + Iter &operator = (const Container &over) +- { begin(over); return *this;} ++ { this->begin(over); return *this;} + + /// Set the iterator ready to run over this container. + void begin(const Container &over) +@@ -209,7 +209,7 @@ + + /// Create an iterator ready to run over the given container. + EST_TStructIterator(const Container &over) +- { begin(over); } ++ { this->begin(over); } + + const Entry *operator ->() const + {return &this->current();} +@@ -239,7 +239,7 @@ + + /// Create an iterator ready to run over the given container. + EST_TRwIterator(Container &over) +- { begin(over); } ++ { this->begin(over); } + + /// Set the iterator ready to run over this container. + void begin(Container &over) +@@ -289,7 +289,7 @@ + + /// Create an iterator ready to run over the given container. + EST_TRwStructIterator(Container &over) +- { begin(over); } ++ { this->begin(over); } + + Entry *operator ->() const + {return &this->current();} +--- speech_tools/include/EST_TNamedEnum.h.orig 2012-02-25 12:26:51.432455812 -0600 ++++ speech_tools/include/EST_TNamedEnum.h 2012-02-25 12:27:07.125450312 -0600 +@@ -130,7 +130,7 @@ + {this->initialise((const void *)defs); }; + EST_TNamedEnumI(EST_TValuedEnumDefinition defs[], ENUM (*conv)(const char *)) + {this->initialise((const void *)defs, conv); }; +- const char *name(ENUM tok, int n=0) const {return value(tok,n); }; ++ const char *name(ENUM tok, int n=0) const {return this->value(tok,n); }; + + }; + +--- speech_tools/base_class/EST_TSimpleMatrix.cc.orig 2012-02-25 12:34:37.095639209 -0600 ++++ speech_tools/base_class/EST_TSimpleMatrix.cc 2012-02-25 12:35:33.952865468 -0600 +@@ -97,7 +97,7 @@ + { + int copy_r = Lof(this->num_rows(), new_rows); + +- just_resize(new_rows, new_cols, &old_vals); ++ this->just_resize(new_rows, new_cols, &old_vals); + + memcpy((void *)this->p_memory, + (const void *)old_vals, +@@ -126,9 +126,9 @@ + int copy_r = Lof(this->num_rows(), new_rows); + int copy_c = Lof(this->num_columns(), new_cols); + +- just_resize(new_rows, new_cols, &old_vals); ++ this->just_resize(new_rows, new_cols, &old_vals); + +- set_values(old_vals, ++ this->set_values(old_vals, + old_row_step, old_column_step, + 0, copy_r, + 0, copy_c); +--- speech_tools/base_class/EST_TSimpleVector.cc.orig 2012-02-25 12:38:16.647543126 -0600 ++++ speech_tools/base_class/EST_TSimpleVector.cc 2012-02-25 12:38:41.571710862 -0600 +@@ -70,7 +70,7 @@ + T *old_vals =NULL; + int old_offset = this->p_offset; + +- just_resize(newn, &old_vals); ++ this->just_resize(newn, &old_vals); + + if (set && old_vals) + { diff --git a/festival.spec b/festival.spec new file mode 100644 index 0000000..19c05e6 --- /dev/null +++ b/festival.spec @@ -0,0 +1,117 @@ +Name: festival +Version: 1.96 +Release: 40 +Summary: Festival Speech Synthesis System +License: MIT and GPL+ and TCL +URL: http://www.cstr.ed.ac.uk/projects/festival/ + +%define docversion 1.4.2 +%define speechtoolsversion 1.2.96 +%define baseURL http://festvox.org/packed/festival/%{version} +%define diphoneversion 0.19990610 +%define nitechbaseURL http://hts.sp.nitech.ac.jp/?plugin=attach&refer=Download&openfile= +%define nitechhtsversion 0.20061229 +%define hispavocesversion 1.0.0 + +Source0: %{baseURL}/festival-%{version}-beta.tar.gz +Source1: %{baseURL}/speech_tools-%{speechtoolsversion}-beta.tar.gz +Source2: http://festvox.org/packed/festival/%{docversion}/festdoc-%{docversion}.tar.gz +Source50: festival-1.96-0.7-fedora-siteinit.scm +Source51: festival-1.96-0.7-fedora-sitevars.scm +Source100: %{baseURL}/festlex_POSLEX.tar.gz +Source101: %{baseURL}/festlex_CMU.tar.gz +Source200: %{baseURL}/festvox_kallpc16k.tar.gz +Source202: %{baseURL}/festvox_kedlpc16k.tar.gz +Source220: %{nitechbaseURL}/festvox_nitech_us_awb_arctic_hts.tar.bz2 +Source221: %{nitechbaseURL}/festvox_nitech_us_bdl_arctic_hts.tar.bz2 +Source222: %{nitechbaseURL}/festvox_nitech_us_clb_arctic_hts.tar.bz2 +Source223: %{nitechbaseURL}/festvox_nitech_us_jmk_arctic_hts.tar.bz2 +Source224: %{nitechbaseURL}/festvox_nitech_us_rms_arctic_hts.tar.bz2 +Source225: %{nitechbaseURL}/festvox_nitech_us_slt_arctic_hts.tar.bz2 +Source300: http://v4.guadalinex.org/guadalinex-toro/pool-test/main/f/festival-spanish-voices/festival-spanish-voices_1.0.0.orig.tar.gz +Source301: COPYING.hispavoces + +Patch1: festival-1.96-nitech-american.patch +Patch2: festival_buildroot.patch +Patch3: festival-1.96-speechtools-shared-build.patch +Patch5: festival-1.96-speechtools-rateconvtrivialbug.patch +Patch6: festival-1.96-speechtools-linklibswithotherlibs.patch +Patch7: festival-1.96-speechtools-ohjeezcxxisnotgcc.patch +Patch8: festival-1.96-etcsiteinit.patch +Patch9: festival-1.96-alias_cmu_to_nitech.patch +Patch10: festival-1.96-findspeechtools.patch +Patch11: festival-1.96-main-shared-build.patch +Patch12: festival-1.96-bettersonamehack.patch +Patch20: festival-1.96-speechtools-1.2.96-beta+awb.patch +Patch31: festival-1.96-kludge-etcpath-into-libarch.patch +Patch60: festival-1.96-format-security.patch +Patch90: festival-1.96-nitech-proclaimvoice.patch +Patch91: festival-1.96-nitech-fixmissingrequire.patch +Patch92: festival-1.96-nitech-sltreferences.patch +Patch93: gcc43.patch +Patch94: festival-speech-tools-pulse.patch +Patch95: gcc44.patch +Patch96: festival.gcc47.patch +Patch97: no-shared-data.patch +Patch98: festival-1.96-server-script-typo.patch +Patch99: festival-gcc7.patch + +BuildRequires: gcc gcc-c++ pulseaudio-libs-devel texi2html ncurses-devel +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig + +Provides: %{name}-lib = %{version}-%{release} +Provides: %{name}-speechtools-libs = %{speechtoolsversion}-%{release} +Provides: %{name}-speechtools-utils = %{speechtoolsversion}-%{release} +Provides: festvox-kal-diphone = %{diphoneversion}-%{release} +Provides: festvox-ked-diphone = %{diphoneversion}-%{release} +Provides: festvox-awb-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-bdl-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-clb-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-jmk-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-rms-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-slt-arctic-hts = %{nitechhtsversion}-%{release} +Provides: hispavoces-pal-diphone = %{hispavocesversion}-%{release} +Provides: hispavoces-sfl-diphone = %{hispavocesversion}-%{release} +Provides: festival-voice festvox-kallpc16k festvox-kedlpc16k +Obsoletes: %{name}-lib < %{version}-%{release} +Obsoletes: %{name}-speechtools-libs < %{speechtoolsversion}-%{release} +Obsoletes: %{name}-speechtools-utils < %{speechtoolsversion}-%{release} +Obsoletes: festvox-kal-diphone < %{diphoneversion}-%{release} +Obsoletes: festvox-ked-diphone < %{diphoneversion}-%{release} +Obsoletes: festvox-awb-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-bdl-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-clb-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-jmk-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-rms-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-slt-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: hispavoces-pal-diphone < %{hispavocesversion}-%{release} +Obsoletes: hispavoces-sfl-diphone < %{hispavocesversion}-%{release} + +vProvides: %{name}-lib = %{version}-%{release} +Provides: %{name}-speechtools-libs = %{speechtoolsversion}-%{release} +Provides: %{name}-speechtools-utils = %{speechtoolsversion}-%{release} +Provides: festvox-kal-diphone = %{diphoneversion}-%{release} +Provides: festvox-ked-diphone = %{diphoneversion}-%{release} +Provides: festvox-awb-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-bdl-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-clb-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-jmk-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-rms-arctic-hts = %{nitechhtsversion}-%{release} +Provides: festvox-slt-arctic-hts = %{nitechhtsversion}-%{release} +Provides: hispavoces-pal-diphone = %{hispavocesversion}-%{release} +Provides: hispavoces-sfl-diphone = %{hispavocesversion}-%{release} +Provides: festival-voice festvox-kallpc16k festvox-kedlpc16k +Obsoletes: %{name}-lib < %{version}-%{release} +Obsoletes: %{name}-speechtools-libs < %{speechtoolsversion}-%{release} +Obsoletes: %{name}-speechtools-utils < %{speechtoolsversion}-%{release} +Obsoletes: festvox-kal-diphone < %{diphoneversion}-%{release} +Obsoletes: festvox-ked-diphone < %{diphoneversion}-%{release} +Obsoletes: festvox-awb-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-bdl-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-clb-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-jmk-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-rms-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: festvox-slt-arctic-hts < %{nitechhtsversion}-%{release} +Obsoletes: hispavoces-pal-diphone < %{hispavocesversion}-%{release} +Obsoletes: hispavoces-sfl-diphone < %{hispavocesversion}-%{release} diff --git a/festival_buildroot.patch b/festival_buildroot.patch new file mode 100644 index 0000000..527f969 --- /dev/null +++ b/festival_buildroot.patch @@ -0,0 +1,105 @@ +--- festival/src/scripts/festival_server.sh.foo 2003-08-25 23:47:26.000000000 -0400 ++++ festival/src/scripts/festival_server.sh 2003-08-25 23:48:36.000000000 -0400 +@@ -36,11 +36,6 @@ + # # + ########################################################################### + +-TOP=__TOP__ +-EST=__EST__ +- +-#__SHARED_SETUP__ +- + useage() + { + cat <$@ +- @echo "\"true\" ; exec "$(FESTIVAL_HOME)/bin/festival --script '$$0 $$*' >>$@ ++ @echo "\"true\" ; exec "/usr/bin/festival --script '$$0 $$*' >>$@ + cat $< >>$@ + chmod +x $@ + +--- festival/speech_tools/scripts/build_docbook_index.prl.foo 2003-08-25 23:37:59.000000000 -0400 ++++ festival/speech_tools/scripts/build_docbook_index.prl 2003-08-25 23:38:54.000000000 -0400 +@@ -35,8 +35,6 @@ + END + } + +-#__SHARED_SETUP__ +- + $title=''; + $mode='debug'; + $verbose=0; +--- festival/speech_tools/scripts/cxx_to_docbook.prl.foo 2003-08-25 23:38:58.000000000 -0400 ++++ festival/speech_tools/scripts/cxx_to_docbook.prl 2003-08-25 23:39:02.000000000 -0400 +@@ -37,8 +37,6 @@ + END + } + +-#__SHARED_SETUP__ +- + $level=0; + $title=undef; + $chapter='chapter'; +--- festival/speech_tools/scripts/pm.prl.foo 2003-08-25 23:45:19.000000000 -0400 ++++ festival/speech_tools/scripts/pm.prl 2003-08-25 23:45:28.000000000 -0400 +@@ -56,8 +56,6 @@ + END + } + +-#__SHARED_SETUP__ +- + while ($#ARGV>=0) + { + if ($ARGV[0] eq "-f") +--- festival/speech_tools/scripts/raw_to_xgraph.prl.foo 2003-08-25 23:45:35.000000000 -0400 ++++ festival/speech_tools/scripts/raw_to_xgraph.prl 2003-08-25 23:45:40.000000000 -0400 +@@ -56,8 +56,6 @@ + END + } + +-#__SHARED_SETUP__ +- + $stream = STDIN; + $sample_rate = 1; + +--- festival/speech_tools/scripts/resynth.sh.foo 2003-08-25 23:45:48.000000000 -0400 ++++ festival/speech_tools/scripts/resynth.sh 2003-08-25 23:45:57.000000000 -0400 +@@ -63,8 +63,6 @@ + exit $1 + } + +-#__SHARED_SETUP__ +- + invert=false + voiced='' + pre=0 +--- festival/speech_tools/scripts/tex_to_images.prl.foo 2003-08-25 23:46:20.000000000 -0400 ++++ festival/speech_tools/scripts/tex_to_images.prl 2003-08-25 23:46:41.000000000 -0400 +@@ -79,8 +79,6 @@ + exit($_[0]); + } + +-#__SHARED_SETUP__ +- + $out_pattern="image_NNN.FFF"; + $scale=3; + $over=2; diff --git a/festlex_CMU.tar.gz b/festlex_CMU.tar.gz new file mode 100644 index 0000000..1d69d2e Binary files /dev/null and b/festlex_CMU.tar.gz differ diff --git a/festlex_POSLEX.tar.gz b/festlex_POSLEX.tar.gz new file mode 100644 index 0000000..ab5f563 Binary files /dev/null and b/festlex_POSLEX.tar.gz differ diff --git a/festvox_kallpc16k.tar.gz b/festvox_kallpc16k.tar.gz new file mode 100644 index 0000000..49aa1b0 Binary files /dev/null and b/festvox_kallpc16k.tar.gz differ diff --git a/festvox_kedlpc16k.tar.gz b/festvox_kedlpc16k.tar.gz new file mode 100644 index 0000000..ee774f7 Binary files /dev/null and b/festvox_kedlpc16k.tar.gz differ diff --git a/festvox_nitech_us_awb_arctic_hts.tar.bz2 b/festvox_nitech_us_awb_arctic_hts.tar.bz2 new file mode 100644 index 0000000..caf158c Binary files /dev/null and b/festvox_nitech_us_awb_arctic_hts.tar.bz2 differ diff --git a/festvox_nitech_us_bdl_arctic_hts.tar.bz2 b/festvox_nitech_us_bdl_arctic_hts.tar.bz2 new file mode 100644 index 0000000..4e66680 Binary files /dev/null and b/festvox_nitech_us_bdl_arctic_hts.tar.bz2 differ diff --git a/festvox_nitech_us_clb_arctic_hts.tar.bz2 b/festvox_nitech_us_clb_arctic_hts.tar.bz2 new file mode 100644 index 0000000..e06bcbd Binary files /dev/null and b/festvox_nitech_us_clb_arctic_hts.tar.bz2 differ diff --git a/festvox_nitech_us_jmk_arctic_hts.tar.bz2 b/festvox_nitech_us_jmk_arctic_hts.tar.bz2 new file mode 100644 index 0000000..0b1dcde Binary files /dev/null and b/festvox_nitech_us_jmk_arctic_hts.tar.bz2 differ diff --git a/festvox_nitech_us_rms_arctic_hts.tar.bz2 b/festvox_nitech_us_rms_arctic_hts.tar.bz2 new file mode 100644 index 0000000..bef29be Binary files /dev/null and b/festvox_nitech_us_rms_arctic_hts.tar.bz2 differ diff --git a/festvox_nitech_us_slt_arctic_hts.tar.bz2 b/festvox_nitech_us_slt_arctic_hts.tar.bz2 new file mode 100644 index 0000000..cbfbab4 Binary files /dev/null and b/festvox_nitech_us_slt_arctic_hts.tar.bz2 differ diff --git a/gcc43.patch b/gcc43.patch new file mode 100644 index 0000000..1257eef --- /dev/null +++ b/gcc43.patch @@ -0,0 +1,36 @@ +diff -up festival/src/modules/Text/text_modes.cc.gcc43 festival/src/modules/Text/text_modes.cc +--- festival/src/modules/Text/text_modes.cc.gcc43 2008-02-22 21:50:33.000000000 -0500 ++++ festival/src/modules/Text/text_modes.cc 2008-02-22 21:50:41.000000000 -0500 +@@ -59,8 +59,8 @@ static void um_apply_filter(const EST_St + void tts_file_user_mode(LISP filename, LISP params) + { + +- volatile EST_String tmpname = make_tmp_filename(); +- volatile EST_String inname = get_c_string(filename); ++ EST_String tmpname = make_tmp_filename(); ++ EST_String inname = get_c_string(filename); + volatile EST_String filter; + volatile EST_TokenStream ts; + volatile LISP func; +diff -up festival/speech_tools/base_class/EST_TSimpleVector.cc.gcc43 festival/speech_tools/base_class/EST_TSimpleVector.cc +--- festival/speech_tools/base_class/EST_TSimpleVector.cc.gcc43 2006-07-06 08:57:18.000000000 -0400 ++++ festival/speech_tools/base_class/EST_TSimpleVector.cc 2008-02-22 21:43:03.000000000 -0500 +@@ -43,6 +43,7 @@ + #include "EST_TSimpleVector.h" + #include "EST_matrix_support.h" + #include ++#include + #include "EST_cutils.h" + + template void EST_TSimpleVector::copy(const EST_TSimpleVector &a) +diff -up festival/speech_tools/base_class/EST_TSimpleMatrix.cc.gcc43 festival/speech_tools/base_class/EST_TSimpleMatrix.cc +--- festival/speech_tools/base_class/EST_TSimpleMatrix.cc.gcc43 2004-09-30 08:53:35.000000000 -0400 ++++ festival/speech_tools/base_class/EST_TSimpleMatrix.cc 2008-02-22 21:43:03.000000000 -0500 +@@ -44,6 +44,7 @@ + #include "EST_TVector.h" + #include + #include ++#include + #include "EST_cutils.h" + + template diff --git a/gcc44.patch b/gcc44.patch new file mode 100644 index 0000000..ea27595 --- /dev/null +++ b/gcc44.patch @@ -0,0 +1,22 @@ +diff -up festival/speech_tools/speech_class/EST_wave_io.cc.gcc44 festival/speech_tools/speech_class/EST_wave_io.cc +--- festival/speech_tools/speech_class/EST_wave_io.cc.gcc44 2009-02-26 17:26:58.672421948 -0500 ++++ festival/speech_tools/speech_class/EST_wave_io.cc 2009-02-26 17:50:02.065661124 -0500 +@@ -68,7 +68,7 @@ static const char *NIST_END_SIG = "end_h + + int nist_get_param_int(const char *hdr, const char *field, int def_val) + { +- char *p; ++ const char *p; + int val; + + if (((p=strstr(hdr,field)) != NULL) && +@@ -84,7 +84,8 @@ int nist_get_param_int(const char *hdr, + + char *nist_get_param_str(const char *hdr, const char *field, const char *def_val) + { +- char *p,*val; ++ const char *p; ++ char *val; + int size; + + if (((p=strstr(hdr,field)) != NULL) && diff --git a/no-shared-data.patch b/no-shared-data.patch new file mode 100644 index 0000000..e495637 --- /dev/null +++ b/no-shared-data.patch @@ -0,0 +1,20 @@ +diff -up festival/speech_tools/config/compilers/gcc_defaults.mak.no-shared-data festival/speech_tools/config/compilers/gcc_defaults.mak +--- festival/speech_tools/config/compilers/gcc_defaults.mak.no-shared-data 2008-02-22 13:45:50.000000000 -0500 ++++ festival/speech_tools/config/compilers/gcc_defaults.mak 2008-02-22 13:46:24.000000000 -0500 +@@ -73,12 +73,12 @@ PROFILE_gprof_CCFLAGS = -pg + PROFILE_gprof_CXXFLAGS = -pg + PROFILE_gprof_LINKFLAGS = -pg + +-SHARED_CCFLAGS = -fPIC -fno-shared-data +-SHARED_CXXFLAGS = -fPIC -fno-shared-data +-SHARED_LINKFLAGS = -fno-shared-data ++SHARED_CCFLAGS = -fPIC ++SHARED_CXXFLAGS = -fPIC ++SHARED_LINKFLAGS = + + ifndef GCC_MAKE_SHARED_LIB +- MAKE_SHARED_LIB = $(CXX) -shared -fno-shared-data -o XXX -Wl,-soname,YYY ++ MAKE_SHARED_LIB = $(CXX) -shared -o XXX -Wl,-soname,YYY + else + MAKE_SHARED_LIB = $(GCC_MAKE_SHARED_LIB) + endif diff --git a/specx.tgz b/specx.tgz new file mode 100644 index 0000000..4b22feb Binary files /dev/null and b/specx.tgz differ diff --git a/specx/README.md b/specx/README.md new file mode 100644 index 0000000..09cac71 --- /dev/null +++ b/specx/README.md @@ -0,0 +1,79 @@ +# gitee_new.py + +## Prerequisites + +### Configure you git + +``` +git config -l user.name "Your Gitee account name" +git config -l user.email "Gitee registration email" +``` + +### Upload your sshkey to Gitee + +In order to simplify the process, you should upload your sshkey to Gitee. +Otherwise, you have to type your name and password each time you run `git push`. + +``` +ssh-keygen -t rsa -C "your gitee email" # Press enter several times until the command finished +cat ~/.ssh/id_rsa.pub +# paste to Gitee +``` + +## Tutorial + +This program is intended to create repository on Gitee. +The local Git repository is self-managed by this tool, so there is no need to +intervene manually. + +### Usage + +``` +# To add a package: gcc +python3 gitee_new.py gcc +``` + +Then open your own Git repository page and click `Pull Request` button. You are done. + +You can also add many packages at once. + +``` +python3 gitee_new.py package1 package2 package3 +``` + +### NOTE + +If you configure you `user.email` to a nickname instead of you Gitee account name, +you must use `-u` to specify you Gitee name explicitly. + +``` +python3 gitee_new.py gcc -u qiegewala +``` + +### Advanced + +`-v` to turn on verbose. + +`-r` to use `reset` mode instead of `merge` mode which is the default. + +`-c` to clean old git repository. You should use this option only when the repository +has been corrupted. + +`--without-push` to stop before pushing to your remote repository. + +# download.py + +## Prerequisites + +``` +yum install libxml2-dev libxslt-devel python3-devel +pip3 install beautifulsoup4 requests lxml +``` + +## Usage + +The only argument is package name. + +``` +python3 download.py gcc +``` diff --git a/specx/download.py b/specx/download.py new file mode 100644 index 0000000..f31ef01 --- /dev/null +++ b/specx/download.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 +from pytransform import pyarmor_runtime +pyarmor_runtime() +__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x06\x00\x33\x0d\x0d\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\x93\x19\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x50\x8c\x64\x26\x42\xd6\x01\xe8\x4b\x62\xdc\x99\xb5\x65\x1f\xb6\xd4\x36\xcc\x5b\x27\x05\x52\xc1\xf2\xa0\xf6\xdb\xd0\xe3\x01\xe7\x8c\xda\x45\x9f\x45\x2e\xa9\x1d\x30\x72\xa8\x2c\x9b\x2f\x37\xa1\xfa\x10\x97\x7c\x98\x10\x09\xbb\x94\xb3\x6f\xe4\x9e\x3e\x6a\x8a\x40\x0d\xec\x2d\x05\xe8\x4b\x9d\x22\x5f\x70\x01\x0f\x3d\xf3\xb1\xbb\x80\xbc\x79\xd1\x90\xfe\x14\x0b\x90\xca\xde\x40\xb1\xab\x27\x3b\xb6\x93\x92\x2f\xda\xd3\x5c\x02\x14\x58\x3f\xfc\x0d\xee\x26\x83\xd7\x5a\xc7\x76\x0c\x23\x32\x92\x41\x12\xe8\x18\x36\x0c\xe1\xc2\x21\xcf\x1a\x02\xef\xda\x14\x0b\xe3\x59\xb7\xe7\x1a\xb6\x99\x3f\xad\xf6\x9e\x3a\x92\xe1\x45\xa7\xae\xce\x83\xc1\xc7\x95\xef\xa0\xc3\x2d\x28\xfb\x71\x6a\x34\x81\x07\x43\x55\x9b\x74\x84\xa7\x49\x81\x84\xae\x9c\x00\x92\xbe\x73\xbc\xa7\x92\x66\xaf\x9e\xb1\xa7\xc0\xe1\x2e\x86\xd5\x7f\xc5\x9e\xd0\xaa\xb3\x6d\xc0\xce\xb7\x95\xfa\xca\x86\xc1\x58\x4a\x34\xc5\x8d\x8b\x23\x4c\x70\x98\xd9\x12\x4e\x46\x7e\x00\xc1\x5c\x23\x03\x01\xa9\x27\x83\xdc\xd7\xaf\x26\xb1\x17\xc8\x42\x7c\x3f\x03\x48\xb3\xa9\x22\x65\x68\x19\x63\x0e\x71\xf4\x93\x55\xee\x37\x87\xad\x88\x95\x8a\x14\xf3\x5f\x31\x18\x18\x66\xb0\x89\x42\x56\x8e\x14\xa3\x01\x7c\xe1\x34\x03\x0c\xf9\xa3\x6a\x82\x88\xba\xc3\x00\x56\x0d\x70\xff\x53\x72\xae\xed\x53\x6e\xf7\x4a\x01\xf6\x19\xab\x9d\x98\x53\x8d\x05\xfd\x72\xff\xbd\xac\x1e\x2d\x1e\x13\x93\x0c\xdd\x78\x5b\xeb\x98\x14\x5f\x5c\x24\x53\xe4\x21\xef\x41\x5c\x72\x04\xbe\xff\x08\x4a\xe4\x90\xb8\x3f\x64\x26\x01\x98\xc0\x12\xbf\xaf\x64\x85\x6a\xf2\x57\x26\x42\x90\xee\x9d\xae\xaa\xbb\x4f\x0c\xce\x35\x82\x8a\x69\xd6\xc5\x71\x0f\x7d\x4f\x76\x4d\x45\x2a\x8c\xdc\xa6\xe3\x20\x7a\xdd\x36\x91\x2d\x00\xdf\x4e\xf6\x9b\xa5\x35\xd1\xf4\x0d\xa9\x6e\xeb\x39\x30\x4d\x6c\x5f\x77\x96\x5c\x60\x68\xf6\xfd\xd2\xc6\x30\x52\x84\x61\xa1\xa5\xab\x07\x9a\x21\xd6\x7b\xc3\x4b\xab\x51\x4e\xa3\x6e\x7c\x23\x3b\x2d\xbb\xc3\x17\x61\x23\xf9\x4a\xee\x65\xad\xc9\xf2\xda\xc1\x24\xe3\x0e\xd9\x60\x0d\xa6\xf3\x9e\x02\xc1\xb8\x70\xc0\x25\xe2\xad\xce\x76\xc2\x87\x57\xca\xdc\x05\xda\x9e\xa7\x7e\x06\x60\x56\x16\xdb\xce\xcb\xee\x65\x3a\x84\x68\x9a\x02\x74\x6d\x0d\xbd\x5b\x88\x45\x75\x5c\x23\xfb\x78\x2e\xb7\x16\x87\xea\xfe\x3c\x1e\x6a\xa5\x37\x64\x66\x16\xf4\x7b\x94\x77\x77\xd1\x87\x26\x8d\xc2\xd1\x13\x35\xf8\xb6\xed\xd2\x70\xf6\xdb\xf6\xc7\xa3\xd4\x95\x05\x56\x21\x93\x74\x8e\xa6\x05\xd1\x1b\xc1\xce\xc7\xc8\x24\x2f\xf7\xe0\x4b\xa8\x4e\xeb\xb6\xc4\x6b\xc2\xb9\x44\xc5\xb6\xf0\x72\x9b\xf9\x6c\x44\x29\xd6\xbf\x3c\xf0\x60\xe0\x66\x1b\x58\xc6\x2a\xea\xef\xb8\x80\xb1\x09\x15\x71\x55\x30\xa9\x35\x8d\xa2\x93\x9f\xca\x3c\x49\x67\xbd\x4a\xfb\x7f\x8d\x9d\x17\x8d\x61\x46\x13\x22\x76\xc7\x85\x3e\x32\xf1\x06\xaf\x59\x8c\x48\x11\x89\xea\xe6\xf1\x52\xed\x49\x1f\x88\x8f\x77\x55\x20\x25\x54\x27\xba\xee\x6c\x80\x0c\x69\x4e\x24\x0b\x73\xd8\xb9\x9c\x85\x16\x36\x34\xe5\xc1\xa1\x68\x14\x2a\x5a\x48\xd1\x48\xa3\x71\x72\x83\xe2\x33\xef\x7b\xcd\x8b\x22\x61\xbf\x43\xe0\x75\x50\xf5\x58\xd2\xed\x48\x98\x9f\x31\x82\x05\x98\xa9\xc6\x68\x7d\x7d\x60\xb5\x12\x0b\xcd\xbe\xd7\x75\xf0\x66\x11\x10\x4d\x55\x0d\x74\xb0\x97\x99\xbc\x3c\x99\x95\x31\xa4\xb7\x5f\x4a\x22\xc8\x11\xcf\xdb\x5f\x7d\xa8\x3f\x9b\xaa\x9d\xe3\xe4\x9a\x37\xae\x06\x8b\x5f\xfc\x93\xc4\xf0\xe2\x7c\xd9\x25\xba\xba\x2e\x41\x66\x98\x77\x9b\xc1\x58\xfd\xcf\xe9\x4e\xb1\xb7\xcd\xc8\x69\x59\xca\x56\xf6\xdb\x41\xff\x1c\x99\xbe\x9e\x45\x15\x64\x59\xd7\x2a\x3a\x96\x87\x92\x96\x91\x0a\xbb\x6b\xcc\x1a\x59\x2a\x5c\xa7\x4a\x03\xb6\xcd\xcf\xf4\xa4\xf9\xa0\x6b\xfb\x0d\xaf\xbc\x03\x92\xa0\x84\x7b\x60\xf6\x13\x49\x86\x73\x6f\xf3\x11\x37\x76\x96\x54\x36\xef\xd6\x1e\x5c\x35\xa9\x81\x13\xf8\xee\x66\xc5\xd0\xc5\x5a\xa9\xe6\x52\xbf\xf3\x53\x8a\xe1\x3d\xd4\x19\x4e\xf7\x3b\x92\x63\x0d\x29\xbe\xab\x03\x37\xfd\x9a\x6c\xf6\xc9\xc9\x69\x46\x0b\x5a\x66\x88\x86\x72\xfd\x94\x37\x83\xd7\x23\x1e\x16\x4b\x3e\x41\x62\x02\xdd\xfa\x33\x5e\x77\x9c\x6e\x40\xa3\xd1\x3a\x21\x95\x46\x69\x50\xc5\xd0\x39\xc6\xc6\xfb\xa8\x18\x3e\x89\xdf\x1f\x94\x21\x29\x0e\x9b\x08\x36\xd6\x8b\xe9\x51\xb2\x61\xec\x19\xf4\xf0\x2b\x20\xe9\xc5\x48\xa0\x7f\x08\x69\x56\x80\xfc\x56\x77\xd7\x5c\x72\x92\x25\xa8\x82\xb4\x60\xc2\x17\x38\xe9\xc9\xb0\x0d\x40\x86\x00\x24\x4c\x8e\x5c\x4e\x17\x00\xb9\xd7\x78\x25\x21\x61\xf3\xe7\x1a\xa5\x04\xbd\x1f\x60\xbe\x89\xb7\x5a\xe9\x69\xaa\x7b\x47\xe4\xe4\x49\x82\x8a\xbc\x53\xbf\x6c\x02\x0d\x42\x2f\x63\x3d\x9e\x84\x7f\xe1\x12\xbf\x6c\x7e\x4d\xba\x96\x4d\x07\xb7\xa2\x1c\xcc\x9d\x9a\x78\x00\xaf\xa1\x7b\x71\xed\xec\x5b\x32\x5f\x00\xf0\x71\x96\x0e\x0e\xe3\x55\x6b\x1b\xc4\xc9\xa9\x32\xb5\x9f\xcc\x12\x07\xe1\x8f\xb2\xfd\x0f\x31\x47\x74\xcb\x8e\xe8\x78\xcf\xf3\x36\xc5\xbb\x23\xa0\x29\x43\xf0\x58\x1b\xfb\x72\x90\xeb\xdd\xbe\x54\x84\xeb\x23\xa4\x76\x72\xe5\xcc\xfb\x30\x5d\x72\xba\xdf\x93\x4b\x48\xc2\xcf\x28\x77\x13\xee\xb3\x68\xfc\x83\x71\xe8\x39\x6d\x7f\xc5\xe1\x98\x4b\xcb\x6e\x22\xe4\x42\x22\x15\x5d\x4d\x13\x2b\x3e\x11\xbe\x40\x27\x3a\xec\x6a\x00\xc2\xa4\xa6\x10\x8f\xbe\x0c\x61\xe4\x5e\x82\xbc\x1c\xbf\x23\x46\x9f\xcc\x4b\x66\x79\x4c\x52\x16\x4d\x8f\x94\xa1\x74\x2f\x9b\xda\xdd\xe9\xf7\x2b\x9a\x44\x5b\xaa\xa5\x8b\x68\x5f\x3f\x3a\x5d\x1e\x9e\x14\x87\x70\x33\xe8\x7d\xfd\xf8\x8c\xff\x34\x50\x3e\x87\x4e\xc8\xde\xec\x27\x5e\xce\x20\x47\x9c\x16\x21\xfc\x17\xc5\x6c\xb4\xd4\x91\xbd\x63\x64\x3f\x18\xf3\x99\xbf\xf6\x80\xc4\x38\xff\x98\xc3\xc5\x55\xa9\xea\x71\x10\x37\x3a\x1d\x1c\xd7\x2d\x9e\x68\xa9\xcb\x39\xe2\x8c\xd2\xcd\xa4\x5f\xe4\x1d\xcb\xe9\xc4\x49\xbf\x9f\xb9\x44\x5b\xef\xfd\x04\xde\xf6\x9e\xcc\xb7\xe5\x03\xe8\x89\xb6\x23\x5f\x43\x27\xa7\x05\x35\xef\x5c\xa3\x59\xc4\x16\x1d\x35\x46\xa6\xfb\xf3\x94\x10\x07\x15\xfd\xbf\x40\xa3\x72\xf6\x66\x4d\x7f\xe7\xb9\x0d\x1f\xca\xed\x22\xc0\xad\xd5\xa5\x1f\x82\x31\xbd\x17\x53\x16\xea\x5c\xf3\xb8\xce\x35\x8c\xcc\xb3\xda\xca\x83\xf5\xf0\x06\x50\xa2\x88\x35\xd5\xee\xf7\x82\xcd\x71\xd2\x26\x2f\xb3\xe3\x32\x3d\x96\xc9\x2b\x92\xa7\x33\xe3\x5b\x51\xea\x07\xf9\x4b\x35\xe7\x6d\x4a\x5d\xbc\xce\xbd\x5e\xc9\xfe\x04\x5b\x20\xff\x0d\x53\x92\x37\xc4\x7b\x6a\x45\x38\x34\xad\x40\xf8\xdf\xc6\xe9\x07\xf3\xf7\x4d\xda\x0b\xd7\x33\x10\xe2\xe2\xb4\x9e\x4d\x2d\x3c\x54\xe8\x1e\xb1\xb0\x91\xbe\x2f\xd9\x23\xc6\x34\x1a\x0a\xa9\xc1\x56\x7e\xf9\xf1\x2a\x58\x92\xd3\xa4\xa7\xe3\xdb\x99\xab\xbd\x64\x4d\x6a\xb1\x14\xfa\x20\xad\x71\x93\x86\x17\xdc\x5a\x40\xf5\x4c\x06\xfc\x5e\xd8\x0f\xe6\x07\xe2\x0d\xd9\x94\xf6\x37\x54\xcf\xbc\x54\xe7\xf5\xa8\xe4\x5c\x39\x63\xe5\x99\xfc\x31\x68\xf3\x32\x60\xa5\x1d\x9c\x26\x46\xe3\x91\xf9\xa3\xde\xae\x31\x27\x5b\x6a\x13\x82\x0d\x10\xf3\xbc\x37\x13\x2c\x3b\x57\xe3\x0d\x86\x25\x7a\x15\x5b\x10\x5b\x2d\xe3\x8f\x0b\xe7\xab\x11\xa7\x58\xe8\x3d\xf9\xa1\x7e\xb9\x02\xd0\xa0\xf9\xab\xdf\x83\xb6\xc1\xe5\x18\x8d\xea\x6b\xe8\xa5\x41\x09\x1e\xdb\xe2\xd9\x24\x03\x53\x02\x57\xef\x4c\xab\x48\xb7\x98\x12\x4e\x3d\xaa\xb5\x4c\x7d\xec\xdf\xd4\xfe\xbd\x52\x38\x7d\xc3\xac\x27\xbb\x99\x29\xb2\x87\x4e\xdc\xed\x6e\xcc\x66\x06\x80\xaa\xc2\x5a\x1b\x4d\x4a\x34\x75\x5d\xf4\xed\xe9\x66\x93\x64\x1c\xfc\xd6\xa0\xb2\xa5\x11\xf6\x50\x7d\x7b\x33\x94\xce\x12\x16\x82\x97\xe1\x77\x6c\x19\x21\x7e\x3f\x17\xa4\xe4\x00\x90\x22\x4b\x99\x9a\x37\x3e\x6a\x86\x53\xb6\x2d\x93\x1d\x36\x28\xe1\x70\x5b\xb0\x97\xa8\x22\xff\x46\x71\x79\x3d\xf2\x84\xaa\x7a\x6c\x68\xee\x2b\x59\x23\x67\xd6\x6e\x6f\x6f\x69\xb3\xe9\x1d\x5e\x1b\xc1\x4b\x22\x2e\x43\x0c\xe1\xda\x8c\x88\xfe\x2e\xa3\x48\x13\x62\xcb\x34\x76\xd3\x3f\xbf\x53\x80\xfc\xe7\x5e\xac\x30\x72\x8d\xf0\x53\x95\x9b\xd9\x57\x92\x72\xfa\xca\x0d\x15\xf7\x2d\xfd\xdd\x24\x28\xa1\x5a\x9f\xc4\x44\xc0\x9c\x63\xaa\x44\xeb\x2d\x03\x7c\xc7\xa9\x54\x3d\xe7\xa4\xa9\xf0\xec\xd1\xb5\x38\x98\x4b\x3f\x3d\xc3\x2d\xc0\xd3\x14\xf2\x31\x45\x8e\x8a\x11\x00\xbb\xb3\xb0\x1f\x8b\xab\x17\xb4\xe6\x18\xd7\x15\x29\x9a\x6f\x93\xe0\xba\x91\xeb\xf9\x8d\xd7\xf0\x1a\x96\x09\x85\x2d\x30\x39\x53\x7b\x0b\x0c\x31\x10\xde\x92\xa3\xae\xdf\xac\x30\x33\xb3\x49\x8c\x76\xa7\x17\x87\xac\x61\x4b\x94\x51\xaa\xa5\x1c\xd1\x57\xf0\xd6\xf2\x35\xfb\x2f\x8c\x44\x97\x3b\xf1\x05\x86\x32\x07\x9f\x52\xa4\x3b\x40\x0f\x1c\x80\x63\xcc\xf4\xa5\x0b\x03\x3c\x60\x69\x21\xf2\x02\x43\x77\xf3\xb0\xf8\xee\x07\x8e\x58\x30\x37\xbe\x9c\xa1\xed\x22\x35\x2a\xc7\x22\x75\xc4\xb0\x39\x54\x10\x9d\xb3\x24\x41\xe7\x14\xa6\xab\xaf\x13\xa1\xc9\x63\x02\xbf\x2e\x52\xb7\xdd\x1c\x68\x74\x22\x3a\xb0\x89\xd2\x61\xd4\xd7\xc6\xbc\x7e\x9a\x45\x7a\x33\x9c\x5c\xd9\xa2\xac\xe0\x06\x14\xef\xe5\xac\x2f\x72\x9b\x74\x3f\xae\xec\x05\x1a\x8e\x95\x5d\xbf\xab\x5a\x4b\x64\x88\x5f\x2f\x22\xdb\xcb\xe6\xca\x1b\xcc\xcb\xc3\xa2\x8a\xff\x43\x25\xa0\x76\x9d\x86\xc2\x0e\x7d\x4c\xf2\xb6\x8d\xc1\x38\x7c\xad\xfe\xc6\x89\x9d\x62\xe1\x63\x35\x5f\xe8\x93\xdc\x90\xae\x8b\xe8\x65\x3a\x5b\x46\xcc\x34\xaf\x11\x59\x80\x4e\xf9\xac\x1b\xb8\x07\x51\xf7\x7b\xba\x71\xbd\x10\x07\x64\x19\x16\xbe\x31\x9c\x36\x9e\xe8\xdd\x1a\x16\x47\xe2\x6f\x39\xc7\xb3\xcb\x69\xc9\xe0\x89\xa3\x6e\xbc\x94\xbd\x91\x2f\x03\x78\xf6\x13\xc1\x99\x11\x67\xc4\xf0\x99\x40\x65\x12\xc8\x1a\x88\xfc\xd1\x7e\xf9\xfb\x2e\x65\xe3\x42\x3d\xca\x5e\x9e\x85\x61\xea\xa2\x24\x48\x34\x34\xcb\xb1\x88\x43\x04\x27\xf5\x25\x1f\xb9\x4a\xdb\x65\x99\xab\x8a\xc4\x01\x05\x2d\x94\x07\xc6\x35\xb2\x11\x0a\x88\x14\x36\x8b\xe9\x7f\xe8\x19\xfb\x94\xf9\x08\x50\xc0\xbe\x90\x0b\x66\xf8\xcc\x73\x0f\x52\xa7\x58\x5a\xbd\x5a\xa6\xd6\xf5\xf8\xa7\x78\xd0\x46\x75\xd8\xff\xa7\xbc\xd9\xee\xf3\x52\xaf\xad\x65\x78\x70\xe7\x06\x9a\xdd\x4f\x02\x40\x29\x9a\x17\x14\x8e\xad\xd6\xc6\xc1\x11\x58\x62\x77\xdd\x37\x6e\x17\x1d\xec\xd8\x01\xf4\xe0\xdf\x95\xbb\x95\x93\xad\x10\x8d\xe1\x1f\x02\x5d\x3d\x7b\x47\xe9\x56\x8c\x6d\x24\x37\xec\x60\x3d\x8d\xec\x19\xf2\xbb\xbe\xb7\xc9\x2c\xa1\xcc\x70\x2a\xfe\x01\x94\x20\xbc\x67\x38\x84\x84\x3e\xe6\xde\x8f\x78\x78\xa6\x64\x09\x61\x2f\x3d\xaa\xb6\xc1\xd2\xad\x76\xf1\x95\x37\x95\x7b\xd5\xa7\xbc\x2e\xfc\x21\x76\x4c\x28\x85\x2b\xd6\x57\x8d\x35\x01\x4e\x78\xa1\x8d\x09\x1f\x78\x43\x4f\x37\xe5\x47\x94\x4d\xba\xdd\x05\xf2\x38\x4e\xe9\xa6\xb5\x10\xcb\x18\x21\x38\xcc\x88\x7e\xb6\xaf\x42\x3a\x6d\x26\x5d\x5e\x21\xd1\xc6\xeb\x79\x5c\x72\x7b\xb2\xe9\x98\x0e\x71\x75\x60\x7f\x3a\xd2\x20\xc4\xf5\x13\x20\x36\x36\x69\x8c\x04\x13\x19\x04\x74\x57\x0c\xaa\x3e\xdc\x89\xc5\xa4\xff\x44\x9b\xe8\x46\x35\x11\x1c\xfc\x85\x6b\x0d\x2c\x13\x3d\x4a\xa9\xa0\x36\x98\x83\xb0\x31\x82\xc4\xdb\x16\x04\x69\x45\x31\x6e\x94\x2b\x4b\xca\x09\x31\xcd\xc7\xb7\x9c\xd3\xbf\x51\xa9\x90\x2d\x34\xa8\x04\x72\x1e\x89\x0e\x48\xda\xf6\xe3\x7e\x41\x0e\xbd\x13\x4a\x1a\x05\x4a\xdf\x66\x1d\xfc\x75\x51\xfc\xe7\xb8\xe2\x9e\xb5\x2c\x9e\x3a\x1f\xc5\x2e\xac\xe2\xbd\x9c\x6d\x40\xe6\xc2\xd5\xe7\x8c\x52\x7c\xd9\x95\xf1\x47\x2f\x86\xc4\x1e\x97\xa2\x19\x59\xbd\x57\x13\x49\x70\x7b\x54\x2d\x6b\x67\xcd\x31\x76\x93\x55\x5b\xf5\xd0\x7b\x39\xd0\x32\x1a\x79\x23\xbd\x9d\xc8\xb5\x33\xdd\x8c\x66\xfb\x58\x40\xf6\xbf\xf1\x8c\x07\xd9\x49\x85\x4a\x71\x64\x66\xb0\x64\x1a\x30\x64\x2a\x8b\xe6\xf9\x91\x38\x5c\x6e\x2f\xf3\xa6\x8e\x2c\x97\x62\x29\x59\xd4\x87\x58\xcc\xe2\x3d\xba\xce\xe8\xe0\x64\x75\x00\x0c\xe4\x1e\x0b\x3d\x02\x06\xe2\xb7\x8e\x62\xb4\x59\x1b\xa0\x03\xed\xd3\x5e\x0f\x50\x4a\x75\x53\x89\x92\xde\x73\x23\x14\x58\xd5\xab\x78\x73\xaf\x64\xd8\x9f\x15\xd8\x99\xe0\x67\x71\xfb\x62\x60\xfa\x68\x8a\xe1\x20\x42\x21\x9d\x26\xd2\xfe\xfc\xe5\x09\x82\xec\xb9\xfc\x1d\xa6\x61\x19\x2e\xcd\x9c\x84\x15\xe2\x0a\xd5\x57\xa0\xde\x37\xdc\xf7\x4d\x7f\x79\xe8\xc3\x42\x75\xc1\x41\x6c\xce\x7a\xd5\x91\xf0\x35\x7a\xe6\xb6\x36\x3d\xb5\xad\xef\xd0\x9a\xf3\x4f\xa3\x6a\x17\x1f\x30\x38\x24\xbd\xa6\x7b\x26\xc9\xed\x76\x6f\x00\x5d\xde\xfe\xd8\x73\x7f\x8a\x72\xb1\x69\x6d\xd5\x7c\xba\xd7\x2c\x96\x97\xb7\xad\x9b\x2e\xe0\x55\x24\x13\x86\x83\x26\xf6\xc9\xd0\xda\x28\x2e\xaa\x93\xd5\xb2\xa7\xa2\xa6\x64\xbb\x88\x1f\x30\xc9\xd4\x12\xbf\x70\xcf\xf5\x1f\xb4\x89\x8d\xf4\x23\xe2\x82\xc5\x9a\x2a\xe7\x1e\x22\xfb\xd7\x20\x7a\x5f\xb3\xbf\x83\x50\xee\xc0\x10\x5d\x9e\xc3\x88\xef\x7b\x97\x90\x2c\xae\x98\x7f\x78\xf0\xb3\xb4\x1c\x87\x0f\xda\x47\x37\xd4\x40\x19\x23\xed\x98\x8b\xad\xee\xb7\xdf\xfc\xa7\xff\xbb\x23\x9c\xda\x5f\xd2\xf1\x9d\x68\x62\x39\x8d\xb1\x7c\xc4\x05\xcc\x14\xfc\x3c\x50\xbc\x36\x6e\x56\x77\x73\x93\x74\x32\x53\x20\x20\x36\x10\x2d\xeb\xa8\x58\xa9\xc3\x3e\x7a\xdf\x71\xcf\x65\xd4\xde\x1e\x6a\x78\xab\xf0\x12\x46\xe4\x57\xf4\xb8\xc8\xed\x9a\xb7\xda\xd1\xc3\x16\xe0\xa7\x1c\x56\x1a\xbb\x09\x3c\x46\xdf\x21\xd6\xd9\x48\xc3\x2e\x4a\x1c\x90\xd2\x0e\xd9\xcd\xaa\x21\xd9\x98\x88\xbf\x01\x10\x13\x94\x18\x77\x20\x9d\xdd\x8b\x2c\xa2\x57\x28\x56\x19\xf8\xca\x08\x7e\x54\x89\x45\xee\x80\xf4\xe3\x78\xa7\xc9\x05\x22\x21\xc7\xb4\xb8\x46\x7d\x9c\x24\x10\xfb\x9a\xf9\xaf\x4c\x4d\x6a\xf0\x61\x4a\xec\xe6\x3e\xd6\xca\xc0\x44\xc6\xc3\xdc\x5f\x02\x0e\xe8\x7a\xf2\x2a\x07\xde\xd6\x3e\x54\x5b\x64\xef\x6f\x9b\xb9\x03\x4b\x97\x1f\xc2\xe0\x8b\x5c\x0a\xd1\x1a\xc7\x85\x28\x55\xad\xf5\x16\x06\xdb\x55\x17\x69\x32\x15\x52\x42\xbe\xaf\x08\xe6\x18\xee\x6f\xe3\xd2\xba\x04\xd0\x00\x85\xe1\x10\x66\x9d\x7b\x31\x93\xe8\x02\x30\xd0\x89\x53\x3b\xaf\x58\xc5\xa2\x03\xaa\x66\x8a\xbc\xe7\xa7\x68\x94\x06\x81\x6d\xe7\x41\xae\x1e\x8d\x1d\xd3\x3c\x76\xa8\x41\xfb\xc7\x52\xb5\xb5\x7b\x31\x3b\x3c\xe7\x5e\x18\xfb\x2e\xf0\x94\x84\x31\x7a\x7c\x78\xc1\x41\xa8\xe4\x4e\xee\x1d\x06\x4f\xe4\x0e\x2b\xae\xda\xbc\x89\x3d\x23\xf9\xe7\xe8\xb1\x2d\xdd\x18\x2f\x28\x61\x9c\x7a\x1c\xe2\x42\xa7\x34\x23\x14\xf2\xba\xd1\xf3\x2c\xbc\xdc\x1f\xe2\xbd\xe8\xee\xe3\xb9\x97\xd4\x5f\x5e\x4b\xb3\xbf\x3c\x80\xd9\x48\x9e\x46\xad\xec\xab\x18\xcf\xa0\x64\x45\xd7\x82\x93\x59\x46\xbf\xfa\x8b\xfe\x86\x4e\xf9\x0b\xda\x1f\xc9\x2f\x86\x66\xfa\x8d\x59\x00\xb7\x72\xb1\x12\x83\x42\xde\x45\x23\xf7\x72\x88\xdc\x9f\xcd\x96\x85\x1d\x39\xfd\xf8\x64\x7d\x3d\x65\xb0\x6f\x50\x41\x31\xe1\x74\x89\x2c\x98\xac\xd3\x73\x13\x7f\xf4\x03\x2c\xbb\x98\xba\x14\x39\xf8\xe6\x92\xee\x9e\x11\xb2\x35\x03\x71\xf0\x8f\xe9\x11\x2a\xd2\xb5\xed\x1c\xd1\x90\x3c\xbd\x18\xf3\xa8\x6d\x7a\x1f\x6f\x2f\x6c\xc5\xfc\x30\x5d\xc7\xb9\xd6\xa4\x1f\x58\xd5\x5c\x67\x4f\x92\xda\x21\xd4\x0e\x87\x61\x56\xf2\x1a\x1c\x0a\x00\x23\x72\x5b\x5d\x18\x63\x67\x3b\x2f\xa1\x2c\x27\xd5\x8a\x60\x8e\xe9\x58\x91\x30\x35\xb9\xad\x21\xb1\xdb\xe5\xe1\x5d\xa8\x28\x58\x71\x66\x23\x91\x58\x80\x47\x28\xf7\xd9\xeb\xb4\xce\xc0\x39\xfe\xb9\x0c\xc7\xbc\xd6\xdd\x06\x39\x58\x0f\x19\x9a\xad\x45\x49\xee\x0f\xf4\xbe\x67\x7a\xb1\x02\x01\xf1\x9d\xcf\x4b\xe9\xe3\x5c\x75\x86\x90\x0b\xb5\xe1\x28\xb0\xb9\xdd\x70\x97\x49\x86\x88\xdc\x4e\x25\x49\x05\xa1\xb2\x49\x60\x1b\x47\x3f\x12\x2b\xba\xfe\x7c\x28\x50\x90\x8d\x75\xc1\x55\x57\x84\x28\x1a\x4d\x45\x6d\xb9\xb9\x8b\xcc\x4f\x14\xf9\x78\xba\x9f\x48\x32\x04\x04\x11\xb9\x4a\x45\xb6\x86\xdc\x90\xb6\xf9\xb2\x0f\xca\x59\x61\xc3\xf9\x52\x88\xf6\xa0\xdd\xbd\xef\x9c\x80\x3a\x8d\xea\x1e\x8b\x64\x9e\xe0\x17\x93\x2f\x95\x91\x03\x68\xa0\x53\x5a\x61\xd3\x35\x48\x2d\x86\xfb\x7b\x78\xdb\x82\xbe\xf7\xd1\x77\xc2\x20\xe5\x37\xa5\x6b\xcf\x6f\xcd\xb2\x0c\x17\x4f\xba\xe8\xa8\x13\x66\x67\x08\x4a\xeb\x92\xe4\x31\x23\x44\xe5\xd5\x27\x4d\x6e\xd8\xc1\x40\x9d\x99\x70\x0e\xb3\x06\x81\x85\xd8\xe1\x44\x7d\xb5\x35\xda\x12\x64\x33\xf8\xfe\xb8\xbd\xc5\x68\x09\xb9\xdb\x05\xd0\x3c\x1a\x88\x22\x47\x1e\x7d\x3e\xdf\x11\x59\xe1\x13\x5c\x8f\xb0\x64\xe4\x3f\xf6\xe5\x07\x01\x0c\x6a\x7e\x96\x08\x0c\xfe\xc1\xcb\xac\x20\x1f\x2c\xc0\xb1\x59\xf1\xfe\x45\xb0\xeb\x63\xcb\x07\x00\xb8\x51\x16\xc0\xc2\x72\x8e\x9a\xef\x6c\x48\x7d\x27\x2d\x60\x58\x9b\x13\x30\xa4\x55\x6d\x30\xe3\xe7\xff\x27\xf3\xfc\x2e\xd5\xe7\x02\x04\x20\x29\xe2\xa2\x3e\xe6\x6d\xe9\x8f\x85\x4c\x16\xd6\x3d\x0d\xa4\xb5\x16\x2b\xc3\x86\xbe\x25\xe5\x0c\x23\xb6\x32\x4f\xf5\xd5\x43\x23\xef\x1f\x50\xcd\x90\x4d\x1b\xb7\xb8\x10\xa0\xb0\xcb\x15\x4c\x71\x03\xdb\xcb\x5d\xa5\x82\x68\x5f\x7f\x8e\x9d\x62\x67\x89\xe9\x2d\x1f\x19\x52\xa1\xd1\x9b\x52\xc5\x64\x5e\x30\x90\xe5\x29\x49\x33\x9e\x44\x1e\x6e\x55\x11\xed\x9e\xe2\x5a\x26\x3d\x56\x07\x9a\x90\x47\xe5\x30\xf9\x49\xe2\x48\x7d\x03\x7c\x3f\x09\x4f\x93\xdd\xed\x7b\x71\x19\xa6\xd0\x8e\x02\x9b\xdf\x0c\xcb\x43\xf9\x28\x0d\x32\x5f\xc3\x4e\x8e\x22\x58\xc7\xb0\x82\x06\xb3\x9a\x50\x7f\xb8\x27\xd7\x44\x35\x19\x83\x9c\x34\x0e\xda\xe4\xd3\x49\x65\xb3\x4d\x39\x66\x64\x8d\x61\x50\x9b\xf9\x00\xf2\xac\xdb\x8a\x12\x38\x51\x87\x2b\xf3\x9f\x57\xa9\x88\xa9\x71\x91\x61\x44\xf7\xd4\xce\x16\xbd\x76\x75\x92\xed\x33\x58\xa2\x71\x43\x8c\xad\x39\xc7\x46\xb7\xca\xc8\x92\xd1\x88\xe6\xab\x6b\xf0\x45\x6e\x60\xa6\x3a\x2c\xe9\x64\x7b\x89\x18\x06\xac\xb1\x46\x17\x7d\xd8\xd0\x2b\x91\xd2\x94\x63\x40\x4f\x99\x69\xa7\x16\x82\x60\x59\xce\xac\x65\x47\xa4\x78\xfe\x4b\x12\x2b\xe0\xf2\x82\x2e\x5e\xd5\x17\xce\x66\x52\x6d\x01\x76\xbb\x42\x60\xd6\x7e\x72\x58\x49\x13\xef\xae\x18\xa1\xa9\xab\x38\x4b\x74\x3d\x12\x2f\x84\x28\x87\x29\xfc\x4c\x11\x8b\xd9\x50\x5b\x37\xed\x23\x70\x52\xa5\x2c\x90\x15\x36\xb4\x2f\x91\x79\xd3\x6d\x27\x3b\x9a\x74\x4d\xd2\x37\xa6\xcb\xe1\x83\xfd\x6a\x33\x42\x72\x9e\xf9\xed\x15\xa6\xac\x84\x7b\x51\x42\x5c\x78\xf6\x4a\x4b\x4a\x8d\x96\xd4\x7e\xe2\x5a\x9e\xb6\x4d\xc0\xfb\x08\xc4\xb9\x05\x85\x65\x06\xdf\x8b\xb5\xb6\xa7\x6e\x6b\xc6\xc8\x74\x5d\xd5\x31\x4e\x1f\x97\x3c\xac\xc7\x44\x60\xbb\x98\x2f\xb2\x03\x72\x8f\x8e\xff\x5b\x7c\x94\x19\xe2\xa4\x3d\x43\x7d\xec\x0e\xde\xe0\x49\x96\xcd\xc4\x2b\x8b\x7d\x6a\xae\x09\x56\xbf\x9c\x62\x60\x0a\x6f\xfd\xb2\x27\x29\x46\xe2\xd5\x0c\x09\x76\x91\x47\xfb\x00\x36\xe9\x25\x56\x56\xa4\x75\xe5\xfc\xbd\xd6\xbb\x36\xaf\xf4\xe6\xda\xa4\x1a\xe7\x78\x3e\x3a\x81\xcd\x27\x20\x9c\x74\x78\x23\xdd\xcf\x57\x57\x0a\xea\x78\xce\xa5\x7d\x44\xb9\x62\x2f\x9a\x0c\xd4\x03\xab\x9f\xa8\x2a\xa9\x4e\xd2\x2f\xb9\x3d\x22\x22\x39\x19\x8d\x6f\x11\x4a\x48\x48\x69\x84\xc9\x4b\x96\x92\x72\x5d\x76\x40\x99\x41\xe8\xa0\x14\xbb\xe0\x85\xce\xa9\x54\xbd\x90\x7d\x00\x94\xf8\x44\x99\x64\x0f\x74\x0d\xe0\x4d\x7f\x9a\x76\x46\xed\x6c\x4f\x11\x07\x66\x21\x23\x70\x58\x9a\x29\xfa\x59\x3f\x96\x2a\xe4\x4a\x49\x05\x72\x7b\xc8\x5b\x34\x71\x7b\x35\x38\x8e\x42\x49\x8e\x4d\x5d\x8b\xa9\x8b\x36\x71\xec\x2a\x34\x98\xcc\xe1\x65\x05\xa2\xec\x47\x03\x12\xba\x5e\x4d\xef\xe1\x82\x34\xf1\x51\xbf\xce\x73\x51\xf0\xdf\x5d\x3d\xaf\xfa\x92\xf5\x91\x65\x0d\x0f\xc4\x87\x4f\xeb\xa0\x9a\xd1\xb4\x1a\xa2\x76\x41\xee\x42\xa4\xa6\xc7\x49\x73\x5f\xe7\x37\x8f\xa1\xc6\xc0\x46\x22\x92\x42\x0e\x7e\x3c\xdd\x49\x9d\x36\xf5\x86\x57\x8d\x1c\xee\x32\xcc\x88\x29\xf3\x2c\xdf\x09\xdf\x9f\xe9\x54\x32\x28\x24\xd2\x44\x17\xa4\xc8\xbf\x4d\xd5\x65\x2d\x3f\xda\xef\xbd\x2e\x99\xe9\x54\x50\x81\x7c\x8e\xaf\x69\x11\xcd\x6f\x13\x52\xf7\x7d\x5b\x11\x1a\x31\xe4\xa0\xb6\x2f\xe8\x69\x1d\x1d\xb9\x8a\xe4\x64\x53\x3e\xd9\xcb\x9f\x20\xa0\xb3\xf8\xaf\xfd\xdf\x1c\x4f\x35\xb5\x2d\x9d\x8f\x64\xd5\x17\x75\x69\x2d\xbf\xc2\xd1\x7a\x99\x52\xc2\xe6\xc6\x80\x87\xc2\xe2\xce\x17\x74\xa0\x08\x5c\xe8\x0f\x44\x70\xca\x98\x2a\x35\xd9\xf6\xc1\x4d\xe4\xe1\x22\xdf\x17\x0d\x96\x41\x75\x23\x7a\xcc\x2c\x76\x99\xf2\xfb\xaa\xe8\xe3\x63\x97\x0b\xbd\x46\x0e\xdf\xfc\xd4\xa9\x80\x9b\xbc\xe8\xa3\x55\x10\x91\x28\x7e\xef\x30\x3d\x03\x8b\x1e\xed\x62\x1b\x1f\x72\x50\x4e\x16\x78\xb9\x96\x20\x63\xed\xae\x44\x1b\x74\x87\xd7\xd2\x4e\xff\xbf\xab\x83\xd5\x5a\x9e\x13\x4f\xbf\xa8\x15\x22\x64\x03\x62\x8b\xb0\xc6\xe7\x16\x3b\x88\xfb\x36\x69\x51\x80\xeb\xd9\x16\x21\xda\x8c\xde\x6e\x04\xea\x88\x2e\x97\x97\xab\x13\xfd\x78\xee\x5b\x4b\x4c\x83\x53\x68\xd0\x00\xd5\xe0\xb9\xd2\x6e\x3c\xa0\xa3\xd7\x26\x03\x0a\xda\xea\x8e\x39\xff\x21\x2a\xd8\x7c\xdd\xb3\xe8\x95\x72\x74\xd9\xf4\x3c\xaa\x97\xb3\xcb\x6d\xc5\x10\x73\x7b\x22\x26\xc1\x5c\x93\x5d\x26\xaf\x9c\x35\xec\xd8\x92\x99\x82\xbe\x70\x79\x5c\xe6\xaf\xd4\x05\x1e\xd0\xd1\x33\x41\x5e\x9f\x37\x4b\xbe\xae\xdf\x83\xa4\x9a\x69\x51\x51\xfd\x77\x8c\x12\xb1\xeb\x12\xfe\x70\x43\x8b\x72\x77\x5f\x32\x4f\xc3\x42\xa8\x68\xa8\xa4\x39\x54\x49\x32\x38\x27\x74\x68\x29\x7d\x17\x6f\x5f\x08\x22\x17\xd0\x45\xcc\x22\xef\xed\x68\x0c\x2f\x26\x33\xcf\x75\x76\x2b\xf3\x0d\x65\xbc\xdc\x36\x26\xba\x2a\x52\xe6\x06\x52\x78\xc5\x32\x3e\xb7\x4e\x21\x97\xe7\x0a\xdc\x60\x69\x05\xf6\xc3\x35\x71\x76\x4b\x96\xcb\xbd\x4c\xfb\xa8\x55\xd1\xf6\x25\x43\xa4\x3e\x5d\x6e\x25\xc8\x99\xa3\x72\xd1\xc0\xdd\x4c\xb5\x49\x67\x2f\x17\x7c\x5e\x32\x51\x52\x3d\x7b\xea\x71\xa7\xda\xbb\x47\x67\x43\x84\x82\xc5\x23\x71\x1b\x79\x42\x3f\x4b\x9f\xf8\x9c\x5e\xb3\x7c\x67\xd6\xd4\xf2\xbc\xb3\xc5\x62\x08\x65\x59\x49\xae\x7f\xc5\x5e\x48\xf7\x4d\x2c\x8f\x4c\x8d\x21\x4d\x85\xb9\xfd\x81\xb4\xc0\xaf\x50\xe6\x94\xa8\x1b\x4a\xec\xdd\x96\x19\xec\x56\x87\xb4\xbd\x40\xaa\x49\x66\xd3\x00\x21\xa2\x4b\x89\xe8\x52\xdc\xc1\x83\x8d\xfd\x6b\x33\x8f\x78\x11\x78\x28\xf6\x81\x2d\x63\x87\xf1\x17\xba\xb9\x56\x8b\x5e\xbd\xbc\x6b\x68\x07\xae\x1a\xcb\x37\x26\xf7\xa7\xea\xba\x91\x5c\xa1\xc2\xed\x4d\xde\xbd\x10\x34\x2e\xb1\xce\x5c\xc3\xd3\x92\x3d\x5f\x42\xb0\xf4\xee\xb8\x60\xf8\x67\xed\xc2\xe2\xfe\xbe\xff\x04\x05\x19\xcc\x7d\xcc\xb1\xb7\x1f\xeb\x87\x3e\xa7\x69\x4c\x1a\x44\x66\xa2\xc9\x56\xfb\xee\xc3\x34\xec\x1f\x82\x7a\x6d\x06\xaf\xa3\xec\xab\x7c\xca\x4b\x78\xdf\x60\x2a\x0e\x99\x21\x9d\xf9\x7c\xe0\xa2\x14\x8b\x6f\xa2\x82\xc0\x94\x30\xb6\x9d\xfb\x5f\xf4\x13\xaa\x2d\x4a\x5e\xfa\x78\x78\xa4\xab\x92\xc3\x0f\xe2\x3f\xb1\xde\x89\x74\xa6\xbc\xe2\xce\x96\x03\x18\xb4\xa0\xe0\x3c\x5b\xac\x1c\xe7\x36\x8b\xeb\xfe\x93\xd4\x98\xb0\x07\xcb\x58\xbf\x16\x06\xee\xf6\x35\xf8\x52\x72\x37\x1e\x6b\x6c\xfb\x53\x79\xde\x6c\xc4\xc0\x90\x6b\x34\x87\x78\x53\xb5\x8d\x76\xb4\xe0\x61\x02\x3e\x6c\x8a\x69\xbb\xf7\x05\xf4\x33\x72\x09\x55\x3e\x20\xfa\x0a\xb6\xf7\x50\xe8\x70\x7c\x63\xfc\x94\x9f\x3d\x9c\x1c\xc2\xe9\x90\x57\xdb\x17\xf1\xa4\xe0\x09\xea\x8d\x72\xfc\x74\x19\x6e\xb8\xe3\x3e\x2d\x50\xcd\x36\xa9\xd1\x32\xbf\x41\x9d\xec\x33\x8d\x03\x3c\x17\x05\x0d\x64\x60\xbb\xfe\xc7\x9c\x14\x14\x76\x71\x0a\xa9\xb5\x5b\xb8\x4a\x5f\x7f\x06\x6d\x7d\x5f\x7a\xd8\x77\x15\x5c\x30\x84\xb4\x7d\xe9\x01\x2d\x9f\xd1\x74\x19\xbf\x61\xd8\x32\x7a\xb9\x1f\x73\xc2\x38\x8a\x99\x0e\x21\x28\x10\xc0\x3c\x4c\x15\xff\xa2\x7b\xff\xc2\xfa\xd5\x36\xd1\x2b\x8b\x92\xc5\x68\x1c\xf3\xe6\xb8\x21\x8f\xd0\x7b\x9d\x86\xf1\x56\xbd\xe0\xbb\xf5\x47\xf0\xd2\x4b\xce\xef\xc4\xfe\xcc\xae\xc4\xd1\x61\x99\x1b\x79\x92\xef\x50\x5f\xb2\x4b\x15\xf4\xdd\xf6\x32\xdb\xcf\x72\x9b\x14\x53\x35\x3b\x0c\xe7\xb4\x40\x5c\x8d\x62\x95\x29\xa7\xdd\x6a\xdd\xd4\x64\x67\x2a\x65\x66\x00\x72\x6c\x91\x10\x19\xf1\x9a\x9d\x88\x6f\xbc\xcb\x67\x31\xb4\xd0\x6e\x7b\x29\x09\x2a\x82\xac\xfb\x03\xd3\x21\x35\x21\x45\x54\x83\xe5\x63\x35\x3e\xb3\x24\xac\x7b\xde\x66\x4a\xa6\x1f\xe4\xe1\x22\xc1\x97\x18\xc8\x2c\xe0\x0e\x3e\x38\xa9\xbb\x60\x48\xbe\xff\x0b\x6a\xfc\xa3\x56\x75\x53\x02\xed\xa9\xf5\xa2\x06\x16\x4f\x0a\x5d\x44\x92\x09\x68\xcc\xa0\x43\x81\x80\xdd\x31\xa1\x35\xfd\xfc\x18\x08\x85\x72\xe2\xdd\x46\x95\x31\x73\x62\x2a\xbb\x3a\x50\x18\xdd\xd3\x86\xad\xd6\xda\x44\x00\x6a\xbc\x54\x28\xf8\xa2\xd4\xf1\x77\xdf\x58\x21\x90\x16\x56\xb0\xaa\xcf\xfd\x7f\x0f\xce\x47\xe6\xd6\x52\x1b\x87\x80\x2a\x16\x34\xbc\x0a\x31\xb5\x2c\xc4\x0c\x5c\xe3\xb1\x4c\xf7\x82\x61\x45\x20\xb1\xd5\x0a\xdd\x9d\xe3\x08\x5d\x09\xb4\x53\xfc\x31\xe6\x6f\x73\xdf\xaa\x80\x27\x7d\x15\x57\x70\xcc\x89\x48\x89\xe9\xe1\xde\xd9\xdb\x3d\x54\x00\xb4\xdd\x1a\xcb\x14\x50\x15\xa1\x60\xba\xbb\x22\x47\x32\xa6\x32\x2d\x4f\xec\x41\xe9\x9b\xd6\x65\x64\x13\x4c\x1f\x35\x6d\xad\x02\x27\x59\x80\xb8\x04\x67\x6f\x1e\x51\xcc\xdd\x21\xed\x38\xc5\xd7\x07\x59\xdc\x7a\x2e\xc8\x75\xf3\x79\xad\x54\x8b\x22\x35\x6e\xef\x84\x05\xdc\x41\xa7\x23\x5b\xd0\xe6\x12\xf2\x5a\xfb\xdf\x2c\x0a\x2d\x64\xbf\xf4\xae\x7a\x22\xe2\x39\xe2\xd2\xc4\x7e\x3d\x8b\xd7\x86\x45\x34\x91\x72\xc4\x54\xe2\x02\x3e\x28\xa2\x5a\x6e\x94\xc7\x55\x65\x49\xd6\x25\xd4\x79\xe2\x8d\x24\x9a\x5f\xf3\x18\x9c\x85\x6b\x5c\x4b\x64\xd5\x19\xd9\xcd\x96\x0f\x44\x30\x27\x14\x76\x03\xd7\xda\x00\xf1\x52\x43\x33\x44\x1e\x51\xd0\xd5\x67\xa2\xe8\x2c\xae\x40\x6e\x79\x14\xd6\x89\xd1\x90\xae\xe9\x18\x9d\x48\xdd\xd9\xc6\xdc\xa2\x94\xc3\x81\xa5\x71\x36\xd9\xa8\x86\xde\x23\x56\x41\xcd\x54\x10\xf7\x49\x44\x6c\x19\xd3\xa7\x86\x09\x6f\x8a\x92\x2a\x5e\xb9\x71\x58\x1a\x71\x49\xed\x11\x2e\x4b\xe1\xe9\x68\xa9\x2a\x14\x62\xbf\x5d\x81\x09\x79\xd1\x3f\xb7\xb2\x15\x29\x82\x2f\x32\xca\x5a\x64\xd9\xcf\xf4\x37\x2d\x3c\xad\x2e\x37\x6c\xab\xa6\xee\xfa\x37\xe3\xa4\x80\x52\x4e\x7c\x56\xfe\xde\x40\xbf\xb7\x3d\x97\xe9\x92\x97\x46\x4a\xc8\x52\x63\x2c\x89\xd9\xfc\x37\x3b\xe1\x13\x3e\x6d\xa5\x4a\x40\x9b\xf6\xad\xbf\x96\x6d\x48\xb1\x6f\x6a\x87\x2c\x94\xdb\x1e\x61\x38\xee\x43\x79\x5d\xf8\xdd\xe3\xe0\xd0\x04\xb6\x58\x97\x06\xf4\x74\x06\x9b\x36\x3c\x5e\xb9\xc6\x4a\x87\xd2\xc5\xf6\x2f\x91\x43\xd5\x63\xc5\x70\xfe\x77\xab\x72\x73\xe1\xdb\x6e\x90\x38\x46\x1d\x1a\x41\xec\x24\x9a\x7e\xcc\xe6\x92\xc4\xee\x2f\xb9\xc8\x9f\xa3\x5d\x4f\x47\x11\xd0\x01\xac\x75\x61\x85\x14\xd6\x41\x2a\x28\x53\x52\x7a\x28\x7b\x41\xd8\xaf\xab\x28\x08\xb4\xea\xff\xe8\x22\x83\xa5\x02\x75\xbb\xbf\xf9\x17\x4b\xd5\x4e\x69\x4b\x9d\x56\xb0\xf6\x35\x19\xb1\x78\x39\xa4\x0f\x85\x32\xae\x85\xea\xd5\xc5\x18\x52\x8b\x84\xbd\x30\xaa\x8b\xe3\x69\xba\xaf\x54\x64\x88\x16\xcc\xca\x8b\x01\x70\x08\x48\x78\x4f\x8b\x53\x24\xb9\x0a\xde\x25\x2c\x22\x0b\x58\x19\x13\x1d\x29\x7b\xee\xe8\xa9\x90\x70\x46\xac\x52\x01\xcc\xda\x28\x5d\xdd\xf7\x37\x27\xda\x18\x23\xe3\x14\x78\xdf\x0b\x49\xd7\x45\x3f\xbb\x3b\xf2\x0e\x5f\xf6\xa9\xde\xb6\x44\x90\xfd\xa3\x7b\xe8\xc4\x2f\x84\xa8\xa3\xe4\x24\x04\x60\xc9\x43\xab\x12\x8a\xf2\x57\xea\xb1\x1f\xe3\x9f\x16\x5f\xf8\xc5\xae\x8b\x91\xa1\x7d\xe0\x6f\x6a\x54\x48\xe1\x96\x4f\x4b\xdd\xbd\x6e\xcf\x2b\x7b\x48\x5b\xd0\x0c\x2b\x10\x22\x2d\x50\x35\x94\x84\x89\x2b\x6b\x5d\x4e\x30\xc2\x2f\x84\x24\x32\xf2\x25\x2e\x8c\xd1\x26\xeb\x6c\xbe\x65\x06\x92\x2b\x75\xe1\xf5\xcc\xa3\x63\x82\x30\x0d\x0f\xb9\xcd\x41\x07\x96\x9a\x8a\x91\x3b\x93\x35\x89\x17\xdc\xb1\xb3\x14\xae\x79\x08\x25\xc2\x7b\x68\xe7\x10\xce\x1a\xd6\xb4\xb8\xae\xd7\xc3\x52\xea\x1b\x70\x36\x1f\xad\x1a\x24\x34\x38\x8b\xe5\x67\xa0\xc1\x39\x8c\xcc\xcb\x43\x71\xf1\xac\x4a\x1f\xb1\xd3\x73\x70\xc2\x22\xb1\x62\xe5\x93\xb9\xe9\x45\x42\x77\xfc\xd3\x01\x64\x47\xc1\x01\x96\xf8\xe2\x2c\xb1\x36\x51\x8a\x5e\x09\xfa\x08\xe3\xa2\xf9\x84\xcb\x3a\xe1\x38\xf3\xc2\x00\x49\x61\x7f\x5a\x4e\xa1\x6b\x3d\x0f\xd2\xa1\xfa\x3a\xf8\x22\x7c\x11\x20\x87\xaf\x8b\x2a\xf7\x86\xd6\x35\x75\x3f\x89\x4f\x54\xef\xa8\xa6\x10\x39\x34\x95\xe2\xdb\x1f\x1b\x7c\x76\x31\x19\x3d\x80\xd1\x55\x37\x6f\x67\xc4\xfb\x74\xac\x62\x15\x4c\x73\x44\x2f\x85\x8d\x50\x62\xe3\xb8\xcc\x56\x81\x57\x9d\xb5\x3c\x58\x9a\xeb\xe0\x21\x1f\x03\x5e\x35\x67\x18\xbf\x11\xfa\xaa\x4a\x6a\xad\xdc\x64\x0d\x2a\x61\xed\x02\xd8\x65\x20\xcb\xb2\x70\x4c\x92\xe8\x16\xe3\xe7\x4c\x39\x8f\xa4\xd4\x2b\xb4\x57\xb7\x4a\x02\xa2\x94\xeb\x43\x67\x86\x43\x62\x20\x46\x3d\x9e\xb0\x32\x43\x45\xd2\x2c\x61\xed\x09\xfd\x21\x1e\x48\x86\xf7\x25\x8b\x33\x0d\xa7\x82\x99\x68\x1a\xfc\x9a\x8e\xb5\x12\x2b\xc6\x7c\xa9\x38\x74\x0a\x2a\x40\xc6\xf8\x91\x6c\x4a\x8d\x59\x81\x9d\x1d\x48\xbe\xe5\x18\x28\x0b\x1e\x22\xc1\x36\x50\x57\x4c\xd5\x6a\x14\xde\x11\xca\x67\x8e\x9c\x1a\xa7\x34\xfa\x54\x47\x97\xdd\x8c\xc1\xfe\x57\x19\xb4\x68\x60\x3e\xbc\x81\x51\xb0\xfc\x97\x06\x7a\xed\x80\x3d\x7b\x86\x9f\xed\x04\x38\xdf\x26\x71\x14\xbd\xcd\x8b\xa2\x52\xcc\x4e\xca\x84\x7d\x19\xe8\x02\xc0\xe3\x3a\xe1\x82\x8c\xde\xe2\xa8\x28\x00\x2c\xc3\x45\x6a\x31\xa6\x47\x51\x81\x26\x11\x97\x34\x7f\x51\x89\xe3\xa8\xa2\x58', 1) \ No newline at end of file diff --git a/specx/festival-1.96-39.fc29.src.rpm b/specx/festival-1.96-39.fc29.src.rpm new file mode 100644 index 0000000..d067d32 Binary files /dev/null and b/specx/festival-1.96-39.fc29.src.rpm differ diff --git a/specx/festival-2.5.0-3.fc29.src.rpm b/specx/festival-2.5.0-3.fc29.src.rpm new file mode 100644 index 0000000..8ec3fbb Binary files /dev/null and b/specx/festival-2.5.0-3.fc29.src.rpm differ diff --git a/specx/gitee_new.py b/specx/gitee_new.py new file mode 100644 index 0000000..d745c74 --- /dev/null +++ b/specx/gitee_new.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 +from pytransform import pyarmor_runtime +pyarmor_runtime() +__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x06\x00\x33\x0d\x0d\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xfc\x36\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x50\x8c\x64\x26\x42\xd6\x01\xe8\x4b\x62\xdc\x99\xb4\x64\x1f\x06\x3c\x75\xfc\xe7\x31\x5b\x73\xe3\xf6\x9f\x3f\x40\x6c\xbe\x94\xeb\x70\x52\x18\x3c\x95\xbb\xfe\x30\x42\x90\xa7\xb6\x4f\x44\x58\xb9\x1d\xa3\x87\x81\xd3\x4c\x9e\x70\xe5\x65\x56\x1f\xbd\x38\x1a\xc6\x8f\x74\x7c\x49\x3a\x85\x26\xb9\x2a\xdd\x17\xbc\xc3\x08\x7b\x24\x55\xd1\x7a\x08\x29\x62\x3a\x83\xcd\x25\xc8\x85\x8b\xb1\xc3\xd2\xd2\x1a\x56\x6c\x23\xd8\x3c\xef\xaf\x41\xf4\xef\x07\x57\xec\x1b\xa9\x4b\x70\x75\xd5\x50\xfd\x0a\x63\x1b\x47\x31\x57\x39\x5f\x21\xa4\x2c\x6b\xfb\xf2\x37\x82\x5f\xb5\xf2\xc3\x96\x71\x0e\x5b\x32\x19\x60\xd6\xa9\xbf\xc8\x2c\xec\xbf\xf5\x38\x2e\xb4\x5c\x6f\x95\x17\x6e\xab\xc1\x92\x41\xd9\x70\x49\xe7\xb9\x31\xfd\x9c\x93\xe4\xfb\x10\xd6\x16\x8b\xc2\x7f\x17\xd2\xa2\xc0\xe5\x77\x10\x89\x8b\x53\x9e\x98\x27\xab\x20\xcc\x3a\x5f\xf6\x17\x5d\x79\xb2\xc1\xa1\x9c\x24\x42\x28\x98\x9d\x97\xe9\x7a\xce\x52\x66\xcd\x7c\xec\x40\xe2\xea\xbb\x66\x94\x19\x3c\x52\x9b\xa2\x82\x44\x45\x2f\x26\x9d\xda\xbb\xdd\xad\xf1\x47\x83\xa7\x67\x16\x6f\xc0\x0b\xb4\xce\x38\xd7\x07\x4c\x50\x71\x48\xfd\x7c\x8b\x79\xfe\x13\x3b\x46\x66\xcd\xed\xa5\x93\x06\x8f\xed\xb1\x2d\x43\x29\x5a\x0a\x4a\xa4\x0c\x90\x6e\x8f\x9a\xa7\xd4\xb7\xe8\xe8\xbb\xe3\xc1\x7a\x07\x52\x09\x1a\xc9\xe6\x1c\xc2\xf5\x03\x50\x68\xbe\x14\x7a\xed\xc7\x2f\x33\xee\x43\xe1\xb6\x4f\x63\x5a\xdd\x51\x28\xbf\xf5\x28\x18\x12\x30\x20\xd1\x2b\x87\xc1\x97\x8e\xa1\x1a\xc5\x06\x7b\xd8\x17\xaa\xfb\xba\x31\x00\x69\x61\xfc\xe7\x79\x46\x1d\xce\xcc\x38\xf7\xec\x8a\xd3\xff\x42\x80\x71\x42\x17\xf0\xc0\xa3\xda\xff\x0c\x29\x7a\x32\xdb\x29\x80\xab\xaf\x52\xab\xe8\xde\x45\x88\x59\x14\x66\x01\xa1\xba\x13\xb6\x64\x13\x9c\xcd\xc2\x01\x6b\xdd\x72\x3f\xb5\xbc\x42\xf8\x9b\xad\xc9\xcc\x94\x39\xa7\x06\x49\x6c\x64\x4a\xea\x5f\x84\xcc\x81\xa2\x1a\x9d\xc1\x45\x5f\x23\x1d\xed\xf3\xba\x11\x70\x6b\x74\xfe\x8e\xc3\xa8\x88\x1c\xc0\xd2\xf6\x06\x4c\x0d\x33\x45\x2e\x79\xa7\xb7\xf9\x8c\x80\x32\xa8\x0a\x15\xe0\x7b\x8f\xb6\x68\xf9\x15\x10\xf5\x74\xff\x1e\xcd\xaf\x1b\xdd\xbd\xbb\xcb\xef\x7c\x55\x0a\x5b\xfd\xdd\xcb\x65\x50\x0d\x4e\xff\xd3\x09\xf9\x4e\xcb\xa0\x2f\xbb\x88\x9e\x66\x1d\x0a\x1d\xd4\xb9\x6c\xe8\xb9\x02\x6e\xfb\x5a\x26\x69\xcd\x48\x44\xf0\xb5\xe5\xda\xc5\x8f\x10\xeb\x8d\x9d\x7f\xac\xad\x99\xdb\x86\xd8\xb0\x07\x67\x22\xea\x52\x68\x8c\x45\x5b\x09\xe5\x75\xcc\x51\x48\x4a\xc8\x9a\x2a\x9a\x3a\x3a\x9c\x68\x89\xdf\x3e\x67\x35\x57\xa1\xab\xff\x17\x54\x8e\x72\x27\x01\xa3\x56\x32\xd0\x97\x4e\x7a\x94\xa9\x6a\x4b\x06\x83\x68\x51\x75\xb0\x16\x54\x8d\x85\x0b\xea\xc0\x48\x17\x0d\x01\xa5\xa4\x8d\xf9\x60\xe1\x11\xd8\x37\xf6\x17\xa3\x46\x1c\xa4\xf3\x1f\x3d\x4a\x68\x65\xd6\x0b\x33\x01\x18\xe6\x5a\xb8\xd1\xed\xb3\xd0\x4c\x6b\x90\x0d\x08\x9f\xcc\xc2\xe3\xaf\x9c\x89\xbd\xe3\x95\x37\x8d\xd3\xe6\x95\x3b\xeb\xd5\x2e\xa3\xf7\x10\x7f\xd6\x72\xcf\x0c\x67\xc6\x82\x36\xc9\xee\x57\x77\x9d\xc7\xa9\x01\xe0\x03\x5e\x5e\xf7\x57\x67\x7d\x74\x37\xf7\x50\xeb\x31\xe3\xf7\xd8\xdc\x55\x11\x73\x3b\x57\xab\x9f\x23\xfe\x1e\x4a\xdf\xec\xae\xb4\x56\x27\x90\x5d\x38\x1b\x48\x97\x88\x15\x8a\x25\xd9\xf0\xc4\x19\x5f\x4a\x48\x21\x96\xcd\xe6\x35\x5a\xfe\xcc\x48\xc3\x75\x57\x17\xad\xaa\xa2\xea\xf9\xda\xc5\xe5\x4b\x2a\x61\x5a\xcc\x12\x03\xdc\xd7\xb7\xc1\x24\xa4\x18\xbd\xfb\xc3\xae\x04\x6a\xce\x5b\xeb\xc9\x9d\x17\xc9\x15\x9b\xf7\x7f\xb3\xe8\x88\xa9\x53\x83\xa7\xf9\x8e\x69\x0b\x7a\x9d\x20\x91\x59\xf8\x44\x7c\xbd\xbb\xd3\x73\x10\x27\x9e\x6d\x8d\xb2\x89\x29\x43\x14\x96\x80\xce\x14\x74\xb4\x44\x83\x32\x8e\xaf\x5d\xb9\x0a\xb6\x66\xc4\x34\x55\x93\x45\x86\x06\x24\xdd\xe7\xec\x69\xea\xb1\x2e\xab\xc8\x43\x61\xd0\x79\x27\xa5\xad\x38\x85\xc3\x10\xd2\x84\x70\x1c\x26\xe7\x99\x6f\xb1\x1c\x66\x74\x1f\x9d\x77\xd5\xe7\x5d\x32\xb2\xdd\xfb\xe9\x56\xc8\xe7\xc6\x38\x25\xf3\x98\xf6\xa0\x26\xe8\xb0\xb6\x9d\x65\xed\x0a\x8e\x8c\xfd\xe4\x5d\x4f\x8c\xb8\x72\x2e\x4b\x6b\x26\xd4\xc5\xd3\xe2\x75\x0b\xa0\x44\xd9\xf1\x89\xb8\xa2\x07\x69\xd6\x9a\x63\xc9\x31\x67\x21\xf1\xf1\x2d\xec\x7b\x63\xb4\xe9\x33\x96\xee\x5f\x4d\x47\x7e\xda\xbc\x88\x7b\x98\xb6\x3b\x41\x2a\xca\x1c\xd9\x9c\x94\xd2\x3a\x27\xaa\x7c\x93\xee\x64\x44\xab\x98\xa0\x7d\xc9\x8d\x2c\x40\x70\xbc\x41\x2e\xab\x57\xaf\x91\x4f\x1d\xb0\xe5\xfe\x0e\x1a\xb3\x65\x4b\x9d\xc0\x36\x88\x80\xd6\x6e\xa1\xcf\x1b\xfb\xf8\x8c\x3e\x45\xe1\x01\x77\xfe\x09\xea\xc3\xf9\x91\x03\x3b\x96\x83\x1f\x02\x7a\xbb\x26\x16\x78\xcd\x19\xfd\xc6\x13\x29\xe4\x81\x11\xbc\x69\x67\x9f\xf2\xa5\x83\xed\xb4\x2f\x8f\xa8\x14\xaf\xf7\x91\x86\x4b\xb8\x9a\xf5\xbf\x78\x94\x74\xab\x04\x1d\x96\x01\xac\x4f\xe8\xb3\x39\x34\x82\x64\x15\x47\xce\x13\xa2\x3c\x7f\x0b\x0c\x56\x75\x24\x38\xca\x7b\xb9\xc8\x66\x51\xaa\x04\xab\x6e\x44\x71\x17\x70\xf6\xac\x8d\x87\xd3\x03\x93\x25\x82\x50\xd9\x78\x2a\xed\x24\x93\xb6\xa8\x28\xe0\x73\x57\xbb\x02\x23\x82\x28\xeb\x95\xb8\x7b\xb5\x78\x5a\x8b\x25\x60\xea\xd7\x00\xe3\xb5\x23\xef\x33\x33\x7b\x65\x7c\x21\xee\x92\x96\x0c\xdd\x61\xf3\x6e\xaa\xe7\x9f\x62\xc3\xdc\x55\xd6\xf6\xae\xd6\x67\x65\x0c\xff\x59\x32\x33\xc2\x62\xeb\x62\x6e\xac\x7c\xfb\x25\x80\x5b\x90\xfe\x95\xb0\xa3\x09\x46\x52\xcf\x5b\xda\x7f\x73\x53\x6c\x01\xff\x94\xc7\xee\x4c\xc6\xed\xeb\x18\x8c\x12\x13\x45\x8a\xf9\x31\x04\xb2\x63\xa5\x09\x73\x92\xc8\x53\xa4\xad\xb7\xfb\xb8\x21\xe4\xac\x80\x61\x8c\x33\x4d\xd3\xf4\xa1\xfc\x8e\xb6\x70\x9e\x14\x56\xdd\xfc\xf6\x52\xb5\x51\x60\x00\x8f\xad\xa5\xf8\x17\x7a\x8e\x40\x04\x11\x28\x0a\x1c\x30\x56\x65\x6f\x5c\xd6\xde\xbd\xf6\x61\xa4\xaa\xcb\xb8\x06\x22\x98\x24\x33\xd6\xc8\xc6\x26\x36\xea\xe5\x85\x99\x8f\x4b\xa9\x23\xc3\x40\x97\x96\xff\xcc\x64\x51\x3e\x90\x2c\x63\x0e\x84\xe8\x5f\xe5\x86\x13\xeb\x49\x60\x6e\x68\x32\x3f\x7a\xbe\x5e\x46\x87\x2f\xc4\x4d\x7a\xe8\xbd\x14\xce\x5f\x39\x61\x24\x6f\xce\x6e\x1d\x83\xd3\xeb\xd8\xa8\x26\xb3\x1c\x11\x40\x20\x74\x2a\x5a\xf3\x9d\xd6\x21\x5a\x64\x35\x18\xa6\x48\x7c\x27\xc5\xbd\x78\xac\x5d\xca\xa5\xef\xa9\xf1\x03\x39\x77\x68\x83\xf3\x36\xef\x7e\xf7\xce\x06\x4d\x45\xe3\xad\xb3\x9a\x27\x7d\x88\x94\x79\xd0\x4e\x08\x68\xad\x70\xd2\x9b\xb0\x2b\x88\x80\x3c\x42\xfa\x33\x0b\xad\x44\x5b\x9f\x1a\xf2\x28\x71\xbf\x08\xfc\xed\xb1\x8c\xa5\x57\x62\x9c\x8b\x76\x30\x47\x6e\xc7\x0b\x05\x08\xb7\x98\xf7\xa6\xd3\xc0\x49\x1f\xd7\xc8\xe3\x5e\xc3\xe1\x1d\x3a\x99\xb5\xd8\xcd\xfc\x8f\xd1\xcd\x75\x5f\x41\x9a\xda\xbc\x40\x21\x1b\xee\x80\x6a\x09\x6a\x54\x5a\x5f\x36\xa8\xb9\x08\x78\x79\x73\xa2\xab\x5d\x60\x5a\xcb\xaf\x5a\xe3\x12\x34\x0e\xbd\x16\xaf\x15\xd1\x39\xb7\x53\x7d\x98\xdb\xd9\x59\xc5\x4f\xb3\x54\xe7\xb8\xc6\xad\x25\x79\xcf\xe8\x5f\x05\xad\x03\xdc\x58\x7d\x76\x44\x29\xc5\x13\xf9\xe5\xa6\xac\xde\x2c\x32\xa8\x2e\x32\x7e\xb8\xe9\x92\x32\x34\xa2\xee\x88\x30\x3d\x80\x6f\x6c\xd5\x61\x00\x9d\x15\x57\xfd\xb7\x1e\xda\xfd\x24\xb3\x5f\x7e\x17\x2c\xca\x71\xd0\x59\x89\x53\xbc\x7b\xf4\xc3\x6c\xa5\x45\xe1\x00\x23\x3b\x3b\xd4\x5a\x0b\x70\x39\x77\x98\xfd\x94\x6a\xb7\xc4\x72\x91\x10\x60\xc4\x73\x43\x0f\x57\x41\xf2\x86\x47\x57\xba\xf1\x4e\x98\x4e\x26\x96\xc4\xb0\x91\xf6\x4b\xc2\xf9\x53\xed\x37\x33\x36\x5e\x24\x3a\x3f\xfd\xc4\x7d\xf1\x7a\x64\x7f\x22\xc4\x1b\xe6\xf7\x1e\x84\x68\xb6\xa8\x8e\x90\x92\x2f\xe9\xd1\xdb\x2c\xc5\x77\x2b\x01\x4a\x41\x60\x14\xf1\x4d\xb3\x71\xbd\xf2\x89\xb3\x61\x51\x51\xb9\xbe\xa2\x05\xd5\x2b\xc2\x3a\x79\x11\xd0\x37\x37\x46\xe2\x6a\xd0\xe6\x21\xd2\xfb\xd2\xeb\x8d\x0e\xad\x3c\x05\xd0\x92\xdc\x13\x59\x9c\x4d\xf2\x4f\x30\x71\x36\xdf\x02\x75\xb1\xca\xc4\x56\x45\x5b\xd0\xeb\xd8\xf6\x78\xb4\x5d\x3a\x8e\x70\xf8\xc5\x7f\x79\x3e\x78\x8a\x09\xdd\x3a\x80\x7a\x09\xbb\x8c\xab\x7d\xe4\x4e\x00\xbf\xf7\x52\x5f\x43\x19\xde\xc6\x95\x8b\x56\xbd\x35\xd2\x31\x1c\xe3\x50\x77\x0c\x03\x09\x60\x08\x7f\xe1\x3c\x19\x8e\x54\x36\xc3\x3c\xaf\x72\xcf\x66\xae\x7a\xd1\x96\x21\xe5\xaa\x4a\x3a\xc2\x54\x63\xac\x44\xc8\x9e\xc1\x27\x34\x90\x15\xe2\x32\x1d\x5d\x61\x3b\x97\xfa\x5d\x2f\x27\xb2\x12\xab\x0f\xa1\xe6\x17\x32\xf8\xf5\x7f\x5a\x9c\xd9\x6f\x92\xe8\x9f\x8f\xed\x3a\x3d\xa2\xf1\x8c\x31\xb2\x03\x11\x13\xaf\x01\xdb\x22\x7b\x8a\x29\x11\x9f\xee\x43\x11\x42\x4c\xc1\xfa\xfb\xd5\xfe\x22\x2d\x86\x83\x08\x53\xfe\xae\x7a\x5a\xfe\xe8\xf2\xfd\xb0\x75\x5b\x26\x51\x28\xec\x6a\x62\x10\xb0\xc8\xf1\x66\xcf\x9f\x75\x9d\xed\x75\x80\x1e\x42\x49\x6d\x8c\xa5\x49\x5e\xed\xf8\x79\x57\x45\xdd\x37\x67\xb9\x5c\x72\x9c\xce\xda\x7b\xd0\x32\x4a\x34\x16\x1f\x7d\xb9\x53\x30\x0d\x31\x0a\x6c\xe9\x55\xbc\x5d\xe9\x83\xc0\x41\x8f\x4c\x16\x61\xe3\x72\x33\x94\xe7\x4e\x3b\xb7\x17\x99\x74\x06\x03\xf4\x6a\x53\x55\x27\x16\x50\x8b\x4d\xe8\x49\x8d\x4e\x87\xfb\xc6\x82\x1d\x90\xcb\xbd\x86\xc9\x6c\x13\x8d\xde\x07\x92\x6c\x07\xc0\x50\xcf\xe0\x5b\xf0\xdd\xb5\x8d\x5b\x6b\xad\xfd\xfe\xb8\x4c\x9f\x78\xb1\x09\xbc\x68\xe9\xe3\x4d\xd5\x9b\xf2\x19\x8f\x2d\xb8\x56\xa4\xf5\x3b\x4b\x09\x00\x66\x7b\x64\x77\x5c\xe8\xef\x0c\x11\xce\xc4\xf9\x82\x4f\x6f\x06\x51\x67\xc6\x17\xc0\x8c\x7d\x6d\xbb\x35\xd9\x60\x98\x5f\xff\x56\x65\x79\x9d\xdf\x94\xd3\xc7\x51\xb6\x08\xa7\x23\x6d\x2d\xec\xf3\xd2\x3f\x27\x3c\x74\xde\x0f\x0b\x32\x30\x72\x6f\x49\xe4\xe4\xb4\x66\x21\x80\xde\x14\x38\xb0\x8f\x98\x09\x16\x0d\x6f\x60\x5d\xc9\x25\xf7\xcb\x1e\xa1\xbd\xa3\x5a\xa0\xbe\x27\xd5\x3b\x3f\xb1\x62\x96\xa8\x1b\xee\x59\x7d\xd0\x3b\x9b\x98\x73\xe9\x65\xe0\xb1\xde\x22\x00\x4e\xd7\x10\xcf\x0c\xab\x44\x48\xa0\xf6\x4d\x25\x77\x2b\x36\x2d\x2c\xcc\x73\xda\xef\x2c\x28\xca\x87\x97\x36\x3d\xd4\xab\xa3\x69\xa9\x9d\xaa\x67\x93\x11\x3a\x01\x63\xcf\xa9\x6b\x7b\x06\xe1\x3b\x9e\xba\xc6\xec\x97\xc0\x22\x87\x2b\x35\x64\xc1\xc9\xc5\x8f\x9c\x22\x8d\x30\x4d\x3f\x04\xe0\x46\x50\x36\x3b\xd0\x9f\xc0\xf2\x2e\x67\x16\x6b\xe4\x66\x28\xf8\x02\x42\x6b\xf0\xf6\x45\x1b\x12\x0c\x30\x8a\x2d\xe6\x18\x87\x4b\x45\x33\x00\xad\x62\xce\x5e\x57\xd6\x4d\x44\x43\x86\x0f\x7d\x0f\x5d\x4a\x14\x62\x42\x30\xbf\x45\x02\x4c\x28\xf8\xc1\xae\xbd\x72\x57\x1b\x65\x04\xa2\x97\x67\xb0\x2b\x33\x47\x09\x1a\x4f\xee\x06\xc5\x6c\x49\xa0\x19\x27\xcc\xc1\x45\x00\x77\x50\xe1\xd8\xbc\x50\x27\x4c\x36\x8d\x1e\xa6\x72\xf3\x94\x18\x00\x37\x98\x8e\x73\x36\xa0\x4d\x6f\x15\xed\x99\xf6\xc2\x0d\x9b\x0b\xd8\x93\x59\x64\x96\x56\xa4\x86\x35\x2f\x59\xfa\xdd\x70\x00\x9e\x8b\x20\x65\x97\x38\xa1\x9d\x58\x0c\x11\x87\xce\x47\x3d\x5e\x2c\x63\x20\x05\xfa\x76\xf1\x9f\x11\xb4\xab\xd4\xcb\x93\xcf\x30\x3f\x9e\x78\xc3\xe5\x2f\x8e\x2d\x5f\xee\xd8\x44\xe9\xd3\x40\xf5\x87\xe6\xf6\xa7\x12\x63\x5a\x47\xb5\x8a\x69\x8c\x56\x8f\xa7\x55\x3f\x29\xb9\xef\xc3\x79\xa8\x95\xbd\x49\xd6\x45\xa9\xc3\x56\xf6\xe0\xca\xff\x12\x12\xbe\x2a\x47\xef\xe2\x04\xba\x8d\xeb\xd2\xfd\xaa\x08\x1c\x5f\x9f\x3f\x3f\x4d\x52\x46\xd6\x8a\x13\x15\xcc\x40\x23\x92\x54\x99\xea\x8d\x8e\x0b\x2f\xb5\xce\xb5\x0e\x2c\xe0\xa4\x4c\x79\xf1\xf3\x43\x0c\xa2\xdf\x70\x0f\x47\x2c\x44\x79\xa3\x97\xbb\x49\x7a\x12\x06\x7b\x80\xef\x3b\xaf\x98\xa6\xbd\x9b\xb0\x84\xa3\x38\x29\xf0\x76\x0d\xbc\x59\xb3\x49\x8e\xfc\x71\x55\x17\xae\x6d\xb6\x39\x54\x0e\x44\x1a\x9f\xfd\x28\xa4\x93\xa0\xfa\x15\x93\x66\xa9\x36\xa4\x75\x34\x2d\x9b\xea\x63\xd5\xdc\x35\x49\x38\x5d\x89\x3b\x95\xcc\x95\x9a\x17\x94\x21\x37\x21\xc3\x3d\x8e\x5b\xa5\x53\x08\xba\xce\x6c\x20\xc5\x3e\x5a\x52\x20\xad\xc7\xcd\xf6\x9a\xe4\x8b\xaf\x16\xca\x3a\xcb\x21\xca\xa2\x18\x9d\xa9\x4c\xe8\xbe\x1b\x58\x97\x07\x2b\x02\x19\x1d\x3f\xe9\x4a\x3d\x6e\x46\xa1\x19\x96\x32\x00\xdf\xa0\x43\xef\xad\x35\x10\xe2\x9e\xa4\x40\xe7\x27\xb3\xba\xbe\x92\x17\x48\x21\x56\xc9\xc6\x3c\x6d\x0f\xd7\x38\x74\x20\x4a\x13\x49\x65\xd0\x7b\x10\x3d\x2f\x10\x20\x5f\xe5\xcc\x1c\x76\xbc\xef\x8f\xdb\xe6\xc4\x91\x3c\xa8\x66\xeb\x30\x68\x67\x47\x38\x84\x11\x78\x8b\x6e\xdd\xff\x84\xc6\x2d\x05\x46\x6c\x68\x7c\x9c\x35\xdc\x87\x28\x66\x0f\x89\x6e\x17\x6d\x63\xc1\x4a\x09\xe5\x8e\xaf\xa9\x59\x59\x1c\xf2\x7b\x8b\x83\x39\xf7\xa1\xa3\x6c\x18\x95\xe5\xc1\x6b\xd8\x4b\x5e\xbe\xe3\xc5\xb0\x77\xfa\x17\x01\x04\x55\x8c\xcd\xea\xa7\x76\x79\x3e\x73\x6d\x57\xd6\x53\xbb\x58\x15\x87\x72\xe2\x7d\xf3\x5b\x1f\x37\x33\x2e\x5f\x60\x54\x7c\x58\x69\x16\x17\xc8\x1f\xf6\x45\x63\x9f\xeb\x02\x37\x65\x74\x67\xc9\xe6\xcf\xd7\xe8\x06\xfa\x0e\x8c\x74\x27\xe0\x29\x7c\xfd\x1a\x58\xa4\x16\x74\x43\x51\x94\x19\x06\x82\xf2\x2b\x9b\x27\xb5\xa0\x53\xbd\xc4\xc9\x1e\x23\x34\xd8\x2d\x34\xa6\x63\x1f\x11\x4c\x29\x69\x8a\x9c\x75\x09\xbe\x3b\x50\x32\xb9\xd4\x87\xf9\x8f\xb1\xb3\x86\xe6\x73\xec\x60\xf5\xd6\xbd\xc8\xc3\x8c\xdf\xaa\x43\xae\xb2\xbb\x90\x77\x9e\xd8\x5c\xd5\x40\x46\x2f\x6a\xe9\x24\x81\x2f\x53\x64\x15\x4c\xe8\x9d\x76\x44\x1e\x58\x83\xa6\x6e\x9a\x88\x00\x77\x8b\xd0\x7f\x64\x4e\x99\xba\x22\x61\x1a\x7b\xe9\xf4\xa8\x5c\x56\xd5\x37\xe9\xc3\x4a\x7b\x3a\x4a\x1e\x34\x76\xa2\x75\x04\xe2\xb7\x02\xaf\x67\xc3\xb7\xaa\xd1\x61\x62\xcf\x1f\xaa\xf1\xc9\xd3\x3c\x01\xe4\x51\xaf\x9d\x01\x88\xe3\x1c\xc3\xe1\xe4\xd2\x1d\x22\x1b\x10\x35\xee\x97\x49\xd7\x39\xc6\x7f\xb0\x07\x07\xd9\x73\x66\x94\x91\x48\x06\xa7\x00\x73\x5f\xac\xb0\xb1\xbf\xa9\xa2\x17\xc0\x59\x00\x3f\x66\x9f\xa0\x8e\x7d\x5b\x44\x25\x22\x1c\xa5\xe9\xa7\x5e\xce\xae\x39\x8f\xe8\x1e\x95\x52\x80\x3d\xa8\x2f\x68\xe7\x94\x0e\xfb\x47\xc7\xe2\x31\x20\x19\x05\xa3\x8b\xc7\x17\x7f\x68\x61\x2e\xeb\x0a\x40\xf8\x71\xff\x20\xa8\xd1\x97\xb5\x04\xcc\xb6\x5a\x8e\xd7\xae\x6b\xe3\x8f\xda\xbe\xee\x04\x46\x3a\x82\x39\x74\xbb\x97\x12\xec\x6f\x5e\xef\x78\x4b\xf1\xd5\xd7\xa6\x1e\x88\x29\xe0\xfb\x7f\x74\x32\x2c\x81\x48\x84\x63\x04\x6c\x97\x06\x0c\x82\xb4\xd7\x77\x3a\xad\x0f\x29\x54\xad\x06\x72\xbf\x51\x80\xe4\x56\xd7\x94\x99\x8a\x7b\xa8\x02\xab\x3f\x05\x29\x64\xbc\x9f\x50\x4e\x53\xa3\xd5\x2f\x63\xbc\x0a\x65\xdf\xb0\x5d\x79\xc7\xbf\x1f\x91\xc3\xb2\x7e\xdb\x31\xad\x8f\x0f\x82\x77\x31\x98\x19\x35\xc8\xda\xb1\x7e\xd1\x7d\x8e\x3c\xdb\x6d\xff\x4c\x39\xc5\x60\x87\xe8\x2e\xc5\xfe\x4d\x4c\x9a\x69\x5c\xaf\x49\xfd\xae\x82\xff\xee\xbd\x1c\x9e\x44\x15\x1c\x14\x14\x5e\x50\xb0\x75\x3f\x73\x43\xa2\xfd\xa9\x03\x47\x1f\xd6\x59\x40\x96\xe8\x5e\x4c\x97\xdd\x91\x28\x10\x60\xa9\x29\xd2\xa9\xd3\xfb\xad\xbc\xcf\x05\x41\x63\xc5\xb0\xc2\x47\x51\xac\x1f\xa8\x06\x42\x5f\x18\x28\x04\xe1\xe3\xff\xcd\x98\x54\x03\x7b\x68\x1b\x8a\xf1\x99\xd7\x59\x6d\xd6\x34\x65\x0d\xef\x0c\x17\x75\xfd\x7c\xa7\xe5\x8f\x17\x00\x7d\x55\x84\xe1\x64\x94\x73\xce\xd0\xaf\xd3\x7d\xb6\x54\xd3\xe0\x9f\x0d\x8e\x49\x42\xaa\xbf\x6d\xcc\xf3\xa1\xd6\x00\xa5\x58\xbc\x03\xf9\xaf\xbd\x31\xca\xc3\x0b\x48\x14\x16\x1c\x74\xe2\xf0\xff\x82\xe3\x32\x42\x66\xc4\x04\xaf\xfc\xa7\x29\xa5\x99\x48\x61\x92\x3f\xeb\x08\x62\x33\x5d\x8e\x55\xbb\xfc\x5c\xd0\xd5\xff\x8a\x24\xf3\xb2\xc4\xc7\x75\x33\x52\xa7\xc7\xac\x9c\x93\xd4\x28\x99\xe7\xc3\xe6\xe4\x39\x9d\xaa\xce\xd8\xa8\x37\x09\xf7\xa1\xd1\xf7\x58\xb2\xf2\x91\x5d\xda\x75\x65\x46\x23\x3e\xa2\x01\x86\x3d\x42\xb9\x66\xa8\x06\x11\x9d\x2a\x4f\x29\xa7\xaf\x8c\x8d\x45\xac\xb7\x90\x93\x3a\x7b\x90\xaf\x22\x98\x24\xe5\xa7\x87\x7d\x79\x53\x23\xb7\x96\xed\xe4\x74\x8d\xe7\xaa\x98\x7c\xe3\x3e\x62\x67\x61\x5f\x50\x5c\xc3\x85\x86\x29\xa8\xcd\xb6\xe9\x18\x6d\x48\xba\x29\xfd\x3d\xa6\x85\x9c\x56\xa7\xed\xab\x68\xe1\xa2\x15\x92\x53\x1a\x67\xd9\x39\xe2\xa6\x79\x2a\x2c\xe2\x41\x2e\x0d\x6c\x67\x74\x05\x27\xec\xaa\x66\x27\x38\x1a\xa3\x8a\xa5\x29\xd2\x08\xd4\x07\x8f\x0e\xf3\x8a\xf8\x1a\xb1\x8d\x65\xc5\x36\xad\x8d\xff\x6b\xab\x39\xc1\xd3\xa7\xef\x6a\x7a\xdc\xad\x5f\x51\xde\x63\x70\x6e\xcd\x95\xc3\x88\xd6\x60\xad\xd5\x6b\xac\x04\x18\x0e\xf2\xa2\x19\xf5\x0f\xc1\x2d\x7d\xd3\x29\x0b\x7f\x2c\xa4\x1d\xd1\x9d\xbd\x8e\xf5\x10\x53\xb1\x9f\xef\x44\x4f\x12\xc1\x36\x14\x4a\x13\x14\x57\xce\xc8\x02\xf4\x99\xa1\x1e\xf5\x05\x18\x35\xb6\xae\xfa\xa2\x91\x61\x26\xd0\x13\xba\xaa\x13\x0d\xc0\xe3\x93\x61\x45\x3a\xe9\xc9\xfc\x37\xc4\x81\xed\x3f\xb9\x76\x83\xa8\xd9\x6a\x7d\x09\xec\xb0\x4b\x16\x0b\x8f\xac\x17\x55\x51\x13\x07\x11\xd8\xe6\x82\xa9\xe7\x65\x7e\x11\xce\x81\x25\x8b\xad\x5b\x94\xb2\x18\x7f\x2d\x0f\x25\x55\x1b\xab\x14\x0b\x69\x0a\xde\xe1\x1f\x95\x0c\xd9\x6a\x50\x39\x7e\xd2\xfe\xa5\x61\x0e\x79\x70\x14\xdf\xfd\x28\x3a\x1b\x3a\x41\x3c\x6b\x32\xda\x01\x0a\x76\xf6\xa5\x12\x5c\x9c\xb6\x55\xa1\x2a\x30\xae\x24\xcf\x6e\xa9\xd4\x2e\xd9\x08\xcb\x77\x11\x1d\x28\xad\xb5\x5b\x12\xf1\xf2\x1a\x9f\x18\x78\x0e\xbd\x58\x30\x2e\xab\x88\xa5\xcc\x9b\xfc\x1f\x17\x2e\x33\x4c\xd3\x44\xec\x1c\xed\xe4\xfe\xfa\x3f\x33\xce\x48\x8d\x22\x9c\xb5\xcc\x10\xf6\x83\x2a\x1d\xa1\xea\x2f\xcd\xa5\x79\x30\xb8\x96\x04\x8d\xa3\x21\x23\x09\x0e\x45\x55\x99\xc9\x15\xb5\xde\xc4\x74\x8e\xbd\x11\x1c\xcc\x52\x20\x16\x26\x0a\xb4\x43\x8f\x5c\x88\xec\x61\xab\x3c\x77\x9b\x0c\x19\x7c\xaf\x4c\x9e\xef\xe1\x6d\xee\x84\xf8\x9c\xef\xce\x11\xbe\xb5\x99\xa1\x69\x60\xd0\xf2\xbc\x9e\x33\xd9\xb7\x5a\x66\x8d\x5c\x78\xf2\xf0\xcc\x6e\xb8\xc9\x3f\xc9\xff\x34\x46\x8e\x85\xc0\x28\x25\xc1\x3d\x59\x0d\x38\x5a\xc9\x26\x61\x4b\xd9\xee\x37\x81\x6b\x2c\x27\x28\xd4\xaa\x1c\xbe\x7b\x36\x80\x51\x8b\x68\xdc\xe9\x14\xa6\xe3\x82\x42\x54\x2a\x67\x30\xef\x42\x8d\x17\xde\x6b\xc1\x39\x09\x8c\x8e\x16\x09\xfb\xd1\x57\x6e\x9d\x80\x96\x3a\x48\x84\x9c\xf0\x61\x84\xcb\x40\x52\x60\x87\xf2\xce\x6f\x85\x05\x68\x45\x45\x23\xf6\xa2\x32\x9a\xb7\x9c\x29\x40\x69\x28\xc1\x8c\x52\x2f\xb2\x15\xf7\xb2\x5c\x9f\xab\xf1\x8d\x7c\xf5\x03\xe2\x7f\x65\xd7\xd7\x32\x33\x61\x5a\x49\x89\x95\x56\x30\x26\xa5\xd0\x81\x17\xd6\xab\x1e\x35\xcc\xfb\x91\xaf\x01\x97\x17\x29\xb5\x92\x45\x6b\x4a\x3e\x20\xe3\x5a\x98\x13\xb8\x0e\xe5\xa3\xa7\xd2\x23\x29\xde\x39\xd3\xad\x11\x88\x09\x5f\x76\x89\x75\xc9\xa0\x9c\xc0\xa1\xb1\x32\xc2\x9a\xcb\x3f\x1a\x2f\xe8\xa8\x4a\x2f\x6b\x0b\x3a\x16\xcf\x6d\xd2\x50\xf5\xa1\x0f\x90\xdb\x8f\x08\x17\x2b\x61\xfb\xbe\x74\x53\x87\x8d\xa6\x38\x57\x8f\xcd\xa9\xdb\xb0\x21\x7b\x64\xb0\x00\x70\x7c\x3a\x1d\x15\xd8\xc0\x4b\x51\xa2\xcd\x4d\x07\x92\x26\x38\x77\x64\xa4\x3a\xa3\x0a\x7b\xde\xb9\x17\x3a\x26\x00\xe0\x7e\x78\x14\xc1\x60\x43\xcf\xec\x00\xa1\xbf\xdc\x30\xec\x0a\xbc\x78\x7e\xec\x22\x59\x76\x38\x87\x5c\xa3\x6e\x0b\x5c\xb4\x5e\x7b\x23\x7d\xd1\x96\x6e\x8d\x7c\x7a\x11\x96\x83\x5a\x1d\x0b\x86\x5f\xa8\x64\xa7\x71\xb7\x1c\x2d\x6e\x74\xd3\xa2\x17\x74\xd7\xef\x43\xcf\xf7\x16\x2c\xf7\x6b\xce\xec\xa5\x83\x13\xf2\xdc\xf0\x58\x40\x19\x1f\xc4\x30\xa9\xd0\x09\x3f\x5f\x91\xe6\x3f\xb4\x6f\x1d\x55\xf8\x51\x70\xb5\x51\xd8\x92\xf0\x81\xe5\xdc\xec\x40\x57\xa5\xa2\x7f\x62\x86\x42\x64\x84\xf6\x03\x65\x7c\xcf\x87\x39\x85\x4e\x2d\xed\xe2\x02\xf4\x40\x9c\xce\x68\x8e\x8a\xca\x42\xc7\x69\x66\xaa\x9b\x77\x84\x2f\x4b\x11\xf8\x5d\xce\xfb\xa7\x58\x24\xff\xf8\x9d\xdc\xee\x49\x51\x9b\x31\xd6\xa1\xbe\x64\x7c\x81\x25\x65\xdf\x41\x0d\xe7\x5b\xf0\x27\x60\x58\x75\xc1\xaf\x85\x2f\xcc\x54\x33\x60\xc3\x11\xad\x98\xa5\xbe\xea\x67\x02\x27\x66\x7e\x7c\x3f\x87\x0b\xbf\x7f\xae\xfe\x2c\x49\x0d\x35\xf5\xd7\x60\xab\x58\x60\x14\x4f\xdb\x00\x57\x74\x2a\xaa\x57\x89\xcd\xf9\x82\x24\x39\xb1\x1c\x39\x8b\xe0\x8f\xb0\x44\x92\x06\xae\x39\x3a\xe4\xbd\xb1\x16\x1d\xec\x15\x41\xb9\xdf\x08\x49\x45\x6b\xb8\x45\x81\xbb\x77\xda\x7b\x90\xa7\x9c\x30\xd6\x63\xd2\x66\x36\xb1\x0d\xba\x0c\xb6\x24\x61\x6a\x98\x55\xd9\x64\x35\x6a\xa3\x3f\xce\x46\xa4\xf5\x10\x1d\x30\xeb\x1d\x99\x1a\x0b\xcb\xef\x16\x03\x63\xd1\xe5\x11\x83\x5f\xfc\xf0\x4e\x5c\x0e\xa8\x6c\xf6\xbd\x30\xdb\x71\x1b\x6d\x36\x5f\x23\x69\xbf\xe0\x00\x0e\x43\xcd\xa8\xdf\xbb\x56\x7d\xbc\xef\x96\x0c\xb7\x88\xcb\x40\x8d\xb9\xa0\xbf\xfb\x1e\xf4\x69\x23\xf7\xc2\xbb\x71\x00\x9c\xc3\xaa\xfe\xdb\x7c\xbe\x9c\x89\x33\x67\xa3\xed\xba\xea\x81\xe3\x84\x08\x1c\xd8\x05\x96\x48\x7c\xee\x3d\x25\xf1\x5d\x02\x7a\x6f\xea\x39\x4d\xa7\xd3\x81\x10\xb3\xc5\xea\xe4\xf1\x39\x2f\xc7\xd0\x1d\xcd\x1c\xcd\x83\x31\xc1\xb2\xcc\x66\x59\x74\x1f\x63\x29\xdb\x8c\x6f\x08\x76\x34\x4f\x95\xc1\x7e\x3d\x55\x4f\xc9\x6f\xfd\x88\x6b\xbe\x4b\x64\x24\xec\x3f\xba\x71\x38\xf6\xa0\x99\x50\xca\x89\xf0\x2c\x19\x51\x8b\xa5\xf3\x13\x18\x27\x43\xe2\xcb\xf1\x7c\x9c\x87\x93\xd0\x8d\xc6\x5c\x99\x6d\x47\x21\x6d\xf7\xd1\x4b\x2c\xa4\x74\x03\x05\x37\xdf\x92\x4f\x04\x0e\x6b\xab\x58\xbe\x64\xc3\x1e\xbd\x8e\x6d\xe6\x83\x74\xad\x75\x43\xcd\x8c\x75\x0c\xe0\xf5\xac\x77\x52\xb5\xa1\x23\x7f\x36\x88\x79\x0f\x65\x9f\x6f\x9c\x36\x68\x6c\x19\x9e\x4c\x4b\x27\x08\xbb\xec\x94\x7c\x10\xa8\xca\xcc\xf1\x40\x49\xc5\x0a\x8a\xb2\xd7\xb5\xa3\xa5\x02\x1f\x32\x20\x90\x08\x2b\x88\xed\x57\xd7\x13\x57\x83\x81\xd6\x01\x57\x05\xc9\xb3\x7a\x97\xef\x2a\x39\xf7\x57\xb6\xbb\xd3\x73\x80\xdd\xe6\x02\x03\xd3\x64\xfe\x39\x38\x1e\xf3\xce\x4e\x02\x8e\x0c\x9f\x8f\x7f\x5c\xa6\xc5\xa2\x2b\x71\xbb\x7f\x93\xb6\x7b\xcb\x4d\x2a\x37\xe5\x54\x66\x2e\x85\xc3\xa6\xb0\x75\x07\xad\x74\xe5\x31\x6f\xe2\x34\x3f\xf1\xa0\xce\xac\xe5\xc7\xf1\x3b\x8f\x7d\xb7\x9a\x33\xa9\x9c\x13\x06\x02\x2b\x63\x39\x20\x9a\x00\xb2\xdb\x47\xc2\x04\x20\x47\x28\x3c\xa0\xa9\x34\x76\xf2\xd3\xb6\x3a\xf7\xce\x8b\x1f\x78\x1e\x0f\x73\x9a\x6e\x41\xf1\xe0\xcb\x42\xf3\x96\x65\x02\x5b\x0f\xbb\x92\x74\x02\x2a\x87\xdc\x95\xa6\x1b\xce\x7d\x98\xca\xce\xe2\x27\xb3\xab\x54\xed\x9d\x0e\xd0\x54\xd5\x0f\x63\xb7\xcd\x98\x2f\x0a\x37\xd8\xbe\xec\xf1\xe1\x4b\x87\xd8\x0e\x95\x0e\x03\xd4\x33\x92\x0f\xc7\xe3\xc1\x44\x3c\x2c\x03\x84\x69\xd2\x0e\xa4\xe6\x1e\xbe\x24\xbc\xf8\xb4\xf4\x2c\x39\x5c\x0f\xf8\xd0\x82\x66\x90\xd4\x52\x3b\xdb\x7f\x85\x56\x8e\x95\xf4\x82\xde\x9d\x34\xae\x38\x74\xaa\x45\x0d\x70\x01\x2c\xcf\xfa\x2b\x48\x47\x6e\x80\xe4\x09\x5f\xcc\x6e\x66\xd0\x64\x9e\x9c\xe6\xdf\xea\x05\x8a\xc8\x06\x81\x70\x21\x2e\xc5\x08\x07\xc6\x23\x05\x9d\x36\xe1\x92\x1c\x8f\xf5\xea\x58\x4d\x3a\xc5\x1a\x7e\xd3\x3a\xda\x32\xc1\x13\x23\x26\xfa\xd2\xaf\x25\x59\x53\x04\x49\x20\xbf\x3e\x8a\xe5\x47\x8e\x69\x2f\xb3\xa9\x2f\x4e\x14\x29\xb2\x27\x80\x88\x93\x81\xef\x6b\x52\xe9\x72\x32\x83\xa1\x98\xeb\x7a\x01\x86\x95\x2d\xa4\xd9\x92\x10\x0f\xd2\x1e\xc5\xd1\x47\x40\xa1\x3d\xb7\x0e\x8b\x0b\x38\x42\x78\x10\x37\xc0\xb8\x2a\xd3\xd3\xf5\xa6\xcd\xd3\x3a\x77\x72\x44\x58\x7f\x62\x00\x96\x15\xdd\x8f\x33\x85\xd5\x36\x52\x13\xa6\xe7\xad\x26\xa8\x13\x8d\xb7\xfc\xfe\xe5\x1e\x23\x2b\x46\x5e\x72\xc1\xcf\x6f\x07\xd0\x5e\x3d\x64\xe8\x02\x7e\x19\x83\xfc\x90\x25\x75\x16\xa5\xde\x78\xfa\x67\xfb\x35\x21\x81\x3b\x8e\x9d\x3e\x86\xc3\x4e\x4c\x3f\x38\xa9\x92\xa9\x83\x64\x6f\xf5\xb2\x83\x04\x94\x40\x73\xf2\x17\x37\xf8\x69\xbe\xce\xea\x7a\x01\x27\xe7\x85\x02\x9b\xe1\xe0\xa1\x0d\xaf\x65\xfa\xdc\x8b\xee\x95\x91\x53\xcb\xb0\x2d\x32\x2a\xc1\xf7\x0a\xb8\x20\x4e\xba\x36\x29\x68\x33\x4c\x07\x57\xa2\x44\xff\xf7\x2b\x1f\x10\x29\xd3\x7a\x31\x49\x81\x47\x5b\x15\x3c\x46\x32\x13\x62\x43\x2c\x35\xfd\x24\xe9\xf6\xdd\x8a\x75\xb7\x4b\xed\x57\x58\x9b\x5b\x3b\x29\xed\x1c\x12\x3c\x90\x65\x5a\xab\x43\x52\x3d\x58\xea\xb4\x3b\x51\xbd\x1c\xe3\xf7\xc3\x71\xe3\xc9\x85\xab\x57\xa1\xf2\x36\x5b\x48\xad\x26\x52\xa5\x43\x78\xee\x13\x86\x62\x41\x2a\x56\x83\x12\x8b\x92\x7f\xa0\x36\x9b\xe6\xe1\x41\xcf\x0e\x51\xe8\x66\xce\x1c\x80\xa7\x8c\x9b\xdb\x10\xd7\xe5\x97\x57\x7c\x37\xef\x08\x2c\xcf\x06\x7b\x96\x7f\xa2\x8a\x79\xfc\x5a\xf6\x9a\x4b\xf3\xec\x35\x13\xbf\x4c\xa6\x7a\x5d\x45\xf2\xda\x69\x76\xb6\x96\x1b\x4a\xed\xd4\xbd\x03\x46\x0d\xfb\x79\x6c\xc4\x09\x04\xca\x02\x17\xce\x0b\xf3\xc2\x54\xa5\xa4\xf8\xde\x0d\xb8\x4c\x2b\x0d\xd2\xb8\x40\x39\x02\x9a\xb0\xe0\x04\x88\x96\xf7\x9c\xf8\x12\xe4\x07\x5c\x63\xb4\x6e\x36\xf4\x54\xa8\xd8\x5c\x33\xca\x98\x2e\x40\xf7\x5f\x2c\x46\x01\xa3\xd8\x56\x8e\x5c\xa0\x9e\xcc\x6c\xc7\xa5\xe6\x6f\x1b\x43\x1f\x77\x69\x53\xcc\xe5\x2f\xf5\xf4\x2c\x55\xcd\x9c\x52\x78\xb4\x5e\xaf\xee\xd8\x39\x00\x90\xa8\x4b\x74\x51\xdb\xa4\x74\xf2\xd7\x15\xe8\x17\x62\x37\xce\x65\x9b\x31\xa3\x16\xc2\x29\x41\xf1\x30\x37\x71\xb5\xbc\x96\x12\x5d\xb2\x93\xcc\x25\x8c\xd3\x7b\x32\x28\x1b\x3c\x44\xd7\x0b\x2c\x6b\x70\x8d\xa5\x56\x45\x94\x74\xca\xb3\x08\x63\x99\xc5\x1a\x66\x77\x23\x86\x67\xfe\xca\x73\x0d\x0f\xa0\xfc\xd0\xf5\xd9\x97\x13\xd3\x5e\x34\xf2\x2f\x86\x9f\xce\x57\xf7\x78\x19\x2a\xb7\x41\x36\x41\x97\x62\xf9\x4c\xee\x46\x98\xea\xe4\x07\xab\x83\x3b\x99\x84\x7d\xba\xda\xb4\x3e\x96\x4b\x69\x61\x23\x88\xda\xa4\x83\x82\x2a\x77\x8c\x03\xc7\x4e\x58\xbc\x4e\x73\x25\x1a\x7e\xd4\xc2\x79\xb4\x15\xeb\x0d\x18\x75\xb0\x33\x28\x77\x8d\xbd\xab\x07\x19\x00\x7b\x61\xac\x81\xb2\x2d\xc1\xd1\x49\x2e\x2e\x03\x07\x84\x1f\x57\xc2\xd8\xbd\xd5\x04\x4e\x24\x6d\x2e\x75\xc5\xdd\x2a\x8c\x9d\x5f\x16\x8d\xae\x7f\xfc\x04\x4e\xad\x3d\x18\x21\x5a\x3d\x27\x6b\x10\x01\x7f\x95\x8c\xd3\x3f\x14\xbb\x2d\x41\x72\x20\xee\x2a\xfb\xe2\xa6\x32\xb9\x2c\xec\xc3\xcf\x26\x86\x78\xf5\x1b\xeb\xf9\xf1\xab\xe2\xde\xb9\x96\x2f\xbe\x96\x66\xee\xa9\x3e\xe0\xe3\xba\x50\x1b\x34\x4f\x73\xf9\xc1\x0c\x72\xf2\x92\x36\x7e\x7d\xeb\x26\xca\x22\xee\x91\x72\x06\x99\x4f\x3e\x53\xe8\x01\xea\x63\xe3\x51\x92\xad\xd3\x3f\xb5\x58\xda\x17\x22\x08\x0c\x19\xc4\x70\x28\xa7\xa5\xb9\xa1\xbd\x44\xe1\x02\xc7\x0c\x6b\x94\x6c\xa5\x38\x95\xf6\xc4\xa6\xaf\xfe\xef\x73\x87\xe6\x5a\x10\x21\xb2\xde\x56\xc6\xc3\x88\xf4\x8c\x74\x06\xdb\xb8\xea\x4f\x1e\xe9\x8a\xf5\x0a\x97\x6d\xd3\x8a\x5f\xd8\x75\x80\xa5\xb2\x9d\x7a\xc5\x1f\xcf\x30\xc5\xe2\x86\x76\xfa\xf6\x3f\x03\x6f\x14\xc6\xb5\x55\x43\x9e\xaa\xf7\x3e\xcc\x9b\xc8\x61\xaf\xea\x49\xd4\x46\x09\x6c\xab\x5f\xdb\x82\x9a\x35\x33\x4a\xef\xf0\xa5\x35\xce\x91\xa0\x84\x17\x70\x76\x44\x50\xa5\x09\x1a\x9e\x1d\xda\xc4\x38\x6e\x02\xdb\x72\x5a\x0d\xc4\x3d\x80\x58\x00\x97\x25\x05\xd1\x73\x1d\x9d\x2b\x6e\x48\x3d\x8a\xb4\xe4\xd9\xd4\x1a\xff\xca\x3c\x7d\xf5\x63\x49\x23\x01\x1a\x37\x7d\x07\xe7\x40\x18\x2e\x4b\x1b\xe5\x19\xe8\x7a\x22\xc2\x1c\x59\x55\xd2\xf8\x8a\x9c\xbd\xde\xdf\xca\x6d\x37\x65\xba\x61\x8c\x95\xf8\xe4\xb1\x56\xad\x52\xfe\xb6\x91\xc3\x2e\xf4\xc2\xb3\x93\xf6\xe9\xc7\xdf\x88\x5e\x00\xf3\x28\xad\x7e\x7c\x3e\x90\x4f\x6d\xd0\x0e\xa6\xb5\x55\x91\x3d\x8f\xd0\x68\xbc\x6f\xe3\xd8\x04\x7f\xd2\x78\x82\x17\x72\xe1\x86\x7e\x6f\xaa\x14\xeb\xef\xe7\xb9\xdc\x5a\xaf\x24\x1a\xa6\x24\xb9\xc5\x83\x92\x1b\xe7\x7c\xe8\xb4\x78\x33\x19\x35\x2e\x19\x30\xf3\xaa\xbd\xe5\x76\xc3\x7b\x4e\x15\x72\xb5\xe2\x0b\x4d\x67\xd1\x81\xb6\x3e\xa4\x1a\xe1\x0d\x16\xc8\xc6\xa5\x0b\x91\xd9\xbd\x7c\x31\x4e\xec\x90\xe0\xa1\x4e\x3e\xc1\x4b\xd7\x81\x7b\xbe\xc1\xd4\x0b\x04\x77\x13\x34\x68\x6b\xa8\x6f\x0e\x30\x56\x8e\xac\x7d\x70\x3e\x0b\xb4\x87\xbb\x56\x02\xf9\x9a\x9e\xaa\xdf\x39\x65\x02\x87\x5f\x05\x9d\x20\x12\x92\xa3\x7a\xff\x8d\x20\x10\xbe\xb5\x3a\x8c\x1b\x2c\x69\xa8\x37\x3a\x4c\x2d\xdb\xef\x22\x9e\x30\x72\x60\xae\x03\x48\xa2\x1a\xbd\x54\xb0\x85\x6a\xab\xed\xa8\x85\x30\xfc\x66\x90\x60\x04\x20\x08\x93\xa6\xc7\x0a\xcf\xaf\xdf\xb4\x15\x73\xe2\xa5\xf6\x90\xaf\x56\xa1\x62\x4f\xc8\x7b\x3c\xd5\x99\x7b\xd4\x51\xa0\x3b\xd7\xf1\x61\x1a\xe7\x51\xd7\x48\x8c\xa9\x02\xe9\x4f\xf9\x12\x4f\x9b\x18\x3f\xf4\x82\xce\x73\xa8\x4c\xda\x77\x05\xd0\x15\x67\xb8\xb1\xd2\x64\x06\xe3\xed\xe5\xc2\x95\xcf\xa4\xf1\x6a\x64\xaa\x10\x66\x9e\x49\xcc\x60\xd9\xac\xcf\xa8\xb1\x0f\x0c\x81\x6b\xf5\x7b\x83\x00\x98\x79\x0e\xcb\x36\x95\xc3\x87\x99\x85\xde\x83\xbe\x1d\xa4\x0c\x4c\x5a\x86\x4c\x15\xe6\x93\xb6\x17\x18\x67\xb8\xe5\x35\x7b\x9d\x71\x2e\xf0\x9a\x9b\x03\x99\x36\x67\x9a\x72\xa0\x6e\x19\x62\xf0\xad\xea\x1a\x7d\x33\xd8\x15\x9e\x6c\xad\x4a\x4f\xd1\x74\x65\x0d\xdd\x79\xab\x09\x59\x16\x22\xe9\xfd\x7a\x09\x55\x55\xec\xec\x13\x0d\xd7\xc4\x89\x7f\x6d\xcb\xd7\x18\xf1\xd8\x16\xff\x5d\x20\x7f\x32\x7b\xf0\x36\xb5\x4d\x9a\xb6\xee\x56\x49\xe3\x32\x7d\x27\x9f\x2c\xdf\x49\xb3\x7c\xde\x7e\xd4\x92\x36\x0b\x1b\x02\xed\xe8\xc7\xbb\xa1\x50\x2d\x1a\xd6\x30\x4e\x51\x0c\xb2\xc3\x28\x37\x3b\x23\xdc\x3d\x57\x77\xef\xfd\xc2\x44\xdd\xd8\xb3\x59\x84\x84\xb8\x20\xde\xf0\xac\x8c\xc9\x71\xa2\xf0\x60\x21\x49\x10\x22\xcf\x49\xc2\x0d\xea\x4d\xfa\x8b\x93\xfd\xba\xeb\x29\xb5\x78\xba\xec\xdf\xde\x35\x5c\x8c\x26\xca\x6f\x10\xcb\xae\x92\x6a\x0a\xc4\xdf\x1d\xca\xc5\x82\x3b\x51\x1e\xf4\x4e\x69\xbf\xcc\xdf\x80\xb0\x56\x09\x37\x4e\xd1\x1c\xe9\xd9\x18\x3b\xb9\xee\x67\x02\x4b\x71\x36\x29\x3d\x0b\x0b\x05\x22\x84\x92\x5c\x67\x33\x27\x50\xff\x8d\xed\x4e\x37\xb6\x1e\x25\x92\xd6\x33\x26\x29\x25\xca\x9f\xae\xb4\xc3\x5b\xaa\xc9\x5d\x37\x7c\xd2\x57\xff\x7c\xb7\x65\x6c\x90\x53\x1c\x1e\xf2\x7d\xfa\xd3\x77\x37\x5f\xf2\x37\x50\x5a\x0e\xd9\x1a\x44\x06\xdb\x6c\x62\xd0\x33\x17\x19\xf5\x54\x7e\x0e\xa7\xb3\xdc\x91\x35\x61\x69\xc0\x8a\x28\x86\xa2\xe2\x7b\x30\xb0\x39\x2f\xaf\xf0\x2f\x17\xf5\xa0\x60\x79\xc1\x37\xe0\x6f\x1a\xe0\xad\x03\xec\xde\xa6\x41\x5b\x1b\xb8\xe6\xa7\xca\x5d\x75\xa4\x91\x2a\x44\xb0\x59\xfa\x12\x06\xda\xa2\x76\x96\xe1\xdd\x01\x14\xa6\xf1\x2f\xa6\xb0\x5e\xa0\xb2\xd8\xe3\xae\xb9\xc3\xc8\xa9\x28\xf1\x6a\x33\xdf\x9a\x05\x36\x69\x12\xb6\x3b\x90\x0f\x77\x85\xe5\x06\x83\xc1\x43\x2d\xd1\xac\xeb\x08\x82\x26\xd6\xa8\xc4\x1d\x99\xcd\xe1\xe5\x47\xa9\x73\x51\x42\x3e\x5a\xaf\xa5\xe6\xc8\xd7\xc9\xcd\x95\x3b\x40\xef\xc8\x1a\x64\x1f\x99\xd4\x0a\x8c\xfb\x74\x32\x26\x68\xdb\x99\x9e\x8a\x23\x48\x04\xc1\x24\xed\x32\xd6\xbb\x10\xe2\x61\x21\x4b\xb9\xc2\x5e\x88\x7b\x28\xdc\xe4\x67\x60\x3f\xe7\x09\x55\xe5\x88\x1b\x51\x37\x8b\xef\xf9\x32\x22\x80\xee\x4a\xb2\xa8\x25\x76\xf5\x70\x93\x8e\xf1\x88\xf4\x07\x94\x35\xa9\x44\xe5\xe7\xbe\x3b\xad\x94\x2a\x20\xc6\x6a\xe2\x8c\x06\x95\xb5\x53\xcb\xad\x25\x3f\x55\x36\xf3\x3d\x3d\x12\x97\xee\xc7\x58\xd7\x7c\xc4\x1c\xfc\x35\x52\xcd\xd8\x1b\x96\xad\x85\xfc\xc2\xa1\xa2\xde\x10\xcd\xf7\xbf\x31\x70\xd1\x74\xf0\xab\xd1\xc2\x38\x00\x89\xaa\x77\x18\xc0\x0d\xf9\x00\xde\x38\x6f\x6a\xe2\x40\xc7\xdd\x1d\x65\xc1\xa1\x0f\x68\xe0\x95\x2e\xeb\x5e\xd3\xd2\xf5\xf2\x23\x4f\x77\x4f\x62\x2b\x9b\xb3\x39\x12\x74\x11\xca\x0b\x16\x1c\x99\x80\xf3\xd6\x24\xcb\x40\x72\xa0\x08\xda\xef\x47\x9c\xbe\x9d\xf2\x5b\x8a\x6c\x6e\xc8\xb9\x8f\xf1\xbb\x68\x4c\x19\x54\xd8\x69\xd4\x34\xd2\x19\x0d\xdd\x94\x7a\x05\x87\xea\x48\xba\x0f\x86\x32\x23\xf9\xd3\xcc\x74\x4c\x2f\x2b\x5c\x01\xce\xc9\x55\x77\xad\xd7\x30\xb7\x95\x75\x48\xd1\x7f\x02\x8d\xd9\x72\x1e\x43\x7d\x11\x8d\xfe\x6a\x2d\x35\xed\x92\x7c\xd4\x9f\x69\x0d\x4e\xdc\xde\x3c\x53\x20\xb8\xe1\x07\x67\xb2\xe3\xad\x69\x08\xf6\x5f\x4e\x95\x49\x99\x0d\xa2\x32\x93\xb0\x0a\xf3\x6e\x21\xd1\x94\xd5\x62\xe7\x65\x8e\x1c\xf4\x2a\x5d\xc2\x74\x26\x17\x3a\xaf\x64\xda\xa5\x15\xd6\x2e\x6a\x19\x0b\x5c\xb6\xff\x18\x52\xca\xad\x24\x88\x1b\x63\xaf\xed\x1f\xce\x3b\x0a\x4f\x5b\xe3\x2a\x42\x4d\x36\xdc\x94\x48\xe0\x40\x5e\x74\x27\xea\x15\x4f\xd4\xc7\x49\x89\x93\xb4\x20\x60\x1a\xd5\x75\x14\x0c\x99\xa9\x66\x7e\xb5\x79\x33\x8a\x00\x6d\x5f\xf0\x67\x85\x41\x84\xdf\xf0\x0a\x89\x6e\x2b\x2d\x59\x6b\x3e\xad\x39\x3d\x16\xf9\x19\xe8\xee\x25\x90\x01\x7e\xf8\xde\x59\xf6\x2e\x32\x99\xc3\x50\x0a\x59\xc2\x69\xec\xc8\x6b\x1d\x3b\x76\x7a\xe1\xc0\x6b\x89\xae\x99\x48\x05\x12\xa9\xd7\x6c\x96\xf8\x88\x84\xc0\xf4\x88\xdc\x72\x44\xe1\xbd\x8a\x38\x9e\xd6\x29\xbd\x26\x52\x0b\x92\xa7\xd2\x66\x5d\x37\x96\xbe\xbd\x8d\x36\x07\x82\xf7\x6e\xa8\xe2\x92\xb2\x38\x5d\xe2\x46\x0d\x95\xa5\xca\xd0\x75\xcd\x44\x2e\xbc\x5c\xf4\x63\x9c\x0c\x01\xd5\x25\x89\xc1\x5e\xc2\x0a\x54\x36\xcf\xc2\x03\xa8\x1b\x88\x7d\xf9\xc4\x96\x10\x4c\x8e\xf7\xb0\x71\xb2\x16\xa1\xb6\xf1\x4a\x65\xfa\x8f\x74\x84\xd6\x5c\xdd\x9f\xe0\x66\x9b\x52\x04\x5e\x8e\x02\x2f\x08\x13\x9f\xa2\x34\xeb\xee\xb1\x1f\xce\x48\xe1\xf2\x41\x58\x43\x58\xac\xbf\xd7\x77\xce\x22\x59\x54\x46\x7a\xb0\xd4\x49\xc7\xa2\x06\xe2\xc5\xf2\x50\xae\x75\x2f\xf5\x38\x84\x5c\xbe\xde\x99\xd3\x52\x32\x38\xde\x2c\xa9\x00\xa0\x26\x51\x29\xcc\xf7\xb3\xdc\x42\xb1\x01\x16\x5d\xe0\x1a\xea\xaf\x82\x19\xf3\xd9\x93\x4a\x59\x27\x23\x23\x4b\x20\x25\xd7\x4b\xc5\xaa\x2b\x5d\xf1\xc6\xd4\xbd\x71\x14\xa0\x9c\x0c\x2b\x62\x70\xd8\xa2\x76\xfa\x9d\xd5\xbe\xd1\xc9\x0c\xc5\xc7\x1b\xfe\x5e\x11\x9d\x71\xbe\x26\xa6\xef\x4b\x59\x81\x7f\x15\x0e\x37\x22\xa0\xe9\x56\xc5\x34\xee\xc5\x05\x23\xbf\xdb\xe8\x44\x26\xc2\x16\x06\x28\xee\xf7\x53\xc1\x07\x1f\xad\x09\xa7\x5a\x53\x7f\x08\xe4\x82\x9b\x5b\x98\xa0\x34\xbf\x4e\xa7\x7e\x91\x5b\xf8\x82\x54\x4e\x01\x80\x81\x24\x68\x37\x7c\x93\x54\x42\x1e\x68\xf6\x47\xb7\x03\x3e\x59\xbf\x88\x8e\x63\x24\x6a\x08\x6c\xce\x0b\x30\x26\x31\x5a\x2a\x91\xeb\xd4\xf9\x2f\xf6\xb9\x5d\x46\x21\x45\xf9\x72\xe7\x7a\xde\xd9\x81\x25\x74\xdc\x45\x21\x34\xe6\x3e\xb4\xe8\xb5\xdd\xf0\xc6\xa9\x83\xcb\xc8\xae\x15\x99\xc0\xce\x96\x3b\x03\xe2\x04\x99\x9e\x76\x90\x2b\xc4\xf4\x66\xf5\x21\x33\x7a\x06\x5e\x54\xd9\xfb\x94\xd5\xcd\xe1\x04\x1f\x53\x7f\x42\xc4\xe4\x4d\x78\x9a\x4c\x1d\xc2\x42\x01\x9e\xc5\x2b\x62\xf8\x0c\xdb\x02\xd2\xc3\xe8\x74\xf7\x75\x50\xe2\x0c\xee\xf9\xfd\x2e\xf7\xb3\x3b\xa7\x99\x18\x58\x27\x02\x72\x97\x5b\xc6\x4a\x8b\xe1\x48\xa7\x3b\x26\x0d\xef\x55\x27\x5c\xd3\x87\x55\x9a\xc1\x63\x52\x2d\xfe\x96\xda\xb7\xb7\x60\xc8\xdc\x53\x31\xa1\xe4\x48\x4c\x74\x66\xd3\xd8\x9d\x6e\xca\xb0\x64\x6f\x54\x62\xf1\xd0\xfa\x83\x9e\x94\xf9\xda\xc2\x71\x76\x9a\x91\x29\xeb\xa8\x7f\xa9\x3a\x76\x9f\x73\x52\xf5\x71\xe8\x94\x10\x78\xde\xd1\x02\xee\x1e\x1f\xae\xe5\x61\x14\x32\x68\x0a\xc8\x64\xac\x5b\x66\x6d\x39\xab\x4f\x93\x32\x24\x7a\x67\xa9\x91\x43\xe4\xfa\x63\x31\x0a\xef\x86\x65\xde\x00\xb1\xfe\xcd\x1f\x8e\xaf\x55\x39\xd6\xff\x98\x77\x63\x3e\x98\x33\x3d\xa5\x50\x8b\xd0\x27\xb6\xc4\xb7\x21\x83\xb7\x6d\x97\x78\x7e\x74\x32\x3f\x93\xcd\x38\x36\x4a\x20\x53\x99\x5b\x32\xb7\x11\x4a\xa0\x7c\xd6\x86\x41\x5b\x6d\x28\x6b\xbd\xb0\x7e\x62\x4c\x11\x7e\x22\xdd\x9b\xc9\xf6\x24\x50\x89\x0d\x8e\xb8\x59\xb6\x4a\x1a\x25\x71\x63\xb2\x33\xb8\x96\x09\x39\x4f\x5d\x21\x5d\x88\x7a\x81\x5f\xc2\x45\xeb\x38\xe1\xcb\x33\xd8\xd8\x90\xec\x55\x97\xf7\xc8\x18\x02\x71\x65\xb6\x79\xa1\x4d\xf2\xbb\x2f\xde\xf3\x5c\x9e\x75\x87\x74\x93\x8d\x94\xaa\x2a\x0e\xd9\xbc\x0c\x0f\xdf\x0b\xa3\xd5\x3b\x9c\xa4\xf5\xa2\x4d\x25\xad\x8a\xe6\xa9\x23\x52\xa2\xa4\xbd\x79\x31\x53\xef\xc7\xac\x9c\x5d\x5a\x8f\x2d\x90\x0a\xf5\x5f\x96\x2e\x23\x24\x13\x22\x29\xf8\x26\xda\x02\x06\x79\x65\xfe\x49\x8d\xef\xae\x63\x43\x6a\x00\x6c\xfd\x7b\xc7\x99\x55\x67\x86\x11\x07\xa9\x58\xb5\x01\x89\x30\x51\x77\x23\xcb\xf8\xf4\xa3\x63\x99\xae\xe2\x52\x25\xca\x1f\x25\x41\x5c\x94\x33\x82\x40\x3a\xf5\xad\x98\xeb\xfb\x90\x60\xe2\xf2\x5e\x00\xde\xe4\x7d\x09\xee\x23\xef\x5a\xfa\x90\x0d\x0e\x89\x17\xcb\x3e\xc1\xd6\x80\x15\x1d\x81\x09\xf7\xfb\x11\xe1\xb2\x07\x96\x5f\xa6\x3f\x3d\x5c\x86\x12\x89\xa6\x43\xf1\xbd\xd5\x27\xde\x13\x79\xab\x10\xcb\x58\xd8\xdd\x76\x40\xa0\xc4\xc8\xea\xb1\xe2\x99\xe6\xd8\xdc\x58\xc3\xea\x2d\xf6\x4b\xe7\x6d\x19\xb9\xf1\x7c\xb0\xa8\xa0\x8c\xc4\x3e\x68\x4c\x33\x22\x97\x11\xee\x13\xca\x27\x99\x0c\xfb\xe8\xe0\x95\x49\x62\x9c\x13\x76\x86\xe8\x93\x4e\x3f\x24\x3e\x80\x6a\x2b\x29\x21\x94\xde\xc9\xe3\x71\x24\xac\x2d\x2a\x73\x65\xec\xe0\x2d\xdc\x03\xeb\x40\x65\xad\x26\x46\x1b\x7e\x72\x31\x25\x2d\x30\x36\xc8\xd7\x10\x56\x0b\x11\x98\x15\x24\x23\xf1\x65\xa1\x05\xba\x78\xe7\xe2\xe3\xf8\x2a\x68\xd5\x04\xd3\x7d\xa7\x28\xc1\x21\xe6\x34\xe3\x92\x2f\x47\x53\xc8\x27\xf9\x2b\xaf\xa4\x1a\x4e\x4e\xf2\x18\x83\x78\x34\xa8\x3b\x09\x26\xb9\x3e\x27\xb1\x74\x8a\x2a\x52\x56\x80\xd8\xd2\x5e\x15\x8c\x3f\x6d\x6f\x2a\xde\xb5\xf8\x75\x51\xb7\x72\xde\xec\x68\x48\x8b\xc9\x70\x8c\x62\xed\xf8\xa1\x1b\x65\x06\x47\x04\xad\x37\x3a\x5f\x8d\xd1\xaa\x54\x6a\x8a\x90\x0a\x73\x5b\x69\x07\xd1\x05\xbc\x53\xd6\xe5\xc7\xda\xc8\x6c\xde\x42\x93\x1f\x8a\x20\xc4\x7b\x34\x96\x00\x30\x74\x1d\x4c\x69\xdc\x3f\xfa\xb2\x6c\x6c\x9d\x94\x67\x57\xa3\xea\x8e\xf1\x4d\x7c\x58\xab\x5a\x57\xa4\xbe\x9c\x40\xcb\x23\xe7\x1e\xcb\xe1\xfc\xdd\x41\x2a\xb9\x8a\x37\x87\x35\xf1\xe7\x7d\x9c\xe8\xea\x45\x67\x9b\x1c\xa1\x7d\x85\xc4\x3b\xb0\x19\x07\xc2\x0b\xe9\x41\x96\x59\xba\xcb\x9a\xec\x68\x37\xb6\x39\xf5\x2e\x3d\x2d\xe3\xa0\x32\x3a\x48\x2d\x71\x0b\x6e\x90\x70\xe5\x99\x68\xf7\xd4\xb9\x37\xa6\x40\x62\x8f\x96\x58\x55\xc9\xd9\x23\x57\xde\x02\x24\x2d\xc8\x55\xf6\xca\x69\xe0\xde\x91\xcf\x88\xc9\x27\xdb\x57\xe8\x9c\x40\x2c\x06\x9b\xa3\x63\xb8\x2d\x0c\xcd\xdf\xd9\x79\x66\xba\x51\x75\x29\x8f\x14\xd8\x3a\x29\x3a\xca\x77\xcf\xef\x45\x12\x05\x46\x0f\x3d\x5b\x51\x99\xed\xef\x47\x5e\x46\xf0\x52\xd9\x12\x86\x40\x26\x45\x40\xad\xde\xc2\xe5\xb2\x9a\xdf\xa4\x96\xb4\x82\x65\x38\xec\x17\xd8\x1d\x71\x04\x09\xaf\x79\x36\x85\x45\xa5\xf1\x1a\xb2\xb3\x14\x9f\xb6\x18\x51\xae\x2e\x11\x80\xd8\x32\x6b\xc7\x48\xb6\x0e\xdd\xe6\x30\xa4\xee\xc4\xfb\x29\xe4\xf3\xa1\x4a\x04\x78\x4f\xd7\xb3\x39\xd9\x91\x21\xe0\x97\x17\x98\x74\xee\x9e\x83\x6b\x76\x1b\x4d\xe1\xbf\x29\xed\xf4\x74\xb0\xe6\x58\x3a\x38\x67\x42\x73\xfa\x95\xe7\x4c\xeb\xe2\xbd\x05\x07\x4b\xe3\xa8\x4f\xd9\xb1\x87\x76\xd0\x41\xe1\xd9\x8c\x80\x87\xa8\x3c\x55\x74\xa7\x0f\xed\xd9\x89\x72\xe2\x9b\x8a\x32\xcc\xa7\x8c\x74\x0c\xf6\x7c\xd2\x0f\x7c\x06\x82\x02\xd8\xe2\x28\x66\x24\xce\x17\xa2\xf1\x47\x7d\xa5\x66\x1a\xf0\x92\xe0\xe1\x5e\x28\x05\xe0\x17\xcb\xff\x06\xce\x2c\x20\x60\x28\x4e\x60\x30\x76\x58\x9f\x49\xdb\xe0\xae\x65\x9c\x8f\x74\xe5\xde\x92\xbb\xf2\xed\xfb\x47\xf9\x02\xd3\x27\xf7\x28\x8d\x04\xe8\x2b\x15\x11\x40\x7c\x49\x49\x1d\x6f\xf7\x62\xd0\x81\x38\xd3\x2f\xe3\x16\x43\xcf\x9a\xd7\x05\x02\xa5\xe6\xbf\x22\x37\xf9\xfe\xd8\x79\xdd\xd4\x25\x9c\x72\x62\x8e\x96\xb2\x60\xb4\xce\x39\x69\x06\x65\x8d\x42\xe0\x0f\x9d\x3f\x29\x71\x83\xae\x30\xde\x24\x99\x74\xa2\x73\x6d\x5c\xff\x74\x45\xc3\xef\xca\x36\x7c\x4c\x86\x6f\x8b\xf4\x53\xd6\xae\x8d\x4d\xad\xc0\xfb\xad\x02\x6b\x6b\xa9\xf7\x83\x4d\xaa\xe8\x6f\x43\x8f\x9e\xd7\x79\xfe\x96\x63\x73\xb9\xa1\x32\x61\x50\x9c\xe5\x9d\x54\x79\x6e\xab\x3c\x50\xae\x1d\x93\x77\x8a\xce\x72\xad\xe3\xb6\xb6\x2a\x9a\x09\xbb\x31\x16\x76\xd4\x78\x30\x6a\x1c\xa8\x01\x0b\x64\xc3\x08\xe7\xac\xaf\x09\x77\x9e\x52\x15\xbf\x4d\x08\x92\x75\xbb\x4b\x13\x80\x60\xce\xd5\x42\x94\xfa\x71\x1c\xde\xce\x0c\xdb\x68\x18\x2e\xfb\xe7\xac\xbf\x2c\xe0\xc6\x97\x59\x34\xda\xee\xd8\xe0\xdf\xd0\xd6\x48\x44\x4c\x46\xfa\x38\x54\x60\xb8\x6c\xe7\x02\x89\x93\xcc\xc4\xa7\x00\xa8\x67\x6f\x79\x46\x2e\xba\xa9\xd9\x9d\x09\x3a\x6e\x01\x7a\x04\x2d\xca\x63\x8f\x4e\x55\xa7\x5c\x41\x3a\x6d\x24\xeb\x60\x77\x1e\xcf\x9f\x11\x67\x53\x8a\xab\x77\x44\xae\x0a\x51\x91\x3f\xd8\xd9\x46\xaf\xed\xf8\x28\xf0\x3d\xa5\x6a\xc1\x4d\xb8\x71\xa8\x9a\x0d\x9a\x7a\xeb\x94\xff\x8b\xf4\x9d\x87\xf4\xd5\x81\x26\xe7\xf8\xb6\x20\x2d\x3f\xe0\x52\x3e\xfb\xeb\x56\x43\x44\x67\x4d\x23\xef\x33\x92\xc7\xcb\xb3\xcb\xe5\x91\x6e\x78\xfa\x28\x0c\x37\x30\x61\xfb\x04\x78\x09\xda\x67\x77\xd3\x3f\x31\xde\xfc\xac\xb9\x56\xde\x32\x7f\x27\x4c\xb5\x33\x07\xc4\xb1\x8f\xd6\x66\xdb\x8d\x8c\xb4\x5a\xc1\x35\x16\xdd\x6d\xaf\x25\xa2\xf0\x86\x61\x34\xd4\x4e\x94\xe6\x92\xd4\x12\x8c\xbf\x19\xee\xf9\xf5\x3b\xfc\x38\x57\x55\x63\xaa\x6b\x60\x17\xa8\xc3\x8a\x2b\xbf\x34\x40\xc1\xe1\xcd\xa5\xc2\x3b\xdb\xb4\x84\x8d\xc7\x3e\xf7\x4d\x4b\x2f\xb8\x12\xbc\x13\xdd\xde\x54\xd0\x1d\xd0\x78\x95\x0f\xfd\x96\x49\xc1\xf7\x8c\x69\x5f\x87\xf7\x38\x07\x88\x3f\x99\x70\x09\x34\xb6\xca\x81\x5f\x94\x96\x9f\xfd\x3e\xdc\xb1\xff\x71\x67\xb2\x3e\xe0\xfa\x62\x27\x69\x96\xc1\xb8\x98\x5f\x40\x10\x98\xd7\x1a\x03\xcf\xce\x9a\x94\xae\x54\xce\x3b\x96\x1b\x71\x47\xaa\xa4\xef\xd9\xd6\x12\xe8\xe7\xaf\xeb\x22\xa1\xd4\x7c\x8c\xd9\x17\x8d\x3f\x4c\x92\x87\xb5\x2f\x81\x3f\x7c\x0a\x5b\xc1\x08\x99\x84\xe2\x4e\x82\x80\x1c\x6f\xac\x62\x19\x26\xfa\xe2\xfe\xd1\x50\x68\xc1\x58\xdf\x2c\x50\x10\x10\x2f\x5d\xdc\xd3\x29\xd8\xe4\x4b\x15\xc1\x41\xaf\x71\x64\xfb\xaf\x05\x48\x68\x4f\xe5\x2f\x5f\x60\xda\xca\xce\xac\xe7\x1e\xdf\x2b\x24\xa8\x06\x71\xb0\x2e\x8a\x34\x11\x4a\x10\x05\x9e\x9f\x32\xc3\x78\x61\x17\x1a\x24\x0d\x68\x78\xfe\x7c\x98\x1d\xee\xd4\x8b\xa5\x98\xa8\xad\x8e\xe2\x42\x65\x8c\xe1\xca\x0f\x4b\x53\xba\x6a\x5a\xc3\x0d\xab\x5b\x3d\xfa\x12\x8e\xe1\x06\x9c\xb1\xda\xce\x8c\x73\xe3\x9b\xaa\x23\xab\x56\x96\xb8\xc8\x47\x88\xa6\x5a\x68\x46\x2a\x4c\x0c\x1d\x8b\x61\xea\x44\x75\x23\x93\xd1\xe8\x5e\xf5\xac\x14\xa2\x7f\xb9\xc4\x44\xe3\xe1\xd1\x8c\x2d\x07\x83\x0c\xb7\xc5\x78\x88\x36\x2c\x75\x55\x67\xd9\xe9\xe5\xc5\x88\x17\x71\xb5\x85\x64\x66\x79\xbe\xd9\xf4\xad\x50\xc9\xf2\x04\xb7\xae\x50\x34\x62\x53\x13\x2c\xb5\x48\x2e\x24\x58\x95\x85\x68\x63\xbb\x69\xb5\x6e\xd6\x4f\x0a\xbf\x50\x4d\x3b\x63\xd7\x68\x59\x01\xa9\xf2\xd7\xc6\x51\x16\xf3\x9e\x71\xaf\xa0\xab\xb8\x0e\x74\xbf\xe4\x76\xba\x87\x1b\x51\x86\x28\x88\x96\x23\xec\x39\xa8\xce\xb9\x44\x6a\x5b\x95\x71\xae\xab\x99\x71\xde\x75\x0d\x46\x24\x65\xfe\xa3\x94\xd5\x14\xe3\xd0\x4b\xa6\xf1\xab\x9e\xe1\xeb\x0a\xa8\xb5\x5c\x0f\x51\x52\x4d\x89\xc5\x88\xa0\x1d\x75\xb3\x03\xfc\xda\x6d\x1b\x15\x2b\x43\x54\xa8\x53\x84\xe7\xd8\x4c\x06\xe4\x42\x53\x42\x57\x6e\x46\xed\x67\xc8\x1e\xf7\x18\xa4\xaf\xdf\x60\x98\x39\x52\x2a\x07\xb9\xf6\xb2\xe3\xf4\x41\xce\x7e\xdc\x21\x8f\xe2\x2a\xfc\xb4\x40\x71\xff\x6d\x30\x3d\x69\x51\xec\x3c\xc2\xd8\xc5\xc4\x73\x28\x5a\x94\x7c\xa7\x9e\xdf\x10\x07\x60\x92\xfa\x36\x5e\x3e\x42\x4f\xe8\xd6\xf9\xfe\x83\x8b\xc7\x08\x7b\x12\x11\x2b\xdf\x92\xba\x8a\xed\x44\x92\xf4\xb0\xdd\x7b\x01\x2f\x0b\xe8\x52\x90\x62\x73\x98\x23\x07\x58\xe8\xee\xa4\x83\xe2\x2f\x59\xd9\x01\x42\x73\xdf\x73\x1c\xe5\xd0\xce\x74\x1d\x2e\x12\xf6\xfd\xd0\xb8\xf6\xbb\x0d\x02\xd7\x30\xd4\xcc\x56\xff\x56\x0f\x2e\x0b\xb5\x5a\x3c\x42\xb2\x50\xf1\x89\x99\xef\x07\xfa\xa6\xf9\x06\xeb\xf7\xe8\x3b\x56\x69\xb3\xc3\xd1\xfc\x5b\xbe\xd7\xb7\x35\x6d\xf5\xbe\x6a\x03\x00\xb8\x57\xe9\x49\x24\xf9\x29\x9f\x03\x0f\x4c\x34\x87\x0a\x53\x91\xe8\xde\x55\x7b\xc1\x26\x8f\x43\xd9\xfa\x8d\x54\xd0\x3c\xc4\x1b\x6d\x39\x08\xeb\xbc\x6b\xc1\x68\x7e\x03\x66\x4c\x30\x36\x4e\x6c\xaf\xdc\xe5\x6a\x39\xce\x41\x11\x6d\x8f\x94\x0a\xe3\x85\x16\xef\x87\xc8\x76\x87\x19\x14\xd5\xce\x4e\x85\x83\x15\xf9\x69\xdc\x83\x4c\x3e\x27\x43\x78\x7b\x02\xbb\x88\xa1\x60\x25\x77\x0d\xf7\x8c\xed\x4e\xba\xe0\x00\xe7\x8c\x3e\xb2\x7f\x2a\xc1\xb5\xd5\x3d\x9b\x27\xfd\xd8\x55\x96\xb5\x54\x85\xd2\x1b\xed\xa7\x8c\x01\x2e\xd2\x1e\x39\x02\xdb\x93\xd5\xd9\xab\x3f\x2b\xa3\x44\xb0\x78\x26\xc3\x54\x20\x79\x1c\x9b\x7e\x4c\xf9\x81\x81\xad\x32\xfc\x73\xea\x86\xe2\xdf\x6f\x8e\xcf\xd2\xd2\x7e\xf9\xe7\xdf\x06\x0a\x5c\xa5\xa3\xf3\x85\x67\xbf\x8b\xed\x2b\x7c\x0f\x51\x26\x45\xed\xb0\xc0\xcf\x70\x72\xc2\x62\x75\x2f\x50\xd2\xd0\x92\x77\x46\xf1\x48\x04\x86\x3f\x35\xe1\x95\xff\xc3\x34\xf9\x2e\xec\x39\x12\x84\xfd\xc8\xfa\x5e\x19\xfc\x35\x90\x00\x9b\xf7\x13\x48\x5f\x10\x8d\xa3\x5d\x55\x24\x3d\x7a\x70\x41\x33\xde\x18\xd0\x0a\x3c\x90\xb3\xa6\x6e\x19\x7c\x32\xdc\x0b\x63\xb4\x27\xbd\xeb\x1d\xa9\xed\xf8\x6e\x79\xdd\xfe\x95\x96\x58\x56\xfe\x4b\xe2\xe1\x4a\xd3\x56\x3c\x57\x46\x5b\x17\xb1\xe9\xda\x44\x1a\x89\x3b\x01\xb7\xf9\x62\xcc\x1b\x04\xd7\x13\xd9\xe5\x15\x79\xa4\x9e\x2f\xf0\xad\xdc\x64\xc9\x1b\xfe\xbb\xea\xdf\x42\x12\x10\x13\x2a\x79\xbc\x81\x5f\xd6\x72\x9d\x5c\xa8\xec\x22\xb3\x5b\xa7\x81\xdd\x13\xf8\x61\xa8\x0b\xd9\x96\x70\x97\xd8\x28\xf5\x4a\xe0\x39\x1d\xa6\xa2\x28\x46\xe5\x36\xe7\xcf\x7d\xf3\xe1\x81\xab\xe2\x5d\xe4\xa8\x0d\xa6\x6e\x3f\x6e\x1e\x60\xb9\xf4\x5a\xe4\x67\x1b\x81\x48\x08\xb3\x30\x83\x29\x8a\x32\x6b\x08\x5f\x4c\x4a\x03\xa5\x89\x12\x85\xbc\x7d\x9e\x7c\x96\x07\x7b\x10\xae\x28\x21\x43\xea\x72\xdb\xd9\xf1\xde\xdf\x26\x1b\x8f\x46\x92\xaf\xee\x32\x71\x51\xb0\x83\xc9\x69\xd7\x4c\x8a\xf4\xb3\x8a\x50\xfc\x01\xcf\xcd\x75\x41\x55\x05\xed\x94\x27\x3b\xe1\x7e\x20\x68\x71\xb5\xbe\x9a\x9e\x08\x7e\x83\x8f\xc3\xdc\x82\xd8\x95\x77\x12\x5d\x59\x74\xb4\x27\xf2\x3f\xd1\x96\x8c\x17\xdc\xd9\xfa\xc2\x8d\xab\xfa\x93\x9f\x03\x4f\xbb\xc7\x5f\x7e\xab\xcb\xde\xce\x9a\x28\xaf\x36\x2e\x38\x21\xf0\x4d\x0e\x94\x6d\x02\x3a\x0b\xf4\x20\x1a\x63\xb0\xc6\x06\xc3\xf0\x60\x17\xe1\x53\x4d\x98\xc2\x83\x59\xfd\x30\x09\x66\x2b\x27\xab\x54\x08\x12\x83\x0b\x41\x8e\xf9\x81\x40\xde\x0f\xd8\x26\x1e\x71\x73\x07\x8c\xf4\xe9\x68\x28\x33\x2a\x63\x2e\x8b\xd1\x13\x7e\x18\x84\xd0\x2e\xd2\x76\xd4\xbd\xc4\x26\xaa\x15\x6a\xbe\x24\x47\xd8\x41\xc8\x30\x52\xcb\xa8\xe8\x5f\x0f\xb2\x0b\x54\x36\x5c\x31\x13\x41\x89\x35\xa4\x89\xd2\x44\xe1\xa7\x26\x93\x7d\x13\x2a\x49\x2f\x72\x07\x40\xc0\xee\x8a\x89\x38\xa5\x8a\x36\xa2\xdc\x42\x6a\x78\xc8\x23\xc7\xdc\x0c\x09\x23\x0a\x12\xa9\x3f\x86\x85\xb7\x7c\xf5\x44\x08\x7e\xdb\x04\xe0\x1b\x34\x8e\xc4\x92\x7b\xdd\xba\x29\xa9\xa3\x43\x57\xf3\x65\xe6\xf3\xa9\xa5\xf7\x0a\xc7\x85\x69\x59\xf9\x75\x10\x3b\xf8\x65\x36\x62\xd5\x74\x59\xb3\x05\x6f\x86\x77\x61\x63\x7a\xb2\xd0\x53\x56\x7b\x67\xb7\xe9\x53\xfc\x2d\x67\xcf\x8f\x3e\xa4\xe5\xe4\x12\xa2\xb8\x53\xe6\xbd\xff\x2e\x7f\x61\x43\x77\x2c\xdd\x5f\xc7\xd8\xe3\x8f\xbd\x3d\x6b\x7c\xa6\xcb\xaf\x04\x39\x49\xdf\x44\xfa\x29\xde\xf8\x46\x82\x80\x6b\x9c\x44\x63\x11\x84\x5b\x65\x24\x2b\xdd\xaf\xd5\x7c\xfe\x65\xf1\x1c\xe6\x07\xc0\xe7\x2f\xda\x0b\x31\xe7\x42\xe4\x77\x81\xdb\x5b\xf7\x9b\x90\xce\x5f\x09\x10\x42\x6e\x75\x40\x68\xe7\x6a\x29\x1a\xf3\x24\x66\x9c\x3e\x46\xf8\x3a\x8f\x8c\x7f\xdb\xc8\x17\x5c\x4c\xbe\x44\xff\xeb\x4e\xd2\x39\x89\x8d\xc6\x4d\x05\xb1\xfe\x0c\x24\x23\x02\xad\xd8\x10\xef\x19\x7a\x86\x90\xb6\xdd\x0e\x86\x6f\x41\x6c\xde\x1b\x13\xc9\x41\xbc\xf3\xad\x16\xc7\xc0\xc9\x5c\x60\xea\xcd\x9e\x0f\xc9\x6c\x8b\x00\x0d\xde\x0f\x39\x95\x39\xbf\x71\xd2\x40\x65\xd6\xa2\x75\x51\x09\xe3\xf6\x42\x7a\xa4\x2f\x9a\x8f\x19\x0a\x7a\xcc\xef\x10\x8f\xb3\xb0\x00\x74\x06\xb4\x96\xcd\x00\xc0\xaa\x68\x2c\xc7\x04\x9f\xa5\x19\x8f\x21\x6b\xaa\x21\xb4\x7b\x47\xc8\xde\x9c\xb1\xf9\x55\x5d\x9a\xc1\x38\xc7\x03\xe5\xe5\xba\x86\x3e\x0a\xc1\xb2\xed\xcf\x67\xed\xf0\x49\x3b\xf8\x15\x58\xc1\x87\xc5\xd8\x21\x69\x54\x0f\xbf\xf8\xb2\x10\x6b\x85\xc1\x4d\xb1\x99\xbd\xc5\xb5\xfe\xae\xa9\x20\x09\xe0\xf4\xab\x1c\xef\x7b\xc8\x5d\x8e\x41\x95\xed\x69\x89\xfd\x63\xae\x89\xd0\x65\xb8\x6d\x61\x1d\x81\x55\x3b\x6f\x12\x8a\x21\x43\x35\xe3\x6d\x04\x76\x87\x18\x81\x76\xcc\xb6\x9e\x51\xf8\x17\x07\x9a\x66\xba\xb1\x54\x58\x38\xae\x2a\xc4\x6d\xaa\x7c\x16\x42\xda\x84\x71\x62\xaf\x26\xa0\x6d\xed\x0a\x86\x9b\x48\x88\x34\x84\xcb\x98\xd0\xd6\x01\x90\x7a\xd9\xdc\x36\x3b\x4a\x10\x3f\xbc\x1f\x70\x96\xa9\x32\x2e\x89\x7a\x21\x55\x52\xce\x43\xa9\x00\xe9\xde\xca\x6e\x53\xca\x9c\xe1\x8b\x54\xdf\x22\xec\x04\x12\x3f\x1c\x42\xe6\xff\x11\x75\x3a\xfd\x85\x94\x2c\xec\x55\x8f\xe0\x1f\xb5\xda\x5b\x4a\x8e\xbc\xaa\x2d\x3e\xda\x7e\x3a\x2a\xd2\x9c\x3d\x72\xb5\xc4\x64\x9a\x1e\x1d\xd8\xbc\xb4\xe0\xe7\x8c\x8e\x0c\x7b\x7e\xd0\x9f\xdb\x4f\xf3\x9c\x6e\x4e\xfc\xb1\x96\x94\xa0\x50\x2f\xec\xa9\xe4\x46\x5d\xb4\x3d\x61\x6a\x90\x5c\xa2\xc2\xe0\x58\x64\x23\xc6\x06\x86\xb0\x38\xb0\xa7\x46\xdd\x1c\x57\x3b\x19\x66\x10\x0d\x3e\x9d\xce\xc2\x38\x58\x95\x85\x65\x5f\x97\xf1\xfa\xca\x98\x01\xa5\x7e\x57\x61\x5b\x28\x88\x5b\xd4\x03\x7f\xcf\xb8\xae\xb8\x7c\x47\x8b\x7f\xd8\x7c\xd5\x3a\xc0\x1a\x6d\x9c\xc4\x99\xbd\x08\x21\x74\xad\x9d\x2b\x14\xa4\x2b\xf7\x76\x5d\x8f\xa4\x9a\x1b\x86\x5d\x0f\x43\x66\x58\x96\xc0\x6d\x49\x78\x6e\x02\x61\xe7\x51\x80\x6b\xcf\x6d\xdf\x69\x4f\x12\xe4\xf1\xa1\x62\xcf\xac\xde\xb0\x4d\x42\xd5\xaa\xcf\x7e\x0c\xb8\xe8\x7d\x38\xd9\xf4\xe5\x20\x28\xcd\x71\xc1\x96\xa9\x79\x82\x6d\x71\x28\xc8\xaf\xe4\x48\x0e\xab\x1c\x04\x2e\x6a\x16\x58\x4d\x04\x8b\x59\x05\x47\xef\xcf\xbf\x08\x8e\xdf\xa0\x74\x77\xc9\x22\x71\xe5\x19\x77\xbf\xa6\xd6\x22\xe2\xd3\x60\x0d\xe7\xcc\xb6\xb6\xff\xe3\x79\x58\xbb\xb7\x45\xdc\x56\x3b\xf4\x5c\xcf\x95\x67\x7e\x85\x61\x43\x06\x62\x70\xa1\x9b\xb7\x9d\xce\x7b\xef\xf6\xd2\x0c\x3d\x2f\xd3\x02\xde\xe3\xcd\xe2\xc5\x2c\xf2\x6a\x88\xe3\x2e\x4f\x77\x4c\x05\x8d\xf8\x1c\x96\x8b\xfe\x71\x67\xf8\x57\x32\x70\x29\x19\x9f\xeb\xce\x68\xb0\x2d\x40\x3c\xba\xbd\x83\x97\x41\x9b\xe0\xa6\x61\x07\xff\x6f\x26\xbc\x0c\x0f\x53\x2b\x8c\xb1\x20\x4b\xf3\x79\x5a\x35\x66\x0d\x0e\x6e\xfb\xda\x81\xb8\x4f\xc5\x3f\x60\x15\xd9\x85\xea\xfc\x30\xa3\xcb\x4d\x45\x09\xc0\xc8\x46\xe6\x11\x10\xb2\xfa\x36\x3d\x25\x29\x74\xec\x7f\xd2\xa8\x47\xb8\x07\xfd\x8c\x62\xe0\xe6\x64\x76\xb4\x37\xd1\x4e\x4c\xae\x03\xea\xef\xae\xed\xdc\x02\xbe\xd7\xa7\x5b\x2e\xe4\x9a\x94\x9b\x5d\x10\x3d\xaa\x82\x3a\xc0\x73\x05\xeb\x0b\xcb\xee\xcb\x46\x4b\xda\xe2\x86\xe5\x06\x6b\x0f\xc4\x44\xcd\x4f\x81\xc9\x3c\xa4\x72\x8d\x13\xec\x19\xc1\xc8\xad\xc7\xed\x32\xc3\x58\xcf\x32\xdf\x8a\x41\xc6\xbf\xd3\xb2\x8c\x29\x4e\x55\xd7\xc7\x43\x2a\xcf\x6b\xb9\xba\xfd\x86\x68\x83\x67\x29\x31\xa3\x25\xe6\xe3\xaf\x5d\xd4\xe7\x81\x24\xc8\xf1\xc9\x5f\x05\xe3\x08\x0e\x9d\x73\xcc\x4b\xcf\xe2\x61\x43\x10\x89\x91\x25\x1f\xb4\x1e\x6c\x81\x19\x8f\x27\xee\xff\x1b\xee\xd4\x31\x10\x1c\x8a\xf0\x15\x0a\xa1\x83\x60\xba\xdb\x40\x4b\xaa\x1c\x1f\xbf\x05\x50\xc7\x3b\x5d\x3f\xdc\xee\x22\xe0\x1f\x88\xf3\x6d\xfb\xa7\xd8\x6c\xa4\x4b\x1a\x34\x90\x47\x9e\x57\x66\xe2\x59\xfc\x78\x8a\x5c\xe9\xe7\xb6\x7e\xe4\x7b\x22\xed\xf1\xc7\x50\x33\x6b\x9f\xa2\x9a\x01\x11\xb0\x55\xfb\x6c\xea\x94\x1f\xae\x59\x9e\x2c\x3b\xd9\xd2\x42\x5e\xb0\xcf\x98\x43\xad\x6c\xa8\x46\x43\x42\xb1\x33\x16\x89\xd6\x74\x32\x33\xa8\x4d\xca\xb5\x43\xc7\xed\x91\x6a\xfe\xa0\xa8\x39\x30\x31\x06\xd9\x11\x99\x6a\x2c\x30\x9f\xd3\x2c\xdd\xcf\xc1\xb9\x67\xf5\x4c\x6a\xa1\x06\xc5\x48\x8b\x46\xc3\x78\xe9\xab\x17\x7e\x00\x2d\xfd\xa7\x72\xb0\xfe\xbf\xb7\xe5\x2a\x2b\xa3\xb0\xc2\xfb\x6e\x5f\x1a\x59\xd9\xe1\x03\x86\xd7\x97\x5c\x86\x83\x15\x5d\x54\x57\xd6\xa6\x79\x26\x61\xdd\xe6\x8b\xd3\x25\x76\xda\xe1\x42\x4d\xaa\x12\x50\x46\x6c\xc1\x0c\x49\xc9\x82\xbb\xda\xf5\xcf\xb6\x63\x3a\xc7\xcb\x4f\x1f\x40\x09\xe1\x11\xe9\x95\x1c\x70\x38\x1b\x48\x3e\x8f\x26\xb3\xe3\xba\x0b\x2c\xe4\x0e\x58\x66\x7e\xcd\x32\x95\xed\x46\x0a\xfa\xc0\xd9\xf1\xe5\x95\xc4\x03\xe1\xf1\x76\x09\xce\x62\x12\x35\x25\xf7\x1e\x00\xd5\xb1\x54\xfd\xec\x42\xc6\x4e\x61\x4c\x7a\x9e\xd0\x01\xcb\x30\xa0\xfb\xd8\xc4\x7b\xc5\xb6\x38\x2f\xc7\xbd\x7c\x90\x7e\x4c\x9c\xeb\xe4\x29\xb9\x38\x35\x06\xe5\x3d\x74\xda\x6d\x47\xc9\xb3\xe1\x55\xaf\x48\x4d\x42\xd7\xf0\xaa\x3a\x25\xc9\x1c\x9c\x4e\xbb\x11\x39\x5c\x35\x04\x61\x6c\x60\xf3\x96\xa4\x97\x60\x16\x97\x34\x97\x94\x3b\x25\xd6\x9f\xf2\x20\x9d\xcb\x71\x09\x9b\x5c\x1b\x66\xa2\xe8\xed\x7e\x2a\xad\x91\xb2\xe0\xa4\xde\xc8\x4c\x57\x56\xfa\xde\x03\xff\x1b\xa4\x1f\x12\x59\x87\x27\x00\x5f\x19\x3f\x40\x14\xeb\x1b\x3d\x25\x76\xac\x9a\x6a\xec\xad\x74\xc7\xfe\xdd\x76\xbc\x3c\xe5\xd9\x2f\xa4\x2c\x7a\x97\xf1\x1e\x02\xf8\x2f\x21\xe0\x44\x54\x7d\xe1\x96\xcd\xa6\x38\x65\x1a\x9a\x62\x87\x22\x36\x87\x4a\x60\xf5\xf7\x75\xd2\x34\x7d\xd2\x3c\x51\x64\xf0\x1b\x1a\x46\xa9\x2e\x4d\x6d\x17\xce\x5b\x27\xd0\x3b\xb0\x5f\x41\x66\xad\xbd\xbb\xed\xe5\x42\xd7\x7b\x8a\x90\xe1\xdf\xf0\xbe\x96\x85\x03\xc2\x47\x9f\xac\x88\x66\x90\xeb\x42\xd3\x27\xf6\xd2\xd0\xaf\xba\xc9\x1f\x6f\x91\xeb\x50\x34\x15\x1c\xe2\x1a\xf2\x4b\x2b\xd2\x6a\x3b\x91\x66\xc1\xbd\x7b\xbd\x27\xea\xe3\x84\xb8\x6d\x08\x51\xad\x16\x15\xfe\x6c\xcc\x78\x46\x30\xff\x8f\x86\xef\xa9\x49\x69\x36\x5e\x16\xca\xbf\xee\xc2\x8d\xc0\xf7\xae\x7c\x53\xdd\xf2\x4d\x71\x9f\xfe\x96\x48\xe4\x00\xd8\x39\xb2\x27\x9a\x0e\x0c\xeb\x24\x5c\x25\xe9\x97\x04\xff\x88\x75\xbb\xee\x8f\xb7\xa5\x74\x28\x63\xb7\x56\x59\x97\x63\x28\x56\xdc\x79\xe2\x95\x82\x30\x62\x00\x46\xd2\xf7\x01\x31\xd3\xa9\x2e\x50\xf1\xca\x26\x1e\x24\xac\xc5\x62\x8d\xf0\x4e\x02\x34\x55\x22\x57\xff\xf8\x70\x59\xa5\xb2\xd4\xb7\x56\xd5\xf0\x64\xaf\xaf\x95\x4d\x75\xdc\xb7\xa7\xf4\x9a\xb6\x8f\xc5\xf2\x3b\x3f\xa4\x01\x1f\xb9\x34\xa9\x6e\x05\xb8\xe9\x0e\xf3\xac\xd7\xbe\x51\x6e\x8d\xa1\xe0\xac\x9b\xfa\x38\x4e\xdf\x2d\x01\xc6\x5e\x9d\x07\xe7\xa6\xde\x8a\xf9\xb8\x77\xc2\x1f\x6d\xa0\x76\x6c\x20\x31\x19\xa2\x5c\x50\x4c\x69\x81\x7b\x43\x79\x69\x45\x4e\x25\xb1\x53\x36\x36\x1c\x85\x5c\x73\x53\x71\xac\x9f\x2d\x0e\xb6\x3c\xba\xb4\x30\x84\x05\xae\x4a\x4f\x6e\xf7\x92\x8e\xf0\x3e\xcf\x4d\xfc\x01\x45\xca\xaa\xa0\xef\x70\xe3\x8a\xc6\x46\xd6\xfd\x32\x3a\x67\xaa\x81\xc0\x62\x6d\x1c\x12\xae\xa2\xf0\x83\x8e\xc6\xd3\xdc\x28\x43\x06\x68\x09\xc8\x0f\xf5\x9f\x66\x10\xf7\x9d\x00\xb9\xd4\x89\xb1\xc6\x8a\x45\xbd\x37\x97\x15\x94\x04\xaf\x00\x99\x84\x58\x73\x21\xbc\xe8\xd0\x86\xdd\x28\xed\x8c\x68\xae\x2c\x5c\x2b\x4a\xee\xb3\xbb\xe9\x30\x38\x98\xfe\x54\x7d\x55\x36\xc5\xc5\xcb\x41\x09\x7b\x10\xda\xab\xf0\xd0\x0d\x97\x56\x99\x06\x88\x4d\x27\x5a\xcb\x29\xc3\x53\xdf\x2d\xe2\x56\x9c\x01\xed\xf5\x30\xfc\x2a\xee\x01\xa2\x84\xb2\x56\x67\x32\xfc\x1b\x8d\x5f\x55\xd0\x62\xea\x3a\xf3\xa9\x0a\x9d\xe7\xb8\xa5\xab\x25\xd7\xae\xe8\x3c\x29\xe5\x73\x76\x3f\x29\xf5\x99\x5c\x5a\xde\x0d\xda\xb0\xb8\xc0\xf7\x6a\xe3\x79\x58\x64\x0d\x30\x2e\x0c\x57\x29\xda\xed\x66\x1f\xa0\x80\x5a\xe1\x0c\x95\xd1\xd8\x7a\xa5\xf2\xa2\x9c\x2d\x4b\x33\xa3\x12\x0a\x23\x1d\x9a\xa1\x35\x52\x79\x1c\x81\x18\x75\xc2\x00\xc5\x77\x29\xa9\xca\x60\x7d\xb6\xd7\x4a\xf2\xa0\xc0\x86\xf0\x13\x99\xd0\x23\xf4\xb9\xed\xee\x4a\x7b\xe5\x1b\x7d\x16\xd8\x05\x2c\xd0\x85\xdb\x0f\xf9\x0b\xb7\x92\x68\x60\x76\xc9\xcd\x18\x29\xa6\xce\x3d\xde\x00\x67\x7c\xd5\x11\xee\xfe\xcc\x2a\x1c\x64\x29\x1b\xfe\xed\x2a\xb2\xaa\x65\x37\x7b\xf2\x78\xb7\xaa\x6b\x35\x35\x2e\x1a\xc1\x00\x1c\xce\x82\x95\x96\x8b\xf4\x84\xa6\xfc\xf4\x74\xd3\x17\x7d\x2b\x4a\x17\x59\x3e\x07\xb4\x61\x18\x72\x8f\xb9\x39\xeb\x03\xc8\xbb\x97\xef\x49\x55\xd4\xe2\x8e\xe3\x02\xd0\x96\x08\x03\xa6\x7f\x80\xc4\x2d\x17\x64\x3f\x29\xdd\x0a\x3d\x25\xdc\x99\xaf\xca\xed\x86\x24\xce\x88\x00\x1c\x00\xcb\x48\x6d\xb4\x2c\x6f\x7b\xe3\xab\x3b\xf9\x46\x45\x71\xde\x40\x78\xd1\x05\x95\x1b\x9a\xb8\x09\x14\x3e\xa7\x36\xbd\x32\xa5\xe8\xc4\x23\xa4\xdd\x9b\xf5\x8a\x8d\xcd\xd0\xa1\xe3\x63\x76\x78\x4a\xb7\x2c\x33\xd8\x39\x69\xa3\x0a\x1d\x05\x07\x42\x56\x69\x06\x2d\x3a\x9d\x0b\xc9\x29\xbe\x30\x78\xe4\x75\x48\x00\xf9\x2b\x48\x55\x02\xac\xb0\x53\x83\x8d\x10\xeb\xaa\xac\xe9\x3e\x24\x64\xfc\x11\x2a\x44\x94\x32\x06\x7f\x5f\x3f\x13\x30\x23\xf9\x0f\x5a\x5d\x25\xab\x43\x17\x97\x99\x50\xb3\x8a\xaa\x89\xfa\x00\x3d\xee\x86\x59\xb6\x3e\x6a\x2a\x9b\x0f\x30\x0d\xdd\xa4\xbd\x82\x42\xfb\x87\xbc\xbd\x10\xeb\xdc\x31\x5e\xfa\xe2\x94\xa4\xed\x24\x0e\x95\x93\xe7\x34\x02\x49\x0e\x38\x00\x28\xf5\x07\x3c\xbd\x37\xf1\x90\xf6\xfa\x6a\x5b\x55\x01\x18\x3a\x54\xdc\x42\xe4\xa5\xac\x47\xb6\x02\xa9\x40\x9d\x50\xa7\x0e\xb8\x59\x9c\x20\x5e\xc9\x85\xe0\x26\x8c\x25\xa4\x54\x91\x0f\x47\xc0\xc6\x8f\xf6\x6b\xf8\x6a\x67\x62\x0d\x93\x92\xc2\x1d\xc5\xa9\xd8\x9e\xfb\xe3\x2d\x6f\x3d\x07\xe9\x68\xae\x44\xa5\x2f\xe6\x01\x8d\x1f\xcd\x6c\xd2\xae\x6c\x6b\x3b\xa0\x1d\x04\x9c\xb0\xfa\x41\x55\xd3\xef\x3b\x91\x75\xec\xd0\x19\xab\xf8\xf7\x48\x54\x36\xba\xd8\x0a\x29\x8b\x2c\x10\x7f\xcd\x92\x95\x66\x31\x8a\x44\x97\x00\xdc\xd9\x2f\x45\x04\xe5\xf5\x22\x0a\xee\x5d\xd1\x78\x49\x8f\x16\xad\x3d\x6a\x49\x4f\x48\x0e\xca\x00\xbb\x96\x70\x88\xed\xc4\x3e\xc9\xe1\xaf\x05\x6f\x57\xfd\xe7\x8b\xc2\x46\xee\x7d\x4b\x22\xfb\x7a\x56\x7b\x1c\xe6\xe6\xa7\x9b\x0e\x53\x27\xed\x79\xe9\xbd\xf8\x21\x92\x8c\xb9\x85\xbf\x75\x31\x30\x75\x96\x7c\x83\x7c\xa0\xc1\x03\x7d\xb8\x3f\xd4\xe0\x9a\xa4\x6a\xe0\x9f\x8d\x39\x6e\x80\x29\x76\x51\x71\x99\x23\x55\x5c\x27\x30\x5d\xe2\x97\x31\xeb\x31\x86\x44\xf8\x58\x65\xfe\x40\x71\x8f\x31\x60\x35\x76\x26\x9f\x47\x38\x63\x1e\x9f\xb5\x20\x27\xd3\xb2\x01\x00\x78\xd3\x3b\x9a\xaf\xdf\x32\x6c\xee\x8f\x1f\xf7\xa2\xd9\x27\x3c\xff\x50\xd2\x8f\x34\x38\x4d\xf6\x0d\xc5\x48\xa6\x29\xe6\xb1\x34\xf3\xf4\x6c\x75\x9b\x2c\x04\x05\x44\x67\xd2\x55\x99\xc7\x35\xe4\xe4\x8d\xe4\xa5\xda\xd1\x35\xdc\xcd\x2b\x34\x27\xc8\xb0\xd6\x07\xb9\xb6\x73\x8e\x50\x59\x00\x57\xc6\xc3\xc4\x04\x3b\x6f\xe7\x7a\xdc\x54\x53\xd5\x76\x25\x5c\x70\xe2\x2b\xf1\xb3\xb1\x5a\x11\x9e\x30\xe3\xea\x1c\xbc\x98\xac\x51\x9d\x60\x48\x86\x98\x25\xf5\x53\x01\xee\x55\x64\x2a\x84\x73\xb2\x6d\x87\x0d\x7e\x82\xd6\x0e\xb3\xca\xae\xcf\xaf\x56\xe6\xda\x59\xdc\x89\xb6\xa5\x5b\x89\xa3\xb3\x37\x1f\x91\xba\xcd\x6e\xbd\xd3\x2f\x06\x79\x01\xf8\x2a\x0d\x70\xf0\x72\x45\xf3\x1a\xe3\x90\x41\xfd\xc4\x9c\x94\xb5\x19\x28\x49\x26\x9a\x76\xb7\x91\x56\xb3\x0c\xdd\x49\x03\x69\x95\xdf\x98\xdd\x53\xdb\xe2\x58\x25\x16\x1f\x60\x16\x86\xc7\x14\x75\xe8\x14\xa3\xeb\xc5\xf1\x3d\xd9\x13\x8f\x71\x5e\x00\x66\x83\x74\xeb\x9e\x7c\x5d\xde\xbb\xa6\x83\xea\xf5\xf6\x1e\x28\x93\x20\x09\xcb\x6a\x95\xe0\xde\xf1\xf5\xa1\xfd\xcd\xc4\x39\xfc\x05\xb9\xf6\x1f\x33\x1c\x98\x36\xd1\x39\x49\x4d\xcd\xee\x15\x27\xb9\x48\x05\x68\x27\x83\x4e\x19\xe7\x47\xaf\xb8\x19\xc9\xc8\xe1\xa1\xa4\x5e\x9a\x18\x6b\x89\x30\xd8\x4d\x22\x93\x7b\xf8\x5e\xa2\xd8\xfb\x54\xcf\xc3\xb0\x2c\x91\x96\x6d\xce\x02\xda\x40\x9a\xa0\x8e\x92\xd9\x06\xed\xee\xff\x28\x72\xaa\xd0\x88\x82\xfe\x15\xd6\x4d\xb3\x2f\xae\x9c\x6a\xa7\xa7\x81\x69\x02\x1a\x94\x8b\x2f\xad\xcb\x9d\xb3\x29\x88\x20\xf4\xe8\x1c\x53\x73\xb8\x4b\xcf\x39\x7f\xb7\x3d\x60\xbd\x8c\x4e\x58\x41\x15\xcc\xb4\x93\xa2\x72\x44\xa4\x98\x7c\xea\x96\xab\x43\x95\xee\x7f\x71\x10\x74\xde\x25\x47\x4d\x18\xc6\x2d\x70\x6d\xe5\x96\xa4\xd7\xf2\x3d\x77\x1e\x90\x81\x2e\x59\xfc\x84\x82\x41\x34\xaf\x9b\xa5\xac\xf0\x35\x80\x39\xeb\xed\xb2\x56\x82\xae\x1d\xc8\xa0\x97\xa8\x71\x00\x55\x06\x6f\x61\x52\x1d\xd2\xbb\x2f\xab\x84\xa3\xcb\xc8\x2b\x94\x4e\x1e\xcf\x7d\x52\xe7\x7d\x58\x0d\xa2\xa3\x0b\x94\xa5\x13\xa7\x2f\x08\xb8\x63\x61\xae\x88\x73\xc9\x24\x2c\x67\x9a\xb1\x5f\x90\x83\x3b\xba\x50\xe6\xe2\x50\x3c\xac\xed\x25\x83\x25\xb5\x1c\x14\x56\x1b\x7e\x4f\x6a\x23\x1e\x18\x59\x32\x71\xab\x00\x59\x34\x86\xa5\xe4\x68\x02\xe3\x90\x08\x4c\x3c\x6c\xe1\xa7\x43\x3d\x86\x20\xe0\xc8\xd3\x06\xb0\x69\xbb\x71\x22\xa9\x55\x48\xf3\xd1\xca\xc0\x8b\x5a\xe6\xa1\xcd\xea\x22\xf1\x69\xd2\xb2\x3c\x3b\xeb\x90\x67\xe1\x20\x70\xfd\xa7\xca\xf5\x26\x12\x76\xcc\x1c\x33\xf6\xf4\xeb\xb3\xd9\x07\x62\x1f\xe9\xd9\x59\x1c\xde\x0a\x13\xff\x3e\x4e\x53\x92\x0f\x2b\xdc\x23\x8c\x96\xe4\x00\x53\xc3\x6f\xff\xe5\x9a\x36\xcb\x05\xc7\x9b\xd8\x1e\xb6\xee\x33\x79\x40\x69\x73\x48\x9a\xd6\xb3\xd0\x86\x02\xfe\xec\x6c\x42\x0e\xc1\x4d\x06\x64\x81\xd4\xf1\x4f\x04\x3c\xc8\x96\x1a\x13\xaf\x81\x58\x96\xb9\xd8\xe1\x09\xa9\xa6\x63\x61\xb0\x6d\x59\x79\x68\x37\x38\xa0\xad\x82\xde\xb6\xeb\xae\x37\x39\x24\x52\x85\xba\x8e\xad\x3b\xb8\x62\xbc\x3b\x52\xdb\xfa\x1a\xcb\xee\x27\xe0\x7b\x2d\x80\x53\x97\x17\x6b\x2e\x72\x8c\xec\x1e\x89\xd2\xfc\xb8\x2c\xac\x9b\x9c\xd9\x77\xab\x27\xfe\x3f\x7b\xba\xdf\x99\x93\xf6\xeb\x7d\x62\x73\x29\x48\xd9\x95\xa8\xd6\x10\x86\x3d\xe1\xfc\x9f\xc5\x43\x2e\xe2\xd1\x57\xab\x4e\x5d\x8a\xd7\xf1\x00\x78\xec\x95\x81\x66\xf3\xea\xf1\x93\xc9\x96\x90\xcc\x8c\xa9\xbb\x3e\xf5\xbf\x1c\x90\x2b\x96\xee\x67\x86\x49\xcb\x72\x20\x98\x66\x8e\xc6\xfa\xc8\xf6\x21\xe3\xc8\x50\xe5\xd7\x12\x0e\xff\xea\xb0\x8b\x53\x34\x17\xb5\x93\x79\xaa\x44\xee\xe4\x09\xfb\xa2\xea\x54\x46\x6b\xd4\x20\x5e\x85\x38\x0d\xa3\x9e\x78\xeb\x79\x68\xca\xaa\x0d\x1c\xbe\x8a\xf3\x73\x8c\x7d\x4e\x6f\xfd\xc1\x43\x09\x5c\x00\xa1\xdf\xfd\xa3\xeb\xa5\x1f\x5c\x7b\xcf\x46\x19\x34\x40\x0e\x99\xf1\xef\x22\x3a\x9b\x3c\x42\xba\x48\x26\x77\x27\x5e\xb8\x8a\x94\x49\x21\x3d\xca\xe5\x11\x90\x28\xe6\x2a\xf6\x13\xc1\xad\xc2\xc2\x4c\xe5\xcc\xc9\x88\xf6\x62\xb8\x2c\xa7\x22\xb4\x12\x1f\xd1\xf0\xca\xfa\x41\x4b\x63\x9f\x7a\x45\x7f\x8c\xde\x33\x00\x4a\x25\x98\xf8\x70\x78\x93\x27\xbb\x30\x35\x4d\xe4\x2f\xc3\x02\xf9\xa2\x8f\x82\x91\x07\x5b\xed\x2b\x59\x2e\xc3\xd9\x4a\x89\x76\x5a\x00\x6f\x38\x46\xa0\x37\x73\x6a\x68\xf1\x4f\x3e\xc3\x03\x53\x1d\xb5\x9f\x0c\x6e\x65\x85\x6c\x61\xfc\x7d\x6a\x10\xb5\x18\x99\xbe\xb9\xd6\x12\x2c\xcd\x42\xab\xee\x67\xd2\xf3\xa7\x94\xe6\x2f\x25\xed\x7f\xcf\x22\xc0\xb6\x63\x02\x16\xdb\x4b\xc6\xa7\x38\x15\xa0\x55\x77\xdf\x68\x11\x3e\x52\xb9\x68\x07\x25\x2b\x77\x2b\x8f\x29\x5a\x68\x4a\xb4\x4f\xad\x37\xc1\xfb\x5a\x57\x9a\x88\x87\x37\xa9\x57\xbd\x4a\x08\x9b\xf6\x5f\xb2\xde\x21\x5c\xe7\x59\x2f\x56\xe3\x1d\x52\xfd\xea\x29\xca\x7a\x35\xd7\x68\xf3', 1) \ No newline at end of file diff --git a/specx/pytransform/__init__.py b/specx/pytransform/__init__.py new file mode 100644 index 0000000..a2e5ef7 --- /dev/null +++ b/specx/pytransform/__init__.py @@ -0,0 +1,375 @@ +# These module alos are used by protection code, so that protection +# code needn't import anything +import os +import platform +import sys +import struct + +# Because ctypes is new from Python 2.5, so pytransform doesn't work +# before Python 2.5 +# +from ctypes import cdll, c_char, c_char_p, c_int, c_void_p, \ + pythonapi, py_object, PYFUNCTYPE, CFUNCTYPE, CDLL +from fnmatch import fnmatch + +# +# Support Platforms +# +plat_path = 'platforms' + +plat_table = ( + ('windows', ('windows', 'cygwin-*')), + ('darwin', ('darwin', 'ios')), + ('linux', ('linux*',)), + ('freebsd', ('freebsd*', 'openbsd*')), + ('poky', ('poky',)), + ) + +arch_table = ( + ('x86', ('i?86', )), + ('x86_64', ('x64', 'x86_64', 'amd64', 'intel')), + ('arm', ('armv5',)), + ('armv7', ('armv7l',)), + ('aarch32', ('aarch32',)), + ('aarch64', ('aarch64', 'arm64')) + ) + +# +# Hardware type +# +HT_HARDDISK, HT_IFMAC, HT_IPV4, HT_IPV6, HT_DOMAIN = range(5) + +# +# Global +# +_pytransform = None + + +class PytransformError(Exception): + pass + + +def dllmethod(func): + def wrap(*args, **kwargs): + return func(*args, **kwargs) + return wrap + + +@dllmethod +def version_info(): + prototype = PYFUNCTYPE(py_object) + dlfunc = prototype(('version_info', _pytransform)) + return dlfunc() + + +@dllmethod +def init_pytransform(): + major, minor = sys.version_info[0:2] + # Python2.5 no sys.maxsize but sys.maxint + # bitness = 64 if sys.maxsize > 2**32 else 32 + prototype = PYFUNCTYPE(c_int, c_int, c_int, c_void_p) + init_module = prototype(('init_module', _pytransform)) + ret = init_module(major, minor, pythonapi._handle) + if (ret & 0xF000) == 0x1000: + raise PytransformError('Initialize python wrapper failed (%d)' + % (ret & 0xFFF)) + return ret + + +@dllmethod +def init_runtime(): + prototype = PYFUNCTYPE(c_int, c_int, c_int, c_int, c_int) + _init_runtime = prototype(('init_runtime', _pytransform)) + return _init_runtime(0, 0, 0, 0) + + +@dllmethod +def encrypt_code_object(pubkey, co, flags): + prototype = PYFUNCTYPE(py_object, py_object, py_object, c_int) + dlfunc = prototype(('encrypt_code_object', _pytransform)) + return dlfunc(pubkey, co, flags) + + +@dllmethod +def generate_license_file(filename, priname, rcode, start=-1, count=1): + prototype = PYFUNCTYPE(c_int, c_char_p, c_char_p, c_char_p, c_int, c_int) + dlfunc = prototype(('generate_project_license_files', _pytransform)) + return dlfunc(filename.encode(), priname.encode(), rcode.encode(), + start, count) if sys.version_info[0] == 3 \ + else dlfunc(filename, priname, rcode, start, count) + + +@dllmethod +def get_registration_code(): + prototype = PYFUNCTYPE(py_object) + dlfunc = prototype(('get_registration_code', _pytransform)) + return dlfunc() + + +@dllmethod +def get_expired_days(): + prototype = PYFUNCTYPE(py_object) + dlfunc = prototype(('get_expired_days', _pytransform)) + return dlfunc() + + +def get_hd_info(hdtype, size=256): + t_buf = c_char * size + buf = t_buf() + if (_pytransform.get_hd_info(hdtype, buf, size) == -1): + raise PytransformError('Get hardware information failed') + return buf.value.decode() + + +def show_hd_info(): + return _pytransform.show_hd_info() + + +def get_license_info(): + info = { + 'EXPIRED': None, + 'HARDDISK': None, + 'IFMAC': None, + 'IFIPV4': None, + 'DOMAIN': None, + 'DATA': None, + 'CODE': None, + } + rcode = get_registration_code().decode() + index = 0 + if rcode.startswith('*TIME:'): + from time import ctime + index = rcode.find('\n') + info['EXPIRED'] = ctime(float(rcode[6:index])) + index += 1 + + if rcode[index:].startswith('*FLAGS:'): + info['FLAGS'] = 1 + index += len('*FLAGS:') + 1 + + prev = None + start = index + for k in ['HARDDISK', 'IFMAC', 'IFIPV4', 'DOMAIN', 'FIXKEY', 'CODE']: + index = rcode.find('*%s:' % k) + if index > -1: + if prev is not None: + info[prev] = rcode[start:index] + prev = k + start = index + len(k) + 2 + info['CODE'] = rcode[start:] + i = info['CODE'].find(';') + if i > 0: + info['DATA'] = info['CODE'][i+1:] + info['CODE'] = info['CODE'][:i] + return info + + +def get_license_code(): + return get_license_info()['CODE'] + + +def _match_features(patterns, s): + for pat in patterns: + if fnmatch(s, pat): + return True + + +def _gnu_get_libc_version(): + try: + prototype = CFUNCTYPE(c_char_p) + dlfunc = prototype(('gnu_get_libc_version', CDLL(''))) + ver = dlfunc() + return ver.decode().split('.') + except Exception: + pass + + +def format_platform(platid=None): + if platid: + return os.path.normpath(platid) + + plat = platform.system().lower() + mach = platform.machine().lower() + + for alias, platlist in plat_table: + if _match_features(platlist, plat): + plat = alias + break + + if plat == 'linux': + cname, cver = platform.libc_ver() + if cname == 'musl': + plat = 'alpine' + elif cname == 'libc': + plat = 'android' + elif cname == 'glibc': + v = _gnu_get_libc_version() + if v and len(v) >= 2 and (int(v[0]) * 100 + int(v[1])) < 214: + plat = 'centos6' + + for alias, archlist in arch_table: + if _match_features(archlist, mach): + mach = alias + break + + if plat == 'windows' and mach == 'x86_64': + bitness = struct.calcsize('P'.encode()) * 8 + if bitness == 32: + mach = 'x86' + + return os.path.join(plat, mach) + + +# Load _pytransform library +def _load_library(path=None, is_runtime=0, platid=None): + path = os.path.dirname(__file__) if path is None \ + else os.path.normpath(path) + + plat = platform.system().lower() + if plat == 'linux': + filename = os.path.abspath(os.path.join(path, '_pytransform.so')) + elif plat == 'darwin': + filename = os.path.join(path, '_pytransform.dylib') + elif plat == 'windows': + filename = os.path.join(path, '_pytransform.dll') + elif plat == 'freebsd': + filename = os.path.join(path, '_pytransform.so') + else: + raise PytransformError('Platform %s not supported' % plat) + + if platid is not None or not os.path.exists(filename) or not is_runtime: + libpath = platid if platid is not None and os.path.isabs(platid) else \ + os.path.join(path, plat_path, format_platform(platid)) + filename = os.path.join(libpath, os.path.basename(filename)) + + if not os.path.exists(filename): + raise PytransformError('Could not find "%s"' % filename) + + try: + m = cdll.LoadLibrary(filename) + except Exception as e: + raise PytransformError('Load %s failed:\n%s' % (filename, e)) + + # Removed from v4.6.1 + # if plat == 'linux': + # m.set_option(-1, find_library('c').encode()) + + if not os.path.abspath('.') == os.path.abspath(path): + m.set_option(1, path.encode() if sys.version_info[0] == 3 else path) + + # Required from Python3.6 + m.set_option(2, sys.byteorder.encode()) + + if sys.flags.debug: + m.set_option(3, c_char_p(1)) + m.set_option(4, c_char_p(not is_runtime)) + + # Disable advanced mode if required + # m.set_option(5, c_char_p(1)) + + return m + + +def pyarmor_init(path=None, is_runtime=0, platid=None): + global _pytransform + _pytransform = _load_library(path, is_runtime, platid) + return init_pytransform() + + +def pyarmor_runtime(path=None): + try: + pyarmor_init(path, is_runtime=1) + init_runtime() + except Exception as e: + print(e) + sys.exit(1) + + +# +# Not available from v5.6 +# +def generate_capsule(licfile): + prikey, pubkey, prolic = _generate_project_capsule() + capkey, newkey = _generate_pytransform_key(licfile, pubkey) + return prikey, pubkey, capkey, newkey, prolic + + +@dllmethod +def _generate_project_capsule(): + prototype = PYFUNCTYPE(py_object) + dlfunc = prototype(('generate_project_capsule', _pytransform)) + return dlfunc() + + +@dllmethod +def _generate_pytransform_key(licfile, pubkey): + prototype = PYFUNCTYPE(py_object, c_char_p, py_object) + dlfunc = prototype(('generate_pytransform_key', _pytransform)) + return dlfunc(licfile.encode() if sys.version_info[0] == 3 else licfile, + pubkey) + + +# +# Deprecated functions from v5.1 +# +@dllmethod +def encrypt_project_files(proname, filelist, mode=0): + prototype = PYFUNCTYPE(c_int, c_char_p, py_object, c_int) + dlfunc = prototype(('encrypt_project_files', _pytransform)) + return dlfunc(proname.encode(), filelist, mode) + + +def generate_project_capsule(licfile): + prikey, pubkey, prolic = _generate_project_capsule() + capkey = _encode_capsule_key_file(licfile) + return prikey, pubkey, capkey, prolic + + +@dllmethod +def _encode_capsule_key_file(licfile): + prototype = PYFUNCTYPE(py_object, c_char_p, c_char_p) + dlfunc = prototype(('encode_capsule_key_file', _pytransform)) + return dlfunc(licfile.encode(), None) + + +@dllmethod +def encrypt_files(key, filelist, mode=0): + t_key = c_char * 32 + prototype = PYFUNCTYPE(c_int, t_key, py_object, c_int) + dlfunc = prototype(('encrypt_files', _pytransform)) + return dlfunc(t_key(*key), filelist, mode) + + +@dllmethod +def generate_module_key(pubname, key): + t_key = c_char * 32 + prototype = PYFUNCTYPE(py_object, c_char_p, t_key, c_char_p) + dlfunc = prototype(('generate_module_key', _pytransform)) + return dlfunc(pubname.encode(), t_key(*key), None) + +# +# Compatible for PyArmor v3.0 +# +@dllmethod +def old_init_runtime(systrace=0, sysprofile=1, threadtrace=0, threadprofile=1): + '''Only for old version, before PyArmor 3''' + pyarmor_init(is_runtime=1) + prototype = PYFUNCTYPE(c_int, c_int, c_int, c_int, c_int) + _init_runtime = prototype(('init_runtime', _pytransform)) + return _init_runtime(systrace, sysprofile, threadtrace, threadprofile) + + +@dllmethod +def import_module(modname, filename): + '''Only for old version, before PyArmor 3''' + prototype = PYFUNCTYPE(py_object, c_char_p, c_char_p) + _import_module = prototype(('import_module', _pytransform)) + return _import_module(modname.encode(), filename.encode()) + + +@dllmethod +def exec_file(filename): + '''Only for old version, before PyArmor 3''' + prototype = PYFUNCTYPE(c_int, c_char_p) + _exec_file = prototype(('exec_file', _pytransform)) + return _exec_file(filename.encode()) diff --git a/specx/pytransform/__pycache__/__init__.cpython-36.pyc b/specx/pytransform/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..a72badb Binary files /dev/null and b/specx/pytransform/__pycache__/__init__.cpython-36.pyc differ diff --git a/specx/pytransform/_pytransform.so b/specx/pytransform/_pytransform.so new file mode 100644 index 0000000..7d5e83c Binary files /dev/null and b/specx/pytransform/_pytransform.so differ diff --git a/specx/pytransform/license.lic b/specx/pytransform/license.lic new file mode 100644 index 0000000..67c39e6 --- /dev/null +++ b/specx/pytransform/license.lic @@ -0,0 +1 @@ +HERhc2hpbmdzb2Z0IFB5c2hpZWxkIFByb2plY3Qlk6W630PQ3fvNMf9LXa2Z/FdwoVCzhcbpqNGCrKemcDxn1XUJRbgIUXywnc/WZrlr4mLks8EOthDV3x4eoFj2UIkEp5dyeOAr+F7unNMNfSis3Gx0IoHvpCe3aGQGvX/aS8tSMMR741qM08fu04U5w91rej7tPRL6UeQH2iY/Ew== \ No newline at end of file diff --git a/specx/pytransform/pytransform.key b/specx/pytransform/pytransform.key new file mode 100644 index 0000000..a811f52 Binary files /dev/null and b/specx/pytransform/pytransform.key differ diff --git a/speech_tools-1.2.96-beta.tar.gz b/speech_tools-1.2.96-beta.tar.gz new file mode 100644 index 0000000..43b8095 Binary files /dev/null and b/speech_tools-1.2.96-beta.tar.gz differ